mirror-mind 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +128 -2
- 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 +110 -4
- 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,244 @@
|
|
|
1
|
+
// Release-note reading for the runtime surface (CV22.DS7.TS3, plateau 2).
|
|
2
|
+
// Port of the release-note half of `src/memory/cli/runtime.py`.
|
|
3
|
+
//
|
|
4
|
+
// Two sources, one document shape. The working tree answers "what does this
|
|
5
|
+
// checkout contain"; a git ref answers "what does the channel contain that I
|
|
6
|
+
// have not merged", which is the question `release-notes pending` exists for
|
|
7
|
+
// and the reason this path shells out to `ls-tree`/`show` instead of reading
|
|
8
|
+
// files. Ordering is by semantic version everywhere: `v0.10.0` follows
|
|
9
|
+
// `v0.9.0`, which a lexical sort gets backwards.
|
|
10
|
+
//
|
|
11
|
+
// `fetch` is the one command here that writes anything — remote-tracking refs,
|
|
12
|
+
// never the worktree — and only when `release-notes pending` is allowed to
|
|
13
|
+
// refresh. Everything else reads.
|
|
14
|
+
|
|
15
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
16
|
+
import { basename, join, resolve } from "node:path";
|
|
17
|
+
import { compareSemver } from "#util/semver.ts";
|
|
18
|
+
import { GIT_NETWORK_TIMEOUT_MS, runGit } from "./git.ts";
|
|
19
|
+
|
|
20
|
+
export interface ReleaseNote {
|
|
21
|
+
version: string;
|
|
22
|
+
title: string;
|
|
23
|
+
path: string;
|
|
24
|
+
digest: string | null;
|
|
25
|
+
highlights: string[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ReleaseNotesBundle {
|
|
29
|
+
notes: ReleaseNote[];
|
|
30
|
+
current_version: string | null;
|
|
31
|
+
source: string | null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const NOTE_NAME = /^v\d+\.\d+\.\d+\.md$/;
|
|
35
|
+
const REF_NOTE_PATH = /docs\/releases\/v\d+\.\d+\.\d+\.md$/;
|
|
36
|
+
// The heading separator is an em dash, as the oracle's regex requires.
|
|
37
|
+
const TITLE = /^#\s+(v\d+\.\d+\.\d+)\s+—\s+(.+)$/m;
|
|
38
|
+
|
|
39
|
+
// `parseSemver` lived here as the port of `_parse_semver`; it is the one in
|
|
40
|
+
// `#util/semver.ts` now, re-exported so its callers and its test do not move.
|
|
41
|
+
export { parseSemver } from "#util/semver.ts";
|
|
42
|
+
|
|
43
|
+
function isNewer(candidate: string, current: string): boolean {
|
|
44
|
+
return compareSemver(candidate, current) > 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Port of `_extract_frontmatter_digest`: the `digest: >` block, unwrapped. */
|
|
48
|
+
export function extractFrontmatterDigest(text: string): string | null {
|
|
49
|
+
if (!text.startsWith("---")) return null;
|
|
50
|
+
const parts = text.split("---");
|
|
51
|
+
if (parts.length < 3) return null;
|
|
52
|
+
const frontmatter = parts[1] as string;
|
|
53
|
+
const match = /digest:\s*>\s*\n((?:\s+.*\n?)*)/.exec(frontmatter);
|
|
54
|
+
if (!match) return null;
|
|
55
|
+
const lines = (match[1] as string)
|
|
56
|
+
.split("\n")
|
|
57
|
+
.map((line) => line.trim())
|
|
58
|
+
.filter((line) => line.length > 0);
|
|
59
|
+
return lines.join(" ") || null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Port of `_extract_highlights`: the `## Highlights` section only, with
|
|
64
|
+
* continuation lines folded into their bullet. A bullet under a later heading
|
|
65
|
+
* belongs to that heading, not here.
|
|
66
|
+
*/
|
|
67
|
+
export function extractHighlights(text: string): string[] {
|
|
68
|
+
const heading = /^## Highlights[ \t]*$/m.exec(text);
|
|
69
|
+
if (!heading) return [];
|
|
70
|
+
const tail = text.slice(heading.index + heading[0].length);
|
|
71
|
+
const next = /^## /m.exec(tail);
|
|
72
|
+
const section = next ? tail.slice(0, next.index) : tail;
|
|
73
|
+
|
|
74
|
+
const highlights: string[] = [];
|
|
75
|
+
let current: string[] = [];
|
|
76
|
+
for (const line of section.split("\n")) {
|
|
77
|
+
const stripped = line.trim();
|
|
78
|
+
if (!stripped) continue;
|
|
79
|
+
if (stripped.startsWith("- ")) {
|
|
80
|
+
if (current.length > 0) highlights.push(current.join(" "));
|
|
81
|
+
current = [stripped.slice(2).trim()];
|
|
82
|
+
} else if (current.length > 0) {
|
|
83
|
+
current.push(stripped);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (current.length > 0) highlights.push(current.join(" "));
|
|
87
|
+
return highlights;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function releaseNoteFromText(path: string, text: string): ReleaseNote {
|
|
91
|
+
const match = TITLE.exec(text);
|
|
92
|
+
const stem = basename(path).replace(/\.md$/, "");
|
|
93
|
+
return {
|
|
94
|
+
version: match ? (match[1] as string) : stem,
|
|
95
|
+
title: match ? (match[2] as string).trim() : stem,
|
|
96
|
+
path,
|
|
97
|
+
digest: extractFrontmatterDigest(text),
|
|
98
|
+
highlights: extractHighlights(text),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function repositoryFor(start: string): string {
|
|
103
|
+
const startPath = resolve(start);
|
|
104
|
+
const top = runGit(["rev-parse", "--show-toplevel"], startPath);
|
|
105
|
+
return top.code === 0 && top.stdout ? top.stdout : startPath;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Notes in the working tree, ordered by semantic version. */
|
|
109
|
+
export function readReleaseNotes(start: string): ReleaseNote[] {
|
|
110
|
+
const dir = join(repositoryFor(start), "docs", "releases");
|
|
111
|
+
if (!existsSync(dir)) return [];
|
|
112
|
+
return readdirSync(dir)
|
|
113
|
+
.filter((name) => NOTE_NAME.test(name))
|
|
114
|
+
.sort((a, b) => compareSemver(a.replace(/\.md$/, ""), b.replace(/\.md$/, "")))
|
|
115
|
+
.map((name) => {
|
|
116
|
+
const path = join(dir, name);
|
|
117
|
+
return releaseNoteFromText(path, readFileSync(path, "utf8"));
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function readReleaseNote(version: string, start: string): ReleaseNote | null {
|
|
122
|
+
const notes = readReleaseNotes(start);
|
|
123
|
+
if (version === "latest")
|
|
124
|
+
return notes.length > 0 ? (notes[notes.length - 1] as ReleaseNote) : null;
|
|
125
|
+
const wanted = version.startsWith("v") ? version : `v${version}`;
|
|
126
|
+
return notes.find((note) => note.version === wanted) ?? null;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function refNoteNames(ref: string, repository: string): string[] {
|
|
130
|
+
const listed = runGit(["ls-tree", "-r", "--name-only", ref, "docs/releases"], repository);
|
|
131
|
+
if (listed.code !== 0 || !listed.stdout) return [];
|
|
132
|
+
return listed.stdout
|
|
133
|
+
.split("\n")
|
|
134
|
+
.map((line) => line.trim())
|
|
135
|
+
.filter((line) => REF_NOTE_PATH.test(line));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Notes as the ref has them — what a channel contains, merged or not. */
|
|
139
|
+
export function readReleaseNotesFromRef(ref: string, start: string): ReleaseNote[] {
|
|
140
|
+
const repository = repositoryFor(start);
|
|
141
|
+
const names = refNoteNames(ref, repository).sort((a, b) =>
|
|
142
|
+
compareSemver(basename(a).replace(/\.md$/, ""), basename(b).replace(/\.md$/, "")),
|
|
143
|
+
);
|
|
144
|
+
const notes: ReleaseNote[] = [];
|
|
145
|
+
for (const selected of names) {
|
|
146
|
+
const shown = runGit(["show", `${ref}:${selected}`], repository);
|
|
147
|
+
if (shown.code !== 0 || !shown.stdout) continue;
|
|
148
|
+
notes.push(releaseNoteFromText(selected, shown.stdout));
|
|
149
|
+
}
|
|
150
|
+
return notes;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export function readReleaseNoteFromRef(
|
|
154
|
+
ref: string,
|
|
155
|
+
version: string,
|
|
156
|
+
start: string,
|
|
157
|
+
): ReleaseNote | null {
|
|
158
|
+
const repository = repositoryFor(start);
|
|
159
|
+
let selected: string;
|
|
160
|
+
if (version === "latest") {
|
|
161
|
+
const names = refNoteNames(ref, repository);
|
|
162
|
+
if (names.length === 0) return null;
|
|
163
|
+
selected = names.sort((a, b) =>
|
|
164
|
+
compareSemver(basename(b).replace(/\.md$/, ""), basename(a).replace(/\.md$/, "")),
|
|
165
|
+
)[0] as string;
|
|
166
|
+
} else {
|
|
167
|
+
const wanted = version.startsWith("v") ? version : `v${version}`;
|
|
168
|
+
selected = `docs/releases/${wanted}.md`;
|
|
169
|
+
}
|
|
170
|
+
const shown = runGit(["show", `${ref}:${selected}`], repository);
|
|
171
|
+
if (shown.code !== 0 || !shown.stdout) return null;
|
|
172
|
+
return releaseNoteFromText(selected, shown.stdout);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** Port of `_normalize_version`: drop a leading `v`, keep the rest. */
|
|
176
|
+
export function normalizeVersion(version: string): string {
|
|
177
|
+
const trimmed = version.trim();
|
|
178
|
+
return trimmed.startsWith("v") ? trimmed.slice(1) : trimmed;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** Refresh the channel ref before reading it. The only write in this module. */
|
|
182
|
+
export function fetchReleaseNotesRef(ref: string, repository: string): void {
|
|
183
|
+
const slash = ref.indexOf("/");
|
|
184
|
+
if (slash <= 0 || slash === ref.length - 1) return;
|
|
185
|
+
const remote = ref.slice(0, slash);
|
|
186
|
+
const branch = ref.slice(slash + 1);
|
|
187
|
+
runGit(["fetch", remote, branch], repository, GIT_NETWORK_TIMEOUT_MS);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export interface PendingOptions {
|
|
191
|
+
currentVersion: string;
|
|
192
|
+
ref: string;
|
|
193
|
+
start: string;
|
|
194
|
+
fetch: boolean;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function buildPendingReleaseNotes(options: PendingOptions): ReleaseNotesBundle {
|
|
198
|
+
const repository = repositoryFor(options.start);
|
|
199
|
+
const current = normalizeVersion(options.currentVersion);
|
|
200
|
+
if (options.fetch) fetchReleaseNotesRef(options.ref, repository);
|
|
201
|
+
const notes = readReleaseNotesFromRef(options.ref, repository).filter((note) =>
|
|
202
|
+
isNewer(note.version, current),
|
|
203
|
+
);
|
|
204
|
+
return { notes, current_version: `v${current}`, source: options.ref };
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export function renderReleaseNote(note: ReleaseNote | null): string {
|
|
208
|
+
if (note === null) return "Mirror runtime release notes\n\nRelease notes: not found\n";
|
|
209
|
+
const lines = ["Mirror runtime release notes", ""];
|
|
210
|
+
lines.push(`Release: ${note.version} — ${note.title}`);
|
|
211
|
+
lines.push(`Path: ${note.path}`);
|
|
212
|
+
if (note.digest) {
|
|
213
|
+
lines.push("");
|
|
214
|
+
lines.push("Summary:");
|
|
215
|
+
lines.push(note.digest);
|
|
216
|
+
}
|
|
217
|
+
if (note.highlights.length > 0) {
|
|
218
|
+
lines.push("");
|
|
219
|
+
lines.push("Highlights:");
|
|
220
|
+
for (const highlight of note.highlights) lines.push(`- ${highlight}`);
|
|
221
|
+
}
|
|
222
|
+
return `${lines.join("\n")}\n`;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export function renderReleaseNotesBundle(bundle: ReleaseNotesBundle): string {
|
|
226
|
+
const lines = ["Mirror runtime release notes", ""];
|
|
227
|
+
if (bundle.current_version) lines.push(`Current version: ${bundle.current_version}`);
|
|
228
|
+
if (bundle.source) lines.push(`Source: ${bundle.source}`);
|
|
229
|
+
if (bundle.notes.length === 0) {
|
|
230
|
+
lines.push("Pending releases: none");
|
|
231
|
+
return `${lines.join("\n")}\n`;
|
|
232
|
+
}
|
|
233
|
+
lines.push(`Pending releases: ${bundle.notes.length}`);
|
|
234
|
+
for (const note of bundle.notes) {
|
|
235
|
+
lines.push("");
|
|
236
|
+
lines.push(`## ${note.version} — ${note.title}`);
|
|
237
|
+
if (note.digest) lines.push(note.digest);
|
|
238
|
+
if (note.highlights.length > 0) {
|
|
239
|
+
lines.push("Highlights:");
|
|
240
|
+
for (const highlight of note.highlights) lines.push(`- ${highlight}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return `${lines.join("\n")}\n`;
|
|
244
|
+
}
|