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