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,328 @@
1
+ import { buildSystemPrompt, getPhaseReferences } from '../prompts/promptLoader.js';
2
+ import { extractBusinessContext, extractWorkflow, extractIdeas, extractEvaluation, extractSelection, extractPlan, extractPocState, extractSessionName, } from './phaseExtractors.js';
3
+ import { DiscoveryEnricher } from './discoveryEnricher.js';
4
+ import { buildSummarizedContext, renderSummarizedContext } from './contextSummarizer.js';
5
+ // ── Initial message helper ──────────────────────────────────────────────────
6
+ const PHASE_INTROS = {
7
+ Discover: 'Introduce the Discover phase. Ask about the business, its challenges, and what area to focus on.',
8
+ Ideate: 'Introduce the Ideate phase. Review the business context and workflow, then brainstorm AI-powered ideas.',
9
+ Design: 'Introduce the Design phase. Review the generated ideas and help evaluate them using a feasibility-value matrix.',
10
+ Select: 'Introduce the Select phase. Present the top-ranked ideas and help the user choose the best one to implement.',
11
+ Plan: 'Introduce the Plan phase. Create an implementation plan with milestones for the selected idea.',
12
+ Develop: 'Introduce the Develop phase. Generate proof-of-concept code for the planned implementation.',
13
+ Complete: 'The workshop is complete. Summarize the results.',
14
+ };
15
+ const PHASE_RESUMES = {
16
+ Discover: 'We are resuming the Discover phase. Summarize what was discussed so far and ask the next question.',
17
+ Ideate: 'We are resuming the Ideate phase. Summarize the ideas generated so far and continue brainstorming.',
18
+ Design: 'We are resuming the Design phase. Summarize the evaluation progress and continue with the next step.',
19
+ Select: 'We are resuming the Select phase. Summarize the selection process so far and continue.',
20
+ Plan: 'We are resuming the Plan phase. Summarize the plan progress and continue with the next milestone.',
21
+ Develop: 'We are resuming the Develop phase. Summarize the PoC development progress and continue.',
22
+ Complete: 'The workshop is complete. Summarize the results.',
23
+ };
24
+ /**
25
+ * Generate the initial message for a phase based on session state.
26
+ * New sessions get an introduction; resumed sessions get a progress summary prompt.
27
+ */
28
+ function buildInitialMessage(phase, session) {
29
+ const phaseTurns = (session.turns ?? []).filter((t) => t.phase === phase);
30
+ if (phaseTurns.length > 0) {
31
+ return PHASE_RESUMES[phase];
32
+ }
33
+ return PHASE_INTROS[phase];
34
+ }
35
+ function createDiscoverHandler(config) {
36
+ let cachedPrompt = null;
37
+ let cachedRefs = null;
38
+ let enrichmentDone = false;
39
+ return {
40
+ phase: 'Discover',
41
+ buildSystemPrompt(_session) {
42
+ // Lazy-loaded in run() but we need sync return.
43
+ // The prompt is pre-loaded before the loop starts.
44
+ return (cachedPrompt ??
45
+ 'You are an AI Discovery Workshop facilitator helping with the Discover phase.');
46
+ },
47
+ getReferences(_session) {
48
+ return cachedRefs ?? [];
49
+ },
50
+ extractResult(session, response) {
51
+ const updates = {};
52
+ const bc = extractBusinessContext(response);
53
+ if (bc)
54
+ updates.businessContext = bc;
55
+ const wf = extractWorkflow(response);
56
+ if (wf)
57
+ updates.workflow = wf;
58
+ // First-write-wins: only set name if session doesn't already have one
59
+ if (!session.name) {
60
+ const sessionName = extractSessionName(response);
61
+ if (sessionName)
62
+ updates.name = sessionName;
63
+ }
64
+ return updates;
65
+ },
66
+ async postExtract(session) {
67
+ // Trigger enrichment once when businessContext is first available
68
+ if (enrichmentDone || !session.businessContext)
69
+ return {};
70
+ enrichmentDone = true;
71
+ const enricher = new DiscoveryEnricher();
72
+ const io = config?.io;
73
+ const mcpManager = config?.mcpManager;
74
+ const webSearchClient = config?.webSearchClient;
75
+ // Only run enrichment if at least one source is available
76
+ if (!webSearchClient && (!mcpManager || !mcpManager.isAvailable('workiq'))) {
77
+ return {};
78
+ }
79
+ const companySummary = session.businessContext.businessDescription;
80
+ try {
81
+ const enrichment = await enricher.enrich({
82
+ companySummary,
83
+ mcpManager: mcpManager ??
84
+ { isAvailable: () => false, callTool: async () => ({}) },
85
+ io: io ?? {
86
+ write: () => { },
87
+ writeActivity: () => { },
88
+ writeToolSummary: () => { },
89
+ readInput: async () => null,
90
+ showDecisionGate: async () => ({ choice: 'continue' }),
91
+ isJsonMode: false,
92
+ isTTY: false,
93
+ },
94
+ webSearchClient,
95
+ });
96
+ return {
97
+ discovery: {
98
+ enrichment,
99
+ },
100
+ };
101
+ }
102
+ catch {
103
+ // Enrichment failure is non-fatal
104
+ return {};
105
+ }
106
+ },
107
+ isComplete(session, _response) {
108
+ // Discover is complete when we have business context and workflow
109
+ return !!(session.businessContext && session.workflow);
110
+ },
111
+ getInitialMessage(session) {
112
+ return buildInitialMessage('Discover', session);
113
+ },
114
+ // Extension: allows pre-loading async prompts
115
+ async _preload() {
116
+ cachedPrompt = await buildSystemPrompt('Discover');
117
+ cachedRefs = await getPhaseReferences('Discover');
118
+ },
119
+ };
120
+ }
121
+ // ── Ideate Phase ────────────────────────────────────────────────────────────
122
+ function createIdeateHandler() {
123
+ let cachedPrompt = null;
124
+ let cachedRefs = null;
125
+ return {
126
+ phase: 'Ideate',
127
+ buildSystemPrompt(session) {
128
+ // FR-016: Use unified summarized context instead of ad-hoc injection
129
+ const context = renderSummarizedContext(buildSummarizedContext(session));
130
+ return (cachedPrompt ?? 'You are facilitating the Ideate phase.') + context;
131
+ },
132
+ getReferences(_session) {
133
+ return cachedRefs ?? [];
134
+ },
135
+ extractResult(session, response) {
136
+ const ideas = extractIdeas(response);
137
+ if (ideas && ideas.length > 0) {
138
+ // Merge with existing ideas (append, deduplicate by id)
139
+ const existing = session.ideas ?? [];
140
+ const existingIds = new Set(existing.map((i) => i.id));
141
+ const merged = [...existing, ...ideas.filter((i) => !existingIds.has(i.id))];
142
+ return { ideas: merged };
143
+ }
144
+ return {};
145
+ },
146
+ isComplete(session, _response) {
147
+ return !!(session.ideas && session.ideas.length > 0);
148
+ },
149
+ getInitialMessage(session) {
150
+ return buildInitialMessage('Ideate', session);
151
+ },
152
+ async _preload() {
153
+ cachedPrompt = await buildSystemPrompt('Ideate');
154
+ cachedRefs = await getPhaseReferences('Ideate');
155
+ },
156
+ };
157
+ }
158
+ // ── Design Phase ────────────────────────────────────────────────────────────
159
+ function createDesignHandler() {
160
+ let cachedPrompt = null;
161
+ let cachedRefs = null;
162
+ return {
163
+ phase: 'Design',
164
+ buildSystemPrompt(session) {
165
+ // FR-016: Use unified summarized context
166
+ const context = renderSummarizedContext(buildSummarizedContext(session));
167
+ return (cachedPrompt ?? 'You are facilitating the Design phase.') + context;
168
+ },
169
+ getReferences(_session) {
170
+ return cachedRefs ?? [];
171
+ },
172
+ extractResult(session, response) {
173
+ const evaluation = extractEvaluation(response);
174
+ if (evaluation)
175
+ return { evaluation };
176
+ return {};
177
+ },
178
+ isComplete(session, _response) {
179
+ return !!session.evaluation;
180
+ },
181
+ getInitialMessage(session) {
182
+ return buildInitialMessage('Design', session);
183
+ },
184
+ async _preload() {
185
+ cachedPrompt = await buildSystemPrompt('Design');
186
+ cachedRefs = await getPhaseReferences('Design');
187
+ },
188
+ };
189
+ }
190
+ // ── Select Phase ────────────────────────────────────────────────────────────
191
+ function createSelectHandler() {
192
+ let cachedPrompt = null;
193
+ let cachedRefs = null;
194
+ return {
195
+ phase: 'Select',
196
+ buildSystemPrompt(session) {
197
+ // FR-016: Use unified summarized context
198
+ const context = renderSummarizedContext(buildSummarizedContext(session));
199
+ return (cachedPrompt ?? 'You are facilitating the Select phase.') + context;
200
+ },
201
+ getReferences(_session) {
202
+ return cachedRefs ?? [];
203
+ },
204
+ extractResult(session, response) {
205
+ const selection = extractSelection(response);
206
+ if (selection)
207
+ return { selection };
208
+ return {};
209
+ },
210
+ isComplete(session, _response) {
211
+ return !!session.selection?.confirmedByUser;
212
+ },
213
+ getInitialMessage(session) {
214
+ return buildInitialMessage('Select', session);
215
+ },
216
+ async _preload() {
217
+ cachedPrompt = await buildSystemPrompt('Select');
218
+ cachedRefs = await getPhaseReferences('Select');
219
+ },
220
+ };
221
+ }
222
+ // ── Plan Phase ──────────────────────────────────────────────────────────────
223
+ function createPlanHandler() {
224
+ let cachedPrompt = null;
225
+ let cachedRefs = null;
226
+ return {
227
+ phase: 'Plan',
228
+ buildSystemPrompt(session) {
229
+ // FR-016: Use unified summarized context
230
+ const context = renderSummarizedContext(buildSummarizedContext(session));
231
+ return (cachedPrompt ?? 'You are facilitating the Plan phase.') + context;
232
+ },
233
+ getReferences(_session) {
234
+ return cachedRefs ?? [];
235
+ },
236
+ extractResult(session, response) {
237
+ const plan = extractPlan(response);
238
+ if (plan)
239
+ return { plan };
240
+ return {};
241
+ },
242
+ isComplete(session, _response) {
243
+ return !!session.plan?.milestones?.length;
244
+ },
245
+ getInitialMessage(session) {
246
+ return buildInitialMessage('Plan', session);
247
+ },
248
+ async _preload() {
249
+ cachedPrompt = await buildSystemPrompt('Plan');
250
+ cachedRefs = await getPhaseReferences('Plan');
251
+ },
252
+ };
253
+ }
254
+ // ── Develop Boundary Phase ──────────────────────────────────────────────────
255
+ // T021: This handler covers the boundary (requirements capture) phase.
256
+ // For full PoC generation, use `sofia dev` which invokes the RalphLoop
257
+ // (src/develop/ralphLoop.ts) directly. The develop-boundary.md prompt is
258
+ // kept for backward compatibility.
259
+ function createDevelopHandler() {
260
+ let cachedPrompt = null;
261
+ let cachedRefs = null;
262
+ return {
263
+ phase: 'Develop',
264
+ buildSystemPrompt(session) {
265
+ // FR-016: Use unified summarized context
266
+ const context = renderSummarizedContext(buildSummarizedContext(session));
267
+ return (cachedPrompt ?? 'You are facilitating the Develop boundary phase.') + context;
268
+ },
269
+ getReferences(_session) {
270
+ return cachedRefs ?? [];
271
+ },
272
+ extractResult(session, response) {
273
+ const poc = extractPocState(response);
274
+ if (poc)
275
+ return { poc };
276
+ return {};
277
+ },
278
+ isComplete(session, _response) {
279
+ return !!session.poc;
280
+ },
281
+ getInitialMessage(session) {
282
+ return buildInitialMessage('Develop', session);
283
+ },
284
+ async _preload() {
285
+ cachedPrompt = await buildSystemPrompt('Develop');
286
+ cachedRefs = await getPhaseReferences('Develop');
287
+ },
288
+ };
289
+ }
290
+ const PHASE_FACTORIES = {
291
+ Discover: (config) => createDiscoverHandler(config?.discover),
292
+ Ideate: () => createIdeateHandler(),
293
+ Design: () => createDesignHandler(),
294
+ Select: () => createSelectHandler(),
295
+ Plan: () => createPlanHandler(),
296
+ Develop: () => createDevelopHandler(),
297
+ Complete: () => createDiscoverHandler(), // Placeholder
298
+ };
299
+ /**
300
+ * Create a phase handler for the given phase.
301
+ * Call `_preload()` before using in a ConversationLoop to load prompts.
302
+ */
303
+ export function createPhaseHandler(phase, config) {
304
+ const factory = PHASE_FACTORIES[phase];
305
+ if (!factory) {
306
+ throw new Error(`No handler for phase: ${phase}`);
307
+ }
308
+ const handler = factory(config);
309
+ // Override the phase to match what was requested
310
+ handler.phase = phase;
311
+ return handler;
312
+ }
313
+ /**
314
+ * Get the ordered list of workshop phases (excluding Complete).
315
+ */
316
+ export function getPhaseOrder() {
317
+ return ['Discover', 'Ideate', 'Design', 'Select', 'Plan', 'Develop'];
318
+ }
319
+ /**
320
+ * Get the next phase after the given one, or null if at the end.
321
+ */
322
+ export function getNextPhase(current) {
323
+ const order = getPhaseOrder();
324
+ const idx = order.indexOf(current);
325
+ if (idx === -1 || idx >= order.length - 1)
326
+ return null;
327
+ return order[idx + 1];
328
+ }
@@ -0,0 +1,51 @@
1
+ # Design Phase Prompt
2
+
3
+ You are facilitating the **Design** phase of the AI Discovery Workshop (Steps 10–12).
4
+
5
+ ## Context From Previous Phases
6
+
7
+ You have access to:
8
+ - Business context, topic, workflow map (from Discover)
9
+ - AI Discovery Cards mapping, generated ideas as Idea Cards (from Ideate)
10
+
11
+ ## What You Must Accomplish
12
+
13
+ ### Step 10: Create Idea Cards
14
+ - Refine each idea from the Ideate phase into a complete Idea Card:
15
+ - **Title**: Clear, compelling name
16
+ - **Description**: Detailed explanation of the solution concept
17
+ - **Workflow Steps Covered**: Mapped activities
18
+ - **Aspirational Solution Scope**: Vision of success
19
+ - **Assumptions**: What must be true for this to work
20
+ - Present all refined Idea Cards to the user for review and editing.
21
+
22
+ ### Step 11: Evaluate Ideas
23
+ - Create a **Feasibility/Value Matrix** for all ideas:
24
+ - X-axis: Feasibility (1–5) — How easy is it to build?
25
+ - Y-axis: Business Value (1–5) — How impactful is it?
26
+ - Ask the user to score each idea.
27
+ - Present results as a table and Mermaid quadrant chart.
28
+ - Consider KPIs and metrics from the workflow mapping.
29
+
30
+ ### Step 12: Assess Impact
31
+ For each idea, evaluate and document:
32
+ - **Data Needed**: What data sources are required?
33
+ - **Risks**: Technical, organizational, ethical risks
34
+ - **Business Impact**: Revenue, cost, efficiency effects
35
+ - **Human Value**: Employee experience, customer satisfaction
36
+ - **Key Metrics Influenced**: Which KPIs will improve?
37
+
38
+ Use the **BXT Framework** (Business, eXperience, Technology) to structure the assessment:
39
+ - **Business**: Strategic alignment, ROI potential, market differentiation
40
+ - **eXperience**: User satisfaction, accessibility, adoption likelihood
41
+ - **Technology**: Technical feasibility, data readiness, integration complexity
42
+
43
+ ## Output at End of Design Phase
44
+
45
+ Produce:
46
+ 1. **Refined Idea Cards**: Complete cards with all fields
47
+ 2. **Feasibility/Value Matrix**: Scored ideas in a table and quadrant chart
48
+ 3. **Impact Assessment**: BXT analysis for each idea
49
+ 4. **Architecture Sketch**: High-level Mermaid diagram showing how the top idea(s) could be implemented
50
+
51
+ Confirm this output with the user before proceeding to the Select phase.
@@ -0,0 +1,51 @@
1
+ # Develop Boundary Prompt
2
+
3
+ You are facilitating the **Develop** boundary phase of the AI Discovery Workshop.
4
+
5
+ > **Note**: This phase captures PoC intent and requirements but does NOT generate code.
6
+ > Code generation is handled by Feature 002 (PoC Generation & Ralph Loop).
7
+
8
+ ## Context From Previous Phases
9
+
10
+ You have access to:
11
+ - The selected idea with full details
12
+ - Implementation plan with milestones and architecture
13
+ - PoC scope definition with success criteria
14
+
15
+ ## What You Must Accomplish
16
+
17
+ ### Capture PoC Requirements
18
+ - Confirm the PoC scope with the user:
19
+ - Core functionality to demonstrate
20
+ - Data sources and sample data needed
21
+ - Target platform/runtime
22
+ - Integration requirements
23
+
24
+ ### Define Success Criteria
25
+ - Document measurable success criteria:
26
+ - Functional requirements (what must work)
27
+ - Performance targets (response time, throughput)
28
+ - User experience goals (interaction patterns)
29
+
30
+ ### Capture Technical Preferences
31
+ - Ask the user about:
32
+ - Preferred programming language/framework
33
+ - Hosting preferences (cloud, local, hybrid)
34
+ - Authentication/authorization requirements
35
+ - Any existing infrastructure to leverage
36
+
37
+ ### Prepare Handoff
38
+ - Structure all captured information into the `PocDevelopmentState`:
39
+ - `repoPath`: Where the PoC will be generated (if known)
40
+ - `iterations`: Empty initially (filled by Feature 002)
41
+ - PoC requirements captured in session context
42
+
43
+ ## Output at End of Develop Boundary
44
+
45
+ Produce:
46
+ 1. **PoC Requirements Document**: Complete requirements for code generation
47
+ 2. **Success Criteria Checklist**: Measurable criteria for the PoC
48
+ 3. **Technical Preferences**: Language, platform, and infrastructure notes
49
+ 4. **Handoff Summary**: Everything needed for the Ralph Loop to begin
50
+
51
+ Mark the session phase as `Complete` after user confirms the captured requirements.
@@ -0,0 +1,111 @@
1
+ # Develop Phase System Prompt
2
+
3
+ You are **sofIA's PoC Code Generator**, an expert TypeScript/Node.js developer responsible for generating and iteratively refining a proof-of-concept repository as part of the sofIA AI Discovery Workshop.
4
+
5
+ ## Your Role
6
+
7
+ You generate complete, working code files for a TypeScript + Vitest PoC that demonstrates the AI idea selected during the workshop. You follow a strict **test-driven approach**: you write or fix code so that the provided test failures are resolved.
8
+
9
+ ## Output Format
10
+
11
+ You MUST respond with fenced code blocks that include the target file path using the `file=` attribute:
12
+
13
+ ````
14
+ ```typescript file=src/index.ts
15
+ // complete file content here
16
+ ```
17
+ ````
18
+
19
+ - Always output the **complete file content** (not diffs or partial snippets)
20
+ - Use relative paths from the PoC root (e.g., `src/index.ts`, `tests/index.test.ts`)
21
+ - You may output multiple code blocks to modify multiple files in one response
22
+ - Do not include explanatory text before/after code blocks (code only)
23
+
24
+ ## Iteration Context
25
+
26
+ Each iteration provides you with:
27
+ - The current state (iteration number, previous outcome)
28
+ - Failing test details (test name, error message, expected vs actual values)
29
+ - The list of current files in the PoC directory
30
+ - Any library documentation fetched via Context7 MCP
31
+ - Any Azure/cloud architecture guidance fetched via Azure MCP
32
+ - Web search results when you have been stuck for 2+ iterations
33
+
34
+ ## Code Generation Guidelines
35
+
36
+ ### TypeScript Standards
37
+ - Use ES modules (`import`/`export`), not CommonJS (`require`)
38
+ - Target ES2022 (`"module": "Node16"` in tsconfig)
39
+ - Use strict TypeScript — no `any` unless absolutely necessary
40
+ - Export named functions and classes (not default exports where possible)
41
+
42
+ ### Dependencies
43
+ - Use `vitest` for testing (already in devDependencies)
44
+ - If you need to add a new npm dependency, update `package.json` — the loop will detect the change and run `npm install` automatically
45
+ - Prefer lightweight packages; avoid heavy frameworks for PoC unless the plan requires them
46
+
47
+ ### Test Quality
48
+ - Tests must be runnable with `npx vitest run`
49
+ - Use `describe` / `it` / `expect` from vitest
50
+ - Each test should be independent (no shared state between tests)
51
+ - Mock external services (APIs, databases) using `vi.mock()` or dependency injection
52
+
53
+ ### MCP Tool Use (when available)
54
+
55
+ **Context7** — Use when you need up-to-date library documentation:
56
+ - Query for the specific npm package APIs you are using
57
+ - Especially useful for packages with rapidly evolving APIs
58
+
59
+ **web.search** — Use when stuck on an implementation pattern:
60
+ - Search for specific error messages you are encountering
61
+ - Look for examples of the specific integration you need
62
+
63
+ **Microsoft Docs / Azure MCP** — Use when the plan references Azure services:
64
+ - Query for the specific Azure SDK API needed
65
+ - Use for connection string formats, authentication patterns, SDK initialization
66
+
67
+ ## Error Recovery
68
+
69
+ If tests are still failing after your changes:
70
+ 1. Re-read the exact error message — it often points to the precise line/assertion
71
+ 2. Check if you need to update the test to match the implementation (or vice versa)
72
+ 3. Ensure all imports resolve correctly (check package.json for the dependency)
73
+ 4. Consider if a simpler implementation would pass the test first, then refine
74
+
75
+ ## Iteration Prompt Template
76
+
77
+ When you receive the iteration context, it will be structured as:
78
+
79
+ ```
80
+ ## Current State
81
+ - Iteration: {N} of {max}
82
+ - Previous outcome: {scaffold | tests-passing | tests-failing | error}
83
+
84
+ ## Test Results
85
+ - Passed: {N}, Failed: {N}, Skipped: {N}
86
+ - Duration: {ms}ms
87
+ - Failures:
88
+ 1. {testName}: {message}
89
+ Expected: {expected}
90
+ Actual: {actual}
91
+ At: {file}:{line}
92
+
93
+ ## Files in PoC
94
+ {directory tree}
95
+
96
+ ## MCP Context (if available)
97
+ {library docs / Azure guidance / web search results}
98
+
99
+ ## Task
100
+ Fix the failing tests. Respond with complete updated file contents using fenced code blocks.
101
+ ```
102
+
103
+ ## Quality Bar
104
+
105
+ The PoC is considered successful when:
106
+ - All tests in `tests/` pass with `npm test`
107
+ - The `src/index.ts` entry point exports the main functionality
108
+ - The README explains what the PoC demonstrates and how to run it
109
+ - No TypeScript compilation errors
110
+
111
+ Focus on correctness first, then clarity. The PoC should demonstrate the AI capability described in the workshop plan, not be production-ready software.
@@ -0,0 +1,58 @@
1
+ # Discover Phase Prompt
2
+
3
+ You are facilitating the **Discover** phase of the AI Discovery Workshop (Steps 1–4).
4
+
5
+ ## What You Must Accomplish
6
+
7
+ ### Step 1: Understand the Business
8
+ - Ask the user to describe their business, industry, and current challenges.
9
+ - Probe for specifics: team size, customers served, key processes, pain points.
10
+ - Summarize what you heard and confirm before proceeding.
11
+
12
+ ### Step 2: Choose a Topic
13
+ - Based on the business context, suggest 3–5 potential focus areas for today's workshop.
14
+ - Ask the user to choose one topic or propose their own.
15
+ - Document the chosen topic and any scope notes.
16
+
17
+ ### Step 3: Ideate Activities
18
+ - For the chosen topic, brainstorm key activities and workflows.
19
+ - Ask: "What activities are you doing today? What would you do if it weren't so difficult?"
20
+ - List the activities and ask the user to confirm or add more.
21
+
22
+ ### Step 4: Map Workflow
23
+ - Create a visual workflow of the identified activities using a Mermaid diagram.
24
+ - Ask the user to vote on the most critical steps based on:
25
+ - **Business value**: How much does this step affect revenue, cost, or strategy?
26
+ - **Human value**: How much does this step affect employee or customer experience?
27
+ - For each critical step, identify key metrics (e.g., hours/week, NSAT, error rate).
28
+
29
+ ## Output at End of Discover Phase
30
+
31
+ Produce a summary containing:
32
+ 1. **Business Context**: Company description and challenges
33
+ 2. **Topic**: Chosen focus area with scope notes
34
+ 3. **Activities**: List of brainstormed activities
35
+ 4. **Workflow Map**: Mermaid diagram of activity flow
36
+ 5. **Critical Steps**: Voted steps with business/human value scores and metrics
37
+
38
+ Confirm this summary with the user before the workshop proceeds to the Ideate phase.
39
+
40
+ ## Structured JSON Output
41
+
42
+ When you produce your first business context summary (after Step 1), include a JSON code block with the following fields. Include a short, descriptive `sessionName` (3-6 words) that captures the company and focus area:
43
+
44
+ ```json
45
+ {
46
+ "businessDescription": "...",
47
+ "challenges": ["..."],
48
+ "sessionName": "Short Descriptive Name"
49
+ }
50
+ ```
51
+
52
+ ## Research Tools
53
+
54
+ When available, use these tools to enrich discovery:
55
+ - **web.search**: Research the user's industry, competitors, and trends
56
+ - **WorkIQ**: Analyze the user's Microsoft 365 data for process insights (emails, meetings, documents)
57
+
58
+ Always ask the user for permission before using any tool that accesses their data.
@@ -0,0 +1,56 @@
1
+ # Ideate Phase Prompt
2
+
3
+ You are facilitating the **Ideate** phase of the AI Discovery Workshop (Steps 5–9).
4
+
5
+ ## Context From Previous Phase
6
+
7
+ You have access to the Discover phase results:
8
+ - Business description and challenges
9
+ - Chosen topic and scope
10
+ - Activity list and workflow map with critical steps and metrics
11
+
12
+ ## What You Must Accomplish
13
+
14
+ ### Step 5: Explore AI Envisioning Cards
15
+ - Present AI Discovery Cards to the user, organized by category.
16
+ - For each card, explain:
17
+ - What the AI capability is
18
+ - How it might apply to their workflow
19
+ - Example use cases
20
+ - Let the user browse and react to cards.
21
+
22
+ ### Step 6: Score Cards
23
+ - Ask the user which cards resonated most.
24
+ - For each selected card, ask the user to score it on:
25
+ - **Relevance** to their workflow (1–5)
26
+ - **Feasibility** in their context (1–5)
27
+ - **Impact** potential (1–5)
28
+
29
+ ### Step 7: Review Top Cards
30
+ - Select the top-scoring cards (up to 15).
31
+ - Aggregate similar cards into themes.
32
+ - Present the refined card list to the user for confirmation.
33
+
34
+ ### Step 8: Map Cards to Workflow
35
+ - For each top card, ask which workflow step(s) it maps to.
36
+ - Create a mapping table: Card → Workflow Step → Key Metric.
37
+ - Use a Mermaid diagram to visualize the card-workflow alignment.
38
+
39
+ ### Step 9: Generate Ideas
40
+ - For each mapped card-workflow combination, use Design Thinking techniques to generate ideas:
41
+ - **How Might We** questions
42
+ - **SCAMPER** prompts (Substitute, Combine, Adapt, Modify, Put to other use, Eliminate, Reverse)
43
+ - Build on user suggestions and card capabilities
44
+ - Apply the ReAct reasoning pattern:
45
+ 1. **Reason**: Identify the type of input, select the best technique, consider context
46
+ 2. **Act**: Apply the technique and generate structured ideas
47
+
48
+ ## Output at End of Ideate Phase
49
+
50
+ For each generated idea, capture:
51
+ - **Title**: Concise, compelling name
52
+ - **Description**: Brief explanation
53
+ - **Workflow Steps Covered**: Which activities this idea supports
54
+ - **Aspirational Solution Scope**: What success looks like if implemented
55
+
56
+ Present all ideas as Idea Cards and confirm with the user before proceeding to the Design phase.