mirror-mind 0.0.1 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/log-assistant-reply.sh +85 -0
- 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 +646 -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 +100 -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.33.0.md +164 -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 +17 -0
- package/plugins/mirror-mind/hooks/hooks.json +62 -0
- package/plugins/mirror-mind/hooks/log-assistant-reply.sh +98 -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/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 +67 -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/hookPayload.ts +51 -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 +851 -0
- package/ts/src/conversation/loggerCli.ts +321 -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 +1872 -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 +83 -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 +1001 -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/sessionStartWelcomeRoute.ts +166 -0
- package/ts/src/frontDoor/soulRoute.ts +433 -0
- package/ts/src/frontDoor/stdinSource.ts +37 -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 +298 -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 +214 -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 +73 -0
- package/ts/src/hooks/runtime.ts +179 -0
- package/ts/src/hooks/runtimeDetection.ts +34 -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/mirrorForm.ts +43 -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,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.32.1 is the published CV22 release. v0.32.0 was tagged, and its
|
|
4
|
+
publication was refused by the project's own retired-surface tripwire:
|
|
5
|
+
one sentence in Getting Started named the retired Python invocation by
|
|
6
|
+
its literal form, which only the history and release notes may do. The
|
|
7
|
+
sentence is rephrased; nothing else changed. Everything v0.32.0's note
|
|
8
|
+
says is true of this version: install with `npm install -g mirror-mind`,
|
|
9
|
+
or upgrade a clone with the five lines, which include `npm link` and
|
|
10
|
+
`mirror runtime migrate`.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# v0.32.1 — The Release That Shipped
|
|
14
|
+
|
|
15
|
+
**Date:** 2026-10-11
|
|
16
|
+
|
|
17
|
+
## Highlights
|
|
18
|
+
|
|
19
|
+
- **This is the CV22 release.** Read [v0.32.0 — One Language, One Install](v0.32.0.md)
|
|
20
|
+
for what it is; this note only says why the number ends in 1.
|
|
21
|
+
- **One sentence changed**, in `docs/getting-started.md`: the paragraph telling a clone user
|
|
22
|
+
what the previous updater does no longer spells out the retired interpreter invocation.
|
|
23
|
+
- **No code, no behavior, no schema** differs from `v0.32.0`.
|
|
24
|
+
|
|
25
|
+
## Where We Started
|
|
26
|
+
|
|
27
|
+
`v0.32.0` was tagged at `78dd5836` and `stable` moved there. The publish workflow, which
|
|
28
|
+
stages the package from CI for a maintainer to approve, runs the retired-surface
|
|
29
|
+
tripwire first, and it refused: `docs/getting-started.md:385 mentions \`uv run python\`,
|
|
30
|
+
retired by CV22.DS10.TS5`. The sentence had been added after the upgrade rehearsal,
|
|
31
|
+
committed as a docs-only change, and tagged without re-running the guard; the tests
|
|
32
|
+
workflow skips docs-only pushes, so nothing ran it before the tag.
|
|
33
|
+
|
|
34
|
+
## What Changed
|
|
35
|
+
|
|
36
|
+
The project's rule is that a tag never moves and the doctor refuses a tag that is not at
|
|
37
|
+
`HEAD`, so the fix is a patch: the sentence now reads "the old interpreter form of the
|
|
38
|
+
command now fails with `No module named memory.__main__`", which says the same thing to
|
|
39
|
+
the person it is for without naming the form the guard forbids. The guard was right: a
|
|
40
|
+
Getting Started page is not the place to teach the retired invocation, even in the past
|
|
41
|
+
tense.
|
|
42
|
+
|
|
43
|
+
`v0.32.0` remains a tag in the repository and was never published to npm.
|
|
44
|
+
|
|
45
|
+
## Conscious Exclusions
|
|
46
|
+
|
|
47
|
+
- Moving the `v0.32.0` tag to the fix. It would have given a cleaner version list at the
|
|
48
|
+
cost of breaking, by hand, the rule the release tooling encodes, on the first release
|
|
49
|
+
made under it.
|
|
50
|
+
|
|
51
|
+
## What We Learned
|
|
52
|
+
|
|
53
|
+
A docs-only commit between the last green check and the tag is still a commit. The
|
|
54
|
+
retired-surface guard belongs in the Docs workflow too, so a docs-only push cannot pass
|
|
55
|
+
CI while carrying what the publish gate refuses; that is a Change Request, not this patch.
|
|
56
|
+
|
|
57
|
+
## Next Horizon
|
|
58
|
+
|
|
59
|
+
Publication through the staged route, then CV22 closes.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
v0.33.0 closes CV21.DS2, the Mirror Plugin & MCP Foundation: the one plugin
|
|
4
|
+
Mirror ships now works as it is on Claude Code, Codex, and Grok. Its MCP
|
|
5
|
+
server starts on all three, from a GUI launch too, because its manifest no
|
|
6
|
+
longer names a path a runtime must expand; the explicit Mirror form is
|
|
7
|
+
recognized in every runtime's spelling; and each session is logged under
|
|
8
|
+
its own runtime, with the Mirror question and every reply logged beside
|
|
9
|
+
its prompt. It was validated in isolated live sessions on Claude Code
|
|
10
|
+
2.1.296, Codex 0.162.1, and Grok 1.0.52. The release also carries a
|
|
11
|
+
faster Pi session start (CV9.E2.S32). Package and Claude Code users update
|
|
12
|
+
as usual; a plugin installed into Codex or Grok by copy is re-installed to
|
|
13
|
+
receive the new entry.
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# v0.33.0 — One Plugin, Three Runtimes
|
|
17
|
+
|
|
18
|
+
**Date:** 2026-10-13
|
|
19
|
+
|
|
20
|
+
## Highlights
|
|
21
|
+
|
|
22
|
+
- **The MCP server starts on every runtime that takes the plugin.** The manifest's entry
|
|
23
|
+
used to name `${CLAUDE_PLUGIN_ROOT}/mcp/launch.sh`, which Codex never expanded, so the
|
|
24
|
+
server never started there. It is now a small locator run by `/bin/sh` that finds the
|
|
25
|
+
installed `mirror` and `node` itself (`MIRROR_BIN`, the `PATH`, the global bin
|
|
26
|
+
directories), so it also starts when a runtime is launched from the GUI without your
|
|
27
|
+
shell's `PATH`.
|
|
28
|
+
- **Every reply is logged, beside its prompt, under the runtime it came from.** The shared
|
|
29
|
+
hooks detect Claude Code, Codex, or Grok, label the session `claude_code`, `codex`, or
|
|
30
|
+
`grok_build`, and log the turn's final answer from the runtime's Stop event, paired with
|
|
31
|
+
its prompt by the runtime's own turn id.
|
|
32
|
+
- **A Mirror turn is a conversation turn.** `/mirror-mind:mm-mirror …`, `$mirror-mind:mm:mirror …`,
|
|
33
|
+
`/mm-mirror …`, and the other spellings are recognized by the inject hook, and the
|
|
34
|
+
question is logged without the form, so memory extraction sees the question with its
|
|
35
|
+
answer.
|
|
36
|
+
- **The plugin validates cleanly and its hooks cannot hang a turn.** Hook commands quote
|
|
37
|
+
the plugin root, so `claude plugin validate` passes with no warnings, and hook timeouts
|
|
38
|
+
are the seconds the runtimes read them as. The values shipped before meant hours.
|
|
39
|
+
- **Codex's plugin tools, and Grok's, are not yet in the model's hands.** Codex starts the
|
|
40
|
+
server and keeps a plugin's MCP tools behind its own `tool_search`; Grok starts it and
|
|
41
|
+
lists its seven tools, but does not attach it to a session. The second is the next Grok
|
|
42
|
+
story's to investigate.
|
|
43
|
+
|
|
44
|
+
## Where We Started
|
|
45
|
+
|
|
46
|
+
CV21 converges Mirror's runtimes on one artifact: a Claude-format plugin carrying the
|
|
47
|
+
skills, the lifecycle hooks, and the Mirror MCP server, taken by each runtime by install
|
|
48
|
+
rather than wired by hand. Its re-baseline, earlier the same day, measured what the
|
|
49
|
+
installed runtimes do with the plugin `v0.32.1` ships. Three of four take it as it is,
|
|
50
|
+
and four things in it were wrong:
|
|
51
|
+
- Claude Code's validator warned on every hook command;
|
|
52
|
+
- the MCP entry did not start on Codex;
|
|
53
|
+
- the inject hook missed the Mirror skill on every plugin install, because each runtime
|
|
54
|
+
spells it differently;
|
|
55
|
+
- the shared hooks logged Codex and Grok sessions as Claude Code's, without their replies.
|
|
56
|
+
|
|
57
|
+
## What Changed
|
|
58
|
+
|
|
59
|
+
The four fixes were planned as one Delivery Story, after a review through six lenses
|
|
60
|
+
(engineering, operations, quality, security, data, and model behavior).
|
|
61
|
+
|
|
62
|
+
**The MCP entry was chosen by measurement.** Two placeholder-free entries were run on all
|
|
63
|
+
three runtimes before either was written: the inline locator, and the bare `mirror mcp`.
|
|
64
|
+
Both start from a terminal. Only the locator starts from a GUI-launch `PATH`, as written
|
|
65
|
+
and inside Claude Code, where `mirror mcp` failed with "executable not found". The
|
|
66
|
+
measurement also showed Grok substituting set environment variables inside MCP arguments,
|
|
67
|
+
so the locator's own variables carry names nobody exports. `mcp/launch.sh` is retired.
|
|
68
|
+
|
|
69
|
+
**The reply rule changed before a line was written.** The plan first paired replies with
|
|
70
|
+
logged prompts and kept skipping slash commands. The review showed that would drop the
|
|
71
|
+
Mirror answers on Claude Code, which until now reached the database only through the
|
|
72
|
+
transcript import at session end. So the Mirror question is logged too, and the reply
|
|
73
|
+
beside it. Replies to other slash commands, such as `/mm-journeys`, are not recorded:
|
|
74
|
+
they are commands, not conversation.
|
|
75
|
+
|
|
76
|
+
**Sessions know their runtime.** Grok's runner sets its own variables on every hook and
|
|
77
|
+
names events in camelCase, and Codex's payload carries a `turn_id`; Claude Code is what
|
|
78
|
+
remains. The label is stamped on every prompt, so a conversation the Mirror skill opens
|
|
79
|
+
inherits it.
|
|
80
|
+
|
|
81
|
+
**A defect of the release's own was paid before it shipped.** A skipped reply was written
|
|
82
|
+
to `hooks.log`, which `runtime diagnose` reads as failures, so every slash command would
|
|
83
|
+
have raised a warning. Only a reply genuinely lost, its prompt never having reached
|
|
84
|
+
Mirror, is written there now.
|
|
85
|
+
|
|
86
|
+
### What you will notice
|
|
87
|
+
|
|
88
|
+
- **On Claude Code**, replies are logged as each turn ends rather than imported when the
|
|
89
|
+
session closes, and an explicit Mirror turn's question is logged with its answer. The
|
|
90
|
+
`mm-mirror` skill no longer records a summary by hand where the hooks run.
|
|
91
|
+
- **In `runtime diagnose`**, a hook warning now means a real failure.
|
|
92
|
+
- **For a plugin installed by copy** (Codex from a marketplace, Grok with `grok plugin
|
|
93
|
+
install`), nothing changes until you re-install: the copy keeps its own manifest and
|
|
94
|
+
launcher, and keeps working as before.
|
|
95
|
+
|
|
96
|
+
## Upgrading
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
mirror runtime update # or: npm install -g mirror-mind
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
There is no database migration in this release.
|
|
103
|
+
|
|
104
|
+
- **Claude Code**, wired the documented way (`~/.claude/skills/mirror-mind` linked to the
|
|
105
|
+
package's plugin), reads the plugin in place: new sessions get the new hooks and MCP
|
|
106
|
+
entry with nothing to do.
|
|
107
|
+
- **Codex and Grok, if you installed the plugin into them**, re-install it to receive
|
|
108
|
+
the new MCP entry and the Stop hook. Codex copies a plugin into its cache at a version;
|
|
109
|
+
Grok copies it on install. Codex's documented wiring is still `v0.32.1`'s two steps and
|
|
110
|
+
wrapper, which this release does not change.
|
|
111
|
+
- **Pi** gets the faster session start described below, with nothing to do.
|
|
112
|
+
- **Gemini CLI** is unaffected by this release; see the notice below.
|
|
113
|
+
|
|
114
|
+
## Also In This Release
|
|
115
|
+
|
|
116
|
+
- **Pi opens a session in one front-door call** (CV9.E2.S32). The orientation write and
|
|
117
|
+
the two renders that read it, the welcome card and the status line, run in one process
|
|
118
|
+
instead of three. Startup to the status line went from 846 ms to 470 ms, the median of
|
|
119
|
+
five starts in the development home. The prompt log no longer holds the turn: it is
|
|
120
|
+
queued, and settled before the reply is logged.
|
|
121
|
+
- **Notice: Gemini CLI is retired as a Mirror runtime, and Antigravity is its
|
|
122
|
+
successor** ([decision](../project/decisions.md#gemini-cli-is-retired-and-antigravity-is-its-successor)).
|
|
123
|
+
Google deprecated the Gemini Code Assist backend for individuals. The integration still
|
|
124
|
+
ships in this release and still works. CV21.DS8 removes it behind a documented cutoff,
|
|
125
|
+
only once Antigravity gives a Gemini CLI user what they have now.
|
|
126
|
+
|
|
127
|
+
## Conscious Exclusions
|
|
128
|
+
|
|
129
|
+
- **Codex through the plugin, as the documented route**, and its marketplace: CV21.DS4.
|
|
130
|
+
- **Grok's attachment of the MCP server to a session**, and Grok's honest L3 (it offers no
|
|
131
|
+
per-turn injection): CV21.DS10.
|
|
132
|
+
- **The SessionEnd time bound.** Codex gives a SessionEnd hook with no timeout 1 second,
|
|
133
|
+
Grok 1.5 seconds. With a provider key the close tail's extraction may not finish in
|
|
134
|
+
that time; the conversation is closed first and extracted at the next session start, so
|
|
135
|
+
nothing is lost. Left to CV21.DS4 and DS10.
|
|
136
|
+
- **A status line in the plugin.** A plugin cannot carry one (CV21.DS12); CV21.DS11 will
|
|
137
|
+
document it as a user step.
|
|
138
|
+
- **Three small findings, captured** as CR129 (`mirror mcp` with no home prints a stack
|
|
139
|
+
trace), CR130 (double-encoded dashes in the configuration reference), and CR131
|
|
140
|
+
(`runtime diagnose` does not run the MCP locator).
|
|
141
|
+
|
|
142
|
+
## What We Learned
|
|
143
|
+
|
|
144
|
+
The instrument needs proving before the thing it measures. The live validation found four
|
|
145
|
+
defects in its own route before it found anything about the plugin:
|
|
146
|
+
- the real config file reaching a scratch session;
|
|
147
|
+
- Claude Code remembering an earlier MCP failure for fifteen minutes;
|
|
148
|
+
- macOS's bash 3.2 refusing a construct;
|
|
149
|
+
- a static step that could not run twice.
|
|
150
|
+
|
|
151
|
+
Writing the proof of the last fix found a fifth: Codex leaves an app-server daemon running
|
|
152
|
+
from its home after a session, and it had outlived the previous story's cleanup too.
|
|
153
|
+
|
|
154
|
+
A runtime's own view is often the better witness. Codex's log showed the server's
|
|
155
|
+
handshake, and its `/mcp` view showed the seven tools, where the model could not name
|
|
156
|
+
them. Grok's MCP view showed the server ready while its session log said none was
|
|
157
|
+
attached. That contradiction is now the next Grok story's starting point.
|
|
158
|
+
|
|
159
|
+
## Next Horizon
|
|
160
|
+
|
|
161
|
+
CV21 continues with Codex through the canonical plugin (DS4), then Antigravity through
|
|
162
|
+
its skills and a native layer (DS7) and the Gemini CLI sunset behind it (DS8), Grok
|
|
163
|
+
through the plugin (DS10), user extensions on every runtime (DS5), and the contract and
|
|
164
|
+
docs refresh (DS11).
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
Mirror Mind v0.8.0 publishes the first stable self-update foundation. The
|
|
4
|
+
release turns update from an informal git pull into a visible runtime workflow:
|
|
5
|
+
status, diagnosis, backup, dry-run planning, fast-forward execution, updater
|
|
6
|
+
self-recovery, stable/main channels, welcome version visibility, and runtime
|
|
7
|
+
release-note access. It also establishes that `main` is integration while
|
|
8
|
+
`stable` is the user-facing update channel. This is not Mirror Mind 1.0 yet;
|
|
9
|
+
it is the operational base that makes future stable releases safe to receive.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# v0.8.0 — Stable Self-Update Foundation
|
|
13
|
+
|
|
14
|
+
**Date:** 2026-05-22
|
|
15
|
+
|
|
16
|
+
## Highlights
|
|
17
|
+
|
|
18
|
+
- Runtime self-update now has a complete safe path: status, diagnosis, backup,
|
|
19
|
+
dry-run, update check, fast-forward execution, migrations, and post-update
|
|
20
|
+
health validation.
|
|
21
|
+
- The updater can repair itself through a code-only recovery lane when stale
|
|
22
|
+
updater code crashes before normal update planning.
|
|
23
|
+
- Mirror Mind now distinguishes `main` as the integration/dogfooding channel and
|
|
24
|
+
`stable` as the user-facing release channel.
|
|
25
|
+
- The welcome card shows installed version and update channel, so users can see
|
|
26
|
+
what they are running before asking for help.
|
|
27
|
+
- Runtime release notes can be read through `python -m memory runtime
|
|
28
|
+
release-notes` and natural-language Mirror requests such as "What's new in the
|
|
29
|
+
latest Mirror Mind release?"
|
|
30
|
+
|
|
31
|
+
## Where We Started
|
|
32
|
+
|
|
33
|
+
Mirror Mind already had a strong local-first runtime, but update was still a
|
|
34
|
+
human memory problem. Production and development clones could be confused. A user
|
|
35
|
+
could not ask the runtime whether it was healthy enough to update. Backup existed
|
|
36
|
+
but was not part of a visible self-update route. Any push to `main` risked being
|
|
37
|
+
interpreted as a user-facing update, even though Ariad's release model says a
|
|
38
|
+
release is a closed, validated arc of work, not just a commit.
|
|
39
|
+
|
|
40
|
+
The first self-update slices made the runtime inspectable. Later slices made it
|
|
41
|
+
safe to mutate. The final pressure came from dogfooding: a stale updater crashed
|
|
42
|
+
while trying to install its own fix. That proved the updater needed a recovery
|
|
43
|
+
lane that did not require an end user to know git bootstrap commands.
|
|
44
|
+
|
|
45
|
+
## What Changed
|
|
46
|
+
|
|
47
|
+
The runtime now exposes a coherent operational surface:
|
|
48
|
+
|
|
49
|
+
- `runtime status` reports version, repository state, mirror home, database,
|
|
50
|
+
migrations, extensions, clone role, update channel, Python version, and
|
|
51
|
+
environment.
|
|
52
|
+
- `runtime diagnose` classifies drift and repair routes without mutating files or
|
|
53
|
+
the database.
|
|
54
|
+
- `runtime backup` creates and structurally verifies database backups.
|
|
55
|
+
- `runtime version` shows the installed version, clone role, and update channel.
|
|
56
|
+
- `runtime update --check` checks the configured channel without mutating local
|
|
57
|
+
refs.
|
|
58
|
+
- `runtime update --dry-run` plans from local refs without mutation.
|
|
59
|
+
- `runtime update` performs a backup-first, fast-forward-only update and applies
|
|
60
|
+
migrations through a one-shot `MemoryClient` open.
|
|
61
|
+
- `runtime update --repair-updater` provides a code-only recovery lane when the
|
|
62
|
+
full status gate cannot run because the updater itself is stale or broken.
|
|
63
|
+
|
|
64
|
+
The production/development boundary is now explicit through `.mirror-clone-role`.
|
|
65
|
+
The update target is explicit through `.mirror-update-channel`. Missing or invalid
|
|
66
|
+
update channels default to `stable`.
|
|
67
|
+
|
|
68
|
+
The welcome card now says what the runtime is:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
◇ Mirror · <user>
|
|
72
|
+
Version 0.8.0 · channel stable
|
|
73
|
+
...
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Release notes are prospective from this release onward. Historical tags through
|
|
77
|
+
`v0.7.0` remain valid history, but `v0.8.0` is the first release that carries the
|
|
78
|
+
new release-management loop into the runtime itself.
|
|
79
|
+
|
|
80
|
+
## Conscious Exclusions
|
|
81
|
+
|
|
82
|
+
- This release does not complete CV9 or claim Mirror Mind 1.0 readiness.
|
|
83
|
+
- Release-aware update notices still fall back to commit counts when they cannot
|
|
84
|
+
map an update to a release note; richer release-aware notices are planned next.
|
|
85
|
+
- Stable promotion is still a controlled manual process, not a fully automated
|
|
86
|
+
command or Maestro workflow.
|
|
87
|
+
- Full natural-language release-note parity across every runtime surface remains
|
|
88
|
+
follow-up work.
|
|
89
|
+
- The local production checkout may still have git branch `main` while following
|
|
90
|
+
update channel `stable`; the channel, not the local branch name, controls the
|
|
91
|
+
update target.
|
|
92
|
+
|
|
93
|
+
## What We Learned
|
|
94
|
+
|
|
95
|
+
Self-update is not one command. It is a chain of trust: know the current state,
|
|
96
|
+
refuse unsafe mutation, preserve recoverability, apply the smallest safe change,
|
|
97
|
+
explain what happened, and leave a future session able to understand the result.
|
|
98
|
+
|
|
99
|
+
The dogfooding incident where the updater could not install its own fix clarified
|
|
100
|
+
an important product rule: recovery paths must be usable by non-experts. Manual
|
|
101
|
+
git recovery is acceptable for development, but the product needs an updater
|
|
102
|
+
self-repair lane.
|
|
103
|
+
|
|
104
|
+
The release-channel split also clarified the relationship between Ariad and git.
|
|
105
|
+
`main` is where integration happens. `stable` is where a release becomes a user
|
|
106
|
+
promise.
|
|
107
|
+
|
|
108
|
+
## Next Horizon
|
|
109
|
+
|
|
110
|
+
The remaining Self-Update Done work is now clearer:
|
|
111
|
+
|
|
112
|
+
- make update notices and post-install output speak in release terms when a
|
|
113
|
+
stable release note exists;
|
|
114
|
+
- ensure release-note access works naturally across supported runtime surfaces;
|
|
115
|
+
- add a repeatable release promotion checklist or doctor;
|
|
116
|
+
- provide a controlled promotion path for `stable`;
|
|
117
|
+
- validate a fresh clone updating from one stable release to the next without
|
|
118
|
+
manual git intervention.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
Mirror Mind v0.9.0 closes the Self-Update Done release arc. The release turns
|
|
4
|
+
the v0.8.0 self-update foundation into a release-aware operating loop: stable
|
|
5
|
+
update notices speak in release terms, release notes are available across
|
|
6
|
+
runtime skill surfaces, promotion readiness is inspectable through a doctor,
|
|
7
|
+
stable promotion has a controlled execution path, and the fresh-user smoke
|
|
8
|
+
procedure proves the stable no-op path while identifying the release-state
|
|
9
|
+
boundary needed for update-hop validation. This is still not Mirror Mind 1.0;
|
|
10
|
+
it is the release-management layer that makes the path to 1.0 safer.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# v0.9.0 — Self-Update Done
|
|
14
|
+
|
|
15
|
+
**Date:** 2026-05-23
|
|
16
|
+
|
|
17
|
+
## Highlights
|
|
18
|
+
|
|
19
|
+
- Stable update surfaces now prefer release language when local refs contain
|
|
20
|
+
newer release notes.
|
|
21
|
+
- Release notes are available across Pi, Gemini/Codex shared skills, and Claude
|
|
22
|
+
Code.
|
|
23
|
+
- `runtime release-doctor` provides a read-only promotion readiness checklist.
|
|
24
|
+
- `runtime release-promote` provides a controlled stable promotion path with
|
|
25
|
+
dry-run, local promotion, and explicit push.
|
|
26
|
+
- Fresh-user stable update smoke now has an isolated procedure and validated the
|
|
27
|
+
current stable no-op path without touching production data.
|
|
28
|
+
|
|
29
|
+
## Where We Started
|
|
30
|
+
|
|
31
|
+
`v0.8.0` made self-update safe enough to exist: status, diagnosis, backup,
|
|
32
|
+
dry-run, execution, updater repair, release notes, and stable/main channels were
|
|
33
|
+
in place. But the release layer around that mechanism was still thin. Stable
|
|
34
|
+
updates could still look like commit movement. Release notes existed, but runtime
|
|
35
|
+
skill access was uneven. Promotion relied on human git steps. And the user-shaped
|
|
36
|
+
smoke test had not yet proven what a fresh clone would experience.
|
|
37
|
+
|
|
38
|
+
The remaining question was not whether Mirror could update in principle. It was
|
|
39
|
+
whether the release path around update was coherent enough to be repeated.
|
|
40
|
+
|
|
41
|
+
## What Changed
|
|
42
|
+
|
|
43
|
+
Release-aware update notices now connect stable updates with narrative release
|
|
44
|
+
notes when the local upstream ref contains newer release metadata. `runtime
|
|
45
|
+
update --check` remains conservative and non-mutating; it can report a remote
|
|
46
|
+
commit without pretending to have fetched release-note details. Dry-run and
|
|
47
|
+
successful stable updates can speak in terms of the release being installed.
|
|
48
|
+
|
|
49
|
+
Release notes became available across runtime skill surfaces. Pi keeps
|
|
50
|
+
`/mm-release-notes`, Gemini and Codex receive the shared `.agents` skill, and
|
|
51
|
+
Claude Code has `/mm:release-notes`. The skill contract stays thin: call
|
|
52
|
+
`python -m memory runtime release-notes` and show the output verbatim unless the
|
|
53
|
+
user asks for a summary.
|
|
54
|
+
|
|
55
|
+
Release promotion became inspectable and then executable. `runtime
|
|
56
|
+
release-doctor` checks the repository, clean tree, package version, release note,
|
|
57
|
+
release index, tag state, and stable ref relationship without mutation. `runtime
|
|
58
|
+
release-promote` uses that doctor as a gate, creates or reuses the release tag,
|
|
59
|
+
creates or fast-forwards the local stable branch only when safe, and publishes
|
|
60
|
+
only when `--push` is explicit.
|
|
61
|
+
|
|
62
|
+
The fresh-user smoke story then tested the stable update path in a temporary
|
|
63
|
+
clone and temporary Mirror home. The smoke validated the current published stable
|
|
64
|
+
state as a no-op update and revealed an important isolation rule for historical
|
|
65
|
+
stable versions: set both `MIRROR_USER=` and `MIRROR_HOME=<temp-home>`, because
|
|
66
|
+
`MEMORY_DIR` alone does not prevent older code from loading `MIRROR_USER` from
|
|
67
|
+
`.env`.
|
|
68
|
+
|
|
69
|
+
## Conscious Exclusions
|
|
70
|
+
|
|
71
|
+
- This release does not close CV9 or claim Mirror Mind 1.0 readiness.
|
|
72
|
+
- The fresh-user smoke could not prove a `v0.8.0 -> v0.9.0` hop before this
|
|
73
|
+
release was prepared and promoted; that hop is the post-promotion validation
|
|
74
|
+
target.
|
|
75
|
+
- The release promotion path does not query GitHub Actions, wait for CI, force
|
|
76
|
+
push, rewrite tags, bump versions, or write release notes.
|
|
77
|
+
- Production update validation remains a controlled operational step after
|
|
78
|
+
stable promotion.
|
|
79
|
+
|
|
80
|
+
## What We Learned
|
|
81
|
+
|
|
82
|
+
A self-updating runtime needs a release vocabulary, not only update mechanics.
|
|
83
|
+
Users should see releases, not just commits. Maintainers should see readiness,
|
|
84
|
+
not just git commands. And smoke tests should be shaped like real users, not like
|
|
85
|
+
the developer's machine.
|
|
86
|
+
|
|
87
|
+
The visualization experiment also clarified how Ariad work should be shown:
|
|
88
|
+
Bird's-Eye maps locate work, Transition Views show movement, Release Intent
|
|
89
|
+
shows the version arc being built, and checkpoint views should show only the
|
|
90
|
+
components useful for that stage.
|
|
91
|
+
|
|
92
|
+
## Next Horizon
|
|
93
|
+
|
|
94
|
+
After `v0.9.0` is promoted to stable, the next validation is the real fresh-user
|
|
95
|
+
update hop from `v0.8.0` to `v0.9.0`. Once that passes, CV9.E3's Self-Update Done
|
|
96
|
+
track can close and the project can return to the remaining CV9 readiness work:
|
|
97
|
+
boundary hardening and stabilization before the eventual Mirror Mind 1.0
|
|
98
|
+
boundary.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
digest: >
|
|
3
|
+
Mirror Mind v0.9.1 adds the missing opening awareness around the v0.9.0
|
|
4
|
+
self-update path. The runtime can now surface stable release availability in
|
|
5
|
+
the welcome through a network-tolerant check and a small cache, while Pi gets
|
|
6
|
+
a compact status-bar signal that shows the active user and whether attention
|
|
7
|
+
is needed. This patch does not change the update executor; it makes the
|
|
8
|
+
existing stable update capability visible at the moment the user opens the
|
|
9
|
+
Mirror.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# v0.9.1 — Welcome Release Awareness
|
|
13
|
+
|
|
14
|
+
**Date:** 2026-05-23
|
|
15
|
+
|
|
16
|
+
## Highlights
|
|
17
|
+
|
|
18
|
+
- Welcome can detect a newer stable release through a lightweight remote check
|
|
19
|
+
when its update cache is missing or stale.
|
|
20
|
+
- Update awareness is cached under `<mirror-home>/runtime/update-check.json`.
|
|
21
|
+
- Remote welcome checks fail softly and can be disabled with
|
|
22
|
+
`MIRROR_WELCOME_REMOTE_UPDATE_CHECK=off`.
|
|
23
|
+
- `python -m memory welcome --status-line` renders a compact status signal for
|
|
24
|
+
runtime status bars.
|
|
25
|
+
- Pi now uses the compact status signal instead of showing only conversation
|
|
26
|
+
logging status.
|
|
27
|
+
|
|
28
|
+
## Where We Started
|
|
29
|
+
|
|
30
|
+
After publishing `v0.9.0`, the self-update mechanism worked, but the opening
|
|
31
|
+
experience did not yet reveal it. A user could run `runtime update --check` and
|
|
32
|
+
see the new release, but simply opening Mirror showed version and channel only.
|
|
33
|
+
The system was operationally capable but experientially quiet.
|
|
34
|
+
|
|
35
|
+
That gap mattered because the desired user experience is natural: open Mirror,
|
|
36
|
+
see that a release is available, ask what changed, and ask Mirror to update.
|
|
37
|
+
|
|
38
|
+
## What Changed
|
|
39
|
+
|
|
40
|
+
The welcome card now has network-tolerant release awareness. It can refresh a
|
|
41
|
+
small update cache with a lightweight `git ls-remote` check when the cache is
|
|
42
|
+
absent or older than six hours. It does not fetch, mutate refs, update files,
|
|
43
|
+
run backups, run migrations, or block startup. If the remote is unavailable, the
|
|
44
|
+
welcome still opens normally.
|
|
45
|
+
|
|
46
|
+
When a stable update is known, the welcome can show:
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
Update available: v0.9.1 — Welcome Release Awareness
|
|
50
|
+
Ask: "what changed?" or "update my Mirror"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The compact status-line command gives runtimes a small signal:
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
◇ alisson-vale · ✓
|
|
57
|
+
◇ alisson-vale · ⬆ v0.9.1
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Pi's `mirror-logger` extension now uses that status-line command for its footer
|
|
61
|
+
status.
|
|
62
|
+
|
|
63
|
+
## Conscious Exclusions
|
|
64
|
+
|
|
65
|
+
- This patch does not auto-update the runtime.
|
|
66
|
+
- The status bar reads cached state only; welcome owns remote refresh.
|
|
67
|
+
- The release title is available when local release notes exist. Otherwise the
|
|
68
|
+
notice degrades to version-only or commit-level availability.
|
|
69
|
+
- This patch does not add a full health dashboard.
|
|
70
|
+
|
|
71
|
+
## What We Learned
|
|
72
|
+
|
|
73
|
+
Mirror Mind should be local-first in state and network-tolerant in operation.
|
|
74
|
+
The welcome should not depend on the network, but it can use the network as an
|
|
75
|
+
antenna. The status bar should remain a signal; the welcome is where explanation
|
|
76
|
+
and next action belong.
|
|
77
|
+
|
|
78
|
+
## Next Horizon
|
|
79
|
+
|
|
80
|
+
The next release-awareness improvements should come from dogfooding: whether the
|
|
81
|
+
status signal is clear enough, whether the cache TTL feels right, and whether
|
|
82
|
+
natural-language update requests should get a dedicated intent path beyond the
|
|
83
|
+
existing runtime commands.
|
package/package.json
CHANGED
|
@@ -1,16 +1,112 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mirror-mind",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.33.0",
|
|
4
|
+
"description": "Mirror Mind: a local-first memory and identity framework for agentic AI runtimes (Pi, Claude Code, Gemini CLI, Codex)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git+https://github.com/mirror-mind-ai/mirror.git"
|
|
9
9
|
},
|
|
10
10
|
"homepage": "https://github.com/mirror-mind-ai/mirror#readme",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
11
|
+
"keywords": [
|
|
12
|
+
"mirror-mind",
|
|
13
|
+
"memory",
|
|
14
|
+
"identity",
|
|
15
|
+
"agent",
|
|
16
|
+
"pi-package",
|
|
17
|
+
"claude-code",
|
|
18
|
+
"gemini-cli",
|
|
19
|
+
"codex",
|
|
20
|
+
"sqlite",
|
|
21
|
+
"local-first"
|
|
22
|
+
],
|
|
23
|
+
"type": "module",
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=24"
|
|
13
26
|
},
|
|
14
|
-
"
|
|
15
|
-
|
|
27
|
+
"bin": {
|
|
28
|
+
"mirror": "bin/mirror.js",
|
|
29
|
+
"mirror-hook": "bin/mirror-hook.js"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"bin",
|
|
33
|
+
"ts/src",
|
|
34
|
+
"templates",
|
|
35
|
+
"docs/releases",
|
|
36
|
+
".pi/extensions",
|
|
37
|
+
".pi/skills",
|
|
38
|
+
".claude/hooks",
|
|
39
|
+
".gemini/hooks",
|
|
40
|
+
"plugins/mirror-mind",
|
|
41
|
+
"scripts/codex-hooks",
|
|
42
|
+
"scripts/codex-mirror.sh",
|
|
43
|
+
"AGENTS.md",
|
|
44
|
+
"README.md",
|
|
45
|
+
"LICENSE"
|
|
46
|
+
],
|
|
47
|
+
"pi": {
|
|
48
|
+
"extensions": [
|
|
49
|
+
"./.pi/extensions/mirror-logger.ts"
|
|
50
|
+
],
|
|
51
|
+
"skills": [
|
|
52
|
+
"./.pi/skills"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"imports": {
|
|
56
|
+
"#backup/*": "./ts/src/backup/*",
|
|
57
|
+
"#builder/*": "./ts/src/builder/*",
|
|
58
|
+
"#consult/*": "./ts/src/consult/*",
|
|
59
|
+
"#conversation/*": "./ts/src/conversation/*",
|
|
60
|
+
"#cultivation/*": "./ts/src/cultivation/*",
|
|
61
|
+
"#db/*": "./ts/src/db/*",
|
|
62
|
+
"#descriptor/*": "./ts/src/descriptor/*",
|
|
63
|
+
"#docs/*": "./ts/src/docs/*",
|
|
64
|
+
"#evals/*": "./ts/evals/*",
|
|
65
|
+
"#explorer/*": "./ts/src/explorer/*",
|
|
66
|
+
"#extensions/*": "./ts/src/extensions/*",
|
|
67
|
+
"#extraction/*": "./ts/src/extraction/*",
|
|
68
|
+
"#fixtures/*": "./ts/test/fixtures/*",
|
|
69
|
+
"#frontDoor/*": "./ts/src/frontDoor/*",
|
|
70
|
+
"#goldens/*": "./ts/test/goldens/*",
|
|
71
|
+
"#guards/*": "./ts/src/guards/*",
|
|
72
|
+
"#helpers/*": "./ts/test/helpers/*",
|
|
73
|
+
"#hooks/*": "./ts/src/hooks/*",
|
|
74
|
+
"#identity/*": "./ts/src/identity/*",
|
|
75
|
+
"#init/*": "./ts/src/init/*",
|
|
76
|
+
"#journey/*": "./ts/src/journey/*",
|
|
77
|
+
"#mcp/*": "./ts/src/mcp/*",
|
|
78
|
+
"#memory/*": "./ts/src/memory/*",
|
|
79
|
+
"#mirror/*": "./ts/src/mirror/*",
|
|
80
|
+
"#mode/*": "./ts/src/mode/*",
|
|
81
|
+
"#observability/*": "./ts/src/observability/*",
|
|
82
|
+
"#persona/*": "./ts/src/persona/*",
|
|
83
|
+
"#planning/*": "./ts/src/planning/*",
|
|
84
|
+
"#providers/*": "./ts/src/providers/*",
|
|
85
|
+
"#repair/*": "./ts/src/repair/*",
|
|
86
|
+
"#runtime/*": "./ts/src/runtime/*",
|
|
87
|
+
"#search/*": "./ts/src/search/*",
|
|
88
|
+
"#seed/*": "./ts/src/seed/*",
|
|
89
|
+
"#smoke/*": "./ts/smoke/*",
|
|
90
|
+
"#soul/*": "./ts/src/soul/*",
|
|
91
|
+
"#tasks/*": "./ts/src/tasks/*",
|
|
92
|
+
"#util/*": "./ts/src/util/*",
|
|
93
|
+
"#welcome/*": "./ts/src/welcome/*"
|
|
94
|
+
},
|
|
95
|
+
"scripts": {
|
|
96
|
+
"release:doctor": "node ts/scripts/releaseDoctor.ts",
|
|
97
|
+
"release:promote": "node ts/scripts/releasePromote.ts",
|
|
98
|
+
"typecheck": "tsc --noEmit",
|
|
99
|
+
"test": "node --test \"ts/test/**/*.test.ts\"",
|
|
100
|
+
"eval": "node --env-file-if-exists=.env ts/evals/harness/cli.ts",
|
|
101
|
+
"lint": "biome check .",
|
|
102
|
+
"format": "biome format --write ."
|
|
103
|
+
},
|
|
104
|
+
"devDependencies": {
|
|
105
|
+
"@biomejs/biome": "^2.2.0",
|
|
106
|
+
"@types/node": "^24.0.0",
|
|
107
|
+
"typescript": "^5.8.0"
|
|
108
|
+
},
|
|
109
|
+
"dependencies": {
|
|
110
|
+
"yaml": "^2.9.0"
|
|
111
|
+
}
|
|
16
112
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mirror-mind",
|
|
3
|
+
"version": "0.33.0",
|
|
4
|
+
"description": "Mirror Mind — local-first memory and identity for agentic runtimes.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Mirror Mind"
|
|
7
|
+
},
|
|
8
|
+
"mcpServers": {
|
|
9
|
+
"mirror-mind": {
|
|
10
|
+
"command": "/bin/sh",
|
|
11
|
+
"args": [
|
|
12
|
+
"-c",
|
|
13
|
+
"mmbin=\"\"; [ -n \"$MIRROR_BIN\" ] && [ -x \"$MIRROR_BIN/mirror\" ] && mmbin=\"$MIRROR_BIN/mirror\"; [ -n \"$mmbin\" ] || mmbin=\"$(command -v mirror 2>/dev/null)\"; for mmdir in \"$HOME/.nvm/current/bin\" /opt/homebrew/bin /usr/local/bin; do [ -n \"$mmbin\" ] && break; [ -x \"$mmdir/mirror\" ] && mmbin=\"$mmdir/mirror\"; done; [ -n \"$mmbin\" ] || { echo \"mirror-mind: mirror not found on PATH; the MCP server cannot start. Install mirror-mind (npm install -g mirror-mind) or set MIRROR_BIN to its bin directory.\" >&2; exit 1; }; mmnode=\"$MIRROR_NODE\"; [ -n \"$mmnode\" ] && [ -x \"$mmnode\" ] || mmnode=\"$(command -v node 2>/dev/null)\"; for mmdir in \"$(dirname \"$mmbin\")\" \"$HOME/.nvm/current/bin\" /opt/homebrew/bin /usr/local/bin; do [ -n \"$mmnode\" ] && break; [ -x \"$mmdir/node\" ] && mmnode=\"$mmdir/node\"; done; [ -n \"$mmnode\" ] || { echo \"mirror-mind: node not found on PATH; the MCP server cannot start. Set MIRROR_NODE.\" >&2; exit 1; }; exec \"$mmnode\" \"$mmbin\" mcp"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|