@prestyj/cli 5.29.1 → 5.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -12
- package/assets/skills/bulletproof/SKILL.md +1 -1
- package/assets/skills/clarify/SKILL.md +1 -1
- package/assets/skills/code-review/SKILL.md +1 -1
- package/assets/skills/compliance-guard/SKILL.md +1 -1
- package/assets/skills/compliance-guard/references/us.md +1 -1
- package/assets/skills/durable/SKILL.md +1 -1
- package/assets/skills/evidence-led-ui/SKILL.md +1 -1
- package/assets/skills/lean/SKILL.md +1 -1
- package/assets/skills/refactoring/SKILL.md +3 -1
- package/assets/skills/root-cause/SKILL.md +1 -1
- package/assets/skills/shared-language/SKILL.md +1 -1
- package/assets/skills/tdd/SKILL.md +1 -1
- package/dist/app-error.d.ts +21 -0
- package/dist/app-error.js +39 -0
- package/dist/app-error.js.map +1 -0
- package/dist/app-sidecar/app-settings.d.ts +63 -0
- package/dist/app-sidecar/app-settings.js +147 -0
- package/dist/app-sidecar/app-settings.js.map +1 -0
- package/dist/app-sidecar/attachments.d.ts +11 -0
- package/dist/app-sidecar/attachments.js +47 -0
- package/dist/app-sidecar/attachments.js.map +1 -0
- package/dist/app-sidecar/auth-routes.d.ts +3 -0
- package/dist/app-sidecar/auth-routes.js +290 -0
- package/dist/app-sidecar/auth-routes.js.map +1 -0
- package/dist/app-sidecar/autopilot-runner.d.ts +62 -0
- package/dist/app-sidecar/autopilot-runner.js +376 -0
- package/dist/app-sidecar/autopilot-runner.js.map +1 -0
- package/dist/app-sidecar/file-search.d.ts +15 -0
- package/dist/app-sidecar/file-search.js +103 -0
- package/dist/app-sidecar/file-search.js.map +1 -0
- package/dist/app-sidecar/hf-pull-manager.d.ts +20 -0
- package/dist/app-sidecar/hf-pull-manager.js +224 -0
- package/dist/app-sidecar/hf-pull-manager.js.map +1 -0
- package/dist/app-sidecar/history-routes.d.ts +3 -0
- package/dist/app-sidecar/history-routes.js +375 -0
- package/dist/app-sidecar/history-routes.js.map +1 -0
- package/dist/app-sidecar/history.d.ts +67 -0
- package/dist/app-sidecar/history.js +23 -0
- package/dist/app-sidecar/history.js.map +1 -0
- package/dist/app-sidecar/http.d.ts +5 -0
- package/dist/app-sidecar/http.js +27 -0
- package/dist/app-sidecar/http.js.map +1 -0
- package/dist/app-sidecar/integration-routes.d.ts +3 -0
- package/dist/app-sidecar/integration-routes.js +286 -0
- package/dist/app-sidecar/integration-routes.js.map +1 -0
- package/dist/app-sidecar/json-mode.d.ts +10 -0
- package/dist/app-sidecar/json-mode.js +73 -0
- package/dist/app-sidecar/json-mode.js.map +1 -0
- package/dist/app-sidecar/keep-awake.d.ts +4 -0
- package/dist/app-sidecar/keep-awake.js +5 -0
- package/dist/app-sidecar/keep-awake.js.map +1 -0
- package/dist/app-sidecar/mcp-routes.d.ts +3 -0
- package/dist/app-sidecar/mcp-routes.js +185 -0
- package/dist/app-sidecar/mcp-routes.js.map +1 -0
- package/dist/app-sidecar/mcp-rows.d.ts +31 -0
- package/dist/app-sidecar/mcp-rows.js +77 -0
- package/dist/app-sidecar/mcp-rows.js.map +1 -0
- package/dist/app-sidecar/nolan-context.d.ts +20 -0
- package/dist/app-sidecar/nolan-context.js +55 -0
- package/dist/app-sidecar/nolan-context.js.map +1 -0
- package/dist/app-sidecar/progress-manager.d.ts +10 -0
- package/dist/app-sidecar/progress-manager.js +116 -0
- package/dist/app-sidecar/progress-manager.js.map +1 -0
- package/dist/app-sidecar/prompt-routes.d.ts +3 -0
- package/dist/app-sidecar/prompt-routes.js +355 -0
- package/dist/app-sidecar/prompt-routes.js.map +1 -0
- package/dist/app-sidecar/repo-polls.d.ts +15 -0
- package/dist/app-sidecar/repo-polls.js +25 -0
- package/dist/app-sidecar/repo-polls.js.map +1 -0
- package/dist/app-sidecar/route-context.d.ts +145 -0
- package/dist/app-sidecar/route-context.js +2 -0
- package/dist/app-sidecar/route-context.js.map +1 -0
- package/dist/app-sidecar/run-control-routes.d.ts +3 -0
- package/dist/app-sidecar/run-control-routes.js +437 -0
- package/dist/app-sidecar/run-control-routes.js.map +1 -0
- package/dist/app-sidecar/session-routes.d.ts +3 -0
- package/dist/app-sidecar/session-routes.js +115 -0
- package/dist/app-sidecar/session-routes.js.map +1 -0
- package/dist/app-sidecar/session-types.d.ts +39 -0
- package/dist/app-sidecar/session-types.js +5 -0
- package/dist/app-sidecar/session-types.js.map +1 -0
- package/dist/app-sidecar/task-routes.d.ts +3 -0
- package/dist/app-sidecar/task-routes.js +232 -0
- package/dist/app-sidecar/task-routes.js.map +1 -0
- package/dist/app-sidecar/usage.d.ts +19 -0
- package/dist/app-sidecar/usage.js +153 -0
- package/dist/app-sidecar/usage.js.map +1 -0
- package/dist/app-sidecar/workspace-routes.d.ts +3 -0
- package/dist/app-sidecar/workspace-routes.js +374 -0
- package/dist/app-sidecar/workspace-routes.js.map +1 -0
- package/dist/app-sidecar.js +518 -3978
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli.js +6 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/core/acceptance-checks.js +3 -9
- package/dist/core/acceptance-checks.js.map +1 -1
- package/dist/core/agent-session/helpers.d.ts +26 -0
- package/dist/core/agent-session/helpers.js +47 -0
- package/dist/core/agent-session/helpers.js.map +1 -0
- package/dist/core/agent-session/mcp-tools.d.ts +68 -0
- package/dist/core/agent-session/mcp-tools.js +195 -0
- package/dist/core/agent-session/mcp-tools.js.map +1 -0
- package/dist/core/agent-session/run-loop-monitor.d.ts +63 -0
- package/dist/core/agent-session/run-loop-monitor.js +164 -0
- package/dist/core/agent-session/run-loop-monitor.js.map +1 -0
- package/dist/core/agent-session/transcript-markers.d.ts +57 -0
- package/dist/core/agent-session/transcript-markers.js +166 -0
- package/dist/core/agent-session/transcript-markers.js.map +1 -0
- package/dist/core/agent-session/verification-tracker.d.ts +46 -0
- package/dist/core/agent-session/verification-tracker.js +250 -0
- package/dist/core/agent-session/verification-tracker.js.map +1 -0
- package/dist/core/agent-session.d.ts +29 -89
- package/dist/core/agent-session.js +167 -705
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-providers.js +3 -3
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/autopilot-cycle.d.ts +6 -2
- package/dist/core/autopilot-cycle.js +1 -1
- package/dist/core/autopilot-cycle.js.map +1 -1
- package/dist/core/bundled-agents.js +6 -6
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/checklist-detection.d.ts +11 -0
- package/dist/core/checklist-detection.js +238 -0
- package/dist/core/checklist-detection.js.map +1 -0
- package/dist/core/checklist-git.d.ts +19 -0
- package/dist/core/checklist-git.js +54 -0
- package/dist/core/checklist-git.js.map +1 -0
- package/dist/core/checklist-items.d.ts +189 -0
- package/dist/core/checklist-items.js +226 -0
- package/dist/core/checklist-items.js.map +1 -0
- package/dist/core/checklist-prompt.d.ts +7 -0
- package/dist/core/checklist-prompt.js +45 -0
- package/dist/core/checklist-prompt.js.map +1 -0
- package/dist/core/checklist-snapshot.d.ts +17 -0
- package/dist/core/checklist-snapshot.js +46 -0
- package/dist/core/checklist-snapshot.js.map +1 -0
- package/dist/core/checklist-store.d.ts +59 -0
- package/dist/core/checklist-store.js +242 -0
- package/dist/core/checklist-store.js.map +1 -0
- package/dist/core/context-limits.js +1 -1
- package/dist/core/context-limits.js.map +1 -1
- package/dist/core/lsp/client.d.ts +4 -0
- package/dist/core/lsp/client.js +71 -3
- package/dist/core/lsp/client.js.map +1 -1
- package/dist/core/lsp/manager.d.ts +1 -0
- package/dist/core/lsp/manager.js +9 -3
- package/dist/core/lsp/manager.js.map +1 -1
- package/dist/core/lsp/project-root.d.ts +9 -0
- package/dist/core/lsp/project-root.js +75 -0
- package/dist/core/lsp/project-root.js.map +1 -0
- package/dist/core/lsp/reference-project.d.ts +6 -0
- package/dist/core/lsp/reference-project.js +110 -0
- package/dist/core/lsp/reference-project.js.map +1 -0
- package/dist/core/lsp/servers.js +1 -0
- package/dist/core/lsp/servers.js.map +1 -1
- package/dist/core/plan-handoff.d.ts +30 -0
- package/dist/core/plan-handoff.js +10 -0
- package/dist/core/plan-handoff.js.map +1 -0
- package/dist/core/plan-submission-gate.d.ts +28 -0
- package/dist/core/plan-submission-gate.js +27 -0
- package/dist/core/plan-submission-gate.js.map +1 -0
- package/dist/core/prompt-commands.js +95 -0
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/skills.js +6 -9
- package/dist/core/skills.js.map +1 -1
- package/dist/core/style-packs/index.js +2 -11
- package/dist/core/style-packs/index.js.map +1 -1
- package/dist/core/style-packs/packs.d.ts +3 -12
- package/dist/core/style-packs/packs.js +132 -173
- package/dist/core/style-packs/packs.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +2 -1
- package/dist/core/subagent-manager.js +8 -5
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/verification-evidence.d.ts +8 -0
- package/dist/core/verification-evidence.js +27 -5
- package/dist/core/verification-evidence.js.map +1 -1
- package/dist/modes/acp-mode.d.ts +2 -1
- package/dist/modes/acp-mode.js +4 -1
- package/dist/modes/acp-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts +2 -0
- package/dist/modes/subagent-worker-mode.js +1 -3
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/system-prompt.js +52 -78
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/ask-user.js +13 -74
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/bash.d.ts +4 -1
- package/dist/tools/bash.js +46 -81
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/checklist.d.ts +48 -0
- package/dist/tools/checklist.js +146 -0
- package/dist/tools/checklist.js.map +1 -0
- package/dist/tools/code-nav.d.ts +1 -1
- package/dist/tools/code-nav.js +9 -30
- package/dist/tools/code-nav.js.map +1 -1
- package/dist/tools/edit.d.ts +3 -9
- package/dist/tools/edit.js +92 -65
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/enter-plan.js +2 -7
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/exit-plan.d.ts +2 -2
- package/dist/tools/exit-plan.js +9 -4
- package/dist/tools/exit-plan.js.map +1 -1
- package/dist/tools/find.js +3 -4
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/grep.js +6 -18
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/index.d.ts +5 -3
- package/dist/tools/index.js +5 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ls.js +3 -3
- package/dist/tools/ls.js.map +1 -1
- package/dist/tools/prompt-hints.js +35 -46
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read.js +8 -20
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/search-code.js +4 -12
- package/dist/tools/search-code.js.map +1 -1
- package/dist/tools/skill.js +13 -7
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/subagent-control.js +7 -22
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +6 -8
- package/dist/tools/subagent-shared.js +17 -11
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/subagent.d.ts +2 -1
- package/dist/tools/subagent.js +7 -7
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/task-output.js +4 -15
- package/dist/tools/task-output.js.map +1 -1
- package/dist/tools/task-send.js +5 -17
- package/dist/tools/task-send.js.map +1 -1
- package/dist/tools/task-stop.js +2 -2
- package/dist/tools/task-stop.js.map +1 -1
- package/dist/tools/tasks.d.ts +1 -1
- package/dist/tools/tool-search.js +2 -7
- package/dist/tools/tool-search.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts +21 -4
- package/dist/tools/tool-tiers.js +45 -17
- package/dist/tools/tool-tiers.js.map +1 -1
- package/dist/tools/verification-review.d.ts +2 -0
- package/dist/tools/verification-review.js +41 -0
- package/dist/tools/verification-review.js.map +1 -0
- package/dist/tools/web-fetch.js +7 -33
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/write.js +3 -4
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/App.js +1 -0
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/Footer.js +1 -2
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/hooks/useModeState.js +15 -0
- package/dist/ui/hooks/useModeState.js.map +1 -1
- package/dist/ui/tool-line-summary.js +11 -1
- package/dist/ui/tool-line-summary.js.map +1 -1
- package/dist/ui/transcript/tool-presentation.js +1 -1
- package/dist/ui/transcript/tool-presentation.js.map +1 -1
- package/dist/utils/shared-poll.d.ts +37 -0
- package/dist/utils/shared-poll.js +104 -0
- package/dist/utils/shared-poll.js.map +1 -0
- package/package.json +8 -5
- package/dist/core/api-benchmark.d.ts +0 -63
- package/dist/core/api-benchmark.js +0 -381
- package/dist/core/api-benchmark.js.map +0 -1
- package/dist/core/bash-spawn-benchmark.d.ts +0 -1
- package/dist/core/bash-spawn-benchmark.js +0 -139
- package/dist/core/bash-spawn-benchmark.js.map +0 -1
- package/dist/core/cache-warm-benchmark.d.ts +0 -21
- package/dist/core/cache-warm-benchmark.js +0 -170
- package/dist/core/cache-warm-benchmark.js.map +0 -1
- package/dist/core/fast-apply-benchmark.d.ts +0 -25
- package/dist/core/fast-apply-benchmark.js +0 -284
- package/dist/core/fast-apply-benchmark.js.map +0 -1
- package/dist/core/hashline-edit-benchmark.d.ts +0 -88
- package/dist/core/hashline-edit-benchmark.js +0 -518
- package/dist/core/hashline-edit-benchmark.js.map +0 -1
- package/dist/core/semantic-search-benchmark.d.ts +0 -36
- package/dist/core/semantic-search-benchmark.js +0 -211
- package/dist/core/semantic-search-benchmark.js.map +0 -1
- package/dist/core/speed-benchmark.d.ts +0 -132
- package/dist/core/speed-benchmark.js +0 -410
- package/dist/core/speed-benchmark.js.map +0 -1
|
@@ -13,7 +13,7 @@ export const AUTH_PROVIDERS = [
|
|
|
13
13
|
{
|
|
14
14
|
value: "anthropic",
|
|
15
15
|
label: "Anthropic",
|
|
16
|
-
description: "Claude Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku
|
|
16
|
+
description: "Claude Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5",
|
|
17
17
|
methods: ["oauth"],
|
|
18
18
|
},
|
|
19
19
|
{
|
|
@@ -52,7 +52,7 @@ export const AUTH_PROVIDERS = [
|
|
|
52
52
|
{
|
|
53
53
|
value: "moonshot",
|
|
54
54
|
label: "Moonshot",
|
|
55
|
-
description: "Kimi K3, K2.8 Preview (Kimi sign-in), K2.7 Code · OAuth or API key",
|
|
55
|
+
description: "Kimi K3, K2.8 Preview (Kimi sign-in), K2.7 Code, K2.7 Code HighSpeed · OAuth or API key",
|
|
56
56
|
methods: ["oauth", "apikey"],
|
|
57
57
|
apiKeyLabel: "Moonshot",
|
|
58
58
|
methodDetails: {
|
|
@@ -128,7 +128,7 @@ export const AUTH_PROVIDERS = [
|
|
|
128
128
|
{
|
|
129
129
|
value: "huggingface",
|
|
130
130
|
label: "Hugging Face",
|
|
131
|
-
description: "
|
|
131
|
+
description: "Kimi K2.7 Code, DeepSeek V4.1 Flash, GPT-OSS 120B",
|
|
132
132
|
methods: ["apikey"],
|
|
133
133
|
apiKeyLabel: "Hugging Face",
|
|
134
134
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-providers.js","sourceRoot":"","sources":["../../src/core/auth-providers.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,0EAA0E;AAE1E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AA+DrE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD;QACE,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,sCAAsC;QACnD,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,2FAA2F;QAC7F,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5B,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE;YACb,KAAK,EAAE;gBACL,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,OAAO,EAAE,uCAAuC;gBAChD,IAAI,EAAE,EAAE;aACT;YACD,MAAM,EAAE;gBACN,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,wCAAwC;gBACjD,IAAI,EAAE,EAAE;aACT;SACF;KACF;IACD;QACE,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU;QACjB,WAAW,
|
|
1
|
+
{"version":3,"file":"auth-providers.js","sourceRoot":"","sources":["../../src/core/auth-providers.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,0EAA0E;AAE1E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AA+DrE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD;QACE,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,sCAAsC;QACnD,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,2FAA2F;QAC7F,OAAO,EAAE,CAAC,OAAO,CAAC;KACnB;IACD;QACE,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5B,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE;YACb,KAAK,EAAE;gBACL,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,OAAO,EAAE,uCAAuC;gBAChD,IAAI,EAAE,EAAE;aACT;YACD,MAAM,EAAE;gBACN,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,wCAAwC;gBACjD,IAAI,EAAE,EAAE;aACT;SACF;KACF;IACD;QACE,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,yFAAyF;QAC3F,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5B,WAAW,EAAE,UAAU;QACvB,aAAa,EAAE;YACb,KAAK,EAAE;gBACL,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,OAAO,EAAE,uCAAuC;gBAChD,IAAI,EAAE,EAAE;aACT;YACD,MAAM,EAAE;gBACN,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,kBAAkB;gBACzB,OAAO,EAAE,oCAAoC;gBAC7C,IAAI,EAAE,EAAE;aACT;SACF;KACF;IACD;QACE,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,wBAAwB;QACrC,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,MAAM;KACpB;IACD;QACE,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,SAAS;KACvB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,sFAAsF;QACxF,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,aAAa;QAC1B,aAAa,EAAE,0CAA0C;QACzD,cAAc,EAAE;YACd;gBACE,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,0CAA0C;aACpD;YACD;gBACE,GAAG,EAAE,kBAAkB;gBACvB,KAAK,EAAE,uCAAuC;gBAC9C,OAAO,EAAE,+BAA+B;aACzC;SACF;KACF;IACD;QACE,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,UAAU;KACxB;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,4BAA4B;QACzC,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,QAAQ;KACtB;IACD;QACE,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,sCAAsC;QACnD,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,YAAY;KAC1B;IACD;QACE,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,cAAc;KAC5B;CACF,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;QAC9C,4EAA4E;QAC5E,6EAA6E;QAC7E,oEAAoE;QACpE,IAAI,QAAQ;YAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;QACrC,OAAO,MAAM,KAAK,OAAO;YACvB,CAAC,CAAC;gBACE,MAAM;gBACN,KAAK,EAAE,gBAAgB,IAAI,CAAC,KAAK,EAAE;gBACnC,OAAO,EAAE,6CAA6C;gBACtD,IAAI,EAAE,EAAE;aACT;YACH,CAAC,CAAC;gBACE,MAAM;gBACN,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,UAAU;gBAClD,OAAO,EAAE,+CAA+C;gBACxD,IAAI,EAAE,EAAE;aACT,CAAC;IACR,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,QAAQ,IAAI,CAAC,UAAU,eAAe,IAAI,CAAC,WAAW,mDAAmD,CAAC;AACnH,CAAC"}
|
|
@@ -98,8 +98,12 @@ export interface AutopilotCycleDeps {
|
|
|
98
98
|
acceptPlan: (reason?: string) => Promise<boolean>;
|
|
99
99
|
/** Run the "plan approved — implement it now" prompt on the fresh session. */
|
|
100
100
|
runImplement: () => Promise<void>;
|
|
101
|
-
/** Feed a PROMPT verdict's body to EZ Coder as an injected run.
|
|
102
|
-
|
|
101
|
+
/** Feed a PROMPT verdict's body to EZ Coder as an injected run.
|
|
102
|
+
* `planRevision` marks a plan-feedback run: the host puts the session back
|
|
103
|
+
* in read-only plan mode first, so revising can't start editing code. */
|
|
104
|
+
runPrompt: (body: string, opts?: {
|
|
105
|
+
planRevision?: boolean;
|
|
106
|
+
}) => Promise<void>;
|
|
103
107
|
/** Called BEFORE runPrompt: record the injected body (digest labeling) and
|
|
104
108
|
* broadcast the autopilot_prompted marker. */
|
|
105
109
|
onInjected: (body: string, round: number) => void;
|
|
@@ -105,7 +105,7 @@ export async function driveAutopilotCycle(deps) {
|
|
|
105
105
|
// the run actually did.
|
|
106
106
|
const body = buildPlanRevisionPrompt(verdict.body);
|
|
107
107
|
deps.onInjected(body, round);
|
|
108
|
-
await deps.runPrompt(body);
|
|
108
|
+
await deps.runPrompt(body, { planRevision: true });
|
|
109
109
|
continue;
|
|
110
110
|
}
|
|
111
111
|
// Only an explicit approval can authorize implementation of a plan.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autopilot-cycle.js","sourceRoot":"","sources":["../../src/core/autopilot-cycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,wBAAwB,EAAyB,MAAM,wBAAwB,CAAC;AAEzF;;;qCAGqC;AACrC,MAAM,CAAC,MAAM,8BAA8B,GACzC,iKAAiK,CAAC;AAEpK;;;;;;;;;;uBAUuB;AACvB,MAAM,CAAC,MAAM,4BAA4B,GACvC,gFAAgF;IAChF,yDAAyD;IACzD,gFAAgF;IAChF,gFAAgF;IAChF,aAAa;IACb,iFAAiF;IACjF,sDAAsD;IACtD,iFAAiF;IACjF,2EAA2E;IAC3E,sEAAsE;IACtE,mBAAmB,CAAC;AAEtB;;;yEAGyE;AACzE,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,GAAG,4BAA4B,OAAO,IAAI,EAAE,CAAC;AACtD,CAAC;AAED;;gEAEgE;AAChE,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO,CACL,0EAA0E;QAC1E,GAAG,QAAQ,MAAM;QACjB,+EAA+E,CAChF,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"autopilot-cycle.js","sourceRoot":"","sources":["../../src/core/autopilot-cycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -191,7 +191,7 @@ Be rigorous. The cost of a false positive is the user's trust in the entire repo
|
|
|
191
191
|
export const BUNDLED_AGENTS = [
|
|
192
192
|
{
|
|
193
193
|
name: "bee",
|
|
194
|
-
description: "
|
|
194
|
+
description: "Implements a self-contained change in place.",
|
|
195
195
|
tools: ["read", "write", "edit", "bash", "find", "grep", "code_search", "ls", "source_path"],
|
|
196
196
|
model: "inherit",
|
|
197
197
|
systemPrompt: BEE_PROMPT,
|
|
@@ -199,7 +199,7 @@ export const BUNDLED_AGENTS = [
|
|
|
199
199
|
},
|
|
200
200
|
{
|
|
201
201
|
name: "owl",
|
|
202
|
-
description:
|
|
202
|
+
description: "Read-only questions about this repo.",
|
|
203
203
|
tools: ["read", "grep", "find", "ls", "code_search", "source_path"],
|
|
204
204
|
model: "inherit",
|
|
205
205
|
// Conventions and style rules don't change where a symbol is defined, and
|
|
@@ -210,7 +210,7 @@ export const BUNDLED_AGENTS = [
|
|
|
210
210
|
},
|
|
211
211
|
{
|
|
212
212
|
name: "researcher",
|
|
213
|
-
description: "
|
|
213
|
+
description: "Research needing docs or dependency source outside the repo.",
|
|
214
214
|
tools: [
|
|
215
215
|
"read",
|
|
216
216
|
"grep",
|
|
@@ -228,7 +228,7 @@ export const BUNDLED_AGENTS = [
|
|
|
228
228
|
},
|
|
229
229
|
{
|
|
230
230
|
name: "worker",
|
|
231
|
-
description: "
|
|
231
|
+
description: "Lands one change on its own branch and commits it.",
|
|
232
232
|
tools: ["read", "write", "edit", "bash", "find", "grep", "code_search", "ls"],
|
|
233
233
|
model: "inherit",
|
|
234
234
|
systemPrompt: WORKER_PROMPT,
|
|
@@ -236,7 +236,7 @@ export const BUNDLED_AGENTS = [
|
|
|
236
236
|
},
|
|
237
237
|
{
|
|
238
238
|
name: "auditor",
|
|
239
|
-
description: "
|
|
239
|
+
description: "Read-only security review.",
|
|
240
240
|
tools: ["read", "grep", "find", "ls", "code_search", "bash", "web_fetch", "web_search"],
|
|
241
241
|
model: "inherit",
|
|
242
242
|
systemPrompt: AUDITOR_PROMPT,
|
|
@@ -244,7 +244,7 @@ export const BUNDLED_AGENTS = [
|
|
|
244
244
|
},
|
|
245
245
|
{
|
|
246
246
|
name: "skeptic",
|
|
247
|
-
description: "
|
|
247
|
+
description: "Verifies `auditor` findings.",
|
|
248
248
|
tools: [
|
|
249
249
|
"read",
|
|
250
250
|
"grep",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundled-agents.js","sourceRoot":"","sources":["../../src/core/bundled-agents.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;8DAgB2C,CAAC;AAE/D,MAAM,UAAU,GAAG;;;;;;;;;;;;;8GAa2F,CAAC;AAE/G,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;+EAcqD,CAAC;AAEhF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EA8CqD,CAAC;AAE5E,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iHAyC0F,CAAC;AAElH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFAsC6D,CAAC;AAErF,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C;QACE,IAAI,EAAE,KAAK;QACX,WAAW,
|
|
1
|
+
{"version":3,"file":"bundled-agents.js","sourceRoot":"","sources":["../../src/core/bundled-agents.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;8DAgB2C,CAAC;AAE/D,MAAM,UAAU,GAAG;;;;;;;;;;;;;8GAa2F,CAAC;AAE/G,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;+EAcqD,CAAC;AAEhF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EA8CqD,CAAC;AAE5E,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iHAyC0F,CAAC;AAElH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFAsC6D,CAAC;AAErF,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C;QACE,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC;QAC5F,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,SAAS;KAClB;IACD;QACE,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC;QACnE,KAAK,EAAE,SAAS;QAChB,0EAA0E;QAC1E,yEAAyE;QACzE,OAAO,EAAE,MAAM;QACf,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,SAAS;KAClB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,8DAA8D;QAC3E,KAAK,EAAE;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,IAAI;YACJ,aAAa;YACb,aAAa;YACb,WAAW;YACX,YAAY;YACZ,UAAU;SACX;QACD,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EAAE,SAAS;KAClB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oDAAoD;QACjE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC;QAC7E,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,SAAS;KAClB;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,4BAA4B;QACzC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;QACvF,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,SAAS;KAClB;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EAAE;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,IAAI;YACJ,aAAa;YACb,MAAM;YACN,WAAW;YACX,YAAY;YACZ,UAAU;SACX;QACD,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,SAAS;KAClB;CACF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Observations of setup, never audit verdicts. No project code is executed. */
|
|
2
|
+
export interface ChecklistDetection {
|
|
3
|
+
readonly summary: string;
|
|
4
|
+
readonly facts: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
export interface ChecklistDetections {
|
|
7
|
+
readonly items: Readonly<Record<string, ChecklistDetection>>;
|
|
8
|
+
readonly warnings: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
/** Cheap, bounded, local observations. Missing/unsupported setup is not a failure. */
|
|
11
|
+
export declare function detectChecklist(cwd: string, signal?: AbortSignal): Promise<ChecklistDetections>;
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import fs, {} from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { runBackgroundGit } from "../utils/git.js";
|
|
6
|
+
import { log } from "./logger.js";
|
|
7
|
+
const MAX_ENTRIES = 256;
|
|
8
|
+
const MAX_PACKAGES = 32;
|
|
9
|
+
const MAX_MANIFEST_BYTES = 256 * 1024;
|
|
10
|
+
const Manifest = z.object({
|
|
11
|
+
scripts: z.record(z.string(), z.string()).optional(),
|
|
12
|
+
dependencies: z.record(z.string(), z.string()).optional(),
|
|
13
|
+
devDependencies: z.record(z.string(), z.string()).optional(),
|
|
14
|
+
});
|
|
15
|
+
/** Cheap, bounded, local observations. Missing/unsupported setup is not a failure. */
|
|
16
|
+
export async function detectChecklist(cwd, signal) {
|
|
17
|
+
const started = Date.now();
|
|
18
|
+
const items = {};
|
|
19
|
+
const warnings = new Set();
|
|
20
|
+
const facts = new Map();
|
|
21
|
+
let root;
|
|
22
|
+
try {
|
|
23
|
+
root = await fs.realpath(cwd);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { items, warnings: ["Project setup could not be read."] };
|
|
27
|
+
}
|
|
28
|
+
function add(id, fact) {
|
|
29
|
+
const lines = facts.get(id) ?? new Set();
|
|
30
|
+
if (lines.size < 10)
|
|
31
|
+
lines.add(fact);
|
|
32
|
+
facts.set(id, lines);
|
|
33
|
+
}
|
|
34
|
+
async function contained(relative) {
|
|
35
|
+
if (signal?.aborted)
|
|
36
|
+
return null;
|
|
37
|
+
const file = path.join(root, relative);
|
|
38
|
+
try {
|
|
39
|
+
// Don't follow even in-project symlinks: opening a checklist must not
|
|
40
|
+
// traverse a link to a secret, device, or another project's files.
|
|
41
|
+
let current = root;
|
|
42
|
+
for (const part of relative.split("/")) {
|
|
43
|
+
current = path.join(current, part);
|
|
44
|
+
if ((await fs.lstat(current)).isSymbolicLink())
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const resolved = await fs.realpath(file);
|
|
48
|
+
const rel = path.relative(root, resolved);
|
|
49
|
+
return rel === ".." || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)
|
|
50
|
+
? null
|
|
51
|
+
: resolved;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function names(relative) {
|
|
58
|
+
const result = { files: [], directories: [] };
|
|
59
|
+
const directory = relative === "." ? root : await contained(relative);
|
|
60
|
+
if (!directory || signal?.aborted)
|
|
61
|
+
return result;
|
|
62
|
+
try {
|
|
63
|
+
let count = 0;
|
|
64
|
+
const handle = await fs.opendir(directory);
|
|
65
|
+
for await (const entry of handle) {
|
|
66
|
+
if (signal?.aborted)
|
|
67
|
+
break;
|
|
68
|
+
if (++count > MAX_ENTRIES) {
|
|
69
|
+
warnings.add("Setup detection was limited in a large directory; unlisted files were not checked.");
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
if (entry.isFile())
|
|
73
|
+
result.files.push(entry.name);
|
|
74
|
+
else if (entry.isDirectory())
|
|
75
|
+
result.directories.push(entry.name);
|
|
76
|
+
}
|
|
77
|
+
result.files.sort();
|
|
78
|
+
result.directories.sort();
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
warnings.add("Some project folders could not be read; setup detection may be incomplete.");
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
async function manifest(relative) {
|
|
86
|
+
const file = await contained(relative);
|
|
87
|
+
if (!file || signal?.aborted)
|
|
88
|
+
return null;
|
|
89
|
+
let handle;
|
|
90
|
+
try {
|
|
91
|
+
handle = await fs.open(file, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
92
|
+
const stat = await handle.stat();
|
|
93
|
+
if (!stat.isFile() || stat.size > MAX_MANIFEST_BYTES) {
|
|
94
|
+
warnings.add("A package manifest was too large or not a regular file; it was not inspected.");
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
// A capped handle read also bounds a file that grows after stat().
|
|
98
|
+
const buffer = Buffer.alloc(MAX_MANIFEST_BYTES + 1);
|
|
99
|
+
let length = 0;
|
|
100
|
+
while (length < buffer.length && !signal?.aborted) {
|
|
101
|
+
const { bytesRead } = await handle.read(buffer, length, buffer.length - length, null);
|
|
102
|
+
if (bytesRead === 0)
|
|
103
|
+
break;
|
|
104
|
+
length += bytesRead;
|
|
105
|
+
}
|
|
106
|
+
if (signal?.aborted)
|
|
107
|
+
return null;
|
|
108
|
+
if (length > MAX_MANIFEST_BYTES) {
|
|
109
|
+
warnings.add("A package manifest exceeded the read limit; it was not inspected.");
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
const parsed = Manifest.safeParse(JSON.parse(buffer.subarray(0, length).toString("utf-8")));
|
|
113
|
+
if (parsed.success)
|
|
114
|
+
return parsed.data;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Never report file contents, script bodies or dependency URLs.
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
await handle?.close();
|
|
121
|
+
}
|
|
122
|
+
warnings.add("A package manifest could not be parsed; setup detection may be incomplete.");
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const top = await names(".");
|
|
126
|
+
for (const file of top.files) {
|
|
127
|
+
if (/^(AGENTS|CLAUDE)\.md$/i.test(file))
|
|
128
|
+
add("agent-setup", `${file} found`);
|
|
129
|
+
if (/^readme(?:\.(?:md|rst|txt))?$/i.test(file))
|
|
130
|
+
add("docs", "README found");
|
|
131
|
+
if (/^(?:licen[cs]e|copying)(?:\.(?:md|txt|rst))?$/i.test(file))
|
|
132
|
+
add("docs", "Licence file found");
|
|
133
|
+
if (file === "CONTEXT.md")
|
|
134
|
+
add("naming", "Project glossary found");
|
|
135
|
+
if (file === ".gitignore")
|
|
136
|
+
add("git-github", ".gitignore found");
|
|
137
|
+
if (/^(?:pnpm-lock\.yaml|package-lock\.json|yarn\.lock|bun\.lockb?|Cargo\.lock|poetry\.lock|uv\.lock|Gemfile\.lock|composer\.lock|go\.sum)$/.test(file))
|
|
138
|
+
add("dependencies", `${file} found`);
|
|
139
|
+
if (/^(?:CHANGELOG|CHANGES)(?:\.md)?$/i.test(file))
|
|
140
|
+
add("build-release", "Changelog found");
|
|
141
|
+
if ([".gitlab-ci.yml", "azure-pipelines.yml", "Jenkinsfile"].includes(file))
|
|
142
|
+
add("ci", "CI configuration found");
|
|
143
|
+
}
|
|
144
|
+
for (const relative of [
|
|
145
|
+
".ezcoder/commands/commit.md",
|
|
146
|
+
".claude/commands/commit.md",
|
|
147
|
+
".husky/pre-commit",
|
|
148
|
+
]) {
|
|
149
|
+
const file = await contained(relative);
|
|
150
|
+
if (file && (await fs.stat(file)).isFile())
|
|
151
|
+
add("commit-gate", "Project commit check configuration found");
|
|
152
|
+
}
|
|
153
|
+
if ((await names("docs/adr")).files.length > 0)
|
|
154
|
+
add("naming", "Decision records found in docs/adr");
|
|
155
|
+
const workflows = await names(".github/workflows");
|
|
156
|
+
if (workflows.files.some((file) => /\.ya?ml$/i.test(file)))
|
|
157
|
+
add("ci", "GitHub workflow files found");
|
|
158
|
+
const packages = ["."];
|
|
159
|
+
for (const parent of ["packages", "apps"]) {
|
|
160
|
+
for (const directory of (await names(parent)).directories) {
|
|
161
|
+
if (packages.length >= MAX_PACKAGES + 1) {
|
|
162
|
+
warnings.add("Setup detection covered only the first 32 workspace packages.");
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
packages.push(`${parent}/${directory}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
for (const directory of packages) {
|
|
169
|
+
if (signal?.aborted)
|
|
170
|
+
break;
|
|
171
|
+
const listing = directory === "." ? top : await names(directory);
|
|
172
|
+
if (listing.files.some((file) => /^(?:eslint\.config\.|\.eslintrc(?:\.|$)|biome\.jsonc?$|ruff\.toml$|\.ruff\.toml$|\.golangci\.)/.test(file)))
|
|
173
|
+
add("quality-tools", "Lint configuration found");
|
|
174
|
+
if (listing.files.some((file) => /^(?:\.prettierrc(?:\.|$)|prettier\.config\.|biome\.jsonc?$|rustfmt\.toml$|\.clang-format$)/.test(file)))
|
|
175
|
+
add("quality-tools", "Formatter configuration found");
|
|
176
|
+
if (listing.files.some((file) => /^tsconfig(?:\..+)?\.json$/.test(file)))
|
|
177
|
+
add("quality-tools", "TypeScript configuration found");
|
|
178
|
+
if (listing.files.some((file) => /^(?:vitest\.config\.|jest\.config\.|playwright\.config\.|pytest\.ini$|phpunit\.xml)/.test(file)) ||
|
|
179
|
+
listing.files.some((file) => /_test\.go$/.test(file)))
|
|
180
|
+
add("tests", "Test configuration or test files found");
|
|
181
|
+
if (!listing.files.includes("package.json"))
|
|
182
|
+
continue;
|
|
183
|
+
const data = await manifest(directory === "." ? "package.json" : `${directory}/package.json`);
|
|
184
|
+
if (!data)
|
|
185
|
+
continue;
|
|
186
|
+
const scriptNames = Object.keys(data.scripts ?? {});
|
|
187
|
+
if (scriptNames.some((name) => /^(?:lint|format|typecheck|type-check|check)(?::|$)/.test(name)))
|
|
188
|
+
add("quality-tools", "Code quality scripts found");
|
|
189
|
+
if (scriptNames.some((name) => /^test(?::|$)/.test(name)))
|
|
190
|
+
add("tests", "Test script found");
|
|
191
|
+
if (scriptNames.some((name) => /^build(?::|$)/.test(name)))
|
|
192
|
+
add("build-release", "Build script found");
|
|
193
|
+
const dependencies = { ...data.dependencies, ...data.devDependencies };
|
|
194
|
+
if (["eslint", "prettier", "typescript", "@biomejs/biome"].some((name) => Object.hasOwn(dependencies, name)))
|
|
195
|
+
add("quality-tools", "Code quality tools declared");
|
|
196
|
+
if (["vitest", "jest", "@playwright/test", "mocha"].some((name) => Object.hasOwn(dependencies, name)))
|
|
197
|
+
add("tests", "Test runner declared");
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
const git = await runBackgroundGit(["rev-parse", "--is-inside-work-tree"], {
|
|
201
|
+
cwd: root,
|
|
202
|
+
timeoutMs: 3000,
|
|
203
|
+
maxBuffer: 4096,
|
|
204
|
+
...(signal ? { signal } : {}),
|
|
205
|
+
});
|
|
206
|
+
if (git.stdout.trim() === "true")
|
|
207
|
+
add("git-github", "Git repository initialized");
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// Not a worktree or Git unavailable: do not claim setup is missing.
|
|
211
|
+
}
|
|
212
|
+
const summaries = {
|
|
213
|
+
"agent-setup": "Agent instructions found",
|
|
214
|
+
docs: "Documentation found",
|
|
215
|
+
naming: "Project vocabulary found",
|
|
216
|
+
"git-github": facts.get("git-github")?.has("Git repository initialized")
|
|
217
|
+
? "Git initialized"
|
|
218
|
+
: "Ignore file found",
|
|
219
|
+
"quality-tools": "Tools or configuration detected",
|
|
220
|
+
tests: "Test setup found",
|
|
221
|
+
ci: "CI configuration found",
|
|
222
|
+
"commit-gate": "Commit check configuration found",
|
|
223
|
+
dependencies: "Lockfile found",
|
|
224
|
+
"build-release": "Build or release setup found",
|
|
225
|
+
};
|
|
226
|
+
for (const id of [...facts.keys()].sort()) {
|
|
227
|
+
const lines = facts.get(id);
|
|
228
|
+
if (lines?.size)
|
|
229
|
+
items[id] = { summary: summaries[id] ?? "Setup detected", facts: [...lines].sort() };
|
|
230
|
+
}
|
|
231
|
+
log("INFO", "checklist", "Detected project setup", {
|
|
232
|
+
cwd: root,
|
|
233
|
+
detectedItems: Object.keys(items).length,
|
|
234
|
+
elapsedMs: Date.now() - started,
|
|
235
|
+
});
|
|
236
|
+
return { items, warnings: [...warnings].sort() };
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=checklist-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist-detection.js","sourceRoot":"","sources":["../../src/core/checklist-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface GitState {
|
|
2
|
+
readonly commit: string | null;
|
|
3
|
+
readonly uncommittedChanges: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Short HEAD commit and whether the work tree differs from it. The record file
|
|
7
|
+
* itself is ignored, since earlier records always leave it modified. Outside a
|
|
8
|
+
* repo (or before the first commit) the commit is null.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readGitState(cwd: string, signal?: AbortSignal): Promise<GitState>;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the project has visibly moved on since a record was written: a
|
|
13
|
+
* different HEAD, or local edits on a tree that was clean when checked. Edits
|
|
14
|
+
* on top of an already-dirty tree can't be told apart, so this can miss
|
|
15
|
+
* changes but never invents one. Unknown live state means "not changed".
|
|
16
|
+
*/
|
|
17
|
+
export declare function changedSinceCheck(recorded: {
|
|
18
|
+
readonly checkedAt: string | null;
|
|
19
|
+
} & GitState, current: GitState | null): boolean;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Git state for the project health checklist: stamped onto each record by the
|
|
2
|
+
// `checklist` tool, and compared against the live tree by the snapshot so
|
|
3
|
+
// findings from an older tree aren't shown as current.
|
|
4
|
+
import { CHECKLIST_FILE } from "./checklist-items.js";
|
|
5
|
+
import { runBackgroundGit } from "../utils/git.js";
|
|
6
|
+
/**
|
|
7
|
+
* Short HEAD commit and whether the work tree differs from it. The record file
|
|
8
|
+
* itself is ignored, since earlier records always leave it modified. Outside a
|
|
9
|
+
* repo (or before the first commit) the commit is null.
|
|
10
|
+
*/
|
|
11
|
+
export async function readGitState(cwd, signal) {
|
|
12
|
+
let commit = null;
|
|
13
|
+
try {
|
|
14
|
+
const { stdout } = await runBackgroundGit(["rev-parse", "--short", "HEAD"], {
|
|
15
|
+
cwd,
|
|
16
|
+
timeoutMs: 5000,
|
|
17
|
+
...(signal ? { signal } : {}),
|
|
18
|
+
});
|
|
19
|
+
commit = stdout.trim() || null;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (signal?.aborted)
|
|
23
|
+
throw error;
|
|
24
|
+
// An unborn repository can still have uncommitted files. Inspect status
|
|
25
|
+
// even when it has no HEAD yet.
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const { stdout } = await runBackgroundGit(["status", "--porcelain=v1", "--untracked-files=normal"], { cwd, timeoutMs: 10000, maxBuffer: 16 * 1024 * 1024, ...(signal ? { signal } : {}) });
|
|
29
|
+
const changed = stdout
|
|
30
|
+
.split(/\r?\n/)
|
|
31
|
+
.filter((line) => line.length > 3)
|
|
32
|
+
.some((line) => line.slice(3).replace(/^"|"$/g, "") !== CHECKLIST_FILE);
|
|
33
|
+
return { commit, uncommittedChanges: changed };
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (signal?.aborted || commit !== null)
|
|
37
|
+
throw error;
|
|
38
|
+
return { commit, uncommittedChanges: false };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Whether the project has visibly moved on since a record was written: a
|
|
43
|
+
* different HEAD, or local edits on a tree that was clean when checked. Edits
|
|
44
|
+
* on top of an already-dirty tree can't be told apart, so this can miss
|
|
45
|
+
* changes but never invents one. Unknown live state means "not changed".
|
|
46
|
+
*/
|
|
47
|
+
export function changedSinceCheck(recorded, current) {
|
|
48
|
+
if (recorded.checkedAt === null || current === null)
|
|
49
|
+
return false;
|
|
50
|
+
if (recorded.commit !== current.commit)
|
|
51
|
+
return true;
|
|
52
|
+
return current.uncommittedChanges && !recorded.uncommittedChanges;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=checklist-git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist-git.js","sourceRoot":"","sources":["../../src/core/checklist-git.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0EAA0E;AAC1E,uDAAuD;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOnD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,MAAoB;IAClE,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;YAC1E,GAAG;YACH,SAAS,EAAE,IAAI;YACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,KAAK,CAAC;QACjC,wEAAwE;QACxE,gCAAgC;IAClC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CACvC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,0BAA0B,CAAC,EACxD,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACtF,CAAC;QACF,MAAM,OAAO,GAAG,MAAM;aACnB,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC;QAC1E,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,EAAE,OAAO,IAAI,MAAM,KAAK,IAAI;YAAE,MAAM,KAAK,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA0D,EAC1D,OAAwB;IAExB,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,OAAO,CAAC,kBAAkB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AACpE,CAAC"}
|