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,66 @@
1
+ // Core decoders for on-disk value shapes (originally CV22.DS2.TS2).
2
+ //
3
+ // These two functions turn the exact on-disk shapes the Python core writes
4
+ // (little-endian float32 embedding BLOBs, ISO timestamps) into the values the
5
+ // ranker consumes. They live in the db layer because both the production core
6
+ // (search/ranker.ts) and the parity harness depend on them — the dependency
7
+ // flows downward into the core, never from core into parity (CR006).
8
+
9
+ /**
10
+ * Decode a little-endian IEEE-754 float32 BLOB into a `Float32Array`.
11
+ *
12
+ * The Python core stores embeddings as `np.float32(...).tobytes()`
13
+ * (see `memory.intelligence.embeddings.embedding_to_bytes`), i.e. packed
14
+ * little-endian 4-byte floats. We decode via `DataView` with an explicit
15
+ * little-endian flag so the result is independent of both the platform byte
16
+ * order and the byte alignment of the incoming view (a base64/Buffer decode can
17
+ * hand us a non-4-aligned `byteOffset`, which the `new Float32Array(buffer, …)`
18
+ * view constructor rejects).
19
+ *
20
+ * Trailing bytes that do not complete a 4-byte float are ignored, matching
21
+ * `np.frombuffer(data, dtype=np.float32)`.
22
+ */
23
+ export function blobToFloat32(bytes: Uint8Array): Float32Array {
24
+ const count = Math.floor(bytes.byteLength / 4);
25
+ const out = new Float32Array(count);
26
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
27
+ for (let i = 0; i < count; i++) {
28
+ out[i] = view.getFloat32(i * 4, /* littleEndian */ true);
29
+ }
30
+ return out;
31
+ }
32
+
33
+ /**
34
+ * Encode a vector as a little-endian IEEE-754 float32 BLOB -- the counterpart
35
+ * to `blobToFloat32` and a byte-for-byte match of Python's
36
+ * `embedding_to_bytes` (`np.float32(...).tobytes()`). Shared by every writer
37
+ * that stores a freshly generated embedding (conversation extraction,
38
+ * cultivation's `merge` action), so the encode step has exactly one
39
+ * implementation, matching `blobToFloat32`'s single decode implementation.
40
+ */
41
+ export function embeddingToBytes(values: readonly number[]): Uint8Array {
42
+ const buffer = Buffer.alloc(values.length * 4);
43
+ values.forEach((value, index) => {
44
+ buffer.writeFloatLE(value, index * 4);
45
+ });
46
+ return buffer;
47
+ }
48
+
49
+ /**
50
+ * Parse a stored ISO timestamp into epoch milliseconds (UTC), or `null`.
51
+ *
52
+ * Mirrors `memory.intelligence.search._parse_datetime_utc`: naive strings are
53
+ * treated as UTC, while Z-suffixed and offset-aware strings are honored as
54
+ * written. Returns `null` for empty/unparseable input (the Python helper returns
55
+ * `None`, which the ranker treats as a neutral default).
56
+ *
57
+ * Millisecond precision is intentional: JS `Date` is millisecond-resolution, so
58
+ * the golden generator records epoch-ms references truncated to the same
59
+ * granularity.
60
+ */
61
+ export function parseUtcMs(value: string | null | undefined): number | null {
62
+ if (!value) return null;
63
+ const hasTz = /[zZ]$|[+-]\d\d:\d\d$/.test(value);
64
+ const ms = Date.parse(hasTz ? value : `${value}Z`);
65
+ return Number.isNaN(ms) ? null : ms;
66
+ }
@@ -0,0 +1,41 @@
1
+ // FTS5 integrity assertion for the database seam (CR021).
2
+ //
3
+ // `memories_fts` is an external-content FTS5 table kept in sync by triggers on
4
+ // `memories`. A write that fires those triggers can, in principle, leave the
5
+ // index inconsistent (the external-content "ghost row" failure mode). Nothing
6
+ // in the system ran FTS5's own integrity check; this exposes it so the
7
+ // write-parity harness can grade the FTS side-effect and a health surface can
8
+ // verify it.
9
+
10
+ import type { WritableDatabase } from "./database.ts";
11
+
12
+ /** Raised when the FTS5 integrity check reports a corrupt/inconsistent index. */
13
+ export class FtsIntegrityError extends Error {}
14
+
15
+ const IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
16
+
17
+ function tableExists(db: WritableDatabase, name: string): boolean {
18
+ return (
19
+ db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(name) !==
20
+ undefined
21
+ );
22
+ }
23
+
24
+ /**
25
+ * Run FTS5's `integrity-check` for `ftsTable`, throwing `FtsIntegrityError` if
26
+ * the index is inconsistent with its content table. A no-op when the table is
27
+ * absent, so callers can invoke it unconditionally on any copy. Requires a
28
+ * writable handle (the check is issued as an FTS5 command INSERT).
29
+ */
30
+ export function assertFtsIntegrity(db: WritableDatabase, ftsTable = "memories_fts"): void {
31
+ if (!IDENTIFIER.test(ftsTable)) {
32
+ throw new FtsIntegrityError(`unsafe FTS table identifier: ${ftsTable}`);
33
+ }
34
+ if (!tableExists(db, ftsTable)) return;
35
+ try {
36
+ db.prepare(`INSERT INTO ${ftsTable}(${ftsTable}) VALUES('integrity-check')`).run();
37
+ } catch (error) {
38
+ const message = error instanceof Error ? error.message : String(error);
39
+ throw new FtsIntegrityError(`FTS integrity check failed for ${ftsTable}: ${message}`);
40
+ }
41
+ }
@@ -0,0 +1,214 @@
1
+ // Migrate-on-open — CV22.DS6.US3 (D2/D3).
2
+ //
3
+ // The front door's activation seam for forward migrations on an *existing*
4
+ // database. `bootstrapDatabaseIfMissing` only runs on a *missing* file, so
5
+ // without this seam an existing database never receives a new migration -- the
6
+ // column stays dormant, merely tolerated by `assertSchemaState`.
7
+ //
8
+ // CV22.DS10.TS5 made TypeScript the SOLE custodian (D-025). The seam was built
9
+ // for two engines: Python's MIGRATIONS list stopped at 016, so this applied
10
+ // only the TS-authored tail and DEFERRED whenever a Python-authored migration
11
+ // was pending, rather than let TypeScript silently apply work Python still
12
+ // owned. That deferral was honest while Python existed. Its verdict was not --
13
+ // `runtime migrate` printed `nothing pending`, exit 0, and the updater's
14
+ // migrate stage passed on a database with pending work nothing had applied.
15
+ //
16
+ // There is no second engine to defer to now, so the split is gone and every
17
+ // pending known migration is applied here. What remains as `declined` is
18
+ // structural and cannot be resolved by another engine: a file with no
19
+ // `_migrations` table, or a database carrying migrations this core does not
20
+ // know. Those fail loudly.
21
+ //
22
+ // Migrations, THEN the bootstrap schema (TS5 handoff review, finding B1).
23
+ // Python's `get_connection` ran both on every open, and the second half is the
24
+ // only thing that ever created the objects the schema has and no migration
25
+ // does: `_ext_migrations`, `_ext_bindings` and its index (v0.8.0), and
26
+ // `journey_mutation_receipts` (v0.31.12). Taking over the migrations without
27
+ // the schema step left a v0.7.0 home at "current (17/17)" and failing in
28
+ // Mirror Mode on `no such table: _ext_bindings`. So a slow-path open composes
29
+ // the two exactly as `bootstrapDatabase` does for a new file. Every Python-era
30
+ // database arrives with `017` pending and takes this path once. A database
31
+ // already at every migration but missing those objects gets no repair here;
32
+ // only TS5-era development copies can be in that state.
33
+ //
34
+ // Discipline (see this story's plan):
35
+ // - D2: called before serving on BOTH read and write opens, but the steady
36
+ // state is a single `_migrations` read -- no lock, no backup -- so the hot
37
+ // path of an already-current database pays almost nothing.
38
+ // - D3: the backup is conditional and owned here (not the per-write
39
+ // `openLiveWriteDatabase` snapshot), taken only once we have committed to applying a migration.
40
+ // - Backup-first, then lock, then idempotent `runMigrations`; the pending set
41
+ // is re-checked under the lock so concurrent openers cannot double-apply or
42
+ // double-backup (the loser sees nothing pending and no-ops).
43
+
44
+ import { chmodSync, existsSync, mkdirSync, rmSync } from "node:fs";
45
+ import { dirname, join } from "node:path";
46
+ import { PROGRAM } from "#util/program.ts";
47
+
48
+ import { acquireBootstrapLock, type BootstrapLockOptions } from "./bootstrapLock.ts";
49
+ import {
50
+ type OpenOptions,
51
+ openDatabaseForBootstrap,
52
+ openDatabaseReadOnly,
53
+ snapshotDatabaseTo,
54
+ } from "./database.ts";
55
+ import { runMigrations } from "./migrations.ts";
56
+ import { createSchema } from "./schema.ts";
57
+ import { KNOWN_MIGRATION_IDS } from "./schemaState.ts";
58
+
59
+ const BACKUP_DIR_NAME = "backups";
60
+ const MIGRATION_BACKUP_FILE_NAME = "frontdoor-pre-migration-backup.db";
61
+
62
+ /** Where migrate-on-open snapshots the database before applying a migration.
63
+ * A distinct name from the per-write backup so a migration snapshot never
64
+ * clobbers (or is clobbered by) a routine pre-write snapshot. */
65
+ export function migrationBackupPathFor(dbPath: string): string {
66
+ return join(dirname(dbPath), BACKUP_DIR_NAME, MIGRATION_BACKUP_FILE_NAME);
67
+ }
68
+
69
+ /**
70
+ * What migrate-on-open did. THREE verdicts, not two (CV22.DS10.TS5, D-025).
71
+ *
72
+ * `declined` used to be `deferredToPython`, and it was honest while Python
73
+ * existed: the work was real, and another engine could do it. What was not
74
+ * honest was the VERDICT -- `runMigrate` reported `nothing pending` with exit
75
+ * 0, and the updater read that as a passing stage on a database with pending
76
+ * work nothing had applied.
77
+ *
78
+ * After this story there is nothing to defer to, so a decline is structural:
79
+ * the file is not a Mirror database, or it carries migrations this core does
80
+ * not know. Both are real refusals that must fail loudly rather than pass
81
+ * quietly, on the one command whose job is to leave the database correct after
82
+ * an update.
83
+ */
84
+ export type MigrateVerdict = "applied" | "nothing_pending" | "declined";
85
+
86
+ export interface MigrateOnOpenResult {
87
+ /** Which of the three things happened. */
88
+ verdict: MigrateVerdict;
89
+ /** True only when this call actually applied one or more migrations. */
90
+ migrated: boolean;
91
+ /** The migration ids applied (empty unless `migrated`). */
92
+ appliedIds: readonly string[];
93
+ /** The pre-migration snapshot path, when a migration was applied. */
94
+ backupPath?: string;
95
+ /** Why the work was declined, when it was. Never empty for `declined`. */
96
+ declinedReason?: string;
97
+ }
98
+
99
+ export interface MigrateOnOpenOptions extends OpenOptions, BootstrapLockOptions {}
100
+
101
+ const NOTHING_PENDING: MigrateOnOpenResult = {
102
+ verdict: "nothing_pending",
103
+ migrated: false,
104
+ appliedIds: [],
105
+ };
106
+
107
+ function declined(reason: string): MigrateOnOpenResult {
108
+ return { verdict: "declined", migrated: false, appliedIds: [], declinedReason: reason };
109
+ }
110
+
111
+ /**
112
+ * Read the applied migration ids. Returns `null` when the database has no
113
+ * `_migrations` table — i.e. it is not a bootstrapped Mirror database. That is
114
+ * `assertSchemaState`'s error to raise, not ours: migrate-on-open simply
115
+ * declines rather than trying to bootstrap an unknown file.
116
+ */
117
+ function appliedMigrationIds(dbPath: string, options: OpenOptions): Set<string> | null {
118
+ const db = openDatabaseReadOnly(dbPath, options);
119
+ try {
120
+ const rows = db.prepare("SELECT id FROM _migrations").all() as { id: string }[];
121
+ return new Set(rows.map((row) => row.id));
122
+ } catch {
123
+ return null;
124
+ } finally {
125
+ db.close();
126
+ }
127
+ }
128
+
129
+ /**
130
+ * The known migrations this database has not applied, in order.
131
+ *
132
+ * No split any more. Until CV22.DS10.TS5 this separated the TS-authored tail
133
+ * from Python-authored ids and declined the whole thing whenever a Python one
134
+ * was pending -- correct while Python could still apply them. TypeScript
135
+ * carries all seventeen and is the only engine left, so every pending known
136
+ * migration is simply pending.
137
+ */
138
+ function pendingMigrations(applied: Set<string>): string[] {
139
+ return KNOWN_MIGRATION_IDS.filter((id) => !applied.has(id));
140
+ }
141
+
142
+ /** Migrations the database carries that this core does not know about. */
143
+ function unknownMigrations(applied: Set<string>): string[] {
144
+ const known = new Set(KNOWN_MIGRATION_IDS);
145
+ return [...applied].filter((id) => !known.has(id)).sort();
146
+ }
147
+
148
+ function takeBackup(dbPath: string): string {
149
+ const backupPath = migrationBackupPathFor(dbPath);
150
+ mkdirSync(dirname(backupPath), { recursive: true, mode: 0o700 });
151
+ rmSync(backupPath, { force: true });
152
+ snapshotDatabaseTo(dbPath, backupPath);
153
+ chmodSync(backupPath, 0o600);
154
+ return backupPath;
155
+ }
156
+
157
+ /**
158
+ * Bring an existing `dbPath` to this core's schema: apply every pending known
159
+ * migration, then the bootstrap schema, backup first and under the
160
+ * cross-process bootstrap lock. Cheap and side-effect-free when nothing is
161
+ * pending, which is every open after the first. Safe to call on every open.
162
+ * See the module header for the full contract.
163
+ */
164
+ export function ensureMigratedOnOpen(
165
+ dbPath: string,
166
+ options: MigrateOnOpenOptions = {},
167
+ ): MigrateOnOpenResult {
168
+ // A missing file is not this seam's business: `bootstrapDatabaseIfMissing`
169
+ // owns creation, and `runMigrate` reports the absence with its own message.
170
+ if (!existsSync(dbPath)) return NOTHING_PENDING;
171
+
172
+ // Cheap steady-state pre-check — no lock, no backup.
173
+ const applied = appliedMigrationIds(dbPath, options);
174
+ if (applied === null) {
175
+ return declined("database has no _migrations table — not a bootstrapped Mirror database");
176
+ }
177
+ const unknown = unknownMigrations(applied);
178
+ if (unknown.length > 0) {
179
+ // The database is AHEAD of this core. Applying anything now would write
180
+ // with older code against a newer schema; declining is the safe answer,
181
+ // and saying so is the honest one.
182
+ return declined(
183
+ `database carries migrations this core does not know (${unknown.join(", ")}) — ` +
184
+ `update this Mirror installation: ${PROGRAM} runtime update`,
185
+ );
186
+ }
187
+ if (pendingMigrations(applied).length === 0) return NOTHING_PENDING;
188
+
189
+ // Slow path: serialize with concurrent openers and re-decide under the lock so
190
+ // a race cannot double-apply or double-backup.
191
+ const lock = acquireBootstrapLock(dbPath, options);
192
+ try {
193
+ const appliedNow = appliedMigrationIds(dbPath, options);
194
+ if (appliedNow === null) {
195
+ return declined("database has no _migrations table — not a bootstrapped Mirror database");
196
+ }
197
+ const pending = pendingMigrations(appliedNow);
198
+ // Another opener migrated between the pre-check and the lock.
199
+ if (pending.length === 0) return NOTHING_PENDING;
200
+
201
+ const backupPath = takeBackup(dbPath);
202
+ const db = openDatabaseForBootstrap(dbPath, options);
203
+ try {
204
+ runMigrations(db);
205
+ // The half of Python's open that only the schema performed (B1).
206
+ createSchema(db);
207
+ } finally {
208
+ db.close();
209
+ }
210
+ return { verdict: "applied", migrated: true, appliedIds: pending, backupPath };
211
+ } finally {
212
+ lock.release();
213
+ }
214
+ }