@entelligentsia/forgecli 0.15.0 → 0.19.0

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.
Files changed (1069) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/dist/CHANGELOG-pi.md +55 -0
  3. package/dist/bin/argv.d.ts +2 -0
  4. package/dist/bin/argv.js +3 -1
  5. package/dist/bin/argv.js.map +1 -1
  6. package/dist/bin/config.d.ts +5 -0
  7. package/dist/bin/config.js +25 -4
  8. package/dist/bin/config.js.map +1 -1
  9. package/dist/bin/forge.js +12 -56
  10. package/dist/bin/forge.js.map +1 -1
  11. package/dist/bin/shared-parser.d.ts +23 -0
  12. package/dist/bin/shared-parser.js +12 -0
  13. package/dist/bin/shared-parser.js.map +1 -0
  14. package/dist/bin/update-cli.js +5 -0
  15. package/dist/bin/update-cli.js.map +1 -1
  16. package/dist/extensions/forgecli/approve.d.ts +4 -6
  17. package/dist/extensions/forgecli/approve.js +8 -73
  18. package/dist/extensions/forgecli/approve.js.map +1 -1
  19. package/dist/extensions/forgecli/audience-gate.d.ts +1 -1
  20. package/dist/extensions/forgecli/calibrate.d.ts +4 -1
  21. package/dist/extensions/forgecli/calibrate.js +4 -12
  22. package/dist/extensions/forgecli/calibrate.js.map +1 -1
  23. package/dist/extensions/forgecli/collate.d.ts +4 -6
  24. package/dist/extensions/forgecli/collate.js +8 -73
  25. package/dist/extensions/forgecli/collate.js.map +1 -1
  26. package/dist/extensions/forgecli/commit.d.ts +4 -6
  27. package/dist/extensions/forgecli/commit.js +8 -73
  28. package/dist/extensions/forgecli/commit.js.map +1 -1
  29. package/dist/extensions/forgecli/config-tui/handler.js +1 -0
  30. package/dist/extensions/forgecli/config-tui/handler.js.map +1 -1
  31. package/dist/extensions/forgecli/config-tui/screens/tier-menu.js +8 -1
  32. package/dist/extensions/forgecli/config-tui/screens/tier-menu.js.map +1 -1
  33. package/dist/extensions/forgecli/config-tui/state/init.js +1 -0
  34. package/dist/extensions/forgecli/config-tui/state/init.js.map +1 -1
  35. package/dist/extensions/forgecli/config-tui/state/model.d.ts +4 -0
  36. package/dist/extensions/forgecli/enhance.d.ts +4 -6
  37. package/dist/extensions/forgecli/enhance.js +8 -73
  38. package/dist/extensions/forgecli/enhance.js.map +1 -1
  39. package/dist/extensions/forgecli/fix-bug.d.ts +3 -0
  40. package/dist/extensions/forgecli/fix-bug.js +58 -46
  41. package/dist/extensions/forgecli/fix-bug.js.map +1 -1
  42. package/dist/extensions/forgecli/forge-artifact-tool.d.ts +2 -0
  43. package/dist/extensions/forgecli/forge-artifact-tool.js +185 -0
  44. package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -0
  45. package/dist/extensions/forgecli/forge-init/phase-descriptors.d.ts +72 -0
  46. package/dist/extensions/forgecli/forge-init/phase-descriptors.js +350 -0
  47. package/dist/extensions/forgecli/forge-init/phase-descriptors.js.map +1 -0
  48. package/dist/extensions/forgecli/forge-init/phase4-register.d.ts +20 -0
  49. package/dist/extensions/forgecli/forge-init/phase4-register.js +353 -0
  50. package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -0
  51. package/dist/extensions/forgecli/forge-init/prompts.d.ts +10 -0
  52. package/dist/extensions/forgecli/forge-init/prompts.js +91 -0
  53. package/dist/extensions/forgecli/forge-init/prompts.js.map +1 -0
  54. package/dist/extensions/forgecli/forge-init/verifiers.d.ts +20 -0
  55. package/dist/extensions/forgecli/forge-init/verifiers.js +81 -0
  56. package/dist/extensions/forgecli/forge-init/verifiers.js.map +1 -0
  57. package/dist/extensions/forgecli/forge-init.js +106 -748
  58. package/dist/extensions/forgecli/forge-init.js.map +1 -1
  59. package/dist/extensions/forgecli/forge-root.d.ts +0 -1
  60. package/dist/extensions/forgecli/forge-root.js +1 -11
  61. package/dist/extensions/forgecli/forge-root.js.map +1 -1
  62. package/dist/extensions/forgecli/forge-subagent.d.ts +11 -1
  63. package/dist/extensions/forgecli/forge-subagent.js +6 -1
  64. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  65. package/dist/extensions/forgecli/forge-tools.d.ts +27 -7
  66. package/dist/extensions/forgecli/forge-tools.js +109 -70
  67. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  68. package/dist/extensions/forgecli/forge-update-command.js +5 -0
  69. package/dist/extensions/forgecli/forge-update-command.js.map +1 -1
  70. package/dist/extensions/forgecli/friction-emit.d.ts +4 -2
  71. package/dist/extensions/forgecli/friction-emit.js +13 -12
  72. package/dist/extensions/forgecli/friction-emit.js.map +1 -1
  73. package/dist/extensions/forgecli/health-check.js +1 -1
  74. package/dist/extensions/forgecli/health-check.js.map +1 -1
  75. package/dist/extensions/forgecli/hook-dispatcher.d.ts +1 -0
  76. package/dist/extensions/forgecli/hook-dispatcher.js +5 -0
  77. package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
  78. package/dist/extensions/forgecli/hooks/post-init-hook.js +1 -1
  79. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +1 -1
  80. package/dist/extensions/forgecli/hooks/write-guard.js +1 -1
  81. package/dist/extensions/forgecli/hooks/write-guard.js.map +1 -1
  82. package/dist/extensions/forgecli/implement.d.ts +4 -6
  83. package/dist/extensions/forgecli/implement.js +8 -73
  84. package/dist/extensions/forgecli/implement.js.map +1 -1
  85. package/dist/extensions/forgecli/index.js +15 -38
  86. package/dist/extensions/forgecli/index.js.map +1 -1
  87. package/dist/extensions/forgecli/lib/catalog-helpers.d.ts +13 -0
  88. package/dist/extensions/forgecli/lib/catalog-helpers.js +51 -0
  89. package/dist/extensions/forgecli/lib/catalog-helpers.js.map +1 -0
  90. package/dist/extensions/forgecli/lib/catalog-loader.d.ts +46 -0
  91. package/dist/extensions/forgecli/lib/catalog-loader.js +176 -0
  92. package/dist/extensions/forgecli/lib/catalog-loader.js.map +1 -0
  93. package/dist/extensions/forgecli/lib/catalog-types.d.ts +16 -0
  94. package/dist/extensions/forgecli/lib/catalog-types.js +161 -0
  95. package/dist/extensions/forgecli/lib/catalog-types.js.map +1 -0
  96. package/dist/extensions/forgecli/lib/exec-helpers.d.ts +25 -0
  97. package/dist/extensions/forgecli/lib/exec-helpers.js +52 -0
  98. package/dist/extensions/forgecli/lib/exec-helpers.js.map +1 -0
  99. package/dist/extensions/forgecli/lib/forge-config.d.ts +20 -0
  100. package/dist/extensions/forgecli/lib/forge-config.js +43 -0
  101. package/dist/extensions/forgecli/lib/forge-config.js.map +1 -0
  102. package/dist/extensions/forgecli/lib/frontmatter-parser.d.ts +13 -0
  103. package/dist/extensions/forgecli/lib/frontmatter-parser.js +56 -0
  104. package/dist/extensions/forgecli/lib/frontmatter-parser.js.map +1 -0
  105. package/dist/extensions/forgecli/lib/manifest-checker.d.ts +22 -0
  106. package/dist/extensions/forgecli/lib/manifest-checker.js +64 -0
  107. package/dist/extensions/forgecli/lib/manifest-checker.js.map +1 -0
  108. package/dist/extensions/forgecli/lib/orchestrator-preflight.d.ts +46 -0
  109. package/dist/extensions/forgecli/lib/orchestrator-preflight.js +64 -0
  110. package/dist/extensions/forgecli/lib/orchestrator-preflight.js.map +1 -0
  111. package/dist/extensions/forgecli/lib/orchestrator-types.d.ts +20 -0
  112. package/dist/extensions/forgecli/lib/orchestrator-types.js +14 -0
  113. package/dist/extensions/forgecli/lib/orchestrator-types.js.map +1 -0
  114. package/dist/extensions/forgecli/lib/parsers.d.ts +25 -0
  115. package/dist/extensions/forgecli/lib/parsers.js +164 -0
  116. package/dist/extensions/forgecli/lib/parsers.js.map +1 -0
  117. package/dist/extensions/forgecli/lib/shared-fs-utils.d.ts +12 -0
  118. package/dist/extensions/forgecli/lib/shared-fs-utils.js +37 -0
  119. package/dist/extensions/forgecli/lib/shared-fs-utils.js.map +1 -0
  120. package/dist/extensions/forgecli/lib/spawn-store-cli.d.ts +44 -0
  121. package/dist/extensions/forgecli/lib/spawn-store-cli.js +93 -0
  122. package/dist/extensions/forgecli/lib/spawn-store-cli.js.map +1 -0
  123. package/dist/extensions/forgecli/lib/state-helpers.d.ts +33 -0
  124. package/dist/extensions/forgecli/lib/state-helpers.js +69 -0
  125. package/dist/extensions/forgecli/lib/state-helpers.js.map +1 -0
  126. package/dist/extensions/forgecli/lib/store-cli-timeouts.d.ts +4 -0
  127. package/dist/extensions/forgecli/lib/store-cli-timeouts.js +10 -0
  128. package/dist/extensions/forgecli/lib/store-cli-timeouts.js.map +1 -0
  129. package/dist/extensions/forgecli/lib/versions.d.ts +56 -0
  130. package/dist/extensions/forgecli/lib/versions.js +116 -0
  131. package/dist/extensions/forgecli/lib/versions.js.map +1 -0
  132. package/dist/extensions/forgecli/loaders/persona-skill-loader.js +2 -2
  133. package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +1 -1
  134. package/dist/extensions/forgecli/migration-engine.d.ts +6 -0
  135. package/dist/extensions/forgecli/migration-engine.js +59 -39
  136. package/dist/extensions/forgecli/migration-engine.js.map +1 -1
  137. package/dist/extensions/forgecli/parsers/persona-skill-loader.d.ts +45 -0
  138. package/dist/extensions/forgecli/parsers/persona-skill-loader.js +201 -0
  139. package/dist/extensions/forgecli/parsers/persona-skill-loader.js.map +1 -0
  140. package/dist/extensions/forgecli/parsers/workflow-loader.d.ts +41 -0
  141. package/dist/extensions/forgecli/parsers/workflow-loader.js +87 -0
  142. package/dist/extensions/forgecli/parsers/workflow-loader.js.map +1 -0
  143. package/dist/extensions/forgecli/plan.d.ts +4 -6
  144. package/dist/extensions/forgecli/plan.js +9 -73
  145. package/dist/extensions/forgecli/plan.js.map +1 -1
  146. package/dist/extensions/forgecli/retrospective.d.ts +2 -1
  147. package/dist/extensions/forgecli/retrospective.js +6 -36
  148. package/dist/extensions/forgecli/retrospective.js.map +1 -1
  149. package/dist/extensions/forgecli/review-code.d.ts +4 -6
  150. package/dist/extensions/forgecli/review-code.js +8 -73
  151. package/dist/extensions/forgecli/review-code.js.map +1 -1
  152. package/dist/extensions/forgecli/review-plan.d.ts +4 -6
  153. package/dist/extensions/forgecli/review-plan.js +8 -73
  154. package/dist/extensions/forgecli/review-plan.js.map +1 -1
  155. package/dist/extensions/forgecli/run-sprint.d.ts +2 -0
  156. package/dist/extensions/forgecli/run-sprint.js +53 -52
  157. package/dist/extensions/forgecli/run-sprint.js.map +1 -1
  158. package/dist/extensions/forgecli/run-task.d.ts +3 -0
  159. package/dist/extensions/forgecli/run-task.js +39 -68
  160. package/dist/extensions/forgecli/run-task.js.map +1 -1
  161. package/dist/extensions/forgecli/skill-curation-flag.js +5 -5
  162. package/dist/extensions/forgecli/skill-curation-flag.js.map +1 -1
  163. package/dist/extensions/forgecli/skill-retriever.js +5 -5
  164. package/dist/extensions/forgecli/skill-retriever.js.map +1 -1
  165. package/dist/extensions/forgecli/skill-usage-tracker.js +5 -5
  166. package/dist/extensions/forgecli/skill-usage-tracker.js.map +1 -1
  167. package/dist/extensions/forgecli/store-error-remediation.d.ts +65 -0
  168. package/dist/extensions/forgecli/store-error-remediation.js +299 -0
  169. package/dist/extensions/forgecli/store-error-remediation.js.map +1 -0
  170. package/dist/extensions/forgecli/store-resolver.js +3 -12
  171. package/dist/extensions/forgecli/store-resolver.js.map +1 -1
  172. package/dist/extensions/forgecli/store-validator.js +6 -11
  173. package/dist/extensions/forgecli/store-validator.js.map +1 -1
  174. package/dist/extensions/forgecli/subagent/agents.d.ts +4 -0
  175. package/dist/extensions/forgecli/subagent/agents.js +5 -8
  176. package/dist/extensions/forgecli/subagent/agents.js.map +1 -1
  177. package/dist/extensions/forgecli/transition-guard.js +20 -61
  178. package/dist/extensions/forgecli/transition-guard.js.map +1 -1
  179. package/dist/extensions/forgecli/validate.d.ts +4 -6
  180. package/dist/extensions/forgecli/validate.js +8 -73
  181. package/dist/extensions/forgecli/validate.js.map +1 -1
  182. package/dist/extensions/forgecli/wf-engine/engine.js +2 -2
  183. package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -1
  184. package/dist/extensions/forgecli/wf-engine/loader.d.ts +1 -1
  185. package/dist/extensions/forgecli/wf-engine/loader.js +1 -1
  186. package/dist/extensions/forgecli/wf-engine/loader.js.map +1 -1
  187. package/dist/forge-payload/.base-pack/skills/architect-skills.md +1 -0
  188. package/dist/forge-payload/.base-pack/skills/bug-fixer-skills.md +1 -0
  189. package/dist/forge-payload/.base-pack/skills/collator-skills.md +1 -0
  190. package/dist/forge-payload/.base-pack/skills/engineer-skills.md +1 -0
  191. package/dist/forge-payload/.base-pack/skills/generic-skills.md +1 -0
  192. package/dist/forge-payload/.base-pack/skills/qa-engineer-skills.md +1 -0
  193. package/dist/forge-payload/.base-pack/skills/supervisor-skills.md +1 -0
  194. package/dist/forge-payload/.base-pack/workflows/_fragments/generation-instructions.md +81 -0
  195. package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +72 -0
  196. package/dist/forge-payload/.base-pack/workflows/_fragments/store-cli-verbs.md +11 -1
  197. package/dist/forge-payload/.base-pack/workflows/_fragments/store-write-verification.md +11 -0
  198. package/dist/forge-payload/.base-pack/workflows/architect_approve.md +11 -12
  199. package/dist/forge-payload/.base-pack/workflows/architect_review_sprint_completion.md +4 -1
  200. package/dist/forge-payload/.base-pack/workflows/architect_sprint_intake.md +10 -1
  201. package/dist/forge-payload/.base-pack/workflows/architect_sprint_plan.md +8 -1
  202. package/dist/forge-payload/.base-pack/workflows/collator_agent.md +18 -1
  203. package/dist/forge-payload/.base-pack/workflows/commit_task.md +5 -10
  204. package/dist/forge-payload/.base-pack/workflows/enhance.md +7 -0
  205. package/dist/forge-payload/.base-pack/workflows/fix_bug.md +9 -2
  206. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +22 -35
  207. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +9 -0
  208. package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +4 -0
  209. package/dist/forge-payload/.base-pack/workflows/plan_task.md +17 -21
  210. package/dist/forge-payload/.base-pack/workflows/review_code.md +13 -20
  211. package/dist/forge-payload/.base-pack/workflows/review_plan.md +10 -21
  212. package/dist/forge-payload/.base-pack/workflows/sprint_retrospective.md +10 -1
  213. package/dist/forge-payload/.base-pack/workflows/update_implementation.md +5 -10
  214. package/dist/forge-payload/.base-pack/workflows/update_plan.md +5 -10
  215. package/dist/forge-payload/.base-pack/workflows/validate_task.md +11 -12
  216. package/dist/forge-payload/.claude-plugin/plugin.json +5 -5
  217. package/dist/forge-payload/.schemas/_defs/phaseSummary.schema.json +18 -0
  218. package/dist/forge-payload/.schemas/bug.schema.json +8 -24
  219. package/dist/forge-payload/.schemas/config.schema.json +165 -33
  220. package/dist/forge-payload/.schemas/enum-catalog.json +71 -0
  221. package/dist/forge-payload/.schemas/migrations.json +371 -149
  222. package/dist/forge-payload/.schemas/task.schema.json +6 -21
  223. package/dist/forge-payload/.schemas/transitions/bug.json +31 -0
  224. package/dist/forge-payload/.schemas/transitions/sprint.json +46 -0
  225. package/dist/forge-payload/.schemas/transitions/task.json +109 -0
  226. package/dist/forge-payload/commands/health.md +3 -3
  227. package/dist/forge-payload/hooks/check-update.cjs +255 -0
  228. package/dist/forge-payload/hooks/forge-permissions.cjs +171 -0
  229. package/dist/forge-payload/hooks/forge-permissions.js +6 -0
  230. package/dist/forge-payload/hooks/post-init.cjs +120 -0
  231. package/dist/forge-payload/hooks/post-sprint.cjs +108 -0
  232. package/dist/forge-payload/hooks/triage-error.cjs +104 -0
  233. package/dist/forge-payload/hooks/triage-error.js +6 -0
  234. package/dist/forge-payload/hooks/validate-write.cjs +250 -0
  235. package/dist/forge-payload/hooks/validate-write.js +25 -11
  236. package/dist/forge-payload/integrity.json +13 -7
  237. package/dist/forge-payload/meta/workflows/_fragments/generation-instructions.md +81 -0
  238. package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +72 -0
  239. package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +11 -1
  240. package/dist/forge-payload/meta/workflows/_fragments/store-write-verification.md +11 -0
  241. package/dist/forge-payload/meta/workflows/meta-approve.md +9 -11
  242. package/dist/forge-payload/meta/workflows/meta-collate.md +16 -0
  243. package/dist/forge-payload/meta/workflows/meta-commit.md +3 -9
  244. package/dist/forge-payload/meta/workflows/meta-enhance.md +16 -1
  245. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +8 -2
  246. package/dist/forge-payload/meta/workflows/meta-implement.md +20 -35
  247. package/dist/forge-payload/meta/workflows/meta-migrate.md +18 -0
  248. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +2 -0
  249. package/dist/forge-payload/meta/workflows/meta-plan-task.md +15 -21
  250. package/dist/forge-payload/meta/workflows/meta-quiz-agent.md +4 -1
  251. package/dist/forge-payload/meta/workflows/meta-retrospective.md +8 -0
  252. package/dist/forge-payload/meta/workflows/meta-review-implementation.md +11 -19
  253. package/dist/forge-payload/meta/workflows/meta-review-plan.md +10 -16
  254. package/dist/forge-payload/meta/workflows/meta-review-sprint-completion.md +3 -0
  255. package/dist/forge-payload/meta/workflows/meta-sprint-intake.md +8 -0
  256. package/dist/forge-payload/meta/workflows/meta-sprint-plan.md +5 -0
  257. package/dist/forge-payload/meta/workflows/meta-update-implementation.md +3 -9
  258. package/dist/forge-payload/meta/workflows/meta-update-plan.md +3 -9
  259. package/dist/forge-payload/meta/workflows/meta-validate.md +9 -11
  260. package/dist/forge-payload/schemas/structure-manifest.json +8 -6
  261. package/dist/forge-payload/tools/build-context-pack.cjs +3 -2
  262. package/dist/forge-payload/tools/friction-emit.cjs +2 -1
  263. package/dist/forge-payload/tools/lib/frontmatter.cjs +62 -0
  264. package/dist/forge-payload/tools/lib/fsutil.cjs +61 -0
  265. package/dist/forge-payload/tools/lib/json-io.cjs +43 -0
  266. package/dist/forge-payload/tools/lib/schema-loader.cjs +139 -0
  267. package/dist/forge-payload/tools/lib/slug.cjs +39 -0
  268. package/dist/forge-payload/tools/lib/store-facade.cjs +6 -5
  269. package/dist/forge-payload/tools/preflight-gate.cjs +55 -7
  270. package/dist/forge-payload/tools/seed-store.cjs +1 -13
  271. package/dist/forge-payload/tools/store-cli.cjs +55 -108
  272. package/dist/forge-payload/tools/store.cjs +26 -37
  273. package/dist/forge-payload/tools/substitute-placeholders.cjs +74 -35
  274. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts +1 -1
  275. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  276. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +23 -0
  277. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  278. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +2 -2
  279. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  280. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +1 -1
  281. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  282. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +2 -2
  283. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  284. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  285. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts +5 -5
  286. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  287. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  288. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +4 -4
  289. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  290. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  291. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts +1 -1
  292. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts.map +1 -1
  293. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js.map +1 -1
  294. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -1
  295. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  296. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  297. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts +4 -0
  298. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts.map +1 -0
  299. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js +3 -0
  300. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js.map +1 -0
  301. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts +2 -2
  302. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts.map +1 -1
  303. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  304. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts +1 -1
  305. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts.map +1 -1
  306. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
  307. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts +1 -1
  308. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -1
  309. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js.map +1 -1
  310. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts +1 -1
  311. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -1
  312. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -1
  313. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.d.ts +1 -1
  314. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.d.ts.map +1 -1
  315. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js.map +1 -1
  316. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts +1 -1
  317. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -1
  318. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js.map +1 -1
  319. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts +20 -0
  320. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts.map +1 -0
  321. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js +92 -0
  322. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js.map +1 -0
  323. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts +18 -0
  324. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts.map +1 -0
  325. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js +42 -0
  326. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js.map +1 -0
  327. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts +10 -0
  328. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts.map +1 -0
  329. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js +31 -0
  330. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js.map +1 -0
  331. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts +2 -2
  332. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -1
  333. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js.map +1 -1
  334. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +2 -2
  335. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  336. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  337. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts +30 -0
  338. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts.map +1 -0
  339. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js +170 -0
  340. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js.map +1 -0
  341. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts +26 -0
  342. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts.map +1 -0
  343. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js +90 -0
  344. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js.map +1 -0
  345. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts +1 -1
  346. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts.map +1 -1
  347. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js.map +1 -1
  348. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.d.ts +1 -1
  349. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.d.ts.map +1 -1
  350. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.js.map +1 -1
  351. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +10 -22
  352. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  353. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js +17 -23
  354. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  355. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +1 -1
  356. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
  357. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
  358. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +19 -19
  359. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  360. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
  361. package/node_modules/@earendil-works/pi-agent-core/dist/node.d.ts +2 -2
  362. package/node_modules/@earendil-works/pi-agent-core/dist/node.d.ts.map +1 -1
  363. package/node_modules/@earendil-works/pi-agent-core/dist/node.js.map +1 -1
  364. package/node_modules/@earendil-works/pi-agent-core/package.json +9 -10
  365. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts +1 -1
  366. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts.map +1 -1
  367. package/node_modules/@earendil-works/pi-ai/dist/api-registry.js.map +1 -1
  368. package/node_modules/@earendil-works/pi-ai/dist/bedrock-provider.d.ts +2 -2
  369. package/node_modules/@earendil-works/pi-ai/dist/bedrock-provider.d.ts.map +1 -1
  370. package/node_modules/@earendil-works/pi-ai/dist/bedrock-provider.js.map +1 -1
  371. package/node_modules/@earendil-works/pi-ai/dist/cli.d.ts.map +1 -1
  372. package/node_modules/@earendil-works/pi-ai/dist/cli.js +14 -0
  373. package/node_modules/@earendil-works/pi-ai/dist/cli.js.map +1 -1
  374. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts +1 -1
  375. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  376. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +10 -2
  377. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  378. package/node_modules/@earendil-works/pi-ai/dist/image-models.d.ts +2 -2
  379. package/node_modules/@earendil-works/pi-ai/dist/image-models.d.ts.map +1 -1
  380. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  381. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  382. package/node_modules/@earendil-works/pi-ai/dist/image-models.js.map +1 -1
  383. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts +1 -1
  384. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts.map +1 -1
  385. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js.map +1 -1
  386. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts +2 -2
  387. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -1
  388. package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -1
  389. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +29 -29
  390. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  391. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
  392. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts +2 -2
  393. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  394. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +317 -509
  395. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  396. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +400 -620
  397. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  398. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  399. package/node_modules/@earendil-works/pi-ai/dist/oauth.d.ts +1 -1
  400. package/node_modules/@earendil-works/pi-ai/dist/oauth.d.ts.map +1 -1
  401. package/node_modules/@earendil-works/pi-ai/dist/oauth.js.map +1 -1
  402. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts +1 -1
  403. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  404. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +5 -2
  405. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  406. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts +23 -6
  407. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  408. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +11 -23
  409. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  410. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts +1 -1
  411. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  412. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +2 -1
  413. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  414. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.d.ts +1 -1
  415. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.d.ts.map +1 -1
  416. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.js.map +1 -1
  417. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts +1 -1
  418. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  419. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  420. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.d.ts +1 -1
  421. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  422. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  423. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.d.ts +1 -1
  424. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  425. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.js.map +1 -1
  426. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts +2 -2
  427. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts.map +1 -1
  428. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
  429. package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts +2 -2
  430. package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts.map +1 -1
  431. package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
  432. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts +1 -1
  433. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -1
  434. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -1
  435. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts +1 -1
  436. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts.map +1 -1
  437. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -1
  438. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts +1 -1
  439. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts.map +1 -1
  440. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js.map +1 -1
  441. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts +1 -1
  442. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  443. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +12 -3
  444. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  445. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts +1 -1
  446. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  447. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +2 -1
  448. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
  449. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.d.ts +3 -0
  450. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.d.ts.map +1 -0
  451. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.js +10 -0
  452. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.js.map +1 -0
  453. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts +2 -2
  454. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
  455. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
  456. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts +1 -1
  457. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  458. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +2 -1
  459. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
  460. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.d.ts +10 -10
  461. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  462. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.js +13 -2
  463. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.js.map +1 -1
  464. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts +3 -3
  465. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  466. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +6 -11
  467. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
  468. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.d.ts +1 -1
  469. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
  470. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.js.map +1 -1
  471. package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts +3 -3
  472. package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts.map +1 -1
  473. package/node_modules/@earendil-works/pi-ai/dist/stream.js.map +1 -1
  474. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +13 -3
  475. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  476. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  477. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts +3 -3
  478. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  479. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js +2 -2
  480. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js.map +1 -1
  481. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.d.ts +1 -1
  482. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.d.ts.map +1 -1
  483. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.js.map +1 -1
  484. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts +19 -0
  485. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -0
  486. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js +55 -0
  487. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -0
  488. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts +3 -3
  489. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  490. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js +45 -69
  491. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  492. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts +6 -5
  493. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
  494. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js +1 -0
  495. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js.map +1 -1
  496. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts +1 -1
  497. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  498. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js +1 -1
  499. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  500. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/types.d.ts +9 -2
  501. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/types.d.ts.map +1 -1
  502. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/types.js.map +1 -1
  503. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +1 -1
  504. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  505. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  506. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.d.ts +1 -1
  507. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.d.ts.map +1 -1
  508. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
  509. package/node_modules/@earendil-works/pi-ai/package.json +15 -16
  510. package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +55 -0
  511. package/node_modules/@earendil-works/pi-coding-agent/README.md +6 -4
  512. package/node_modules/@earendil-works/pi-coding-agent/dist/bun/cli.d.ts.map +1 -1
  513. package/node_modules/@earendil-works/pi-coding-agent/dist/bun/cli.js.map +1 -1
  514. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts +1 -1
  515. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
  516. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js.map +1 -1
  517. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.d.ts +2 -2
  518. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.d.ts.map +1 -1
  519. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.js.map +1 -1
  520. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.d.ts.map +1 -1
  521. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js.map +1 -1
  522. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/initial-message.d.ts +1 -1
  523. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/initial-message.d.ts.map +1 -1
  524. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/initial-message.js.map +1 -1
  525. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/list-models.d.ts +1 -1
  526. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/list-models.d.ts.map +1 -1
  527. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/list-models.js.map +1 -1
  528. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/session-picker.d.ts +1 -1
  529. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/session-picker.d.ts.map +1 -1
  530. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/session-picker.js.map +1 -1
  531. package/node_modules/@earendil-works/pi-coding-agent/dist/cli.d.ts.map +1 -1
  532. package/node_modules/@earendil-works/pi-coding-agent/dist/cli.js +4 -10
  533. package/node_modules/@earendil-works/pi-coding-agent/dist/cli.js.map +1 -1
  534. package/node_modules/@earendil-works/pi-coding-agent/dist/config.d.ts.map +1 -1
  535. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +13 -14
  536. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js.map +1 -1
  537. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.d.ts +9 -9
  538. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.d.ts.map +1 -1
  539. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.js +6 -6
  540. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.js.map +1 -1
  541. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts +7 -7
  542. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts.map +1 -1
  543. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +3 -2
  544. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js.map +1 -1
  545. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +23 -21
  546. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  547. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +99 -137
  548. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  549. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-guidance.d.ts.map +1 -1
  550. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-guidance.js.map +1 -1
  551. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.d.ts +1 -1
  552. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  553. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.js +3 -2
  554. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  555. package/node_modules/@earendil-works/pi-coding-agent/dist/core/bash-executor.d.ts +1 -1
  556. package/node_modules/@earendil-works/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
  557. package/node_modules/@earendil-works/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
  558. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +3 -3
  559. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  560. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  561. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts +2 -2
  562. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  563. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  564. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/index.d.ts +3 -3
  565. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/index.d.ts.map +1 -1
  566. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/index.js.map +1 -1
  567. package/node_modules/@earendil-works/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
  568. package/node_modules/@earendil-works/pi-coding-agent/dist/core/exec.js.map +1 -1
  569. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/index.d.ts +1 -1
  570. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/index.d.ts.map +1 -1
  571. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/index.js +8 -6
  572. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/index.js.map +1 -1
  573. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/template.js +6 -3
  574. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/tool-renderer.d.ts +2 -2
  575. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  576. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/tool-renderer.js.map +1 -1
  577. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.d.ts +8 -8
  578. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  579. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  580. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.d.ts +2 -2
  581. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  582. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js +12 -29
  583. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  584. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +6 -6
  585. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  586. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  587. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +19 -19
  588. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  589. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  590. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/wrapper.d.ts +2 -2
  591. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -1
  592. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/wrapper.js.map +1 -1
  593. package/node_modules/@earendil-works/pi-coding-agent/dist/core/footer-data-provider.d.ts.map +1 -1
  594. package/node_modules/@earendil-works/pi-coding-agent/dist/core/footer-data-provider.js.map +1 -1
  595. package/node_modules/@earendil-works/pi-coding-agent/dist/core/http-dispatcher.d.ts +21 -0
  596. package/node_modules/@earendil-works/pi-coding-agent/dist/core/http-dispatcher.d.ts.map +1 -0
  597. package/node_modules/@earendil-works/pi-coding-agent/dist/core/http-dispatcher.js +48 -0
  598. package/node_modules/@earendil-works/pi-coding-agent/dist/core/http-dispatcher.js.map +1 -0
  599. package/node_modules/@earendil-works/pi-coding-agent/dist/core/index.d.ts +8 -8
  600. package/node_modules/@earendil-works/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  601. package/node_modules/@earendil-works/pi-coding-agent/dist/core/index.js.map +1 -1
  602. package/node_modules/@earendil-works/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  603. package/node_modules/@earendil-works/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  604. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts +4 -4
  605. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  606. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +7 -3
  607. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  608. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts +1 -1
  609. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  610. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  611. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts +2 -1
  612. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  613. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +48 -32
  614. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  615. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.d.ts +1 -1
  616. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  617. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.js +6 -20
  618. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  619. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
  620. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
  621. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.d.ts +9 -9
  622. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  623. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +38 -31
  624. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  625. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts +13 -13
  626. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  627. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +9 -4
  628. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js.map +1 -1
  629. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts +1 -1
  630. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  631. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +32 -24
  632. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  633. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
  634. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  635. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +26 -13
  636. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  637. package/node_modules/@earendil-works/pi-coding-agent/dist/core/skills.d.ts +2 -2
  638. package/node_modules/@earendil-works/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  639. package/node_modules/@earendil-works/pi-coding-agent/dist/core/skills.js +8 -22
  640. package/node_modules/@earendil-works/pi-coding-agent/dist/core/skills.js.map +1 -1
  641. package/node_modules/@earendil-works/pi-coding-agent/dist/core/slash-commands.d.ts +1 -1
  642. package/node_modules/@earendil-works/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  643. package/node_modules/@earendil-works/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  644. package/node_modules/@earendil-works/pi-coding-agent/dist/core/source-info.d.ts +1 -1
  645. package/node_modules/@earendil-works/pi-coding-agent/dist/core/source-info.d.ts.map +1 -1
  646. package/node_modules/@earendil-works/pi-coding-agent/dist/core/source-info.js.map +1 -1
  647. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.d.ts +1 -1
  648. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  649. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +1 -0
  650. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  651. package/node_modules/@earendil-works/pi-coding-agent/dist/core/telemetry.d.ts +1 -1
  652. package/node_modules/@earendil-works/pi-coding-agent/dist/core/telemetry.d.ts.map +1 -1
  653. package/node_modules/@earendil-works/pi-coding-agent/dist/core/telemetry.js.map +1 -1
  654. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts +2 -2
  655. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  656. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +9 -3
  657. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  658. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit-diff.d.ts +3 -1
  659. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit-diff.d.ts.map +1 -1
  660. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit-diff.js +8 -1
  661. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit-diff.js.map +1 -1
  662. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts +5 -3
  663. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  664. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +3 -2
  665. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  666. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts +2 -2
  667. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  668. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  669. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts +2 -2
  670. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  671. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  672. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/index.d.ts +17 -17
  673. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
  674. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  675. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts +2 -2
  676. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  677. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  678. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/output-accumulator.d.ts +3 -1
  679. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/output-accumulator.d.ts.map +1 -1
  680. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/output-accumulator.js +9 -3
  681. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/output-accumulator.js.map +1 -1
  682. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
  683. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js +3 -22
  684. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
  685. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts +2 -2
  686. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  687. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  688. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +1 -1
  689. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js.map +1 -1
  690. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  691. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  692. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  693. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/truncate.d.ts.map +1 -1
  694. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/truncate.js +12 -2
  695. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/truncate.js.map +1 -1
  696. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts +1 -1
  697. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  698. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  699. package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts +30 -29
  700. package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts.map +1 -1
  701. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +2 -1
  702. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js.map +1 -1
  703. package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts +1 -1
  704. package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -1
  705. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +7 -6
  706. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -1
  707. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  708. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js.map +1 -1
  709. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/index.d.ts +5 -5
  710. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/index.d.ts.map +1 -1
  711. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/index.js.map +1 -1
  712. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/armin.d.ts.map +1 -1
  713. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/armin.js.map +1 -1
  714. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  715. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  716. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  717. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  718. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
  719. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  720. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  721. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  722. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  723. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  724. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  725. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  726. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  727. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  728. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts +2 -2
  729. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  730. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.js +1 -1
  731. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.js.map +1 -1
  732. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts +2 -2
  733. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  734. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js +2 -2
  735. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  736. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  737. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  738. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-editor.js.map +1 -1
  739. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts +2 -2
  740. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  741. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.js.map +1 -1
  742. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  743. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/daxnuts.js.map +1 -1
  744. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
  745. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
  746. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  747. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  748. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  749. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  750. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  751. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  752. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.js.map +1 -1
  753. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  754. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -1
  755. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  756. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -1
  757. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +4 -3
  758. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  759. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.js +16 -7
  760. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  761. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.d.ts +31 -31
  762. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -1
  763. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.js.map +1 -1
  764. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  765. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  766. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +10 -2
  767. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  768. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +31 -6
  769. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
  770. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +2 -2
  771. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  772. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  773. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  774. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  775. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  776. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  777. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  778. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +1 -1
  779. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  780. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  781. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +3 -3
  782. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  783. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -1
  784. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  785. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  786. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +15 -0
  787. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  788. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  789. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  790. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  791. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  792. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  793. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  794. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/theme-selector.js.map +1 -1
  795. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  796. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  797. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  798. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  799. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  800. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  801. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  802. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -1
  803. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  804. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  806. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  807. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +4 -3
  808. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  809. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +37 -14
  810. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  811. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  812. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  813. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js +37 -28
  814. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  815. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.d.ts +1 -1
  816. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
  817. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
  818. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +5 -5
  819. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  820. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +1 -1
  821. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  822. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts +2 -2
  823. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  824. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  825. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +4 -4
  826. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  827. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  828. package/node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.d.ts.map +1 -1
  829. package/node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.js +40 -1
  830. package/node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.js.map +1 -1
  831. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/changelog.d.ts +1 -1
  832. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  833. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  834. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  835. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  836. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard.d.ts.map +1 -1
  837. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard.js.map +1 -1
  838. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/exif-orientation.d.ts +1 -1
  839. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/exif-orientation.d.ts.map +1 -1
  840. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/exif-orientation.js.map +1 -1
  841. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-convert.d.ts.map +1 -1
  842. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-convert.js.map +1 -1
  843. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
  844. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
  845. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/paths.d.ts +16 -1
  846. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/paths.d.ts.map +1 -1
  847. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/paths.js +49 -7
  848. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/paths.js.map +1 -1
  849. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
  850. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.js.map +1 -1
  851. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/syntax-highlight.d.ts.map +1 -1
  852. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/syntax-highlight.js.map +1 -1
  853. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  854. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  855. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.d.ts +2 -1
  856. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.d.ts.map +1 -1
  857. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.js +9 -4
  858. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.js.map +1 -1
  859. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/windows-self-update.d.ts.map +1 -1
  860. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/windows-self-update.js.map +1 -1
  861. package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +44 -12
  862. package/node_modules/@earendil-works/pi-coding-agent/docs/index.md +6 -4
  863. package/node_modules/@earendil-works/pi-coding-agent/docs/models.md +8 -2
  864. package/node_modules/@earendil-works/pi-coding-agent/docs/packages.md +5 -4
  865. package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +3 -1
  866. package/node_modules/@earendil-works/pi-coding-agent/docs/sdk.md +2 -0
  867. package/node_modules/@earendil-works/pi-coding-agent/docs/termux.md +1 -1
  868. package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +2 -2
  869. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +2 -2
  870. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  871. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  872. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/doom-overlay/doom-component.ts +2 -2
  873. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/doom-overlay/index.ts +3 -3
  874. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/overlay-qa-tests.ts +97 -66
  875. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/overlay-test.ts +7 -4
  876. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/plan-mode/index.ts +1 -1
  877. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +2 -2
  878. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/subagent/index.ts +1 -1
  879. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +3 -3
  880. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +1425 -0
  881. package/node_modules/@earendil-works/pi-coding-agent/package.json +32 -31
  882. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  883. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  884. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts +1 -1
  885. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
  886. package/node_modules/@earendil-works/pi-tui/dist/components/box.js.map +1 -1
  887. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts +1 -1
  888. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -1
  889. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  890. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +3 -3
  891. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  892. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  893. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts +2 -2
  894. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -1
  895. package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
  896. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts +1 -1
  897. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  898. package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
  899. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts +5 -5
  900. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  901. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js +4 -4
  902. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  903. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts +1 -1
  904. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  905. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  906. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts +1 -1
  907. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
  908. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
  909. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts +1 -1
  910. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  911. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  912. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts +1 -1
  913. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +1 -1
  914. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +1 -1
  915. package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts +1 -1
  916. package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +1 -1
  917. package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +1 -1
  918. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts +1 -1
  919. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +1 -1
  920. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +1 -1
  921. package/node_modules/@earendil-works/pi-tui/dist/editor-component.d.ts +2 -2
  922. package/node_modules/@earendil-works/pi-tui/dist/editor-component.d.ts.map +1 -1
  923. package/node_modules/@earendil-works/pi-tui/dist/editor-component.js.map +1 -1
  924. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +22 -22
  925. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  926. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  927. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts +1 -1
  928. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
  929. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  930. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  931. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +25 -15
  932. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  933. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +2 -2
  934. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  935. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  936. package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  937. package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  938. package/node_modules/@earendil-works/pi-tui/package.json +8 -11
  939. package/package.json +13 -8
  940. package/dist/bin/forgecli.d.ts +0 -2
  941. package/dist/bin/forgecli.js +0 -6
  942. package/dist/bin/forgecli.js.map +0 -1
  943. package/node_modules/koffi/CHANGELOG.md +0 -1093
  944. package/node_modules/koffi/LICENSE.txt +0 -22
  945. package/node_modules/koffi/README.md +0 -43
  946. package/node_modules/koffi/build/koffi/darwin_arm64/koffi.node +0 -0
  947. package/node_modules/koffi/build/koffi/darwin_x64/koffi.node +0 -0
  948. package/node_modules/koffi/build/koffi/freebsd_arm64/koffi.node +0 -0
  949. package/node_modules/koffi/build/koffi/freebsd_ia32/koffi.node +0 -0
  950. package/node_modules/koffi/build/koffi/freebsd_x64/koffi.node +0 -0
  951. package/node_modules/koffi/build/koffi/linux_arm64/koffi.node +0 -0
  952. package/node_modules/koffi/build/koffi/linux_armhf/koffi.node +0 -0
  953. package/node_modules/koffi/build/koffi/linux_ia32/koffi.node +0 -0
  954. package/node_modules/koffi/build/koffi/linux_loong64/koffi.node +0 -0
  955. package/node_modules/koffi/build/koffi/linux_riscv64d/koffi.node +0 -0
  956. package/node_modules/koffi/build/koffi/linux_x64/koffi.node +0 -0
  957. package/node_modules/koffi/build/koffi/musl_arm64/koffi.node +0 -0
  958. package/node_modules/koffi/build/koffi/musl_x64/koffi.node +0 -0
  959. package/node_modules/koffi/build/koffi/openbsd_ia32/koffi.node +0 -0
  960. package/node_modules/koffi/build/koffi/openbsd_x64/koffi.node +0 -0
  961. package/node_modules/koffi/build/koffi/win32_arm64/koffi.exp +0 -0
  962. package/node_modules/koffi/build/koffi/win32_arm64/koffi.lib +0 -0
  963. package/node_modules/koffi/build/koffi/win32_arm64/koffi.node +0 -0
  964. package/node_modules/koffi/build/koffi/win32_ia32/koffi.exp +0 -0
  965. package/node_modules/koffi/build/koffi/win32_ia32/koffi.lib +0 -0
  966. package/node_modules/koffi/build/koffi/win32_ia32/koffi.node +0 -0
  967. package/node_modules/koffi/build/koffi/win32_x64/koffi.exp +0 -0
  968. package/node_modules/koffi/build/koffi/win32_x64/koffi.lib +0 -0
  969. package/node_modules/koffi/build/koffi/win32_x64/koffi.node +0 -0
  970. package/node_modules/koffi/doc/benchmarks.md +0 -126
  971. package/node_modules/koffi/doc/callbacks.md +0 -210
  972. package/node_modules/koffi/doc/contribute.md +0 -148
  973. package/node_modules/koffi/doc/functions.md +0 -250
  974. package/node_modules/koffi/doc/index.md +0 -61
  975. package/node_modules/koffi/doc/input.md +0 -471
  976. package/node_modules/koffi/doc/migration.md +0 -159
  977. package/node_modules/koffi/doc/misc.md +0 -180
  978. package/node_modules/koffi/doc/output.md +0 -305
  979. package/node_modules/koffi/doc/packaging.md +0 -88
  980. package/node_modules/koffi/doc/platforms.md +0 -36
  981. package/node_modules/koffi/doc/pointers.md +0 -328
  982. package/node_modules/koffi/doc/start.md +0 -118
  983. package/node_modules/koffi/doc/unions.md +0 -186
  984. package/node_modules/koffi/doc/variables.md +0 -102
  985. package/node_modules/koffi/index.d.ts +0 -288
  986. package/node_modules/koffi/index.js +0 -634
  987. package/node_modules/koffi/indirect.js +0 -533
  988. package/node_modules/koffi/lib/native/base/base.cc +0 -11015
  989. package/node_modules/koffi/lib/native/base/base.hh +0 -6003
  990. package/node_modules/koffi/lib/native/base/crc.inc +0 -2214
  991. package/node_modules/koffi/lib/native/base/crc_gen.py +0 -72
  992. package/node_modules/koffi/lib/native/base/mimetypes.inc +0 -1248
  993. package/node_modules/koffi/lib/native/base/mimetypes_gen.py +0 -58
  994. package/node_modules/koffi/lib/native/base/tower.cc +0 -821
  995. package/node_modules/koffi/lib/native/base/tower.hh +0 -81
  996. package/node_modules/koffi/lib/native/base/unicode.inc +0 -408
  997. package/node_modules/koffi/lib/native/base/unicode_gen.py +0 -152
  998. package/node_modules/koffi/package.json +0 -38
  999. package/node_modules/koffi/src/cnoke/LICENSE.txt +0 -22
  1000. package/node_modules/koffi/src/cnoke/README.md +0 -99
  1001. package/node_modules/koffi/src/cnoke/assets/FindCNoke.cmake +0 -127
  1002. package/node_modules/koffi/src/cnoke/assets/toolchains.json +0 -126
  1003. package/node_modules/koffi/src/cnoke/assets/win_delay_hook.c +0 -36
  1004. package/node_modules/koffi/src/cnoke/cnoke.js +0 -170
  1005. package/node_modules/koffi/src/cnoke/package.json +0 -24
  1006. package/node_modules/koffi/src/cnoke/src/builder.js +0 -511
  1007. package/node_modules/koffi/src/cnoke/src/index.js +0 -10
  1008. package/node_modules/koffi/src/cnoke/src/tools.js +0 -407
  1009. package/node_modules/koffi/src/koffi/CMakeLists.txt +0 -182
  1010. package/node_modules/koffi/src/koffi/src/abi_arm32.cc +0 -1018
  1011. package/node_modules/koffi/src/koffi/src/abi_arm32_asm.S +0 -169
  1012. package/node_modules/koffi/src/koffi/src/abi_arm64.cc +0 -1295
  1013. package/node_modules/koffi/src/koffi/src/abi_arm64_asm.S +0 -195
  1014. package/node_modules/koffi/src/koffi/src/abi_arm64_asm.asm +0 -174
  1015. package/node_modules/koffi/src/koffi/src/abi_loong64.cc +0 -5
  1016. package/node_modules/koffi/src/koffi/src/abi_loong64_asm.S +0 -204
  1017. package/node_modules/koffi/src/koffi/src/abi_riscv64.cc +0 -915
  1018. package/node_modules/koffi/src/koffi/src/abi_riscv64_asm.S +0 -203
  1019. package/node_modules/koffi/src/koffi/src/abi_x64_sysv.cc +0 -939
  1020. package/node_modules/koffi/src/koffi/src/abi_x64_sysv_asm.S +0 -231
  1021. package/node_modules/koffi/src/koffi/src/abi_x64_win.cc +0 -715
  1022. package/node_modules/koffi/src/koffi/src/abi_x64_win_asm.S +0 -166
  1023. package/node_modules/koffi/src/koffi/src/abi_x64_win_asm.asm +0 -192
  1024. package/node_modules/koffi/src/koffi/src/abi_x86.cc +0 -860
  1025. package/node_modules/koffi/src/koffi/src/abi_x86_asm.S +0 -193
  1026. package/node_modules/koffi/src/koffi/src/abi_x86_asm.asm +0 -177
  1027. package/node_modules/koffi/src/koffi/src/call.cc +0 -1326
  1028. package/node_modules/koffi/src/koffi/src/call.hh +0 -179
  1029. package/node_modules/koffi/src/koffi/src/errno.inc +0 -462
  1030. package/node_modules/koffi/src/koffi/src/ffi.cc +0 -2702
  1031. package/node_modules/koffi/src/koffi/src/ffi.hh +0 -354
  1032. package/node_modules/koffi/src/koffi/src/init.js +0 -105
  1033. package/node_modules/koffi/src/koffi/src/parser.cc +0 -220
  1034. package/node_modules/koffi/src/koffi/src/parser.hh +0 -54
  1035. package/node_modules/koffi/src/koffi/src/util.cc +0 -1807
  1036. package/node_modules/koffi/src/koffi/src/util.hh +0 -221
  1037. package/node_modules/koffi/src/koffi/src/uv.cc +0 -193
  1038. package/node_modules/koffi/src/koffi/src/uv.def +0 -10
  1039. package/node_modules/koffi/src/koffi/src/uv.hh +0 -40
  1040. package/node_modules/koffi/src/koffi/src/win32.cc +0 -198
  1041. package/node_modules/koffi/src/koffi/src/win32.hh +0 -119
  1042. package/node_modules/koffi/src/koffi/tools/write_trampolines.js +0 -77
  1043. package/node_modules/koffi/vendor/node-addon-api/LICENSE.md +0 -9
  1044. package/node_modules/koffi/vendor/node-addon-api/README.md +0 -95
  1045. package/node_modules/koffi/vendor/node-addon-api/napi-inl.deprecated.h +0 -186
  1046. package/node_modules/koffi/vendor/node-addon-api/napi-inl.h +0 -7033
  1047. package/node_modules/koffi/vendor/node-addon-api/napi.h +0 -3309
  1048. package/node_modules/koffi/vendor/node-api-headers/LICENSE +0 -21
  1049. package/node_modules/koffi/vendor/node-api-headers/README.md +0 -95
  1050. package/node_modules/koffi/vendor/node-api-headers/def/js_native_api.def +0 -125
  1051. package/node_modules/koffi/vendor/node-api-headers/def/node_api.def +0 -157
  1052. package/node_modules/koffi/vendor/node-api-headers/include/js_native_api.h +0 -591
  1053. package/node_modules/koffi/vendor/node-api-headers/include/js_native_api_types.h +0 -210
  1054. package/node_modules/koffi/vendor/node-api-headers/include/node_api.h +0 -265
  1055. package/node_modules/koffi/vendor/node-api-headers/include/node_api_types.h +0 -58
  1056. package/node_modules/koffi/vendor/node-api-headers/include/uv/aix.h +0 -32
  1057. package/node_modules/koffi/vendor/node-api-headers/include/uv/bsd.h +0 -34
  1058. package/node_modules/koffi/vendor/node-api-headers/include/uv/darwin.h +0 -61
  1059. package/node_modules/koffi/vendor/node-api-headers/include/uv/errno.h +0 -483
  1060. package/node_modules/koffi/vendor/node-api-headers/include/uv/linux.h +0 -34
  1061. package/node_modules/koffi/vendor/node-api-headers/include/uv/os390.h +0 -33
  1062. package/node_modules/koffi/vendor/node-api-headers/include/uv/posix.h +0 -31
  1063. package/node_modules/koffi/vendor/node-api-headers/include/uv/sunos.h +0 -44
  1064. package/node_modules/koffi/vendor/node-api-headers/include/uv/threadpool.h +0 -37
  1065. package/node_modules/koffi/vendor/node-api-headers/include/uv/tree.h +0 -521
  1066. package/node_modules/koffi/vendor/node-api-headers/include/uv/unix.h +0 -512
  1067. package/node_modules/koffi/vendor/node-api-headers/include/uv/version.h +0 -43
  1068. package/node_modules/koffi/vendor/node-api-headers/include/uv/win.h +0 -698
  1069. package/node_modules/koffi/vendor/node-api-headers/include/uv.h +0 -1990
@@ -8,6 +8,19 @@
8
8
  //
9
9
  // Per INIT_PARITY_SPEC.md and PLAN.md (rev 2) phases A–G.
10
10
  //
11
+ // ── Descriptor model (FORGE-S25-T24, B-5) ────────────────────────────────
12
+ //
13
+ // Phases 1–3 are driven by LlmPhaseDescriptor records (forge-init/phase-descriptors.ts).
14
+ // The generic runLlmPhase() runner executes the shared skeleton:
15
+ // banner → [LLM dispatch + waitForIdle (Phases 1–2)] | [tool calls (Phase 3)]
16
+ // → verify → [retry steer (Phases 1–2)] → [user confirm] → postVerify → progress
17
+ //
18
+ // Phase 4 (11 deterministic steps) is too heterogeneous for the generic runner and is
19
+ // extracted into forge-init/phase4-register.ts → runPhase4().
20
+ //
21
+ // This file is the orchestrator: flag parsing, resume detection, configCache population
22
+ // (between Phase 1 and Phase 2), phase loop, post-init report.
23
+ //
11
24
  // Iron Laws:
12
25
  // - Iron Law 1: no edits to forge/ or pi-mono/
13
26
  // - Iron Law 6: execFile with argv arrays — no shell-string interpolation
@@ -19,17 +32,44 @@
19
32
  // #4: /forge:enhance — sentinel + advisory only; no sendUserMessage dispatch
20
33
  // #5: Tomoshibi — runRefreshKbLinks() native TS port; no shell-out
21
34
  // #9: Health check — runHealthCheck() direct call; NOT via sendUserMessage
22
- import { execFile } from "node:child_process";
35
+ //
36
+ // ── Async/sync contract (N-B-C) ─────────────────────────────────────────────
37
+ //
38
+ // `sendToAgent(text)` is SYNCHRONOUS — it wraps `pi.sendUserMessage(text, { deliverAs: "steer" })`
39
+ // which enqueues the steer message and returns immediately. The agent does NOT start running
40
+ // until the current handler yields (awaits).
41
+ //
42
+ // `await ctx.waitForIdle()` is the SOLE synchronisation primitive. It suspends the handler
43
+ // until the agent has finished processing all pending steer messages and has reached an
44
+ // idle state. All reads of phase deliverables (e.g. `.forge/config.json` for Phase 1,
45
+ // KB docs for Phase 2, `.forge/workflows/` for Phase 3) MUST occur AFTER a `waitForIdle`.
46
+ //
47
+ // Pattern for every phase:
48
+ // sendToAgent(promptText); // enqueue — synchronous
49
+ // await ctx.waitForIdle(); // suspend until agent completes — asynchronous
50
+ // const result = verifyPhaseN(); // read deliverable — synchronous
51
+ //
52
+ // ── Config cache boundary (B-4, N-B-A) ──────────────────────────────────────
53
+ //
54
+ // `.forge/config.json` is WRITTEN by the Phase-1 agent. Any read before Phase 1's
55
+ // `waitForIdle` returns stale or absent data. `configCache` is populated once,
56
+ // immediately after Phase 1 completes, and reused throughout Phase 2, Phase 4,
57
+ // the post-init hook, and the report section — reducing 8 fs.readFileSync calls to 1.
58
+ //
59
+ // `verifyPhase1` inside `forge-init/verifiers.ts` intentionally reads config.json
60
+ // directly rather than using `configCache` — it validates the Phase-1 deliverable
61
+ // and must see the freshly written file.
23
62
  import * as fs from "node:fs";
24
63
  import * as path from "node:path";
25
64
  import { fileURLToPath } from "node:url";
26
- import { promisify } from "node:util";
27
65
  import { runHealthCheck } from "./health-check.js";
28
- import { buildProjectContext, computeCalibrationBaseline, discoverProjectName, validateProjectContext, writeProjectContext, } from "./init-context.js";
29
- import { deleteInitProgress, readInitProgress, writeInitProgress } from "./init-progress.js";
30
- import { getRefreshKbLinksHandler } from "./refresh-kb-links.js";
66
+ import { discoverProjectName } from "./init-context.js";
67
+ import { deleteInitProgress, readInitProgress } from "./init-progress.js";
31
68
  import { emitSyntheticEvent } from "./hook-dispatcher.js";
32
- const execFileAsync = promisify(execFile);
69
+ import { execFileAsync } from "./lib/exec-helpers.js";
70
+ import { runLlmPhase, PHASE_1, PHASE_2, PHASE_3 } from "./forge-init/phase-descriptors.js";
71
+ import { runPhase4 } from "./forge-init/phase4-register.js";
72
+ import { verifyPhase1, verifyPhase3 } from "./forge-init/verifiers.js";
33
73
  // ── Bundle path resolution ─────────────────────────────────────────────────
34
74
  const _EXTENSION_DIR = path.dirname(fileURLToPath(import.meta.url));
35
75
  // dist/extensions/forgecli/ → dist/ → <pkg-root>/
@@ -134,260 +174,6 @@ function parseInitFlags(args) {
134
174
  invalidPhase,
135
175
  };
136
176
  }
137
- // ── Tool invocation helpers ────────────────────────────────────────────────
138
- async function runTool(toolPath, argv, cwd, timeout = 30000) {
139
- try {
140
- await execFileAsync("node", [toolPath, ...argv], {
141
- cwd,
142
- timeout,
143
- encoding: "utf8",
144
- });
145
- }
146
- catch (err) {
147
- const e = err;
148
- throw new Error(`Tool ${path.basename(toolPath)} failed: ${e.stderr?.trim() || e.message || "unknown error"}`);
149
- }
150
- }
151
- async function runToolAdvisory(toolPath, argv, cwd, ctx, label, timeout = 30000) {
152
- try {
153
- await runTool(toolPath, argv, cwd, timeout);
154
- return true;
155
- }
156
- catch (err) {
157
- const e = err;
158
- ctx.ui.notify(`△ ${label}: ${e.message ?? "failed"} — proceeding.`, "warning");
159
- return false;
160
- }
161
- }
162
- function verifyPhase1(cwd) {
163
- const configPath = path.join(cwd, ".forge", "config.json");
164
- if (!fs.existsSync(configPath)) {
165
- return { ok: false, missing: [".forge/config.json"], reason: "config file not written" };
166
- }
167
- let cfg;
168
- try {
169
- cfg = JSON.parse(fs.readFileSync(configPath, "utf8"));
170
- }
171
- catch (err) {
172
- const e = err;
173
- return { ok: false, missing: [".forge/config.json"], reason: `JSON parse failed: ${e.message ?? "?"}` };
174
- }
175
- const missing = [];
176
- if (!cfg.version)
177
- missing.push("version");
178
- const proj = cfg.project;
179
- if (!proj?.name)
180
- missing.push("project.name");
181
- if (!proj?.prefix)
182
- missing.push("project.prefix");
183
- if (!cfg.stack)
184
- missing.push("stack");
185
- if (!cfg.commands)
186
- missing.push("commands");
187
- const paths = cfg.paths;
188
- if (!paths?.engineering)
189
- missing.push("paths.engineering");
190
- if (!paths?.store)
191
- missing.push("paths.store");
192
- if (!paths?.workflows)
193
- missing.push("paths.workflows");
194
- return { ok: missing.length === 0, missing };
195
- }
196
- function verifyPhase2(cwd, kbPath) {
197
- const archDocs = ["stack", "processes", "database", "routing", "deployment", "entity-model", "stack-checklist"];
198
- const missing = [];
199
- for (const d of archDocs) {
200
- if (!fs.existsSync(path.join(cwd, kbPath, "architecture", `${d}.md`))) {
201
- missing.push(`${kbPath}/architecture/${d}.md`);
202
- }
203
- }
204
- return { ok: missing.length === 0, missing };
205
- }
206
- function verifyPhase3(cwd) {
207
- const dirs = ["workflows", "personas", "skills", "templates"];
208
- const missing = [];
209
- for (const d of dirs) {
210
- const dir = path.join(cwd, ".forge", d);
211
- let count = 0;
212
- try {
213
- count = fs.readdirSync(dir).filter((f) => f.endsWith(".md") || f.endsWith(".json")).length;
214
- }
215
- catch {
216
- count = 0;
217
- }
218
- if (count === 0)
219
- missing.push(`.forge/${d}/ (empty)`);
220
- }
221
- return { ok: missing.length === 0, missing };
222
- }
223
- // ── Discovery prompt text ──────────────────────────────────────────────────
224
- function buildPhase1PromptText(bundleRoot, projectName) {
225
- const discoveryDir = path.join(bundleRoot, ".init", "discovery");
226
- const topics = ["stack", "processes", "database", "routing", "testing"];
227
- const topicLines = topics.map((t) => ` • ${path.join(discoveryDir, `discover-${t}.md`)}`).join("\n");
228
- return `## /forge:init Phase 1 — Collect: 5 parallel discovery scans
229
-
230
- Project: ${projectName}
231
-
232
- Run 5 discovery scans concurrently. In a single response, issue 5 parallel tool
233
- calls — one per discovery topic — using whatever read/search tools you have
234
- available (Read, Glob, Grep, Bash). If a \`subagent\` tool is exposed in your
235
- toolset, you MAY dispatch via it (mode: "parallel"); otherwise execute the
236
- scans inline. Do NOT preface with "I don't have a subagent tool" — either path
237
- is acceptable, what matters is concurrency and the resulting deliverable.
238
-
239
- For each topic:
240
- 1. Read the discovery prompt file at its assigned path (shown below)
241
- 2. Analyze the current project codebase
242
- 3. Capture structured findings
243
-
244
- Discovery prompt files:
245
- ${topicLines}
246
-
247
- After all 5 complete, synthesize the findings into a unified config and write .forge/config.json.
248
-
249
- Required .forge/config.json structure:
250
- {
251
- "version": "1",
252
- "project": { "name": "${projectName}", "prefix": "<UPPERCASE_ABBREV>" },
253
- "stack": { "primary": [...], "test": <framework>, "build": <tool>, "lint": <tool> },
254
- "commands": { "test": "<test cmd>", "build": "<build cmd>", "lint": "<lint cmd>" },
255
- "paths": {
256
- "engineering": "engineering",
257
- "store": ".forge/store",
258
- "workflows": ".forge/workflows",
259
- "commands": ".claude/commands/forge",
260
- "templates": ".forge/templates"
261
- }
262
- }
263
-
264
- Write the config with: node "${path.join(bundleRoot, "tools/manage-config.cjs")}" set <key> <value>
265
- Or write .forge/config.json directly as valid JSON.`;
266
- }
267
- function buildPhase2PromptText(bundleRoot, kbPath, projectName) {
268
- const generateKbDocPath = path.join(bundleRoot, ".init", "generation", "generate-kb-doc.md");
269
- const docs = ["stack", "processes", "database", "routing", "deployment", "entity-model", "stack-checklist"];
270
- const docLines = docs.map((d) => ` • ${kbPath}/architecture/${d}.md`).join("\n");
271
- return `## /forge:init Phase 2 — Discover: 7 parallel KB doc generation
272
-
273
- Project: ${projectName}
274
- KB path: ${kbPath}/
275
- Rulebook: ${generateKbDocPath}
276
-
277
- Generate 7 knowledge-base documents concurrently. In a single response, issue
278
- 7 parallel tool calls — one per document — using whatever read/search/write
279
- tools you have available (Read, Glob, Grep, Bash, Write). If a \`subagent\`
280
- tool is exposed in your toolset, you MAY dispatch via it (mode: "parallel");
281
- otherwise execute the generation inline. Do NOT preface with "I don't have a
282
- subagent tool" — either path is acceptable, what matters is concurrency and
283
- the 7 output files.
284
-
285
- For each document:
286
- 1. Read the rulebook at: ${generateKbDocPath}
287
- 2. Analyze the project codebase for its assigned topic
288
- 3. Write the resulting document to its assigned output file
289
-
290
- Documents to generate:
291
- ${docLines}
292
-
293
- After all complete, check for any that returned "FAILED:" in their output — retry those once.
294
-
295
- Also create these index files after generation:
296
- - ${kbPath}/architecture/INDEX.md
297
- - ${kbPath}/business-domain/INDEX.md
298
- - ${kbPath}/MASTER_INDEX.md (scaffold)`;
299
- }
300
- // ── Phase 4 helper — .gitignore update ────────────────────────────────────
301
- function updateGitignore(cwd, ctx) {
302
- const gitignorePath = path.join(cwd, ".gitignore");
303
- if (!fs.existsSync(gitignorePath)) {
304
- // No gitignore — skip
305
- return;
306
- }
307
- let content;
308
- try {
309
- content = fs.readFileSync(gitignorePath, "utf8");
310
- }
311
- catch {
312
- return;
313
- }
314
- const IGNORE_PATTERNS = [".forge/store/events/", ".forge/store/events", ".forge/store/", ".forge/"];
315
- const lines = content.split("\n");
316
- const alreadyIgnored = lines.some((line) => {
317
- const trimmed = line.trim();
318
- if (!trimmed || trimmed.startsWith("#"))
319
- return false;
320
- return IGNORE_PATTERNS.some((pat) => trimmed.includes(pat));
321
- });
322
- if (alreadyIgnored) {
323
- ctx.ui.notify("〇 .forge/store/events/ already gitignored — skipped.", "info");
324
- return;
325
- }
326
- const toAppend = "\n# Forge — transient agent event logs (one file per phase, do not commit)\n.forge/store/events/\n";
327
- try {
328
- fs.appendFileSync(gitignorePath, toAppend, "utf8");
329
- ctx.ui.notify("〇 Appended .forge/store/events/ to .gitignore.", "info");
330
- }
331
- catch {
332
- ctx.ui.notify("△ Could not update .gitignore — update manually.", "warning");
333
- }
334
- }
335
- // ── Phase 4 helper — agent instruction file linking ────────────────────────
336
- async function linkAgentInstructionFile(cwd, kbPath, projectName, ctx) {
337
- const INSTRUCTION_FILES = ["CLAUDE.md", "AGENTS.md", "CLAUDE.local.md", ".cursorrules"];
338
- const existing = INSTRUCTION_FILES.filter((f) => fs.existsSync(path.join(cwd, f)));
339
- if (existing.length > 0) {
340
- // Already exists — do NOT modify (per spec step 4-11: avoid KB-link bloat)
341
- return;
342
- }
343
- // None exist — prompt to create minimal CLAUDE.md (G4: bypassed in non-interactive mode)
344
- const ok = isNonInteractive()
345
- ? true
346
- : await ctx.ui.confirm("Create CLAUDE.md?", `No agent instruction file found at project root.\nCreate a minimal CLAUDE.md with links to the Forge knowledge base? [Y/n]`);
347
- if (!ok) {
348
- ctx.ui.notify("〇 KB not linked — run /forge:refresh-kb-links after creating CLAUDE.md.", "info");
349
- return;
350
- }
351
- const claudeMdPath = path.join(cwd, "CLAUDE.md");
352
- const content = [
353
- `# ${projectName}`,
354
- ``,
355
- `## Forge Knowledge Base`,
356
- ``,
357
- `| Index | Contents |`,
358
- `|-------|----------|`,
359
- `| [MASTER_INDEX](${kbPath}/MASTER_INDEX.md) | All sprints, tasks, bugs, and features |`,
360
- `| [Architecture](${kbPath}/architecture/INDEX.md) | Stack, processes, database, routing, deployment |`,
361
- `| [Business Domain](${kbPath}/business-domain/INDEX.md) | Entity model and domain concepts |`,
362
- ``,
363
- `## Forge Workflows`,
364
- ``,
365
- `| Workflow | Purpose |`,
366
- `|----------|---------|`,
367
- `| /forge:plan | Research codebase, produce implementation plan |`,
368
- `| /forge:implement | Execute approved plan, make code changes |`,
369
- `| /forge:validate | Validate task implementation against acceptance criteria |`,
370
- `| /forge:approve | Final architect approval gate |`,
371
- `| /forge:commit | Stage and commit completed task artifacts |`,
372
- `| /forge:fix-bug | Triage, diagnose, and fix a bug |`,
373
- `| /forge:run-task | Full plan-implement-review-commit pipeline |`,
374
- `| /forge:run-sprint | Execute all tasks in a sprint |`,
375
- `| /forge:sprint-plan | Decompose sprint requirements into tasks |`,
376
- `| /forge:sprint-intake | Elicit and structure requirements for a new sprint |`,
377
- ``,
378
- `---`,
379
- `_Generated by /forge:init. Run /forge:refresh-kb-links to update._`,
380
- ``,
381
- ].join("\n");
382
- try {
383
- fs.writeFileSync(claudeMdPath, content, "utf8");
384
- ctx.ui.notify("〇 Created CLAUDE.md with KB links.", "info");
385
- }
386
- catch (err) {
387
- const e = err;
388
- ctx.ui.notify(`△ Could not create CLAUDE.md: ${e.message ?? "unknown"}`, "warning");
389
- }
390
- }
391
177
  // ── Main command registration ──────────────────────────────────────────────
392
178
  export function registerForgeInit(pi) {
393
179
  // Capture pi.sendUserMessage in closure — ExtensionCommandContext does not
@@ -494,483 +280,63 @@ export function registerForgeInit(pi) {
494
280
  }
495
281
  }
496
282
  }
497
- // ── Phase 1 Collect ─────────────────────────────────────────────
498
- if (startPhase <= 1) {
499
- ctx.ui.setStatus?.("forge:init", "Phase 1/4: Collect");
500
- const bannersTool = path.join(toolsRoot, "banners.cjs");
501
- if (fs.existsSync(bannersTool)) {
502
- await execFileAsync("node", [bannersTool, "--phase", "1", "4", "Collect", "north"], {
503
- cwd,
504
- timeout: 5000,
505
- }).catch(() => {
506
- /* non-fatal */
507
- });
508
- }
509
- ctx.ui.notify("Running 5 discovery scans in parallel...", "info");
510
- // Dispatch 5 discovery subagents via sendUserMessage instruction.
511
- // If the agent doesn't have a `subagent` tool, it must fall back to
512
- // running the 5 scans inline — Phase 1's deliverable is non-negotiable.
513
- const phase1Prompt = buildPhase1PromptText(bundleRoot, projectName);
514
- sendToAgent(phase1Prompt);
515
- await ctx.waitForIdle();
516
- // Verify deliverable. If missing, retry once with a corrective steer;
517
- // if still missing, prompt the user to abort or continue with partial.
518
- let phase1 = verifyPhase1(cwd);
519
- if (!phase1.ok) {
520
- ctx.ui.notify(`△ Phase 1 deliverable missing: ${phase1.missing.join(", ")} — retrying with corrective steer.`, "warning");
521
- sendToAgent(`Phase 1 verification failed. .forge/config.json is missing the following required fields: ${phase1.missing.join(", ")}.\n\n` +
522
- `Write a complete .forge/config.json now using the \`write\` tool. Do NOT call subagents — analyze the project codebase yourself if needed. ` +
523
- `Use the schema from the original Phase 1 prompt: version, project.{name,prefix}, stack, commands, and paths.{engineering,store,workflows,commands,templates} are all required.`);
524
- await ctx.waitForIdle();
525
- phase1 = verifyPhase1(cwd);
526
- }
527
- if (!phase1.ok) {
528
- if (isNonInteractive()) {
529
- ctx.ui.notify(`× Phase 1 failed: ${phase1.missing.join(", ")}. Aborting init in non-interactive mode.`, "error");
530
- return;
531
- }
532
- const proceed = await ctx.ui.confirm("Phase 1 failed twice — continue with partial init?", `.forge/config.json is still missing: ${phase1.missing.join(", ")}.\n\n` +
533
- `Yes = continue (you'll need to /forge:regenerate later).\n` +
534
- `No = abort. Inspect the file manually and re-run /forge:init.`);
535
- if (!proceed) {
536
- ctx.ui.notify("× /forge:init aborted at Phase 1 verify.", "error");
537
- return;
538
- }
539
- ctx.ui.notify("△ Continuing with partial Phase 1 — downstream phases may fail.", "warning");
540
- }
541
- // KB folder prompt (spec §7, F2) — G3: skipped in non-interactive mode (default: "engineering")
542
- // Phrasing chosen so the default-Yes affirmative ("use engineering/") is the
543
- // safe path. Pi's ctx.ui.confirm has no defaultValue option, so the question
544
- // has to align with the highlighted default — earlier "does this conflict?"
545
- // phrasing made the unsafe answer the default.
546
- if (!isNonInteractive()) {
547
- const kbDescription = `Forge will create a folder for architecture docs, sprints, bugs, and features.\n\n` +
548
- `Use "engineering" as the folder name? (Pick No only if your project already has an "engineering/" folder you don't want Forge to touch.)`;
549
- const useDefault = await ctx.ui.confirm("Engineering folder name?", kbDescription);
550
- if (!useDefault) {
551
- const customName = await ctx.ui.input("Engineering folder name? Enter preferred folder name", "e.g. ai-docs, .forge-kb, docs/ai");
552
- if (customName && customName.trim()) {
553
- const manageConfigToolEarly = path.join(toolsRoot, "manage-config.cjs");
554
- if (fs.existsSync(manageConfigToolEarly)) {
555
- await runToolAdvisory(manageConfigToolEarly, ["set", "paths.engineering", customName.trim()], cwd, ctx, "manage-config paths.engineering");
556
- }
557
- }
558
- }
559
- }
560
- // Marketplace skills advisory (sub-decision #1)
561
- ctx.ui.notify("〇 Marketplace skills auto-recommendation is Claude-Code-only. " +
562
- "Pi users install extensions manually. Writing installedSkills: []", "info");
563
- // Write installedSkills: []
564
- const manageConfigTool = path.join(toolsRoot, "manage-config.cjs");
565
- if (fs.existsSync(manageConfigTool)) {
566
- await runToolAdvisory(manageConfigTool, ["set", "installedSkills", "[]"], cwd, ctx, "manage-config installedSkills");
567
- // Write mode = "full"
568
- await runToolAdvisory(manageConfigTool, ["set", "mode", "full"], cwd, ctx, "manage-config mode");
569
- }
570
- writeInitProgress(cwd, 1);
571
- ctx.ui.notify("〇 Phase 1 complete.", "info");
283
+ // ── Config cache (B-4, N-B-A) ─────────────────────────────────────
284
+ // Populated unconditionally before the loop so that resume paths
285
+ // (startPhase > 1) read the config.json that Phase 1 wrote in a prior
286
+ // session. Falls back to {} when config.json does not exist yet (first-run
287
+ // Phase 1 will create it). Refreshed after Phase 1 completes in the loop
288
+ // to pick up values the Phase-1 agent just wrote. See file-header comment
289
+ // §Config cache boundary for the full rationale.
290
+ let configCache = {};
291
+ try {
292
+ configCache = JSON.parse(fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8"));
572
293
  }
573
- // ── Phase 2 — Discover ────────────────────────────────────────────
574
- if (startPhase <= 2) {
575
- ctx.ui.setStatus?.("forge:init", "Phase 2/4: Discover");
576
- const bannersTool = path.join(toolsRoot, "banners.cjs");
577
- if (fs.existsSync(bannersTool)) {
578
- await execFileAsync("node", [bannersTool, "--phase", "2", "4", "Discover", "oracle"], {
579
- cwd,
580
- timeout: 5000,
581
- }).catch(() => {
582
- /* non-fatal */
583
- });
584
- }
585
- // Read KB_PATH from config
586
- let kbPath = "engineering";
587
- try {
588
- const configRaw = fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8");
589
- const config = JSON.parse(configRaw);
590
- const paths = config.paths;
591
- if (paths && typeof paths.engineering === "string" && paths.engineering) {
592
- kbPath = paths.engineering;
593
- }
594
- }
595
- catch {
596
- // Use default
597
- }
598
- // Directory scaffolding
599
- const dirs = [
600
- path.join(cwd, kbPath),
601
- path.join(cwd, kbPath, "architecture"),
602
- path.join(cwd, kbPath, "business-domain"),
603
- path.join(cwd, kbPath, "sprints"),
604
- path.join(cwd, ".forge", "store"),
605
- path.join(cwd, ".forge", "cache"),
606
- ];
607
- for (const dir of dirs) {
608
- try {
609
- fs.mkdirSync(dir, { recursive: true });
610
- // Write .gitkeep for empty dirs
611
- const keepPath = path.join(dir, ".gitkeep");
612
- if (!fs.existsSync(keepPath)) {
613
- fs.writeFileSync(keepPath, "", "utf8");
614
- }
615
- }
616
- catch {
617
- // Non-fatal
618
- }
619
- }
620
- // Dispatch 7 parallel KB doc subagents
621
- const phase2Prompt = buildPhase2PromptText(bundleRoot, kbPath, projectName);
622
- sendToAgent(phase2Prompt);
623
- await ctx.waitForIdle();
624
- // Verify Phase 2 deliverables.
625
- let phase2 = verifyPhase2(cwd, kbPath);
626
- if (!phase2.ok) {
627
- ctx.ui.notify(`△ Phase 2 deliverable incomplete: ${phase2.missing.length} doc(s) missing — retrying.`, "warning");
628
- sendToAgent(`Phase 2 verification failed. The following architecture docs are missing:\n${phase2.missing.map((m) => ` - ${m}`).join("\n")}\n\n` +
629
- `Write the missing files now using the \`write\` tool. Do NOT call subagents — analyze the project codebase yourself. ` +
630
- `Use the rulebook at ${path.join(bundleRoot, ".init", "generation", "generate-kb-doc.md")} for the per-doc shape and confidence-header format.`);
631
- await ctx.waitForIdle();
632
- phase2 = verifyPhase2(cwd, kbPath);
633
- }
634
- if (!phase2.ok) {
635
- if (isNonInteractive()) {
636
- ctx.ui.notify(`× Phase 2 failed: ${phase2.missing.length} doc(s) still missing. Aborting init in non-interactive mode.`, "error");
637
- return;
638
- }
639
- const proceed = await ctx.ui.confirm("Phase 2 failed twice — continue with partial init?", `Missing docs:\n${phase2.missing.map((m) => ` - ${m}`).join("\n")}\n\n` +
640
- `Yes = continue (you'll need to fill these manually).\n` +
641
- `No = abort. Inspect the project and re-run /forge:init.`);
642
- if (!proceed) {
643
- ctx.ui.notify("× /forge:init aborted at Phase 2 verify.", "error");
644
- return;
645
- }
646
- ctx.ui.notify("△ Continuing with partial Phase 2.", "warning");
647
- }
648
- // Construct project-context.json
649
- let kbPathResolved = kbPath;
650
- let prefix = "";
651
- try {
652
- const configRaw = fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8");
653
- const config = JSON.parse(configRaw);
654
- const proj = config.project;
655
- if (proj && typeof proj.prefix === "string")
656
- prefix = proj.prefix;
657
- const paths = config.paths;
658
- if (paths && typeof paths.engineering === "string")
659
- kbPathResolved = paths.engineering;
660
- }
661
- catch {
662
- // Use defaults
663
- }
664
- // Read config for full project context construction
665
- let configForContext = {};
666
- try {
667
- const raw = fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8");
668
- configForContext = JSON.parse(raw);
669
- }
670
- catch {
671
- // empty config
672
- }
673
- const projectCtx = buildProjectContext({
674
- projectName: configForContext.project?.name ?? projectName,
675
- prefix,
676
- kbPath: kbPathResolved,
677
- }, configForContext);
678
- try {
679
- validateProjectContext(projectCtx);
680
- writeProjectContext(cwd, projectCtx);
681
- ctx.ui.notify("〇 project-context.json written.", "info");
682
- }
683
- catch (err) {
684
- const e = err;
685
- ctx.ui.notify(`△ project-context.json validation failed: ${e.message ?? "unknown"} — proceeding.`, "warning");
686
- }
687
- // Calibration baseline
688
- const baseline = computeCalibrationBaseline(cwd, kbPathResolved, bundledVersion);
689
- const manageConfigTool = path.join(toolsRoot, "manage-config.cjs");
690
- if (fs.existsSync(manageConfigTool)) {
691
- await runToolAdvisory(manageConfigTool, ["set", "calibrationBaseline", JSON.stringify(baseline)], cwd, ctx, "manage-config calibrationBaseline");
692
- }
693
- writeInitProgress(cwd, 2);
694
- ctx.ui.notify("〇 Phase 2 complete.", "info");
294
+ catch {
295
+ // File not yet present — Phase 1 will create it
695
296
  }
696
- // ── Phase 3 Materialize ─────────────────────────────────────────
697
- if (startPhase <= 3) {
698
- ctx.ui.setStatus?.("forge:init", "Phase 3/4: Materialize");
699
- const bannersTool = path.join(toolsRoot, "banners.cjs");
700
- if (fs.existsSync(bannersTool)) {
701
- await execFileAsync("node", [bannersTool, "--phase", "3", "4", "Materialize", "supervisor"], {
702
- cwd,
703
- timeout: 5000,
704
- }).catch(() => {
705
- /* non-fatal */
706
- });
707
- }
708
- const buildInitContextTool = path.join(toolsRoot, "build-init-context.cjs");
709
- const substituteTool = path.join(toolsRoot, "substitute-placeholders.cjs");
710
- const buildOverlayTool = path.join(toolsRoot, "build-overlay.cjs");
711
- const basePackDir = path.join(bundleRoot, ".base-pack");
712
- // 3a: build-init-context.cjs first build
713
- if (fs.existsSync(buildInitContextTool)) {
714
- await runToolAdvisory(buildInitContextTool, [
715
- "--config",
716
- path.join(cwd, ".forge", "config.json"),
717
- "--personas",
718
- path.join(cwd, ".forge", "personas"),
719
- "--templates",
720
- path.join(cwd, ".forge", "templates"),
721
- "--kb",
722
- cwd,
723
- "--out",
724
- path.join(cwd, ".forge", "init-context.md"),
725
- "--json-out",
726
- path.join(cwd, ".forge", "init-context.json"),
727
- ], cwd, ctx, "build-init-context", 30000);
728
- }
729
- // 3b: substitute-placeholders.cjs — base-pack materialisation
730
- if (fs.existsSync(substituteTool) && fs.existsSync(basePackDir)) {
731
- await runToolAdvisory(substituteTool, [
732
- "--forge-root",
733
- bundleRoot,
734
- "--base-pack",
735
- basePackDir,
736
- "--config",
737
- path.join(cwd, ".forge", "config.json"),
738
- "--context",
739
- path.join(cwd, ".forge", "init-context.json"),
740
- "--out",
741
- cwd,
742
- ], cwd, ctx, "substitute-placeholders", 60000);
743
- }
744
- // 3c: build-overlay.cjs smoke test (exit 1 is advisory)
745
- if (fs.existsSync(buildOverlayTool)) {
746
- await runToolAdvisory(buildOverlayTool, ["--task", "INIT-SMOKE-TEST", "--format", "json"], cwd, ctx, "build-overlay smoke (advisory)", 15000);
747
- }
748
- // Verify Phase 3 deliverables. substitute-placeholders.cjs is invoked
749
- // via runToolAdvisory, so a missing/invalid config produces zero
750
- // output and no exception. Hard-fail here.
751
- const phase3 = verifyPhase3(cwd);
752
- if (!phase3.ok) {
753
- ctx.ui.notify(`× Phase 3 failed: ${phase3.missing.join(", ")}. ` +
754
- `This usually means substitute-placeholders.cjs ran against an incomplete config. ` +
755
- `Fix .forge/config.json and run /forge:regenerate, or restart /forge:init from scratch (delete .forge/init-progress.json).`, "error");
297
+ // ── Phases 1–3: descriptor-driven loop ──────────────────────────────
298
+ // Each phase is described by an LlmPhaseDescriptor (forge-init/phase-descriptors.ts).
299
+ // The generic runLlmPhase() runner handles: banner, LLM dispatch / deterministic
300
+ // tool execution, verify, retry steer, user confirm, postVerify, writeInitProgress.
301
+ const PHASES = [PHASE_1, PHASE_2, PHASE_3];
302
+ for (const desc of PHASES) {
303
+ if (startPhase > desc.phaseNum) {
304
+ // Resume path: skip phases already completed
305
+ continue;
306
+ }
307
+ const phaseResult = await runLlmPhase(desc, ctx, cwd, bundleRoot, toolsRoot, projectName, configCache, sendToAgent, () => ctx.waitForIdle(), isNonInteractive);
308
+ if (phaseResult === "abort") {
756
309
  return;
757
310
  }
758
- writeInitProgress(cwd, 3);
759
- ctx.ui.notify("〇 Phase 3 complete.", "info");
760
- }
761
- // ── Phase 4 — Register ────────────────────────────────────────────
762
- if (startPhase <= 4) {
763
- ctx.ui.setStatus?.("forge:init", "Phase 4/4: Register");
764
- const bannersTool = path.join(toolsRoot, "banners.cjs");
765
- if (fs.existsSync(bannersTool)) {
766
- await execFileAsync("node", [bannersTool, "--phase", "4", "4", "Register", "forge"], {
767
- cwd,
768
- timeout: 5000,
769
- }).catch(() => {
770
- /* non-fatal */
771
- });
772
- }
773
- const manageConfigTool = path.join(toolsRoot, "manage-config.cjs");
774
- const manageVersionsTool = path.join(toolsRoot, "manage-versions.cjs");
775
- const generationManifestTool = path.join(toolsRoot, "generation-manifest.cjs");
776
- const buildPersonaPackTool = path.join(toolsRoot, "build-persona-pack.cjs");
777
- const buildContextPackTool = path.join(toolsRoot, "build-context-pack.cjs");
778
- const buildInitContextTool = path.join(toolsRoot, "build-init-context.cjs");
779
- const seedStoreTool = path.join(toolsRoot, "seed-store.cjs");
780
- // Step 4-1: write paths.forgeRoot + copy schemas
781
- // Stamp paths.forgeRoot to the bundle root (dist/forge-payload/) so
782
- // that the canonical Forge convention "$FORGE_ROOT/tools/<tool>.cjs"
783
- // resolves correctly. The bundled tools live at
784
- // dist/forge-payload/tools/ (renamed from .tools/ — the dot prefix
785
- // broke the convention and forced consumers/workflows to special-case
786
- // the layout).
787
- if (fs.existsSync(manageConfigTool)) {
788
- // Validate that store-cli.cjs is present in the bundled tools dir
789
- // before stamping. Guards against half-built dist trees.
790
- let forgeRootToStamp;
791
- if (isPiRuntime()) {
792
- const toolsRoot = getBundledToolsRoot();
793
- const storeCli = path.join(toolsRoot, "store-cli.cjs");
794
- if (!fs.existsSync(storeCli)) {
795
- ctx.ui.notify(`× step 4-1 paths.forgeRoot: store-cli.cjs missing from bundled tools (expected: ${storeCli}). ` +
796
- "Run 'npm run build' to populate dist/forge-payload/tools/. Aborting Phase 4.", "error");
797
- return;
798
- }
799
- forgeRootToStamp = bundleRoot;
800
- }
801
- else {
802
- // Claude Code path (not active today — preserved for future use)
803
- forgeRootToStamp = bundleRoot;
804
- }
805
- await runToolAdvisory(manageConfigTool, ["set", "paths.forgeRoot", forgeRootToStamp], cwd, ctx, "step 4-1 paths.forgeRoot");
806
- }
807
- const schemasSrc = path.join(bundleRoot, ".schemas");
808
- const schemasDest = path.join(cwd, ".forge", "schemas");
809
- fs.mkdirSync(schemasDest, { recursive: true });
810
- if (fs.existsSync(schemasSrc)) {
811
- const schemaFiles = fs.readdirSync(schemasSrc).filter((f) => f.endsWith(".json"));
812
- for (const f of schemaFiles) {
813
- try {
814
- fs.copyFileSync(path.join(schemasSrc, f), path.join(schemasDest, f));
815
- }
816
- catch {
817
- // non-fatal
818
- }
819
- }
820
- ctx.ui.notify(`〇 Copied ${schemaFiles.length} schema files to .forge/schemas/.`, "info");
821
- }
822
- // Step 4-1b: enhancement substrate
823
- const enhancementsDir = path.join(cwd, ".forge", "enhancements");
824
- fs.mkdirSync(enhancementsDir, { recursive: true });
825
- const overlaySchemaPath = path.join(schemasSrc, "project-overlay.schema.json");
826
- if (fs.existsSync(overlaySchemaPath)) {
311
+ // Refresh configCache after Phase 1 writes .forge/config.json so
312
+ // Phase 2, Phase 4, and the post-init report see the values the
313
+ // Phase-1 agent just produced.
314
+ if (desc.phaseNum === 1) {
827
315
  try {
828
- fs.copyFileSync(overlaySchemaPath, path.join(schemasDest, "project-overlay.schema.json"));
316
+ configCache = JSON.parse(fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8"));
829
317
  }
830
318
  catch {
831
- // non-fatal
832
- }
833
- }
834
- // Step 4-2: manage-versions init
835
- if (fs.existsSync(manageVersionsTool)) {
836
- await runToolAdvisory(manageVersionsTool, ["init"], cwd, ctx, "step 4-2 manage-versions");
837
- }
838
- // Step 4-3: generation-manifest record-all
839
- if (fs.existsSync(generationManifestTool)) {
840
- await runToolAdvisory(generationManifestTool, ["record-all"], cwd, ctx, "step 4-3 generation-manifest", 30000);
841
- }
842
- // Step 4-4: build-persona-pack
843
- if (fs.existsSync(buildPersonaPackTool)) {
844
- await runToolAdvisory(buildPersonaPackTool, ["--out", path.join(cwd, ".forge", "cache", "persona-pack.json")], cwd, ctx, "step 4-4 build-persona-pack", 30000);
845
- }
846
- // Step 4-5: build-context-pack
847
- try {
848
- const raw = fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8");
849
- const cfg = JSON.parse(raw);
850
- const p = cfg.paths;
851
- if (p && typeof p.engineering === "string")
852
- kbPathFinal = p.engineering;
853
- }
854
- catch {
855
- // use default "engineering"
856
- }
857
- if (fs.existsSync(buildContextPackTool)) {
858
- await runToolAdvisory(buildContextPackTool, [
859
- "--arch-dir",
860
- path.join(cwd, kbPathFinal, "architecture"),
861
- "--out-md",
862
- path.join(cwd, ".forge", "cache", "context-pack.md"),
863
- "--out-json",
864
- path.join(cwd, ".forge", "cache", "context-pack.json"),
865
- ], cwd, ctx, "step 4-5 build-context-pack", 30000);
866
- }
867
- // Step 4-6: build-init-context final rebuild
868
- if (fs.existsSync(buildInitContextTool)) {
869
- await runToolAdvisory(buildInitContextTool, [
870
- "--config",
871
- path.join(cwd, ".forge", "config.json"),
872
- "--personas",
873
- path.join(cwd, ".forge", "personas"),
874
- "--templates",
875
- path.join(cwd, ".forge", "templates"),
876
- "--kb",
877
- cwd,
878
- "--out",
879
- path.join(cwd, ".forge", "init-context.md"),
880
- "--json-out",
881
- path.join(cwd, ".forge", "init-context.json"),
882
- ], cwd, ctx, "step 4-6 build-init-context final", 30000);
883
- }
884
- // Step 4-7: seed-store
885
- if (fs.existsSync(seedStoreTool)) {
886
- await runToolAdvisory(seedStoreTool, [], cwd, ctx, "step 4-7 seed-store", 30000);
887
- }
888
- // Step 4-8: update-check cache baseline
889
- const updateCachePath = path.join(cwd, ".forge", "update-check-cache.json");
890
- try {
891
- const pluginPath = path.join(bundleRoot, ".claude-plugin", "plugin.json");
892
- const pluginRaw = fs.readFileSync(pluginPath, "utf8");
893
- const plugin = JSON.parse(pluginRaw);
894
- const cache = {
895
- lastChecked: new Date().toISOString(),
896
- installedVersion: plugin.version ?? bundledVersion,
897
- latestVersion: plugin.version ?? bundledVersion,
898
- upToDate: true,
899
- };
900
- fs.writeFileSync(updateCachePath, JSON.stringify(cache, null, 2) + "\n", "utf8");
901
- ctx.ui.notify("〇 Update-check cache baseline written.", "info");
902
- }
903
- catch {
904
- ctx.ui.notify("△ Could not write update-check cache — non-fatal.", "warning");
905
- }
906
- // Step 4-9: Tomoshibi — invoke refresh-kb-links handler directly
907
- try {
908
- const refreshHandler = getRefreshKbLinksHandler();
909
- const refreshResult = await refreshHandler(cwd);
910
- for (const msg of refreshResult.messages) {
911
- ctx.ui.notify(msg, "info");
912
- }
913
- if (refreshResult.filesUpdated === 0) {
914
- ctx.ui.notify("△ Run /forge:refresh-kb-links manually after init completes " +
915
- "(no agent instruction files found).", "info");
319
+ // Fall back to existing cache — all downstream reads have their own defaults
916
320
  }
917
321
  }
918
- catch (err) {
919
- const e = err;
920
- ctx.ui.notify(`△ Tomoshibi (refresh-kb-links) failed: ${e.message ?? "unknown"} — ` +
921
- "Run /forge:refresh-kb-links manually after init completes.", "warning");
922
- }
923
- // Step 4-10: .gitignore update
924
- updateGitignore(cwd, ctx);
925
- // Step 4-10b: BUG-025 fix — remove Claude-Code-only .claude/commands/ artifact.
926
- // substitute-placeholders.cjs (Phase 3) unconditionally writes command .md files
927
- // to .claude/commands/<prefix>/ regardless of runtime. Under pi runtime pi never
928
- // scans .claude/commands/ (commands are discovered via programmatic registerCommand
929
- // in registerAllForgeCommands). Delete the directory so it does not pollute the
930
- // project root. This runs in Phase 4 so it handles both same-session and resumed
931
- // inits (where Phase 3 ran in a prior session).
932
- if (isPiRuntime()) {
933
- let commandsPrefix = "forge";
934
- try {
935
- const cfgRaw = fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8");
936
- const cfg = JSON.parse(cfgRaw);
937
- const proj = cfg.project;
938
- if (proj && typeof proj.prefix === "string" && proj.prefix) {
939
- commandsPrefix = proj.prefix.toLowerCase();
940
- }
941
- }
942
- catch {
943
- // fall back to "forge"
944
- }
945
- const claudeCommandsDir = path.join(cwd, ".claude", "commands", commandsPrefix);
946
- if (fs.existsSync(claudeCommandsDir)) {
947
- try {
948
- fs.rmSync(claudeCommandsDir, { recursive: true, force: true });
949
- // Remove empty ancestor dirs best-effort
950
- const parentDir = path.join(cwd, ".claude", "commands");
951
- try {
952
- if (fs.readdirSync(parentDir).length === 0) {
953
- fs.rmdirSync(parentDir);
954
- const grandparent = path.join(cwd, ".claude");
955
- if (fs.readdirSync(grandparent).length === 0)
956
- fs.rmdirSync(grandparent);
957
- }
958
- }
959
- catch {
960
- // best-effort
961
- }
962
- }
963
- catch (err) {
964
- const e = err;
965
- ctx.ui.notify(`△ Could not remove .claude/commands/${commandsPrefix}/: ${e.message ?? "unknown"} — non-fatal.`, "warning");
966
- }
967
- }
322
+ }
323
+ // ── Phase 4 — Register (runPhase4) ────────────────────────────────
324
+ if (startPhase <= 4) {
325
+ const phase4Result = await runPhase4({
326
+ cwd,
327
+ bundleRoot,
328
+ toolsRoot,
329
+ projectName,
330
+ configCache,
331
+ ctx,
332
+ isPiRuntime,
333
+ getBundledToolsRoot,
334
+ });
335
+ if (phase4Result === "abort") {
336
+ return;
968
337
  }
969
- // Step 4-11: agent instruction file linking
970
- await linkAgentInstructionFile(cwd, kbPathFinal, projectName, ctx);
971
- // Completion — delete init-progress
972
- deleteInitProgress(cwd);
973
- ctx.ui.notify("〇 Phase 4 complete — /forge:init done.", "info");
338
+ // phase4Result.kbPathFinal is used in the post-init report below
339
+ kbPathFinal = phase4Result.kbPathFinal;
974
340
  }
975
341
  // ── Post-Phase-4: health check ────────────────────────────────────
976
342
  ctx.ui.setStatus?.("forge:init", "Post-init: health check");
@@ -990,36 +356,28 @@ export function registerForgeInit(pi) {
990
356
  // materialization-marker checks, audience gates, and dispatch.
991
357
  // Errors inside hooks are caught by emitSyntheticEvent — fail-open.
992
358
  {
359
+ // Use configCache — valid for both full-run and resumed-init paths.
360
+ // configCache is populated once (after Phase 1 completes or from pre-existing
361
+ // config.json for resumed inits). Non-fatal if cache is empty (empty prefix
362
+ // causes hook to write sentinel under post-init-fired-.json).
993
363
  let projectPrefixForHook = "";
994
- try {
995
- const cfgRaw = fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8");
996
- const cfg = JSON.parse(cfgRaw);
997
- const proj = cfg.project;
998
- if (proj && typeof proj.prefix === "string")
999
- projectPrefixForHook = proj.prefix;
1000
- }
1001
- catch {
1002
- // Non-fatal: if config read fails, emit with empty prefix
1003
- // (hook will write sentinel under post-init-fired-.json)
364
+ const projForHook = configCache.project;
365
+ if (projForHook && typeof projForHook.prefix === "string") {
366
+ projectPrefixForHook = projForHook.prefix;
1004
367
  }
1005
368
  await emitSyntheticEvent({ type: "init-complete", projectPrefix: projectPrefixForHook, cwd }, ctx);
1006
369
  }
1007
370
  // ── Report ────────────────────────────────────────────────────────
1008
- // FIX BUG-020: read kbPathFinal from config.json at report time so
1009
- // a custom KB folder chosen in Phase 1 is reflected here. kbPathFinal
1010
- // is only updated inside the Phase-4 block, so if init was resumed
1011
- // from Phase 1-3 we still get the right value.
1012
- try {
1013
- const cfgRaw = fs.readFileSync(path.join(cwd, ".forge", "config.json"), "utf8");
1014
- const cfg = JSON.parse(cfgRaw);
1015
- const p = cfg.paths;
371
+ // FIX BUG-020: use configCache here (populated from config.json after Phase 1
372
+ // or from pre-existing config.json for resumed inits starting at Phase 2+).
373
+ // kbPathFinal is updated inside the Phase-4 block; for Phase-1-3 resumes
374
+ // configCache captures the correct value that Phase 4 would have stamped.
375
+ {
376
+ const p = configCache.paths;
1016
377
  if (p && typeof p.engineering === "string" && p.engineering) {
1017
378
  kbPathFinal = p.engineering;
1018
379
  }
1019
380
  }
1020
- catch {
1021
- // use default "engineering" already set
1022
- }
1023
381
  ctx.ui.setStatus?.("forge:init", undefined);
1024
382
  const kbPath_ = kbPathFinal;
1025
383
  // FIX BUG-022 (product call): surface gap details in Report.