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,59 @@
1
+ ---
2
+ digest: >
3
+ v0.32.1 is the published CV22 release. v0.32.0 was tagged, and its
4
+ publication was refused by the project's own retired-surface tripwire:
5
+ one sentence in Getting Started named the retired Python invocation by
6
+ its literal form, which only the history and release notes may do. The
7
+ sentence is rephrased; nothing else changed. Everything v0.32.0's note
8
+ says is true of this version: install with `npm install -g mirror-mind`,
9
+ or upgrade a clone with the five lines, which include `npm link` and
10
+ `mirror runtime migrate`.
11
+ ---
12
+
13
+ # v0.32.1 — The Release That Shipped
14
+
15
+ **Date:** 2026-10-11
16
+
17
+ ## Highlights
18
+
19
+ - **This is the CV22 release.** Read [v0.32.0 — One Language, One Install](v0.32.0.md)
20
+ for what it is; this note only says why the number ends in 1.
21
+ - **One sentence changed**, in `docs/getting-started.md`: the paragraph telling a clone user
22
+ what the previous updater does no longer spells out the retired interpreter invocation.
23
+ - **No code, no behavior, no schema** differs from `v0.32.0`.
24
+
25
+ ## Where We Started
26
+
27
+ `v0.32.0` was tagged at `78dd5836` and `stable` moved there. The publish workflow, which
28
+ stages the package from CI for a maintainer to approve, runs the retired-surface
29
+ tripwire first, and it refused: `docs/getting-started.md:385 mentions \`uv run python\`,
30
+ retired by CV22.DS10.TS5`. The sentence had been added after the upgrade rehearsal,
31
+ committed as a docs-only change, and tagged without re-running the guard; the tests
32
+ workflow skips docs-only pushes, so nothing ran it before the tag.
33
+
34
+ ## What Changed
35
+
36
+ The project's rule is that a tag never moves and the doctor refuses a tag that is not at
37
+ `HEAD`, so the fix is a patch: the sentence now reads "the old interpreter form of the
38
+ command now fails with `No module named memory.__main__`", which says the same thing to
39
+ the person it is for without naming the form the guard forbids. The guard was right: a
40
+ Getting Started page is not the place to teach the retired invocation, even in the past
41
+ tense.
42
+
43
+ `v0.32.0` remains a tag in the repository and was never published to npm.
44
+
45
+ ## Conscious Exclusions
46
+
47
+ - Moving the `v0.32.0` tag to the fix. It would have given a cleaner version list at the
48
+ cost of breaking, by hand, the rule the release tooling encodes, on the first release
49
+ made under it.
50
+
51
+ ## What We Learned
52
+
53
+ A docs-only commit between the last green check and the tag is still a commit. The
54
+ retired-surface guard belongs in the Docs workflow too, so a docs-only push cannot pass
55
+ CI while carrying what the publish gate refuses; that is a Change Request, not this patch.
56
+
57
+ ## Next Horizon
58
+
59
+ Publication through the staged route, then CV22 closes.
@@ -0,0 +1,118 @@
1
+ ---
2
+ digest: >
3
+ Mirror Mind v0.8.0 publishes the first stable self-update foundation. The
4
+ release turns update from an informal git pull into a visible runtime workflow:
5
+ status, diagnosis, backup, dry-run planning, fast-forward execution, updater
6
+ self-recovery, stable/main channels, welcome version visibility, and runtime
7
+ release-note access. It also establishes that `main` is integration while
8
+ `stable` is the user-facing update channel. This is not Mirror Mind 1.0 yet;
9
+ it is the operational base that makes future stable releases safe to receive.
10
+ ---
11
+
12
+ # v0.8.0 — Stable Self-Update Foundation
13
+
14
+ **Date:** 2026-05-22
15
+
16
+ ## Highlights
17
+
18
+ - Runtime self-update now has a complete safe path: status, diagnosis, backup,
19
+ dry-run, update check, fast-forward execution, migrations, and post-update
20
+ health validation.
21
+ - The updater can repair itself through a code-only recovery lane when stale
22
+ updater code crashes before normal update planning.
23
+ - Mirror Mind now distinguishes `main` as the integration/dogfooding channel and
24
+ `stable` as the user-facing release channel.
25
+ - The welcome card shows installed version and update channel, so users can see
26
+ what they are running before asking for help.
27
+ - Runtime release notes can be read through `python -m memory runtime
28
+ release-notes` and natural-language Mirror requests such as "What's new in the
29
+ latest Mirror Mind release?"
30
+
31
+ ## Where We Started
32
+
33
+ Mirror Mind already had a strong local-first runtime, but update was still a
34
+ human memory problem. Production and development clones could be confused. A user
35
+ could not ask the runtime whether it was healthy enough to update. Backup existed
36
+ but was not part of a visible self-update route. Any push to `main` risked being
37
+ interpreted as a user-facing update, even though Ariad's release model says a
38
+ release is a closed, validated arc of work, not just a commit.
39
+
40
+ The first self-update slices made the runtime inspectable. Later slices made it
41
+ safe to mutate. The final pressure came from dogfooding: a stale updater crashed
42
+ while trying to install its own fix. That proved the updater needed a recovery
43
+ lane that did not require an end user to know git bootstrap commands.
44
+
45
+ ## What Changed
46
+
47
+ The runtime now exposes a coherent operational surface:
48
+
49
+ - `runtime status` reports version, repository state, mirror home, database,
50
+ migrations, extensions, clone role, update channel, Python version, and
51
+ environment.
52
+ - `runtime diagnose` classifies drift and repair routes without mutating files or
53
+ the database.
54
+ - `runtime backup` creates and structurally verifies database backups.
55
+ - `runtime version` shows the installed version, clone role, and update channel.
56
+ - `runtime update --check` checks the configured channel without mutating local
57
+ refs.
58
+ - `runtime update --dry-run` plans from local refs without mutation.
59
+ - `runtime update` performs a backup-first, fast-forward-only update and applies
60
+ migrations through a one-shot `MemoryClient` open.
61
+ - `runtime update --repair-updater` provides a code-only recovery lane when the
62
+ full status gate cannot run because the updater itself is stale or broken.
63
+
64
+ The production/development boundary is now explicit through `.mirror-clone-role`.
65
+ The update target is explicit through `.mirror-update-channel`. Missing or invalid
66
+ update channels default to `stable`.
67
+
68
+ The welcome card now says what the runtime is:
69
+
70
+ ```text
71
+ ◇ Mirror · <user>
72
+ Version 0.8.0 · channel stable
73
+ ...
74
+ ```
75
+
76
+ Release notes are prospective from this release onward. Historical tags through
77
+ `v0.7.0` remain valid history, but `v0.8.0` is the first release that carries the
78
+ new release-management loop into the runtime itself.
79
+
80
+ ## Conscious Exclusions
81
+
82
+ - This release does not complete CV9 or claim Mirror Mind 1.0 readiness.
83
+ - Release-aware update notices still fall back to commit counts when they cannot
84
+ map an update to a release note; richer release-aware notices are planned next.
85
+ - Stable promotion is still a controlled manual process, not a fully automated
86
+ command or Maestro workflow.
87
+ - Full natural-language release-note parity across every runtime surface remains
88
+ follow-up work.
89
+ - The local production checkout may still have git branch `main` while following
90
+ update channel `stable`; the channel, not the local branch name, controls the
91
+ update target.
92
+
93
+ ## What We Learned
94
+
95
+ Self-update is not one command. It is a chain of trust: know the current state,
96
+ refuse unsafe mutation, preserve recoverability, apply the smallest safe change,
97
+ explain what happened, and leave a future session able to understand the result.
98
+
99
+ The dogfooding incident where the updater could not install its own fix clarified
100
+ an important product rule: recovery paths must be usable by non-experts. Manual
101
+ git recovery is acceptable for development, but the product needs an updater
102
+ self-repair lane.
103
+
104
+ The release-channel split also clarified the relationship between Ariad and git.
105
+ `main` is where integration happens. `stable` is where a release becomes a user
106
+ promise.
107
+
108
+ ## Next Horizon
109
+
110
+ The remaining Self-Update Done work is now clearer:
111
+
112
+ - make update notices and post-install output speak in release terms when a
113
+ stable release note exists;
114
+ - ensure release-note access works naturally across supported runtime surfaces;
115
+ - add a repeatable release promotion checklist or doctor;
116
+ - provide a controlled promotion path for `stable`;
117
+ - validate a fresh clone updating from one stable release to the next without
118
+ manual git intervention.
@@ -0,0 +1,98 @@
1
+ ---
2
+ digest: >
3
+ Mirror Mind v0.9.0 closes the Self-Update Done release arc. The release turns
4
+ the v0.8.0 self-update foundation into a release-aware operating loop: stable
5
+ update notices speak in release terms, release notes are available across
6
+ runtime skill surfaces, promotion readiness is inspectable through a doctor,
7
+ stable promotion has a controlled execution path, and the fresh-user smoke
8
+ procedure proves the stable no-op path while identifying the release-state
9
+ boundary needed for update-hop validation. This is still not Mirror Mind 1.0;
10
+ it is the release-management layer that makes the path to 1.0 safer.
11
+ ---
12
+
13
+ # v0.9.0 — Self-Update Done
14
+
15
+ **Date:** 2026-05-23
16
+
17
+ ## Highlights
18
+
19
+ - Stable update surfaces now prefer release language when local refs contain
20
+ newer release notes.
21
+ - Release notes are available across Pi, Gemini/Codex shared skills, and Claude
22
+ Code.
23
+ - `runtime release-doctor` provides a read-only promotion readiness checklist.
24
+ - `runtime release-promote` provides a controlled stable promotion path with
25
+ dry-run, local promotion, and explicit push.
26
+ - Fresh-user stable update smoke now has an isolated procedure and validated the
27
+ current stable no-op path without touching production data.
28
+
29
+ ## Where We Started
30
+
31
+ `v0.8.0` made self-update safe enough to exist: status, diagnosis, backup,
32
+ dry-run, execution, updater repair, release notes, and stable/main channels were
33
+ in place. But the release layer around that mechanism was still thin. Stable
34
+ updates could still look like commit movement. Release notes existed, but runtime
35
+ skill access was uneven. Promotion relied on human git steps. And the user-shaped
36
+ smoke test had not yet proven what a fresh clone would experience.
37
+
38
+ The remaining question was not whether Mirror could update in principle. It was
39
+ whether the release path around update was coherent enough to be repeated.
40
+
41
+ ## What Changed
42
+
43
+ Release-aware update notices now connect stable updates with narrative release
44
+ notes when the local upstream ref contains newer release metadata. `runtime
45
+ update --check` remains conservative and non-mutating; it can report a remote
46
+ commit without pretending to have fetched release-note details. Dry-run and
47
+ successful stable updates can speak in terms of the release being installed.
48
+
49
+ Release notes became available across runtime skill surfaces. Pi keeps
50
+ `/mm-release-notes`, Gemini and Codex receive the shared `.agents` skill, and
51
+ Claude Code has `/mm:release-notes`. The skill contract stays thin: call
52
+ `python -m memory runtime release-notes` and show the output verbatim unless the
53
+ user asks for a summary.
54
+
55
+ Release promotion became inspectable and then executable. `runtime
56
+ release-doctor` checks the repository, clean tree, package version, release note,
57
+ release index, tag state, and stable ref relationship without mutation. `runtime
58
+ release-promote` uses that doctor as a gate, creates or reuses the release tag,
59
+ creates or fast-forwards the local stable branch only when safe, and publishes
60
+ only when `--push` is explicit.
61
+
62
+ The fresh-user smoke story then tested the stable update path in a temporary
63
+ clone and temporary Mirror home. The smoke validated the current published stable
64
+ state as a no-op update and revealed an important isolation rule for historical
65
+ stable versions: set both `MIRROR_USER=` and `MIRROR_HOME=<temp-home>`, because
66
+ `MEMORY_DIR` alone does not prevent older code from loading `MIRROR_USER` from
67
+ `.env`.
68
+
69
+ ## Conscious Exclusions
70
+
71
+ - This release does not close CV9 or claim Mirror Mind 1.0 readiness.
72
+ - The fresh-user smoke could not prove a `v0.8.0 -> v0.9.0` hop before this
73
+ release was prepared and promoted; that hop is the post-promotion validation
74
+ target.
75
+ - The release promotion path does not query GitHub Actions, wait for CI, force
76
+ push, rewrite tags, bump versions, or write release notes.
77
+ - Production update validation remains a controlled operational step after
78
+ stable promotion.
79
+
80
+ ## What We Learned
81
+
82
+ A self-updating runtime needs a release vocabulary, not only update mechanics.
83
+ Users should see releases, not just commits. Maintainers should see readiness,
84
+ not just git commands. And smoke tests should be shaped like real users, not like
85
+ the developer's machine.
86
+
87
+ The visualization experiment also clarified how Ariad work should be shown:
88
+ Bird's-Eye maps locate work, Transition Views show movement, Release Intent
89
+ shows the version arc being built, and checkpoint views should show only the
90
+ components useful for that stage.
91
+
92
+ ## Next Horizon
93
+
94
+ After `v0.9.0` is promoted to stable, the next validation is the real fresh-user
95
+ update hop from `v0.8.0` to `v0.9.0`. Once that passes, CV9.E3's Self-Update Done
96
+ track can close and the project can return to the remaining CV9 readiness work:
97
+ boundary hardening and stabilization before the eventual Mirror Mind 1.0
98
+ boundary.
@@ -0,0 +1,83 @@
1
+ ---
2
+ digest: >
3
+ Mirror Mind v0.9.1 adds the missing opening awareness around the v0.9.0
4
+ self-update path. The runtime can now surface stable release availability in
5
+ the welcome through a network-tolerant check and a small cache, while Pi gets
6
+ a compact status-bar signal that shows the active user and whether attention
7
+ is needed. This patch does not change the update executor; it makes the
8
+ existing stable update capability visible at the moment the user opens the
9
+ Mirror.
10
+ ---
11
+
12
+ # v0.9.1 — Welcome Release Awareness
13
+
14
+ **Date:** 2026-05-23
15
+
16
+ ## Highlights
17
+
18
+ - Welcome can detect a newer stable release through a lightweight remote check
19
+ when its update cache is missing or stale.
20
+ - Update awareness is cached under `<mirror-home>/runtime/update-check.json`.
21
+ - Remote welcome checks fail softly and can be disabled with
22
+ `MIRROR_WELCOME_REMOTE_UPDATE_CHECK=off`.
23
+ - `python -m memory welcome --status-line` renders a compact status signal for
24
+ runtime status bars.
25
+ - Pi now uses the compact status signal instead of showing only conversation
26
+ logging status.
27
+
28
+ ## Where We Started
29
+
30
+ After publishing `v0.9.0`, the self-update mechanism worked, but the opening
31
+ experience did not yet reveal it. A user could run `runtime update --check` and
32
+ see the new release, but simply opening Mirror showed version and channel only.
33
+ The system was operationally capable but experientially quiet.
34
+
35
+ That gap mattered because the desired user experience is natural: open Mirror,
36
+ see that a release is available, ask what changed, and ask Mirror to update.
37
+
38
+ ## What Changed
39
+
40
+ The welcome card now has network-tolerant release awareness. It can refresh a
41
+ small update cache with a lightweight `git ls-remote` check when the cache is
42
+ absent or older than six hours. It does not fetch, mutate refs, update files,
43
+ run backups, run migrations, or block startup. If the remote is unavailable, the
44
+ welcome still opens normally.
45
+
46
+ When a stable update is known, the welcome can show:
47
+
48
+ ```text
49
+ Update available: v0.9.1 — Welcome Release Awareness
50
+ Ask: "what changed?" or "update my Mirror"
51
+ ```
52
+
53
+ The compact status-line command gives runtimes a small signal:
54
+
55
+ ```text
56
+ ◇ alisson-vale · ✓
57
+ ◇ alisson-vale · ⬆ v0.9.1
58
+ ```
59
+
60
+ Pi's `mirror-logger` extension now uses that status-line command for its footer
61
+ status.
62
+
63
+ ## Conscious Exclusions
64
+
65
+ - This patch does not auto-update the runtime.
66
+ - The status bar reads cached state only; welcome owns remote refresh.
67
+ - The release title is available when local release notes exist. Otherwise the
68
+ notice degrades to version-only or commit-level availability.
69
+ - This patch does not add a full health dashboard.
70
+
71
+ ## What We Learned
72
+
73
+ Mirror Mind should be local-first in state and network-tolerant in operation.
74
+ The welcome should not depend on the network, but it can use the network as an
75
+ antenna. The status bar should remain a signal; the welcome is where explanation
76
+ and next action belong.
77
+
78
+ ## Next Horizon
79
+
80
+ The next release-awareness improvements should come from dogfooding: whether the
81
+ status signal is clear enough, whether the cache TTL feels right, and whether
82
+ natural-language update requests should get a dedicated intent path beyond the
83
+ existing runtime commands.
package/package.json CHANGED
@@ -1,16 +1,112 @@
1
1
  {
2
2
  "name": "mirror-mind",
3
- "version": "0.0.1",
4
- "description": "Name reserved for Mirror Mind, a local-first memory and identity framework for agentic AI runtimes. This version installs nothing runnable; the first release is coming.",
3
+ "version": "0.32.1",
4
+ "description": "Mirror Mind: a local-first memory and identity framework for agentic AI runtimes (Pi, Claude Code, Gemini CLI, Codex)",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/mirror-mind-ai/mirror.git"
9
9
  },
10
10
  "homepage": "https://github.com/mirror-mind-ai/mirror#readme",
11
- "bugs": {
12
- "url": "https://github.com/mirror-mind-ai/mirror/issues"
11
+ "keywords": [
12
+ "mirror-mind",
13
+ "memory",
14
+ "identity",
15
+ "agent",
16
+ "pi-package",
17
+ "claude-code",
18
+ "gemini-cli",
19
+ "codex",
20
+ "sqlite",
21
+ "local-first"
22
+ ],
23
+ "type": "module",
24
+ "engines": {
25
+ "node": ">=24"
13
26
  },
14
- "keywords": ["mirror-mind", "memory", "identity", "agent", "pi", "claude-code", "gemini-cli", "codex"],
15
- "files": ["README.md", "LICENSE"]
27
+ "bin": {
28
+ "mirror": "bin/mirror.js",
29
+ "mirror-hook": "bin/mirror-hook.js"
30
+ },
31
+ "files": [
32
+ "bin",
33
+ "ts/src",
34
+ "templates",
35
+ "docs/releases",
36
+ ".pi/extensions",
37
+ ".pi/skills",
38
+ ".claude/hooks",
39
+ ".gemini/hooks",
40
+ "plugins/mirror-mind",
41
+ "scripts/codex-hooks",
42
+ "scripts/codex-mirror.sh",
43
+ "AGENTS.md",
44
+ "README.md",
45
+ "LICENSE"
46
+ ],
47
+ "pi": {
48
+ "extensions": [
49
+ "./.pi/extensions/mirror-logger.ts"
50
+ ],
51
+ "skills": [
52
+ "./.pi/skills"
53
+ ]
54
+ },
55
+ "imports": {
56
+ "#backup/*": "./ts/src/backup/*",
57
+ "#builder/*": "./ts/src/builder/*",
58
+ "#consult/*": "./ts/src/consult/*",
59
+ "#conversation/*": "./ts/src/conversation/*",
60
+ "#cultivation/*": "./ts/src/cultivation/*",
61
+ "#db/*": "./ts/src/db/*",
62
+ "#descriptor/*": "./ts/src/descriptor/*",
63
+ "#docs/*": "./ts/src/docs/*",
64
+ "#evals/*": "./ts/evals/*",
65
+ "#explorer/*": "./ts/src/explorer/*",
66
+ "#extensions/*": "./ts/src/extensions/*",
67
+ "#extraction/*": "./ts/src/extraction/*",
68
+ "#fixtures/*": "./ts/test/fixtures/*",
69
+ "#frontDoor/*": "./ts/src/frontDoor/*",
70
+ "#goldens/*": "./ts/test/goldens/*",
71
+ "#guards/*": "./ts/src/guards/*",
72
+ "#helpers/*": "./ts/test/helpers/*",
73
+ "#hooks/*": "./ts/src/hooks/*",
74
+ "#identity/*": "./ts/src/identity/*",
75
+ "#init/*": "./ts/src/init/*",
76
+ "#journey/*": "./ts/src/journey/*",
77
+ "#mcp/*": "./ts/src/mcp/*",
78
+ "#memory/*": "./ts/src/memory/*",
79
+ "#mirror/*": "./ts/src/mirror/*",
80
+ "#mode/*": "./ts/src/mode/*",
81
+ "#observability/*": "./ts/src/observability/*",
82
+ "#persona/*": "./ts/src/persona/*",
83
+ "#planning/*": "./ts/src/planning/*",
84
+ "#providers/*": "./ts/src/providers/*",
85
+ "#repair/*": "./ts/src/repair/*",
86
+ "#runtime/*": "./ts/src/runtime/*",
87
+ "#search/*": "./ts/src/search/*",
88
+ "#seed/*": "./ts/src/seed/*",
89
+ "#smoke/*": "./ts/smoke/*",
90
+ "#soul/*": "./ts/src/soul/*",
91
+ "#tasks/*": "./ts/src/tasks/*",
92
+ "#util/*": "./ts/src/util/*",
93
+ "#welcome/*": "./ts/src/welcome/*"
94
+ },
95
+ "scripts": {
96
+ "release:doctor": "node ts/scripts/releaseDoctor.ts",
97
+ "release:promote": "node ts/scripts/releasePromote.ts",
98
+ "typecheck": "tsc --noEmit",
99
+ "test": "node --test \"ts/test/**/*.test.ts\"",
100
+ "eval": "node --env-file-if-exists=.env ts/evals/harness/cli.ts",
101
+ "lint": "biome check .",
102
+ "format": "biome format --write ."
103
+ },
104
+ "devDependencies": {
105
+ "@biomejs/biome": "^2.2.0",
106
+ "@types/node": "^24.0.0",
107
+ "typescript": "^5.8.0"
108
+ },
109
+ "dependencies": {
110
+ "yaml": "^2.9.0"
111
+ }
16
112
  }
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "mirror-mind",
3
+ "version": "0.32.1",
4
+ "description": "Mirror Mind — local-first memory and identity for agentic runtimes.",
5
+ "author": {
6
+ "name": "Mirror Mind"
7
+ },
8
+ "mcpServers": {
9
+ "mirror-mind": {
10
+ "command": "${CLAUDE_PLUGIN_ROOT}/mcp/launch.sh"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh",
10
+ "timeout": 15000
11
+ }
12
+ ]
13
+ }
14
+ ],
15
+ "UserPromptSubmit": [
16
+ {
17
+ "matcher": "",
18
+ "hooks": [
19
+ {
20
+ "type": "command",
21
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/mirror-inject.sh",
22
+ "timeout": 30000
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ "matcher": "",
28
+ "hooks": [
29
+ {
30
+ "type": "command",
31
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/log-user-prompt.sh",
32
+ "async": true
33
+ }
34
+ ]
35
+ }
36
+ ],
37
+ "SessionEnd": [
38
+ {
39
+ "matcher": "",
40
+ "hooks": [
41
+ {
42
+ "type": "command",
43
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/log-session-end.sh",
44
+ "async": true
45
+ }
46
+ ]
47
+ }
48
+ ]
49
+ }
50
+ }
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env bash
2
+ # Mirror Mind hook wrapper — GENERATED by scripts/generate_hook_wrappers.sh.
3
+ # Edit the generator, never this file: every wrapper shares these bytes and
4
+ # differs only in the hook name and in how it finds the Mirror entry
5
+ # (CV22.DS10.TS5 decision D4; CV22.DS10.US3 decision D5).
6
+ set -uo pipefail
7
+ HOOK="claude:session-end"
8
+
9
+ # This wrapper is the Claude plugin's, and a plugin is copied into Claude
10
+ # Code's own cache: no relative path from here reaches the Mirror tree. It
11
+ # runs the installed `mirror-hook` bin instead, and reads no tree .env.
12
+ REPO_ROOT=""
13
+
14
+ # A hook never fails the user's turn, and never fails in silence: when it
15
+ # cannot do its job it appends ONE line to <mirror home>/hooks.log and exits 0.
16
+ # The home is found the way the core finds it -- MIRROR_HOME, else
17
+ # MIRROR_USER -- from the environment when set there, else from the tree's
18
+ # .env when the wrapper is in a tree, else from the user's config file
19
+ # (~/.config/mirror/env), in the core's order (US3, D3). A GUI launch carries
20
+ # neither variable, and the first wrappers then wrote to a home nobody reads.
21
+ env_file_value() {
22
+ [ -f "$2" ] || return 0
23
+ sed -n -E "s/^[[:space:]]*(export[[:space:]]+)?$1[[:space:]]*=[[:space:]]*//p" "$2" \
24
+ | tail -n 1 | tr -d "\"'\r"
25
+ }
26
+ env_value() {
27
+ local value=""
28
+ if [ -n "${!1+set}" ]; then printf '%s' "${!1}"; return; fi
29
+ [ -z "$REPO_ROOT" ] || value="$(env_file_value "$1" "$REPO_ROOT/.env")"
30
+ [ -n "$value" ] || value="$(env_file_value "$1" "${XDG_CONFIG_HOME:-$HOME/.config}/mirror/env")"
31
+ printf '%s' "$value"
32
+ }
33
+ note() {
34
+ local home user
35
+ home="$(env_value MIRROR_HOME)"
36
+ user="$(env_value MIRROR_USER)"
37
+ if [ -n "$home" ]; then
38
+ home="${home/#\~/$HOME}"
39
+ elif [ -n "$user" ]; then
40
+ home="$HOME/.mirror-minds/$user"
41
+ [ -d "$home" ] || [ ! -d "$HOME/.mirror/$user" ] || home="$HOME/.mirror/$user"
42
+ else
43
+ return 0
44
+ fi
45
+ mkdir -p "$home" 2>/dev/null \
46
+ && printf '%s %s: %s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$HOOK" "$1" >> "$home/hooks.log" 2>/dev/null
47
+ }
48
+
49
+ # Find the bin. MIRROR_BIN names the directory holding `mirror` and
50
+ # `mirror-hook` (`$(npm prefix -g)/bin`), the same trust class as MIRROR_NODE;
51
+ # then the PATH; then the global bin directories a GUI launch leaves off it.
52
+ ENTRY=""
53
+ [ -n "${MIRROR_BIN:-}" ] && [ -x "$MIRROR_BIN/mirror-hook" ] && ENTRY="$MIRROR_BIN/mirror-hook"
54
+ [ -n "$ENTRY" ] || ENTRY="$(command -v mirror-hook 2>/dev/null || true)"
55
+ for candidate in "$HOME/.nvm/current/bin" /opt/homebrew/bin /usr/local/bin; do
56
+ [ -n "$ENTRY" ] && break
57
+ [ -x "$candidate/mirror-hook" ] && ENTRY="$candidate/mirror-hook"
58
+ done
59
+
60
+ if [ -z "$ENTRY" ]; then
61
+ note "mirror-hook not found on PATH; hook skipped. Install mirror-mind (npm install -g mirror-mind) or set MIRROR_BIN to its bin directory."
62
+ exit 0
63
+ fi
64
+
65
+ # Find Node. /usr/bin/python3 exists on every macOS; node usually lives under
66
+ # nvm or Homebrew and is NOT on the PATH of a GUI-launched runtime. The Python
67
+ # hooks could end in `|| true` because they always found their interpreter;
68
+ # the same silence here would hide a new failure — no logging, no inject, no
69
+ # close tail — that a user would meet weeks later as "Mirror stopped
70
+ # remembering". So an unresolvable Node is RECORDED, never swallowed. The
71
+ # directory the entry was found in is searched first: an npm global bin holds
72
+ # the `node` that installed the package beside `mirror-hook`, while a system
73
+ # `/usr/local/bin/node` can be years older (CI's Ubuntu runner has one).
74
+ NODE="${MIRROR_NODE:-}"
75
+ if [ -z "$NODE" ] || [ ! -x "$NODE" ]; then
76
+ NODE="$(command -v node 2>/dev/null || true)"
77
+ fi
78
+ for candidate in "$(dirname "$ENTRY")/node" "$HOME/.nvm/current/bin/node" /opt/homebrew/bin/node /usr/local/bin/node; do
79
+ [ -n "$NODE" ] && break
80
+ [ -x "$candidate" ] && NODE="$candidate"
81
+ done
82
+
83
+ if [ -z "$NODE" ]; then
84
+ note "node not found on PATH; hook skipped. Set MIRROR_NODE."
85
+ exit 0
86
+ fi
87
+
88
+ # Not `exec`: the entry exits 0 whatever happens inside it, so a non-zero exit
89
+ # means Node itself could not run the hook -- too old for the loader shim, or
90
+ # it crashed. That used to vanish into a stderr no runtime shows (TS5 handoff
91
+ # review, finding N1). No flags: the entry reads configuration and silences
92
+ # its own warnings (US3, D3).
93
+ "$NODE" "$ENTRY" "$HOOK" "$@"
94
+ status=$?
95
+ if [ "$status" -ne 0 ]; then
96
+ note "node exited $status before the hook finished ($NODE, $("$NODE" --version 2>/dev/null || echo 'version unknown')); Mirror needs Node 24 or later. Set MIRROR_NODE."
97
+ fi
98
+ exit 0