Commit Graph
530 Commits
Author SHA1 Message Date
haelyra 6fa858fbdf maint: integrate reviewed contribution #3803 2026-10-29 11:27:56 -07:00
haelyra 023acf21d0 maint: integrate reviewed contribution #3794 2026-10-29 11:27:56 -07:00
haelyra 6a3c45ac7f maint: integrate reviewed contribution #3601 2026-10-29 11:25:27 -07:00
haelyra ff147d751f maint: integrate reviewed contribution #3593 2026-10-29 11:25:25 -07:00
haelyra f77db133ac maint: integrate reviewed contribution #3614 2026-10-29 11:25:23 -07:00
haelyra a60c58ab42 maint: integrate reviewed contribution #3780 2026-10-29 11:25:19 -07:00
haelyra d2c71fd0e9 maint: integrate reviewed contribution #3588 2026-10-29 11:25:18 -07:00
haelyra 09e0eb7d7f maint: integrate reviewed contribution #3591 2026-10-29 11:23:24 -07:00
minteeqahmed-png ef82fcb130 fix(scripts): strip unquoted YAML comments and preserve mixed body line endings 2026-10-29 21:49:53 +05:00
minteeqahmed-png fb4683317f fix(scripts): harden gemini-adapt-agents for CRLF, unknown flags, and block tool lists 2026-10-29 20:56:00 +05:00
longankang 8e4a6c03bf fix: validate Codex hook references in plugin cache
Collect string-valued manifest.hooks as a file reference so missing files, directories, and paths outside the cache fail validation. Add regression coverage for valid and invalid hook references while preserving non-string and absent-hook behavior.

Closes #3786
2026-10-29 15:30:33 +08:00
Ali Arslan 4ebe4c8bc3 fix(tests): skip the inert OpenCode stub when loading plugin factories 2026-10-28 22:50:14 +05:00
Ali Arslan 6b11ffeb7d fix(tests): assert the inert OpenCode stub as a V2 definition object 2026-10-28 22:48:50 +05:00
Yann Roberto f1f542044c fix(install): accept all supported component families in config 2026-10-28 16:58:35 +08:00
Muhammad Zubair 0618bdc7a8 test(claw): keep the askClaude tests from spawning a real claude CLI 2026-10-27 23:58:20 +05:00
Alan Vo 5701a4f2e1 fix: respect CLAUDE_CONFIG_DIR with WSL Windows-path conversion
(cherry picked from commit aaacbc7592)
2026-10-20 17:40:58 -04:00
Eneko Ruiz 65f7dfb735 fix: reject missing session database and limit values
(cherry picked from commit 299899941d)
2026-10-20 17:40:57 -04:00
Gaurav Dubey e4666abb01 fix(opencode): ship @opencode-ai/plugin as a runtime dependency
The compiled OpenCode tools import `tool` from `@opencode-ai/plugin/tool`
at module top level, and the hooks plugin imports those tools statically.
The package was only a devDependency, so production installs (OpenCode's
npm plugin cache, `npm install --omit=dev`) could not resolve it and the
whole plugin failed to load.

Move it to `dependencies` and add a build-opencode regression test that
fails when the built bundle imports a package not declared as a runtime
dependency.

Fixes #3543

(cherry picked from commit 106024070e)
2026-10-20 17:38:25 -04:00
Eneko Ruiz 5367671a22 fix: reject missing session inspection option values
(cherry picked from commit a6619f5efd)
2026-10-20 17:38:13 -04:00
KET ⚡ 72cf932195 fix(worker): clarify invalid task file diagnostics 2026-10-16 22:29:18 +05:30
Gaurav Dubey 159e389927 fix(dashboard): log when the browser cannot be opened automatically
openBrowser() captures the launcher's async error internally, so a missing
xdg-open/open left headless users with no hint why no browser appeared.
Wrap the injected spawn in the entrypoint to report the failure on stderr
with the dashboard URL; the shared platform-launch helper is unchanged.
2026-10-16 08:54:36 +00:00
Gaurav Dubey 405610bc29 fix(dashboard): keep the web dashboard running when no browser launcher is installed
The auto-open in the dashboard-web.js entrypoint spawned xdg-open/open
without an 'error' listener. When the launcher is missing (headless
Linux, containers, many WSL setups) spawn reports ENOENT asynchronously,
the try/catch cannot see it, and the unhandled 'error' event kills the
process right after the banner is printed.

Use the shared openBrowser() helper from scripts/lib/platform-launch.js,
which already handles the child's error event and unrefs the launcher,
as plan-canvas.js and control-pane.js do.

Fixes #3600
2026-10-16 04:37:11 +00:00
KET ⚡ dc42aa5409 fix(worker): reject non-file task inputs 2026-10-15 22:59:39 +05:30
azank 868ac1e894 test(hooks): build the session-start test env without mutating it
AGENTS.md asks for new objects rather than mutation. Leave NODE_PATH out
with a rest destructure, as pre-bash-tmux-reminder.test.js does, instead
of deleting it from the env after building it.
2026-10-15 19:21:38 +05:00
azank 218f4ae85f test(hooks): isolate the no-deps session-start test from NODE_PATH and the context cap
A NODE_PATH that exposes js-yaml let the regression pass the test, and an
inherited ECC_SESSION_START_MAX_CHARS=0 made it fail falsely. Drop
NODE_PATH from the child environment and pin the cap to 8000, as
session-start-alias-unavailable.test.js does.
2026-10-15 19:08:53 +05:00
azank 1d704e75e3 fix(hooks): load js-yaml lazily so session-start runs without node_modules
The merge of #3470 moved the Flutter check in scripts/lib/project-detect.js
onto js-yaml with a top-level require. session-start.js loads that module
on every SessionStart, and plugin installs have no node_modules (#2822),
so the hook now exits 1 with "Cannot find module 'js-yaml'" in every
project, not only Dart ones.

Require js-yaml inside hasFlutterSdkDependency instead. When it is
missing, the existing catch returns false: Dart is still detected from
pubspec.yaml and only the Flutter refinement is skipped. Installs that
have their dependencies behave as before.

Add a case to the no-node_modules plugin install test that runs
session-start.js against a pubspec.yaml project. It fails on main.
2026-10-15 16:38:43 +05:00
Yann Roberto 932aa393c1 fix: prevent GitHub work item identity collisions 2026-10-15 18:50:54 +08:00
haelyra 70f571e205 test: drain synthetic scanner input before reporting status 2026-10-11 20:23:42 -04:00
haelyra 87c136fcae fix: integrate strict issue targeting and Windows Python discovery 2026-10-11 15:07:29 -04:00
haelyra c7a467061b Merge remote-tracking branch 'origin/pr-3523' into steward/late-arrivals-20261011 2026-10-11 15:00:38 -04:00
akushonkamen 3cf0e709d5 fix(github-coordination): reject malformed issue numbers instead of truncating them
normalizeIssueNumber parsed with Number.parseInt, which stops at the
first non-digit ("42oops" -> 42, "42.9" -> 42, "4e2" -> 4) and loses
precision past 2^53 (9007199254740993 became 9007199254740992). The CLI
shares this helper for --issue, --limit, and the positional issue number,
so malformed values silently targeted the wrong issue before any integer
guard downstream could notice.

Validate the entire trimmed decimal token and require
Number.isSafeInteger so malformed or out-of-range values throw
"Invalid issue number" during argument parsing, before the state store
is opened or GitHub is contacted. Whitespace, leading plus, and leading
zero tolerance is preserved. Regression coverage added at both the
library level (tests/lib/github-coordination-gh-api.test.js) and the CLI
argument parser (tests/scripts/github-coordination.test.js).

Fixes #3514
2026-10-12 01:25:09 +08:00
haelyra 0d4fd902ca fix: carry verified storage capability and deterministic Canvas checks 2026-10-11 12:49:24 -04:00
haelyra 33372e9970 test: make presence expiry controls deterministic 2026-10-11 12:45:43 -04:00
akushonkamen cbca1dc2cc fix(claude-plugin): target explicitly disabled destinations in scope migration
Issue #3492: scope migration aborted with generic verification errors in
two real states. When the destination scope is installed but inventory
reports enabled:false because the user explicitly set
enabledPlugins["ecc@ecc"]: false, setup now throws a targeted
DESTINATION_EXPLICITLY_DISABLED error naming the setting and file and
offering the native claude plugin enable recovery, leaving the user's
choice untouched. The generic not-enabled error also gains the enable
command in its recovery list.

uninstallSource now accepts a destination-only state when the source
scope is gone from the fresh inventory even if the uninstall command
errored, and SOURCE_UNINSTALL_FAILED recovery no longer suggests
uninstalling a source scope the inventory no longer lists; it prepends
claude plugin list --json so the stuck state can be inspected.

Tests: node tests/lib/claude-scope-migration.test.js — five new cases
cover explicitly disabled resume and single-scope destinations across
user/project/local settings files, the generic fallback keeping the
enable path, an uninstall error with the source already absent, and
non-circular recovery. 16 -> 21 passing; red against unpatched scripts
is 15 passed / 6 failed. Full-suite failure set is byte-identical to
unpatched HEAD in a zero-dependency environment.

Also sync the pinned SOURCE_UNINSTALL_FAILED recovery in
tests/scripts/setup.test.js ('migration JSON failures retain phase,
scopes, and exact recovery') with the new claude plugin list --json
diagnostic: 29 passed / 1 failed on the patched tree before the sync,
30 passed / 0 failed after, identical to clean 2d515e4f.
2026-10-11 20:48:43 +08:00
haelyra a0b286011a test: preserve Windows GateGuard corpus denial policy 2026-10-11 06:15:49 -04:00
haelyra 2bfee727e2 fix(install): preserve user TypeScript module scopes and retained boundaries 2026-10-11 03:32:07 -04:00
haelyra f1fafe670c test: preserve hook-only ESM workflows with user module scopes 2026-10-11 03:11:20 -04:00
haelyra 33b656c241 Merge branch 'fix/commands-commonjs-runtime-20261011' of /Users/hira/Documents/ECC/ecc-command-runtime-repair-20261011 into integration/ecc-043-20261011 2026-10-11 03:09:34 -04:00
haelyra e9f95e394f fix: reconcile profile projections and selected-model fallback checks 2026-10-11 03:05:59 -04:00
haelyra dbfd6ab009 fix: protect commands-only CommonJS runtime in Claude installs
Reuse the existing scripts boundary asset and guard for commands-core without hooks. Preflight selected helper scopes and preserve user module metadata, unowned/edited JS interpretation, and boundary ownership through uninstall. Actual installed ESM help/JSON, receipt, reinstall/uninstall and 34 focused cases pass. OpenCode boundary 8/8, adapters 51/51, manifests 43/43; focused coverage exceeds 80%. Two root-owned legacy ESM core-profile fixtures require correction; no unsupported states weakened.
2026-10-11 03:04:04 -04:00
haelyra bd966c9bfa test: reproduce commands-only ESM runtime and scope conflicts
Actual installed skills-health --help fails with require undefined in ESM Claude project and home fixtures. RED evidence: command-runtime-evidence/red-final.log; bounded repair remains pending.
2026-10-11 02:57:28 -04:00
haelyra c79a7d0321 fix(install): give shared command helpers one module owner 2026-10-11 02:22:53 -04:00
haelyra f58f15af30 Merge branch 'steward/install-20261011' of /Users/hira/Documents/ECC/ecc-review-install-20261011 into integration/ecc-043-20261011 2026-10-11 02:14:56 -04:00
haelyra d6aab8393f Merge branch 'steward/docs-providers-20261011' of /Users/hira/Documents/ECC/ecc-review-docs-providers-20261011 into integration/ecc-043-20261011
# Conflicts:
#	manifests/context-packs/skill-triggers@1.json
2026-10-11 02:14:56 -04:00
haelyra e611cf66d0 fix(state): serialize work-item claims and preserve existing ownership 2026-10-11 02:08:19 -04:00
haelyraandGeronimo da87114e05 fix: honor global preview in every guided install entry
Scoped adaptation from PR #3088. Keep the canonical atomic writer and dispatcher; exclude the broader provider/tool changes.

Co-authored-by: Geronimo <varungore1@gmail.com>
2026-10-11 02:03:09 -04:00
haelyra 80964ec4fe fix(install): ship standalone skill-health command runtime 2026-10-11 02:00:27 -04:00
haelyra 4f5970bf4f fix(codex): ship named CLI profile files with ownership protection
Reproduced issue #3485 on installed Codex CLI 0.162.0. Keep user legacy choices for explicit migration and verify disposable install, repair, reinstall and removal.
2026-10-11 01:55:54 -04:00
Yann Roberto d9efa98bb6 fix(install): preserve locale selections during auto-update 2026-10-11 13:41:34 +08:00
haelyra a0ae95231d fix(codex): canonicalize native Windows task paths before dispatch 2026-10-10 18:56:12 -04:00