mirror-mind 0.0.1 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/.claude/hooks/log-assistant-reply.sh +85 -0
  2. package/.claude/hooks/log-session-end.sh +85 -0
  3. package/.claude/hooks/log-user-prompt.sh +85 -0
  4. package/.claude/hooks/mirror-inject.sh +85 -0
  5. package/.claude/hooks/session-start.sh +85 -0
  6. package/.gemini/hooks/log-assistant.sh +85 -0
  7. package/.gemini/hooks/log-user.sh +85 -0
  8. package/.gemini/hooks/session-end.sh +85 -0
  9. package/.gemini/hooks/session-start.sh +85 -0
  10. package/.pi/extensions/mirror-logger.ts +646 -0
  11. package/.pi/skills/mm-backup/SKILL.md +21 -0
  12. package/.pi/skills/mm-build/SKILL.md +1206 -0
  13. package/.pi/skills/mm-consolidate/SKILL.md +112 -0
  14. package/.pi/skills/mm-consult/SKILL.md +70 -0
  15. package/.pi/skills/mm-conversations/SKILL.md +16 -0
  16. package/.pi/skills/mm-discard/SKILL.md +39 -0
  17. package/.pi/skills/mm-explore/SKILL.md +255 -0
  18. package/.pi/skills/mm-help/SKILL.md +74 -0
  19. package/.pi/skills/mm-identity/SKILL.md +96 -0
  20. package/.pi/skills/mm-journal/SKILL.md +16 -0
  21. package/.pi/skills/mm-journey/SKILL.md +23 -0
  22. package/.pi/skills/mm-journeys/SKILL.md +15 -0
  23. package/.pi/skills/mm-memories/SKILL.md +17 -0
  24. package/.pi/skills/mm-mirror/SKILL.md +98 -0
  25. package/.pi/skills/mm-mute/SKILL.md +18 -0
  26. package/.pi/skills/mm-new/SKILL.md +18 -0
  27. package/.pi/skills/mm-recall/SKILL.md +17 -0
  28. package/.pi/skills/mm-release-notes/SKILL.md +52 -0
  29. package/.pi/skills/mm-seed/SKILL.md +19 -0
  30. package/.pi/skills/mm-shadow/SKILL.md +117 -0
  31. package/.pi/skills/mm-soul/SKILL.md +502 -0
  32. package/.pi/skills/mm-tasks/SKILL.md +24 -0
  33. package/.pi/skills/mm-update/SKILL.md +32 -0
  34. package/.pi/skills/mm-week/SKILL.md +28 -0
  35. package/.pi/skills/mm-welcome/SKILL.md +24 -0
  36. package/AGENTS.md +188 -0
  37. package/README.md +126 -9
  38. package/bin/loader.js +67 -0
  39. package/bin/mirror-hook.js +7 -0
  40. package/bin/mirror.js +7 -0
  41. package/docs/releases/index.md +100 -0
  42. package/docs/releases/pending-cutoffs.md +510 -0
  43. package/docs/releases/v0.10.0.md +123 -0
  44. package/docs/releases/v0.10.1.md +66 -0
  45. package/docs/releases/v0.10.10.md +51 -0
  46. package/docs/releases/v0.10.11.md +39 -0
  47. package/docs/releases/v0.10.12.md +57 -0
  48. package/docs/releases/v0.10.13.md +35 -0
  49. package/docs/releases/v0.10.14.md +42 -0
  50. package/docs/releases/v0.10.15.md +53 -0
  51. package/docs/releases/v0.10.16.md +35 -0
  52. package/docs/releases/v0.10.17.md +43 -0
  53. package/docs/releases/v0.10.2.md +64 -0
  54. package/docs/releases/v0.10.3.md +78 -0
  55. package/docs/releases/v0.10.4.md +42 -0
  56. package/docs/releases/v0.10.5.md +57 -0
  57. package/docs/releases/v0.10.6.md +47 -0
  58. package/docs/releases/v0.10.7.md +53 -0
  59. package/docs/releases/v0.10.8.md +49 -0
  60. package/docs/releases/v0.10.9.md +37 -0
  61. package/docs/releases/v0.11.0.md +86 -0
  62. package/docs/releases/v0.12.0.md +67 -0
  63. package/docs/releases/v0.13.0.md +64 -0
  64. package/docs/releases/v0.14.0.md +68 -0
  65. package/docs/releases/v0.15.0.md +48 -0
  66. package/docs/releases/v0.16.0.md +50 -0
  67. package/docs/releases/v0.16.1.md +55 -0
  68. package/docs/releases/v0.16.2.md +36 -0
  69. package/docs/releases/v0.17.0.md +50 -0
  70. package/docs/releases/v0.17.1.md +58 -0
  71. package/docs/releases/v0.17.2.md +42 -0
  72. package/docs/releases/v0.17.3.md +58 -0
  73. package/docs/releases/v0.18.0.md +84 -0
  74. package/docs/releases/v0.18.1.md +51 -0
  75. package/docs/releases/v0.18.2.md +69 -0
  76. package/docs/releases/v0.19.0.md +85 -0
  77. package/docs/releases/v0.19.1.md +46 -0
  78. package/docs/releases/v0.20.0.md +85 -0
  79. package/docs/releases/v0.21.0.md +61 -0
  80. package/docs/releases/v0.21.1.md +47 -0
  81. package/docs/releases/v0.22.0.md +77 -0
  82. package/docs/releases/v0.22.1.md +42 -0
  83. package/docs/releases/v0.23.0.md +105 -0
  84. package/docs/releases/v0.24.0.md +125 -0
  85. package/docs/releases/v0.25.0.md +107 -0
  86. package/docs/releases/v0.26.0.md +139 -0
  87. package/docs/releases/v0.26.1.md +65 -0
  88. package/docs/releases/v0.26.2.md +43 -0
  89. package/docs/releases/v0.27.0.md +63 -0
  90. package/docs/releases/v0.28.0.md +59 -0
  91. package/docs/releases/v0.29.0.md +61 -0
  92. package/docs/releases/v0.29.1.md +59 -0
  93. package/docs/releases/v0.29.2.md +59 -0
  94. package/docs/releases/v0.29.3.md +93 -0
  95. package/docs/releases/v0.30.0.md +75 -0
  96. package/docs/releases/v0.30.1.md +93 -0
  97. package/docs/releases/v0.30.2.md +66 -0
  98. package/docs/releases/v0.31.0.md +122 -0
  99. package/docs/releases/v0.31.1.md +142 -0
  100. package/docs/releases/v0.31.10.md +118 -0
  101. package/docs/releases/v0.31.11.md +88 -0
  102. package/docs/releases/v0.31.12.md +105 -0
  103. package/docs/releases/v0.31.13.md +99 -0
  104. package/docs/releases/v0.31.14.md +97 -0
  105. package/docs/releases/v0.31.2.md +115 -0
  106. package/docs/releases/v0.31.3.md +142 -0
  107. package/docs/releases/v0.31.4.md +117 -0
  108. package/docs/releases/v0.31.5.md +155 -0
  109. package/docs/releases/v0.31.6.md +132 -0
  110. package/docs/releases/v0.31.7.md +132 -0
  111. package/docs/releases/v0.31.8.md +120 -0
  112. package/docs/releases/v0.31.9.md +120 -0
  113. package/docs/releases/v0.32.0.md +261 -0
  114. package/docs/releases/v0.32.1.md +59 -0
  115. package/docs/releases/v0.33.0.md +164 -0
  116. package/docs/releases/v0.8.0.md +118 -0
  117. package/docs/releases/v0.9.0.md +98 -0
  118. package/docs/releases/v0.9.1.md +83 -0
  119. package/package.json +102 -6
  120. package/plugins/mirror-mind/.claude-plugin/plugin.json +17 -0
  121. package/plugins/mirror-mind/hooks/hooks.json +62 -0
  122. package/plugins/mirror-mind/hooks/log-assistant-reply.sh +98 -0
  123. package/plugins/mirror-mind/hooks/log-session-end.sh +98 -0
  124. package/plugins/mirror-mind/hooks/log-user-prompt.sh +98 -0
  125. package/plugins/mirror-mind/hooks/mirror-inject.sh +98 -0
  126. package/plugins/mirror-mind/hooks/session-start.sh +98 -0
  127. package/plugins/mirror-mind/skills/mm-backup/SKILL.md +27 -0
  128. package/plugins/mirror-mind/skills/mm-build/SKILL.md +1206 -0
  129. package/plugins/mirror-mind/skills/mm-consolidate/SKILL.md +112 -0
  130. package/plugins/mirror-mind/skills/mm-consult/SKILL.md +83 -0
  131. package/plugins/mirror-mind/skills/mm-conversations/SKILL.md +17 -0
  132. package/plugins/mirror-mind/skills/mm-discard/SKILL.md +40 -0
  133. package/plugins/mirror-mind/skills/mm-explore/SKILL.md +241 -0
  134. package/plugins/mirror-mind/skills/mm-help/SKILL.md +104 -0
  135. package/plugins/mirror-mind/skills/mm-identity/SKILL.md +96 -0
  136. package/plugins/mirror-mind/skills/mm-journal/SKILL.md +21 -0
  137. package/plugins/mirror-mind/skills/mm-journey/SKILL.md +37 -0
  138. package/plugins/mirror-mind/skills/mm-journeys/SKILL.md +15 -0
  139. package/plugins/mirror-mind/skills/mm-memories/SKILL.md +20 -0
  140. package/plugins/mirror-mind/skills/mm-mirror/SKILL.md +67 -0
  141. package/plugins/mirror-mind/skills/mm-mute/SKILL.md +18 -0
  142. package/plugins/mirror-mind/skills/mm-new/SKILL.md +18 -0
  143. package/plugins/mirror-mind/skills/mm-recall/SKILL.md +17 -0
  144. package/plugins/mirror-mind/skills/mm-release-notes/SKILL.md +31 -0
  145. package/plugins/mirror-mind/skills/mm-seed/SKILL.md +15 -0
  146. package/plugins/mirror-mind/skills/mm-shadow/SKILL.md +117 -0
  147. package/plugins/mirror-mind/skills/mm-soul/SKILL.md +488 -0
  148. package/plugins/mirror-mind/skills/mm-tasks/SKILL.md +36 -0
  149. package/plugins/mirror-mind/skills/mm-update/SKILL.md +30 -0
  150. package/plugins/mirror-mind/skills/mm-week/SKILL.md +46 -0
  151. package/plugins/mirror-mind/skills/mm-welcome/SKILL.md +22 -0
  152. package/scripts/codex-hooks/session-end.sh +85 -0
  153. package/scripts/codex-hooks/session-start.sh +85 -0
  154. package/scripts/codex-mirror.sh +48 -0
  155. package/templates/identity/README.md +119 -0
  156. package/templates/identity/ego/behavior.yaml +52 -0
  157. package/templates/identity/ego/constraints.yaml +15 -0
  158. package/templates/identity/ego/identity.yaml +43 -0
  159. package/templates/identity/journeys/personal-growth.yaml +39 -0
  160. package/templates/identity/organization/identity.yaml +24 -0
  161. package/templates/identity/organization/principles.yaml +17 -0
  162. package/templates/identity/personas/coach.yaml +94 -0
  163. package/templates/identity/personas/designer.yaml +93 -0
  164. package/templates/identity/personas/doctor.yaml +96 -0
  165. package/templates/identity/personas/engineer.yaml +77 -0
  166. package/templates/identity/personas/financial.yaml +97 -0
  167. package/templates/identity/personas/prompt-engineer.yaml +122 -0
  168. package/templates/identity/personas/researcher.yaml +88 -0
  169. package/templates/identity/personas/strategist.yaml +91 -0
  170. package/templates/identity/personas/teacher.yaml +95 -0
  171. package/templates/identity/personas/therapist.yaml +91 -0
  172. package/templates/identity/personas/thinker.yaml +74 -0
  173. package/templates/identity/personas/writer.yaml +76 -0
  174. package/templates/identity/self/config.yaml +16 -0
  175. package/templates/identity/self/soul.yaml +105 -0
  176. package/templates/identity/user/identity.yaml +30 -0
  177. package/ts/src/backup/staging.ts +62 -0
  178. package/ts/src/backup/zipBackup.ts +267 -0
  179. package/ts/src/backup/zipReader.ts +109 -0
  180. package/ts/src/backup/zipWriter.ts +148 -0
  181. package/ts/src/builder/activeCheckpoint.ts +134 -0
  182. package/ts/src/builder/aggregateStatus.ts +34 -0
  183. package/ts/src/builder/approve.ts +149 -0
  184. package/ts/src/builder/argv.ts +292 -0
  185. package/ts/src/builder/ariadMethod.ts +536 -0
  186. package/ts/src/builder/artifacts/artifactSurfaces.ts +106 -0
  187. package/ts/src/builder/artifacts/artifactWriter.ts +113 -0
  188. package/ts/src/builder/artifacts/closureArtifacts.ts +199 -0
  189. package/ts/src/builder/artifacts/deliveryStoryArtifacts.ts +316 -0
  190. package/ts/src/builder/artifacts/planArtifacts.ts +242 -0
  191. package/ts/src/builder/artifacts/scaffoldSections.ts +273 -0
  192. package/ts/src/builder/artifacts/scaffoldState.ts +227 -0
  193. package/ts/src/builder/artifacts/storyFiles.ts +61 -0
  194. package/ts/src/builder/artifacts/storyIndex.ts +166 -0
  195. package/ts/src/builder/cadence.ts +59 -0
  196. package/ts/src/builder/card.ts +192 -0
  197. package/ts/src/builder/checkpointRefused.ts +66 -0
  198. package/ts/src/builder/closure.ts +964 -0
  199. package/ts/src/builder/commands.ts +2053 -0
  200. package/ts/src/builder/cursorPosition.ts +176 -0
  201. package/ts/src/builder/cursorTransitions.ts +77 -0
  202. package/ts/src/builder/deliveryCursor.ts +577 -0
  203. package/ts/src/builder/deliveryStoryClosure.ts +521 -0
  204. package/ts/src/builder/deliveryStoryPlan.ts +536 -0
  205. package/ts/src/builder/deliveryStoryReady.ts +160 -0
  206. package/ts/src/builder/deliveryStoryRoadmapClosure.ts +151 -0
  207. package/ts/src/builder/expand.ts +336 -0
  208. package/ts/src/builder/flowUnit.ts +339 -0
  209. package/ts/src/builder/homeSurface.ts +122 -0
  210. package/ts/src/builder/implementationGuard.ts +125 -0
  211. package/ts/src/builder/index.ts +11 -0
  212. package/ts/src/builder/lifecycleRefusal.ts +92 -0
  213. package/ts/src/builder/lifecycleRibbon.ts +159 -0
  214. package/ts/src/builder/load.ts +313 -0
  215. package/ts/src/builder/methodAdoption.ts +113 -0
  216. package/ts/src/builder/methodDefinition.ts +429 -0
  217. package/ts/src/builder/methodInspection.ts +371 -0
  218. package/ts/src/builder/plan.ts +408 -0
  219. package/ts/src/builder/planPreauthorization.ts +265 -0
  220. package/ts/src/builder/prepare.ts +225 -0
  221. package/ts/src/builder/projectPaths.ts +64 -0
  222. package/ts/src/builder/pull.ts +356 -0
  223. package/ts/src/builder/pullCandidates.ts +463 -0
  224. package/ts/src/builder/pullCandidatesRender.ts +238 -0
  225. package/ts/src/builder/refinementField.ts +93 -0
  226. package/ts/src/builder/releaseIntent.ts +173 -0
  227. package/ts/src/builder/resumeState.ts +84 -0
  228. package/ts/src/builder/resumeSurface.ts +149 -0
  229. package/ts/src/builder/roadmapGrammar.ts +300 -0
  230. package/ts/src/builder/roadmapScan.ts +97 -0
  231. package/ts/src/builder/roadmapScope.ts +210 -0
  232. package/ts/src/builder/scopePhrases.ts +146 -0
  233. package/ts/src/builder/storyPaths.ts +196 -0
  234. package/ts/src/builder/storyPlanPreauthorization.ts +287 -0
  235. package/ts/src/builder/surfaceProtocol.ts +42 -0
  236. package/ts/src/builder/templateGeneration.ts +148 -0
  237. package/ts/src/builder/transition.ts +178 -0
  238. package/ts/src/consult/args.ts +99 -0
  239. package/ts/src/consult/core.ts +122 -0
  240. package/ts/src/consult/modelCatalog.ts +55 -0
  241. package/ts/src/consult/render.ts +47 -0
  242. package/ts/src/conversation/append.ts +414 -0
  243. package/ts/src/conversation/backfill.ts +387 -0
  244. package/ts/src/conversation/closeTail.ts +467 -0
  245. package/ts/src/conversation/extraction.ts +333 -0
  246. package/ts/src/conversation/extractionDriver.ts +130 -0
  247. package/ts/src/conversation/extractionRun.ts +70 -0
  248. package/ts/src/conversation/hookPayload.ts +51 -0
  249. package/ts/src/conversation/journeyInference.ts +165 -0
  250. package/ts/src/conversation/journeyRepair.ts +114 -0
  251. package/ts/src/conversation/lifecycleFaces.ts +197 -0
  252. package/ts/src/conversation/lifecycleWrites.ts +313 -0
  253. package/ts/src/conversation/listing.ts +77 -0
  254. package/ts/src/conversation/logger.ts +851 -0
  255. package/ts/src/conversation/loggerCli.ts +321 -0
  256. package/ts/src/conversation/loggerRuntime.ts +259 -0
  257. package/ts/src/conversation/metadataLifecycle.ts +443 -0
  258. package/ts/src/conversation/recall.ts +66 -0
  259. package/ts/src/conversation/sessionComposites.ts +258 -0
  260. package/ts/src/conversation/sessionImport.ts +90 -0
  261. package/ts/src/conversation/transcriptBackfill.ts +141 -0
  262. package/ts/src/cultivation/applyActions.ts +241 -0
  263. package/ts/src/cultivation/cluster.ts +86 -0
  264. package/ts/src/cultivation/consolidationStore.ts +281 -0
  265. package/ts/src/cultivation/promptContext.ts +62 -0
  266. package/ts/src/cultivation/propose.ts +305 -0
  267. package/ts/src/cultivation/scan.ts +155 -0
  268. package/ts/src/db/backupGate.ts +47 -0
  269. package/ts/src/db/bootstrap.ts +108 -0
  270. package/ts/src/db/bootstrapLock.ts +223 -0
  271. package/ts/src/db/copyGuard.ts +60 -0
  272. package/ts/src/db/database.ts +397 -0
  273. package/ts/src/db/decode.ts +66 -0
  274. package/ts/src/db/ftsIntegrity.ts +41 -0
  275. package/ts/src/db/migrateOnOpen.ts +214 -0
  276. package/ts/src/db/migrations.ts +576 -0
  277. package/ts/src/db/readyOnOpen.ts +35 -0
  278. package/ts/src/db/rowDecode.ts +42 -0
  279. package/ts/src/db/schema.ts +432 -0
  280. package/ts/src/db/schemaInventory.ts +225 -0
  281. package/ts/src/db/schemaInventorySnapshot.ts +2107 -0
  282. package/ts/src/db/schemaState.ts +91 -0
  283. package/ts/src/db/schemaTsDivergence.ts +114 -0
  284. package/ts/src/descriptor/descriptorRead.ts +49 -0
  285. package/ts/src/docs/docsLint.ts +265 -0
  286. package/ts/src/explorer/handoff.ts +522 -0
  287. package/ts/src/explorer/render.ts +335 -0
  288. package/ts/src/explorer/story.ts +769 -0
  289. package/ts/src/explorer/transition.ts +72 -0
  290. package/ts/src/extensions/bindings.ts +170 -0
  291. package/ts/src/extensions/catalog.ts +249 -0
  292. package/ts/src/extensions/catalogCommands.ts +513 -0
  293. package/ts/src/extensions/catalogWrites.ts +652 -0
  294. package/ts/src/extensions/contextRuntime.ts +325 -0
  295. package/ts/src/extensions/dispatch.ts +374 -0
  296. package/ts/src/extensions/errors.ts +24 -0
  297. package/ts/src/extensions/manifest.ts +356 -0
  298. package/ts/src/extensions/migrations.ts +350 -0
  299. package/ts/src/extraction/conversation.ts +304 -0
  300. package/ts/src/extraction/conversationMetadata.ts +206 -0
  301. package/ts/src/extraction/fencing.ts +106 -0
  302. package/ts/src/extraction/json.ts +17 -0
  303. package/ts/src/extraction/prompts.ts +470 -0
  304. package/ts/src/frontDoor/args.ts +30 -0
  305. package/ts/src/frontDoor/argvShape.ts +106 -0
  306. package/ts/src/frontDoor/buildLoadRuntime.ts +139 -0
  307. package/ts/src/frontDoor/buildRoute.ts +398 -0
  308. package/ts/src/frontDoor/cli.ts +1872 -0
  309. package/ts/src/frontDoor/cloneRoleGuard.ts +98 -0
  310. package/ts/src/frontDoor/consultRoute.ts +50 -0
  311. package/ts/src/frontDoor/contentTailRoute.ts +239 -0
  312. package/ts/src/frontDoor/conversationLoggerRoute.ts +83 -0
  313. package/ts/src/frontDoor/cultivationRoute.ts +210 -0
  314. package/ts/src/frontDoor/dbPath.ts +131 -0
  315. package/ts/src/frontDoor/dbSafetyToolsRoute.ts +240 -0
  316. package/ts/src/frontDoor/exploreRoute.ts +572 -0
  317. package/ts/src/frontDoor/extensionCatalogRoute.ts +252 -0
  318. package/ts/src/frontDoor/frontDoorLog.ts +57 -0
  319. package/ts/src/frontDoor/identityWrite.ts +36 -0
  320. package/ts/src/frontDoor/journeyWriteRoute.ts +26 -0
  321. package/ts/src/frontDoor/lifecycleWriteRoute.ts +110 -0
  322. package/ts/src/frontDoor/liveBackup.ts +100 -0
  323. package/ts/src/frontDoor/mirrorModeRoute.ts +163 -0
  324. package/ts/src/frontDoor/namedRefusal.ts +35 -0
  325. package/ts/src/frontDoor/nodeSupport.ts +24 -0
  326. package/ts/src/frontDoor/render/consolidate.ts +199 -0
  327. package/ts/src/frontDoor/render/conversations.ts +33 -0
  328. package/ts/src/frontDoor/render/cultivationShared.ts +21 -0
  329. package/ts/src/frontDoor/render/descriptor.ts +20 -0
  330. package/ts/src/frontDoor/render/detectPersona.ts +50 -0
  331. package/ts/src/frontDoor/render/icons.ts +13 -0
  332. package/ts/src/frontDoor/render/identity.ts +59 -0
  333. package/ts/src/frontDoor/render/identityRows.ts +17 -0
  334. package/ts/src/frontDoor/render/inspectPersona.ts +53 -0
  335. package/ts/src/frontDoor/render/journeyStatus.ts +78 -0
  336. package/ts/src/frontDoor/render/journeys.ts +79 -0
  337. package/ts/src/frontDoor/render/list.ts +41 -0
  338. package/ts/src/frontDoor/render/memories.ts +67 -0
  339. package/ts/src/frontDoor/render/recall.ts +49 -0
  340. package/ts/src/frontDoor/render/shadow.ts +155 -0
  341. package/ts/src/frontDoor/render/tasks.ts +99 -0
  342. package/ts/src/frontDoor/render/tasksImportSync.ts +63 -0
  343. package/ts/src/frontDoor/render/week.ts +113 -0
  344. package/ts/src/frontDoor/routing.ts +1001 -0
  345. package/ts/src/frontDoor/runtimeRoute.ts +623 -0
  346. package/ts/src/frontDoor/searchRoute.ts +166 -0
  347. package/ts/src/frontDoor/seedPaths.ts +98 -0
  348. package/ts/src/frontDoor/sessionStartWelcomeRoute.ts +166 -0
  349. package/ts/src/frontDoor/soulRoute.ts +433 -0
  350. package/ts/src/frontDoor/stdinSource.ts +37 -0
  351. package/ts/src/frontDoor/tasksImportSyncRoute.ts +110 -0
  352. package/ts/src/frontDoor/tasksWriteRoute.ts +101 -0
  353. package/ts/src/frontDoor/usage.ts +176 -0
  354. package/ts/src/guards/claudePlugin.ts +298 -0
  355. package/ts/src/guards/packContents.ts +306 -0
  356. package/ts/src/guards/piSourcedSkills.ts +70 -0
  357. package/ts/src/guards/retiredRouteShadows.ts +57 -0
  358. package/ts/src/guards/retiredSurfaces.ts +564 -0
  359. package/ts/src/hooks/claude.ts +214 -0
  360. package/ts/src/hooks/codex.ts +45 -0
  361. package/ts/src/hooks/gemini.ts +126 -0
  362. package/ts/src/hooks/main.ts +109 -0
  363. package/ts/src/hooks/mirrorState.ts +71 -0
  364. package/ts/src/hooks/payload.ts +73 -0
  365. package/ts/src/hooks/runtime.ts +179 -0
  366. package/ts/src/hooks/runtimeDetection.ts +34 -0
  367. package/ts/src/identity/applyConsolidationIdentityUpdate.ts +67 -0
  368. package/ts/src/identity/descriptorGenerate.ts +162 -0
  369. package/ts/src/identity/identityEdit.ts +143 -0
  370. package/ts/src/identity/identityKey.ts +77 -0
  371. package/ts/src/identity/identityRead.ts +69 -0
  372. package/ts/src/identity/identityStore.ts +80 -0
  373. package/ts/src/identity/journeyListing.ts +53 -0
  374. package/ts/src/identity/personaInspect.ts +44 -0
  375. package/ts/src/identity/personaListing.ts +37 -0
  376. package/ts/src/identity/setIdentity.ts +64 -0
  377. package/ts/src/index.ts +231 -0
  378. package/ts/src/init/init.ts +111 -0
  379. package/ts/src/journey/journeyOptions.ts +131 -0
  380. package/ts/src/journey/journeyRemoval.ts +158 -0
  381. package/ts/src/journey/journeyStatus.ts +149 -0
  382. package/ts/src/journey/journeySyncFile.ts +87 -0
  383. package/ts/src/journey/journeyWrite.ts +203 -0
  384. package/ts/src/journey/parentJourney.ts +41 -0
  385. package/ts/src/journey/validateParentJourney.ts +55 -0
  386. package/ts/src/mcp/boundary.ts +151 -0
  387. package/ts/src/mcp/guards.ts +244 -0
  388. package/ts/src/mcp/main.ts +121 -0
  389. package/ts/src/mcp/payload.ts +141 -0
  390. package/ts/src/mcp/protocol.ts +141 -0
  391. package/ts/src/mcp/readModels.ts +241 -0
  392. package/ts/src/mcp/registry.ts +201 -0
  393. package/ts/src/mcp/serve.ts +120 -0
  394. package/ts/src/mcp/tools/deterministic.ts +137 -0
  395. package/ts/src/mcp/tools/providerCrossing.ts +187 -0
  396. package/ts/src/mcp/wire.ts +8 -0
  397. package/ts/src/memory/journal.ts +180 -0
  398. package/ts/src/memory/listing.ts +107 -0
  399. package/ts/src/memory/memoryWrite.ts +88 -0
  400. package/ts/src/memory/reinforcement.ts +35 -0
  401. package/ts/src/mirror/context.ts +161 -0
  402. package/ts/src/mirror/defaultResolution.ts +199 -0
  403. package/ts/src/mirror/mirrorForm.ts +43 -0
  404. package/ts/src/mirror/orchestration.ts +364 -0
  405. package/ts/src/mirror/reception.ts +194 -0
  406. package/ts/src/mirror/render.ts +75 -0
  407. package/ts/src/mirror/runtimeSession.ts +205 -0
  408. package/ts/src/mode/operatingMode.ts +148 -0
  409. package/ts/src/observability/callOutcome.ts +115 -0
  410. package/ts/src/observability/inspectLedger.ts +329 -0
  411. package/ts/src/observability/ledgerHooks.ts +126 -0
  412. package/ts/src/observability/llmCalls.ts +154 -0
  413. package/ts/src/persona/detectPersona.ts +81 -0
  414. package/ts/src/planning/promptAssembly.ts +111 -0
  415. package/ts/src/planning/weekPending.ts +81 -0
  416. package/ts/src/planning/weekPlan.ts +183 -0
  417. package/ts/src/planning/weekSave.ts +117 -0
  418. package/ts/src/providers/config.ts +189 -0
  419. package/ts/src/providers/cost.ts +64 -0
  420. package/ts/src/providers/credits.ts +204 -0
  421. package/ts/src/providers/embedding.ts +321 -0
  422. package/ts/src/providers/familyProviders.ts +147 -0
  423. package/ts/src/providers/llm.ts +334 -0
  424. package/ts/src/providers/openrouter.ts +244 -0
  425. package/ts/src/providers/redaction.ts +110 -0
  426. package/ts/src/providers/replay.ts +15 -0
  427. package/ts/src/providers/transport.ts +410 -0
  428. package/ts/src/repair/encodingRepair.ts +253 -0
  429. package/ts/src/runtime/backup.ts +151 -0
  430. package/ts/src/runtime/channel.ts +146 -0
  431. package/ts/src/runtime/config.ts +168 -0
  432. package/ts/src/runtime/diagnose.ts +686 -0
  433. package/ts/src/runtime/git.ts +510 -0
  434. package/ts/src/runtime/installKind.ts +220 -0
  435. package/ts/src/runtime/migrate.ts +154 -0
  436. package/ts/src/runtime/packageIdentity.ts +102 -0
  437. package/ts/src/runtime/releaseNotes.ts +244 -0
  438. package/ts/src/runtime/status.ts +557 -0
  439. package/ts/src/runtime/strategies/clone.ts +200 -0
  440. package/ts/src/runtime/strategies/package.ts +328 -0
  441. package/ts/src/runtime/treeRoot.ts +30 -0
  442. package/ts/src/runtime/update.ts +445 -0
  443. package/ts/src/runtime/updateGate.ts +40 -0
  444. package/ts/src/runtime/updatePipeline.ts +159 -0
  445. package/ts/src/runtime/version.ts +36 -0
  446. package/ts/src/runtime/wiring.ts +130 -0
  447. package/ts/src/search/memorySearch.ts +338 -0
  448. package/ts/src/search/ranker.ts +154 -0
  449. package/ts/src/seed/seed.ts +256 -0
  450. package/ts/src/seed/seedYaml.ts +133 -0
  451. package/ts/src/soul/apply.ts +218 -0
  452. package/ts/src/soul/harvest.ts +267 -0
  453. package/ts/src/soul/prompts/soul_beauty_voice.md +103 -0
  454. package/ts/src/soul/prompts/soul_self_voice.md +219 -0
  455. package/ts/src/soul/prompts/soul_wisdom_voice.md +121 -0
  456. package/ts/src/soul/prompts.ts +85 -0
  457. package/ts/src/soul/render.ts +358 -0
  458. package/ts/src/soul/state.ts +212 -0
  459. package/ts/src/soul/transition.ts +37 -0
  460. package/ts/src/tasks/journeyPathParse.ts +113 -0
  461. package/ts/src/tasks/taskImportSync.ts +142 -0
  462. package/ts/src/tasks/taskStore.ts +312 -0
  463. package/ts/src/tasks/weekView.ts +120 -0
  464. package/ts/src/util/clipCodePoints.ts +26 -0
  465. package/ts/src/util/paths.ts +63 -0
  466. package/ts/src/util/program.ts +9 -0
  467. package/ts/src/util/pyGenerators.ts +144 -0
  468. package/ts/src/util/pythonText.ts +317 -0
  469. package/ts/src/util/semver.ts +45 -0
  470. package/ts/src/util/shellWord.ts +25 -0
  471. package/ts/src/util/slug.ts +64 -0
  472. package/ts/src/welcome/card.ts +339 -0
  473. package/ts/src/welcome/statusLine.ts +101 -0
  474. package/ts/src/welcome/updateCache.ts +129 -0
@@ -0,0 +1,34 @@
1
+ // A Delivery Story's aggregate checkpoint status: its writer, and one of its readers.
2
+ //
3
+ // `aggregate_checkpoint_status` is an ordered list cell on the delivery cursor,
4
+ // one `<checkpoint>:<status>` entry per Delivery Story checkpoint reached: the Plan
5
+ // (`plan:pending`, `plan:approved`), then validation, the debt review, coherence,
6
+ // and done. `replaceStatus` writes every entry, for the Plan and closure modules.
7
+ // `hasDeliveryStoryPlan` is the flow unit's reader (CR105), kept beside the writer
8
+ // so the two agree on the Plan's prefix. The other readers still test entries by
9
+ // hand: `implementationGuard.ts` and the Plan approval test `plan:approved`, and
10
+ // `deliveryStoryClosure.ts` tests the entry each closure step expects.
11
+
12
+ /**
13
+ * Python `_replace_status`.
14
+ *
15
+ * Keep every entry whose prefix differs, then APPEND. Shared by
16
+ * `deliveryStoryPlan.ts` and `deliveryStoryClosure.ts`, which need the identical
17
+ * rule: the order is part of the serialized cell a compare-and-swap matches on.
18
+ */
19
+ export function replaceStatus(
20
+ existing: readonly string[],
21
+ checkpoint: string,
22
+ status: string,
23
+ ): string[] {
24
+ const prefix = `${checkpoint}:`;
25
+ return [...existing.filter((item) => !item.startsWith(prefix)), `${checkpoint}:${status}`];
26
+ }
27
+
28
+ /**
29
+ * Whether the Delivery Story's Plan is recorded: pending approval, approved, or
30
+ * followed by any later checkpoint, since each of those is reached through it.
31
+ */
32
+ export function hasDeliveryStoryPlan(statuses: readonly string[]): boolean {
33
+ return statuses.some((item) => item.startsWith("plan:"));
34
+ }
@@ -0,0 +1,149 @@
1
+ // CV22.DS7.US8 plateau 3 — ordinary Plan approval.
2
+ //
3
+ // Port of `approve_plan_checkpoint` and `render_plan_approval` from
4
+ // `src/memory/builder/lifecycle.py`.
5
+ //
6
+ // The detail worth naming: an ordinary approval INVALIDATES a pending authority
7
+ // receipt with `ordinary_approval_used`, rather than leaving it pending or dropping
8
+ // it. Leaving it pending would let the same authority be consumed a second time
9
+ // after the Navigator already approved by hand; dropping it silently would lose the
10
+ // record of why it never applied.
11
+ //
12
+ // CR112: approval reads the plan. Until then an untouched scaffold was approvable,
13
+ // because nothing opened `plan.md`. An approval now refuses, before any write, while
14
+ // any section the approval requires is missing, empty, pending, or still the
15
+ // scaffold's own sentences -- the same list the preauthorized route checks. The
16
+ // precondition that the cursor holds a Plan awaiting approval is a refusal too, told
17
+ // apart as already complete, waiting on another confirmation, or not reached (CR067).
18
+
19
+ import { existsSync } from "node:fs";
20
+ import type { WritableDatabase } from "#db/database.ts";
21
+ import { planSectionsToAuthor } from "./artifacts/scaffoldState.ts";
22
+ import { cardText, cardWrapped } from "./card.ts";
23
+ import { normalizeRequired } from "./cursorTransitions.ts";
24
+ import {
25
+ type BuilderDeliveryCursor,
26
+ type CursorWriteDeps,
27
+ getDeliveryCursor,
28
+ setDeliveryCursor,
29
+ setTo,
30
+ } from "./deliveryCursor.ts";
31
+ import { LifecycleRefusal, refuseIfAlreadyComplete } from "./lifecycleRefusal.ts";
32
+ import { renderLifecycleRibbon } from "./lifecycleRibbon.ts";
33
+ import { displayPath } from "./projectPaths.ts";
34
+ import { wrapAriadSurface } from "./surfaceProtocol.ts";
35
+
36
+ export interface ApprovePlanOptions {
37
+ readonly journey: string;
38
+ readonly method: string;
39
+ /**
40
+ * The story package's `plan.md`. `null` when the journey has no project, so there
41
+ * is no file to read and approval proceeds as it always did. Required, not optional:
42
+ * the rule lives in this argument, and a caller that could omit it could skip the
43
+ * rule without anyone deciding to (CR112's handoff review, finding 1).
44
+ */
45
+ readonly planArtifactPath: string | null;
46
+ /** The project the refusal prints the path relative to. */
47
+ readonly projectRoot?: string | null;
48
+ }
49
+
50
+ /**
51
+ * Refuse, before any write, a plan that is not yet a plan: any section in
52
+ * `PLAN_APPROVAL_SECTIONS` missing, empty, pending, or still the scaffold's -- the list
53
+ * `build show` prints for the same file (CR111 D4).
54
+ */
55
+ function refuseUnauthoredPlan(planPath: string | null, projectRoot: string | null): void {
56
+ if (planPath === null) return;
57
+ const unauthored = planSectionsToAuthor(planPath);
58
+ if (unauthored.length === 0) return;
59
+ const shown = displayPath(planPath, projectRoot);
60
+ throw new LifecycleRefusal(
61
+ "plan_approval",
62
+ "missing_evidence",
63
+ existsSync(planPath)
64
+ ? `Plan approval needs an authored plan. Still to author in ${shown}: ${unauthored.join(", ")}.`
65
+ : `Plan approval needs an authored plan, and ${shown} does not exist.`,
66
+ );
67
+ }
68
+
69
+ /** Python `approve_plan_checkpoint`. */
70
+ export function approvePlanCheckpoint(
71
+ db: WritableDatabase,
72
+ options: ApprovePlanOptions,
73
+ deps: CursorWriteDeps,
74
+ ): BuilderDeliveryCursor {
75
+ const journey = normalizeRequired(options.journey, "journey");
76
+ const method = normalizeRequired(options.method, "method");
77
+
78
+ const existing = getDeliveryCursor(db, journey);
79
+ if (existing === null) throw new Error("delivery cursor is required before plan approval");
80
+ refuseIfAlreadyComplete("plan_approval", existing);
81
+ if (
82
+ existing.activeCheckpoint !== "after_plan" ||
83
+ existing.pendingConfirmation !== "navigator_approval"
84
+ ) {
85
+ if (existing.pendingConfirmation && existing.pendingConfirmation !== "navigator_approval") {
86
+ throw new LifecycleRefusal(
87
+ "plan_approval",
88
+ "pending_confirmation",
89
+ `Plan approval is blocked: pending confirmation ${existing.pendingConfirmation}.`,
90
+ );
91
+ }
92
+ throw new LifecycleRefusal(
93
+ "plan_approval",
94
+ "not_reached",
95
+ "Plan approval requires a Plan awaiting approval: run plan-item first.",
96
+ );
97
+ }
98
+ refuseUnauthoredPlan(options.planArtifactPath, options.projectRoot ?? null);
99
+
100
+ let receipt = existing.planPreauthorization;
101
+ if (receipt !== null && receipt.status === "pending") {
102
+ receipt = { ...receipt, status: "invalidated", reason: "ordinary_approval_used" };
103
+ }
104
+
105
+ return setDeliveryCursor(
106
+ db,
107
+ {
108
+ journey,
109
+ method,
110
+ activeItem: existing.activeItem,
111
+ activeItemTitle: existing.activeItemTitle,
112
+ activeItemLevel: existing.activeItemLevel,
113
+ activeCheckpoint: null,
114
+ pendingConfirmation: null,
115
+ lastDeliveryEvent: "plan_approved",
116
+ cadenceProfile: existing.cadenceProfile,
117
+ cadenceLimits: existing.cadenceLimits,
118
+ granularityDecision: existing.granularityDecision,
119
+ navigatorFlowUnit: existing.navigatorFlowUnit,
120
+ childWorkItems: existing.childWorkItems,
121
+ aggregateCheckpointStatus: existing.aggregateCheckpointStatus,
122
+ cursorGeneration: existing.cursorGeneration,
123
+ planPreauthorization: setTo(receipt),
124
+ },
125
+ deps,
126
+ );
127
+ }
128
+
129
+ /** Python `render_plan_approval`. */
130
+ export function renderPlanApproval(cursor: BuilderDeliveryCursor): string {
131
+ const body = `${[
132
+ "Delivery",
133
+ renderLifecycleRibbon("implement", cursor.activeItemLevel),
134
+ "",
135
+ "╭────────────────────────────────────────────────────────╮",
136
+ "│ 🟩■ PLAN APPROVED │",
137
+ "│ │",
138
+ cardText("active item"),
139
+ cardText(cursor.activeItem ?? "none"),
140
+ "│ │",
141
+ cardText("last delivery event"),
142
+ cardText(cursor.lastDeliveryEvent ?? "none"),
143
+ "│ │",
144
+ cardText("boundary"),
145
+ ...cardWrapped("Implementation may begin under the approved Plan contract."),
146
+ "╰────────────────────────────────────────────────────────╯",
147
+ ].join("\n")}\n`;
148
+ return wrapAriadSurface("plan_approved", body);
149
+ }
@@ -0,0 +1,292 @@
1
+ // CV22.DS7.US8 — validated Builder argv → ported command leaf.
2
+ //
3
+ // Plateau 8 promotes the mapping used by the command corpus and lifecycle smoke
4
+ // into production. `frontDoor/buildRoute.ts` owns validation and argparse-class
5
+ // exit-2 refusals; this module owns the single argv-to-command mapping used by
6
+ // production, goldens, and smokes so those callers cannot drift.
7
+ //
8
+ // `--check`, `--debt`, and `--difference` are `action="append"` in `build.py`, so
9
+ // every occurrence contributes; `--preauthorize-approval`, `--navigator-accepted`,
10
+ // `--implementation-complete`, and `--use-preauthorization` are `store_true`, so
11
+ // their PRESENCE is the value — reading either kind as a single option would
12
+ // swallow the following token.
13
+
14
+ import {
15
+ type CommandResult,
16
+ runAdoptMethod,
17
+ runApproveDeliveryStoryPlan,
18
+ runApprovePlan,
19
+ runCancelDeliveryStoryPlanPreauthorization,
20
+ runCancelPlanPreauthorization,
21
+ runCheckImplementation,
22
+ runCoherenceDeliveryStory,
23
+ runCoherenceItem,
24
+ runContinueLifecycle,
25
+ runDoneDeliveryStory,
26
+ runDoneItem,
27
+ runInspectMethod,
28
+ runPlanDeliveryStory,
29
+ runPlanItem,
30
+ runPrepareItem,
31
+ runPrepareTemplates,
32
+ runPullCandidates,
33
+ runPullItem,
34
+ runReleaseIntent,
35
+ runReviewDeliveryStory,
36
+ runReviewItem,
37
+ runSetCadence,
38
+ runSetFlowUnit,
39
+ runShowCheckpoint,
40
+ runSyncCursor,
41
+ runValidateDeliveryStory,
42
+ runValidateItem,
43
+ } from "#builder/commands.ts";
44
+ import { StoryPackageAmbiguityError } from "#builder/storyPaths.ts";
45
+ import type { Database, WritableDatabase } from "#db/database.ts";
46
+
47
+ export interface BuilderInvokeDeps {
48
+ /** The clock the cursor writes stamp with. A test pins it; the smoke does not. */
49
+ readonly nowIso: () => string;
50
+ /** `MIRROR_SESSION_ID`, passed in rather than read, as every TS route does. */
51
+ readonly environmentSessionId?: string | null;
52
+ }
53
+
54
+ /** Raised for an argv this mapping does not carry, so a gap cannot pass silently. */
55
+ export class UnsupportedBuilderArgvError extends Error {}
56
+
57
+ /** The Builder leaves that never write and therefore need no live backup. */
58
+ export const READ_ONLY_BUILDER_SUBCOMMANDS = new Set([
59
+ "inspect-method",
60
+ "pull-candidates",
61
+ "check-implementation",
62
+ "show",
63
+ ]);
64
+
65
+ /**
66
+ * Two packages claiming one code is a roadmap defect for the Navigator to settle,
67
+ * not a crash (CR018). Every leaf that resolves the active item's package does so
68
+ * before its first write, so the answer is one `Error:` line, which, like every
69
+ * `Error:` line, claims nothing about what changed. Pull answers the same defect
70
+ * with `EXPAND_BLOCKED` before it gets here.
71
+ */
72
+ function refusingDoubleClaims(leaf: () => CommandResult): CommandResult {
73
+ try {
74
+ return leaf();
75
+ } catch (error) {
76
+ if (!(error instanceof StoryPackageAmbiguityError)) throw error;
77
+ return { stdout: "", stderr: `Error: ${error.message}\n`, exitCode: 1 };
78
+ }
79
+ }
80
+
81
+ export function invokeReadOnlyBuilderArgv(
82
+ db: Database,
83
+ argv: readonly string[],
84
+ environmentSessionId?: string | null,
85
+ ): CommandResult {
86
+ return refusingDoubleClaims(() => readOnlyBuilderLeaf(db, argv, environmentSessionId));
87
+ }
88
+
89
+ export function invokeBuilderArgv(
90
+ db: WritableDatabase,
91
+ argv: readonly string[],
92
+ invokeDeps: BuilderInvokeDeps,
93
+ ): CommandResult {
94
+ return refusingDoubleClaims(() => builderLeaf(db, argv, invokeDeps));
95
+ }
96
+
97
+ function readOnlyBuilderLeaf(
98
+ db: Database,
99
+ argv: readonly string[],
100
+ environmentSessionId?: string | null,
101
+ ): CommandResult {
102
+ const option = (name: string): string | null => {
103
+ const index = argv.lastIndexOf(name);
104
+ return index === -1 ? null : (argv[index + 1] ?? null);
105
+ };
106
+ const positionals = argv.filter(
107
+ (token, index) => index > 0 && !token.startsWith("--") && !argv[index - 1]?.startsWith("--"),
108
+ );
109
+ const shared = {
110
+ method: option("--method") ?? "",
111
+ journey: option("--journey"),
112
+ sessionId: option("--session-id"),
113
+ };
114
+ const context = { db, environmentSessionId: environmentSessionId ?? null };
115
+ if (argv[0] === "inspect-method") {
116
+ return runInspectMethod(context, {
117
+ method: positionals[0] ?? null,
118
+ journey: shared.journey,
119
+ sessionId: shared.sessionId,
120
+ });
121
+ }
122
+ if (argv[0] === "pull-candidates") return runPullCandidates(context, shared);
123
+ if (argv[0] === "check-implementation") return runCheckImplementation(context, shared);
124
+ if (argv[0] === "show") return runShowCheckpoint(context, shared);
125
+ throw new UnsupportedBuilderArgvError(`unsupported read-only argv: ${argv.join(" ")}`);
126
+ }
127
+
128
+ function builderLeaf(
129
+ db: WritableDatabase,
130
+ argv: readonly string[],
131
+ invokeDeps: BuilderInvokeDeps,
132
+ ): CommandResult {
133
+ const option = (name: string): string | null => {
134
+ const index = argv.lastIndexOf(name);
135
+ return index === -1 ? null : (argv[index + 1] ?? null);
136
+ };
137
+ const appended = (name: string): string[] =>
138
+ argv.flatMap((token, index) => (token === name ? [argv[index + 1] ?? ""] : []));
139
+ const positionals = argv.filter(
140
+ (token, index) => index > 0 && !token.startsWith("--") && !argv[index - 1]?.startsWith("--"),
141
+ );
142
+ const environmentSessionId = invokeDeps.environmentSessionId ?? null;
143
+ const context = { db, environmentSessionId };
144
+ const writeContext = {
145
+ db,
146
+ environmentSessionId,
147
+ deps: {
148
+ nowIso: invokeDeps.nowIso,
149
+ },
150
+ };
151
+ const shared = {
152
+ method: option("--method") ?? "",
153
+ journey: option("--journey"),
154
+ sessionId: option("--session-id"),
155
+ };
156
+ switch (argv[0]) {
157
+ case "inspect-method":
158
+ return runInspectMethod(context, {
159
+ method: positionals[0] ?? null,
160
+ journey: shared.journey,
161
+ sessionId: shared.sessionId,
162
+ });
163
+ case "pull-candidates":
164
+ return runPullCandidates(context, shared);
165
+ case "adopt":
166
+ return runAdoptMethod(writeContext, shared);
167
+ case "prepare-templates":
168
+ return runPrepareTemplates(writeContext, shared);
169
+ case "sync-cursor":
170
+ return runSyncCursor(writeContext, shared);
171
+ case "check-implementation":
172
+ return runCheckImplementation(context, shared);
173
+ case "show":
174
+ return runShowCheckpoint(context, shared);
175
+ case "pull-item":
176
+ return runPullItem(writeContext, {
177
+ ...shared,
178
+ itemCode: option("--item-code") ?? "",
179
+ itemTitle: option("--item-title") ?? "",
180
+ itemLevel: option("--item-level") ?? "",
181
+ whyNow: option("--why-now") ?? "",
182
+ });
183
+ case "prepare-item":
184
+ return runPrepareItem(writeContext, shared);
185
+ case "plan-item":
186
+ return runPlanItem(writeContext, {
187
+ ...shared,
188
+ objective: option("--objective"),
189
+ preauthorizeApproval: argv.includes("--preauthorize-approval"),
190
+ stopAfter: option("--stop-after") ?? "navigator_validation",
191
+ });
192
+ case "approve-plan":
193
+ return runApprovePlan(writeContext, {
194
+ ...shared,
195
+ usePreauthorization: argv.includes("--use-preauthorization"),
196
+ });
197
+ case "cancel-plan-preauthorization":
198
+ return runCancelPlanPreauthorization(writeContext, shared);
199
+ case "validate-item":
200
+ return runValidateItem(writeContext, {
201
+ ...shared,
202
+ checks: appended("--check"),
203
+ checksStatus: option("--checks-status") ?? "not_run",
204
+ e2eDecision: option("--e2e-decision") ?? "not_required",
205
+ e2eEvidence: option("--e2e-evidence"),
206
+ navigatorRoute: option("--navigator-route"),
207
+ navigatorAccepted: argv.includes("--navigator-accepted"),
208
+ expectedObservation: option("--expected-observation"),
209
+ passCondition: option("--pass-condition"),
210
+ failCondition: option("--fail-condition"),
211
+ implementationComplete: argv.includes("--implementation-complete"),
212
+ });
213
+ case "review-item":
214
+ return runReviewItem(writeContext, {
215
+ ...shared,
216
+ debtFindings: appended("--debt"),
217
+ debtDecision: option("--decision") ?? "pending",
218
+ deferReason: option("--defer-reason"),
219
+ revisitTrigger: option("--revisit-trigger"),
220
+ });
221
+ case "coherence-item":
222
+ return runCoherenceItem(writeContext, {
223
+ ...shared,
224
+ processAlignment: option("--process"),
225
+ projectAlignment: option("--project"),
226
+ productAlignment: option("--product"),
227
+ localDifferences: appended("--local-difference"),
228
+ });
229
+ case "done-item":
230
+ return runDoneItem(writeContext, {
231
+ ...shared,
232
+ historyAction: option("--history-action"),
233
+ roadmapUpdate: option("--roadmap-update"),
234
+ nextRecommendation: option("--next-recommendation"),
235
+ });
236
+ // -- the aggregate leaves (plateau 5) ----------------------------------
237
+ case "set-flow-unit":
238
+ // `--unit` ABSENT is the inspect face, so it stays `null` rather than "".
239
+ return runSetFlowUnit(writeContext, { ...shared, unit: option("--unit") });
240
+ case "plan-delivery-story":
241
+ return runPlanDeliveryStory(writeContext, {
242
+ ...shared,
243
+ objective: option("--objective"),
244
+ children: appended("--child"),
245
+ preauthorizeApproval: argv.includes("--preauthorize-approval"),
246
+ stopAfter: option("--stop-after") ?? "navigator_validation",
247
+ });
248
+ case "approve-delivery-story-plan":
249
+ return runApproveDeliveryStoryPlan(writeContext, {
250
+ ...shared,
251
+ usePreauthorization: argv.includes("--use-preauthorization"),
252
+ });
253
+ case "cancel-delivery-story-plan-preauthorization":
254
+ return runCancelDeliveryStoryPlanPreauthorization(writeContext, shared);
255
+ case "validate-delivery-story":
256
+ return runValidateDeliveryStory(writeContext, {
257
+ ...shared,
258
+ summary: option("--summary"),
259
+ navigatorAccepted: argv.includes("--navigator-accepted"),
260
+ });
261
+ case "review-delivery-story":
262
+ return runReviewDeliveryStory(writeContext, {
263
+ ...shared,
264
+ decision: option("--decision"),
265
+ summary: option("--summary"),
266
+ });
267
+ case "coherence-delivery-story":
268
+ return runCoherenceDeliveryStory(writeContext, { ...shared, summary: option("--summary") });
269
+ case "done-delivery-story":
270
+ return runDoneDeliveryStory(writeContext, { ...shared, summary: option("--summary") });
271
+ // -- cadence, release intent, continuation (plateau 6) ------------------
272
+ case "set-cadence":
273
+ return runSetCadence(writeContext, {
274
+ ...shared,
275
+ profile: option("--profile"),
276
+ // `action="append"`, like `--check` and `--debt`.
277
+ limits: appended("--limit"),
278
+ });
279
+ case "release-intent":
280
+ // Absent `--intent` is the inspect face, so it stays `null` rather than "".
281
+ return runReleaseIntent(writeContext, { ...shared, intent: option("--intent") });
282
+ case "continue-lifecycle":
283
+ return runContinueLifecycle(writeContext, {
284
+ ...shared,
285
+ historyAction: option("--history-action"),
286
+ roadmapUpdate: option("--roadmap-update"),
287
+ nextRecommendation: option("--next-recommendation"),
288
+ });
289
+ default:
290
+ throw new UnsupportedBuilderArgvError(`unsupported argv: ${argv.join(" ")}`);
291
+ }
292
+ }