Commit Graph
1086 Commits
Author SHA1 Message Date
haelyra be230bd85c feat: integrate reviewed adapters, conversion and GateGuard improvements 2026-10-10 17:53:23 -04:00
haelyra 113f58d8e6 fix(install): reconcile obsolete managed files without deleting edits (#3256) 2026-10-10 17:50:41 -04:00
haelyra 9966fef84a fix(agents): preserve user-owned definitions during Pi conversion 2026-10-10 17:50:39 -04:00
haelyra 38c40cda73 fix: integrate fourteen reviewed runtime and hook PRs 2026-10-10 17:50:39 -04:00
haelyra 3b24eca2e6 feat(dsh): integrate version-scoped hook setup and distribution wiring 2026-10-10 17:49:37 -04:00
haelyra e9f8c3ca66 Merge PR #3256: reconcile obsolete managed installer files safely
Preserve main OpenCode lease and activation gates and native Claude namespace receipts. Detect same-size in-place edits using bigint modification and change times during hashing and before deletion; verify both races and actual public CLI reinstall lifecycles.
2026-10-10 17:49:10 -04:00
haelyra 2a69663c5c feat: integrate twelve reviewed catalog and documentation PRs 2026-10-10 17:48:53 -04:00
haelyraandmontjeffrey cc48be3c52 fix(context): bind advisory receipts and apply suggestion evidence floors
Port the evidence floor from PR #3480 onto the canonical generation-bound index; preserve policy-v5 anchors and the source PR attribution. Harden PR #3453 receipt metadata and pointer byte bounds.

Co-authored-by: montjeffrey <montjeffrey@gmail.com>
2026-10-10 17:48:20 -04:00
haelyra 603164ae79 feat(review): integrate consent-gated independent Codex review 2026-10-10 17:47:27 -04:00
haelyra a3e9ddfde7 feat(gateguard): integrate evidence-aware first-touch questions 2026-10-10 17:46:23 -04:00
haelyra 64fdb301cd Merge PR #3457: validate static carrier dependencies with the maintained TypeScript parser 2026-10-10 17:44:35 -04:00
haelyra 810e5c0176 feat(context): integrate generation-bound advisory suggestions (#3453) 2026-10-10 17:44:29 -04:00
haelyra 9d09febe5d fix(skills): scope host compatibility to target projections 2026-10-10 17:44:28 -04:00
haelyra d05a507c8b Merge PR #3490: reserve lifecycle time for Stop persistence
Isolate deadline fixtures from inherited dry-run/disabled hook flags. Remove an unapproved emoji from the new routing regression to satisfy Unicode validation.
2026-10-10 17:43:46 -04:00
haelyraandalizahidraja eb7ffd8d64 feat(agents): integrate isolated Pi conversion foundation from PR 3022
Carry the canonical IR, Pi emitter and source-schema doctor from https://github.com/affaan-m/ECC/pull/3022. Cursor and OpenCode emitters remain with the open source PR pending capability fixes.

Co-authored-by: alizahidraja <alizahidrajaa@gmail.com>
2026-10-10 17:43:18 -04:00
haelyra bb15240c9c fix(install): preserve native Claude names through repair receipts 2026-10-10 17:42:43 -04:00
haelyra b8d34fd134 feat(context): integrate verified isolated Claude generations (#3452) 2026-10-10 17:42:10 -04:00
haelyra fb1429a08c Merge PR #3478: fail closed on unavailable secret scanning
Also reject scanner errors, terminate regex options, match actual private-key headers, and verify actual rg invocation and findings.
2026-10-10 17:41:38 -04:00
haelyra 7444ea72db fix(hooks): integrate per-request Claude 5.5 cost estimation (#3491) 2026-10-10 17:41:08 -04:00
haelyra 58fc8f25a5 feat(qoder): integrate native plugin and SessionStart projection 2026-10-10 17:40:46 -04:00
haelyra c7f2c2f702 fix(context): integrate anchored implicit skill admission (#3451) 2026-10-10 17:40:07 -04:00
haelyra ecf2f31cb7 Merge PR #3476: select native Windows shell paths 2026-10-10 17:39:48 -04:00
haelyra 8757c69927 fix(hooks): integrate GNU sed execution receiver checks from PR 3493 2026-10-10 17:39:03 -04:00
haelyra 07c18210eb fix(qwen): adapt managed agents before ownership receipts 2026-10-10 17:38:07 -04:00
haelyra 4b612a73f3 Merge PR #3462: add Arabic locale while preserving Bengali distribution 2026-10-10 17:38:04 -04:00
haelyra 53dd92eef6 fix(install): integrate atomic state and global dry-run (#3486) 2026-10-10 17:38:00 -04:00
haelyra 54a9278560 Merge PR #3464: identify hooks by their input sessions 2026-10-10 17:38:00 -04:00
haelyra 41ce11d889 Merge PR #3456: adapt manual Claude component references 2026-10-10 17:37:42 -04:00
haelyra 6038e89904 Merge PR #3428: validate and sync every catalog project tree entry 2026-10-10 17:37:24 -04:00
haelyra 3b9fc44e14 Merge PR #3445: launch formatter shims safely on Windows 2026-10-10 17:37:18 -04:00
haelyra 27875bfd02 Merge PR #3444: track OpenCode skill runs and report measurement gaps 2026-10-10 17:37:11 -04:00
haelyra b40c9d5289 Merge PR #3470: detect Dart and structurally identify Flutter dependencies 2026-10-10 17:36:59 -04:00
haelyra 2a75aaa803 fix(orchestration): integrate supported Codex worker invocation (#3434) 2026-10-10 17:36:45 -04:00
haelyra dd527e3613 Merge PR #3443: match nested TypeScript diagnostics on Windows 2026-10-10 17:36:28 -04:00
haelyra 423edc1d46 Merge PR #3441: initialize OpenCode home hooks once 2026-10-10 17:36:05 -04:00
haelyra b3c3b77561 Merge PR #3440: observe active worktree changes 2026-10-10 17:35:52 -04:00
haelyra 7753a55d08 Merge PR #3416: route hook state through Claude profiles
Preserve the explicit shared ~/.claude project root already shipped on main. Canonicalize macOS temporary workflow fixture paths.
2026-10-10 17:35:45 -04:00
haelyra df50d56146 Merge PR #3283: serialize session alias mutations 2026-10-10 17:34:44 -04:00
chenhz01 3af000e143 hooks: first operand after -- is still the sed script when no script option was given
Greptile P1: sedScriptParts stopped at -- and discarded the remaining
operands, so 'sed -- <script>' skipped script collection entirely. GNU sed
4.9 (verified): with no -e/--expression anywhere, the first operand after --
is the script and an s///e in it still executes.

The operands after -- are now collected as positionals, so the existing
first-positional-becomes-script rule applies. Operands after the script stay
file names (data). 2 regression tests pin both sides. Suite: 812/812.
2026-10-11 03:55:27 +08:00
chenhz01 95964ee623 hooks: block escaped sed exec fragments conservatively; decompose sed readers
Greptile P1 findings (both verified by running GNU sed against the hook):

1. Escaped replacements evade the check: GNU sed decodes \xHH, \oOOO, \dNNN,
   case operations and unknown escapes like \g before executing an s///e
   replacement or e operand. Scanning the raw text let \x67it decode to git.
   Decoding that surface faithfully is out of scope, so any backslash in an
   exec-bearing fragment now throws UnsupportedSedEscape and the hook blocks
   with an explicit reason — mirroring the existing env -S escape precedent
   instead of pretending to interpret sed. Escaped-newline continuations of an
   e operand are refused by the same check.

2. Continued commands went unchecked: the e operand reader stopped at every
   newline, but GNU sed joins escaped newlines into one operand. Now covered
   by the same conservative refusal.

Also decomposes the sed readers into sub-50-line helpers per the repository
function-size rule (AGENTS.md): readSedDelimited, readSedCommand,
readSedExecute, readSedLineOperand, assertSedLiteral.

5 regression tests pin the escape paths and the benign boundary (a backslash
in a non-executing script stays data). Suite: 810/810.
2026-10-11 03:52:06 +08:00
chenhz01 34a7f41539 hooks: parse sed options through the whole argv — later -e scripts still execute
CodeRabbit security review (Major, CWE-693) correctly identified that GNU sed
collects -e/--expression scripts from any argv position: a script option after
positional operands is still executed, so stopping the option walk at the first
positional let an e-flagged script hide behind it.

Verified against GNU sed 4.9 before fixing:
- 'sed -e s/x/y/ - -e s/y/X/e' runs X (the later -e executes)
- with any script option present, every positional is a file operand

sedScriptParts now walks the full argv, collects scripts from all -e/
--expression positions, and only promotes the first positional to the script
when no script option was given. Unknown options after positionals still fall
back to the opaque default.

4 regression tests pin the reported bypass paths (suite: 805/805).
2026-10-11 03:38:02 +08:00
chenhz01 ffe0e36d46 hooks: model GNU sed execution — script and file operands are data, e/s///e are shell receivers
Ported from the #3051 discussion (test intent, not the old scanner):

- A confidently-parsed sed invocation whose script contains no execution
  construct is a pure text transformation: the script operand and every file
  operand are data. This removes the specific false positives where file names
  or non-executing scripts merely containing 'git ...' were blocked.
- The GNU sed `e` command (bare or with operand) and the `s` command with the
  `e` flag run text through the shell. Their literal fragments (the s
  replacement, the e operand) and any piped/redirected source are scanned as
  real shell source, closing the `printf x | sed 's/x/git commit --no-verify/e'`
  gap reported on 2026-10-09.
- Anything the literal parser cannot confidently read (addresses it cannot
  consume, -f script files, -i suffix ambiguity, unknown options, expansion
  residue) falls back to today's opaque default. No behavior changes for
  unmodeled launchers.
- shell-scan.js is untouched and remains the canonical scanner.

Tests: 14 focused cases ported from the #3051 litmus set; full hook suite
801/801.
2026-10-11 03:15:36 +08:00
Dante 53afd058be Merge remote-tracking branch 'origin/main' into fix/3488-generation-pricing 2026-10-11 01:04:12 +08:00
Dante 27c3ce1c10 fix(hooks): price Claude 5.5 per deduplicated request 2026-10-11 01:04:11 +08:00
Tivonsico 1ad235fdfe fix: report explicitly disabled summaries as skipped 2026-10-11 00:36:27 +08:00
Tivonsico 71bf78796f fix: keep session summaries within the lifecycle deadline 2026-10-11 00:15:12 +08:00
Matt Van Horn e128f4398b Merge branch 'main' into cursor/skill-host-compat-ci-10d0 2026-10-10 07:09:43 -07:00
calm 2d9e6977dc feat: add native Qoder plugin support 2026-10-10 20:11:00 +08:00
Geronimo e1546ed45d fix: installer slice from PR #3120 review (Haelyra)
Honor ECC_DRY_RUN=1 in install and repair arg parsing (previously only --dry-run flag worked, so ecc --dry-run install/repair silently performed real writes). Make writeInstallState atomic via writeFileAtomic (O_EXCL staging, fsync, cleanup on failure, atomic rename preserving previous state). Add writeInstallState failure/concurrency/symlink regression tests and disposable-home CLI dry-run regression tests for both global and subcommand forms.
2026-10-10 13:56:00 +05:30
34a97fa898 fix: reject unsupported env split-string escapes
Validate env -S and --split-string escape syntax before shell scanning or
opaque fallback. Preserve literal single-quoted data and charge each
validation character against the shared input-proportional work budget.

Verified 787 focused cases and 290 real Git/config, harmless native env
and registered-routing controls. Keeps the prior paid-copy protection.

Co-authored-by: Nguyen Thanh Dat <ntdat812.dev@gmail.com>
Co-authored-by: Davemaina1 <dmain7015@gmail.com>
2026-10-09 21:04:20 -04:00