@entelligentsia/forgecli 1.0.25 → 1.0.40

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 (590) hide show
  1. package/CHANGELOG.md +341 -0
  2. package/README.md +2 -0
  3. package/dist/CHANGELOG-forge-plugin.md +264 -0
  4. package/dist/CHANGELOG-pi.md +143 -0
  5. package/dist/bin/argv.d.ts +2 -2
  6. package/dist/bin/argv.js +37 -0
  7. package/dist/bin/argv.js.map +1 -1
  8. package/dist/bin/forge.js +30 -16
  9. package/dist/bin/forge.js.map +1 -1
  10. package/dist/bin/init.d.ts +23 -0
  11. package/dist/bin/init.js +123 -0
  12. package/dist/bin/init.js.map +1 -0
  13. package/dist/bin/reset.d.ts +39 -0
  14. package/dist/bin/reset.js +101 -0
  15. package/dist/bin/reset.js.map +1 -0
  16. package/dist/bin/uninstall.d.ts +20 -0
  17. package/dist/bin/uninstall.js +141 -0
  18. package/dist/bin/uninstall.js.map +1 -0
  19. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
  20. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +384 -0
  21. package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
  22. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
  23. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
  24. package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
  25. package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
  26. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +235 -0
  27. package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
  28. package/dist/extensions/forgecli/commands/reset.d.ts +16 -0
  29. package/dist/extensions/forgecli/commands/reset.js +83 -0
  30. package/dist/extensions/forgecli/commands/reset.js.map +1 -0
  31. package/dist/extensions/forgecli/dashboard/component.js +10 -7
  32. package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
  33. package/dist/extensions/forgecli/forge-commands.d.ts +7 -2
  34. package/dist/extensions/forgecli/forge-commands.js +19 -5
  35. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  36. package/dist/extensions/forgecli/forge-subagent.d.ts +4 -4
  37. package/dist/extensions/forgecli/hooks/forge-permissions.js +20 -6
  38. package/dist/extensions/forgecli/hooks/forge-permissions.js.map +1 -1
  39. package/dist/extensions/forgecli/index.js +6 -3
  40. package/dist/extensions/forgecli/index.js.map +1 -1
  41. package/dist/extensions/forgecli/lib/forge-root.d.ts +6 -0
  42. package/dist/extensions/forgecli/lib/forge-root.js +52 -0
  43. package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
  44. package/dist/extensions/forgecli/lib/payload-manifest.d.ts +62 -0
  45. package/dist/extensions/forgecli/lib/payload-manifest.js +151 -0
  46. package/dist/extensions/forgecli/lib/payload-manifest.js.map +1 -0
  47. package/dist/extensions/forgecli/orchestrators/advisory-render.d.ts +9 -0
  48. package/dist/extensions/forgecli/orchestrators/advisory-render.js +107 -0
  49. package/dist/extensions/forgecli/orchestrators/advisory-render.js.map +1 -0
  50. package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
  51. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
  52. package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
  53. package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
  54. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
  55. package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
  56. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
  57. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
  58. package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
  59. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +11 -0
  60. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +82 -0
  61. package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
  62. package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
  63. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
  64. package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
  65. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
  66. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
  67. package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
  68. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
  69. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +198 -0
  70. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
  71. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
  72. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
  73. package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
  74. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
  75. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
  76. package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
  77. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
  78. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
  79. package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
  80. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
  81. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
  82. package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
  83. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
  84. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
  85. package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
  86. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
  87. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
  88. package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
  89. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
  90. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
  91. package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
  92. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
  93. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
  94. package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
  95. package/dist/extensions/forgecli/orchestrators/common/recovery-menu.d.ts +24 -0
  96. package/dist/extensions/forgecli/orchestrators/common/recovery-menu.js +58 -0
  97. package/dist/extensions/forgecli/orchestrators/common/recovery-menu.js.map +1 -0
  98. package/dist/extensions/forgecli/orchestrators/common/reset-pipeline.d.ts +53 -0
  99. package/dist/extensions/forgecli/orchestrators/common/reset-pipeline.js +131 -0
  100. package/dist/extensions/forgecli/orchestrators/common/reset-pipeline.js.map +1 -0
  101. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
  102. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
  103. package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
  104. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -93
  105. package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1721
  106. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
  107. package/dist/extensions/forgecli/orchestrators/halt-advisor.js +25 -3
  108. package/dist/extensions/forgecli/orchestrators/halt-advisor.js.map +1 -1
  109. package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
  110. package/dist/extensions/forgecli/orchestrators/run-sprint.js +48 -270
  111. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
  112. package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
  113. package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
  114. package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
  115. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
  116. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
  117. package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
  118. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
  119. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
  120. package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
  121. package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
  122. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
  123. package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
  124. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
  125. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
  126. package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
  127. package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
  128. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
  129. package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
  130. package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
  131. package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
  132. package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
  133. package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
  134. package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
  135. package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
  136. package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
  137. package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
  138. package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
  139. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
  140. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
  141. package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
  142. package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +17 -0
  143. package/dist/extensions/forgecli/orchestrators/task/task-phases.js +48 -0
  144. package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
  145. package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
  146. package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
  147. package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
  148. package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
  149. package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
  150. package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
  151. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
  152. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +187 -0
  153. package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
  154. package/dist/extensions/forgecli/store/store-resolver.d.ts +15 -0
  155. package/dist/extensions/forgecli/store/store-resolver.js +118 -18
  156. package/dist/extensions/forgecli/store/store-resolver.js.map +1 -1
  157. package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
  158. package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
  159. package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
  160. package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
  161. package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
  162. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  163. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  164. package/dist/forge-payload/.schemas/migrations.json +170 -0
  165. package/dist/forge-payload/.schemas/payload-manifest.schema.json +100 -0
  166. package/dist/forge-payload/commands/add-pipeline.md +1 -1
  167. package/dist/forge-payload/commands/add-task.md +3 -3
  168. package/dist/forge-payload/{.base-pack/commands → commands}/approve.md +2 -2
  169. package/dist/forge-payload/commands/ask.md +1 -1
  170. package/dist/forge-payload/commands/check-agent.md +8 -24
  171. package/dist/forge-payload/{.base-pack/commands → commands}/collate.md +2 -2
  172. package/dist/forge-payload/{.base-pack/commands → commands}/commit.md +2 -2
  173. package/dist/forge-payload/commands/config.md +1 -1
  174. package/dist/forge-payload/commands/enhance.md +31 -5
  175. package/dist/forge-payload/{.base-pack/commands → commands}/fix-bug.md +2 -2
  176. package/dist/forge-payload/commands/health.md +1 -1
  177. package/dist/forge-payload/{.base-pack/commands → commands}/implement.md +2 -2
  178. package/dist/forge-payload/commands/init.md +186 -67
  179. package/dist/forge-payload/{.base-pack/commands → commands}/new-sprint.md +2 -2
  180. package/dist/forge-payload/{.base-pack/commands → commands}/plan-sprint.md +2 -2
  181. package/dist/forge-payload/{.base-pack/commands → commands}/plan.md +2 -2
  182. package/dist/forge-payload/commands/rebuild.md +3 -3
  183. package/dist/forge-payload/commands/remove.md +1 -1
  184. package/dist/forge-payload/commands/repair.md +1 -1
  185. package/dist/forge-payload/commands/report-bug.md +1 -1
  186. package/dist/forge-payload/commands/reset.md +117 -0
  187. package/dist/forge-payload/{.base-pack/commands → commands}/retro.md +2 -2
  188. package/dist/forge-payload/{.base-pack/commands → commands}/review-code.md +2 -2
  189. package/dist/forge-payload/{.base-pack/commands → commands}/review-plan.md +2 -2
  190. package/dist/forge-payload/{.base-pack/commands → commands}/run-sprint.md +2 -2
  191. package/dist/forge-payload/{.base-pack/commands → commands}/run-task.md +2 -2
  192. package/dist/forge-payload/commands/status.md +1 -1
  193. package/dist/forge-payload/commands/update.md +3 -3
  194. package/dist/forge-payload/{.base-pack/commands → commands}/validate.md +2 -2
  195. package/dist/forge-payload/hooks/forge-permissions.cjs +29 -6
  196. package/dist/forge-payload/hooks/lib/common.cjs +228 -0
  197. package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
  198. package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
  199. package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
  200. package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
  201. package/dist/forge-payload/init/discovery/discover-database.md +32 -0
  202. package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
  203. package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
  204. package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
  205. package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
  206. package/dist/forge-payload/init/generation/generate-commands.md +171 -0
  207. package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
  208. package/dist/forge-payload/init/generation/generate-persona.md +73 -0
  209. package/dist/forge-payload/init/generation/generate-skill.md +66 -0
  210. package/dist/forge-payload/init/generation/generate-template.md +60 -0
  211. package/dist/forge-payload/init/generation/generate-tools.md +133 -0
  212. package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
  213. package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
  214. package/dist/forge-payload/init/phases/phase-3-materialize.md +5 -1
  215. package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
  216. package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
  217. package/dist/forge-payload/integrity.json +33 -18
  218. package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
  219. package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
  220. package/dist/forge-payload/payload-manifest.json +314 -0
  221. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  222. package/dist/forge-payload/schemas/payload-manifest.schema.json +100 -0
  223. package/dist/forge-payload/schemas/structure-manifest.json +5 -12
  224. package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
  225. package/dist/forge-payload/tools/lib/paths.cjs +12 -11
  226. package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
  227. package/dist/forge-payload/tools/query-logger.cjs +34 -0
  228. package/dist/forge-payload/tools/reset-plan.cjs +210 -0
  229. package/dist/forge-payload/tools/store.cjs +4 -1
  230. package/dist/forge-payload/tools/substitute-placeholders.cjs +14 -7
  231. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  232. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +8 -0
  233. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  234. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +1 -1
  235. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  236. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +1 -1
  237. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  238. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts +4 -0
  239. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts.map +1 -0
  240. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js +3 -0
  241. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js.map +1 -0
  242. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts +20 -0
  243. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts.map +1 -0
  244. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js +92 -0
  245. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js.map +1 -0
  246. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts +18 -0
  247. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts.map +1 -0
  248. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js +42 -0
  249. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js.map +1 -0
  250. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts +10 -0
  251. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts.map +1 -0
  252. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js +31 -0
  253. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js.map +1 -0
  254. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts +30 -0
  255. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts.map +1 -0
  256. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js +170 -0
  257. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js.map +1 -0
  258. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts +26 -0
  259. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts.map +1 -0
  260. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js +90 -0
  261. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js.map +1 -0
  262. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +6 -1
  263. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  264. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  265. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  266. package/node_modules/@earendil-works/pi-ai/README.md +12 -4
  267. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  268. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +3 -0
  269. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  270. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +45 -0
  271. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  272. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +45 -0
  273. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  274. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +1804 -815
  275. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  276. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +2031 -1384
  277. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  278. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  279. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +71 -27
  280. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  281. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts +1 -1
  282. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  283. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +24 -16
  284. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  285. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  286. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +1 -0
  287. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  288. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  289. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +3 -1
  290. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  291. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  292. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +35 -13
  293. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
  294. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
  295. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +2 -1
  296. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
  297. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  298. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +1 -0
  299. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
  300. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +12 -4
  301. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  302. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  303. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  304. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js +13 -1
  305. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  306. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  307. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js +4 -2
  308. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  309. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +1 -1
  310. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  311. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +3 -2
  312. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  313. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  314. package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +143 -0
  315. package/node_modules/@earendil-works/pi-coding-agent/README.md +26 -4
  316. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts +1 -0
  317. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
  318. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +11 -0
  319. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js.map +1 -1
  320. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/project-trust.d.ts +10 -0
  321. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/project-trust.d.ts.map +1 -0
  322. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/project-trust.js +48 -0
  323. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/project-trust.js.map +1 -0
  324. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.d.ts +17 -0
  325. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.d.ts.map +1 -0
  326. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js +128 -0
  327. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js.map +1 -0
  328. package/node_modules/@earendil-works/pi-coding-agent/dist/config.d.ts.map +1 -1
  329. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +9 -1
  330. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js.map +1 -1
  331. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.d.ts +3 -1
  332. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.d.ts.map +1 -1
  333. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.js +4 -1
  334. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-runtime.js.map +1 -1
  335. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts +2 -1
  336. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts.map +1 -1
  337. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +2 -2
  338. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js.map +1 -1
  339. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +4 -1
  340. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  341. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +16 -3
  342. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  343. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  344. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.js +4 -3
  345. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  346. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +3 -1
  347. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  348. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js +9 -3
  349. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  350. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.d.ts +1 -1
  351. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  352. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.js +1 -1
  353. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  354. package/node_modules/@earendil-works/pi-coding-agent/dist/core/experimental.d.ts +2 -0
  355. package/node_modules/@earendil-works/pi-coding-agent/dist/core/experimental.d.ts.map +1 -0
  356. package/node_modules/@earendil-works/pi-coding-agent/dist/core/experimental.js +4 -0
  357. package/node_modules/@earendil-works/pi-coding-agent/dist/core/experimental.js.map +1 -0
  358. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/template.js +19 -6
  359. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  360. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  361. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  362. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -1
  363. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  364. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js +4 -4
  365. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  366. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +10 -3
  367. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  368. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +47 -1
  369. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  370. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +28 -2
  371. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  372. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  373. package/node_modules/@earendil-works/pi-coding-agent/dist/core/footer-data-provider.d.ts +2 -0
  374. package/node_modules/@earendil-works/pi-coding-agent/dist/core/footer-data-provider.d.ts.map +1 -1
  375. package/node_modules/@earendil-works/pi-coding-agent/dist/core/footer-data-provider.js +29 -1
  376. package/node_modules/@earendil-works/pi-coding-agent/dist/core/footer-data-provider.js.map +1 -1
  377. package/node_modules/@earendil-works/pi-coding-agent/dist/core/index.d.ts +1 -0
  378. package/node_modules/@earendil-works/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  379. package/node_modules/@earendil-works/pi-coding-agent/dist/core/index.js +1 -0
  380. package/node_modules/@earendil-works/pi-coding-agent/dist/core/index.js.map +1 -1
  381. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  382. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +1 -0
  383. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  384. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts +1 -0
  385. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  386. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +44 -5
  387. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  388. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts +3 -0
  389. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  390. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +47 -13
  391. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  392. package/node_modules/@earendil-works/pi-coding-agent/dist/core/project-trust.d.ts +15 -0
  393. package/node_modules/@earendil-works/pi-coding-agent/dist/core/project-trust.d.ts.map +1 -0
  394. package/node_modules/@earendil-works/pi-coding-agent/dist/core/project-trust.js +58 -0
  395. package/node_modules/@earendil-works/pi-coding-agent/dist/core/project-trust.js.map +1 -0
  396. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.d.ts +2 -1
  397. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  398. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.js +24 -26
  399. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  400. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-attribution.d.ts +4 -0
  401. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-attribution.d.ts.map +1 -0
  402. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-attribution.js +72 -0
  403. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-attribution.js.map +1 -0
  404. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-display-names.d.ts.map +1 -1
  405. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-display-names.js +3 -0
  406. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-display-names.js.map +1 -1
  407. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.d.ts +13 -2
  408. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  409. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +112 -37
  410. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  411. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  412. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +7 -33
  413. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js.map +1 -1
  414. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  415. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +103 -70
  416. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  417. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +20 -2
  418. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  419. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +97 -30
  420. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  421. package/node_modules/@earendil-works/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  422. package/node_modules/@earendil-works/pi-coding-agent/dist/core/slash-commands.js +1 -0
  423. package/node_modules/@earendil-works/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  424. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
  425. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +1 -1
  426. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
  427. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  428. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js +1 -1
  429. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  430. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  431. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js +1 -1
  432. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  433. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  434. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +1 -1
  435. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  436. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  437. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +1 -1
  438. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  439. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  440. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +1 -1
  441. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  442. package/node_modules/@earendil-works/pi-coding-agent/dist/core/trust-manager.d.ts +36 -0
  443. package/node_modules/@earendil-works/pi-coding-agent/dist/core/trust-manager.d.ts.map +1 -0
  444. package/node_modules/@earendil-works/pi-coding-agent/dist/core/trust-manager.js +202 -0
  445. package/node_modules/@earendil-works/pi-coding-agent/dist/core/trust-manager.js.map +1 -0
  446. package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts +5 -4
  447. package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts.map +1 -1
  448. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +2 -1
  449. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js.map +1 -1
  450. package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -1
  451. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +72 -32
  452. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -1
  453. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  454. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js +39 -34
  455. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js.map +1 -1
  456. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/index.d.ts +1 -1
  457. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/index.d.ts.map +1 -1
  458. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/index.js.map +1 -1
  459. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  460. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +2 -2
  461. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
  462. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  463. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  464. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/first-time-setup.js +103 -0
  465. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  466. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  467. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.js +7 -0
  468. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  469. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.d.ts +2 -0
  470. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -1
  471. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.js +2 -0
  472. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/index.js.map +1 -1
  473. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +1 -1
  474. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  475. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +10 -13
  476. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
  477. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  478. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  479. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +20 -0
  480. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  481. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  482. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +22 -0
  483. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  484. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  485. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  486. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/trust-selector.js +91 -0
  487. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/trust-selector.js.map +1 -0
  488. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +7 -0
  489. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  490. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +101 -5
  491. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  492. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
  493. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.js +1 -0
  494. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
  495. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  496. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -0
  497. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  498. package/node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.d.ts +6 -2
  499. package/node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.d.ts.map +1 -1
  500. package/node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.js +111 -10
  501. package/node_modules/@earendil-works/pi-coding-agent/dist/package-manager-cli.js.map +1 -1
  502. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/changelog.d.ts +1 -0
  503. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  504. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/changelog.js +78 -0
  505. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  506. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/git.d.ts.map +1 -1
  507. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/git.js +54 -22
  508. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/git.js.map +1 -1
  509. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/open-browser.d.ts +9 -0
  510. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/open-browser.d.ts.map +1 -0
  511. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/open-browser.js +22 -0
  512. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/open-browser.js.map +1 -0
  513. package/node_modules/@earendil-works/pi-coding-agent/docs/containerization.md +111 -0
  514. package/node_modules/@earendil-works/pi-coding-agent/docs/docs.json +8 -0
  515. package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +67 -13
  516. package/node_modules/@earendil-works/pi-coding-agent/docs/index.md +2 -0
  517. package/node_modules/@earendil-works/pi-coding-agent/docs/models.md +4 -3
  518. package/node_modules/@earendil-works/pi-coding-agent/docs/packages.md +1 -1
  519. package/node_modules/@earendil-works/pi-coding-agent/docs/prompt-templates.md +9 -2
  520. package/node_modules/@earendil-works/pi-coding-agent/docs/providers.md +5 -0
  521. package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +1 -1
  522. package/node_modules/@earendil-works/pi-coding-agent/docs/sdk.md +5 -0
  523. package/node_modules/@earendil-works/pi-coding-agent/docs/security.md +59 -0
  524. package/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +15 -0
  525. package/node_modules/@earendil-works/pi-coding-agent/docs/skills.md +1 -1
  526. package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +36 -2
  527. package/node_modules/@earendil-works/pi-coding-agent/docs/themes.md +1 -1
  528. package/node_modules/@earendil-works/pi-coding-agent/docs/tmux.md +4 -2
  529. package/node_modules/@earendil-works/pi-coding-agent/docs/tui.md +10 -1
  530. package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +19 -2
  531. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/README.md +2 -0
  532. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-header.ts +1 -1
  533. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
  534. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  535. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/doom-overlay/index.ts +1 -1
  536. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/gondolin/index.ts +531 -0
  537. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/gondolin/package-lock.json +185 -0
  538. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/gondolin/package.json +19 -0
  539. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/handoff.ts +1 -1
  540. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/interactive-shell.ts +1 -1
  541. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/overlay-qa-tests.ts +152 -81
  542. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/project-trust.ts +64 -0
  543. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/qna.ts +1 -1
  544. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/question.ts +1 -1
  545. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/questionnaire.ts +1 -1
  546. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
  547. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/snake.ts +1 -1
  548. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/space-invaders.ts +1 -1
  549. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/summarize.ts +1 -1
  550. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/tic-tac-toe.ts +1 -1
  551. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/todo.ts +1 -1
  552. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/tools.ts +5 -0
  553. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
  554. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +12 -419
  555. package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -8
  556. package/node_modules/@earendil-works/pi-tui/README.md +13 -1
  557. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +2 -0
  558. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  559. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  560. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +6 -1
  561. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  562. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +102 -43
  563. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  564. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts +2 -1
  565. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  566. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +11 -1
  567. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  568. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts +1 -1
  569. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts.map +1 -1
  570. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js +2 -2
  571. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js.map +1 -1
  572. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
  573. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  574. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  575. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +4 -7
  576. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  577. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +38 -77
  578. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  579. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +20 -4
  580. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  581. package/node_modules/@earendil-works/pi-tui/dist/tui.js +244 -42
  582. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  583. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +1 -0
  584. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
  585. package/node_modules/@earendil-works/pi-tui/dist/utils.js +46 -15
  586. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  587. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  588. package/package.json +8 -7
  589. package/dist/forge-payload/.base-pack/commands/check-agent.md +0 -22
  590. package/dist/forge-payload/.base-pack/commands/enhance.md +0 -37
package/CHANGELOG.md CHANGED
@@ -7,6 +7,347 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Changed
11
+
12
+ - **Command-tree unification (FORGE-S32-T06).** The former two-tree command
13
+ model is collapsed into a single unified `commands/` tree. `build-payload.cjs`
14
+ bundles one `commands/` directory (30 files) and `.base-pack/` no longer
15
+ carries a `commands/` subdir; `bootstrap.ts` copies one directory with no
16
+ union/collision precedence; `lib/payload-manifest.ts` drops the
17
+ loser/winner ordering note. `registerAllForgeCommands` (forge-commands.ts)
18
+ now enumerates `dist/forge-payload/commands/` instead of
19
+ `.base-pack/commands/`; `forge:reset` was added to
20
+ `EXPLICITLY_REGISTERED_NAMES` so the repoint introduces **no new auto-stub**
21
+ (the slash-command surface is unchanged). The frozen install-set fixture
22
+ (`expected-install-set.json`) drops the 17 vendored
23
+ `.forge/.base-pack/commands/*.md` entries; installed `.claude/commands/forge/`
24
+ byte-parity is preserved.
25
+
26
+ - **Dead Pass-1 build output removed (FORGE-S32-T05).** `scripts/build-payload.cjs`
27
+ no longer emits the pre-substituted `personas/`/`skills/`/`workflows/`/
28
+ `templates/` bundle-root tree (the old `--include-full`-gated Pass 1) or its
29
+ restore branch. `forge-init.ts` re-runs `substitute-placeholders` against the
30
+ user's config from `.base-pack/` at runtime (Phase 3b), so that output was
31
+ never consumed in the default flow. `--include-full` still governs the full
32
+ `tools/lib/`, `.init/generation/`, and generic `.schemas/` supersets. The
33
+ non-dot `schemas/` mirror and `schemas/structure-manifest.json` are RETAINED
34
+ (load-bearing for `health.md`/`update.md` `$FORGE_ROOT/schemas/` reads and
35
+ `check-structure.cjs` via `/forge:health`). Frozen install-set parity fixture
36
+ (`expected-install-set.json`) updated to drop the four superseded
37
+ `init/generation` orchestrator placeholders trimmed on the plugin side.
38
+
39
+ ### Added
40
+
41
+ - **Payload require-walker CI gate (FORGE-S32-T04).** New build-side tool
42
+ `tools/check-payload-requires.cjs <payloadRoot>` statically proves that every
43
+ `require()` target and referenced runtime path in the bundled payload's
44
+ `.cjs`/`.js` tools and hooks resolves inside the bundle. Generalizes the two
45
+ narrow regression guards (`bug-025-payload-completeness`,
46
+ `bug-036-payload-lib-completeness`) into one walker over ALL `.cjs`/`.js`
47
+ under `dist/forge-payload/{tools,hooks}`. Three reference classes are
48
+ resolved — static string requires, the runtime-path literals behind dynamic
49
+ requires, and dynamic `require(<variable>)` sites gated against a structural
50
+ `DYNAMIC_SITES` allowlist (keyed by file + normalized expression, not line
51
+ number). Any un-enumerated dynamic require is itself a hard failure (Iron Law
52
+ 5, no silent skips). Exit `0`/`1`/`2` contract. Wired into `tests.yml`
53
+ (`npm run lint:payload-requires`, post-build) so the MODULE_NOT_FOUND drift
54
+ class (FORGE-BUG-030 / FORGE-BUG-036) is caught red, build-side. CI-only: no
55
+ payload bytes change.
56
+
57
+ ### Changed
58
+
59
+ - **Payload consumers now read a single declarative manifest (FORGE-S32-T03).**
60
+ `scripts/build-payload.cjs` (bundle), `claude-bootstrap/bootstrap.ts` (vendor)
61
+ and `claude-bootstrap/uninstall.ts` (remove) are wired to
62
+ `forge/forge/payload-manifest.json` (authored in T02) instead of the
63
+ hand-maintained copy/removal lists each carried. build-payload's
64
+ `TOOLS_TO_COPY` / `LIB_ALLOWLIST` / `SKILLS_TO_COPY` arrays are deleted and
65
+ derived from the manifest; bootstrap vendors `payloadRoot/<bundle>` →
66
+ `<project>/<install>` driven solely by the manifest (the entry order encodes
67
+ the `commands` / `.base-pack/commands` union precedence); uninstall removes
68
+ install destinations grouped by `owner`, bounding agents/skills removal to
69
+ payload-declared names so user-authored siblings survive. `bundleOnly`
70
+ entries (`schemas/transitions`, `migrations.json`, `integrity.json`) ship to
71
+ the bundle for tool resolution but are never vendored. The build now bundles
72
+ `payload-manifest.json` itself so the runtime consumers can read it. Adding a
73
+ payload file is now a single manifest edit — the FORGE-BUG-030/036
74
+ MODULE_NOT_FOUND lockstep is retired. `4ge init claude .` output is
75
+ byte-identical (frozen-install-set parity guard in `bootstrap.test.ts`).
76
+
77
+ ### Added
78
+
79
+ - **`4ge uninstall claude [dir] [--purge] [--yes]`** — the counterpart to
80
+ `4ge init claude`. Deterministically reverses the bootstrap: removes the
81
+ vendored Forge scaffold (`.forge/{tools,schemas,init,.base-pack,meta,
82
+ .claude-plugin,cache}`, `.bootstrap-manifest.json`, `.claude/commands/forge`,
83
+ `.claude/workflows`, and the payload's agents/skills), un-merges the Forge
84
+ hooks from `.claude/settings.json`, and un-appends the Forge block from
85
+ `.gitignore`. Safety: **preserves user data by default** (`.forge/config.json`,
86
+ `.forge/store/**`, the KB folder); `--purge` also removes config + store (KB
87
+ is never auto-removed). Refuses to act without a `.bootstrap-manifest.json`
88
+ (proof the project was forge-bootstrapped), edits `settings.json`/`.gitignore`
89
+ rather than deleting them, preserves user-authored agents/skills not in the
90
+ payload, and is idempotent. A `[y/N]` confirm guards it unless `--yes`/`-y` or
91
+ `FORGE_NON_INTERACTIVE=1`.
92
+
93
+ ### Fixed
94
+
95
+ - **Halt-recovery advisor output now reaches the human (FORGE-BUG-046).** When a
96
+ `run-task` / `fix-bug` phase halted on a missing verdict or a preflight/
97
+ postflight gate failure, the orchestrator spawned an opus-class read-only
98
+ advisor — but its diagnosis was never surfaced. Two compounding defects:
99
+ `runHaltAdvisor` discarded the subagent result (never extracted or notified
100
+ the advisory text), and every caller invoked it with `void` and returned
101
+ `halted` immediately, so `pipeline-end` fired ~1 ms after the advisor started
102
+ — before the LLM had produced anything. Now the advisor is awaited before
103
+ teardown, its final output is surfaced via `ctx.ui.notify` (reaching both the
104
+ viewport tail and `orchestrator.jsonl`), and the structured `remediation` is
105
+ printed deterministically — independent of the LLM — so a skipped or failed
106
+ advisor still leaves a concrete next step. Applies to both the task and bug
107
+ verdict loops and all five gate-halt call sites.
108
+
109
+ ## [1.0.36] — 2026-06-09
110
+
111
+ Orchestrator dashboard logs + autonomous run-sprint + KB-refresh, re-landed onto
112
+ the modular-orchestrator decomposition.
113
+
114
+ ### Added
115
+
116
+ - **Orchestrator decision logs on the dashboard.** The shared
117
+ `withOrchestratorTranscript` notify-interception now mirrors every
118
+ orchestrator notify onto its root node (`tree.appendTail(entityId, …)`), and
119
+ the dashboard renders the Activity log for ALL node kinds (not just leaf). The
120
+ task/sprint/bug root node now carries the orchestrator's own narrative — gate
121
+ results, review verdicts, escalations, halts — alongside the per-phase leaf
122
+ nodes' subagent tool-call activity. New granular per-phase lines: `〇 preflight
123
+ ok`, `dispatch persona/model`, resolved `verdict`, `〇 postflight ok`.
124
+ - **KB-link refresh is orchestrator-owned in run-task.** After the writeback
125
+ phase, the pipeline calls `runRefreshKbLinks(cwd)` directly (forge-cli
126
+ subagents run via the Pi runtime and have no Skill tool, so the prior
127
+ `forge:refresh-kb-links` Skill-tool instruction caused a multi-call probe
128
+ loop).
129
+
130
+ ### Changed
131
+
132
+ - **`/forge:run-sprint` runs to completion.** Removed the per-task "Continue to
133
+ next task?" confirm and the partial-ceremony-on-decline branch. A sprint
134
+ command now runs all of its tasks, then the single clean-complete ceremony.
135
+ The mid-sprint modal previously turned any UI hiccup into a premature partial
136
+ ceremony (ceremony firing after task 1 with later tasks still draft).
137
+ Deliberate cancellation (abort signal / task halt) still stops the sprint.
138
+
139
+ ### Fixed
140
+
141
+ - Dispatch line printed `model=[object Object]` — `modelResolution.model` is a
142
+ `{provider, model}` object; now formatted as `provider:model`.
143
+
144
+ ## [1.0.35] — 2026-06-07
145
+
146
+ Re-bundle forge-plugin 1.4.4 — CLI-first field-test gap fixes: paths.commands
147
+ no longer prefix-derived (always `.claude/commands/forge`), explicit
148
+ `paths.forgeRoot=".forge"` write, dev-only tools excluded from the
149
+ structure manifest (instance expectation 49/49, no false /forge:health gaps).
150
+
151
+ ## [1.0.34] — 2026-06-07
152
+
153
+ No-dead-vendored-references gate (closes the forge#112 failure class).
154
+
155
+ ### Added
156
+
157
+ - **`tools/check-vendored-refs.cjs`** — scans every vendored text file
158
+ (commands, drivers, rulebooks, settings, agents, skills) for
159
+ `.forge/…` / `$FORGE_ROOT/…` path references and fails on any whose
160
+ target doesn't exist post-bootstrap. Wired in twice: vitest
161
+ (`vendored-refs.test.ts`, against the real payload) and `tmp-smoke.sh`
162
+ BOOTSTRAP-9.
163
+
164
+ ### Fixed
165
+
166
+ - Two dead references the new gate caught immediately:
167
+ **`forge-preflight.cjs`** (referenced by the run-task driver +
168
+ meta-fix-bug/meta-orchestrate — /forge:run-task would have hit a dead tool
169
+ on first use) added to `TOOLS_TO_COPY`, and
170
+ **`init/workflow-gen-plan.json`** (referenced by rebuild.md) bundled.
171
+
172
+ ## [1.0.33] — 2026-06-07
173
+
174
+ Re-bundle forge-plugin 1.4.3 — wfl-init.js Phase 2 verify invocations carry
175
+ the required `--kb-path` ([forge#112](https://github.com/Entelligentsia/forge/issues/112) follow-up).
176
+
177
+ ## [1.0.32] — 2026-06-07
178
+
179
+ Re-bundle forge-plugin 1.4.2 — wfl-init.js Workflow-API rewrite
180
+ ([forge#112](https://github.com/Entelligentsia/forge/issues/112): phase
181
+ callbacks silently discarded → init ran 0 agents but reported success;
182
+ parallel() thunks; agent(prompt, opts) arg order; missing schema opts).
183
+
184
+ ### Fixed
185
+
186
+ - **`build-payload` bundles the full `init/` rulebook tree** — `discovery/`
187
+ (5 prompts) and `generation/` (11 rulebooks) join `phases/`. Bundling only
188
+ `phases/` left wfl-init.js discovery/KB-doc subagents with dead rulebook
189
+ references in vendored projects.
190
+
191
+ ## [1.0.31] — 2026-06-07
192
+
193
+ Re-bundle forge-plugin 1.4.1 — wfl-init.js Workflow-harness parse fix
194
+ (`export default` wrapper stripped; every `/forge:init` dispatch previously
195
+ failed at launch with "SyntaxError: Unexpected keyword 'export'").
196
+ Projects bootstrapped with the broken driver: re-run `4ge init claude .`
197
+ (idempotent repair overwrites `.claude/workflows/wfl-init.js`).
198
+
199
+ ## [1.0.30] — 2026-06-07
200
+
201
+ Fixed `/forge:*` command namespace — full project vendoring (bundles forge-plugin 1.4.0).
202
+
203
+ ### Changed
204
+
205
+ - **Bootstrap Step 4 — full `/forge:*` command surface vendored.** Replaces the
206
+ init.md-only install: the union of `.base-pack/commands/` (17 sprint-workflow
207
+ shims, now static `/forge:*` files) and `commands/` (utility commands) vendors
208
+ into `.claude/commands/forge/`. On name collision (`init.md`, `check-agent.md`,
209
+ `enhance.md`) the `.base-pack` version wins. Project-prefix namespaces
210
+ (`/acme:*`, `/hello:*`) are retired — wfl:init no longer generates them
211
+ (plugin 1.4.0 `getCommandsSubdir()` is fixed to `forge`).
212
+
213
+ - **Bootstrap Step 4c — Forge-root content vendored into `.forge/`.** `init/`
214
+ (wfl:init phase rulebooks), `.base-pack/` (Phase 3 materialization source —
215
+ substitute-placeholders probes it first), `meta/` (rebuild/migrate sources +
216
+ skill-recommendations), and `.claude-plugin/plugin.json` (version source).
217
+ The vendored `.forge/` now serves as a complete Forge root for the
218
+ `${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}` fallback every command carries.
219
+
220
+ - **Bootstrap Step 4d — Claude Code assets vendored into `.claude/`.**
221
+ `agents/` (store-query-validator, tomoshibi) and `skills/` (4 skill dirs).
222
+
223
+ - **`forge.bundledVersion`** corrected to track the actually-bundled plugin
224
+ (1.4.0; had drifted at 1.2.21).
225
+
226
+ ### Fixed
227
+
228
+ - **`composeUpdateKickoff` directive patch** handles both the plugin ≥ 1.4.0
229
+ `${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}` form and the legacy
230
+ `${CLAUDE_PLUGIN_ROOT}` form when retargeting `update.md`.
231
+
232
+ ## [1.0.29] — 2026-06-07
233
+
234
+ `4ge init claude` bootstrap repair, round 2 — hook runtime deps (PostToolUse MODULE_NOT_FOUND in 1.0.28).
235
+
236
+ ### Fixed
237
+
238
+ - **`hooks/lib/` vendored (bootstrap Step 3b + build-payload 2e4).** Hook scripts
239
+ require `./lib/common.cjs` / `./lib/write-registry.js` at runtime; neither the
240
+ payload nor the bootstrap shipped `hooks/lib/`, so `validate-write`, `post-init`,
241
+ and `post-sprint` failed with MODULE_NOT_FOUND on every matching tool call
242
+ (fail-open, but noisy in the Claude Code UI).
243
+
244
+ - **`query-logger.cjs` added to `TOOLS_TO_COPY`.** The settings.json PostToolUse:Bash
245
+ hook points at `.forge/tools/query-logger.cjs`, but the tool was never bundled into
246
+ the payload — a hard exit-1 hook error on every Bash call in a bootstrapped project.
247
+
248
+ - **`tools/package.json` CJS scope marker vendored (FORGE-BUG-030 parity).** The
249
+ bootstrap copy filter (`*.cjs`/`*.js` only) dropped the `{"type":"commonjs"}`
250
+ marker build-payload writes into `tools/` — vendored `lib/*.js` would resolve as
251
+ ESM and crash in `"type":"module"` host projects.
252
+
253
+ ## [1.0.28] — 2026-06-07
254
+
255
+ `4ge init claude` bootstrap repair — vendor hook scripts + schemas (first-field-test regressions in 1.0.27).
256
+
257
+ ### Fixed
258
+
259
+ - **Bootstrap Step 3b — hook scripts vendored.** `bootstrapClaudeProject()` now copies
260
+ `payload/hooks/*.cjs` into `.forge/tools/hooks/` — the exact paths the Step 7 settings
261
+ wiring points at. In 1.0.27 the copy step was missing entirely, so every wired hook
262
+ (SessionStart, PreToolUse, PostToolUse, PermissionRequest) fired `node` against a
263
+ nonexistent file and failed with MODULE_NOT_FOUND on session start.
264
+
265
+ - **Bootstrap Step 3c — schemas vendored.** `payload/schemas/*.json` + `schemas/_defs/`
266
+ are now copied into `.forge/schemas/` (previously scaffolded empty), per the
267
+ cli-first-bootstrap ADR ("vendor tools → `.forge/tools/` + schemas").
268
+
269
+ - **`settings-merge.ts` — query-logger retarget.** `query-logger.cjs` is a tool, not a
270
+ hook script (plugin `hooks.json` points it at `tools/query-logger.cjs`); the settings
271
+ block now targets `$CLAUDE_PROJECT_DIR/.forge/tools/query-logger.cjs` instead of the
272
+ nonexistent `tools/hooks/query-logger.cjs`.
273
+
274
+ - Bootstrap manifest `steps` now records `vendor-hooks` and `vendor-schemas`.
275
+
276
+ ## [1.0.27] — 2026-06-07
277
+
278
+ `4ge init claude` — settings hooks wiring, gitignore, preflight, hand-off UX (FORGE-S31-T03).
279
+
280
+ ### Added
281
+
282
+ - **`settings-merge.ts`** — new `mergeForgeHooks()` + `buildForgeHooksBlock()` module with
283
+ merge-not-clobber semantics for wiring Forge hooks into project `.claude/settings.json`.
284
+ Handles 6 branches: absent file (create), empty object (add hooks key), existing without hooks
285
+ (merge in), unrelated hooks (merge Forge entries without overwriting), already-present (no-op),
286
+ malformed JSON (error, never overwrites). Fully idempotent: second run returns `"already-present"`.
287
+
288
+ - **Bootstrap Step 7** — `bootstrapClaudeProject()` now wires Forge hooks into project
289
+ `.claude/settings.json` via `mergeForgeHooks()`. All 8 hook entries (7 task-workflow hooks +
290
+ `forge-permissions`) are written with commands pointing at
291
+ `$CLAUDE_PROJECT_DIR/.forge/tools/hooks/<name>.cjs`. Outcome (`created`/`skipped`/`warnings`)
292
+ reported in `BootstrapResult` per existing conventions.
293
+
294
+ - **Bootstrap Step 8** — idempotent `.gitignore` append. Ported `updateGitignore()` from
295
+ `phase4-register.ts` as a pure standalone function (no `ctx.ui`). If `.gitignore` is present
296
+ and does not already contain a `.forge/store/events/` parent pattern, appends the standard
297
+ Forge gitignore block. Skips silently when absent or already covered.
298
+
299
+ - **Bootstrap Step 9** — preflight check for Claude Code availability (`runPreflight()`). Detects
300
+ `claude` binary reachability via `execFileSync("claude", ["--version"])`. Non-fatal: adds an
301
+ actionable warning to `result.warnings` if unavailable, but does not flip `result.ok`. Returns
302
+ `BootstrapPreflight { claudeAvailable, workflowToolChecked, warnings }` attached to `BootstrapResult`.
303
+
304
+ - **`BootstrapPreflight` type** — new sub-object on `BootstrapResult` with `claudeAvailable: boolean`,
305
+ `workflowToolChecked: boolean` (always `false` in T03 — no reliable offline check), and `warnings: string[]`.
306
+ Additive change — T02 tests remain green.
307
+
308
+ - **Hand-off UX** — `init.ts` now prints a structured multi-line message naming `/forge:init`,
309
+ explaining the one-time hooks-approval prompt, and listing all 7 task-workflow hooks by name
310
+ and event type. Prepends a warning line if Claude Code was not found on PATH.
311
+
312
+ - **Test suite** — 9-fixture `settings-merge.test.ts` covering all merge branches; 11 new assertions
313
+ in `bootstrap.test.ts` for Steps 7–9 and idempotency.
314
+
315
+ ## [1.0.26] — 2026-06-07
316
+
317
+ CLI-first bootstrap: new `4ge init claude [dir]` bin subcommand (FORGE-S31-T02).
318
+
319
+ ### Added
320
+
321
+ - **`forge init claude [dir]` subcommand** — new bin route that deterministically
322
+ bootstraps a Claude Code project from the bundled forge-payload in seconds.
323
+ Zero LLM tokens, zero network access, pure fs. Scaffolds `.forge/` skeleton
324
+ + store dirs, vendors tools+lib into `.forge/tools/`, installs
325
+ `.claude/commands/forge/init.md` from payload, and installs all four
326
+ `.claude/workflows/wfl-*.js` drivers. Writes `.forge/.bootstrap-manifest.json`
327
+ with payload version and integrity hash. Idempotent repair: a second consecutive
328
+ run is a byte-identical no-op; partial bootstraps are repaired file-by-file.
329
+ `.forge/config.json` and `.forge/store/**` are never touched.
330
+
331
+ - **`src/extensions/forgecli/claude-bootstrap/bootstrap.ts`** — the pure-fs
332
+ bootstrap module (`bootstrapClaudeProject(opts)`) with clean/partial/complete
333
+ idempotency, fast-fail payload validation, and structured `BootstrapResult`
334
+ (created/skipped/warnings). Grep-negative: no fetch/network, no store writes,
335
+ no sendUserMessage, no ctx.ui.
336
+
337
+ - **Vitest tests** in
338
+ `test/extensions/forgecli/claude-bootstrap/bootstrap.test.ts` — 17 tests
339
+ covering clean / partial / complete (no-op) / non-writable / payload-validation
340
+ / init.md install / wfl-drivers / grep-negative ACs branches. All integration-
341
+ style against the real function (no fs mocking).
342
+
343
+ - **argv.ts**: extended `ForgeAction` union with `"init"`; added `init claude [dir]`
344
+ parse branch before the fast-path subcommand block.
345
+
346
+ - **`src/bin/init.ts`** — `parseInitArgs()` + `runInit()` handler following the
347
+ `runDoctor` / `runUpdate` / `runConfig` structural convention.
348
+
349
+ - **forge.ts**: wired `forgeAction === "init"` dispatch branch; updated help text.
350
+
10
351
  ## [1.0.25] — 2026-06-06
11
352
 
12
353
  Coordinated release matching forge plugin **v1.2.21**. Both changes come from
package/README.md CHANGED
@@ -18,6 +18,8 @@
18
18
 
19
19
  forge-cli generates a project-specific engineering knowledge base, sprint workflows, agent personas, and an SDLC pipeline — then drives them from your terminal on the [pi-coding-agent] runtime. Model-agnostic. No editor lock-in.
20
20
 
21
+ > **Two ways to run Forge.** Drive it headless in your terminal on the pi runtime (this README), **or** scaffold Forge into a Claude Code project with `4ge init claude .` and run the `/forge:*` slash commands inside Claude Code — remove it with `4ge uninstall claude`. The `4ge init` path is the supported way to add Forge to Claude Code and **replaces the deprecated marketplace plugin install** ([why](https://github.com/Entelligentsia/forge#distribution)).
22
+
21
23
  ## Why
22
24
 
23
25
  - **Structured SDLC, in any terminal.** Plan → implement → review → validate → commit chains, gated by your own personas and audience rules.
@@ -5,6 +5,270 @@ Format: newest first. Breaking changes are marked **△ Breaking**.
5
5
 
6
6
  ---
7
7
 
8
+ ## [1.5.0] — 2026-06-11
9
+
10
+ Plugin **shim-only sunset release** (FORGE-S32-T07). The stable skillforge
11
+ marketplace channel stops being a parallel distribution mechanism and becomes a
12
+ one-way migration ramp to the CLI-first install (`npm i -g @entelligentsia/forgecli`,
13
+ the `4ge` binary). A plugin user who invokes `/forge:init` (or `/forge:update` /
14
+ `/forge:rebuild`) on v1.5.0 is shown what changed and — with one explicit consent —
15
+ is migrated to the CLI, with project data (`.forge/config.json`, `.forge/store/**`,
16
+ the KB folder) preserved byte-for-byte.
17
+
18
+ ### Added
19
+ - `forge/forge/tools/apply-plugin-shim.cjs` — a **release-branch** shim-overlay
20
+ generator (sibling of `rewrite-plugin-urls.cjs`). It overlays the
21
+ `release`-branch `forge/forge/commands/*.md` with two template tiers and
22
+ regenerates `integrity.json` so `/forge:health` verification still passes:
23
+ - **Full consent-gated shim** for `init` / `update` / `rebuild`: migration
24
+ explanation (what is preserved) + node/npm preflight + a **prose-only**,
25
+ consent-gated `npm i -g @entelligentsia/forgecli && 4ge init claude .` offer
26
+ (never auto-executed) + a print-only fallback.
27
+ - **Short redirect notice** for every other command ("retired; run
28
+ `/forge:init` to migrate").
29
+ The tool **refuses to apply without `--target release`** (mirrors the
30
+ `rewrite-plugin-urls` `--target` discipline) — guarding against a destructive
31
+ run on `main`.
32
+
33
+ ### Changed
34
+ - README and the skillforge marketplace listing read **CLI-first**; the
35
+ marketplace appears only as a deprecation / migration note naming v1.5.0 as the
36
+ shim and the following release as the dual-path strip.
37
+ - `forge-releaser` ritual wires `apply-plugin-shim` into Step 2 on the `release`
38
+ branch and makes the **build-payload-from-main** + `verify-publish` gate
39
+ explicit: the CLI npm payload is poured from **main** (real T03–T06 commands)
40
+ while the plugin carries the release-overlay shims. The channel divergence is
41
+ intentional and gated.
42
+
43
+ ### Notes
44
+ - **Critical channel split:** the shim is a release-branch overlay **only**.
45
+ Main's `forge/forge/commands/` stays the real unified T06 tree because
46
+ `build-payload.cjs` copies it verbatim into the CLI bundle — shimming main would
47
+ poison the CLI payload. The canary `forge@forge` channel tracks main and is
48
+ intentionally **not** shimmed.
49
+ - The dual-path code strip and the retirement of `apply-plugin-shim.cjs` itself
50
+ are deferred to S34 (mechanical). Non-breaking; installed projects converge on
51
+ the next `4ge update` / re-bootstrap.
52
+
53
+ ---
54
+
55
+ ## [1.4.13] — 2026-06-11
56
+
57
+ Command-tree unification (FORGE-S32-T06). The two payload command trees
58
+ (`forge/forge/commands/` and `forge/forge/init/base-pack/commands/`) are
59
+ collapsed into one. `forge/forge/commands/` is now the single source of truth
60
+ for every `/forge:*` command — "which copy wins" is no longer a question.
61
+
62
+ ### Changed
63
+ - Materialized the union into `forge/forge/commands/`: folded in the 14
64
+ non-colliding base-pack sprint-workflow shims (`approve`, `collate`, `commit`,
65
+ `fix-bug`, `implement`, `new-sprint`, `plan`, `plan-sprint`, `retro`,
66
+ `review-code`, `review-plan`, `run-sprint`, `run-task`, `validate`) and
67
+ overwrote the three collisions (`init`, `check-agent`, `enhance`) with the
68
+ base-pack winner bytes. Installed `.claude/commands/forge/` is byte-for-byte
69
+ identical to the prior union output.
70
+ - `payload-manifest.json` carries a single `commands` entry (the
71
+ `init/base-pack/commands` entry is removed); `bootstrap` copies one directory
72
+ with no union/collision ordering.
73
+ - Plugin-channel semantic delta: the plugin-served `init`/`check-agent`/
74
+ `enhance` bytes now match the base-pack winners. The plugin channel is retired
75
+ at T07.
76
+
77
+ ### Removed
78
+ - Deleted `forge/forge/init/base-pack/commands/` (17 files). `build-base-pack.cjs`
79
+ no longer regenerates it — the Section-5 command-generation loop and the
80
+ `expectedFiles` "Commands (16)" block were removed.
81
+
82
+ ---
83
+
84
+ ## [1.4.7] — 2026-06-10
85
+
86
+ Declarative payload manifest + source-drift check (FORGE-S32-T02). A new
87
+ `payload-manifest.json` at the payload root names every shipped artifact —
88
+ source path (under `forge/forge/`) → bundle path (`dist/forge-payload/`) →
89
+ install destination (bootstrapped project root) → removal owner (uninstall
90
+ grouping) — spec'd by the sibling `schemas/payload-manifest.schema.json`. This
91
+ replaces the implicit contract previously spread across `build-payload.cjs`,
92
+ `bootstrap.ts`, and `uninstall.ts` hand-maintained copy lists that caused the
93
+ FORGE-BUG-030 / FORGE-BUG-036 `MODULE_NOT_FOUND` class.
94
+
95
+ ### Added
96
+ - `tools/check-payload-manifest.cjs` — deterministic, CI-only source-drift
97
+ check. Exits non-zero on a manifest entry pointing at a missing source, or a
98
+ file under a recursively-copied payload tree that no manifest entry claims.
99
+ Wired into `plugin-ci.yml`. Not vendored into project instances
100
+ (`build-manifest.cjs` `DEV_ONLY_TOOLS` excludes it).
101
+
102
+ The three forge-cli consumers are rewired to read the manifest in FORGE-S32-T03.
103
+
104
+ **Regenerate:** none (build/bootstrap infrastructure; not a materialized
105
+ instance artifact).
106
+
107
+ ---
108
+
109
+ ## [1.4.5] — 2026-06-09
110
+
111
+ Collate-workflow KB-link refresh is orchestrator-owned under forge-cli. The
112
+ generated collate workflow no longer instructs the collator subagent to invoke
113
+ the `forge:refresh-kb-links` Skill tool — forge-cli subagents run via the Pi
114
+ runtime, which has no Skill tool, so the instruction triggered a multi-call
115
+ bash-probe loop before falling back. The Claude Code TUI standalone path still
116
+ uses the Skill tool; under forge-cli the run-task orchestrator owns the KB
117
+ refresh after the writeback phase. Prose-only change to `collator_agent.md`
118
+ (base-pack) and `meta-collate.md`.
119
+
120
+ **Regenerate:** workflows:collator_agent
121
+
122
+ > Manual: run `/forge:update` (or `/forge:rebuild`) to regenerate the collate workflow.
123
+
124
+ ---
125
+
126
+ ## [1.4.4] — 2026-06-07
127
+
128
+ First full CLI-first field test (git.git, ~500 source files) — `/forge:init`
129
+ passed all phases; gap analysis surfaced three config/manifest defects.
130
+
131
+ ### Fixed
132
+
133
+ - **`paths.commands` config drift** — `phase-1-collect.md` still carried a
134
+ prefix-derived instruction ("if prefix is `HELLO`, write
135
+ `.claude/commands/hello`") that survived the 1.4.0 namespace redesign; the
136
+ config-writer followed it and check-structure reported commands 0/14. The
137
+ path is ALWAYS `.claude/commands/forge`.
138
+ - **`paths.forgeRoot` written as an absolute npm-global payload path** — no
139
+ rulebook said what to write, so the register agent improvised. New explicit
140
+ `generate-tools.md` step: `paths.forgeRoot = ".forge"` (the vendored
141
+ `.forge/` IS the Forge root; absolute paths break on upgrades/nvm switches).
142
+ - **False "missing tools" gaps (49/59)** — `build-manifest.cjs` now excludes
143
+ the 10 plugin-development tools (`build-manifest`, `gen-integrity`,
144
+ `token-forensics`, …) from the `tools` namespace: the structure manifest
145
+ describes project instances, and dev tools are never vendored.
146
+ `structure-manifest.json` regenerated; instance expectation is now 49/49.
147
+
148
+ ## [1.4.3] — 2026-06-07
149
+
150
+ ### Fixed
151
+
152
+ - **`wfl-init.js` Phase 2 verify invocations matched the tool's real CLI**
153
+ ([forge#112](https://github.com/Entelligentsia/forge/issues/112) follow-up).
154
+ Prompts said `verify-phase.cjs --phase 2` bare; the tool requires
155
+ `--phase 2 --kb-path <path>` and exits 2 without it. Both invocations now
156
+ pass `--kb-path "${kbFolder}"`. Contract gates added: every driver
157
+ verify-phase invocation must use a supported phase (1–3) and `--phase 2`
158
+ must carry `--kb-path`.
159
+
160
+ ## [1.4.2] — 2026-06-07
161
+
162
+ ### Fixed
163
+
164
+ - **`wfl-init.js` ran zero agents but reported fabricated success
165
+ ([forge#112](https://github.com/Entelligentsia/forge/issues/112)).** Four
166
+ Workflow-API misuses: `phase(title, callback)` callbacks (containing every
167
+ phase body) were silently discarded by the harness; `parallel()` received
168
+ in-flight promises instead of thunks; `agent()` got the model tier as first
169
+ arg instead of `opts.model`; structured results lacked `opts.schema` so
170
+ `.ok` reads were undefined. `/forge:init` "completed" in ~3 ms with 0 agents
171
+ and hardcoded `ok: true`. Phase bodies now run inline, fan-outs use thunks,
172
+ every agent call is `agent(prompt, { model, label, phase, schema })`, and
173
+ the final report reflects real phase results (halts return `ok: false` with
174
+ the failure reason). Rulebook reads use vendored `.forge/init/...` paths
175
+ with a direct-analysis fallback for absent prompt files. Fix ported from
176
+ the field-validated patch authored against the live testbench run.
177
+
178
+ ### Added
179
+
180
+ - **`wfl-drivers-parse.test.cjs` API-contract gates** — all drivers checked
181
+ for phase-callback misuse, promise-instead-of-thunk `parallel()` calls,
182
+ reversed `agent()` args, and dead `init/**.md` rulebook references.
183
+
184
+ ## [1.4.1] — 2026-06-07
185
+
186
+ ### Fixed
187
+
188
+ - **`wfl-init.js` failed to launch — "SyntaxError: Unexpected keyword 'export'".**
189
+ The driver shipped wrapped in `export default async function wflInit(args)`,
190
+ but the Workflow harness permits exactly one export (the leading `meta`
191
+ literal) and evaluates the remainder as an async function body. The body now
192
+ runs at top level reading the `args` global, matching the other three
193
+ drivers. Every `/forge:init` → `workflow('wfl:init')` dispatch was dead on
194
+ arrival before this fix.
195
+
196
+ ### Added
197
+
198
+ - **`wfl-drivers-parse.test.cjs`** — regression gate that parses all base-pack
199
+ `wfl-*.js` drivers exactly the way the Workflow harness does (single meta
200
+ export, body as async function body with workflow globals in scope).
201
+
202
+ ## [1.4.0] — 2026-06-07
203
+
204
+ ### Changed — △ Breaking
205
+
206
+ - **Fixed `/forge:*` command namespace (CLI-first redesign).** Project-prefix
207
+ command namespaces (`/acme:*`, `/hello:*`) are retired — every project gets
208
+ the same `/forge:*` surface, with full parity between Claude Code and the
209
+ pure CLI (`4ge`):
210
+ - `tools/lib/paths.cjs` — `getCommandsSubdir()` returns `'forge'`
211
+ unconditionally (prefix arg is vestigial, kept for caller compat).
212
+ - `init/base-pack/commands/*.md` — `/{{PREFIX}}:` → literal `/forge:`
213
+ (26 occurrences, 17 files). Command templates are now fully static.
214
+ - `tools/substitute-placeholders.cjs` — materializes commands to
215
+ `.claude/commands/forge/` regardless of project prefix.
216
+ - Rulebooks updated: `generate-commands.md`, `phase-3-materialize.md`,
217
+ `phase-1-collect.md` (config `paths.commands` example), `meta-migrate.md`,
218
+ `migrate_structural.md`, `commands/add-task.md` next-steps text.
219
+ - The prefix-derived namespace existed to avoid collisions with the Forge
220
+ *plugin's* own `/forge:*` commands — moot now that the plugin mechanism
221
+ is retired in favour of project-vendored commands.
222
+ - **Migration:** existing projects keep working with their old
223
+ `.claude/commands/<prefix>/` files; re-materialize to get
224
+ `.claude/commands/forge/`, then delete the prefix directory.
225
+
226
+ - **`FORGE_ROOT` vendored fallback in every command.** All 33 resolution
227
+ lines across `commands/*.md` and `init/base-pack/commands/*.md` change from
228
+ `${CLAUDE_PLUGIN_ROOT}` to `${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}` — in a
229
+ plugin-installed session the plugin root still wins; in a plugin-less
230
+ project bootstrapped by `4ge init claude` the vendored `.forge/` (tools,
231
+ schemas, hooks, init, meta) serves as the Forge root.
232
+
233
+ ## [1.3.0] — 2026-06-07
234
+
235
+ ### Added
236
+
237
+ - **`init/base-pack/commands/init.md`** — new project-local command wrapper
238
+ installed by `4ge init claude .` into `.claude/commands/forge/`. Contains
239
+ the full hoisted-prompt flow (KB folder prompt, CLAUDE.md offer, timestamp
240
+ minting), dispatches `workflow('wfl:init', args)`, handles the
241
+ Workflow-tool-missing error explicitly, presents the marketplace-skills offer
242
+ from `result.skillMatches` post-workflow, invokes `forge:refresh-kb-links`
243
+ via the Skill tool, and emits the final report (KB doc count, workflow count,
244
+ command count, accepted/skipped skills). Uses vendored `.forge/tools/` paths
245
+ only — no `$FORGE_ROOT` / `${CLAUDE_PLUGIN_ROOT}` references.
246
+
247
+ ### Changed
248
+
249
+ - **`commands/init.md` (plugin-side)** — Execute section rewritten to dispatch
250
+ `workflow('wfl:init', args)` with hoisted interactive prompts (KB folder
251
+ prompt, CLAUDE.md offer, timestamp minting). Replaces the previous
252
+ `Read $FORGE_ROOT/init/sdlc-init.md` instruction. Includes the explicit
253
+ Workflow-tool-missing error halt (Iron Law 5 — no silent degradation or
254
+ fallback to `sdlc-init.md`).
255
+
256
+ - **`init/phases/phase-1-collect.md`** — Pre-flight Knowledge Base Folder block
257
+ and Step 5 (Marketplace Skills) annotated as orchestrator-owned when the
258
+ orchestrator pre-supplies the values. Annotations are informational — no step
259
+ renames or renumbers (forge-cli `run-phases.ts` glob freeze maintained).
260
+
261
+ - **`init/phases/phase-4-register.md`** — Step 11 (Tomoshibi/refresh-kb-links)
262
+ and Step 13 (CLAUDE.md prompt) annotated as orchestrator-owned. Same
263
+ semantics-preserving annotation policy.
264
+
265
+ - **`init/sdlc-init.md`** — Body reduced to a spec-pointer paragraph: points
266
+ to `wfl-init.js` (orchestration), `commands/init.md` (dispatch surface), and
267
+ `init/phases/` (canonical per-phase contracts). Phase/verify table preserved
268
+ for human readers. File not deleted.
269
+
270
+ ---
271
+
8
272
  ## [1.2.21] — 2026-06-06
9
273
 
10
274
  ### Fixed