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,132 @@
1
+ ---
2
+ digest: >
3
+ v0.31.7 makes the document-first Refinement Workbench transferable between
4
+ contributors and their Mirrors. A natural inspection request now renders one
5
+ standard read-only view from the canonical Markdown index; active Change
6
+ Requests can name a human Driver and branch or pull-request Delivery
7
+ reference; and a project-owned collaboration protocol carries work from
8
+ capture through return handoff. Git remains responsible for history,
9
+ concurrency, conflicts, and recovery. The release adds no Markdown parser,
10
+ shared database, projection, synchronization, watcher, lock, ID service, or
11
+ custom Git protocol, and it never consults legacy SQLite state when the
12
+ canonical index exists.
13
+ ---
14
+
15
+ # v0.31.7 — Collaborative Refinement Work
16
+
17
+ **Date:** 2026-08-03
18
+
19
+ ## Highlights
20
+
21
+ - Adds a standard agent-composed `Refinement Workbench` view for natural
22
+ file-first inspection, including source, focus, RS status, ordered open CRs,
23
+ terminal history, next safe action, and an explicit read-only/SQLite boundary.
24
+ - Adds canonical `Driver` and `Delivery` fields so active execution names one
25
+ accountable human and its branch or pull request without encoding people or
26
+ local runtime state in RS/CR identity.
27
+ - Adds a project-owned Collaborative Refinement Protocol covering inspection,
28
+ capture, selection, planning, assignment, implementation evidence, Navigator
29
+ validation, debt review, terminal closure, return handoff, and Git conflict
30
+ handling.
31
+ - Preserves captured/planned work as unassigned, requires explicit assignment
32
+ before active execution, keeps provenance in terminal history, and never
33
+ infers ownership from a checkout, committer, journey, conversation, or SQLite.
34
+ - Validated through natural Pi prompts, an isolated second-Mirror capture smoke,
35
+ 2,404 local unit/integration tests, clean Ruff checks, and green Python
36
+ 3.10/3.12, TypeScript, and documentation PR CI.
37
+
38
+ ## Where We Started
39
+
40
+ v0.31.6 established the document-first authority boundary: one canonical
41
+ Markdown index owns shared Refinement focus, ordering, and status, linked files
42
+ own narrative and evidence, and Git owns collaboration and recovery. That made
43
+ the Workbench portable, but the first post-release use exposed three experience
44
+ gaps before another contributor could use it independently.
45
+
46
+ Builder entry surfaces pointed to the canonical file without presenting its
47
+ contents. An `in_progress` status could not say who had assumed the work or where
48
+ it was being delivered. And another person's Mirror had no durable project
49
+ protocol for allocating IDs, capturing without changing focus, assigning work,
50
+ validating it, or returning a handoff. Maintainers still had to reconstruct and
51
+ transmit those rules through private conversation.
52
+
53
+ ## What Changed
54
+
55
+ RS002 closed those gaps in three bounded Change Requests.
56
+
57
+ CR005 added a presentation contract to the Builder skill. When asked naturally
58
+ to show the Workbench, Mirror reads the canonical index and relevant linked
59
+ documents, preserves canonical ordering, visibly distinguishes focus, separates
60
+ open work from terminal history, recommends one grounded next action, and states
61
+ that inspection changed nothing and did not consult SQLite. This is agent file
62
+ reading, not a Python Markdown runtime or deterministic Ariad wrapper.
63
+
64
+ CR006 added two explicit columns to the canonical CR table. `Driver` names one
65
+ accountable human contributor. `Delivery` names a pull request when available or
66
+ a Git branch before one exists. Captured and planned work can remain empty;
67
+ active, blocked, and validated work retain both fields. Reassignment and stale
68
+ work disposition remain Navigator decisions, and completed history preserves
69
+ its delivery provenance.
70
+
71
+ CR007 made collaboration durable through an ordinary linked Markdown protocol.
72
+ It defines the complete contributor route: inspect, capture, select, plan,
73
+ assign, implement, validate, review, close, and return a handoff. Capture chooses
74
+ the next unused project-wide ID and requires an explicit RS under the current
75
+ layout while preserving focus. Git surfaces concurrent ID, index, status,
76
+ assignment, and narrative edits; Mirrors never silently renumber, overwrite,
77
+ merge narratives, or use SQLite to resolve semantic conflicts.
78
+
79
+ ## Validation
80
+
81
+ The presentation was validated in newly loaded Pi sessions using the natural
82
+ prompt `Mostre o Refinement Workbench`. The output showed canonical focus,
83
+ ordering, statuses, Driver/Delivery only where assigned, terminal history, and
84
+ the read-only boundary.
85
+
86
+ The collaboration route was validated with the shorter prompt `como trabalhar
87
+ com refinements?`. The first response omitted return handoff and Git concurrency,
88
+ which correctly failed the acceptance boundary. Skill guidance was tightened in
89
+ cycle, and the repeated response covered all nine movements, handoff fields, and
90
+ semantic-conflict behavior.
91
+
92
+ An isolated second-Mirror smoke received a natural request to capture a fully
93
+ specified refinement under RS002. It allocated the next ID, created the CR
94
+ narrative, appended a captured/unassigned row, preserved current focus, linked
95
+ the CR from its RS, and avoided SQLite. The generated CR existed only in the
96
+ disposable `/tmp` project and never entered the real Workbench.
97
+
98
+ ## Conscious Exclusions
99
+
100
+ - **No Markdown parser or second state model.** The agent reads project files;
101
+ Python does not parse or persist their meaning.
102
+ - **No assignment service.** Driver and Delivery are explicit Markdown facts,
103
+ not locks, leases, heartbeats, or inferred presence.
104
+ - **No automatic IDs or conflict resolution.** Contributors inspect the complete
105
+ index, and Git exposes concurrent choices for human resolution.
106
+ - **No automatic Git operations.** The protocol does not create branches,
107
+ commits, pushes, pull requests, merges, tags, or releases.
108
+ - **No legacy-state reconciliation.** File-first projects do not inspect,
109
+ migrate, compare, delete, or dual-write SQLite Workbench rows.
110
+ - **Claude Builder parity remains separate.** This release improves the Pi and
111
+ shared Gemini/Codex skill surface without changing Claude's independently
112
+ tuned Builder skill.
113
+
114
+ ## What We Learned
115
+
116
+ Making project state portable was not the same as making collaboration
117
+ transferable. A second person also needs a visible field, explicit ownership,
118
+ and a shared operating route. Those needs were satisfied with documents and
119
+ agent guidance rather than a coordination subsystem.
120
+
121
+ Natural-language validation mattered. The first protocol response looked useful
122
+ while omitting the final handoff and conflict boundary. Treating that omission as
123
+ a failed acceptance test produced a better contract without introducing parser
124
+ or workflow machinery.
125
+
126
+ ## Next Horizon
127
+
128
+ The next evidence should come from a real contributor using their own journey,
129
+ Mirror, branch, and pull request to add Builder/Ariad refinements. Any future
130
+ automation should answer a repeated observed failure in that collaboration,
131
+ not anticipate one. RS001's runtime-trust CRs remain independent canonical work
132
+ and are not promised by this release.
@@ -0,0 +1,120 @@
1
+ ---
2
+ digest: >
3
+ v0.31.8 introduces the Windows Desktop Frame as Mirror Mind's primary Windows
4
+ experience. One installer now carries a native Electron window for guided
5
+ onboarding, tabbed conversations through real Pi/ConPTY sessions, setup health,
6
+ controlled Pi updates, and a preserved terminal recovery route. The Frame
7
+ orchestrates the existing Mirror CLI and pins the homologated Pi version rather
8
+ than reimplementing either runtime. Packaging is fail-closed and validated on
9
+ Windows through unit tests, a session simulator, a packaged Electron/ConPTY
10
+ smoke, and a real non-ASCII user-profile smoke. The first release intentionally
11
+ remains unsigned and does not update the Mirror core from inside the Frame.
12
+ ---
13
+
14
+ # v0.31.8 — Windows Desktop Frame
15
+
16
+ **Date:** 2026-08-07
17
+
18
+ ## Highlights
19
+
20
+ - Adds the native Windows Desktop Frame: guided first-run onboarding, tabbed Pi
21
+ conversations over real ConPTY sessions, setup health, persona inspection,
22
+ subscription login, and controlled Pi maintenance in one window.
23
+ - Makes the Frame the primary Windows shortcut while preserving `Mirror Mind
24
+ (Terminal)` as an independent recovery and maintenance path.
25
+ - Pins Pi exactly to the homologated `0.83.0` release; install and update paths
26
+ converge absent, older, and newer versions to that pin and never use `@latest`.
27
+ - Gates every Frame PTY through one session authority so Pi cannot update while
28
+ Mirror, login, shell, or bootstrap sessions are open.
29
+ - Packages the Frame and its native ConPTY dependency through one fail-closed
30
+ build path before compiling installer `0.31.0`.
31
+ - Validates the integrated release on Python 3.10/3.12, TypeScript, documentation,
32
+ Pester, PSScriptAnalyzer, 63 Frame tests, session simulation, packaged
33
+ Electron/ConPTY, and a real non-ASCII `USERPROFILE` smoke.
34
+
35
+ ## Where We Started
36
+
37
+ The existing Windows installer could bootstrap Mirror Mind and open Pi in a
38
+ terminal, but the experience still exposed installation and runtime mechanics as
39
+ the product. First-run identity setup, subscription login, health diagnosis, and
40
+ conversation management were separate terminal interactions. That path remained
41
+ valuable for recovery, but it was not yet the coherent desktop experience tested
42
+ through the ES-004 functional mockup.
43
+
44
+ The first Frame proposal proved the product direction and a viable
45
+ Electron/ConPTY stack. Release review then exposed a stricter boundary: a native
46
+ window also becomes an installer, updater, credential-transit, native-binary,
47
+ and session-lifecycle responsibility. Shipping it required more than rendering a
48
+ terminal inside Electron.
49
+
50
+ ## What Changed
51
+
52
+ The Frame now installs as a private component of Mirror Mind and follows the
53
+ Mirror release version. Its renderer runs sandboxed with context isolation and no
54
+ Node integration. A narrow preload API reaches main-process handlers that verify
55
+ their sender, reject unexpected navigation and windows, validate environment
56
+ values against CR/LF injection, and execute only fixed command-registry entries.
57
+ Pi owns OAuth tokens; the Frame observes only readiness and completion signals.
58
+
59
+ Onboarding performs the real `.env` → `memory init` → `seed` flow and remains
60
+ recoverable when initialization fails. Reinstalling preserves the identity home
61
+ without silently rebinding it. The user explicitly enters the same identity name,
62
+ and OpenRouter credentials remain guarded transient state until persistence.
63
+
64
+ All PTYs participate in one `SessionGate`. Mirror conversations, hidden login,
65
+ system terminals, and bootstrap sessions prevent a concurrent Pi update. The
66
+ homologated Pi version lives in `installer/pi-version.txt`; both installer and
67
+ packaged Frame read that installed authority and converge precisely to `0.83.0`.
68
+ A missing or malformed pin disables automatic Pi maintenance rather than falling
69
+ back to an uncontrolled version.
70
+
71
+ Packaging is now reproducible outside CI. `frame/scripts/package.ps1`
72
+ materializes the pinned Electron binary, assembles runtime dependencies, and
73
+ feeds one verified payload into Inno Setup. Missing `MirrorFrame.exe`, ConPTY,
74
+ preload, renderer, or required assets aborts the build. CI follows the same
75
+ `npm ci → tests → simulator → package → verify → installer → smoke → upload`
76
+ route and exercises the installed path under a genuinely non-ASCII Windows user
77
+ profile.
78
+
79
+ ## Distribution Boundary
80
+
81
+ The downloadable artifact is `MirrorMind-Setup-0.31.0.exe`. Installer versioning
82
+ is independent because `0.31.0` describes the materially changed bootstrapper;
83
+ the Frame inside it is version `0.31.8`, matching Mirror itself.
84
+
85
+ The installer is not code-signed in this release. Windows SmartScreen may warn
86
+ before execution. The release publishes a SHA-256 checksum so users can verify
87
+ the exact artifact produced by the integrated GitHub Actions run.
88
+
89
+ ## Conscious Exclusions
90
+
91
+ - **No automatic Mirror-core update inside the Frame.** The installed Frame and
92
+ core move together through a new installer; conscious manual maintenance
93
+ remains available through the Terminal shortcut.
94
+ - **No unpinned Pi channel.** Moving beyond Pi `0.83.0` requires rerunning the
95
+ login, OAuth, fallback, and update compatibility matrix.
96
+ - **No code-signing certificate.** The first installer remains unsigned, with
97
+ the SmartScreen consequence documented rather than hidden.
98
+ - **No Microsoft Store distribution or TD-003 transport work.** Those require a
99
+ separate delivery and trust boundary.
100
+ - **No Python-core redesign.** The Frame orchestrates the existing CLI and does
101
+ not alter the core under `src/memory/`.
102
+ - **No in-executable Mirror icon stamping.** Installer shortcuts and the window
103
+ carry Mirror branding, while the executable resource may still show Electron's
104
+ default icon in some Windows surfaces.
105
+
106
+ ## What We Learned
107
+
108
+ A desktop shell is not merely a new presentation layer. Once it owns onboarding,
109
+ PTYs, updates, and installation, correctness depends on authority boundaries that
110
+ remain valid when the renderer is wrong, the path contains spaces or accents,
111
+ the native ABI differs from ordinary Node, or a setup attempt fails halfway.
112
+ Making those boundaries executable in the canonical packaging and CI route was
113
+ what turned the Frame from a promising prototype into a releasable Windows path.
114
+
115
+ ## Next Horizon
116
+
117
+ The next evidence should come from installing the exact release asset on a clean
118
+ Windows environment and observing real onboarding and daily conversation use.
119
+ Code signing, executable-resource branding, broader distribution, and any future
120
+ Frame-aware core updater remain separate decisions informed by that use.
@@ -0,0 +1,120 @@
1
+ ---
2
+ digest: >
3
+ v0.31.9 removes Mirror Mind's artificial two-level journey limit and makes
4
+ organizational journey trees recursively visible across textual and web
5
+ surfaces. Parent assignment now supports arbitrary depth while rejecting
6
+ direct, indirect, and malformed cycles; moves preserve journey identity,
7
+ project paths, and filesystem content. Journey removal is conservative and
8
+ transactional, allowing only empty leaves and never cascading into associated
9
+ records. The release also replaces the TypeScript migration's strict Python
10
+ feature freeze with an explicit moving-target parity contract, so the current
11
+ product can evolve while command authority transfers incrementally to TS.
12
+ ---
13
+
14
+ # v0.31.9 — Recursive Journey Hierarchy
15
+
16
+ **Date:** 2026-08-14
17
+
18
+ ## Highlights
19
+
20
+ - Allows journeys to form organizational trees of arbitrary depth using the
21
+ existing `parent_journey` metadata contract, with no schema migration.
22
+ - Rejects direct and indirect cycles before mutation and keeps malformed legacy
23
+ cycles bounded on read surfaces instead of hanging.
24
+ - Renders the complete hierarchy recursively in `mm-journeys`, Workspace
25
+ navigation, Current Scene, All Journeys, and journey selectors.
26
+ - Shows complete root-to-selected lineage while keeping conversations, memories,
27
+ tasks, attachments, routing, Builder state, and Scene movement exact to each
28
+ journey.
29
+ - Preserves stable journey ids and independent `project_path` values when a
30
+ journey or subtree moves; no filesystem content is inferred or moved.
31
+ - Makes removal fail closed: parents with children and leaves with associated
32
+ records are refused in one transaction; only empty leaves can be removed.
33
+ - Establishes a moving-target TypeScript strangler contract: Python may evolve
34
+ while it remains authority for an unported command, and each change becomes
35
+ explicit TS parity scope before authority transfers.
36
+
37
+ ## Where We Started
38
+
39
+ CV15 originally shipped a deliberately small one-level hierarchy. That was enough
40
+ to prove that parent-child relationships could organize the journey field without
41
+ merging context, and Current Scene then used that map to return cognitive
42
+ location. Real use exposed the remaining artificial boundary: life areas,
43
+ businesses, products, and projects naturally form deeper structures, while Mirror
44
+ refused a child beneath an existing child.
45
+
46
+ The TypeScript strangler introduced a second tension. Its original policy froze
47
+ new Python features so the migration target would stay stable. The principle was
48
+ coherent, but the migration is a long-running background effort; in practice the
49
+ freeze required product evolution to wait months for TS sequencing.
50
+
51
+ ## What Changed
52
+
53
+ `JourneyService` now validates a proposed parent by walking the complete ancestor
54
+ chain. A journey may sit at any depth, including beneath a node that already has
55
+ children. Reaching the journey itself rejects the move as a cycle; encountering a
56
+ pre-existing cycle rejects extending malformed ancestry. Reads track visited ids,
57
+ so corrupt rootless cycles remain visible and bounded.
58
+
59
+ Journey options carry depth and complete lineage. The textual journey list,
60
+ Workspace tree, Scene map, All Journeys view, and selection controls render
61
+ recursively. Selecting a deep node opens its full ancestor chain. Current Scene
62
+ returns the complete lineage and only immediate siblings, while all movement and
63
+ content queries remain scoped to the exact selected journey.
64
+
65
+ Movement changes only the moved node's `parent_journey`. Regression coverage and
66
+ an isolated smoke prove that identity ids and `project_path` values remain stable.
67
+ No directory is created, renamed, moved, or removed.
68
+
69
+ Removal gained a conservative domain operation without a public UI. Storage uses
70
+ an immediate transaction to check child journeys and every known associated
71
+ record before deleting the identity. This closes the check-then-delete race and
72
+ prevents implicit reparenting, orphaning, and cascades.
73
+
74
+ Navigator homologation created a third-level journey through ordinary Mirror
75
+ conversation. It also exposed a presentation defect: deep leading-space
76
+ indentation crossed Markdown's code-block boundary. Text trees now use
77
+ column-zero `│` connectors at every depth, with regression coverage preventing a
78
+ return to fenced output.
79
+
80
+ Finally, the migration policy now transfers authority command by command. Python
81
+ continues to evolve where it still serves the product; CV22 must absorb the
82
+ current observable contract before claiming parity. Recursive journey reads are
83
+ assigned to CV22.E2.S5, and writes plus removal semantics to CV22.E4.
84
+
85
+ ## Conscious Exclusions
86
+
87
+ - **No inherited context.** Parentage does not merge documents, memories,
88
+ conversations, tasks, attachments, instructions, status, routing, search, or
89
+ Builder state.
90
+ - **No filesystem synchronization.** Paths do not infer parentage, and parentage
91
+ does not create or move directories.
92
+ - **No automatic reparenting or cascade.** Removing a parent with children is a
93
+ simple refusal.
94
+ - **No public journey-removal UI.** The domain operation exists, but irreversible
95
+ user-facing removal requires separate product work.
96
+ - **No simultaneous TypeScript implementation.** Parity obligations are explicit
97
+ in CV22, but this patch does not duplicate the feature before the relevant TS
98
+ read/write foundations exist.
99
+ - **No hierarchy watchers, aggregate status, or structural auto-repair.** The
100
+ capability remains a simple organizational tree.
101
+
102
+ ## What We Learned
103
+
104
+ A stable migration target is valuable only while it does not make the product
105
+ stand still. The safer long-running strangler is not one with no drift; it is one
106
+ that makes drift explicit, captures observable contracts, and transfers authority
107
+ at clear command boundaries.
108
+
109
+ The homologation also reinforced that recursive behavior must be validated at the
110
+ rendering boundary, not only in the data model. The hierarchy was semantically
111
+ correct while Markdown made its deepest node look like code. Normal conversational
112
+ use found what green service tests could not.
113
+
114
+ ## Next Horizon
115
+
116
+ CV22 must absorb recursive journey behavior before its read and write commands
117
+ claim authority. Public journey removal may later build on the conservative
118
+ domain operation, but only with an explicit interaction and recovery design. The
119
+ product can now gather real evidence from deeper journey organization without
120
+ waiting for either horizon.
@@ -0,0 +1,261 @@
1
+ ---
2
+ digest: >
3
+ v0.32.0 closes CV22, the TypeScript Core Port. Mirror Mind is now one
4
+ TypeScript package run by Node.js 24, installed with `npm install -g
5
+ mirror-mind` and wired to Pi, Claude Code, Gemini CLI, or Codex by one
6
+ documented step each; no Python remains in the repository or the shipped
7
+ artifact. Every command, its arguments, and its output are what they were.
8
+ The migration was a database-seam strangler, one command at a time, each
9
+ proven against the Python engine before it answered users, decided on
10
+ 2026-06-23 and finished on 2026-10-10. Eleven surfaces were retired with
11
+ cutoffs rather than ported, the Windows Frame and the web console among
12
+ them; the Python core's last tree is kept at `cv22-last-python-bearing`.
13
+ A clone updated by the previous release's updater completes and reports
14
+ success; then run `npm ci && npm link && mirror runtime migrate` once at the
15
+ clone root (see Upgrading from a clone in this note).
16
+ ---
17
+
18
+ # v0.32.0 — One Language, One Install
19
+
20
+ **Date:** 2026-10-11
21
+
22
+ ## Highlights
23
+
24
+ - **Install is one command and no checkout:** `npm install -g mirror-mind`, then
25
+ `mirror init <you>`. Two bins on the `PATH`, `mirror` and `mirror-hook`; configuration in
26
+ `~/.config/mirror/env`; your home at `~/.mirror-minds/<you>`. Node.js 24 or newer is the
27
+ only prerequisite. See [Getting Started](../getting-started.md).
28
+ - **No Python anywhere.** `src/memory/`, `uv`, `pyproject.toml`, and every way to reach
29
+ them are gone from the repository, and a guard proves the shipped package holds none by
30
+ path and by content. The TypeScript engine owns the database: bootstrap, migrations, and
31
+ every read and write.
32
+ - **Each runtime wires by a counted step:** Pi 1, Claude Code 1, Gemini CLI 2, Codex 2,
33
+ printed by `init` for the runtimes it finds, and the Operating Instructions reach each
34
+ runtime its own way.
35
+ - **The same commands, the same answers.** 31 front-door commands, 25 skills in three
36
+ copies that all say `mirror`. The last command family was proven byte-identical to the
37
+ Python oracle before the oracle was deleted.
38
+ - **Upgrading from a clone is five lines**, described below. The previous release's
39
+ updater completes the hop and reports success; it does not know about the five lines,
40
+ so this note has to.
41
+ - **Eleven surfaces are retired with cutoffs rather than ported**, each with what to do
42
+ instead and what still works if you do nothing: the web console, the Windows Frame and
43
+ installer, the Python extension API, journey projections, and seven smaller ones.
44
+ Summarized below; the full record is [Pending Cutoffs](pending-cutoffs.md).
45
+ - **One behavior change a Pi user can notice:** a new home imports only the Pi sessions
46
+ that are newer than itself. Your earlier Pi history stays where it is.
47
+ - **Not in this release:** Windows, Mirror Desktop, a programmatic API. Each is named
48
+ under Conscious Exclusions.
49
+
50
+ ## Where We Started
51
+
52
+ Mirror Mind was a Python core with four runtime harnesses written in TypeScript around it.
53
+ Installing it meant cloning the repository, running `uv sync`, keeping a `.env` in the
54
+ clone, and opening your harness inside that directory, because the directory *was* the
55
+ install. Every skill called the core by its path inside the clone. The Windows path was a
56
+ separate Electron Frame with a PowerShell installer that cloned the repository for you.
57
+
58
+ That shape worked for its first users and could not reach the next ones. Two languages
59
+ meant two toolchains on every machine and two sets of idioms for every contributor. A
60
+ clone is not a thing you can tell a stranger to install. And the harnesses, the MCP
61
+ ecosystem, and the plugin formats Mirror lives in are all TypeScript; the core was the
62
+ one piece that was not.
63
+
64
+ On 2026-06-23 the decision was taken to
65
+ [port the core to TypeScript through a database-seam strangler, not a rewrite](../project/decisions.md#mirror-mind-ports-to-typescript-via-a-database-seam-strangler-not-a-rewrite):
66
+ the shared SQLite database would be the seam, a TypeScript front door would take one
67
+ observable command at a time, each proven against the Python engine on copies of real
68
+ databases before it answered anyone, and Python would dissolve as the front door grew.
69
+ No big bang, no freeze, no feature pause: the Python product kept moving through
70
+ v0.31.14, and every change to it created named parity scope on the TypeScript side.
71
+
72
+ From 2026-09-07 the migration was a
73
+ [single-owner effort](../project/decisions.md#cv22-becomes-a-single-owner-migration), with
74
+ a multi-persona technical review standing in as the second opinion at each plan and each
75
+ handoff. And from 2026-09-13 it was decided that
76
+ [CV22 releases once, when the migration is complete](../project/decisions.md#cv22-releases-once-when-the-migration-is-complete):
77
+ a half-migrated core is not a product story, so nothing shipped until all of it had.
78
+
79
+ ## What Changed
80
+
81
+ ### The strangler, in ten Delivery Stories
82
+
83
+ The arc ran from a parity spike on hybrid search (DS1), through a read-only TypeScript
84
+ foundation (DS2) and a Pi front door that wrapped the unported remainder (DS3), to
85
+ deterministic writes (DS4) and the external-API commands, extraction and embeddings among
86
+ them (DS5). DS6 moved schema custody: the TypeScript engine took over database creation
87
+ and migrations, and proved a fresh database it creates is structurally identical to one
88
+ Python created. DS7 burned down the remaining command surface, fourteen stories, until
89
+ the deterministic Python command surface was empty. DS8 cut the live providers over.
90
+ DS9 ported the MCP server, with a threat model first and wallet guards against denial of
91
+ spend. DS10 retired what was left and made the package.
92
+
93
+ Every ported family answered from TypeScript behind a one-variable revert to Python while
94
+ it was young, and every revert was removed only when Python itself was. The oracle
95
+ harness that graded TypeScript against Python on copies of real databases went with the
96
+ oracle; its goldens are frozen fixtures the tests still grade against.
97
+
98
+ ### Deletion as a product decision
99
+
100
+ Not everything was ported. Where a surface had no user the migration could name, it was
101
+ [retired with a cutoff rather than carried across](../project/decisions.md#the-web-console-is-retired-not-ported-and-ds7-closes-at-1414):
102
+ the web console, whose successor is `mirror-gui`; the
103
+ [Windows Frame and installer](../project/decisions.md#the-windows-frame-and-installer-are-retired-not-re-homed-and-no-windows-story-is-promised),
104
+ with three downloads ever and no known user; the Python extension API and the
105
+ compatibility host that served it;
106
+ [journey projections](../project/decisions.md#journey-projections-retire-with-the-python-core-mirror-desktop-is-outside-the-migration),
107
+ whose one consumer is outside the migration; the SQLite Refinement Workbench, replaced by
108
+ the file-first Refinement route; the legacy database conversion, the migration rehearsal
109
+ tool, the journey admin verbs, the metadata backfill, and the Python-era release tooling.
110
+ Each cutoff answers what no longer exists, what to do instead, and what still works if
111
+ you do nothing. The full record, one section per surface, is
112
+ [Pending Cutoffs](pending-cutoffs.md); the short version:
113
+
114
+ | Removed | Instead |
115
+ |---|---|
116
+ | The Python core: `python -m memory …`, `uv`, the `MIRROR_TS_*` reverts, the Python API | `mirror <command>`; clean `MIRROR_TS_*` and the three path variables out of `.env` |
117
+ | The web console (`python -m memory web`) and its scene synthesis | Everything it showed is in the terminal: `journeys`, `journey <slug>`, `memories`, `conversations`, `tasks`, and the four modes; `mirror-gui` is the graphical successor; the scene synthesis has no replacement |
118
+ | The Windows Frame and PowerShell installer | Nothing on Windows in this release; a Frame install keeps working on `v0.31.14` and must not update from inside the Frame |
119
+ | `register(api)`, `extension.py`, the compatibility host | An extension declares a runtime per capability in `skill.yaml`; install validates what the manifest declares |
120
+ | Journey projections and `.mirror/projections` | Nothing; existing trees are inert; Mirror Desktop stays on the last Python-bearing release |
121
+ | The SQLite Refinement Workbench's twenty verbs | `docs/project/refinement/index.md` and the file-first route |
122
+ | `migrate-legacy` (the Portuguese-era conversion) | Convert once with the last Python-bearing release; any home Mirror has ever opened is already current |
123
+ | `memory-rehearse-migration` | The TypeScript engine's own migration tests; backups before every write |
124
+ | `journey export-registry` and `journey mutate` | `journeys` and `journey <slug>` to read; the Mirror, Builder, and Explorer surfaces to change; no machine-readable dump |
125
+ | The conversation metadata backfill flags | Nothing: a one-shot pass whose moment has passed; the lifecycle faces stay |
126
+ | `runtime release-doctor` and `release-promote` | Maintainer scripts, `npm run release:doctor` and `release:promote`, from a checkout |
127
+
128
+ The last tree that contains the Python core is kept at the
129
+ [`cv22-last-python-bearing`](https://github.com/mirror-mind-ai/mirror/tree/cv22-last-python-bearing)
130
+ tag, so nothing is gone from the world, only from this version.
131
+
132
+ ### The package
133
+
134
+ The repository is the package: `npm pack` produces 468 files with the same paths as a
135
+ checkout, two bins on a loader shim that strips types for its own package only, no build
136
+ step, no install script. The core reads its configuration in one order — environment,
137
+ `<clone>/.env`, `~/.config/mirror/env` — and `init` writes `MIRROR_USER` there, readable by
138
+ you only, never taking a key from the command line. All 25 skills, in the Pi, Claude
139
+ Code, and plugin copies, say `mirror` under a guard that forbids any other form. A smoke
140
+ in CI packs, installs into a scratch prefix, initializes, seeds, opens a migrating
141
+ database, exercises the four runtimes' wrappers and the MCP server, and proves no
142
+ interpreter was spawned.
143
+
144
+ The package is published by npm's trusted publisher for this repository:
145
+ [staged from CI with provenance, and a maintainer makes it public with 2FA](../project/decisions.md#the-npm-package-is-published-by-staging-from-ci-with-provenance-and-a-maintainer-approves-with-2fa).
146
+ No long-lived token exists. The route was rehearsed end to end before this release.
147
+
148
+ ### One behavior change
149
+
150
+ [A new home imports only the Pi sessions that are newer than itself](../project/decisions.md#a-new-mirror-home-imports-only-the-pi-sessions-that-are-newer-than-itself).
151
+ Session maintenance used to backfill every untracked Pi session on the machine; for a
152
+ home that had tracked Pi from the start that filled gaps, but for a new home it copied
153
+ the person's whole Pi history, from every project, and then spent on retitling and
154
+ extracting it before the first prompt was answered. Now a session is Mirror's only if it
155
+ ended after the home existed; the home's age is its database's first open. For an
156
+ existing home, nothing changes: your home is older than your sessions. The one case where
157
+ a person loses an import they used to get: a database rebuilt from scratch is a new home,
158
+ born now, and the sessions the old one held are not imported again. The home is the
159
+ database.
160
+
161
+ ## Upgrading from a clone
162
+
163
+ Until this release Mirror ran from a git clone and the skills called the core by its path
164
+ inside it. The skills now say `mirror`, and nothing provides that name until you do, once.
165
+ Node.js 24 or newer is required, and was not before: check `node --version` first.
166
+
167
+ ```bash
168
+ cd <your clone>
169
+ git pull # or: the previous release's runtime update, which completes
170
+ npm ci
171
+ npm link # puts `mirror` and `mirror-hook` on your PATH from this tree
172
+ mirror runtime migrate # applies this release's pending migration, snapshot first
173
+ mirror runtime status # should say: Install: clone (<your clone>) ... Status: ready
174
+ ```
175
+
176
+ Keep opening your harness in the clone, as before; everything it finds there now answers
177
+ through `mirror`. Your `.env` stays where it is. Your home and database are untouched.
178
+ `runtime status` is read-only: it reports a pending migration and does not apply it;
179
+ `runtime migrate` does, with a snapshot first, and so does the first ordinary command
180
+ that opens the database, which is why the line is there.
181
+
182
+ **If you updated with the previous release's `runtime update`**, it completes and
183
+ reports success, lists this release, and shows its summary. It ran entirely inside a
184
+ process that had loaded the Python engine before the tree changed under it, so nothing
185
+ it checked could fail; and it knows nothing of the lines above. Run them. From then on
186
+ `mirror runtime update` is the Node one. The old form, `uv run python -m memory …`, now
187
+ fails with `No module named memory.__main__`: the package is gone, and only ignored
188
+ `__pycache__` residue remains under `src/`.
189
+
190
+ Then the housekeeping the cutoffs ask for: `rm -rf src .venv` at the clone root removes
191
+ the Python residue, since nothing tracked lives under `src/` any more, and `uv` itself can
192
+ go; remove any `MIRROR_TS_<FAMILY>=0` line and `EXPORT_DIR`, `TRANSCRIPT_EXPORT_DIR`,
193
+ `DB_BACKUP_PATH` from `.env` (`mirror runtime diagnose` names the stragglers); if your
194
+ `identity/user/identity.yaml` still says `uv run python -m memory identity edit`, the
195
+ command is `mirror identity edit user identity`; and if you have extensions with their
196
+ own skills, re-run `mirror extensions sync` after their repositories are updated.
197
+
198
+ **You can move to the package instead** of keeping the clone: `npm install -g
199
+ mirror-mind`, `mirror init <your-name>` (it finds your existing home by name and copies
200
+ nothing), add your `OPENROUTER_API_KEY` to `~/.config/mirror/env`, run the wiring step
201
+ `init` prints for your runtime, and delete the clone. A checkout opened in Pi and an
202
+ installed package both provide the extension; there is no reason to keep both.
203
+
204
+ ## Conscious Exclusions
205
+
206
+ - **Windows.** The Frame and installer are retired and no Windows story is promised. The
207
+ supported platform is POSIX (macOS, Linux). A Frame install keeps working on
208
+ `v0.31.14` as it is, and must not update from inside the Frame.
209
+ - **Mirror Desktop.** Outside the migration. It couples to the Python era well beyond
210
+ projections and stays on the last Python-bearing release; its integration with the
211
+ TypeScript core is a separate effort after this one.
212
+ - **A programmatic API.** `from memory import MemoryClient` has no TypeScript
213
+ counterpart in this release. The command line and the MCP server are the interfaces.
214
+ - **A Gemini extension and Codex hooks.** Both runtimes wire by two documented steps and
215
+ Codex runs through a shipped wrapper; a packaged Gemini extension and Codex hooks were
216
+ considered and not built.
217
+ - **Importing earlier Pi history on request.** The new rule does not ask and offers no
218
+ import of what it skips; if one is wanted, it is a feature with its own story.
219
+ - **`v1.0.0`.** This release completes a Capability Value, which the versioning rule
220
+ would call a MAJOR, but
221
+ [that number is CV9's](../project/decisions.md#cv22-releases-as-v0320-not-v100): a
222
+ migration built not to be noticed does not get to be the 1.0.
223
+
224
+ ## What We Learned
225
+
226
+ **The seam was the method.** Choosing the database as the boundary, rather than an API or
227
+ a module, meant the two engines could run side by side over the same real data for three and
228
+ a half months, and parity could be graded as resulting database state rather than argued. Every
229
+ family flipped with a revert and lost it only when the oracle it would revert to was
230
+ gone.
231
+
232
+ **Deletion needs the same rigor as construction.** The surfaces retired here each got an
233
+ inventory, a decision with the alternative written down, a cutoff that answers three
234
+ questions for a user, and a guard in CI that keeps them retired. A retirement that was
235
+ only a deletion would have come back.
236
+
237
+ **A single owner needs a written second opinion.** With one person on the migration from
238
+ September, the multi-persona plan and handoff reviews were not a supplement to review;
239
+ they were the review. They found the loader shim Node's type-stripping needed, the
240
+ operating instructions that had not shipped, the fail-open default in the backfill rule,
241
+ and the full-scan that rule would have introduced.
242
+
243
+ **Rehearse the one-shot step on a copy.** The release note said the previous updater
244
+ would fail its post-update check on the Python-less tree. A rehearsal on a copy of the
245
+ production clone showed it succeeding instead, in-process, with the engine already in
246
+ memory, and showing the new release's summary as its only word to the user. The note was
247
+ rewritten before anyone read it through that updater. There was exactly one Python-era
248
+ production clone to learn this from; the copy was the second chance.
249
+
250
+ **The documentation is read by the next session, not the next person.** Resumable
251
+ plateaus with handoff statements, decisions recorded near the roadmap, and routes written
252
+ so a stranger could run them made a part-time migration survivable across gaps of days.
253
+ Where a pointer went stale, work was redone.
254
+
255
+ ## Next Horizon
256
+
257
+ Mirror Mind is one package in one language, and the roadmap it serves is the product's
258
+ again. Mirror Desktop's integration with the TypeScript core is the first thing waiting
259
+ on the far side of this release. The Refinement index carries what the migration found
260
+ and chose not to fix on its way out, CR124 the last of them, found on this release's own
261
+ validation. And CV9, Mirror Mind 1.0, keeps its number.