mirror-mind 0.0.1 → 0.32.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 (467) hide show
  1. package/.claude/hooks/log-session-end.sh +85 -0
  2. package/.claude/hooks/log-user-prompt.sh +85 -0
  3. package/.claude/hooks/mirror-inject.sh +85 -0
  4. package/.claude/hooks/session-start.sh +85 -0
  5. package/.gemini/hooks/log-assistant.sh +85 -0
  6. package/.gemini/hooks/log-user.sh +85 -0
  7. package/.gemini/hooks/session-end.sh +85 -0
  8. package/.gemini/hooks/session-start.sh +85 -0
  9. package/.pi/extensions/mirror-logger.ts +561 -0
  10. package/.pi/skills/mm-backup/SKILL.md +21 -0
  11. package/.pi/skills/mm-build/SKILL.md +1206 -0
  12. package/.pi/skills/mm-consolidate/SKILL.md +112 -0
  13. package/.pi/skills/mm-consult/SKILL.md +70 -0
  14. package/.pi/skills/mm-conversations/SKILL.md +16 -0
  15. package/.pi/skills/mm-discard/SKILL.md +39 -0
  16. package/.pi/skills/mm-explore/SKILL.md +255 -0
  17. package/.pi/skills/mm-help/SKILL.md +74 -0
  18. package/.pi/skills/mm-identity/SKILL.md +96 -0
  19. package/.pi/skills/mm-journal/SKILL.md +16 -0
  20. package/.pi/skills/mm-journey/SKILL.md +23 -0
  21. package/.pi/skills/mm-journeys/SKILL.md +15 -0
  22. package/.pi/skills/mm-memories/SKILL.md +17 -0
  23. package/.pi/skills/mm-mirror/SKILL.md +98 -0
  24. package/.pi/skills/mm-mute/SKILL.md +18 -0
  25. package/.pi/skills/mm-new/SKILL.md +18 -0
  26. package/.pi/skills/mm-recall/SKILL.md +17 -0
  27. package/.pi/skills/mm-release-notes/SKILL.md +52 -0
  28. package/.pi/skills/mm-seed/SKILL.md +19 -0
  29. package/.pi/skills/mm-shadow/SKILL.md +117 -0
  30. package/.pi/skills/mm-soul/SKILL.md +502 -0
  31. package/.pi/skills/mm-tasks/SKILL.md +24 -0
  32. package/.pi/skills/mm-update/SKILL.md +32 -0
  33. package/.pi/skills/mm-week/SKILL.md +28 -0
  34. package/.pi/skills/mm-welcome/SKILL.md +24 -0
  35. package/AGENTS.md +188 -0
  36. package/README.md +126 -9
  37. package/bin/loader.js +67 -0
  38. package/bin/mirror-hook.js +7 -0
  39. package/bin/mirror.js +7 -0
  40. package/docs/releases/index.md +99 -0
  41. package/docs/releases/pending-cutoffs.md +510 -0
  42. package/docs/releases/v0.10.0.md +123 -0
  43. package/docs/releases/v0.10.1.md +66 -0
  44. package/docs/releases/v0.10.10.md +51 -0
  45. package/docs/releases/v0.10.11.md +39 -0
  46. package/docs/releases/v0.10.12.md +57 -0
  47. package/docs/releases/v0.10.13.md +35 -0
  48. package/docs/releases/v0.10.14.md +42 -0
  49. package/docs/releases/v0.10.15.md +53 -0
  50. package/docs/releases/v0.10.16.md +35 -0
  51. package/docs/releases/v0.10.17.md +43 -0
  52. package/docs/releases/v0.10.2.md +64 -0
  53. package/docs/releases/v0.10.3.md +78 -0
  54. package/docs/releases/v0.10.4.md +42 -0
  55. package/docs/releases/v0.10.5.md +57 -0
  56. package/docs/releases/v0.10.6.md +47 -0
  57. package/docs/releases/v0.10.7.md +53 -0
  58. package/docs/releases/v0.10.8.md +49 -0
  59. package/docs/releases/v0.10.9.md +37 -0
  60. package/docs/releases/v0.11.0.md +86 -0
  61. package/docs/releases/v0.12.0.md +67 -0
  62. package/docs/releases/v0.13.0.md +64 -0
  63. package/docs/releases/v0.14.0.md +68 -0
  64. package/docs/releases/v0.15.0.md +48 -0
  65. package/docs/releases/v0.16.0.md +50 -0
  66. package/docs/releases/v0.16.1.md +55 -0
  67. package/docs/releases/v0.16.2.md +36 -0
  68. package/docs/releases/v0.17.0.md +50 -0
  69. package/docs/releases/v0.17.1.md +58 -0
  70. package/docs/releases/v0.17.2.md +42 -0
  71. package/docs/releases/v0.17.3.md +58 -0
  72. package/docs/releases/v0.18.0.md +84 -0
  73. package/docs/releases/v0.18.1.md +51 -0
  74. package/docs/releases/v0.18.2.md +69 -0
  75. package/docs/releases/v0.19.0.md +85 -0
  76. package/docs/releases/v0.19.1.md +46 -0
  77. package/docs/releases/v0.20.0.md +85 -0
  78. package/docs/releases/v0.21.0.md +61 -0
  79. package/docs/releases/v0.21.1.md +47 -0
  80. package/docs/releases/v0.22.0.md +77 -0
  81. package/docs/releases/v0.22.1.md +42 -0
  82. package/docs/releases/v0.23.0.md +105 -0
  83. package/docs/releases/v0.24.0.md +125 -0
  84. package/docs/releases/v0.25.0.md +107 -0
  85. package/docs/releases/v0.26.0.md +139 -0
  86. package/docs/releases/v0.26.1.md +65 -0
  87. package/docs/releases/v0.26.2.md +43 -0
  88. package/docs/releases/v0.27.0.md +63 -0
  89. package/docs/releases/v0.28.0.md +59 -0
  90. package/docs/releases/v0.29.0.md +61 -0
  91. package/docs/releases/v0.29.1.md +59 -0
  92. package/docs/releases/v0.29.2.md +59 -0
  93. package/docs/releases/v0.29.3.md +93 -0
  94. package/docs/releases/v0.30.0.md +75 -0
  95. package/docs/releases/v0.30.1.md +93 -0
  96. package/docs/releases/v0.30.2.md +66 -0
  97. package/docs/releases/v0.31.0.md +122 -0
  98. package/docs/releases/v0.31.1.md +142 -0
  99. package/docs/releases/v0.31.10.md +118 -0
  100. package/docs/releases/v0.31.11.md +88 -0
  101. package/docs/releases/v0.31.12.md +105 -0
  102. package/docs/releases/v0.31.13.md +99 -0
  103. package/docs/releases/v0.31.14.md +97 -0
  104. package/docs/releases/v0.31.2.md +115 -0
  105. package/docs/releases/v0.31.3.md +142 -0
  106. package/docs/releases/v0.31.4.md +117 -0
  107. package/docs/releases/v0.31.5.md +155 -0
  108. package/docs/releases/v0.31.6.md +132 -0
  109. package/docs/releases/v0.31.7.md +132 -0
  110. package/docs/releases/v0.31.8.md +120 -0
  111. package/docs/releases/v0.31.9.md +120 -0
  112. package/docs/releases/v0.32.0.md +261 -0
  113. package/docs/releases/v0.32.1.md +59 -0
  114. package/docs/releases/v0.8.0.md +118 -0
  115. package/docs/releases/v0.9.0.md +98 -0
  116. package/docs/releases/v0.9.1.md +83 -0
  117. package/package.json +102 -6
  118. package/plugins/mirror-mind/.claude-plugin/plugin.json +13 -0
  119. package/plugins/mirror-mind/hooks/hooks.json +50 -0
  120. package/plugins/mirror-mind/hooks/log-session-end.sh +98 -0
  121. package/plugins/mirror-mind/hooks/log-user-prompt.sh +98 -0
  122. package/plugins/mirror-mind/hooks/mirror-inject.sh +98 -0
  123. package/plugins/mirror-mind/hooks/session-start.sh +98 -0
  124. package/plugins/mirror-mind/mcp/launch.sh +52 -0
  125. package/plugins/mirror-mind/skills/mm-backup/SKILL.md +27 -0
  126. package/plugins/mirror-mind/skills/mm-build/SKILL.md +1206 -0
  127. package/plugins/mirror-mind/skills/mm-consolidate/SKILL.md +112 -0
  128. package/plugins/mirror-mind/skills/mm-consult/SKILL.md +83 -0
  129. package/plugins/mirror-mind/skills/mm-conversations/SKILL.md +17 -0
  130. package/plugins/mirror-mind/skills/mm-discard/SKILL.md +40 -0
  131. package/plugins/mirror-mind/skills/mm-explore/SKILL.md +241 -0
  132. package/plugins/mirror-mind/skills/mm-help/SKILL.md +104 -0
  133. package/plugins/mirror-mind/skills/mm-identity/SKILL.md +96 -0
  134. package/plugins/mirror-mind/skills/mm-journal/SKILL.md +21 -0
  135. package/plugins/mirror-mind/skills/mm-journey/SKILL.md +37 -0
  136. package/plugins/mirror-mind/skills/mm-journeys/SKILL.md +15 -0
  137. package/plugins/mirror-mind/skills/mm-memories/SKILL.md +20 -0
  138. package/plugins/mirror-mind/skills/mm-mirror/SKILL.md +65 -0
  139. package/plugins/mirror-mind/skills/mm-mute/SKILL.md +18 -0
  140. package/plugins/mirror-mind/skills/mm-new/SKILL.md +18 -0
  141. package/plugins/mirror-mind/skills/mm-recall/SKILL.md +17 -0
  142. package/plugins/mirror-mind/skills/mm-release-notes/SKILL.md +31 -0
  143. package/plugins/mirror-mind/skills/mm-seed/SKILL.md +15 -0
  144. package/plugins/mirror-mind/skills/mm-shadow/SKILL.md +117 -0
  145. package/plugins/mirror-mind/skills/mm-soul/SKILL.md +488 -0
  146. package/plugins/mirror-mind/skills/mm-tasks/SKILL.md +36 -0
  147. package/plugins/mirror-mind/skills/mm-update/SKILL.md +30 -0
  148. package/plugins/mirror-mind/skills/mm-week/SKILL.md +46 -0
  149. package/plugins/mirror-mind/skills/mm-welcome/SKILL.md +22 -0
  150. package/scripts/codex-hooks/session-end.sh +85 -0
  151. package/scripts/codex-hooks/session-start.sh +85 -0
  152. package/scripts/codex-mirror.sh +48 -0
  153. package/templates/identity/README.md +119 -0
  154. package/templates/identity/ego/behavior.yaml +52 -0
  155. package/templates/identity/ego/constraints.yaml +15 -0
  156. package/templates/identity/ego/identity.yaml +43 -0
  157. package/templates/identity/journeys/personal-growth.yaml +39 -0
  158. package/templates/identity/organization/identity.yaml +24 -0
  159. package/templates/identity/organization/principles.yaml +17 -0
  160. package/templates/identity/personas/coach.yaml +94 -0
  161. package/templates/identity/personas/designer.yaml +93 -0
  162. package/templates/identity/personas/doctor.yaml +96 -0
  163. package/templates/identity/personas/engineer.yaml +77 -0
  164. package/templates/identity/personas/financial.yaml +97 -0
  165. package/templates/identity/personas/prompt-engineer.yaml +122 -0
  166. package/templates/identity/personas/researcher.yaml +88 -0
  167. package/templates/identity/personas/strategist.yaml +91 -0
  168. package/templates/identity/personas/teacher.yaml +95 -0
  169. package/templates/identity/personas/therapist.yaml +91 -0
  170. package/templates/identity/personas/thinker.yaml +74 -0
  171. package/templates/identity/personas/writer.yaml +76 -0
  172. package/templates/identity/self/config.yaml +16 -0
  173. package/templates/identity/self/soul.yaml +105 -0
  174. package/templates/identity/user/identity.yaml +30 -0
  175. package/ts/src/backup/staging.ts +62 -0
  176. package/ts/src/backup/zipBackup.ts +267 -0
  177. package/ts/src/backup/zipReader.ts +109 -0
  178. package/ts/src/backup/zipWriter.ts +148 -0
  179. package/ts/src/builder/activeCheckpoint.ts +134 -0
  180. package/ts/src/builder/aggregateStatus.ts +34 -0
  181. package/ts/src/builder/approve.ts +149 -0
  182. package/ts/src/builder/argv.ts +292 -0
  183. package/ts/src/builder/ariadMethod.ts +536 -0
  184. package/ts/src/builder/artifacts/artifactSurfaces.ts +106 -0
  185. package/ts/src/builder/artifacts/artifactWriter.ts +113 -0
  186. package/ts/src/builder/artifacts/closureArtifacts.ts +199 -0
  187. package/ts/src/builder/artifacts/deliveryStoryArtifacts.ts +316 -0
  188. package/ts/src/builder/artifacts/planArtifacts.ts +242 -0
  189. package/ts/src/builder/artifacts/scaffoldSections.ts +273 -0
  190. package/ts/src/builder/artifacts/scaffoldState.ts +227 -0
  191. package/ts/src/builder/artifacts/storyFiles.ts +61 -0
  192. package/ts/src/builder/artifacts/storyIndex.ts +166 -0
  193. package/ts/src/builder/cadence.ts +59 -0
  194. package/ts/src/builder/card.ts +192 -0
  195. package/ts/src/builder/checkpointRefused.ts +66 -0
  196. package/ts/src/builder/closure.ts +964 -0
  197. package/ts/src/builder/commands.ts +2053 -0
  198. package/ts/src/builder/cursorPosition.ts +176 -0
  199. package/ts/src/builder/cursorTransitions.ts +77 -0
  200. package/ts/src/builder/deliveryCursor.ts +577 -0
  201. package/ts/src/builder/deliveryStoryClosure.ts +521 -0
  202. package/ts/src/builder/deliveryStoryPlan.ts +536 -0
  203. package/ts/src/builder/deliveryStoryReady.ts +160 -0
  204. package/ts/src/builder/deliveryStoryRoadmapClosure.ts +151 -0
  205. package/ts/src/builder/expand.ts +336 -0
  206. package/ts/src/builder/flowUnit.ts +339 -0
  207. package/ts/src/builder/homeSurface.ts +122 -0
  208. package/ts/src/builder/implementationGuard.ts +125 -0
  209. package/ts/src/builder/index.ts +11 -0
  210. package/ts/src/builder/lifecycleRefusal.ts +92 -0
  211. package/ts/src/builder/lifecycleRibbon.ts +159 -0
  212. package/ts/src/builder/load.ts +313 -0
  213. package/ts/src/builder/methodAdoption.ts +113 -0
  214. package/ts/src/builder/methodDefinition.ts +429 -0
  215. package/ts/src/builder/methodInspection.ts +371 -0
  216. package/ts/src/builder/plan.ts +408 -0
  217. package/ts/src/builder/planPreauthorization.ts +265 -0
  218. package/ts/src/builder/prepare.ts +225 -0
  219. package/ts/src/builder/projectPaths.ts +64 -0
  220. package/ts/src/builder/pull.ts +356 -0
  221. package/ts/src/builder/pullCandidates.ts +463 -0
  222. package/ts/src/builder/pullCandidatesRender.ts +238 -0
  223. package/ts/src/builder/refinementField.ts +93 -0
  224. package/ts/src/builder/releaseIntent.ts +173 -0
  225. package/ts/src/builder/resumeState.ts +84 -0
  226. package/ts/src/builder/resumeSurface.ts +149 -0
  227. package/ts/src/builder/roadmapGrammar.ts +300 -0
  228. package/ts/src/builder/roadmapScan.ts +97 -0
  229. package/ts/src/builder/roadmapScope.ts +210 -0
  230. package/ts/src/builder/scopePhrases.ts +146 -0
  231. package/ts/src/builder/storyPaths.ts +196 -0
  232. package/ts/src/builder/storyPlanPreauthorization.ts +287 -0
  233. package/ts/src/builder/surfaceProtocol.ts +42 -0
  234. package/ts/src/builder/templateGeneration.ts +148 -0
  235. package/ts/src/builder/transition.ts +178 -0
  236. package/ts/src/consult/args.ts +99 -0
  237. package/ts/src/consult/core.ts +122 -0
  238. package/ts/src/consult/modelCatalog.ts +55 -0
  239. package/ts/src/consult/render.ts +47 -0
  240. package/ts/src/conversation/append.ts +414 -0
  241. package/ts/src/conversation/backfill.ts +387 -0
  242. package/ts/src/conversation/closeTail.ts +467 -0
  243. package/ts/src/conversation/extraction.ts +333 -0
  244. package/ts/src/conversation/extractionDriver.ts +130 -0
  245. package/ts/src/conversation/extractionRun.ts +70 -0
  246. package/ts/src/conversation/journeyInference.ts +165 -0
  247. package/ts/src/conversation/journeyRepair.ts +114 -0
  248. package/ts/src/conversation/lifecycleFaces.ts +197 -0
  249. package/ts/src/conversation/lifecycleWrites.ts +313 -0
  250. package/ts/src/conversation/listing.ts +77 -0
  251. package/ts/src/conversation/logger.ts +576 -0
  252. package/ts/src/conversation/loggerCli.ts +282 -0
  253. package/ts/src/conversation/loggerRuntime.ts +259 -0
  254. package/ts/src/conversation/metadataLifecycle.ts +443 -0
  255. package/ts/src/conversation/recall.ts +66 -0
  256. package/ts/src/conversation/sessionComposites.ts +258 -0
  257. package/ts/src/conversation/sessionImport.ts +90 -0
  258. package/ts/src/conversation/transcriptBackfill.ts +141 -0
  259. package/ts/src/cultivation/applyActions.ts +241 -0
  260. package/ts/src/cultivation/cluster.ts +86 -0
  261. package/ts/src/cultivation/consolidationStore.ts +281 -0
  262. package/ts/src/cultivation/promptContext.ts +62 -0
  263. package/ts/src/cultivation/propose.ts +305 -0
  264. package/ts/src/cultivation/scan.ts +155 -0
  265. package/ts/src/db/backupGate.ts +47 -0
  266. package/ts/src/db/bootstrap.ts +108 -0
  267. package/ts/src/db/bootstrapLock.ts +223 -0
  268. package/ts/src/db/copyGuard.ts +60 -0
  269. package/ts/src/db/database.ts +397 -0
  270. package/ts/src/db/decode.ts +66 -0
  271. package/ts/src/db/ftsIntegrity.ts +41 -0
  272. package/ts/src/db/migrateOnOpen.ts +214 -0
  273. package/ts/src/db/migrations.ts +576 -0
  274. package/ts/src/db/readyOnOpen.ts +35 -0
  275. package/ts/src/db/rowDecode.ts +42 -0
  276. package/ts/src/db/schema.ts +432 -0
  277. package/ts/src/db/schemaInventory.ts +225 -0
  278. package/ts/src/db/schemaInventorySnapshot.ts +2107 -0
  279. package/ts/src/db/schemaState.ts +91 -0
  280. package/ts/src/db/schemaTsDivergence.ts +114 -0
  281. package/ts/src/descriptor/descriptorRead.ts +49 -0
  282. package/ts/src/docs/docsLint.ts +265 -0
  283. package/ts/src/explorer/handoff.ts +522 -0
  284. package/ts/src/explorer/render.ts +335 -0
  285. package/ts/src/explorer/story.ts +769 -0
  286. package/ts/src/explorer/transition.ts +72 -0
  287. package/ts/src/extensions/bindings.ts +170 -0
  288. package/ts/src/extensions/catalog.ts +249 -0
  289. package/ts/src/extensions/catalogCommands.ts +513 -0
  290. package/ts/src/extensions/catalogWrites.ts +652 -0
  291. package/ts/src/extensions/contextRuntime.ts +325 -0
  292. package/ts/src/extensions/dispatch.ts +374 -0
  293. package/ts/src/extensions/errors.ts +24 -0
  294. package/ts/src/extensions/manifest.ts +356 -0
  295. package/ts/src/extensions/migrations.ts +350 -0
  296. package/ts/src/extraction/conversation.ts +304 -0
  297. package/ts/src/extraction/conversationMetadata.ts +206 -0
  298. package/ts/src/extraction/fencing.ts +106 -0
  299. package/ts/src/extraction/json.ts +17 -0
  300. package/ts/src/extraction/prompts.ts +470 -0
  301. package/ts/src/frontDoor/args.ts +30 -0
  302. package/ts/src/frontDoor/argvShape.ts +106 -0
  303. package/ts/src/frontDoor/buildLoadRuntime.ts +139 -0
  304. package/ts/src/frontDoor/buildRoute.ts +398 -0
  305. package/ts/src/frontDoor/cli.ts +1865 -0
  306. package/ts/src/frontDoor/cloneRoleGuard.ts +98 -0
  307. package/ts/src/frontDoor/consultRoute.ts +50 -0
  308. package/ts/src/frontDoor/contentTailRoute.ts +239 -0
  309. package/ts/src/frontDoor/conversationLoggerRoute.ts +73 -0
  310. package/ts/src/frontDoor/cultivationRoute.ts +210 -0
  311. package/ts/src/frontDoor/dbPath.ts +131 -0
  312. package/ts/src/frontDoor/dbSafetyToolsRoute.ts +240 -0
  313. package/ts/src/frontDoor/exploreRoute.ts +572 -0
  314. package/ts/src/frontDoor/extensionCatalogRoute.ts +252 -0
  315. package/ts/src/frontDoor/frontDoorLog.ts +57 -0
  316. package/ts/src/frontDoor/identityWrite.ts +36 -0
  317. package/ts/src/frontDoor/journeyWriteRoute.ts +26 -0
  318. package/ts/src/frontDoor/lifecycleWriteRoute.ts +110 -0
  319. package/ts/src/frontDoor/liveBackup.ts +100 -0
  320. package/ts/src/frontDoor/mirrorModeRoute.ts +163 -0
  321. package/ts/src/frontDoor/namedRefusal.ts +35 -0
  322. package/ts/src/frontDoor/nodeSupport.ts +24 -0
  323. package/ts/src/frontDoor/render/consolidate.ts +199 -0
  324. package/ts/src/frontDoor/render/conversations.ts +33 -0
  325. package/ts/src/frontDoor/render/cultivationShared.ts +21 -0
  326. package/ts/src/frontDoor/render/descriptor.ts +20 -0
  327. package/ts/src/frontDoor/render/detectPersona.ts +50 -0
  328. package/ts/src/frontDoor/render/icons.ts +13 -0
  329. package/ts/src/frontDoor/render/identity.ts +59 -0
  330. package/ts/src/frontDoor/render/identityRows.ts +17 -0
  331. package/ts/src/frontDoor/render/inspectPersona.ts +53 -0
  332. package/ts/src/frontDoor/render/journeyStatus.ts +78 -0
  333. package/ts/src/frontDoor/render/journeys.ts +79 -0
  334. package/ts/src/frontDoor/render/list.ts +41 -0
  335. package/ts/src/frontDoor/render/memories.ts +67 -0
  336. package/ts/src/frontDoor/render/recall.ts +49 -0
  337. package/ts/src/frontDoor/render/shadow.ts +155 -0
  338. package/ts/src/frontDoor/render/tasks.ts +99 -0
  339. package/ts/src/frontDoor/render/tasksImportSync.ts +63 -0
  340. package/ts/src/frontDoor/render/week.ts +113 -0
  341. package/ts/src/frontDoor/routing.ts +999 -0
  342. package/ts/src/frontDoor/runtimeRoute.ts +623 -0
  343. package/ts/src/frontDoor/searchRoute.ts +166 -0
  344. package/ts/src/frontDoor/seedPaths.ts +98 -0
  345. package/ts/src/frontDoor/soulRoute.ts +433 -0
  346. package/ts/src/frontDoor/tasksImportSyncRoute.ts +110 -0
  347. package/ts/src/frontDoor/tasksWriteRoute.ts +101 -0
  348. package/ts/src/frontDoor/usage.ts +176 -0
  349. package/ts/src/guards/claudePlugin.ts +252 -0
  350. package/ts/src/guards/packContents.ts +306 -0
  351. package/ts/src/guards/piSourcedSkills.ts +70 -0
  352. package/ts/src/guards/retiredRouteShadows.ts +57 -0
  353. package/ts/src/guards/retiredSurfaces.ts +564 -0
  354. package/ts/src/hooks/claude.ts +176 -0
  355. package/ts/src/hooks/codex.ts +45 -0
  356. package/ts/src/hooks/gemini.ts +126 -0
  357. package/ts/src/hooks/main.ts +109 -0
  358. package/ts/src/hooks/mirrorState.ts +71 -0
  359. package/ts/src/hooks/payload.ts +68 -0
  360. package/ts/src/hooks/runtime.ts +159 -0
  361. package/ts/src/identity/applyConsolidationIdentityUpdate.ts +67 -0
  362. package/ts/src/identity/descriptorGenerate.ts +162 -0
  363. package/ts/src/identity/identityEdit.ts +143 -0
  364. package/ts/src/identity/identityKey.ts +77 -0
  365. package/ts/src/identity/identityRead.ts +69 -0
  366. package/ts/src/identity/identityStore.ts +80 -0
  367. package/ts/src/identity/journeyListing.ts +53 -0
  368. package/ts/src/identity/personaInspect.ts +44 -0
  369. package/ts/src/identity/personaListing.ts +37 -0
  370. package/ts/src/identity/setIdentity.ts +64 -0
  371. package/ts/src/index.ts +231 -0
  372. package/ts/src/init/init.ts +111 -0
  373. package/ts/src/journey/journeyOptions.ts +131 -0
  374. package/ts/src/journey/journeyRemoval.ts +158 -0
  375. package/ts/src/journey/journeyStatus.ts +149 -0
  376. package/ts/src/journey/journeySyncFile.ts +87 -0
  377. package/ts/src/journey/journeyWrite.ts +203 -0
  378. package/ts/src/journey/parentJourney.ts +41 -0
  379. package/ts/src/journey/validateParentJourney.ts +55 -0
  380. package/ts/src/mcp/boundary.ts +151 -0
  381. package/ts/src/mcp/guards.ts +244 -0
  382. package/ts/src/mcp/main.ts +121 -0
  383. package/ts/src/mcp/payload.ts +141 -0
  384. package/ts/src/mcp/protocol.ts +141 -0
  385. package/ts/src/mcp/readModels.ts +241 -0
  386. package/ts/src/mcp/registry.ts +201 -0
  387. package/ts/src/mcp/serve.ts +120 -0
  388. package/ts/src/mcp/tools/deterministic.ts +137 -0
  389. package/ts/src/mcp/tools/providerCrossing.ts +187 -0
  390. package/ts/src/mcp/wire.ts +8 -0
  391. package/ts/src/memory/journal.ts +180 -0
  392. package/ts/src/memory/listing.ts +107 -0
  393. package/ts/src/memory/memoryWrite.ts +88 -0
  394. package/ts/src/memory/reinforcement.ts +35 -0
  395. package/ts/src/mirror/context.ts +161 -0
  396. package/ts/src/mirror/defaultResolution.ts +199 -0
  397. package/ts/src/mirror/orchestration.ts +364 -0
  398. package/ts/src/mirror/reception.ts +194 -0
  399. package/ts/src/mirror/render.ts +75 -0
  400. package/ts/src/mirror/runtimeSession.ts +205 -0
  401. package/ts/src/mode/operatingMode.ts +148 -0
  402. package/ts/src/observability/callOutcome.ts +115 -0
  403. package/ts/src/observability/inspectLedger.ts +329 -0
  404. package/ts/src/observability/ledgerHooks.ts +126 -0
  405. package/ts/src/observability/llmCalls.ts +154 -0
  406. package/ts/src/persona/detectPersona.ts +81 -0
  407. package/ts/src/planning/promptAssembly.ts +111 -0
  408. package/ts/src/planning/weekPending.ts +81 -0
  409. package/ts/src/planning/weekPlan.ts +183 -0
  410. package/ts/src/planning/weekSave.ts +117 -0
  411. package/ts/src/providers/config.ts +189 -0
  412. package/ts/src/providers/cost.ts +64 -0
  413. package/ts/src/providers/credits.ts +204 -0
  414. package/ts/src/providers/embedding.ts +321 -0
  415. package/ts/src/providers/familyProviders.ts +147 -0
  416. package/ts/src/providers/llm.ts +334 -0
  417. package/ts/src/providers/openrouter.ts +244 -0
  418. package/ts/src/providers/redaction.ts +110 -0
  419. package/ts/src/providers/replay.ts +15 -0
  420. package/ts/src/providers/transport.ts +410 -0
  421. package/ts/src/repair/encodingRepair.ts +253 -0
  422. package/ts/src/runtime/backup.ts +151 -0
  423. package/ts/src/runtime/channel.ts +146 -0
  424. package/ts/src/runtime/config.ts +168 -0
  425. package/ts/src/runtime/diagnose.ts +686 -0
  426. package/ts/src/runtime/git.ts +510 -0
  427. package/ts/src/runtime/installKind.ts +220 -0
  428. package/ts/src/runtime/migrate.ts +154 -0
  429. package/ts/src/runtime/packageIdentity.ts +102 -0
  430. package/ts/src/runtime/releaseNotes.ts +244 -0
  431. package/ts/src/runtime/status.ts +557 -0
  432. package/ts/src/runtime/strategies/clone.ts +200 -0
  433. package/ts/src/runtime/strategies/package.ts +328 -0
  434. package/ts/src/runtime/treeRoot.ts +30 -0
  435. package/ts/src/runtime/update.ts +445 -0
  436. package/ts/src/runtime/updateGate.ts +40 -0
  437. package/ts/src/runtime/updatePipeline.ts +159 -0
  438. package/ts/src/runtime/version.ts +36 -0
  439. package/ts/src/runtime/wiring.ts +130 -0
  440. package/ts/src/search/memorySearch.ts +338 -0
  441. package/ts/src/search/ranker.ts +154 -0
  442. package/ts/src/seed/seed.ts +256 -0
  443. package/ts/src/seed/seedYaml.ts +133 -0
  444. package/ts/src/soul/apply.ts +218 -0
  445. package/ts/src/soul/harvest.ts +267 -0
  446. package/ts/src/soul/prompts/soul_beauty_voice.md +103 -0
  447. package/ts/src/soul/prompts/soul_self_voice.md +219 -0
  448. package/ts/src/soul/prompts/soul_wisdom_voice.md +121 -0
  449. package/ts/src/soul/prompts.ts +85 -0
  450. package/ts/src/soul/render.ts +358 -0
  451. package/ts/src/soul/state.ts +212 -0
  452. package/ts/src/soul/transition.ts +37 -0
  453. package/ts/src/tasks/journeyPathParse.ts +113 -0
  454. package/ts/src/tasks/taskImportSync.ts +142 -0
  455. package/ts/src/tasks/taskStore.ts +312 -0
  456. package/ts/src/tasks/weekView.ts +120 -0
  457. package/ts/src/util/clipCodePoints.ts +26 -0
  458. package/ts/src/util/paths.ts +63 -0
  459. package/ts/src/util/program.ts +9 -0
  460. package/ts/src/util/pyGenerators.ts +144 -0
  461. package/ts/src/util/pythonText.ts +317 -0
  462. package/ts/src/util/semver.ts +45 -0
  463. package/ts/src/util/shellWord.ts +25 -0
  464. package/ts/src/util/slug.ts +64 -0
  465. package/ts/src/welcome/card.ts +339 -0
  466. package/ts/src/welcome/statusLine.ts +101 -0
  467. package/ts/src/welcome/updateCache.ts +129 -0
@@ -0,0 +1,510 @@
1
+ [< Releases](index.md)
2
+
3
+ # Pending Cutoffs — the CV22 release
4
+
5
+ **Carried by [v0.32.0](v0.32.0.md).** CV22 [released once, when the migration was complete](../project/decisions.md#cv22-releases-once-when-the-migration-is-complete),
6
+ so the stories that removed a surface had no release note of their own to write in.
7
+ This document is where each one recorded its cutoff; the release note summarizes them in
8
+ one table and links here for the full record. It is not itself a release note, and it is
9
+ not pending any more: it is the detailed cutoff record of `v0.32.0`.
10
+
11
+ A cutoff answers three things for a user: **what no longer exists**, **what to do
12
+ instead**, and **what still works if they do nothing**.
13
+
14
+ ---
15
+
16
+ ## Journey projections and `mirror.journey-projections@1.0`
17
+
18
+ **Story:** [CV22.DS10.TS1](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-ts1-retire-the-projection-seam-and-subsystem/index.md) ·
19
+ **Decision:** [Journey projections retire with the Python core](../project/decisions.md#journey-projections-retire-with-the-python-core-mirror-desktop-is-outside-the-migration)
20
+
21
+ **Removed.** `python -m memory journey-projection` and all five of its operations
22
+ (`capabilities`, `rebuild-operational`, `inspect`, `probe-prepare`, `probe-publish`);
23
+ the `api.journey_projections` Extension API capability added in Extension API `1.1`;
24
+ and the publication of `.mirror/projections` itself. Mirror no longer writes a
25
+ Journey read model to the filesystem, and the `mirror.journey-projections@1.0`
26
+ contract is sunset.
27
+
28
+ **Why.** The contract was built in CV23 for one consumer, Mirror Desktop. That
29
+ application is outside the TypeScript migration — it is alpha, has one user, and
30
+ couples to the Python era well beyond projections. With its only reader deferred,
31
+ porting the subsystem would have served no user of this release.
32
+
33
+ **What to do instead.** An extension that needs durable Journey state owns it: a
34
+ table under its own prefix, or files under its own directory. `hasattr(api,
35
+ "journey_projections")` returns `False`, so feature detection degrades cleanly;
36
+ reaching for the attribute raises with this reason.
37
+
38
+ **What still works.** Everything a Mirror user does. Nothing in Pi, Gemini CLI,
39
+ Codex, or Claude Code read the projection tree, and no surface changed — the
40
+ refresh was a post-commit side effect that never reached stdout.
41
+
42
+ **Mirror Desktop.** Pin to the last Python-bearing release. Its integration with
43
+ the TypeScript core is a separate effort, and that effort defines whatever read
44
+ model it needs. Existing `.mirror/projections/` trees are left on disk, inert and
45
+ readable by that release; nothing deletes them.
46
+
47
+ ---
48
+
49
+ ## The web console, and the scene surface it rendered
50
+
51
+ **Story:** [CV22.DS10.US1](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-us1-web-console-retirement/index.md) ·
52
+ **Decision:** [The web console is retired, not ported](../project/decisions.md#the-web-console-is-retired-not-ported-and-ds7-closes-at-1414)
53
+
54
+ **Removed.** `python -m memory web` and the local console it served — the Identity
55
+ and Workspace perspectives, conversation intelligence, bulk conversation
56
+ maintenance, and allowlisted operation runs. With it go the read models that
57
+ existed only to feed it, and the **scene synthesis**: an LLM-composed reading of
58
+ a journey's current state that was reachable only through the console.
59
+
60
+ **Why.** The console was barely used, and porting it to TypeScript was declined on
61
+ 2026-09-17 after a complete, reviewed plan made the true cost legible. `mirror-gui`
62
+ is the successor surface for anything graphical over Mirror.
63
+
64
+ **What to do instead.** Everything the console showed is available in the terminal:
65
+ `journeys`, `journey <slug>`, `memories`, `conversations`, `tasks`, and the Mirror,
66
+ Builder, Explorer, and Soul modes in any of the four runtimes. There is no
67
+ replacement for the scene synthesis; it was a console-only reading.
68
+
69
+ **What still works.** Every command, every runtime, every mode. If you have never
70
+ run `python -m memory web`, nothing about your Mirror changes.
71
+
72
+ **Your preferences file stays.** `<mirror-home>/web/preferences.json` is left exactly
73
+ where it is — 41 bytes, inert, read by nothing. Mirror does not delete state from
74
+ your home on your behalf. Remove it yourself whenever you like, or leave it.
75
+
76
+ ---
77
+
78
+ ## The extension compatibility host, and `register(api)` as a core-served contract
79
+
80
+ **Story:** [CV22.DS10.TS2](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-ts2-extension-compatibility-host-deletion/index.md)
81
+
82
+ **Removed.** `memory.extensions.compat_host` and every launcher branch that reached it.
83
+ The host was the bridge that let an extension's Python `register(api)` handlers keep
84
+ answering after extension dispatch moved to TypeScript. It ran context providers, ran
85
+ `ext <id> <subcommand>`, and imported an extension at install time to validate its
86
+ `register`. All three are gone.
87
+
88
+ **This does not mean extensions must be written in JavaScript.** An extension may own
89
+ **any** executable runtime, Python very much included. What ended is the *Mirror core*
90
+ owning Python as every extension's permanent compatibility layer.
91
+
92
+ **What to do instead.** Declare a runtime per capability in `skill.yaml`. Migration is
93
+ per capability, not per extension — an extension can move one command at a time, and the
94
+ migrated ones keep working while the rest have not moved yet:
95
+
96
+ ```yaml
97
+ mirror_context_providers:
98
+ - id: campaign_status
99
+ provider_runtime:
100
+ protocol: mirror-context-v1
101
+ command: [node, context-provider.mjs] # or [python3, provider.py]
102
+
103
+ cli:
104
+ subcommands:
105
+ - name: campaigns
106
+ runtime:
107
+ protocol: mirror-cli-v1
108
+ command: [python3, cli.py, campaigns] # or any executable runtime
109
+ ```
110
+
111
+ The command must resolve **inside** the installed extension directory. A manifest that
112
+ reaches outside its own tree is not a contract.
113
+
114
+ **What a capability that has not migrated does now.** It fails explicitly, and it fails
115
+ soft:
116
+
117
+ - a **context provider** with no `provider_runtime` is skipped, `mirror load` completes
118
+ with every other section intact, and a `no_provider_runtime` warning names what went
119
+ dark;
120
+ - a **subcommand** with no runtime refuses with one line naming the extension, the
121
+ subcommand, and the fix — no traceback, no partial output, exit 1;
122
+ - `ext <id>` still **lists** it, flagged `(no runtime declared)`, so a command that needs
123
+ migrating never looks like a command that disappeared;
124
+ - `extensions install` still **succeeds**, and warns which capabilities declare no
125
+ runtime. A skill-only or half-migrated extension is legal.
126
+
127
+ **What still works.** Every extension that declares a runtime. Every non-extension
128
+ command, every runtime, every mode. If none of your extensions registered Python
129
+ handlers, nothing about your Mirror changes.
130
+
131
+ **Install no longer imports your extension.** `register(api)` used to be called at install
132
+ time so a broken extension failed the install rather than the first command a week later.
133
+ With no interpreter in the core, install validates what the manifest *declares* instead.
134
+ The practical difference: a runtime that is declared but cannot start is now reported when
135
+ you run the command, not when you install it.
136
+
137
+ **Your extension's own `SKILL.md` files are part of this** — added 2026-09-23 by
138
+ CV22.DS10.US2 (decision D5), which found the residue while auditing the gate. An installed
139
+ Mirror carries extension skills under
140
+ `~/.mirror-minds/<user>/runtime/skills/<runtime>/ext-*/`, materialized from the
141
+ extension's repository by `extensions sync`. On the machine this was audited,
142
+ `ext-session-export` and `ext-persona-export` still documented **17** invocations of
143
+ `uv run python -m memory ext ...` and `uv run python -m memory seed`.
144
+
145
+ Those lines work today and stop working when the interpreter is deleted. They live in the
146
+ extension's repository, not in Mirror's, so Mirror's own skill-parity guard cannot see or
147
+ fix them: it scans `.pi/skills/`, `.claude/skills/`, and the packaged plugin.
148
+
149
+ **What to do:** rewrite the invocations in your extension's `SKILL.md` to enter
150
+ the front door by the name every Mirror skill uses, which `npm install -g
151
+ mirror-mind` (or `npm link` in a clone) puts on the `PATH`:
152
+
153
+ ```bash
154
+ mirror ext <id> <subcommand>
155
+ ```
156
+
157
+ then re-run `extensions sync` for each runtime so installed copies are refreshed.
158
+ The substitution is mechanical: every `uv run python -m memory` becomes `mirror`,
159
+ and nothing after it changes.
160
+
161
+ ---
162
+
163
+ ## Legacy migration
164
+
165
+ **Story:** [CV22.DS10.TS4](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-ts4-retire-the-unported-surfaces-with-cutoffs/index.md) ·
166
+ **Decision:** [CV22.DS7.TS1 ops tail](../project/decisions.md#cv22ds7ts1-ops-tail-runtime-splits-rehearsal-and-legacy-migration-retire-in-ds10)
167
+
168
+ **Removed.** `python -m memory migrate-legacy validate|run` — the Portuguese-era
169
+ database conversion (`~/.espelho/memoria.db` and its `travessia` vocabulary)
170
+ into a current user home, with its `--report` JSON.
171
+
172
+ **Why.** It converts a database shape that predates CV0. The conversion is a
173
+ one-time act, most early users completed it years ago, and porting a one-time
174
+ converter to TypeScript would have spent migration budget on a path with no
175
+ future callers.
176
+
177
+ **What to do instead.** If you still hold a Portuguese-era database, convert it
178
+ with the **last Python-bearing release**, once, then use the current release
179
+ normally. The command lives on in git history and in that release; it is not
180
+ gone from the world, only from this version.
181
+
182
+ **What still works.** Everything, if your home is already a current home —
183
+ which it is if Mirror has ever started normally for you. Homes converted by the
184
+ old command are ordinary homes and nothing about them changed. The legacy
185
+ `~/.mirror/<user>` location still resolves, so an old *path* keeps working;
186
+ only the *conversion* is gone.
187
+
188
+ ---
189
+
190
+ ## The migration rehearsal tool
191
+
192
+ **Story:** [CV22.DS10.TS4](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-ts4-retire-the-unported-surfaces-with-cutoffs/index.md) ·
193
+ **Decision:** [CV22.DS7.TS1 ops tail](../project/decisions.md#cv22ds7ts1-ops-tail-runtime-splits-rehearsal-and-legacy-migration-retire-in-ds10)
194
+
195
+ **Removed.** The `memory-rehearse-migration` console script, which rehearsed
196
+ the **Python** migration engine against a copy of a database before letting it
197
+ near the real one.
198
+
199
+ **Why.** CV22.DS6 moved migration custody to TypeScript and proved the TS
200
+ engine over real legacy copies. The tool rehearsed an engine that no longer
201
+ runs your migrations, so a green rehearsal had stopped meaning anything about
202
+ what would actually happen.
203
+
204
+ **What to do instead.** Nothing, for the property it protected: the TypeScript
205
+ migration engine is the one that runs, it is covered by its own suites, and
206
+ `backup` still exists for a copy before any upgrade. A rehearsal tool *against
207
+ the TS engine* is separate scope, and would be its own story if the need
208
+ appears.
209
+
210
+ **What still works.** Every migration path. This was developer tooling — it had
211
+ no front-door route, no skill, and no place in any runtime; if you have never
212
+ typed `memory-rehearse-migration`, nothing about your Mirror changes.
213
+
214
+ ---
215
+
216
+ ## Journey admin verbs
217
+
218
+ **Story:** [CV22.DS10.TS4](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-ts4-retire-the-unported-surfaces-with-cutoffs/index.md) ·
219
+ **Refinement:** [CR089](../project/refinement/rs009-cv22-front-door-routing-correctness/cr089-the-journey-route-swallows-export-registry-and-mutate.md)
220
+
221
+ **Removed.** `python -m memory journey export-registry` (the whole Journey
222
+ hierarchy as JSON on stdout) and `python -m memory journey mutate` (a JSON
223
+ mutation request on stdin, answering with a receipt), together with the
224
+ `mirror.journey-mutation@1.0` request shape they served.
225
+
226
+ **Why.** They arrived during a pause-window merge and never entered the CV22
227
+ port denominator — 345 lines with no owner, no TypeScript counterpart, and one
228
+ caller. They were also the clearest case of a routing defect this migration
229
+ has produced: the TypeScript front door claimed the `journey` family and read
230
+ any unknown verb as a journey *slug*, so `export-registry` rendered an empty
231
+ status for a journey that does not exist, with exit 0 — and `mutate`, a
232
+ **write**, did nothing at all, also with exit 0. Rather than port a surface
233
+ nobody had asked for, DS10 removed it and taught the front door to say
234
+ *removed*.
235
+
236
+ **What to do instead.** Read Journey structure with the ordinary commands —
237
+ `journeys` for the hierarchy, `journey <slug>` for one Journey's status. Create
238
+ and change Journeys through the Mirror, Builder, and Explorer surfaces that own
239
+ those acts. There is no replacement for a machine-readable registry dump or a
240
+ batch mutation endpoint; if a future consumer needs one, it is a new contract
241
+ with a named consumer, not a revival of this one.
242
+
243
+ **What still works.** Every Journey you have, exactly as it is. Nothing about
244
+ the data changed — only these two entry points to it. Both verbs now answer in
245
+ one line naming this cutoff, and exit 1 instead of pretending to succeed.
246
+
247
+ **Mirror Desktop.** It called both verbs through Python directly, bypassing the
248
+ front door. It is outside this migration and pins to the last Python-bearing
249
+ release, as its own [cutoff](#journey-projections-and-mirrorjourney-projections10)
250
+ already says. Its integration with the TypeScript core defines whatever Journey
251
+ read and write model it needs.
252
+
253
+ ---
254
+
255
+ ## Conversation metadata backfill
256
+
257
+ **Story:** [CV22.DS10.TS4](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-ts4-retire-the-unported-surfaces-with-cutoffs/index.md)
258
+
259
+ **Removed.** `python -m memory conversations --metadata-backfill-preview`,
260
+ `--metadata-backfill-apply`, and the `--metadata-backfill-mode safe|force`
261
+ they took. This was a **one-shot** pass that generated titles, summaries, and
262
+ tags for conversations recorded before the metadata lifecycle existed
263
+ (pre-ES-001).
264
+
265
+ **Why.** It ran once, for the rows that needed it, and validated nothing
266
+ afterwards. The metadata *lifecycle* — the engine that decides what to write
267
+ and when — is TypeScript-owned and very much alive: it still titles, summarizes,
268
+ and tags conversations as they close.
269
+
270
+ **What to do instead.** Nothing. New conversations get metadata through the
271
+ ordinary close path. A pre-ES-001 conversation that was never backfilled keeps
272
+ the metadata it has — possibly none — and every listing, search, recall, and
273
+ lifecycle face works on it exactly as before.
274
+
275
+ **What still works.** Everything else on `conversations`, including the
276
+ lifecycle faces `--metadata-lifecycle-dry-run`,
277
+ `--metadata-lifecycle-preview-at-message`, `--metadata-lifecycle-apply`, and
278
+ `--metadata-lifecycle-demo`. Also untouched, despite the similar name: the
279
+ **transcript** backfills `conversation-logger backfill-pi-sessions`,
280
+ `backfill-codex-session`, and `backfill-assistant-messages`, which import
281
+ sessions the live hooks never saw. Those are a different feature, they are
282
+ ported, and they stay.
283
+
284
+ ---
285
+
286
+ ## The SQLite Refinement Workbench
287
+
288
+ **Story:** [CV22.DS10.TS4](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-ts4-retire-the-unported-surfaces-with-cutoffs/index.md) ·
289
+ **Decision:** [Project files supersede the SQLite Workbench](../project/decisions.md#project-files-supersede-the-sqlite-workbench-as-shared-refinement-authority)
290
+
291
+ **Removed.** All twenty `build` commands that stored Refinement Work in SQLite
292
+ — `refinement-story create|overview|pull|review|coherence|close|park` and
293
+ `change-request capture|attach|discard|select|confirm|resume|plan|mark-implemented|validate|done|park|reject|promote`
294
+ — together with the read that rendered active RS/CR in the `🧰 Refinement
295
+ field` of `build load`.
296
+
297
+ **Why.** CV20.DS12 made `docs/project/refinement/index.md` the canonical
298
+ Refinement authority, and the 2026-07-30 decision reduced these commands to
299
+ compatibility-only local state. Two authorities for the same work is a
300
+ standing invitation to disagree about focus, status, and identity; this closes
301
+ that by having one.
302
+
303
+ **What to do instead.** Keep Refinement Work in project files, where it is
304
+ reviewable, diffable, and shared. `build load` names the index when a project
305
+ has one, and names the file to create when it does not.
306
+
307
+ **Your rows are still there, and here is how to read them.** Nothing was
308
+ exported, migrated, reconciled, or deleted. Migrations `015`/`016` remain
309
+ applied and both tables keep their contents — Mirror does not remove data from
310
+ your home on your behalf. What went away is the *narrative* reader, so if you
311
+ still have rows worth keeping, this is the query:
312
+
313
+ ```bash
314
+ sqlite3 "file:$HOME/.mirror-minds/<user>/memory.db?mode=ro&immutable=1" \
315
+ "select display_code, title, status from builder_refinement_stories order by position;"
316
+
317
+ sqlite3 "file:$HOME/.mirror-minds/<user>/memory.db?mode=ro&immutable=1" \
318
+ "select display_code, title, status, refinement_story_id
319
+ from builder_change_requests order by position;"
320
+ ```
321
+
322
+ The last Python-bearing release still renders them the old way if you would
323
+ rather read them there before moving anything into the index by hand.
324
+
325
+ **What still works.** Every other `build` command — the whole Ariad delivery
326
+ lifecycle, Pull through Done — is untouched. A journey that already keeps
327
+ Refinement Work in project files, which is every journey that adopted the
328
+ canonical index, sees exactly one change: the field on an index-less project
329
+ now says `authority: project files (not started)` and names the file to
330
+ create, instead of reporting an empty SQLite store.
331
+
332
+ ---
333
+
334
+ ## Release tooling leaves the product command surface
335
+
336
+ `python -m memory runtime release-doctor` and `runtime release-promote` are
337
+ gone from the product command surface. The front door answers both names in one
338
+ line pointing here and exits 1.
339
+
340
+ **Why.** They were offered to every installed user, and no installed user can
341
+ run them: they need a git checkout, a clean working tree, local tags, a
342
+ `stable` branch, and push rights to the repository. A command surface that
343
+ offers an operation only its maintainer can perform is not a feature, it is a
344
+ trap with a good error message. CV22.DS10.US2 decided (D1) that the release
345
+ chain is maintainer tooling rather than product.
346
+
347
+ **What replaces them.** Both moved, unchanged in substance, to scripts run from
348
+ the repository:
349
+
350
+ ```bash
351
+ cd ts
352
+ npm run release:doctor -- --target vX.Y.Z [--stable origin/stable]
353
+ npm run release:promote -- --target vX.Y.Z [--stable stable] [--remote origin] [--dry-run] [--push]
354
+ ```
355
+
356
+ The doctor performs the same eight checks in the same order — repository, clean
357
+ tree, package version, release note, note heading, release index link, tag
358
+ state, stable-ref relation — and is still strictly read-only: it does not tag,
359
+ merge, push, fetch, or edit files. Promotion still runs the doctor first and
360
+ refuses on any failure, still refuses to move a tag that points anywhere other
361
+ than `HEAD`, and still reaches a remote only under an explicit `--push`.
362
+
363
+ **What still works if you do nothing.** Everything, for everyone who is not
364
+ cutting a release. No product command changed behavior, and `runtime status`,
365
+ `version`, `diagnose`, `release-notes`, `update`, `backup`, and `migrate` are
366
+ unaffected. A maintainer on the last Python-bearing release can still run the
367
+ old commands there; on this release, run the `npm run release:*` scripts
368
+ instead.
369
+
370
+ **One thing to know.** The chain is unchanged in shape — release note →
371
+ doctor → promote → `stable` + GitHub Release — and push, tag, stable promotion
372
+ and publication all remain separate, explicitly authorized steps. US3 appended
373
+ npm publication to the same ordered step list, as a printed route: the package is
374
+ staged from CI with provenance by npm's trusted publisher for this repository, and a
375
+ maintainer approves it with 2FA (`npm stage approve`); the script runs none of it.
376
+
377
+ ---
378
+
379
+ ## The Python core
380
+
381
+ **Story:** [CV22.DS10.TS5](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-ts5-python-core-deletion/index.md) ·
382
+ **Decisions:** [The Python core is gone](../project/decisions.md#the-python-core-is-gone-and-the-answers-nobody-can-grade-any-more-are-the-front-doors-own) ·
383
+ [deleted forward, with one recovery point](../project/decisions.md#the-python-core-is-deleted-forward-with-one-recovery-point-cv22-last-python-bearing)
384
+
385
+ **Removed.** The Python core and every way to reach it: the `memory` package
386
+ (`src/memory/`), `python -m memory …` and `uv run python -m memory …`, `uv sync`,
387
+ `pyproject.toml`, and `uv.lock`. With it went:
388
+
389
+ - **the Python API** — `from memory import MemoryClient` and everything under it;
390
+ - **the Python extension API** — `extension.py`, `register(api)`,
391
+ `ExtensionAPI`, and the `api_for_test` helper (the host that called
392
+ `register` was already gone since the [compatibility-host cutoff](#the-extension-compatibility-host-and-registerapi-as-a-core-served-contract));
393
+ - **the migration's revert variables** — the twenty-three `MIRROR_TS_<FAMILY>`
394
+ gates that sent a command back to Python, `MIRROR_TS_MCP` among them;
395
+ - **three path variables** only the Python core read: `EXPORT_DIR`,
396
+ `TRANSCRIPT_EXPORT_DIR`, and `DB_BACKUP_PATH`.
397
+
398
+ Mirror Mind is one TypeScript package run by Node.js 24 or newer.
399
+
400
+ **Why.** CV22 ported every command to TypeScript one at a time, each proven
401
+ against the Python engine before it answered users, and by the end nothing
402
+ reached Python any more. Keeping it would have meant shipping, installing, and
403
+ maintaining a second engine that answered nothing. The last tree that contains
404
+ it is the [`cv22-last-python-bearing`](https://github.com/mirror-mind-ai/mirror/tree/cv22-last-python-bearing)
405
+ tag.
406
+
407
+ **What to do instead.**
408
+
409
+ - **Run commands through the front door.** Every command, its arguments, and
410
+ its output are what they were; only the program in front changed. It is
411
+ `mirror`, on your `PATH` from `npm install -g mirror-mind` or, in a clone,
412
+ from `npm link` once at the root
413
+ ([Running a command](../../REFERENCE.md#running-a-command)):
414
+
415
+ ```bash
416
+ mirror <command>
417
+ ```
418
+
419
+ - **Clean your `.env`.** Remove any `MIRROR_TS_<FAMILY>=0` line and the three
420
+ path variables above: they are inert, and `mirror runtime diagnose` names the
421
+ revert variables if they are still set. The `MIRROR_TS_*_REPLAY` fixture
422
+ paths and `MIRROR_TS_MCP_GUARDS` are unaffected.
423
+ - **Check your identity file.** A home created by `init` before this release
424
+ may still say `uv run python -m memory identity edit user identity` in
425
+ `identity/user/identity.yaml`, and in the `user` identity row it seeded. The
426
+ command is now `mirror identity edit user identity`, or `/mm-identity` in a
427
+ runtime. Mirror does not rewrite your identity on your behalf.
428
+ - **If you had code that imported the Python core**, there is no programmatic
429
+ API to move it to: use the command line or the MCP server. Anything that
430
+ depends on Python internals — Mirror Desktop among them — stays on the last
431
+ Python-bearing release.
432
+ - **If you author extensions**, declare a runtime per capability, as the
433
+ [compatibility-host cutoff](#the-extension-compatibility-host-and-registerapi-as-a-core-served-contract)
434
+ already asked; a manifest's `requires: extension_api` is no longer read.
435
+
436
+ **What still works if you do nothing.** Every command, every runtime, every
437
+ mode, and every existing `memory.db`: the TypeScript engine applies any pending
438
+ migration the first time it opens a database, backup first. The runtime hooks
439
+ have run on Node since this story's first plateau. Three answers changed on
440
+ purpose:
441
+
442
+ - a mistyped command or subcommand gets the front door's own usage error —
443
+ exit 1 for a command, exit 2 for a subcommand, the family's name where the
444
+ Python parser printed `__main__.py`;
445
+ - `runtime migrate` answers `applied`, `nothing pending`, or `declined`, and
446
+ `declined` now exits non-zero where it used to report success;
447
+ - usage lines and hints name `mirror` instead of the Python program.
448
+
449
+ **If a runtime stops logging after the update.** The hooks need `node`, and a
450
+ runtime launched from the desktop may not have it on its `PATH`. Nothing
451
+ breaks — the hook is skipped and one line is written to
452
+ `<mirror home>/hooks.log` — but conversations stop being recorded. Set
453
+ `MIRROR_NODE` to the path of `node`
454
+ ([troubleshooting](../process/troubleshooting.md#hooks-skip-when-a-runtime-cannot-find-node)).
455
+
456
+ **Mirror Desktop, the Windows installer, and the Frame.** Desktop pins to the
457
+ last Python-bearing release, as the [journey projections cutoff](#journey-projections-and-mirrorjourney-projections10)
458
+ says. The Windows installer and the Frame installed and called the Python
459
+ engine; they are retired by CV22.DS10.US3, with [their own cutoff](#the-windows-frame-and-installer)
460
+ below.
461
+
462
+ ---
463
+
464
+ ## The Windows Frame and installer
465
+
466
+ **Story:** [CV22.DS10.US3](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-us3-npm-distribution/index.md) ·
467
+ **Decision:** US3 [D4](../project/roadmap/cv22-typescript-core-port/cv22-ds10-python-retirement-npm-distribution/cv22-ds10-us3-npm-distribution/plan.md#decisions-this-plan-asks-the-navigator-to-take)
468
+
469
+ **Removed.** The Windows installer — the `MirrorMind-Setup-<version>.exe` wizard
470
+ that GitHub Releases carried for v0.30.0 and v0.31.8 — and the Windows Frame, the
471
+ desktop shell it installed, with its first-run wizard, its setup lights, and its
472
+ tabbed Pi sessions. With them go their documentation, the CI workflow that built
473
+ and smoked the artifact, and the profile smoke that workflow ran. Nothing on the
474
+ npm package replaces them: this release has no Windows product.
475
+
476
+ **Why.** Both were built on a premise this release deletes. The installer put
477
+ Git, Node, `uv`, and Pi on the machine, cloned the repository, and ran `uv sync`;
478
+ the Frame ran Mirror's commands by spawning the Python interpreter, and both
479
+ found the tree by the `pyproject.toml` that went with the
480
+ [Python core](#the-python-core). Re-homing them onto the npm package would have
481
+ shipped a Windows product over a core that is tested on macOS and Linux only,
482
+ with no Windows CI and one known Windows-breaking path (a snapshot promotion by
483
+ rename that fails while another process holds the database). The artifact was
484
+ downloaded three times in all — once on v0.30.0, twice on v0.31.8, none since
485
+ August 2026 — and no one is known to run it. A Windows product deserves its own
486
+ story and its own CI, and with no user asking, none is promised.
487
+
488
+ **What to do instead.** On macOS or Linux, install the npm package:
489
+ `npm install -g mirror-mind`, then `mirror init <user>` and the one wiring step
490
+ `init` prints for each runtime it finds. On Windows there is no supported route
491
+ in this release.
492
+
493
+ **What still works if you do nothing.** An installed Frame keeps working exactly
494
+ as it is: it runs the clone it installed, and that clone carries the Python
495
+ engine. The installer and the Frame remain in the
496
+ [`cv22-last-python-bearing`](https://github.com/mirror-mind-ai/mirror/tree/cv22-last-python-bearing)
497
+ tree and in the v0.30.0 and v0.31.8 release assets. Two things to know:
498
+
499
+ - **Do not update from inside the Frame.** Its clone updates by fast-forwarding
500
+ `stable`, and `stable` now points at a tree with no Python engine for the
501
+ Frame to call. The update would complete and the Frame's commands would stop
502
+ answering. Stay on v0.31.14 in the Frame, or move to the npm package on a
503
+ supported platform.
504
+ - **Your mirror home is untouched.** The installer's `init` wrote it at
505
+ `.mirror\<user>` under your user profile, and nothing deletes it. It is an
506
+ ordinary home: copied to a supported machine and named by `MIRROR_HOME`, the
507
+ npm package opens it, migrates it on first open with a backup first, and
508
+ carries on.
509
+
510
+ ---
@@ -0,0 +1,123 @@
1
+ ---
2
+ digest: >
3
+ Mirror Mind v0.10.0 closes CV9.E6 Web Visibility, turning the local web
4
+ console from a documentation browser into a read-only visibility surface for
5
+ real Mirror data. Identity and Workspace now give users two perspectives over
6
+ the same local memory: one reflective, one operational. The release also fixes
7
+ a Pi Builder journey-association bug discovered during personal Mirror
8
+ validation and adds a backup-gated repair path for historical conversations
9
+ that were logged without journeys.
10
+ ---
11
+
12
+ # v0.10.0 — Web Visibility
13
+
14
+ **Date:** 2026-05-25
15
+
16
+ ## Highlights
17
+
18
+ - Identity perspective shows Self, Ego, Shadow, Personas, and memory aggregates
19
+ from real Mirror data.
20
+ - Supported identity and persona objects open into shared detail pages with
21
+ Source Context and honest provenance limits.
22
+ - Workspace shows a journey-centric operational dashboard with briefing,
23
+ conversations, tasks, memories, and decisions.
24
+ - Web routes now consume typed surface read models through `MemoryClient.surfaces`
25
+ instead of composing Mirror meaning directly in route handlers.
26
+ - Pi Builder conversations now attach to the active journey even when a skill
27
+ process does not receive an explicit session id.
28
+ - Historical journeyless conversations can be repaired explicitly with
29
+ `conversation-logger repair-journeys`, which runs as a dry-run by default and
30
+ creates a database backup before `--apply`.
31
+
32
+ ## Where We Started
33
+
34
+ Mirror Mind already had a local web console, but its useful surface was still a
35
+ read-only documentation browser. The database held identity, personas, memories,
36
+ journeys, conversations, and tasks, yet understanding that material required CLI
37
+ commands or direct knowledge of the schema. That contradicted the 1.0 visibility
38
+ promise: a user should be able to open the local Mirror and understand what lives
39
+ inside it.
40
+
41
+ The work began with a product choice: the web app should not become a database
42
+ admin panel. It should show the same Mirror through perspectives. Identity would
43
+ reveal meaning through an editorial psyche map; Workspace would coordinate
44
+ movement through journeys and recent operational context.
45
+
46
+ ## What Changed
47
+
48
+ The web surface now has a dedicated surface composition layer under
49
+ `src/memory/surfaces/`. Atlas/Identity, Workspace, object detail, evidence, and
50
+ search return typed DTOs shaped for the browser. The web server remains a thin
51
+ local transport layer: it serves static assets, serializes surface objects, and
52
+ persists the user's default perspective in the Mirror home.
53
+
54
+ Identity became the reflective front door. It shows structural regions for Self,
55
+ Ego, Shadow, Personas, and Memories. Detail pages share one grammar: title,
56
+ description, rendered content, relationships, Source Context, evidence state,
57
+ and metadata. Source Context deliberately says when content is explicit identity
58
+ or persona material rather than inferred from memories.
59
+
60
+ Workspace became the operational counterpart. It lists active journeys, selects
61
+ a plausible recent journey, and presents the selected journey as a workspace with
62
+ briefing, conversations, tasks, memories, and decisions. Empty and partial states
63
+ remain visible rather than being hidden behind fake completeness.
64
+
65
+ Personal Mirror validation then exposed a deeper problem. Workspace was rendering
66
+ the database accurately, but the database did not reflect recent work: Pi Builder
67
+ sessions had many logged messages with `journey = NULL`. The root cause was that
68
+ SKILL.md commands such as `/mm-build` can run without an exported session id.
69
+ The core logger now falls back to the latest active runtime session, and Pi
70
+ user-message logging refreshes session activity so future Builder activations
71
+ attach to the correct journey.
72
+
73
+ For existing data, the release adds an explicit repair route rather than a
74
+ silent migration. Users can inspect high-confidence candidates first:
75
+
76
+ ```bash
77
+ uv run python -m memory conversation-logger repair-journeys
78
+ ```
79
+
80
+ and apply after review:
81
+
82
+ ```bash
83
+ uv run python -m memory conversation-logger repair-journeys --apply
84
+ ```
85
+
86
+ The apply path creates a database backup before mutation and leaves ambiguous
87
+ rows unchanged.
88
+
89
+ ## Conscious Exclusions
90
+
91
+ This release is read-only. It does not add browser editing for identity,
92
+ memories, journeys, personas, tasks, or conversations.
93
+
94
+ Evidence remains partial. Source Context is present for supported identity and
95
+ persona objects, but there is not yet a full evidence graph across every Mirror
96
+ object.
97
+
98
+ Search remains a skeletal surface contract rather than a full product experience.
99
+ The first web visibility release proves the surface architecture and the Identity
100
+ and Workspace perspectives before broadening navigation.
101
+
102
+ Historical conversation repair is conservative. It does not claim to classify
103
+ every journeyless conversation. Ambiguous rows remain manual work by design.
104
+
105
+ ## What We Learned
106
+
107
+ The final validation mattered because it tested not only the web interface but
108
+ the truth of the underlying data. A beautiful Workspace that reflects stale data
109
+ is worse than an honest empty state. The web surface became a diagnostic mirror
110
+ for the runtime itself: by making journey activity visible, it revealed that the
111
+ logging layer had been losing journey association in Pi Builder flows.
112
+
113
+ That shaped the repair policy. The framework can fix future runtime behavior in
114
+ core, but historical personal memory should not be rewritten silently. Diagnosis,
115
+ backup, and explicit apply are part of user trust.
116
+
117
+ ## Next Horizon
118
+
119
+ CV9 still has Boundary Hardening and Stabilization planned before the full
120
+ Mirror Mind 1.0 boundary closes. After this release, the web visibility foundation
121
+ is in place: future work can deepen evidence, improve unsupported-object states,
122
+ and eventually explore controlled agentic operations in the browser without
123
+ collapsing the read-only visibility promise into premature editing workflows.