@entelligentsia/forgecli 1.0.3 → 1.0.10

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 (356) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +2 -1
  3. package/dist/CHANGELOG-forge-plugin.md +100 -0
  4. package/dist/CHANGELOG-pi.md +94 -0
  5. package/dist/extensions/forgecli/forge-artifact-tool.js +27 -4
  6. package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
  7. package/dist/extensions/forgecli/forge-tools.js +2 -2
  8. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  9. package/dist/extensions/forgecli/subagent/phase-guard.js +15 -5
  10. package/dist/extensions/forgecli/subagent/phase-guard.js.map +1 -1
  11. package/dist/extensions/forgecli/subagent/phase-summary-map.d.ts +1 -0
  12. package/dist/extensions/forgecli/subagent/phase-summary-map.js +17 -0
  13. package/dist/extensions/forgecli/subagent/phase-summary-map.js.map +1 -1
  14. package/dist/forge-payload/.base-pack/workflows/_fragments/store-cli-verbs.md +18 -3
  15. package/dist/forge-payload/.base-pack/workflows/architect_approve.md +4 -5
  16. package/dist/forge-payload/.base-pack/workflows/collator_agent.md +1 -1
  17. package/dist/forge-payload/.base-pack/workflows/commit_task.md +2 -3
  18. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -2
  19. package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +41 -47
  20. package/dist/forge-payload/.base-pack/workflows/triage.md +2 -2
  21. package/dist/forge-payload/.base-pack/workflows/validate_task.md +2 -3
  22. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  23. package/dist/forge-payload/.schemas/_defs/locator.schema.json +13 -0
  24. package/dist/forge-payload/.schemas/bug.schema.json +1 -0
  25. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  26. package/dist/forge-payload/.schemas/migrations.json +63 -0
  27. package/dist/forge-payload/.schemas/sprint.schema.json +1 -0
  28. package/dist/forge-payload/.schemas/task.schema.json +1 -0
  29. package/dist/forge-payload/integrity.json +3 -3
  30. package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +18 -3
  31. package/dist/forge-payload/meta/workflows/meta-approve.md +4 -5
  32. package/dist/forge-payload/meta/workflows/meta-bug-triage.md +2 -2
  33. package/dist/forge-payload/meta/workflows/meta-collate.md +1 -1
  34. package/dist/forge-payload/meta/workflows/meta-commit.md +2 -3
  35. package/dist/forge-payload/meta/workflows/meta-implement.md +3 -2
  36. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +41 -47
  37. package/dist/forge-payload/meta/workflows/meta-validate.md +2 -3
  38. package/dist/forge-payload/schemas/_defs/locator.schema.json +13 -0
  39. package/dist/forge-payload/schemas/bug.schema.json +1 -0
  40. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  41. package/dist/forge-payload/schemas/sprint.schema.json +1 -0
  42. package/dist/forge-payload/schemas/structure-manifest.json +3 -2
  43. package/dist/forge-payload/schemas/task.schema.json +1 -0
  44. package/dist/forge-payload/tools/artifact-store.cjs +242 -0
  45. package/dist/forge-payload/tools/artifact.cjs +60 -120
  46. package/dist/forge-payload/tools/lib/artifact-kinds.cjs +95 -0
  47. package/dist/forge-payload/tools/lib/store-nlp.cjs +6 -0
  48. package/dist/forge-payload/tools/lib/store-query-exec.cjs +39 -5
  49. package/dist/forge-payload/tools/lib/suggest.cjs +2 -1
  50. package/dist/forge-payload/tools/preflight-gate.cjs +55 -5
  51. package/dist/forge-payload/tools/store-cli.cjs +50 -15
  52. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +5 -2
  53. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  54. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +81 -18
  55. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  56. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  57. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +1 -0
  58. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  59. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  60. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +19 -24
  61. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  62. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +1 -0
  63. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  64. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +14 -1
  65. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  66. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +22 -8
  67. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  68. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  69. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  70. package/node_modules/@earendil-works/pi-ai/README.md +1 -1
  71. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +374 -122
  72. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  73. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +424 -232
  74. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  75. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts +1 -1
  76. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  77. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +38 -2
  78. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  79. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  80. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +21 -12
  81. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  82. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  83. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +6 -10
  84. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  85. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts.map +1 -1
  86. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js +1 -1
  87. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
  88. package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts.map +1 -1
  89. package/node_modules/@earendil-works/pi-ai/dist/providers/google.js +5 -3
  90. package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
  91. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -1
  92. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js +3 -4
  93. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -1
  94. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts.map +1 -1
  95. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js +2 -3
  96. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js.map +1 -1
  97. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  98. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +159 -78
  99. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  100. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  101. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +16 -11
  102. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
  103. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
  104. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +4 -1
  105. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
  106. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  107. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +6 -10
  108. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
  109. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  110. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +1 -0
  111. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
  112. package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts.map +1 -1
  113. package/node_modules/@earendil-works/pi-ai/dist/stream.js +14 -2
  114. package/node_modules/@earendil-works/pi-ai/dist/stream.js.map +1 -1
  115. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +14 -4
  116. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  117. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  118. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts +6 -0
  119. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts.map +1 -0
  120. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js +34 -0
  121. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js.map +1 -0
  122. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts +9 -7
  123. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -1
  124. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js +8 -7
  125. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -1
  126. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  127. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js +1 -1
  128. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  129. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts +1 -1
  130. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
  131. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js +1 -1
  132. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js.map +1 -1
  133. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts +10 -1
  134. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  135. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js +179 -79
  136. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  137. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  138. package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +94 -0
  139. package/node_modules/@earendil-works/pi-coding-agent/README.md +9 -0
  140. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts +3 -0
  141. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
  142. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +27 -0
  143. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js.map +1 -1
  144. package/node_modules/@earendil-works/pi-coding-agent/dist/config.d.ts.map +1 -1
  145. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +15 -2
  146. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js.map +1 -1
  147. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts +1 -0
  148. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts.map +1 -1
  149. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +1 -0
  150. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js.map +1 -1
  151. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +5 -1
  152. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  153. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +28 -4
  154. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  155. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  156. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +18 -24
  157. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  158. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -1
  159. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  160. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +8 -2
  161. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  162. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +7 -5
  163. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  164. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  165. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  166. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +65 -13
  167. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  168. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  169. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +1 -1
  170. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  171. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts +9 -1
  172. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
  173. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js +134 -11
  174. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
  175. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts +2 -0
  176. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  177. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +10 -6
  178. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js.map +1 -1
  179. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts +6 -7
  180. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  181. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +75 -28
  182. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  183. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +2 -0
  184. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  185. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +14 -9
  186. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  187. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  188. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +0 -3
  189. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  190. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
  191. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +7 -10
  192. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
  193. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
  194. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
  195. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
  196. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
  197. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
  198. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +5 -7
  199. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
  200. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  201. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +6 -7
  202. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  203. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts +5 -2
  204. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +1 -1
  205. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js +17 -1
  206. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js.map +1 -1
  207. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
  208. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +5 -6
  209. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
  210. package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts +2 -0
  211. package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts.map +1 -1
  212. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +2 -0
  213. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js.map +1 -1
  214. package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -1
  215. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +69 -16
  216. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -1
  217. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  218. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js +118 -1
  219. package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js.map +1 -1
  220. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +1 -3
  221. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  222. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +2 -4
  223. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
  224. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  225. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js +1 -1
  226. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  227. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -0
  228. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  229. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +59 -6
  230. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  231. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  232. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js +10 -0
  233. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  234. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  235. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +3 -1
  236. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  237. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -0
  238. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  239. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  240. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.d.ts +4 -0
  241. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.d.ts.map +1 -0
  242. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.js +13 -0
  243. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.js.map +1 -0
  244. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.d.ts +3 -0
  245. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.d.ts.map +1 -0
  246. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.js +7 -0
  247. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.js.map +1 -0
  248. package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +13 -10
  249. package/node_modules/@earendil-works/pi-coding-agent/docs/development.md +1 -1
  250. package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +12 -6
  251. package/node_modules/@earendil-works/pi-coding-agent/docs/models.md +25 -12
  252. package/node_modules/@earendil-works/pi-coding-agent/docs/providers.md +13 -5
  253. package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +1 -0
  254. package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +2 -1
  255. package/node_modules/@earendil-works/pi-coding-agent/docs/sdk.md +6 -0
  256. package/node_modules/@earendil-works/pi-coding-agent/docs/session-format.md +1 -1
  257. package/node_modules/@earendil-works/pi-coding-agent/docs/sessions.md +8 -0
  258. package/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +7 -3
  259. package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +2 -0
  260. package/node_modules/@earendil-works/pi-coding-agent/docs/tui.md +2 -2
  261. package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +9 -0
  262. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/README.md +1 -0
  263. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/index.ts +1 -1
  264. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
  265. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/index.ts +54 -3
  266. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  267. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/git-merge-and-resolve.ts +115 -0
  268. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/input-transform-streaming.ts +39 -0
  269. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
  270. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
  271. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +443 -61
  272. package/node_modules/@earendil-works/pi-coding-agent/package.json +6 -6
  273. package/node_modules/@earendil-works/pi-tui/README.md +2 -2
  274. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  275. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +24 -83
  276. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  277. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  278. package/node_modules/@earendil-works/pi-tui/dist/components/input.js +7 -55
  279. package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
  280. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts +7 -1
  281. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  282. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +12 -2
  283. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  284. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
  285. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  286. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  287. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +1 -1
  288. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  289. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +34 -7
  290. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  291. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +33 -10
  292. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  293. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +172 -37
  294. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  295. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +6 -1
  296. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
  297. package/node_modules/@earendil-works/pi-tui/dist/utils.js +27 -15
  298. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  299. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts +25 -0
  300. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts.map +1 -0
  301. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js +96 -0
  302. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js.map +1 -0
  303. package/node_modules/@earendil-works/pi-tui/package.json +2 -2
  304. package/node_modules/@entelligentsia/forge-compress/LICENSE +21 -0
  305. package/node_modules/@entelligentsia/forge-compress/README.md +85 -0
  306. package/node_modules/@mariozechner/clipboard/Cargo.toml +3 -3
  307. package/node_modules/@mariozechner/clipboard/index.d.ts +34 -20
  308. package/node_modules/@mariozechner/clipboard/index.js +546 -257
  309. package/node_modules/@mariozechner/clipboard/package.json +5 -6
  310. package/node_modules/@mariozechner/clipboard/package.json.prepack-backup +14 -14
  311. package/node_modules/@mariozechner/clipboard/src/lib.rs +4 -9
  312. package/node_modules/@mariozechner/clipboard-linux-x64-gnu/clipboard.linux-x64-gnu.node +0 -0
  313. package/node_modules/@mariozechner/clipboard-linux-x64-gnu/package.json +2 -2
  314. package/package.json +7 -7
  315. package/dist/forge-payload/.base-pack/commands/quiz-agent.md +0 -6
  316. package/dist/forge-payload/.base-pack/commands/retrospective.md +0 -6
  317. package/dist/forge-payload/.base-pack/commands/sprint-intake.md +0 -6
  318. package/dist/forge-payload/.base-pack/commands/sprint-plan.md +0 -6
  319. package/dist/forge-payload/commands/calibrate.md +0 -10
  320. package/dist/forge-payload/commands/materialize.md +0 -119
  321. package/dist/forge-payload/commands/migrate.md +0 -12
  322. package/dist/forge-payload/commands/quiz-agent.md +0 -6
  323. package/dist/forge-payload/commands/regenerate.md +0 -6
  324. package/dist/forge-payload/commands/store-query.md +0 -6
  325. package/dist/forge-payload/commands/store-repair.md +0 -6
  326. package/dist/forge-payload/commands/update-tools.md +0 -10
  327. package/dist/forge-payload/meta/templates/meta-retrospective.md +0 -28
  328. package/dist/forge-payload/tools/prompts/sprint-plan-prompt.md +0 -70
  329. package/dist/forge-payload/tools/schemas/task-list.schema.json +0 -53
  330. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts +0 -4
  331. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts.map +0 -1
  332. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js +0 -3
  333. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js.map +0 -1
  334. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts +0 -20
  335. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts.map +0 -1
  336. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js +0 -92
  337. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js.map +0 -1
  338. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts +0 -18
  339. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts.map +0 -1
  340. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js +0 -42
  341. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js.map +0 -1
  342. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts +0 -10
  343. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts.map +0 -1
  344. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js +0 -31
  345. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js.map +0 -1
  346. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts +0 -30
  347. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts.map +0 -1
  348. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js +0 -170
  349. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js.map +0 -1
  350. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts +0 -26
  351. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts.map +0 -1
  352. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js +0 -90
  353. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js.map +0 -1
  354. package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +0 -3
  355. package/node_modules/@mariozechner/clipboard-linux-x64-musl/clipboard.linux-x64-musl.node +0 -0
  356. package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +0 -25
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mariozechner/clipboard",
3
- "version": "0.3.6",
3
+ "version": "0.3.9",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "napi": {
@@ -23,7 +23,7 @@
23
23
  "url": "https://github.com/badlogic/clipboard.git"
24
24
  },
25
25
  "devDependencies": {
26
- "@napi-rs/cli": "^2.18.0",
26
+ "@napi-rs/cli": "3.7.0",
27
27
  "ava": "^6.0.1"
28
28
  },
29
29
  "ava": {
@@ -36,13 +36,12 @@
36
36
  "artifacts": "napi artifacts",
37
37
  "build": "napi build --platform --release",
38
38
  "build:debug": "napi build --platform",
39
- "prepublishOnly": "napi prepublish -t npm",
39
+ "prepublishOnly": "napi pre-publish -t npm",
40
40
  "test": "ava",
41
- "universal": "napi universal",
41
+ "universal": "napi universalize -o artifacts",
42
42
  "version": "napi version"
43
43
  },
44
44
  "optionalDependencies": {
45
- "@mariozechner/clipboard-linux-x64-gnu": "0.3.6",
46
- "@mariozechner/clipboard-linux-x64-musl": "0.3.6"
45
+ "@mariozechner/clipboard-linux-x64-gnu": "0.3.9"
47
46
  }
48
47
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mariozechner/clipboard",
3
- "version": "0.3.6",
3
+ "version": "0.3.9",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "napi": {
@@ -23,7 +23,7 @@
23
23
  "url": "https://github.com/badlogic/clipboard.git"
24
24
  },
25
25
  "devDependencies": {
26
- "@napi-rs/cli": "^2.18.0",
26
+ "@napi-rs/cli": "3.7.0",
27
27
  "ava": "^6.0.1"
28
28
  },
29
29
  "ava": {
@@ -36,21 +36,21 @@
36
36
  "artifacts": "napi artifacts",
37
37
  "build": "napi build --platform --release",
38
38
  "build:debug": "napi build --platform",
39
- "prepublishOnly": "napi prepublish -t npm",
39
+ "prepublishOnly": "napi pre-publish -t npm",
40
40
  "test": "ava",
41
- "universal": "napi universal",
41
+ "universal": "napi universalize -o artifacts",
42
42
  "version": "napi version"
43
43
  },
44
44
  "optionalDependencies": {
45
- "@mariozechner/clipboard-darwin-arm64": "0.3.6",
46
- "@mariozechner/clipboard-darwin-universal": "0.3.6",
47
- "@mariozechner/clipboard-darwin-x64": "0.3.6",
48
- "@mariozechner/clipboard-linux-arm64-gnu": "0.3.6",
49
- "@mariozechner/clipboard-linux-arm64-musl": "0.3.6",
50
- "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.6",
51
- "@mariozechner/clipboard-linux-x64-gnu": "0.3.6",
52
- "@mariozechner/clipboard-linux-x64-musl": "0.3.6",
53
- "@mariozechner/clipboard-win32-arm64-msvc": "0.3.6",
54
- "@mariozechner/clipboard-win32-x64-msvc": "0.3.6"
45
+ "@mariozechner/clipboard-darwin-arm64": "0.3.9",
46
+ "@mariozechner/clipboard-darwin-universal": "0.3.9",
47
+ "@mariozechner/clipboard-darwin-x64": "0.3.9",
48
+ "@mariozechner/clipboard-linux-arm64-gnu": "0.3.9",
49
+ "@mariozechner/clipboard-linux-arm64-musl": "0.3.9",
50
+ "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.9",
51
+ "@mariozechner/clipboard-linux-x64-gnu": "0.3.9",
52
+ "@mariozechner/clipboard-linux-x64-musl": "0.3.9",
53
+ "@mariozechner/clipboard-win32-arm64-msvc": "0.3.9",
54
+ "@mariozechner/clipboard-win32-x64-msvc": "0.3.9"
55
55
  }
56
56
  }
@@ -9,10 +9,9 @@ use clipboard_rs::{
9
9
  };
10
10
  use napi::{
11
11
  bindgen_prelude::*,
12
- threadsafe_function::{ErrorStrategy, ThreadsafeFunction, ThreadsafeFunctionCallMode},
13
- JsFunction,
12
+ threadsafe_function::{ThreadsafeFunction, ThreadsafeFunctionCallMode},
14
13
  };
15
- use std::{thread, time::Duration};
14
+ use std::{sync::Arc, thread, time::Duration};
16
15
 
17
16
  #[macro_use]
18
17
  extern crate napi_derive;
@@ -162,13 +161,9 @@ pub fn watch() {
162
161
  }
163
162
 
164
163
  #[napi]
165
- pub fn call_threadsafe_function(callback: JsFunction) -> Result<()> {
166
- let tsfn: ThreadsafeFunction<u32, ErrorStrategy::CalleeHandled> = callback
167
- .create_threadsafe_function(0, |ctx| {
168
- ctx.env.create_uint32(ctx.value + 1).map(|v| vec![v])
169
- })?;
164
+ pub fn call_threadsafe_function(callback: Arc<ThreadsafeFunction<u32, ()>>) -> Result<()> {
170
165
  for n in 0..10 {
171
- let tsfn = tsfn.clone();
166
+ let tsfn = Arc::clone(&callback);
172
167
  thread::spawn(move || {
173
168
  tsfn.call(Ok(n), ThreadsafeFunctionCallMode::Blocking);
174
169
  });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mariozechner/clipboard-linux-x64-gnu",
3
- "version": "0.3.6",
3
+ "version": "0.3.9",
4
4
  "os": [
5
5
  "linux"
6
6
  ],
@@ -22,4 +22,4 @@
22
22
  "type": "git",
23
23
  "url": "https://github.com/badlogic/clipboard.git"
24
24
  }
25
- }
25
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@entelligentsia/forgecli",
3
- "version": "1.0.3",
3
+ "version": "1.0.10",
4
4
  "description": "Forge SDLC ported onto @earendil-works/pi-coding-agent \u2014 production launcher with three bin aliases (forge/forgecli/4ge). Bundles a curated fork of pi-coding-agent vendored under earendil-works names.",
5
5
  "license": "MIT",
6
6
  "author": "Entelligentsia",
@@ -49,7 +49,7 @@
49
49
  ]
50
50
  },
51
51
  "forge": {
52
- "bundledVersion": "0.51.1",
52
+ "bundledVersion": "1.0.10",
53
53
  "forgeRoot": "../forge/forge"
54
54
  },
55
55
  "scripts": {
@@ -75,10 +75,10 @@
75
75
  "js-yaml"
76
76
  ],
77
77
  "dependencies": {
78
- "@earendil-works/pi-agent-core": "file:./vendor-pi/earendil-works-pi-agent-core-0.75.5.tgz",
79
- "@earendil-works/pi-ai": "file:./vendor-pi/earendil-works-pi-ai-0.75.5.tgz",
80
- "@earendil-works/pi-coding-agent": "file:./vendor-pi/earendil-works-pi-coding-agent-0.75.5-forge.1.tgz",
81
- "@earendil-works/pi-tui": "file:./vendor-pi/earendil-works-pi-tui-0.75.5.tgz",
78
+ "@earendil-works/pi-agent-core": "file:./vendor-pi/earendil-works-pi-agent-core-0.78.0.tgz",
79
+ "@earendil-works/pi-ai": "file:./vendor-pi/earendil-works-pi-ai-0.78.0.tgz",
80
+ "@earendil-works/pi-coding-agent": "file:./vendor-pi/earendil-works-pi-coding-agent-0.78.0-forge.1.tgz",
81
+ "@earendil-works/pi-tui": "file:./vendor-pi/earendil-works-pi-tui-0.78.0.tgz",
82
82
  "ajv": "^8.20.0",
83
83
  "js-yaml": "^4.1.0",
84
84
  "@entelligentsia/forge-compress": "file:../forge-compress",
@@ -86,7 +86,7 @@
86
86
  "typebox": "^1.1.24"
87
87
  },
88
88
  "peerDependencies": {
89
- "@earendil-works/pi-coding-agent": "0.75.5-forge.1"
89
+ "@earendil-works/pi-coding-agent": "0.78.0"
90
90
  },
91
91
  "devDependencies": {
92
92
  "@biomejs/biome": "^2.3.5",
@@ -1,6 +0,0 @@
1
- ---
2
- name: quiz-agent
3
- description: Renamed in v1.0 — use /{{PREFIX}}:check-agent
4
- ---
5
-
6
- × /{{PREFIX}}:quiz-agent was renamed to /{{PREFIX}}:check-agent in v1.0.
@@ -1,6 +0,0 @@
1
- ---
2
- name: retrospective
3
- description: Renamed in v1.0 — use /{{PREFIX}}:retro
4
- ---
5
-
6
- × /{{PREFIX}}:retrospective was renamed to /{{PREFIX}}:retro in v1.0.
@@ -1,6 +0,0 @@
1
- ---
2
- name: sprint-intake
3
- description: Renamed in v1.0 — use /{{PREFIX}}:new-sprint
4
- ---
5
-
6
- × /{{PREFIX}}:sprint-intake was renamed to /{{PREFIX}}:new-sprint in v1.0.
@@ -1,6 +0,0 @@
1
- ---
2
- name: sprint-plan
3
- description: Renamed in v1.0 — use /{{PREFIX}}:plan-sprint
4
- ---
5
-
6
- × /{{PREFIX}}:sprint-plan was renamed to /{{PREFIX}}:plan-sprint in v1.0.
@@ -1,10 +0,0 @@
1
- ---
2
- name: calibrate
3
- description: REMOVED in v1.0 — use /forge:health --fix instead
4
- ---
5
-
6
- # /forge:calibrate — Removed
7
-
8
- × `/forge:calibrate` was removed in v1.0. KB drift detection and repair is now handled by `/forge:health --fix` (implemented in T04).
9
-
10
- Run `/forge:health` to check overall knowledge base status.
@@ -1,119 +0,0 @@
1
- ---
2
- name: materialize
3
- description: Use when you've run /forge:init --fast and want to fill in missing scaffolding — either for a specific workflow's closure or as a full warm-up. Fills missing or stubbed artifacts; does not change config mode. Unlike /forge:regenerate (which rebuilds regardless), materialize only fills what is missing or stubbed, leaving pristine user-modified files untouched.
4
- ---
5
-
6
- # /forge:materialize
7
-
8
- Fills missing or stubbed Forge scaffolding without overwriting pristine files.
9
- This is the on-demand complement to `/forge:init --fast`.
10
-
11
- `materialize` is **mode-neutral** — it never writes `.forge/config.json`
12
- `mode`. Promotion from fast → full is a separate explicit decision owned
13
- by `/forge:config mode full`. After a `materialize --all`, it is normal
14
- for `mode` to remain `fast` even though every artifact is now present.
15
-
16
- ## Locate the Forge plugin
17
-
18
- ```
19
- FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
20
- ```
21
-
22
- Read `.forge/config.json`. If it does not exist, stop and tell the user to run
23
- `/forge:init` first.
24
-
25
- ## Arguments
26
-
27
- $ARGUMENTS
28
-
29
- Parse the argument:
30
-
31
- ```
32
- /forge:materialize # full warm-up — all stubs + missing
33
- /forge:materialize --all # same as no args
34
- /forge:materialize workflows plan_task # just this workflow's closure
35
- /forge:materialize workflows:plan_task # colon form
36
- ```
37
-
38
- ---
39
-
40
- ## Full warm-up (`/forge:materialize` or `--all`)
41
-
42
- Open with the forge badge + status line:
43
-
44
- ```sh
45
- node "$FORGE_ROOT/tools/banners.cjs" --badge forge
46
- ```
47
-
48
- Emit: `〇 forge:materialize — full warm-up…`
49
-
50
- Then announce the fast-mode capability state — silent on full installs:
51
-
52
- ```sh
53
- node "$FORGE_ROOT/tools/ensure-ready.cjs" --announce --all
54
- ```
55
-
56
- `banners.cjs` strips ANSI in `NO_COLOR` / non-tty / `--plain` contexts.
57
-
58
- Follow `$FORGE_ROOT/init/generation/lazy-materialize.md` for each stub or missing
59
- workflow in `.forge/workflows/`. Work from a single collected list:
60
-
61
- 1. Read `$FORGE_ROOT/schemas/structure-manifest.json` for the full workflow list.
62
- 2. For each workflow id in `namespaces.workflows.files`:
63
- - Check if `.forge/workflows/{id}.md` is a stub (starts with `<!-- FORGE FAST-MODE STUB`)
64
- or is missing.
65
- - Collect all stubs/missing into one list.
66
- 3. Compute the union closure across all stubs/missing workflows.
67
- 4. Fan-out materialisation following the lazy-materialize rulebook steps 5–10
68
- for the union closure (one pass, not per-workflow).
69
- 5. Rebuild the persona pack so `meta-orchestrate` and `meta-fix-bug` use
70
- a fresh reference index (consumed when `FORGE_PROMPT_MODE=reference`):
71
- ```sh
72
- node "$FORGE_ROOT/tools/build-persona-pack.cjs" \
73
- --out .forge/cache/persona-pack.json
74
- ```
75
- On exit 1, surface the stderr message (it includes the offending file
76
- path) and continue — the pack is refreshable later via `/forge:regenerate`.
77
- 6. Rebuild the architecture context pack:
78
- ```sh
79
- ENGINEERING=$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)
80
- node "$FORGE_ROOT/tools/build-context-pack.cjs" \
81
- --arch-dir "$ENGINEERING/architecture" \
82
- --out-md .forge/cache/context-pack.md \
83
- --out-json .forge/cache/context-pack.json
84
- ```
85
- On exit 1 (architecture directory not yet present), emit a warning and
86
- continue — the pack can be built later via `/forge:regenerate`.
87
- 7. Emit: `〇 forge:materialize complete — gaps filled (mode unchanged)`
88
- 8. If `.forge/config.json` `mode` is still `"fast"`, append the promotion hint:
89
- ```
90
- 〇 To declare the project fully generated: /forge:config mode full
91
- ```
92
-
93
- ---
94
-
95
- ## Single-workflow (`/forge:materialize workflows <id>`)
96
-
97
- Open with the forge badge + status line:
98
-
99
- ```sh
100
- node "$FORGE_ROOT/tools/banners.cjs" --badge forge
101
- ```
102
-
103
- Emit: `〇 forge:materialize — materialising closure for {id}…`
104
-
105
- Follow `$FORGE_ROOT/init/generation/lazy-materialize.md` with `workflow_id={id}`.
106
- Pass the full argument (caller intent) so the rulebook can re-read and execute
107
- the real workflow after materialisation.
108
-
109
- Do NOT flip config mode for any materialize invocation. Mode is owned by
110
- `/forge:config`.
111
-
112
- ---
113
-
114
- ## On error
115
-
116
- If any generation step fails unexpectedly:
117
-
118
- > "This looks like a Forge bug. Would you like to file a report? Run
119
- > `/forge:report-bug` — I'll pre-fill the report from this conversation."
@@ -1,12 +0,0 @@
1
- ---
2
- name: migrate
3
- description: REMOVED in v1.0 — use /forge:init --migrate instead
4
- ---
5
-
6
- # /forge:migrate — Removed
7
-
8
- × `/forge:migrate` was removed in v1.0. Store migration is now a flag on `/forge:init`:
9
-
10
- - `/forge:init --migrate` — interviews you to map existing store values to Forge format (equivalent to the old `forge:migrate`)
11
- - `/forge:init --migrate --structural` — runs structural migration for pre-v0.40 stores
12
- - `/forge:init --migrate --dry-run` — preview changes without applying them
@@ -1,6 +0,0 @@
1
- ---
2
- name: quiz-agent
3
- description: Renamed in v1.0 — use /forge:check-agent
4
- ---
5
-
6
- × /forge:quiz-agent was renamed to /forge:check-agent in v1.0.
@@ -1,6 +0,0 @@
1
- ---
2
- name: regenerate
3
- description: Renamed in v1.0 — use /forge:rebuild
4
- ---
5
-
6
- × /forge:regenerate was renamed to /forge:rebuild in v1.0.
@@ -1,6 +0,0 @@
1
- ---
2
- name: store-query
3
- description: Renamed in v1.0 — use /forge:search
4
- ---
5
-
6
- × /forge:store-query was renamed to /forge:search in v1.0.
@@ -1,6 +0,0 @@
1
- ---
2
- name: store-repair
3
- description: Renamed in v1.0 — use /forge:repair
4
- ---
5
-
6
- × /forge:store-repair was renamed to /forge:repair in v1.0.
@@ -1,10 +0,0 @@
1
- ---
2
- name: update-tools
3
- description: REMOVED in v1.0 — use /forge:update instead
4
- ---
5
-
6
- # /forge:update-tools — Removed
7
-
8
- × `/forge:update-tools` was removed in v1.0. Schema refresh now happens automatically as part of `/forge:update`.
9
-
10
- Run `/forge:update` to refresh schemas along with other project artifacts.
@@ -1,28 +0,0 @@
1
- # Meta-Template: Sprint Retrospective
2
-
3
- ## Purpose
4
-
5
- Defines the structure of the sprint retrospective document — metrics,
6
- learnings, and improvements.
7
-
8
- ## Sections
9
-
10
- ### Required
11
- - **Sprint Summary** — tasks completed, failed, carried over
12
- - **Metrics** — plan iterations, code review iterations, time per task
13
- - **What Went Well** — patterns that worked
14
- - **What to Improve** — friction points, recurring issues
15
- - **Knowledge Base Updates** — what was confirmed, added, or removed
16
- - **Stack Checklist Changes** — items added or pruned
17
-
18
- ### Optional
19
- - **Workflow Improvements** — proposed edits to workflow files
20
- - **Bug Pattern Analysis** — recurring root cause categories
21
- - **Merge Conflicts** — if parallel mode, what conflicted and why
22
- - **Recommendations for Next Sprint** — scope, focus, mode
23
-
24
- ## Generation Instructions
25
- - Reference the project's sprint artifact paths for data gathering
26
- - Reference the project's domain docs and stack checklist
27
- - Include the project's workflow file paths for proposed edits
28
- - Reference the project's specific tech debt areas
@@ -1,70 +0,0 @@
1
- # Sprint Plan — Architect Persona Prompt
2
-
3
- You are acting as the **Forge Architect** (🗻).
4
-
5
- Your role: decompose a sprint's requirements into a concrete, dependency-ordered task list. You are a senior technical architect who thinks carefully about sequencing, blast radius, and iron laws before writing a single line of output.
6
-
7
- ---
8
-
9
- ## Your Task
10
-
11
- Read the sprint requirements provided and produce a **JSON array** of task objects. Each task covers one coherent, implementable unit of work. Tasks must be small enough to be planned and implemented in a single sprint sub-task cycle.
12
-
13
- ---
14
-
15
- ## Output Format
16
-
17
- Emit **only** a JSON array — no preamble, no markdown fences, no commentary outside the JSON. The schema:
18
-
19
- ```json
20
- [
21
- {
22
- "taskId": "SPRINT_ID-T01",
23
- "title": "Short imperative title (≤80 chars)",
24
- "estimate": "S",
25
- "dependencies": [],
26
- "pipeline": "plan,implement,review,validate,approve,commit",
27
- "acceptanceCriteria": [
28
- "Specific, verifiable criterion 1",
29
- "Specific, verifiable criterion 2"
30
- ]
31
- }
32
- ]
33
- ```
34
-
35
- ### Field rules
36
-
37
- | Field | Type | Rule |
38
- |---|---|---|
39
- | `taskId` | string | `{SPRINT_ID}-T{NN}` — sequential integers starting at 01. Use the sprint ID from the requirements. |
40
- | `title` | string | Imperative phrase, ≤80 chars. No trailing punctuation. |
41
- | `estimate` | enum | One of: `S` (≤4h), `M` (≤1d), `L` (≤2d), `XL` (≤5d). |
42
- | `dependencies` | string[] | Task IDs of tasks this task depends on. Empty array if none. No circular deps. |
43
- | `pipeline` | string | Default: `"plan,implement,review,validate,approve,commit"`. Adjust only for trivial chores. |
44
- | `acceptanceCriteria` | string[] | 2–8 specific, verifiable criteria. Each criterion must be independently checkable. No vague phrases like "works correctly". |
45
-
46
- ### Dependency rules
47
-
48
- - Dependencies form a DAG (directed acyclic graph). Circular dependencies are invalid.
49
- - A release/packaging task always depends on all feature tasks.
50
- - Tasks that share no code boundary may be declared parallel (no mutual dep).
51
- - Order tasks so lower-numbered tasks are prerequisites for higher-numbered tasks where possible.
52
-
53
- ---
54
-
55
- ## Quality Checklist
56
-
57
- Before emitting output, verify:
58
-
59
- - [ ] Every `taskId` is unique and follows the `{SPRINT_ID}-T{NN}` pattern
60
- - [ ] No circular dependencies
61
- - [ ] Each task has at least 2 acceptance criteria
62
- - [ ] Estimates are realistic (L tasks should not attempt to cover more than 2 full days of work)
63
- - [ ] A release or packaging task (if applicable) is listed last and depends on all feature tasks
64
- - [ ] The JSON is valid — parseable without error
65
-
66
- ---
67
-
68
- ## Sprint Requirements
69
-
70
- {SPRINT_REQUIREMENTS}
@@ -1,53 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "title": "TaskList",
4
- "description": "JSON Schema for the LLM-generated task list produced by forge:sprint-plan.",
5
- "type": "array",
6
- "minItems": 1,
7
- "items": {
8
- "type": "object",
9
- "required": ["taskId", "title", "estimate", "dependencies", "pipeline", "acceptanceCriteria"],
10
- "additionalProperties": false,
11
- "properties": {
12
- "taskId": {
13
- "type": "string",
14
- "pattern": "^[A-Z][A-Z0-9_-]+-T[0-9]+$",
15
- "description": "Task identifier in the form {SPRINT_ID}-T{NN}, e.g. FORGE-S20-T01"
16
- },
17
- "title": {
18
- "type": "string",
19
- "minLength": 1,
20
- "maxLength": 80,
21
- "description": "Short imperative title for the task"
22
- },
23
- "estimate": {
24
- "type": "string",
25
- "enum": ["S", "M", "L", "XL"],
26
- "description": "Size estimate: S (≤4h), M (≤1d), L (≤2d), XL (≤5d)"
27
- },
28
- "dependencies": {
29
- "type": "array",
30
- "items": {
31
- "type": "string",
32
- "pattern": "^[A-Z][A-Z0-9_-]+-T[0-9]+$"
33
- },
34
- "description": "Task IDs this task depends on. Empty array if no dependencies."
35
- },
36
- "pipeline": {
37
- "type": "string",
38
- "minLength": 1,
39
- "description": "Comma-separated pipeline phase list, e.g. plan,implement,review,validate,approve,commit"
40
- },
41
- "acceptanceCriteria": {
42
- "type": "array",
43
- "minItems": 2,
44
- "maxItems": 12,
45
- "items": {
46
- "type": "string",
47
- "minLength": 10
48
- },
49
- "description": "Specific, verifiable acceptance criteria (2–12 items)"
50
- }
51
- }
52
- }
53
- }
@@ -1,4 +0,0 @@
1
- export { NodeExecutionEnv } from "./env/nodejs.js";
2
- export type { ExecutionEnv, ExecutionEnvExecOptions, FileErrorCode, FileInfo, FileKind } from "./types.js";
3
- export { FileError } from "./types.js";
4
- //# sourceMappingURL=execution-env.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execution-env.d.ts","sourceRoot":"","sources":["../../src/harness/execution-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,uBAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC","sourcesContent":["export { NodeExecutionEnv } from \"./env/nodejs.js\";\nexport type { ExecutionEnv, ExecutionEnvExecOptions, FileErrorCode, FileInfo, FileKind } from \"./types.js\";\nexport { FileError } from \"./types.js\";\n"]}
@@ -1,3 +0,0 @@
1
- export { NodeExecutionEnv } from "./env/nodejs.js";
2
- export { FileError } from "./types.js";
3
- //# sourceMappingURL=execution-env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execution-env.js","sourceRoot":"","sources":["../../src/harness/execution-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC","sourcesContent":["export { NodeExecutionEnv } from \"./env/nodejs.js\";\nexport type { ExecutionEnv, ExecutionEnvExecOptions, FileErrorCode, FileInfo, FileKind } from \"./types.js\";\nexport { FileError } from \"./types.js\";\n"]}
@@ -1,20 +0,0 @@
1
- import type { JsonlSessionCreateOptions, JsonlSessionListOptions, JsonlSessionMetadata, JsonlSessionRepoApi, Session } from "../../types.js";
2
- export declare class JsonlSessionRepo implements JsonlSessionRepoApi {
3
- private sessionsRoot;
4
- constructor(options: {
5
- sessionsRoot: string;
6
- });
7
- private getSessionDir;
8
- private createSessionFilePath;
9
- create(options: JsonlSessionCreateOptions): Promise<Session<JsonlSessionMetadata>>;
10
- open(metadata: JsonlSessionMetadata): Promise<Session<JsonlSessionMetadata>>;
11
- list(options?: JsonlSessionListOptions): Promise<JsonlSessionMetadata[]>;
12
- delete(metadata: JsonlSessionMetadata): Promise<void>;
13
- fork(sourceMetadata: JsonlSessionMetadata, options: JsonlSessionCreateOptions & {
14
- entryId?: string;
15
- position?: "before" | "at";
16
- id?: string;
17
- }): Promise<Session<JsonlSessionMetadata>>;
18
- private listSessionDirs;
19
- }
20
- //# sourceMappingURL=jsonl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../../../src/harness/session/repo/jsonl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,EACP,MAAM,gBAAgB,CAAC;AAiBxB,qBAAa,gBAAiB,YAAW,mBAAmB;IAC3D,OAAO,CAAC,YAAY,CAAS;IAE7B,YAAY,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,EAE5C;IAED,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,qBAAqB;IAIvB,MAAM,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAWvF;IAEK,IAAI,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAMjF;IAEK,IAAI,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAgBjF;IAEK,MAAM,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;IAEK,IAAI,CACT,cAAc,EAAE,oBAAoB,EACpC,OAAO,EAAE,yBAAyB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAChG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAcxC;YAEa,eAAe;CAK7B","sourcesContent":["import { constants } from \"node:fs\";\nimport { access, mkdir, readdir, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport type {\n\tJsonlSessionCreateOptions,\n\tJsonlSessionListOptions,\n\tJsonlSessionMetadata,\n\tJsonlSessionRepoApi,\n\tSession,\n} from \"../../types.js\";\nimport { JsonlSessionStorage, loadJsonlSessionMetadata } from \"../storage/jsonl.js\";\nimport { createSessionId, createTimestamp, getEntriesToFork, toSession } from \"./shared.js\";\n\nasync function exists(path: string): Promise<boolean> {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction encodeCwd(cwd: string): string {\n\treturn `--${cwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n}\n\nexport class JsonlSessionRepo implements JsonlSessionRepoApi {\n\tprivate sessionsRoot: string;\n\n\tconstructor(options: { sessionsRoot: string }) {\n\t\tthis.sessionsRoot = resolve(options.sessionsRoot);\n\t}\n\n\tprivate getSessionDir(cwd: string): string {\n\t\treturn join(this.sessionsRoot, encodeCwd(cwd));\n\t}\n\n\tprivate createSessionFilePath(cwd: string, sessionId: string, timestamp: string): string {\n\t\treturn join(this.getSessionDir(cwd), `${timestamp.replace(/[:.]/g, \"-\")}_${sessionId}.jsonl`);\n\t}\n\n\tasync create(options: JsonlSessionCreateOptions): Promise<Session<JsonlSessionMetadata>> {\n\t\tawait mkdir(this.sessionsRoot, { recursive: true });\n\t\tconst id = options.id ?? createSessionId();\n\t\tconst createdAt = createTimestamp();\n\t\tconst filePath = this.createSessionFilePath(options.cwd, id, createdAt);\n\t\tconst storage = await JsonlSessionStorage.create(filePath, {\n\t\t\tcwd: options.cwd,\n\t\t\tsessionId: id,\n\t\t\tparentSessionPath: options.parentSessionPath,\n\t\t});\n\t\treturn toSession(storage);\n\t}\n\n\tasync open(metadata: JsonlSessionMetadata): Promise<Session<JsonlSessionMetadata>> {\n\t\tif (!(await exists(metadata.path))) {\n\t\t\tthrow new Error(`Session not found: ${metadata.path}`);\n\t\t}\n\t\tconst storage = await JsonlSessionStorage.open(metadata.path);\n\t\treturn toSession(storage);\n\t}\n\n\tasync list(options: JsonlSessionListOptions = {}): Promise<JsonlSessionMetadata[]> {\n\t\tconst dirs = options.cwd ? [this.getSessionDir(options.cwd)] : await this.listSessionDirs();\n\t\tconst sessions: JsonlSessionMetadata[] = [];\n\t\tfor (const dir of dirs) {\n\t\t\tif (!(await exists(dir))) continue;\n\t\t\tconst files = (await readdir(dir)).filter((file) => file.endsWith(\".jsonl\")).map((file) => join(dir, file));\n\t\t\tfor (const filePath of files) {\n\t\t\t\ttry {\n\t\t\t\t\tsessions.push(await loadJsonlSessionMetadata(filePath));\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore invalid session files when listing a directory.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsessions.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\t\treturn sessions;\n\t}\n\n\tasync delete(metadata: JsonlSessionMetadata): Promise<void> {\n\t\tawait rm(metadata.path, { force: true });\n\t}\n\n\tasync fork(\n\t\tsourceMetadata: JsonlSessionMetadata,\n\t\toptions: JsonlSessionCreateOptions & { entryId?: string; position?: \"before\" | \"at\"; id?: string },\n\t): Promise<Session<JsonlSessionMetadata>> {\n\t\tconst source = await this.open(sourceMetadata);\n\t\tconst forkedEntries = await getEntriesToFork(source.getStorage(), options);\n\t\tconst id = options.id ?? createSessionId();\n\t\tconst createdAt = createTimestamp();\n\t\tconst storage = await JsonlSessionStorage.create(this.createSessionFilePath(options.cwd, id, createdAt), {\n\t\t\tcwd: options.cwd,\n\t\t\tsessionId: id,\n\t\t\tparentSessionPath: options.parentSessionPath ?? sourceMetadata.path,\n\t\t});\n\t\tfor (const entry of forkedEntries) {\n\t\t\tawait storage.appendEntry(entry);\n\t\t}\n\t\treturn toSession(storage);\n\t}\n\n\tprivate async listSessionDirs(): Promise<string[]> {\n\t\tif (!(await exists(this.sessionsRoot))) return [];\n\t\tconst entries = await readdir(this.sessionsRoot, { withFileTypes: true });\n\t\treturn entries.filter((entry) => entry.isDirectory()).map((entry) => join(this.sessionsRoot, entry.name));\n\t}\n}\n"]}