Commit Graph
1780 Commits
Author SHA1 Message Date
Jeffrey Montoya b7f80ff012 perf(gateguard): load modules and parse searches only when a call needs them 2026-09-30 11:35:49 -04:00
Yi-111-a b09a26aaad fix(package): publish scripts/github-coordination.js for the /epic-* commands
`package.json` `files[]` enumerates each top-level `scripts/*.js` by hand, and
`scripts/github-coordination.js` was never added. npm therefore drops it from
the tarball while `scripts/lib/` still ships wholesale, so only the CLI entry
disappears.

All seven `/epic-*` commands ship in `commands/` and each instructs the agent
to run:

    node scripts/github-coordination.js <command> <issue> --repo <owner/repo>

so anyone who installs from npm -- including the documented
`npm i -g ecc-universal` path -- gets seven commands that cannot run:

    Error: Cannot find module '.../ecc-universal/scripts/github-coordination.js'

It works from a git clone, which is what masked it locally.

Add the missing `files[]` entry, the matching publish-surface allowlist entry in
`tests/scripts/npm-publish-surface.test.js` (CONTRIBUTING asks for both), and a
guard test that fails when any published command invokes a `scripts/*.js` that
the publish surface does not cover. The guard reproduces this exact bug: with
`package.json` reverted it fails naming only `github-coordination.js`.

Refs #3270
2026-09-30 21:09:38 +08:00
drakeo338andClaude Sonnet 5.5 334b7847bd fix(hooks): keep ~/.claude eligible as project sharing root with CLAUDE_CONFIG_DIR
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 12:43:02 +00:00
FenjuFu 74836ce65f fix(llm): forward tool definitions to Ollama
OllamaProvider built the /api/chat payload without the tools from
LLMInput, so Ollama models were never told any tools existed and a
ReActAgent backed by Ollama never ran one. The response side already
parsed message.tool_calls.

Send the tools in the OpenAI function format that /api/chat accepts,
matching the other providers.

Fixes #3274

Signed-off-by: FenjuFu <fufenjupku@gmail.com>
2026-09-30 20:38:19 +08:00
FenjuFu d6f20191de fix(llm): strip leaked reasoning from self-hosted model output
Self-hosted reasoning models served through vLLM or llama.cpp without a
reasoning parser, or through Ollama without a thinking template, return
their chain of thought inside message content. The OpenAI-compatible
providers and the Ollama provider passed it through verbatim, so
LLMOutput.content and ReActAgent final answers began with the reasoning.

Models whose chat template prefills <think> in the generation prompt
(Spark-X2.5, Qwen3 thinking variants) only emit the closing tag, so the
content arrives as "...</think>answer" with no opening tag.

Add strip_reasoning() and apply it in the OpenAI, Astraflow, Atlas and
Ollama providers. A <think> that does not open the output is kept as a
literal, and unterminated reasoning is left unchanged.

Signed-off-by: FenjuFu <fufenjupku@gmail.com>
2026-09-30 18:41:24 +08:00
Geronimo 5f7ba84b38 Merge branch 'affaan-m:main' into main 2026-09-30 16:02:28 +05:30
Seekers2001 b43a6770ab Merge upstream/main into codex/docs-governance-audit-foundation 2026-09-30 17:33:07 +08:00
Jeffrey Montoya b15c0538f6 refactor(gateguard): split change profile and search filters into focused modules 2026-09-30 00:23:08 -04:00
Jeffrey Montoya 3055eb3746 fix(gateguard): link SARIF findings to the evaluated corpus 2026-09-30 00:04:11 -04:00
Jeffrey Montoya 1221a8727f fix(gateguard): honour directory-qualified include globs 2026-09-30 00:04:11 -04:00
drakeo338 01c9a670de fix(hooks): honor CLAUDE_CONFIG_DIR for the default agent data home
getDefaultClaudeAgentDataHome ignored CLAUDE_CONFIG_DIR and always returned ~/.claude, so sessions with a relocated Claude config dir wrote ECC data to the wrong place when ECC_AGENT_DATA_HOME was unset. Fixes #3266.
2026-09-30 03:06:16 +00:00
Jeffrey Montoya 216fe89c36 feat(gateguard): write scenario gate results as SARIF 2026-09-29 22:20:41 -04:00
Jeffrey Montoya 8a1f763184 test(gateguard): create file symlinks for the hard-link case on Windows 2026-09-29 21:50:27 -04:00
Jeffrey Montoya 10639a0c9e fix(gateguard): gate NotebookEdit and hard-linked targets
NotebookEdit is gated as a first-touch edit of notebook_path.
A file with more than one hard link gets no credit, trivial, sibling or cap allowance.
2026-09-29 21:50:26 -04:00
Jeffrey Montoya 4e33e29005 test(gateguard): use descriptive helper and fixture names 2026-09-29 21:50:26 -04:00
Jeffrey Montoya 7a8d8437ef test(gateguard): add comment-context and exported-member scenarios 2026-09-29 21:50:26 -04:00
Jeffrey Montoya 20eb2395e9 fix(gateguard): gate MultiEdit by its file_path and widen surface checks
Also refuses rg -z as read-only and never writes metrics through a symlink.
2026-09-29 21:50:26 -04:00
Jeffrey Montoya 6e677b008c fix(gateguard): judge comment-only edits against the file they change 2026-09-29 21:50:25 -04:00
Jeffrey Montoya 82420f061a fix(gateguard): treat directive comments and continuations as code 2026-09-29 21:50:24 -04:00
Jeffrey Montoya 42e9072136 feat(gateguard): credit test files by their module stem
Drop the hardcoded baseline alias from the evaluation script and refresh the results.
2026-09-29 21:50:23 -04:00
Jeffrey Montoya 21ea5f96a8 feat(gateguard): profile shell scripts and Python module constants 2026-09-29 21:50:22 -04:00
Jeffrey Montoya 0301055327 feat(gateguard): build condensed code hints from the question ids 2026-09-29 21:50:21 -04:00
Jeffrey Montoya 142ecf8fdb test(gateguard): replay the scenario corpus as a regression test 2026-09-29 21:50:20 -04:00
Jeffrey Montoya f7e4735cca feat(gateguard): add scenario corpus and evaluation script
Replays 16 labelled sessions against the working tree and git-ref baselines.
2026-09-29 21:50:20 -04:00
Jeffrey Montoya 4c035dd834 feat(gateguard): record opt-in decision metrics 2026-09-29 21:50:20 -04:00
Jeffrey Montoya d591999ec0 feat(gateguard): add metrics event schema and report script 2026-09-29 21:50:19 -04:00
Jeffrey Montoya 15d4f169d3 feat(gateguard): gate sensitive targets in subagents
A subagent's pass does not unlock the path for the parent.
2026-09-29 21:50:19 -04:00
Jeffrey Montoya 6f0fbb6bc9 feat(gateguard): keep session-keyed state for 8 idle hours
The project-directory fallback keeps the 30-minute window.
2026-09-29 21:50:18 -04:00
Jeffrey Montoya 77ddf9a792 feat(gateguard): pass read-only shell commands before the routine gate
The first command that can change something is still gated.
2026-09-29 21:50:17 -04:00
Jeffrey Montoya c3b2a7e627 feat(gateguard): name the closest search that did not count
One sanitized line in the denial with a reason code, from the cached turn scan.
2026-09-29 21:50:15 -04:00
Jeffrey Montoya ad0d9183ff feat(gateguard): pass comment and whitespace-only edits
The file stays unchecked, so the next code change is still gated; counted in trivial_allows.
2026-09-29 21:50:14 -04:00
Jeffrey Montoya 10f67715b1 feat(gateguard): ask code questions that fit the change
Stable question ids; local call sites instead of importers when no public
declaration is touched; data question only when the change handles data.
2026-09-29 21:50:13 -04:00
Jeffrey Montoya a7fd960b20 feat(gateguard): add change profile for first-touch edits
Pure, bounded analysis of Edit/Write text: public surface, data handling, and comment/whitespace-only edits.
2026-09-29 21:50:12 -04:00
Jeffrey Montoya ea86d156fe refactor(gateguard): move search evidence and state helpers to lib 2026-09-29 21:50:12 -04:00
Jeffrey Montoya 442a6da150 test(gateguard): cover added sensitive key and credential names
List id_ecdsa, id_dsa, .netrc and .pgpass as sensitive in the skill docs.
2026-09-29 21:50:12 -04:00
Jeffrey Montoya bd12ff4cfa fix(gateguard): recognise all PowerShell -Exclude spellings
Filter parameters resolve by unambiguous prefix, colon form and comma lists.
Unresolvable parameters and their values are never a stem source.
2026-09-29 21:50:11 -04:00
Jeffrey Montoya e5b95ce921 fix(gateguard): match glob bracket classes exactly
Include and exclusion globs now honour class members, ranges and negation.
A malformed class admits nothing as an include and covers the target as an exclusion.
2026-09-29 21:50:11 -04:00
Jeffrey MontoyaandSulimanAbdulrazzaq e98a9da288 feat(gateguard): improve first-touch signal quality and session efficiency
- Ask class-specific first-touch questions (instruction, test, prose,
  config, code); code questions are unchanged.
- Credit a completed Glob/Grep/LS or shell search from the current human
  turn that covered the target; Read and exclusion globs never count.
- Collapse same-class new-file creations in one directory within a turn.
- Add opt-in GATEGUARD_FACT_FORCE_MAX_DENIALS session cap (from #2755).
- Always gate sensitive targets, judged on lexical and real paths.
- Canonicalize checked-path keys.

Closes #2608

Co-authored-by: SulimanAbdulrazzaq <suliman9000a@gmail.com>
2026-09-29 21:49:46 -04:00
Santhi Prakash c4c5170654 Merge branch 'main' into fix/plan-orchestrate-retired-orchestrate
- Problem: main d30588f9 (integrate-reviewed-followups) added a skill and
  bumped the skill-triggers registryDigest, conflicting with this branch's
  own digest refresh for the plan-orchestrate SKILL.md edit.
- Fix: take main's manifest and recompute registryDigest over the merged
  tree via scripts/lib/context-pack-registry.js; triggers, triggersDigest
  and generatedAt untouched.
- Verification: environment reproduces both sides' committed digests on
  their own trees; merged-tree digest a6b6bce7...; validate-context-profiles
  293 skills OK; plan-orchestrate registry fixtures 8/8; full
  node tests/run-all.js = 704 passed / 0 failed.
2026-09-29 23:41:25 +00:00
haelyra 759d841b24 merge: preserve PR #3243 rollback redraw regression 2026-09-29 18:25:59 -04:00
haelyra 51a59a1112 test(gateguard): align spawned hook timeouts 2026-09-29 18:22:26 -04:00
haelyra dc3f44ad5a Merge branch 'main' into affaan/integrate-reviewed-followups-20260928 2026-09-29 18:13:54 -04:00
Santhi Prakash bd9402f774 fix(hooks): scope MCP health checks to MCP tools (#2838)
Anchor the PreToolUse and PostToolUseFailure MCP health-check matchers so non-MCP tool calls do not spawn the health hook.
2026-09-29 15:08:37 -04:00
haelyra 83b66cac25 Merge branch 'main' into fix/gateguard-session-budget 2026-09-29 14:58:53 -04:00
haelyra 97d3c73257 Merge branch 'main' into feat/bengali-language-support 2026-09-29 14:58:53 -04:00
haelyra abe2a310ca Merge branch 'main' into codex/add-ui-quality-gate 2026-09-29 14:58:53 -04:00
pasmud a85f43b1fa test(control-pane): assert the rollback redraws without waiting for a resize
The malformed-drawing rollback test took its marker baseline before the
malformed poll but only checked it after resizeAgain(). Resize redraws
the accepted view on its own, so the test still passed with the
immediate rollback redraw removed and the canvas left blank until the
operator resized.

Record the log position alongside the baseline and assert the retained
markers are on the canvas immediately after the malformed poll, before
any resize. Scoped to the drawing case, since the events and lanes
cases fail before draw() starts and correctly do not redraw.

Mutating the implementation confirms the assertion bites: disabling the
rollback draw and removing it entirely both fail it with the message
"the rollback must redraw the retained markers immediately".

Test-only change. control-plane-view-ui 27/27, control-plane-view
13/13, control-plane-view-ui-a11y 18/18, ESLint clean on the test file.
2026-09-29 14:02:41 +00:00
Seekers2001 4494ffc1e5 fix(docs-governance): audit UNC markdown links 2026-09-29 17:41:36 +08:00
Santhi Prakash 8937dde67e Merge branch 'main' of https://github.com/affaan-m/ECC into HEAD 2026-09-28 23:19:24 +00:00
Patrick Obrtal 285f1a789e fix: reconcile stale managed install operations 2026-09-28 22:07:05 +02:00