sofia-cli 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/.github/agents/copilot-instructions.md +39 -0
  2. package/.github/agents/speckit.analyze.agent.md +184 -0
  3. package/.github/agents/speckit.checklist.agent.md +294 -0
  4. package/.github/agents/speckit.clarify.agent.md +181 -0
  5. package/.github/agents/speckit.constitution.agent.md +84 -0
  6. package/.github/agents/speckit.implement.agent.md +135 -0
  7. package/.github/agents/speckit.plan.agent.md +90 -0
  8. package/.github/agents/speckit.specify.agent.md +258 -0
  9. package/.github/agents/speckit.tasks.agent.md +137 -0
  10. package/.github/agents/speckit.taskstoissues.agent.md +30 -0
  11. package/.github/copilot-instructions.md +257 -0
  12. package/.github/prompts/speckit.analyze.prompt.md +3 -0
  13. package/.github/prompts/speckit.checklist.prompt.md +3 -0
  14. package/.github/prompts/speckit.clarify.prompt.md +3 -0
  15. package/.github/prompts/speckit.constitution.prompt.md +3 -0
  16. package/.github/prompts/speckit.implement.prompt.md +3 -0
  17. package/.github/prompts/speckit.plan.prompt.md +3 -0
  18. package/.github/prompts/speckit.specify.prompt.md +3 -0
  19. package/.github/prompts/speckit.tasks.prompt.md +3 -0
  20. package/.github/prompts/speckit.taskstoissues.prompt.md +3 -0
  21. package/.github/workflows/ci.yml +38 -0
  22. package/.prettierrc +6 -0
  23. package/.specify/memory/constitution.md +181 -0
  24. package/.specify/scripts/bash/check-prerequisites.sh +166 -0
  25. package/.specify/scripts/bash/common.sh +156 -0
  26. package/.specify/scripts/bash/create-new-feature.sh +297 -0
  27. package/.specify/scripts/bash/setup-plan.sh +61 -0
  28. package/.specify/scripts/bash/update-agent-context.sh +810 -0
  29. package/.specify/templates/agent-file-template.md +28 -0
  30. package/.specify/templates/checklist-template.md +40 -0
  31. package/.specify/templates/constitution-template.md +50 -0
  32. package/.specify/templates/plan-template.md +113 -0
  33. package/.specify/templates/spec-template.md +115 -0
  34. package/.specify/templates/tasks-template.md +251 -0
  35. package/.vscode/mcp.json +42 -0
  36. package/.vscode/settings.json +19 -0
  37. package/CODE_OF_CONDUCT.md +128 -0
  38. package/LICENSE +21 -0
  39. package/README.md +213 -0
  40. package/dist/src/cli/developCommand.js +240 -0
  41. package/dist/src/cli/directCommands.js +143 -0
  42. package/dist/src/cli/envLoader.js +16 -0
  43. package/dist/src/cli/exportCommand.js +53 -0
  44. package/dist/src/cli/index.js +203 -0
  45. package/dist/src/cli/ioContext.js +109 -0
  46. package/dist/src/cli/preflight.js +57 -0
  47. package/dist/src/cli/statusCommand.js +110 -0
  48. package/dist/src/cli/workshopCommand.js +400 -0
  49. package/dist/src/develop/checkpointState.js +86 -0
  50. package/dist/src/develop/codeGenerator.js +319 -0
  51. package/dist/src/develop/dynamicScaffolder.js +226 -0
  52. package/dist/src/develop/githubMcpAdapter.js +122 -0
  53. package/dist/src/develop/index.js +15 -0
  54. package/dist/src/develop/mcpContextEnricher.js +195 -0
  55. package/dist/src/develop/pocScaffolder.js +542 -0
  56. package/dist/src/develop/ralphLoop.js +659 -0
  57. package/dist/src/develop/templateRegistry.js +364 -0
  58. package/dist/src/develop/testRunner.js +202 -0
  59. package/dist/src/logging/logger.js +58 -0
  60. package/dist/src/loop/conversationLoop.js +227 -0
  61. package/dist/src/loop/phaseSummarizer.js +87 -0
  62. package/dist/src/mcp/mcpManager.js +267 -0
  63. package/dist/src/mcp/mcpTransport.js +391 -0
  64. package/dist/src/mcp/retryPolicy.js +47 -0
  65. package/dist/src/mcp/webSearch.js +254 -0
  66. package/dist/src/phases/contextSummarizer.js +101 -0
  67. package/dist/src/phases/discoveryEnricher.js +156 -0
  68. package/dist/src/phases/phaseExtractors.js +222 -0
  69. package/dist/src/phases/phaseHandlers.js +328 -0
  70. package/dist/src/prompts/design.md +51 -0
  71. package/dist/src/prompts/develop-boundary.md +51 -0
  72. package/dist/src/prompts/develop.md +111 -0
  73. package/dist/src/prompts/discover.md +58 -0
  74. package/dist/src/prompts/ideate.md +56 -0
  75. package/dist/src/prompts/plan.md +51 -0
  76. package/dist/src/prompts/promptLoader.js +167 -0
  77. package/dist/src/prompts/promptLoader.ts +198 -0
  78. package/dist/src/prompts/select.md +47 -0
  79. package/dist/src/prompts/summarize/README.md +8 -0
  80. package/dist/src/prompts/summarize/design-summary.md +37 -0
  81. package/dist/src/prompts/summarize/develop-summary.md +25 -0
  82. package/dist/src/prompts/summarize/ideate-summary.md +27 -0
  83. package/dist/src/prompts/summarize/plan-summary.md +27 -0
  84. package/dist/src/prompts/summarize/select-summary.md +21 -0
  85. package/dist/src/prompts/system.md +28 -0
  86. package/dist/src/sessions/exportPaths.js +22 -0
  87. package/dist/src/sessions/exportWriter.js +406 -0
  88. package/dist/src/sessions/sessionManager.js +81 -0
  89. package/dist/src/sessions/sessionStore.js +65 -0
  90. package/dist/src/shared/activitySpinner.js +91 -0
  91. package/dist/src/shared/copilotClient.js +129 -0
  92. package/dist/src/shared/data/cards.json +1249 -0
  93. package/dist/src/shared/data/cardsLoader.js +51 -0
  94. package/dist/src/shared/errorClassifier.js +120 -0
  95. package/dist/src/shared/events.js +28 -0
  96. package/dist/src/shared/markdownRenderer.js +34 -0
  97. package/dist/src/shared/schemas/session.js +265 -0
  98. package/dist/src/shared/tableRenderer.js +20 -0
  99. package/dist/src/vendor/chalk.js +2 -0
  100. package/dist/src/vendor/cli-table3.js +3 -0
  101. package/dist/src/vendor/commander.js +2 -0
  102. package/dist/src/vendor/marked-terminal.js +3 -0
  103. package/dist/src/vendor/marked.js +2 -0
  104. package/dist/src/vendor/ora.js +2 -0
  105. package/dist/src/vendor/pino.js +2 -0
  106. package/dist/src/vendor/zod.js +2 -0
  107. package/dist/tests/e2e/developE2e.spec.js +126 -0
  108. package/dist/tests/e2e/developFailureE2e.spec.js +247 -0
  109. package/dist/tests/e2e/developPty.spec.js +75 -0
  110. package/dist/tests/e2e/discoveryWebSearchRelevance.spec.js +84 -0
  111. package/dist/tests/e2e/harness.spec.js +83 -0
  112. package/dist/tests/e2e/mcpLive.spec.js +120 -0
  113. package/dist/tests/e2e/newSession.e2e.spec.js +177 -0
  114. package/dist/tests/e2e/ralphLoopEnrichmentComparison.spec.js +62 -0
  115. package/dist/tests/e2e/workiqEnrichment.spec.js +56 -0
  116. package/dist/tests/e2e/zavaSimulation.spec.js +452 -0
  117. package/dist/tests/fixtures/test-fixture-project/src/add.js +3 -0
  118. package/dist/tests/fixtures/test-fixture-project/tests/failing.test.js +6 -0
  119. package/dist/tests/fixtures/test-fixture-project/tests/hanging.test.js +8 -0
  120. package/dist/tests/fixtures/test-fixture-project/tests/passing.test.js +10 -0
  121. package/dist/tests/fixtures/test-fixture-project/vitest.config.js +6 -0
  122. package/dist/tests/integration/autoStartConversation.spec.js +138 -0
  123. package/dist/tests/integration/defaultCommand.spec.js +147 -0
  124. package/dist/tests/integration/directCommandNonTty.spec.js +224 -0
  125. package/dist/tests/integration/directCommandTty.spec.js +151 -0
  126. package/dist/tests/integration/discoveryEnrichmentFlow.spec.js +175 -0
  127. package/dist/tests/integration/exportArtifacts.spec.js +202 -0
  128. package/dist/tests/integration/exportFallbackFlow.spec.js +99 -0
  129. package/dist/tests/integration/mcpDegradationFlow.spec.js +190 -0
  130. package/dist/tests/integration/mcpTransportFlow.spec.js +139 -0
  131. package/dist/tests/integration/newSessionFlow.spec.js +343 -0
  132. package/dist/tests/integration/pocGithubMcp.spec.js +186 -0
  133. package/dist/tests/integration/pocLocalFallback.spec.js +171 -0
  134. package/dist/tests/integration/pocScaffold.spec.js +163 -0
  135. package/dist/tests/integration/ralphLoopFlow.spec.js +359 -0
  136. package/dist/tests/integration/ralphLoopPartial.spec.js +368 -0
  137. package/dist/tests/integration/resumeAndBacktrack.spec.js +247 -0
  138. package/dist/tests/integration/spinnerLifecycle.spec.js +220 -0
  139. package/dist/tests/integration/summarizationFlow.spec.js +115 -0
  140. package/dist/tests/integration/testRunnerReal.spec.js +52 -0
  141. package/dist/tests/integration/webSearchAgent.spec.js +128 -0
  142. package/dist/tests/live/copilotSdkLive.spec.js +107 -0
  143. package/dist/tests/live/zavaFullWorkshop.spec.js +392 -0
  144. package/dist/tests/setup/loadEnv.js +3 -0
  145. package/dist/tests/unit/cli/developCommand.spec.js +567 -0
  146. package/dist/tests/unit/cli/directCommands.spec.js +279 -0
  147. package/dist/tests/unit/cli/envLoader.spec.js +58 -0
  148. package/dist/tests/unit/cli/ioContext.spec.js +119 -0
  149. package/dist/tests/unit/cli/preflight.spec.js +108 -0
  150. package/dist/tests/unit/cli/statusCommand.spec.js +111 -0
  151. package/dist/tests/unit/cli/workshopClientFallback.spec.js +80 -0
  152. package/dist/tests/unit/cli/workshopCommand.spec.js +329 -0
  153. package/dist/tests/unit/config/vitestEnvSetup.spec.js +13 -0
  154. package/dist/tests/unit/develop/checkpointState.spec.js +315 -0
  155. package/dist/tests/unit/develop/codeGenerator.spec.js +355 -0
  156. package/dist/tests/unit/develop/githubMcpAdapter.spec.js +231 -0
  157. package/dist/tests/unit/develop/mcpContextEnricher.spec.js +433 -0
  158. package/dist/tests/unit/develop/outputValidator.spec.js +119 -0
  159. package/dist/tests/unit/develop/pocScaffolder.spec.js +353 -0
  160. package/dist/tests/unit/develop/ralphLoop.spec.js +1248 -0
  161. package/dist/tests/unit/develop/templateRegistry.spec.js +85 -0
  162. package/dist/tests/unit/develop/testRunner.spec.js +249 -0
  163. package/dist/tests/unit/infraBicep.spec.js +92 -0
  164. package/dist/tests/unit/infraDeploy.spec.js +82 -0
  165. package/dist/tests/unit/infraTeardown.spec.js +63 -0
  166. package/dist/tests/unit/logging/logger.spec.js +43 -0
  167. package/dist/tests/unit/loop/conversationLoop.spec.js +592 -0
  168. package/dist/tests/unit/loop/phaseSummarizer.spec.js +141 -0
  169. package/dist/tests/unit/loop/streamingMarkdown.spec.js +147 -0
  170. package/dist/tests/unit/mcp/mcpManager.spec.js +279 -0
  171. package/dist/tests/unit/mcp/mcpTransport.spec.js +529 -0
  172. package/dist/tests/unit/mcp/retryPolicy.spec.js +218 -0
  173. package/dist/tests/unit/mcp/timeoutValidation.spec.js +46 -0
  174. package/dist/tests/unit/mcp/webSearch.spec.js +567 -0
  175. package/dist/tests/unit/phases/contextSummarizer.spec.js +140 -0
  176. package/dist/tests/unit/phases/discoveryEnricher.repeatCalls.spec.js +93 -0
  177. package/dist/tests/unit/phases/discoveryEnricher.spec.js +411 -0
  178. package/dist/tests/unit/phases/phaseExtractors.spec.js +352 -0
  179. package/dist/tests/unit/phases/phaseHandlers.spec.js +425 -0
  180. package/dist/tests/unit/prompts/promptLoader.spec.js +118 -0
  181. package/dist/tests/unit/schemas/pocSchemas.spec.js +412 -0
  182. package/dist/tests/unit/schemas/session.spec.js +257 -0
  183. package/dist/tests/unit/sessions/exportPaths.spec.js +31 -0
  184. package/dist/tests/unit/sessions/exportWriter.spec.js +655 -0
  185. package/dist/tests/unit/sessions/sessionManager.spec.js +151 -0
  186. package/dist/tests/unit/sessions/sessionStore.spec.js +116 -0
  187. package/dist/tests/unit/shared/activitySpinner.spec.js +175 -0
  188. package/dist/tests/unit/shared/cardsLoader.spec.js +76 -0
  189. package/dist/tests/unit/shared/copilotClient.spec.js +155 -0
  190. package/dist/tests/unit/shared/errorClassifier.spec.js +131 -0
  191. package/dist/tests/unit/shared/events.spec.js +55 -0
  192. package/dist/tests/unit/shared/markdownRenderer.spec.js +35 -0
  193. package/dist/tests/unit/shared/markdownRendererChunks.spec.js +70 -0
  194. package/dist/tests/unit/shared/tableRenderer.spec.js +34 -0
  195. package/dist/vitest.config.js +14 -0
  196. package/dist/vitest.live.config.js +18 -0
  197. package/docs/README.md +35 -0
  198. package/docs/architecture.md +169 -0
  199. package/docs/cli-usage.md +207 -0
  200. package/docs/environment.md +66 -0
  201. package/docs/export-format.md +146 -0
  202. package/docs/session-model.md +113 -0
  203. package/eslint.config.js +35 -0
  204. package/infra/deploy.sh +193 -0
  205. package/infra/gather-env.sh +211 -0
  206. package/infra/main.bicep +90 -0
  207. package/infra/main.bicepparam +18 -0
  208. package/infra/resources.bicep +134 -0
  209. package/infra/teardown.sh +114 -0
  210. package/package.json +63 -0
  211. package/specs/001-cli-workshop-rebuild/checklists/requirements.md +35 -0
  212. package/specs/001-cli-workshop-rebuild/contracts/cli.md +59 -0
  213. package/specs/001-cli-workshop-rebuild/contracts/export-summary-json.md +23 -0
  214. package/specs/001-cli-workshop-rebuild/contracts/session-json.md +30 -0
  215. package/specs/001-cli-workshop-rebuild/data-model.md +210 -0
  216. package/specs/001-cli-workshop-rebuild/plan.md +361 -0
  217. package/specs/001-cli-workshop-rebuild/quickstart.md +83 -0
  218. package/specs/001-cli-workshop-rebuild/research.md +116 -0
  219. package/specs/001-cli-workshop-rebuild/spec.md +240 -0
  220. package/specs/001-cli-workshop-rebuild/tasks.md +476 -0
  221. package/specs/002-poc-generation/contracts/poc-output.md +172 -0
  222. package/specs/002-poc-generation/contracts/ralph-loop.md +113 -0
  223. package/specs/002-poc-generation/data-model.md +172 -0
  224. package/specs/002-poc-generation/plan.md +109 -0
  225. package/specs/002-poc-generation/quickstart.md +97 -0
  226. package/specs/002-poc-generation/research.md +786 -0
  227. package/specs/002-poc-generation/spec.md +81 -0
  228. package/specs/002-poc-generation/tasks-fix.md +198 -0
  229. package/specs/002-poc-generation/tasks.md +252 -0
  230. package/specs/003-mcp-transport-integration/checklists/requirements.md +37 -0
  231. package/specs/003-mcp-transport-integration/contracts/context-enricher.md +220 -0
  232. package/specs/003-mcp-transport-integration/contracts/discovery-enricher.md +267 -0
  233. package/specs/003-mcp-transport-integration/contracts/github-adapter.md +149 -0
  234. package/specs/003-mcp-transport-integration/contracts/mcp-transport.md +288 -0
  235. package/specs/003-mcp-transport-integration/data-model.md +326 -0
  236. package/specs/003-mcp-transport-integration/plan.md +114 -0
  237. package/specs/003-mcp-transport-integration/quickstart.md +311 -0
  238. package/specs/003-mcp-transport-integration/research.md +395 -0
  239. package/specs/003-mcp-transport-integration/spec.md +234 -0
  240. package/specs/003-mcp-transport-integration/tasks.md +324 -0
  241. package/specs/003-next-spec-gaps.md +150 -0
  242. package/specs/004-dev-resume-hardening/checklists/requirements.md +37 -0
  243. package/specs/004-dev-resume-hardening/contracts/cli.md +160 -0
  244. package/specs/004-dev-resume-hardening/data-model.md +321 -0
  245. package/specs/004-dev-resume-hardening/plan.md +107 -0
  246. package/specs/004-dev-resume-hardening/quickstart.md +115 -0
  247. package/specs/004-dev-resume-hardening/research.md +142 -0
  248. package/specs/004-dev-resume-hardening/spec.md +221 -0
  249. package/specs/004-dev-resume-hardening/tasks.md +333 -0
  250. package/specs/005-ai-search-deploy/checklists/requirements.md +39 -0
  251. package/specs/005-ai-search-deploy/contracts/web-search-tool.md +241 -0
  252. package/specs/005-ai-search-deploy/data-model.md +130 -0
  253. package/specs/005-ai-search-deploy/plan.md +93 -0
  254. package/specs/005-ai-search-deploy/quickstart.md +96 -0
  255. package/specs/005-ai-search-deploy/research.md +187 -0
  256. package/specs/005-ai-search-deploy/spec.md +143 -0
  257. package/specs/005-ai-search-deploy/tasks.md +284 -0
  258. package/specs/006-workshop-extraction-fixes/checklists/requirements.md +61 -0
  259. package/specs/006-workshop-extraction-fixes/contracts/summarization-and-export.md +131 -0
  260. package/specs/006-workshop-extraction-fixes/data-model.md +149 -0
  261. package/specs/006-workshop-extraction-fixes/plan.md +123 -0
  262. package/specs/006-workshop-extraction-fixes/quickstart.md +101 -0
  263. package/specs/006-workshop-extraction-fixes/research.md +143 -0
  264. package/specs/006-workshop-extraction-fixes/spec.md +210 -0
  265. package/specs/006-workshop-extraction-fixes/tasks.md +316 -0
  266. package/src/cli/developCommand.ts +308 -0
  267. package/src/cli/directCommands.ts +195 -0
  268. package/src/cli/envLoader.ts +17 -0
  269. package/src/cli/exportCommand.ts +65 -0
  270. package/src/cli/index.ts +249 -0
  271. package/src/cli/ioContext.ts +139 -0
  272. package/src/cli/preflight.ts +86 -0
  273. package/src/cli/statusCommand.ts +118 -0
  274. package/src/cli/workshopCommand.ts +496 -0
  275. package/src/develop/checkpointState.ts +121 -0
  276. package/src/develop/codeGenerator.ts +402 -0
  277. package/src/develop/dynamicScaffolder.ts +284 -0
  278. package/src/develop/githubMcpAdapter.ts +199 -0
  279. package/src/develop/index.ts +34 -0
  280. package/src/develop/mcpContextEnricher.ts +279 -0
  281. package/src/develop/pocScaffolder.ts +646 -0
  282. package/src/develop/ralphLoop.ts +1044 -0
  283. package/src/develop/templateRegistry.ts +427 -0
  284. package/src/develop/testRunner.ts +276 -0
  285. package/src/logging/logger.ts +73 -0
  286. package/src/loop/conversationLoop.ts +355 -0
  287. package/src/loop/phaseSummarizer.ts +114 -0
  288. package/src/mcp/mcpManager.ts +365 -0
  289. package/src/mcp/mcpTransport.ts +562 -0
  290. package/src/mcp/retryPolicy.ts +87 -0
  291. package/src/mcp/webSearch.ts +388 -0
  292. package/src/originalPrompts/design_thinking.md +178 -0
  293. package/src/originalPrompts/design_thinking_persona.md +76 -0
  294. package/src/originalPrompts/document_generator_example.md +77 -0
  295. package/src/originalPrompts/document_generator_persona.md +47 -0
  296. package/src/originalPrompts/facilitator_persona.md +125 -0
  297. package/src/originalPrompts/guardrails.md +47 -0
  298. package/src/phases/contextSummarizer.ts +154 -0
  299. package/src/phases/discoveryEnricher.ts +223 -0
  300. package/src/phases/phaseExtractors.ts +247 -0
  301. package/src/phases/phaseHandlers.ts +450 -0
  302. package/src/prompts/design.md +51 -0
  303. package/src/prompts/develop-boundary.md +51 -0
  304. package/src/prompts/develop.md +111 -0
  305. package/src/prompts/discover.md +58 -0
  306. package/src/prompts/ideate.md +56 -0
  307. package/src/prompts/plan.md +51 -0
  308. package/src/prompts/promptLoader.ts +198 -0
  309. package/src/prompts/select.md +47 -0
  310. package/src/prompts/summarize/README.md +8 -0
  311. package/src/prompts/summarize/design-summary.md +37 -0
  312. package/src/prompts/summarize/develop-summary.md +25 -0
  313. package/src/prompts/summarize/ideate-summary.md +27 -0
  314. package/src/prompts/summarize/plan-summary.md +27 -0
  315. package/src/prompts/summarize/select-summary.md +21 -0
  316. package/src/prompts/system.md +28 -0
  317. package/src/sessions/exportPaths.ts +28 -0
  318. package/src/sessions/exportWriter.ts +490 -0
  319. package/src/sessions/sessionManager.ts +119 -0
  320. package/src/sessions/sessionStore.ts +69 -0
  321. package/src/shared/activitySpinner.ts +108 -0
  322. package/src/shared/copilotClient.ts +291 -0
  323. package/src/shared/data/cards.json +1249 -0
  324. package/src/shared/data/cardsLoader.ts +70 -0
  325. package/src/shared/errorClassifier.ts +160 -0
  326. package/src/shared/events.ts +103 -0
  327. package/src/shared/markdownRenderer.ts +44 -0
  328. package/src/shared/schemas/session.ts +346 -0
  329. package/src/shared/tableRenderer.ts +28 -0
  330. package/src/types/marked-terminal.d.ts +5 -0
  331. package/src/vendor/chalk.ts +2 -0
  332. package/src/vendor/cli-table3.ts +3 -0
  333. package/src/vendor/commander.ts +2 -0
  334. package/src/vendor/marked-terminal.ts +3 -0
  335. package/src/vendor/marked.ts +2 -0
  336. package/src/vendor/ora.ts +2 -0
  337. package/src/vendor/pino.ts +3 -0
  338. package/src/vendor/zod.ts +3 -0
  339. package/tests/e2e/developE2e.spec.ts +152 -0
  340. package/tests/e2e/developFailureE2e.spec.ts +289 -0
  341. package/tests/e2e/developPty.spec.ts +86 -0
  342. package/tests/e2e/discoveryWebSearchRelevance.spec.ts +103 -0
  343. package/tests/e2e/harness.spec.ts +104 -0
  344. package/tests/e2e/mcpLive.spec.ts +149 -0
  345. package/tests/e2e/newSession.e2e.spec.ts +245 -0
  346. package/tests/e2e/ralphLoopEnrichmentComparison.spec.ts +70 -0
  347. package/tests/e2e/workiqEnrichment.spec.ts +72 -0
  348. package/tests/e2e/zava-assessment/agent-interaction-script.md +258 -0
  349. package/tests/e2e/zava-assessment/company-profile.md +98 -0
  350. package/tests/e2e/zava-assessment/expected-results-checklist.md +454 -0
  351. package/tests/e2e/zavaSimulation.spec.ts +511 -0
  352. package/tests/fixtures/completedSession.json +141 -0
  353. package/tests/fixtures/test-fixture-project/package-lock.json +1585 -0
  354. package/tests/fixtures/test-fixture-project/package.json +12 -0
  355. package/tests/fixtures/test-fixture-project/src/add.ts +3 -0
  356. package/tests/fixtures/test-fixture-project/tests/failing.test.ts +7 -0
  357. package/tests/fixtures/test-fixture-project/tests/hanging.test.ts +9 -0
  358. package/tests/fixtures/test-fixture-project/tests/passing.test.ts +13 -0
  359. package/tests/fixtures/test-fixture-project/vitest.config.ts +7 -0
  360. package/tests/integration/autoStartConversation.spec.ts +168 -0
  361. package/tests/integration/defaultCommand.spec.ts +179 -0
  362. package/tests/integration/directCommandNonTty.spec.ts +260 -0
  363. package/tests/integration/directCommandTty.spec.ts +185 -0
  364. package/tests/integration/discoveryEnrichmentFlow.spec.ts +209 -0
  365. package/tests/integration/exportArtifacts.spec.ts +232 -0
  366. package/tests/integration/exportFallbackFlow.spec.ts +115 -0
  367. package/tests/integration/mcpDegradationFlow.spec.ts +231 -0
  368. package/tests/integration/mcpTransportFlow.spec.ts +178 -0
  369. package/tests/integration/newSessionFlow.spec.ts +406 -0
  370. package/tests/integration/pocGithubMcp.spec.ts +224 -0
  371. package/tests/integration/pocLocalFallback.spec.ts +205 -0
  372. package/tests/integration/pocScaffold.spec.ts +220 -0
  373. package/tests/integration/ralphLoopFlow.spec.ts +430 -0
  374. package/tests/integration/ralphLoopPartial.spec.ts +416 -0
  375. package/tests/integration/resumeAndBacktrack.spec.ts +278 -0
  376. package/tests/integration/spinnerLifecycle.spec.ts +270 -0
  377. package/tests/integration/summarizationFlow.spec.ts +135 -0
  378. package/tests/integration/testRunnerReal.spec.ts +63 -0
  379. package/tests/integration/webSearchAgent.spec.ts +155 -0
  380. package/tests/live/copilotSdkLive.spec.ts +149 -0
  381. package/tests/live/zavaFullWorkshop.spec.ts +515 -0
  382. package/tests/setup/loadEnv.ts +5 -0
  383. package/tests/unit/cli/developCommand.spec.ts +679 -0
  384. package/tests/unit/cli/directCommands.spec.ts +325 -0
  385. package/tests/unit/cli/envLoader.spec.ts +73 -0
  386. package/tests/unit/cli/ioContext.spec.ts +148 -0
  387. package/tests/unit/cli/preflight.spec.ts +125 -0
  388. package/tests/unit/cli/statusCommand.spec.ts +134 -0
  389. package/tests/unit/cli/workshopClientFallback.spec.ts +100 -0
  390. package/tests/unit/cli/workshopCommand.spec.ts +378 -0
  391. package/tests/unit/config/vitestEnvSetup.spec.ts +24 -0
  392. package/tests/unit/develop/checkpointState.spec.ts +378 -0
  393. package/tests/unit/develop/codeGenerator.spec.ts +447 -0
  394. package/tests/unit/develop/githubMcpAdapter.spec.ts +283 -0
  395. package/tests/unit/develop/mcpContextEnricher.spec.ts +564 -0
  396. package/tests/unit/develop/outputValidator.spec.ts +134 -0
  397. package/tests/unit/develop/pocScaffolder.spec.ts +451 -0
  398. package/tests/unit/develop/ralphLoop.spec.ts +1439 -0
  399. package/tests/unit/develop/templateRegistry.spec.ts +106 -0
  400. package/tests/unit/develop/testRunner.spec.ts +294 -0
  401. package/tests/unit/infraBicep.spec.ts +116 -0
  402. package/tests/unit/infraDeploy.spec.ts +102 -0
  403. package/tests/unit/infraTeardown.spec.ts +77 -0
  404. package/tests/unit/logging/logger.spec.ts +50 -0
  405. package/tests/unit/loop/conversationLoop.spec.ts +719 -0
  406. package/tests/unit/loop/phaseSummarizer.spec.ts +169 -0
  407. package/tests/unit/loop/streamingMarkdown.spec.ts +180 -0
  408. package/tests/unit/mcp/mcpManager.spec.ts +336 -0
  409. package/tests/unit/mcp/mcpTransport.spec.ts +689 -0
  410. package/tests/unit/mcp/retryPolicy.spec.ts +278 -0
  411. package/tests/unit/mcp/timeoutValidation.spec.ts +55 -0
  412. package/tests/unit/mcp/webSearch.spec.ts +718 -0
  413. package/tests/unit/phases/contextSummarizer.spec.ts +158 -0
  414. package/tests/unit/phases/discoveryEnricher.repeatCalls.spec.ts +125 -0
  415. package/tests/unit/phases/discoveryEnricher.spec.ts +512 -0
  416. package/tests/unit/phases/phaseExtractors.spec.ts +406 -0
  417. package/tests/unit/phases/phaseHandlers.spec.ts +483 -0
  418. package/tests/unit/prompts/promptLoader.spec.ts +144 -0
  419. package/tests/unit/schemas/pocSchemas.spec.ts +457 -0
  420. package/tests/unit/schemas/session.spec.ts +328 -0
  421. package/tests/unit/sessions/exportPaths.spec.ts +38 -0
  422. package/tests/unit/sessions/exportWriter.spec.ts +737 -0
  423. package/tests/unit/sessions/sessionManager.spec.ts +174 -0
  424. package/tests/unit/sessions/sessionStore.spec.ts +136 -0
  425. package/tests/unit/shared/activitySpinner.spec.ts +211 -0
  426. package/tests/unit/shared/cardsLoader.spec.ts +89 -0
  427. package/tests/unit/shared/copilotClient.spec.ts +185 -0
  428. package/tests/unit/shared/errorClassifier.spec.ts +152 -0
  429. package/tests/unit/shared/events.spec.ts +71 -0
  430. package/tests/unit/shared/markdownRenderer.spec.ts +42 -0
  431. package/tests/unit/shared/markdownRendererChunks.spec.ts +83 -0
  432. package/tests/unit/shared/tableRenderer.spec.ts +38 -0
  433. package/tsconfig.json +20 -0
  434. package/vitest.config.ts +15 -0
  435. package/vitest.live.config.ts +19 -0
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env bash
2
+ # ──────────────────────────────────────────────────────────────────────────────
3
+ # teardown.sh — Remove Azure AI Foundry resources deployed by deploy.sh
4
+ #
5
+ # Deletes the specified resource group and all contained resources.
6
+ # Clean exit (0) when the resource group doesn't exist.
7
+ #
8
+ # Usage:
9
+ # ./infra/teardown.sh --resource-group <name> [--yes]
10
+ #
11
+ # Exit codes:
12
+ # 0 — Teardown succeeded or resource group doesn't exist
13
+ # 1 — Prerequisite check failed
14
+ # 2 — Deletion failed
15
+ # ──────────────────────────────────────────────────────────────────────────────
16
+ set -euo pipefail
17
+
18
+ # ── Defaults ──────────────────────────────────────────────────────────────────
19
+
20
+ RESOURCE_GROUP=""
21
+ AUTO_CONFIRM=false
22
+
23
+ # ── Parameter parsing ─────────────────────────────────────────────────────────
24
+
25
+ usage() {
26
+ cat <<EOF
27
+ Usage: $(basename "$0") [options]
28
+
29
+ Required:
30
+ -g, --resource-group <name> Resource group to delete
31
+
32
+ Optional:
33
+ --yes Skip confirmation prompt
34
+ -h, --help Show this help message
35
+ EOF
36
+ }
37
+
38
+ while [[ $# -gt 0 ]]; do
39
+ case "$1" in
40
+ -g|--resource-group)
41
+ RESOURCE_GROUP="$2"; shift 2 ;;
42
+ --yes)
43
+ AUTO_CONFIRM=true; shift ;;
44
+ -h|--help)
45
+ usage; exit 0 ;;
46
+ *)
47
+ echo "❌ Unknown option: $1" >&2
48
+ usage >&2
49
+ exit 1 ;;
50
+ esac
51
+ done
52
+
53
+ # ── Validate required parameters ─────────────────────────────────────────────
54
+
55
+ if [[ -z "$RESOURCE_GROUP" ]]; then
56
+ echo "❌ Missing required parameter: --resource-group (-g)" >&2
57
+ usage >&2
58
+ exit 1
59
+ fi
60
+
61
+ # ── Prerequisite checks ──────────────────────────────────────────────────────
62
+
63
+ echo "🔍 Checking prerequisites..."
64
+
65
+ if ! command -v az &>/dev/null; then
66
+ echo "❌ Azure CLI (az) is not installed." >&2
67
+ echo " Install: https://learn.microsoft.com/en-us/cli/azure/install-azure-cli" >&2
68
+ exit 1
69
+ fi
70
+
71
+ if ! az account show &>/dev/null; then
72
+ echo "❌ Not logged in to Azure. Run 'az login' first." >&2
73
+ exit 1
74
+ fi
75
+
76
+ echo "✅ Prerequisites passed"
77
+
78
+ # ── Check if resource group exists ────────────────────────────────────────────
79
+
80
+ echo ""
81
+ echo "🔍 Checking resource group: $RESOURCE_GROUP"
82
+
83
+ RG_EXISTS=$(az group exists --name "$RESOURCE_GROUP" 2>/dev/null || echo "false")
84
+
85
+ if [[ "$RG_EXISTS" != "true" ]]; then
86
+ echo "ℹ️ Resource group '$RESOURCE_GROUP' does not exist. Nothing to delete."
87
+ exit 0
88
+ fi
89
+
90
+ # ── Confirm deletion ─────────────────────────────────────────────────────────
91
+
92
+ if [[ "$AUTO_CONFIRM" != "true" ]]; then
93
+ echo ""
94
+ echo "⚠️ This will delete resource group '$RESOURCE_GROUP' and ALL its resources."
95
+ read -rp "Are you sure? (y/N): " confirm
96
+ if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
97
+ echo "Cancelled."
98
+ exit 0
99
+ fi
100
+ fi
101
+
102
+ # ── Delete resource group ────────────────────────────────────────────────────
103
+
104
+ echo ""
105
+ echo "🗑️ Deleting resource group: $RESOURCE_GROUP"
106
+
107
+ if ! az group delete --name "$RESOURCE_GROUP" --yes --no-wait; then
108
+ echo "" >&2
109
+ echo "❌ Failed to delete resource group '$RESOURCE_GROUP'." >&2
110
+ exit 2
111
+ fi
112
+
113
+ echo "✅ Resource group '$RESOURCE_GROUP' deletion initiated (non-blocking)."
114
+ echo " Resources will be fully removed within a few minutes."
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "sofia-cli",
3
+ "version": "0.1.1",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "dist/src/cli/index.js",
7
+ "bin": {
8
+ "sofia": "dist/src/cli/index.js"
9
+ },
10
+ "engines": {
11
+ "node": ">=20"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc -p tsconfig.json && npm run build:assets",
15
+ "build:assets": "cp -r src/prompts/ dist/src/ && cp src/shared/data/cards.json dist/src/shared/data/",
16
+ "dev": "tsx watch src/cli/index.ts",
17
+ "start": "tsx src/cli/index.ts",
18
+ "clean": "rimraf dist coverage .nyc_output",
19
+ "lint": "eslint src tests",
20
+ "typecheck": "tsc --noEmit",
21
+ "format": "prettier --check .",
22
+ "format:fix": "prettier --write .",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "test:unit": "vitest run tests/unit",
26
+ "test:integration": "vitest run tests/integration",
27
+ "test:e2e": "vitest run tests/e2e",
28
+ "test:live": "vitest run --config vitest.live.config.ts",
29
+ "sofiacli": "node --enable-source-maps dist/cli/index.js",
30
+ "sofia": "npm run sofiacli"
31
+ },
32
+ "dependencies": {
33
+ "@azure/ai-projects": "^2.0.0-beta.5",
34
+ "@azure/identity": "^4.13.0",
35
+ "@github/copilot-sdk": "^0.1.28",
36
+ "@inquirer/prompts": "^8.3.0",
37
+ "chalk": "^5.2.0",
38
+ "cli-table3": "^0.6.3",
39
+ "commander": "^11.1.0",
40
+ "dotenv": "^17.3.1",
41
+ "marked": "^11.0.0",
42
+ "marked-terminal": "^6.2.0",
43
+ "ora": "^7.0.1",
44
+ "pino": "^8.17.2",
45
+ "zod": "^4.3.6"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^20.11.30",
49
+ "@typescript-eslint/eslint-plugin": "^7.1.1",
50
+ "@typescript-eslint/parser": "^7.1.1",
51
+ "@vitest/coverage-v8": "^4.0.18",
52
+ "eslint": "^8.57.0",
53
+ "eslint-config-prettier": "^9.1.0",
54
+ "eslint-plugin-import": "^2.29.1",
55
+ "node-pty": "^1.0.0",
56
+ "prettier": "^3.2.4",
57
+ "rimraf": "^5.0.5",
58
+ "tsx": "^4.21.0",
59
+ "typescript": "^5.3.3",
60
+ "typescript-eslint": "^8.56.1",
61
+ "vitest": "^4.0.18"
62
+ }
63
+ }
@@ -0,0 +1,35 @@
1
+ # Specification Quality Checklist: sofIA Unified Build-From-Scratch CLI
2
+
3
+ **Purpose**: Validate specification completeness and quality before proceeding to planning
4
+ **Created**: 2026-02-26
5
+ **Feature**: [../spec.md](../spec.md)
6
+
7
+ ## Content Quality
8
+
9
+ - [x] No implementation details (languages, frameworks, APIs) — N/A: technology constraints (Copilot SDK, MCP, BXT) are non-negotiable project requirements, not implementation choices
10
+ - [x] Focused on user value and business needs
11
+ - [x] Written for non-technical stakeholders
12
+ - [x] All mandatory sections completed
13
+
14
+ ## Requirement Completeness
15
+
16
+ - [x] No [NEEDS CLARIFICATION] markers remain
17
+ - [x] Requirements are testable and unambiguous
18
+ - [x] Success criteria are measurable
19
+ - [x] Success criteria are technology-agnostic (no implementation details) — N/A: technology constraints are non-negotiable project requirements, not implementation choices
20
+ - [x] All acceptance scenarios are defined
21
+ - [x] Edge cases are identified
22
+ - [x] Scope is clearly bounded
23
+ - [x] Dependencies and assumptions identified
24
+
25
+ ## Feature Readiness
26
+
27
+ - [x] All functional requirements have clear acceptance criteria
28
+ - [x] User scenarios cover primary flows
29
+ - [x] Feature meets measurable outcomes defined in Success Criteria
30
+ - [x] No implementation details leak into specification — N/A: technology constraints are non-negotiable project requirements, not implementation choices
31
+
32
+ ## Notes
33
+
34
+ - This spec intentionally includes technology constraints (Copilot SDK, MCP integrations, BXT framework) because they are explicit non-negotiables for the sofIA rebuild.
35
+ - Clarifications captured in spec: repo-local persistence (`./.sofia/`), one JSON file per session, local scaffolding fallback for Develop when GitHub MCP is unavailable, default export to `./exports/<sessionId>/`, and persistence after every user turn.
@@ -0,0 +1,59 @@
1
+ # Contract: CLI Surface
2
+
3
+ This document defines the public CLI contract. Exact flags/subcommands may evolve, but breaking changes must be deliberate.
4
+
5
+ ## Binary
6
+
7
+ - Name: `sofia`
8
+
9
+ ## Global options
10
+
11
+ - `--help`
12
+ - `--version`
13
+ - `--session <id>`: target an existing session
14
+ - `--new-session`: create a new session
15
+ - `--non-interactive`: disallow prompts; fail with actionable error if input is missing
16
+ - `--json`: emit machine-readable JSON **only** on stdout (no spinners/telemetry)
17
+ - `--debug`: enable debug telemetry
18
+ - `--log-file <path>`: write structured logs to file
19
+
20
+ ## Commands
21
+
22
+ ### 1) `sofia workshop`
23
+
24
+ Starts or resumes the governed workshop flow.
25
+
26
+ - Interactive by default (TTY).
27
+ - In non-interactive mode, requires sufficient args or input file (defined in implementation).
28
+
29
+ Outputs:
30
+ - Human: streamed narrative + activity stream (stderr).
31
+ - JSON mode: JSON events only on stdout.
32
+
33
+ ### 2) `sofia status`
34
+
35
+ Displays session status and next expected action.
36
+
37
+ Outputs:
38
+ - Human: concise summary.
39
+ - JSON: `{ sessionId, phase, status, updatedAt, nextAction }`.
40
+
41
+ ### 3) `sofia export`
42
+
43
+ Exports artifacts for a session.
44
+
45
+ - Default output: `./exports/<sessionId>/`
46
+ - Output includes `summary.json` and phase markdown files.
47
+
48
+ ### 4) `sofia dev` (optional)
49
+
50
+ Developer utilities (may be hidden) for local PoC scaffolding and diagnostics.
51
+
52
+ ## Error contract
53
+
54
+ - Exit codes are stable and documented in implementation.
55
+ - In JSON mode, errors are emitted as JSON objects with:
56
+ - `error.code`
57
+ - `error.message`
58
+ - `error.details?`
59
+
@@ -0,0 +1,23 @@
1
+ # Contract: Export `summary.json`
2
+
3
+ **Path**: `./exports/<sessionId>/summary.json`
4
+
5
+ ## Format
6
+
7
+ - Encoding: UTF-8
8
+ - JSON object
9
+
10
+ ## Minimum fields
11
+
12
+ - `sessionId: string`
13
+ - `exportedAt: string` (ISO-8601)
14
+ - `phase: string`
15
+ - `status: string`
16
+ - `files: Array<{ path: string; type: string }>`
17
+ - `highlights?: string[]`
18
+
19
+ ## Notes
20
+
21
+ - `files[].path` is relative to the export directory.
22
+ - Do not include secrets.
23
+
@@ -0,0 +1,30 @@
1
+ # Contract: Session JSON
2
+
3
+ **Path**: `./.sofia/sessions/<sessionId>.json`
4
+
5
+ ## Format
6
+
7
+ - Encoding: UTF-8
8
+ - JSON object
9
+ - Overwrite the file after each user turn (atomic write in implementation)
10
+
11
+ ## Minimum required fields
12
+
13
+ - `sessionId: string`
14
+ - `schemaVersion: string`
15
+ - `createdAt: string` (ISO-8601)
16
+ - `updatedAt: string` (ISO-8601)
17
+ - `phase: string`
18
+ - `status: string`
19
+ - `artifacts.generatedFiles: array`
20
+
21
+ ## Compatibility
22
+
23
+ - `schemaVersion` supports forward migration.
24
+ - Unknown fields must be preserved when loading/saving.
25
+
26
+ ## Safety
27
+
28
+ - Must not persist secrets/tokens.
29
+ - Redact/omit any sensitive values from tool responses before writing.
30
+
@@ -0,0 +1,210 @@
1
+ # Data Model: sofIA CLI workshop rebuild
2
+
3
+ **Feature**: ./spec.md
4
+ **Research**: ./research.md
5
+ **Date**: 2026-02-26
6
+
7
+ This is a conceptual data model for persistence and exports. It is not an implementation.
8
+
9
+ ## Entities
10
+
11
+ ### 1) Session
12
+
13
+ **Storage**: `./.sofia/sessions/<sessionId>.json`
14
+
15
+ **Fields (minimum)**
16
+ - `sessionId: string`
17
+ - `createdAt: string` (ISO-8601)
18
+ - `updatedAt: string` (ISO-8601)
19
+ - `schemaVersion: string`
20
+ - `phase: Phase`
21
+ - `status: SessionStatus`
22
+ - `participants: Participant[]`
23
+ - `businessContext?: BusinessContext`
24
+ - `topic?: TopicSelection`
25
+ - `activities?: Activity[]`
26
+ - `workflow?: WorkflowMap`
27
+ - `cards?: CardSelection`
28
+ - `ideas?: IdeaCard[]`
29
+ - `evaluation?: IdeaEvaluation`
30
+ - `selection?: SelectedIdea`
31
+ - `plan?: ImplementationPlan`
32
+ - `poc?: PocDevelopmentState`
33
+ - `artifacts: ArtifactIndex`
34
+ - `errors?: ErrorRecord[]`
35
+
36
+ **Validation rules**
37
+ - `sessionId` is stable across the session.
38
+ - `updatedAt` is monotonically increasing.
39
+ - `phase` must follow state machine (see below).
40
+ - Every user turn persists the session to disk.
41
+
42
+ ### 2) Phase
43
+
44
+ `Phase` is an enum representing the governed progression:
45
+ - `Discover`
46
+ - `Ideate`
47
+ - `Design`
48
+ - `Select`
49
+ - `Plan`
50
+ - `Develop`
51
+ - `Complete`
52
+
53
+ **Rule**: Phase changes require an explicit “Proceed?” decision gate in UX.
54
+
55
+ ### 3) SessionStatus
56
+
57
+ - `Active`
58
+ - `Paused`
59
+ - `Completed`
60
+ - `Errored`
61
+
62
+ ### 4) Participant
63
+
64
+ - `id: string`
65
+ - `displayName: string`
66
+ - `role: "Facilitator" | "Attendee" | "Observer"`
67
+
68
+ ### 5) BusinessContext
69
+
70
+ - `businessDescription: string`
71
+ - `challenges: string[]`
72
+ - `constraints?: string[]`
73
+ - `successMetrics?: Metric[]`
74
+
75
+ ### 6) TopicSelection
76
+
77
+ - `topicArea: string`
78
+ - `scopeNotes?: string`
79
+
80
+ ### 7) WorkflowMap
81
+
82
+ - `activities: WorkflowStep[]`
83
+ - `edges: WorkflowEdge[]`
84
+
85
+ `WorkflowStep`
86
+ - `id: string`
87
+ - `name: string`
88
+ - `description?: string`
89
+ - `metrics?: Metric[]` (e.g., hours/week, NSAT)
90
+
91
+ `WorkflowEdge`
92
+ - `fromStepId: string`
93
+ - `toStepId: string`
94
+
95
+ ### 8) CardSelection
96
+
97
+ - `selectedCards: EnvisioningCard[]`
98
+ - `scores?: CardScore[]`
99
+
100
+ `EnvisioningCard`
101
+ - `id: string`
102
+ - `title: string`
103
+ - `category?: string`
104
+ - `notes?: string`
105
+
106
+ `CardScore`
107
+ - `cardId: string`
108
+ - `dimensions: Record<string, number>`
109
+
110
+ ### 9) IdeaCard
111
+
112
+ - `id: string`
113
+ - `title: string`
114
+ - `description: string`
115
+ - `workflowStepIds: string[]`
116
+ - `aspirationalScope?: string`
117
+ - `assumptions?: string[]`
118
+
119
+ ### 10) IdeaEvaluation
120
+
121
+ - `ideas: IdeaEvaluationItem[]`
122
+ - `method: "feasibility-value-matrix" | "custom"`
123
+
124
+ `IdeaEvaluationItem`
125
+ - `ideaId: string`
126
+ - `feasibility: number` (normalized 0..1 or 1..5; decide in implementation)
127
+ - `value: number`
128
+ - `risks?: string[]`
129
+ - `dataNeeded?: string[]`
130
+ - `humanValue?: string[]`
131
+ - `kpisInfluenced?: string[]`
132
+
133
+ ### 11) SelectedIdea
134
+
135
+ - `ideaId: string`
136
+ - `selectionRationale: string`
137
+ - `confirmedByUser: boolean`
138
+ - `confirmedAt?: string`
139
+
140
+ ### 12) ImplementationPlan
141
+
142
+ - `milestones: Milestone[]`
143
+ - `architectureNotes?: string`
144
+ - `dependencies?: string[]`
145
+
146
+ `Milestone`
147
+ - `id: string`
148
+ - `title: string`
149
+ - `items: string[]`
150
+
151
+ ### 13) PocDevelopmentState
152
+
153
+ - `repoPath?: string` (local path or external repo location, populated by Develop feature 002)
154
+ - `iterations: PocIteration[]` (high-level record of Develop iterations; detailed behavior defined in feature 002)
155
+ - `finalStatus?: "success" | "failed"`
156
+
157
+ `PocIteration`
158
+ - `iteration: number`
159
+ - `startedAt: string`
160
+ - `endedAt?: string`
161
+ - `changesSummary?: string`
162
+ - `testsRun?: string[]`
163
+
164
+ ### 14) Activity
165
+
166
+ This replaces “LLM thoughts” with a compliant activity/telemetry stream.
167
+
168
+ - `id: string`
169
+ - `timestamp: string`
170
+ - `kind: "phase" | "tool" | "io" | "warning" | "error" | "progress"`
171
+ - `message: string`
172
+ - `data?: Record<string, unknown>`
173
+
174
+ ### 15) ArtifactIndex
175
+
176
+ - `exportDir?: string` (e.g., `./exports/<sessionId>/`)
177
+ - `generatedFiles: GeneratedFile[]`
178
+
179
+ `GeneratedFile`
180
+ - `relativePath: string`
181
+ - `type: "markdown" | "json" | "text"`
182
+ - `createdAt: string`
183
+
184
+ ### 16) ErrorRecord
185
+
186
+ - `timestamp: string`
187
+ - `code: string`
188
+ - `message: string`
189
+ - `details?: Record<string, unknown>`
190
+
191
+ ## State machine
192
+
193
+ Valid transitions:
194
+ - `Discover → Ideate → Design → Select → Plan → Develop → Complete`
195
+
196
+ Failure transitions:
197
+ - Any phase may set `status=Errored` but **must** persist the session before exit.
198
+
199
+ Resume:
200
+ - `Paused → Active` without phase change.
201
+
202
+ ## Export model
203
+
204
+ **Export root**: `./exports/<sessionId>/`
205
+
206
+ Minimum contents:
207
+ - `summary.json` (export index + top-level summary)
208
+ - Phase markdown files (names finalized in implementation):
209
+ - `discover.md`, `ideate.md`, `design.md`, `select.md`, `plan.md`, `develop.md`
210
+