agent-file-tools 0.55.0

Agent File Tools — tree-sitter powered code analysis for AI agents
Documentation
1
{"assignees":[],"author":{"id":"MDQ6VXNlcjUwOTE5NTc=","is_bot":false,"login":"TreyThomasCodes","name":"Trey Thomas"},"body":"## Summary\n\n- add a shared `npmInvocation()` helper that keeps Unix/native executable calls direct\n- route Windows `.cmd`/`.bat` npm shims through `cmd.exe /d /s /v:off /c` with verbatim arguments and constrained quoting\n- use the helper for Pi/OpenCode LSP auto-install, OpenCode auto-update, CLI doctor updates, and npm version probing\n- add Windows regression coverage, including execution from a path containing spaces\n\n## Problem\n\nOn Windows, `resolveNpm()` correctly finds `npm.cmd`, but callers passed that script directly to Node's `spawn()` or `execFileSync()` with `shell: false`. Windows/libuv cannot execute `.cmd` files directly, so these calls fail with `EINVAL`.\n\nThe fix is centralized so non-Windows behavior is unchanged and future npm callers do not need to rediscover the `.cmd` requirement. It avoids globally enabling `shell: true`.\n\n## Testing\n\n- `bun test packages/aft-bridge/src/__tests__/npm-resolver.test.ts` (17 passed)\n- focused Pi/OpenCode LSP invocation tests (3 passed)\n- focused OpenCode `runNpmInstallSafe` tests (3 passed)\n- typechecks for `aft-bridge`, `aft-pi`, `aft-opencode`, and `aft-cli`\n- Biome check on all 10 changed files\n- built bridge successfully probed the real `C:\\Program Files\\nodejs\\npm.cmd` on Windows (`11.17.0`)\n\n<!-- codesmith:footer -->\n---\n<a href=\"https://app.blacksmith.sh/cortexkit/codesmith/aft/pr/270\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v2.svg\"><source media=\"(prefers-color-scheme: light)\" srcset=\"https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-light-v2.svg\"><img alt=\"View with [code]smith\" src=\"https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v2.svg\"></picture></a> <a href=\"https://backend.blacksmith.sh/track/enable-autofix?expires=1790435985&installation_model_id=22398&pr_number=270&repository=cortexkit%2Faft&return_to=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270&signature=06a74fadea8080c9a212f566f421f74df6c4194dca030694b6829ae0a3d3ad3c\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark.svg\"><source media=\"(prefers-color-scheme: light)\" srcset=\"https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-light.svg\"><img alt=\"Autofix with [code]smith\" src=\"https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark.svg\"></picture></a>\n<sup>Need help on this PR? Tag <code>@codesmith-bot</code> with what you need. Autofix is disabled.</sup>\n\n<!-- codesmith:autofix:disabled -->\n<!-- /codesmith:footer -->\n\n<!-- This is an auto-generated description by cubic. -->\n---\n## Summary by cubic\nFixes Windows npm executions, where direct `spawn()` of the resolved `npm.cmd` fails with `EINVAL`, by routing `.cmd`/`.bat` shims through `cmd.exe` and only settling installs on verified process-tree termination.\n\n- Adds a shared invocation helper used by LSP auto-install, OpenCode auto-update, CLI doctor updates, and npm version probing.\n- Rejects shell-unsafe npm arguments (percent variables, quotes, newlines) on Windows.\n- Timeout and abort kill the full Windows process tree via `taskkill`; a confirmed tree-kill settles installs even when `cmd.exe`'s exit lags, while unconfirmed termination keeps recovery snapshots, retains the cross-process lock, and quarantines retries for the session.\n- Clean completions racing cancellation no longer count as unknown, and token-owned lock leases stop older owners from deleting reclaimed locks.\n- Ignores child `error` events during termination so the tree-kill outcome decides the settle.\n- Makes the subc workdir assertion path-separator agnostic and stabilizes the inspect-engine interleaving test.\n- Re-anchors governed v0.49 manifests after upstream merges.\n\n<sup>Written for commit 7ae27ff2c4e70d08036c66a92a770d5958a70bdf. Summary will update on new commits.</sup>\n\n<a href=\"https://cubic.dev/pr/cortexkit/aft/pull/270?utm_source=github\" target=\"_blank\" rel=\"noopener noreferrer\" data-no-image-dialog=\"true\"><picture><source media=\"(prefers-color-scheme: dark)\" srcset=\"https://www.cubic.dev/buttons/review-in-cubic-dark.svg\"><source media=\"(prefers-color-scheme: light)\" srcset=\"https://www.cubic.dev/buttons/review-in-cubic-light.svg\"><img alt=\"Review in cubic\" src=\"https://www.cubic.dev/buttons/review-in-cubic-dark.svg\"></picture></a>\n\n<!-- End of auto-generated description by cubic. -->\n\n\n\n<!-- greptile_comment -->\n\n<details><summary><h3>Greptile Summary</h3></summary>\n\nThe PR centralizes Windows npm-shim invocation through `cmd.exe` and strengthens cancellation handling so installation state is settled only after process termination is known.\n- Adds shared npm invocation and process-tree termination helpers.\n- Applies the helpers to LSP installation, auto-update, doctor, and npm version probing.\n- Adds generation-safe LSP lock leases, unknown-termination quarantine, snapshot recovery, and Windows regression coverage.\n- Updates generated release artifacts and stabilizes an unrelated inspect-engine test.\n</details>\n\n\n<h3>Confidence Score: 5/5</h3>\n\nThe PR appears safe to merge.\n\nNo blocking failure remains.\n\n<details><summary><h3>Important Files Changed</h3></summary>\n\n\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/aft-bridge/src/npm-resolver.ts | Introduces the shared Windows npm invocation and bounded, fail-closed process-tree termination logic; the previously reported lifecycle races are addressed at current HEAD. |\n| packages/opencode-plugin/src/lsp-auto-install.ts | Uses confirmed termination to settle aborted installs and retains token-owned locks when descendant termination is unknown. |\n| packages/pi-plugin/src/lsp-auto-install.ts | Mirrors the OpenCode LSP cancellation, quarantine, and lock-retention behavior. |\n| packages/opencode-plugin/src/hooks/auto-update-checker/cache.ts | Awaits termination before rollback and preserves recovery state when termination cannot be confirmed. |\n| packages/opencode-plugin/src/lsp-cache.ts | Adds token-scoped lock leases so an older owner cannot delete a reclaimed lock generation. |\n| packages/pi-plugin/src/lsp-cache.ts | Adds the corresponding token-scoped lock ownership and retention semantics for Pi. |\n\n</details>\n\n\n<details open><summary><h3>Flowchart</h3></summary>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n  A[Resolve npm] --> B{Windows cmd or bat shim?}\n  B -- No --> C[Spawn npm directly]\n  B -- Yes --> D[Invoke through cmd.exe]\n  C --> E[Install or version probe]\n  D --> E\n  E --> F{Cancellation or timeout?}\n  F -- No --> G[Handle normal exit]\n  F -- Yes --> H[Terminate npm process tree]\n  H --> I{Termination confirmed?}\n  I -- Yes --> J[Restore or settle safely]\n  I -- No --> K[Retain lock or snapshot and quarantine retry]\n```\n</details>\n\n<sub>Reviews (19): Last reviewed commit: [\"Co-authored-by: alfonso-aft &lt;289616620+a...\"](https://github.com/cortexkit/aft/commit/7ae27ff2c4e70d08036c66a92a770d5958a70bdf) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=57542182)</sub>\n\n<details><summary><h4>Context used (3)</h4></summary>\n\n- Knowledge Base — [Bridge storage and installation](https://app.greptile.com/cortexkit/-/custom-context/knowledge-base/cortexkit/aft/-/docs/bridge-storage-and-installation.md)\n- Knowledge Base — [LSP integration](https://app.greptile.com/cortexkit/-/custom-context/knowledge-base/cortexkit/aft/-/docs/lsp-integration.md)\n- Knowledge Base — [Runtime safety and operations](https://app.greptile.com/cortexkit/-/custom-context/knowledge-base/cortexkit/aft/-/docs/runtime-safety-and-operations.md)\n</details>\n\n\n<!-- /greptile_comment -->","comments":[{"id":"IC_kwDORnpyls8AAAABRSFUDQ","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"Want your agent to iterate on Greptile's feedback? Try [*greploops*](https://github.com/greptileai/skills/blob/main/greploop/SKILL.md).","createdAt":"2026-08-28T16:03:00Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/cortexkit/aft/pull/270#issuecomment-5454779405","viewerDidAuthor":false},{"id":"IC_kwDORnpyls8AAAABRZZzqw","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"Tracking issue: #279 documents the Windows `npm.cmd` invocation failure and identifies this PR as the tested fix.","createdAt":"2026-08-29T12:37:14Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/cortexkit/aft/pull/270#issuecomment-5462455211","viewerDidAuthor":false},{"id":"IC_kwDORnpyls8AAAABRaJIzA","author":{"login":"aft-alfonso"},"authorAssociation":"NONE","body":"On cubic's P2 (prefix-capture sha vs recorded source_commit on the merge-resolution commit): this is the repository's established manifest-chain convention, not a defect. Governed manifests record `source_commit` as the commit where the governed source files changed, and regenerated artifacts land in a separate alignment commit on top — never amended into the source commit — so per-commit hash archaeology always shows artifact bytes one commit after the recorded source. The authoritative check is `release-gate-v049.mjs` (current-tree byte coherence + ancestry), which passes on this head, and every manifest alignment commit on main has the same shape. Resolving the thread on that basis.","createdAt":"2026-08-29T15:23:39Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/cortexkit/aft/pull/270#issuecomment-5463230668","viewerDidAuthor":false},{"id":"IC_kwDORnpyls8AAAABRaYNIA","author":{"login":"aft-alfonso"},"authorAssociation":"NONE","body":"Merged — thank you for an exemplary contribution: the centralized resolver ladder, the cmd.exe environment-indirection trick for path safety, the confirmed tree-termination contract, and the hermetic test seams are all shapes we want more of. The in-passing deflake of the inspect interleaving test (event-captured flag over wall-clock ordering) matched our house testing doctrine exactly. #279 is closed with this; ships in the next release.","createdAt":"2026-08-29T16:14:38Z","includesCreatedEdit":false,"isMinimized":false,"minimizedReason":"","reactionGroups":[],"url":"https://github.com/cortexkit/aft/pull/270#issuecomment-5463477536","viewerDidAuthor":false}],"createdAt":"2026-08-27T15:19:40Z","files":[{"path":"crates/aft/tests/integration/inspect_engine_test.rs","additions":11,"deletions":12,"changeType":"MODIFIED"},{"path":"docs/v0.49-agent-prefix-capture.json","additions":7,"deletions":7,"changeType":"MODIFIED"},{"path":"docs/v0.49-agent-surface-manifest.json","additions":26,"deletions":26,"changeType":"MODIFIED"},{"path":"docs/v0.49-legacy-vocabulary-allowlist.json","additions":14,"deletions":14,"changeType":"MODIFIED"},{"path":"docs/v0.49-release-manifest.json","additions":1,"deletions":1,"changeType":"MODIFIED"},{"path":"packages/aft-bridge/src/__tests__/npm-resolver.test.ts","additions":371,"deletions":2,"changeType":"MODIFIED"},{"path":"packages/aft-bridge/src/index.ts","additions":4,"deletions":1,"changeType":"MODIFIED"},{"path":"packages/aft-bridge/src/npm-resolver.ts","additions":251,"deletions":6,"changeType":"MODIFIED"},{"path":"packages/aft-cli/src/__tests__/doctor.test.ts","additions":7,"deletions":0,"changeType":"MODIFIED"},{"path":"packages/aft-cli/src/commands/doctor.ts","additions":66,"deletions":12,"changeType":"MODIFIED"},{"path":"packages/opencode-plugin/src/__tests__/lsp-auto-install.test.ts","additions":17,"deletions":5,"changeType":"MODIFIED"},{"path":"packages/opencode-plugin/src/__tests__/lsp-cache.test.ts","additions":48,"deletions":19,"changeType":"MODIFIED"},{"path":"packages/opencode-plugin/src/hooks/auto-update-checker/cache.test.ts","additions":165,"deletions":1,"changeType":"MODIFIED"},{"path":"packages/opencode-plugin/src/hooks/auto-update-checker/cache.ts","additions":77,"deletions":32,"changeType":"MODIFIED"},{"path":"packages/opencode-plugin/src/lsp-auto-install.ts","additions":78,"deletions":23,"changeType":"MODIFIED"},{"path":"packages/opencode-plugin/src/lsp-cache.ts","additions":51,"deletions":24,"changeType":"MODIFIED"},{"path":"packages/pi-plugin/src/__tests__/lsp-auto-install.test.ts","additions":18,"deletions":6,"changeType":"MODIFIED"},{"path":"packages/pi-plugin/src/__tests__/lsp-cache.test.ts","additions":53,"deletions":17,"changeType":"MODIFIED"},{"path":"packages/pi-plugin/src/lsp-auto-install.ts","additions":81,"deletions":28,"changeType":"MODIFIED"},{"path":"packages/pi-plugin/src/lsp-cache.ts","additions":50,"deletions":23,"changeType":"MODIFIED"}],"labels":[],"milestone":null,"number":270,"reactionGroups":[{"content":"THUMBS_UP","users":{"totalCount":1}},{"content":"EYES","users":{"totalCount":1}}],"reviews":[{"id":"PRR_kwDORnpyls8AAAABLI-4bA","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 10 files\n<!-- cubic:review-summary:end -->\n\n<sub>Reply with feedback, questions, or to request a fix.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787843986274_774ba190-1e95-4b7f-9eb1-cfe68a5fe71d?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787843986274_774ba190-1e95-4b7f-9eb1-cfe68a5fe71d:5b698395a950b43fb8dc38f66b5aef4675762446:b6e934a6-9137-4dff-adc7-476b174701be -->","submittedAt":"2026-08-27T15:26:16Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"5b698395a950b43fb8dc38f66b5aef4675762446"}},{"id":"PRR_kwDORnpyls8AAAABLJFlsw","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"","submittedAt":"2026-08-27T15:37:32Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"5b698395a950b43fb8dc38f66b5aef4675762446"}},{"id":"PRR_kwDORnpyls8AAAABLJSwhw","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T16:00:07Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"7848e45daa785fa1f2519fdefe89431e615ef241"}},{"id":"PRR_kwDORnpyls8AAAABLJSwkQ","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T16:00:08Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"7848e45daa785fa1f2519fdefe89431e615ef241"}},{"id":"PRR_kwDORnpyls8AAAABLJSwlA","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T16:00:08Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"7848e45daa785fa1f2519fdefe89431e615ef241"}},{"id":"PRR_kwDORnpyls8AAAABLJbG1Q","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 10 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<sub>Reply with feedback, questions, or to request a fix.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787846398884_8c9a1192-e0bd-441a-a18f-bc3ccd00a54b?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787846398884_8c9a1192-e0bd-441a-a18f-bc3ccd00a54b:7848e45daa785fa1f2519fdefe89431e615ef241:f3dc5e06-9e51-44f9-ba4b-5b77906112be -->","submittedAt":"2026-08-27T16:15:07Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"7848e45daa785fa1f2519fdefe89431e615ef241"}},{"id":"PRR_kwDORnpyls8AAAABLJqbvg","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T16:42:48Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"a696a22b73084ddc6f67b81ba89e74607d8bc922"}},{"id":"PRR_kwDORnpyls8AAAABLJqbyQ","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T16:42:48Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"a696a22b73084ddc6f67b81ba89e74607d8bc922"}},{"id":"PRR_kwDORnpyls8AAAABLJsKVQ","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"","submittedAt":"2026-08-27T16:45:45Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"a696a22b73084ddc6f67b81ba89e74607d8bc922"}},{"id":"PRR_kwDORnpyls8AAAABLJzS9g","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T16:58:17Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"55f0ba88a86329e12601376af303ba3148617224"}},{"id":"PRR_kwDORnpyls8AAAABLJzbow","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T16:58:32Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"55f0ba88a86329e12601376af303ba3148617224"}},{"id":"PRR_kwDORnpyls8AAAABLJ5y0g","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 11 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787849895815_676f6fed-249d-4664-92ca-348bf65f88bd?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787849895815_676f6fed-249d-4664-92ca-348bf65f88bd:55f0ba88a86329e12601376af303ba3148617224:bf3885db-fcaa-4a22-b7ad-355582d62f8f -->","submittedAt":"2026-08-27T17:11:05Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"55f0ba88a86329e12601376af303ba3148617224"}},{"id":"PRR_kwDORnpyls8AAAABLKUGEA","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T17:55:16Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKUGFw","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T17:55:16Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKUGGQ","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T17:55:16Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKUGLA","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T17:55:16Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKUGLg","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T17:55:16Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKUGNQ","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T17:55:16Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKUGRQ","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T17:55:16Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKV9BQ","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"","submittedAt":"2026-08-27T17:57:48Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKZWxg","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 6 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787853301424_df73f0a3-3ef4-4cf6-af04-3c8c6e36c11a?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787853301424_df73f0a3-3ef4-4cf6-af04-3c8c6e36c11a:ce113e027c6694d734bf4348a490e144c3b2c3c1:65abc60b-3f53-4f1e-8d9a-09367481d0fd -->","submittedAt":"2026-08-27T18:02:23Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce113e027c6694d734bf4348a490e144c3b2c3c1"}},{"id":"PRR_kwDORnpyls8AAAABLKyK2Q","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T18:43:38Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"5ab9904b77e3d641bbf5059268b6a7f8cc9bc698"}},{"id":"PRR_kwDORnpyls8AAAABLKyK3A","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T18:43:38Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"5ab9904b77e3d641bbf5059268b6a7f8cc9bc698"}},{"id":"PRR_kwDORnpyls8AAAABLKyK3w","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T18:43:38Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"5ab9904b77e3d641bbf5059268b6a7f8cc9bc698"}},{"id":"PRR_kwDORnpyls8AAAABLK0S8g","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 12 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787856205846_397d4487-2bd9-4857-9427-643e36ea790e?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787856205846_397d4487-2bd9-4857-9427-643e36ea790e:5ab9904b77e3d641bbf5059268b6a7f8cc9bc698:f753768d-88e5-4f99-af59-07dd2fa6c2cd -->","submittedAt":"2026-08-27T18:47:36Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"5ab9904b77e3d641bbf5059268b6a7f8cc9bc698"}},{"id":"PRR_kwDORnpyls8AAAABLK0--g","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"","submittedAt":"2026-08-27T18:48:41Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"5ab9904b77e3d641bbf5059268b6a7f8cc9bc698"}},{"id":"PRR_kwDORnpyls8AAAABLLlpdQ","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"","submittedAt":"2026-08-27T20:22:41Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"58035689bc40ae0fbe0138d2ad57d9fe1008293a"}},{"id":"PRR_kwDORnpyls8AAAABLLnsWg","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 11 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787861977159_7ac39163-033a-48b7-988e-ac1e18a6bda5?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787861977159_7ac39163-033a-48b7-988e-ac1e18a6bda5:58035689bc40ae0fbe0138d2ad57d9fe1008293a:8dae309b-7bb7-43a5-b225-021dfe82af05 -->","submittedAt":"2026-08-27T20:27:01Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"58035689bc40ae0fbe0138d2ad57d9fe1008293a"}},{"id":"PRR_kwDORnpyls8AAAABLLtXrA","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T20:38:30Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce466e19d677a1d27e58342eff9da84743bf9368"}},{"id":"PRR_kwDORnpyls8AAAABLLtY2Q","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T20:38:32Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce466e19d677a1d27e58342eff9da84743bf9368"}},{"id":"PRR_kwDORnpyls8AAAABLLtaAA","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-27T20:38:34Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ce466e19d677a1d27e58342eff9da84743bf9368"}},{"id":"PRR_kwDORnpyls8AAAABLSgZug","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"","submittedAt":"2026-08-28T15:31:25Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"e9f2a241ecf14355fc2884fbefb0a87169e1b7fa"}},{"id":"PRR_kwDORnpyls8AAAABLSheUw","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**1 issue found** across 4 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<details>\n<summary>Prompt for AI agents (unresolved issues)</summary>\n\n```text\n\nCheck if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.\n\n\n<file name=\"docs/v0.49-agent-prefix-capture.json\">\n\n<violation number=\"1\" location=\"docs/v0.49-agent-prefix-capture.json:13\">\nP3: The re-anchor downgrades the opencode captures' recorded host_version from a verified \"1.18.18\" to null, because opencode is not installed in the regeneration environment (the script's hostVersion() fail-closes to null, while pi resolves 0.84.3). This audit artifact is an evidence ledger, and the previous commit recorded a concrete, verified opencode version that this change silently drops. Confirm this regression to unknown is intended; if opencode 1.18.18 is the version the releases run against, consider capturing the version explicitly (or noting the environment limitation) instead of letting the artifact lose the previously recorded value.</violation>\n</file>\n```\n\n</details>\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787930892249_c9996b13-2a0e-46ed-8e6e-8ffcada2184f?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787930892249_c9996b13-2a0e-46ed-8e6e-8ffcada2184f:e9f2a241ecf14355fc2884fbefb0a87169e1b7fa:31b7027c-07a5-4531-9502-9cb7639d8e4b -->","submittedAt":"2026-08-28T15:33:42Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"e9f2a241ecf14355fc2884fbefb0a87169e1b7fa"}},{"id":"PRR_kwDORnpyls8AAAABLSuKXw","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-28T15:59:59Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"b11d3b3fa22376dfe72fe76fb855cf5da9360fc0"}},{"id":"PRR_kwDORnpyls8AAAABLSuLGw","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-28T16:00:01Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"b11d3b3fa22376dfe72fe76fb855cf5da9360fc0"}},{"id":"PRR_kwDORnpyls8AAAABLSwt3A","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 4 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787932790505_805bc1a8-aa6d-4bb2-87e4-8fef9173b648?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787932790505_805bc1a8-aa6d-4bb2-87e4-8fef9173b648:b11d3b3fa22376dfe72fe76fb855cf5da9360fc0:b86ab03a-45bd-4528-a4eb-edd21cc7a2b2 -->","submittedAt":"2026-08-28T16:05:15Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"b11d3b3fa22376dfe72fe76fb855cf5da9360fc0"}},{"id":"PRR_kwDORnpyls8AAAABLTNh1g","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"","submittedAt":"2026-08-28T17:06:39Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"ae5ff52b3fdbe03f67c8d655b233e734851f99a2"}},{"id":"PRR_kwDORnpyls8AAAABLTZFSQ","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-28T17:31:20Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"c166a881ebe5e0ae2fc2843d56e9964ac8b2b712"}},{"id":"PRR_kwDORnpyls8AAAABLU-W1A","author":{"login":"greptile-apps"},"authorAssociation":"NONE","body":"","submittedAt":"2026-08-28T21:16:53Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"f90a4c8ddd34d68901423c8907b392733f6fd498"}},{"id":"PRR_kwDORnpyls8AAAABLVGFhg","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-28T21:38:20Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"23ec9749c6a819bcb4e8e99e3828700909903ff3"}},{"id":"PRR_kwDORnpyls8AAAABLVI48w","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 2 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787953084590_df9f404f-76fe-46d5-af70-6c6d496d0f10?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787953084590_df9f404f-76fe-46d5-af70-6c6d496d0f10:23ec9749c6a819bcb4e8e99e3828700909903ff3:0e03c462-8722-4d68-bfd2-e4035d2ad73d -->","submittedAt":"2026-08-28T21:45:49Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"23ec9749c6a819bcb4e8e99e3828700909903ff3"}},{"id":"PRR_kwDORnpyls8AAAABLVe5oQ","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-28T22:58:44Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"6704a20edb50752e0a890756cbdc1831034deef3"}},{"id":"PRR_kwDORnpyls8AAAABLVgXDA","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**1 issue found** across 2 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<details>\n<summary>Prompt for AI agents (unresolved issues)</summary>\n\n```text\n\nCheck if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.\n\n\n<file name=\"docs/v0.49-agent-surface-manifest.json\">\n\n<violation number=\"1\" location=\"docs/v0.49-agent-surface-manifest.json:355\">\nP2: The prefix-capture artifact's declared sha256 does not match the file bytes at the declared source_commit. The manifest sets source_commit=7a28476 and hash_rule says to hash exact bytes from that commit, but docs/v0.49-agent-prefix-capture.json at 7a28476 hashes to de3b751... (the old value), not the declared d1862df...  Only the regeneration commit 6704a20 contains the declared bytes. Set source_commit (manifest-header and each artifact) to 6704a20, or regenerate with HEAD at the commit that holds these LF bytes, so the referenced commit actually stores every declared hash.</violation>\n</file>\n```\n\n</details>\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1787957919802_50a8694d-9161-487b-a27f-115452ad5746?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1787957919802_50a8694d-9161-487b-a27f-115452ad5746:6704a20edb50752e0a890756cbdc1831034deef3:4cfd59f6-3fdb-43e8-8b36-4713f91d6c3b -->","submittedAt":"2026-08-28T23:03:19Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"6704a20edb50752e0a890756cbdc1831034deef3"}},{"id":"PRR_kwDORnpyls8AAAABLWRwzA","author":{"login":"TreyThomasCodes"},"authorAssociation":"CONTRIBUTOR","body":"","submittedAt":"2026-08-29T02:54:45Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"f02791933de9310d80f59504005a2bf8f648a8fe"}},{"id":"PRR_kwDORnpyls8AAAABLYHNYg","author":{"login":"cubic-dev-ai"},"authorAssociation":"CONTRIBUTOR","body":"<!-- cubic:review-summary:start -->\n**All reported issues were addressed** across 3 files (changes from recent commits).\n<!-- cubic:review-summary:end -->\n\n<sub>**Tip**: Review your code locally with the [cubic CLI](https://docs.cubic.dev/ide/cli-review?utm_source=github&utm_content=general_review_body) to iterate faster.<br /><br />[Re-trigger cubic](https://www.cubic.dev/action/re-review/pr/cortexkit/aft/270/ai_pr_review_1788016272941_4216ba21-d4a2-48ae-bd8b-3131be6c6382?returnTo=https%3A%2F%2Fgithub.com%2Fcortexkit%2Faft%2Fpull%2F270)</sub>\n\n<!-- cubic:review-post:ai_pr_review_1788016272941_4216ba21-d4a2-48ae-bd8b-3131be6c6382:7ae27ff2c4e70d08036c66a92a770d5958a70bdf:54dc4c58-e0fe-4b65-86d7-8f9a29ae432c -->","submittedAt":"2026-08-29T15:18:33Z","includesCreatedEdit":false,"reactionGroups":[],"state":"COMMENTED","commit":{"oid":"7ae27ff2c4e70d08036c66a92a770d5958a70bdf"}}],"state":"MERGED","title":"fix: invoke npm cmd shims through cmd.exe on Windows","updatedAt":"2026-08-29T16:14:38Z","url":"https://github.com/cortexkit/aft/pull/270"}