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,69 @@
|
|
|
1
|
+
// Identity read primitives — the port of Store.get_all_identity,
|
|
2
|
+
// get_identity_by_layer, and get_identity (read side only; the write side
|
|
3
|
+
// lives in identityStore.ts / setIdentity.ts).
|
|
4
|
+
|
|
5
|
+
import type { Database } from "#db/database.ts";
|
|
6
|
+
import { optionalString, requireString } from "#db/rowDecode.ts";
|
|
7
|
+
|
|
8
|
+
/** The projection `identity list` needs: layer, key, and content for the preview. */
|
|
9
|
+
export interface IdentityListRow {
|
|
10
|
+
layer: string;
|
|
11
|
+
key: string;
|
|
12
|
+
content: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function toListRow(row: Record<string, unknown>): IdentityListRow {
|
|
16
|
+
return {
|
|
17
|
+
layer: requireString(row, "layer"),
|
|
18
|
+
key: requireString(row, "key"),
|
|
19
|
+
content: requireString(row, "content"),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Port of `get_all_identity`: every identity row, ordered by (layer, key). */
|
|
24
|
+
export function listAllIdentity(db: Database): IdentityListRow[] {
|
|
25
|
+
return db
|
|
26
|
+
.prepare("SELECT layer, key, content FROM identity ORDER BY layer, key")
|
|
27
|
+
.all()
|
|
28
|
+
.map(toListRow);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Port of `get_identity_by_layer`: rows for one layer, ordered by key. */
|
|
32
|
+
export function listIdentityByLayer(db: Database, layer: string): IdentityListRow[] {
|
|
33
|
+
return db
|
|
34
|
+
.prepare("SELECT layer, key, content FROM identity WHERE layer = ? ORDER BY key")
|
|
35
|
+
.all(layer)
|
|
36
|
+
.map(toListRow);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Port of `get_identity` (content only): null when the (layer, key) row is absent. */
|
|
40
|
+
export function getIdentityContent(db: Database, layer: string, key: string): string | null {
|
|
41
|
+
const row = db
|
|
42
|
+
.prepare("SELECT content FROM identity WHERE layer = ? AND key = ?")
|
|
43
|
+
.get(layer, key);
|
|
44
|
+
if (row === undefined) return null;
|
|
45
|
+
return requireString(row, "content");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Raw metadata column for one (layer, key): null when the row or its metadata is absent. */
|
|
49
|
+
export function getIdentityMetadata(db: Database, layer: string, key: string): string | null {
|
|
50
|
+
const row = db
|
|
51
|
+
.prepare("SELECT metadata FROM identity WHERE layer = ? AND key = ?")
|
|
52
|
+
.get(layer, key);
|
|
53
|
+
if (row === undefined) return null;
|
|
54
|
+
return optionalString(row, "metadata");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Whether an identity row exists for (layer, key) — an existence check
|
|
59
|
+
* independent of content truthiness. Needed because Python's `existing and not
|
|
60
|
+
* force` checks object truthiness (an `Identity` row is always truthy, even
|
|
61
|
+
* with empty content); reusing `getIdentityContent(...)` for this would
|
|
62
|
+
* misread an existing-but-empty-content row as absent.
|
|
63
|
+
*/
|
|
64
|
+
export function identityRowExists(db: Database, layer: string, key: string): boolean {
|
|
65
|
+
return (
|
|
66
|
+
db.prepare("SELECT 1 FROM identity WHERE layer = ? AND key = ? LIMIT 1").get(layer, key) !==
|
|
67
|
+
undefined
|
|
68
|
+
);
|
|
69
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// TS identity-table writes — the port of storage/identity.py upsert_identity and
|
|
2
|
+
// update_identity_metadata. These are the deterministic write primitives behind
|
|
3
|
+
// journey and identity management. `id` and `now` are injected so parity runs
|
|
4
|
+
// match the Python oracle (Python generates a random UUID id and a microsecond
|
|
5
|
+
// now).
|
|
6
|
+
|
|
7
|
+
import type { WritableDatabase } from "#db/database.ts";
|
|
8
|
+
import { assertNewIdentityKey } from "./identityKey.ts";
|
|
9
|
+
|
|
10
|
+
/** The writable columns of an identity row (version is TEXT, e.g. "1.0.0"). */
|
|
11
|
+
export interface IdentityRow {
|
|
12
|
+
id: string;
|
|
13
|
+
layer: string;
|
|
14
|
+
key: string;
|
|
15
|
+
content: string;
|
|
16
|
+
version: string;
|
|
17
|
+
metadata: string | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* INSERT the identity when (layer, key) is absent, else UPDATE it — mirroring
|
|
22
|
+
* upsert_identity. On INSERT, created_at and updated_at are both the injected
|
|
23
|
+
* now; on UPDATE only updated_at changes and the existing id and created_at are
|
|
24
|
+
* preserved (the WHERE is on the unique (layer, key), so the injected id is
|
|
25
|
+
* ignored for an update, exactly as Python reuses existing.id).
|
|
26
|
+
*
|
|
27
|
+
* This is the only INSERT into `identity`, so it is where a new journey slug or
|
|
28
|
+
* persona id is held to its grammar (CR104): an INSERT whose key breaks it throws
|
|
29
|
+
* `InvalidIdentityKeyError` and writes nothing. An UPDATE never checks, because a
|
|
30
|
+
* key that already exists predates the grammar and must stay writable.
|
|
31
|
+
*/
|
|
32
|
+
export function upsertIdentity(db: WritableDatabase, identity: IdentityRow, nowIso: string): void {
|
|
33
|
+
const existing = db
|
|
34
|
+
.prepare("SELECT id FROM identity WHERE layer = ? AND key = ?")
|
|
35
|
+
.get(identity.layer, identity.key);
|
|
36
|
+
if (existing !== undefined) {
|
|
37
|
+
db.prepare(
|
|
38
|
+
"UPDATE identity SET content = ?, version = ?, updated_at = ?, metadata = ? " +
|
|
39
|
+
"WHERE layer = ? AND key = ?",
|
|
40
|
+
).run(
|
|
41
|
+
identity.content,
|
|
42
|
+
identity.version,
|
|
43
|
+
nowIso,
|
|
44
|
+
identity.metadata,
|
|
45
|
+
identity.layer,
|
|
46
|
+
identity.key,
|
|
47
|
+
);
|
|
48
|
+
} else {
|
|
49
|
+
assertNewIdentityKey(identity.layer, identity.key);
|
|
50
|
+
db.prepare(
|
|
51
|
+
"INSERT INTO identity (id, layer, key, content, version, created_at, updated_at, metadata) " +
|
|
52
|
+
"VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
|
|
53
|
+
).run(
|
|
54
|
+
identity.id,
|
|
55
|
+
identity.layer,
|
|
56
|
+
identity.key,
|
|
57
|
+
identity.content,
|
|
58
|
+
identity.version,
|
|
59
|
+
nowIso,
|
|
60
|
+
nowIso,
|
|
61
|
+
identity.metadata,
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** UPDATE only metadata and updated_at — mirrors update_identity_metadata. */
|
|
67
|
+
export function updateIdentityMetadata(
|
|
68
|
+
db: WritableDatabase,
|
|
69
|
+
layer: string,
|
|
70
|
+
key: string,
|
|
71
|
+
metadata: string,
|
|
72
|
+
nowIso: string,
|
|
73
|
+
): void {
|
|
74
|
+
db.prepare("UPDATE identity SET metadata = ?, updated_at = ? WHERE layer = ? AND key = ?").run(
|
|
75
|
+
metadata,
|
|
76
|
+
nowIso,
|
|
77
|
+
layer,
|
|
78
|
+
key,
|
|
79
|
+
);
|
|
80
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// `list journeys` read primitives — the port of the journey branch of
|
|
2
|
+
// memory.cli.inspect.cmd_list (`_extract_status` / `_extract_description`).
|
|
3
|
+
//
|
|
4
|
+
// Deliberately NOT reused from journey/journeyOptions.ts: that module ports a
|
|
5
|
+
// different Python method (`list_journey_options`, behind the `journeys`
|
|
6
|
+
// top-level command) with a full-line status regex and no description
|
|
7
|
+
// truncation. This command's Python source (memory.cli.inspect) extracts a
|
|
8
|
+
// single \w+ status word, tries a Portuguese "## Descrição" heading before an
|
|
9
|
+
// English "## Description" fallback (two separate searches, not one
|
|
10
|
+
// alternation — order matters when content could contain both), and caps the
|
|
11
|
+
// description at 120 chars, not 150. Porting it as its own function keeps the
|
|
12
|
+
// two Python call sites' independent behavior independently reproduced.
|
|
13
|
+
|
|
14
|
+
import type { Database } from "#db/database.ts";
|
|
15
|
+
import { optionalString, requireString } from "#db/rowDecode.ts";
|
|
16
|
+
|
|
17
|
+
export interface JourneyListRow {
|
|
18
|
+
key: string;
|
|
19
|
+
status: string;
|
|
20
|
+
description: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Port of `_extract_status`: the first `**Status:** <word>`, or "unknown". */
|
|
24
|
+
export function extractStatus(content: string): string {
|
|
25
|
+
const match = content.match(/\*\*Status:\*\*\s*(\w+)/);
|
|
26
|
+
return match ? match[1] : "unknown";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Port of `_extract_description`: try a Portuguese "## Descrição" section
|
|
31
|
+
* first, then an English "## Description" section, ending at a blank line or
|
|
32
|
+
* the next heading; trimmed and capped at 120 chars.
|
|
33
|
+
*/
|
|
34
|
+
function extractDescription(content: string): string {
|
|
35
|
+
const pt = content.match(/## Descrição\s*\n+(.+?)(?:\n\n|\n##)/s);
|
|
36
|
+
const match = pt ?? content.match(/## Description\s*\n+(.+?)(?:\n\n|\n##)/s);
|
|
37
|
+
return match ? match[1].trim().slice(0, 120) : "";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Port of `mem.get_identity(layer="journey")`, pre-sorted by key (Python re-sorts a no-op). */
|
|
41
|
+
export function listJourneysForListCommand(db: Database): JourneyListRow[] {
|
|
42
|
+
return db
|
|
43
|
+
.prepare("SELECT key, content FROM identity WHERE layer = 'journey' ORDER BY key")
|
|
44
|
+
.all()
|
|
45
|
+
.map((row) => {
|
|
46
|
+
const content = optionalString(row, "content") ?? "";
|
|
47
|
+
return {
|
|
48
|
+
key: requireString(row, "key"),
|
|
49
|
+
status: extractStatus(content),
|
|
50
|
+
description: extractDescription(content),
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// `inspect persona` read primitives — the port of memory.cli.inspect._inspect_persona
|
|
2
|
+
// and its shared _persona_metadata helper. `inspect extension`/`runtime-catalog`/
|
|
3
|
+
// `llm-calls`/`embedding-provenance` share the extension catalog / ops-tail
|
|
4
|
+
// machinery and stay on Python, bound to CV22.DS7.TS1.
|
|
5
|
+
|
|
6
|
+
import type { Database } from "#db/database.ts";
|
|
7
|
+
import { optionalString, requireString } from "#db/rowDecode.ts";
|
|
8
|
+
|
|
9
|
+
export interface PersonaInspectRow {
|
|
10
|
+
version: string;
|
|
11
|
+
updatedAt: string;
|
|
12
|
+
content: string;
|
|
13
|
+
/** Parsed JSON object metadata, or {} for null/malformed/non-object metadata. */
|
|
14
|
+
metadata: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Port of `_persona_metadata`: {} for null, malformed JSON, or a non-object payload. */
|
|
18
|
+
function parseMetadataObject(raw: string | null): Record<string, unknown> {
|
|
19
|
+
if (!raw) return {};
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(raw) as unknown;
|
|
22
|
+
return parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)
|
|
23
|
+
? (parsed as Record<string, unknown>)
|
|
24
|
+
: {};
|
|
25
|
+
} catch {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Port of `mem.store.get_identity("persona", persona_id)`, projected for inspect. */
|
|
31
|
+
export function getPersonaInspect(db: Database, personaId: string): PersonaInspectRow | null {
|
|
32
|
+
const row = db
|
|
33
|
+
.prepare(
|
|
34
|
+
"SELECT version, updated_at, content, metadata FROM identity WHERE layer = 'persona' AND key = ?",
|
|
35
|
+
)
|
|
36
|
+
.get(personaId);
|
|
37
|
+
if (row === undefined) return null;
|
|
38
|
+
return {
|
|
39
|
+
version: requireString(row, "version"),
|
|
40
|
+
updatedAt: requireString(row, "updated_at"),
|
|
41
|
+
content: requireString(row, "content"),
|
|
42
|
+
metadata: parseMetadataObject(optionalString(row, "metadata")),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// `list personas` read primitives — the port of the persona branch of
|
|
2
|
+
// memory.cli.inspect.cmd_list. Distinct from persona/detectPersona.ts's
|
|
3
|
+
// `routingRows`: same JSON shape, different call site/output (this one also
|
|
4
|
+
// needs `version`).
|
|
5
|
+
|
|
6
|
+
import type { Database } from "#db/database.ts";
|
|
7
|
+
import { optionalString, requireString } from "#db/rowDecode.ts";
|
|
8
|
+
|
|
9
|
+
export interface PersonaListRow {
|
|
10
|
+
key: string;
|
|
11
|
+
version: string;
|
|
12
|
+
routingKeywords: string[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Port of `_persona_metadata(identity).get("routing_keywords") or []`. */
|
|
16
|
+
function parseRoutingKeywords(metadata: string | null): string[] {
|
|
17
|
+
if (!metadata) return [];
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(metadata) as Record<string, unknown>;
|
|
20
|
+
if (!Array.isArray(parsed.routing_keywords)) return [];
|
|
21
|
+
return parsed.routing_keywords.filter((item): item is string => typeof item === "string");
|
|
22
|
+
} catch {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Port of `mem.get_identity(layer="persona")`, pre-sorted by key (Python re-sorts a no-op). */
|
|
28
|
+
export function listPersonas(db: Database): PersonaListRow[] {
|
|
29
|
+
return db
|
|
30
|
+
.prepare("SELECT key, version, metadata FROM identity WHERE layer = 'persona' ORDER BY key")
|
|
31
|
+
.all()
|
|
32
|
+
.map((row) => ({
|
|
33
|
+
key: requireString(row, "key"),
|
|
34
|
+
version: requireString(row, "version"),
|
|
35
|
+
routingKeywords: parseRoutingKeywords(optionalString(row, "metadata")),
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// TS identity write surface — the port of IdentityService.set_identity.
|
|
2
|
+
//
|
|
3
|
+
// set_identity is the deterministic write behind `mm-identity` and `mm-seed`:
|
|
4
|
+
// create or update an identity prompt for a (layer, key). It is a thin
|
|
5
|
+
// orchestration over the upsertIdentity primitive with one load-bearing rule —
|
|
6
|
+
// when metadata is None the existing row's metadata is inherited (read before
|
|
7
|
+
// write) rather than overwritten with null. `id` and `now` are injected so parity
|
|
8
|
+
// runs match the Python oracle (Python builds an Identity() with a random UUID id
|
|
9
|
+
// and stamps a microsecond now inside upsert_identity).
|
|
10
|
+
|
|
11
|
+
import type { WritableDatabase } from "#db/database.ts";
|
|
12
|
+
import { optionalString } from "#db/rowDecode.ts";
|
|
13
|
+
import { type IdentityRow, upsertIdentity } from "./identityStore.ts";
|
|
14
|
+
|
|
15
|
+
/** Inputs to set_identity. `version` defaults to "1.0.0"; a null/absent metadata inherits. */
|
|
16
|
+
export interface SetIdentityInput {
|
|
17
|
+
id: string;
|
|
18
|
+
layer: string;
|
|
19
|
+
key: string;
|
|
20
|
+
content: string;
|
|
21
|
+
/** Defaults to "1.0.0", matching the Python Identity model default. */
|
|
22
|
+
version?: string;
|
|
23
|
+
/**
|
|
24
|
+
* A pre-serialized JSON string, or null/undefined to inherit the existing row's
|
|
25
|
+
* metadata (Python treats `metadata is None` as "keep what is there"). Unlike
|
|
26
|
+
* journeys, set_identity never serializes JSON itself — the string passes through.
|
|
27
|
+
*/
|
|
28
|
+
metadata?: string | null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Port of IdentityService.set_identity: resolve the effective metadata (inherit on
|
|
33
|
+
* None), default the version, and upsert. Delegates INSERT/UPDATE semantics —
|
|
34
|
+
* including id/created_at preservation on update — to upsertIdentity.
|
|
35
|
+
*/
|
|
36
|
+
export function setIdentity(db: WritableDatabase, input: SetIdentityInput, nowIso: string): void {
|
|
37
|
+
const row: IdentityRow = {
|
|
38
|
+
id: input.id,
|
|
39
|
+
layer: input.layer,
|
|
40
|
+
key: input.key,
|
|
41
|
+
content: input.content,
|
|
42
|
+
version: input.version ?? "1.0.0",
|
|
43
|
+
metadata: resolveMetadata(db, input),
|
|
44
|
+
};
|
|
45
|
+
upsertIdentity(db, row, nowIso);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* When metadata is provided, use it verbatim. When it is null or absent, inherit
|
|
50
|
+
* the existing row's metadata (or null when there is no existing row) — mirroring
|
|
51
|
+
* `metadata = existing.metadata if existing else None`.
|
|
52
|
+
*/
|
|
53
|
+
function resolveMetadata(db: WritableDatabase, input: SetIdentityInput): string | null {
|
|
54
|
+
if (input.metadata !== undefined && input.metadata !== null) {
|
|
55
|
+
return input.metadata;
|
|
56
|
+
}
|
|
57
|
+
const existing = db
|
|
58
|
+
.prepare("SELECT metadata FROM identity WHERE layer = ? AND key = ?")
|
|
59
|
+
.get(input.layer, input.key);
|
|
60
|
+
if (existing === undefined) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return optionalString(existing, "metadata");
|
|
64
|
+
}
|
package/ts/src/index.ts
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// Mirror Mind TypeScript core — package entry point and public API surface.
|
|
2
|
+
//
|
|
3
|
+
// The core was grown as a database-seam strangler of the Python core that
|
|
4
|
+
// lived in `src/memory/` until CV22.DS10.TS5 deleted it (see
|
|
5
|
+
// docs/project/roadmap/cv22-typescript-core-port/). This file
|
|
6
|
+
// is the deliberate public surface: everything a consumer of the package should
|
|
7
|
+
// use is re-exported here, read and write. Internal modules still import each
|
|
8
|
+
// other by deep path; only the public API lives here, and it is kept in sync as
|
|
9
|
+
// the strangler grows (CR011).
|
|
10
|
+
|
|
11
|
+
// --- Consult command core ---
|
|
12
|
+
export type {
|
|
13
|
+
ConsultAskCommand,
|
|
14
|
+
ConsultCreditsCommand,
|
|
15
|
+
ConsultParseResult,
|
|
16
|
+
} from "./consult/args.ts";
|
|
17
|
+
export { CONSULT_USAGE, ConsultArgError, parseConsultArgs } from "./consult/args.ts";
|
|
18
|
+
export type {
|
|
19
|
+
ConsultContextLoader,
|
|
20
|
+
ConsultContextRequest,
|
|
21
|
+
RunConsultOptions,
|
|
22
|
+
} from "./consult/core.ts";
|
|
23
|
+
export {
|
|
24
|
+
buildConsultLlmRequest,
|
|
25
|
+
runConsult,
|
|
26
|
+
runConsultAsk,
|
|
27
|
+
runConsultCredits,
|
|
28
|
+
SYSTEM_PREAMBLE,
|
|
29
|
+
} from "./consult/core.ts";
|
|
30
|
+
export type { ConsultTier } from "./consult/modelCatalog.ts";
|
|
31
|
+
export { CONSULT_TIERS, LLM_FAMILIES, resolveConsultModel } from "./consult/modelCatalog.ts";
|
|
32
|
+
export type { CreditInfo as ConsultCreditInfo } from "./consult/render.ts";
|
|
33
|
+
export {
|
|
34
|
+
BALANCE_BAR_WIDTH,
|
|
35
|
+
renderConsultAsk,
|
|
36
|
+
renderCost,
|
|
37
|
+
renderCredits,
|
|
38
|
+
USD_TO_BRL,
|
|
39
|
+
} from "./consult/render.ts";
|
|
40
|
+
|
|
41
|
+
// --- Conversation extraction ---
|
|
42
|
+
export type {
|
|
43
|
+
ConversationExtractionOptions,
|
|
44
|
+
ConversationExtractionResult,
|
|
45
|
+
} from "./conversation/extraction.ts";
|
|
46
|
+
export { runConversationExtraction } from "./conversation/extraction.ts";
|
|
47
|
+
export type { BackupRecord } from "./db/backupGate.ts";
|
|
48
|
+
export { BackupGateError, requireBackup, sha256File } from "./db/backupGate.ts";
|
|
49
|
+
export { assertCopyTarget, CopyOnlyGuardError } from "./db/copyGuard.ts";
|
|
50
|
+
// --- Database seam ---
|
|
51
|
+
export type {
|
|
52
|
+
Database,
|
|
53
|
+
OpenOptions,
|
|
54
|
+
PreparedQuery,
|
|
55
|
+
Row,
|
|
56
|
+
SqlValue,
|
|
57
|
+
WritableDatabase,
|
|
58
|
+
WritablePreparedQuery,
|
|
59
|
+
} from "./db/database.ts";
|
|
60
|
+
export {
|
|
61
|
+
openDatabaseCopyForWrite,
|
|
62
|
+
openDatabaseForWrite,
|
|
63
|
+
openDatabaseReadOnly,
|
|
64
|
+
snapshotDatabaseTo,
|
|
65
|
+
withTransaction,
|
|
66
|
+
} from "./db/database.ts";
|
|
67
|
+
export { blobToFloat32, parseUtcMs } from "./db/decode.ts";
|
|
68
|
+
export { assertFtsIntegrity, FtsIntegrityError } from "./db/ftsIntegrity.ts";
|
|
69
|
+
export { optionalNumber, optionalString, requireString } from "./db/rowDecode.ts";
|
|
70
|
+
export { assertSchemaState, KNOWN_MIGRATION_IDS, SchemaStateError } from "./db/schemaState.ts";
|
|
71
|
+
// --- Extension context provider runtime (DS7.TS2) ---
|
|
72
|
+
export type {
|
|
73
|
+
CollectExtensionContextOptions,
|
|
74
|
+
CollectedExtensionContext,
|
|
75
|
+
ExtensionContextDiagnostic,
|
|
76
|
+
ExtensionContextRequest,
|
|
77
|
+
ExtensionContextSection,
|
|
78
|
+
} from "./extensions/contextRuntime.ts";
|
|
79
|
+
export {
|
|
80
|
+
collectExtensionContext,
|
|
81
|
+
MIRROR_CONTEXT_PROTOCOL,
|
|
82
|
+
renderExtensionSections,
|
|
83
|
+
selectExtensionBindings,
|
|
84
|
+
} from "./extensions/contextRuntime.ts";
|
|
85
|
+
export type {
|
|
86
|
+
ExistingMemoryForCuration,
|
|
87
|
+
ExtractedMemory,
|
|
88
|
+
ExtractedTask,
|
|
89
|
+
ExtractionMessage,
|
|
90
|
+
} from "./extraction/conversation.ts";
|
|
91
|
+
export {
|
|
92
|
+
curateAgainstExisting,
|
|
93
|
+
extractMemories,
|
|
94
|
+
extractTasks,
|
|
95
|
+
formatTranscript,
|
|
96
|
+
naiveSummary,
|
|
97
|
+
} from "./extraction/conversation.ts";
|
|
98
|
+
export { parseJsonResponse } from "./extraction/json.ts";
|
|
99
|
+
// --- Front-door routing ---
|
|
100
|
+
export type { FrontDoorEngine, RouteDecision } from "./frontDoor/routing.ts";
|
|
101
|
+
export { routeMemoryCommand } from "./frontDoor/routing.ts";
|
|
102
|
+
// --- Identity (read model + writes) ---
|
|
103
|
+
export type { IdentityRow } from "./identity/identityStore.ts";
|
|
104
|
+
export { updateIdentityMetadata, upsertIdentity } from "./identity/identityStore.ts";
|
|
105
|
+
export type { SetIdentityInput } from "./identity/setIdentity.ts";
|
|
106
|
+
export { setIdentity } from "./identity/setIdentity.ts";
|
|
107
|
+
// --- Journeys (options + writes) ---
|
|
108
|
+
export type {
|
|
109
|
+
JourneyHierarchy,
|
|
110
|
+
JourneyIdentityRow,
|
|
111
|
+
JourneyOption,
|
|
112
|
+
} from "./journey/journeyOptions.ts";
|
|
113
|
+
export { groupJourneysByParent, listJourneyOptions } from "./journey/journeyOptions.ts";
|
|
114
|
+
export type { JourneyAssociationCounts } from "./journey/journeyRemoval.ts";
|
|
115
|
+
export {
|
|
116
|
+
countJourneyAssociations,
|
|
117
|
+
JourneyRemovalError,
|
|
118
|
+
removeJourney,
|
|
119
|
+
} from "./journey/journeyRemoval.ts";
|
|
120
|
+
export type { CreateJourneyInput, JourneyFields } from "./journey/journeyWrite.ts";
|
|
121
|
+
export {
|
|
122
|
+
createJourney,
|
|
123
|
+
JOURNEY_LAYER,
|
|
124
|
+
JourneyNotFoundError,
|
|
125
|
+
journeyMetadata,
|
|
126
|
+
setParentJourney,
|
|
127
|
+
setProjectPath,
|
|
128
|
+
} from "./journey/journeyWrite.ts";
|
|
129
|
+
// --- Memory (listing + reinforcement writes) ---
|
|
130
|
+
export type { ListRecentFilters, MemorySummary } from "./memory/listing.ts";
|
|
131
|
+
export {
|
|
132
|
+
buildListRecentQuery,
|
|
133
|
+
countMemoriesByType,
|
|
134
|
+
listRecentMemorySummaries,
|
|
135
|
+
} from "./memory/listing.ts";
|
|
136
|
+
export { logAccess, logUse } from "./memory/reinforcement.ts";
|
|
137
|
+
export type { MirrorContextOptions } from "./mirror/context.ts";
|
|
138
|
+
export { loadMirrorContext, relevantAttachments } from "./mirror/context.ts";
|
|
139
|
+
export type {
|
|
140
|
+
ResolvedMirrorDefaults,
|
|
141
|
+
ResolveMirrorDefaultsInput,
|
|
142
|
+
} from "./mirror/defaultResolution.ts";
|
|
143
|
+
export { detectJourney, resolveMirrorDefaults } from "./mirror/defaultResolution.ts";
|
|
144
|
+
export type { MirrorLoadInput, RenderedMirrorLoad } from "./mirror/orchestration.ts";
|
|
145
|
+
export {
|
|
146
|
+
deactivateMirrorState,
|
|
147
|
+
listActiveMirrorJourneys,
|
|
148
|
+
logMirrorResponse,
|
|
149
|
+
runMirrorLoad,
|
|
150
|
+
titleFromSummary,
|
|
151
|
+
} from "./mirror/orchestration.ts";
|
|
152
|
+
export type {
|
|
153
|
+
ReceptionJourney,
|
|
154
|
+
ReceptionPersona,
|
|
155
|
+
ReceptionResult,
|
|
156
|
+
} from "./mirror/reception.ts";
|
|
157
|
+
export { EMPTY_RECEPTION_RESULT, RECEPTION_PROMPT, runReception } from "./mirror/reception.ts";
|
|
158
|
+
// --- Mirror Mode and operating-mode orchestration (DS7.US4) ---
|
|
159
|
+
export type { OperatingModeState } from "./mode/operatingMode.ts";
|
|
160
|
+
export {
|
|
161
|
+
activateOperatingMode,
|
|
162
|
+
deactivateOperatingMode,
|
|
163
|
+
getActiveOperatingMode,
|
|
164
|
+
renderModeActivation,
|
|
165
|
+
renderModeStatus,
|
|
166
|
+
} from "./mode/operatingMode.ts";
|
|
167
|
+
// --- Persona routing ---
|
|
168
|
+
export type { PersonaMatch, PersonaRoutingRow } from "./persona/detectPersona.ts";
|
|
169
|
+
export { detectPersona, normalizeRoutingText } from "./persona/detectPersona.ts";
|
|
170
|
+
|
|
171
|
+
// --- External providers (DS5 substrate) ---
|
|
172
|
+
export type { ProviderConfig, ProviderConfigOptions, ProviderName } from "./providers/config.ts";
|
|
173
|
+
export { ProviderConfigError, resolveProviderConfig } from "./providers/config.ts";
|
|
174
|
+
export type { CreditInfo, CreditProvider, ReplayCreditFixture } from "./providers/credits.ts";
|
|
175
|
+
export {
|
|
176
|
+
assertReplayCreditFixture,
|
|
177
|
+
loadReplayCreditProvider,
|
|
178
|
+
ReplayCreditProvider,
|
|
179
|
+
} from "./providers/credits.ts";
|
|
180
|
+
export type { EmbeddingProvider, ReplayEmbeddingFixture } from "./providers/embedding.ts";
|
|
181
|
+
export {
|
|
182
|
+
assertReplayEmbeddingFixture,
|
|
183
|
+
loadReplayEmbeddingProvider,
|
|
184
|
+
ReplayEmbeddingProvider,
|
|
185
|
+
} from "./providers/embedding.ts";
|
|
186
|
+
export type {
|
|
187
|
+
LlmProvider,
|
|
188
|
+
LlmRequest,
|
|
189
|
+
LlmResponse,
|
|
190
|
+
LlmRole,
|
|
191
|
+
ReplayLlmFixture,
|
|
192
|
+
} from "./providers/llm.ts";
|
|
193
|
+
export {
|
|
194
|
+
assertReplayLlmFixture,
|
|
195
|
+
loadReplayLlmProvider,
|
|
196
|
+
ReplayLlmProvider,
|
|
197
|
+
} from "./providers/llm.ts";
|
|
198
|
+
export type { RedactionOptions } from "./providers/redaction.ts";
|
|
199
|
+
export {
|
|
200
|
+
assertFixtureSafe,
|
|
201
|
+
redactJson,
|
|
202
|
+
redactString,
|
|
203
|
+
UnsafeFixtureError,
|
|
204
|
+
} from "./providers/redaction.ts";
|
|
205
|
+
export type { ReplayFixture } from "./providers/replay.ts";
|
|
206
|
+
export { loadReplayFixture } from "./providers/replay.ts";
|
|
207
|
+
// --- Hybrid search ranker ---
|
|
208
|
+
export type {
|
|
209
|
+
FreshSearchFilters,
|
|
210
|
+
FreshSearchOptions,
|
|
211
|
+
FreshSearchResult,
|
|
212
|
+
} from "./search/memorySearch.ts";
|
|
213
|
+
export {
|
|
214
|
+
accessCountsByMemoryId,
|
|
215
|
+
DEFAULT_SEARCH_RANKER_CONFIG,
|
|
216
|
+
ftsLexicalScores,
|
|
217
|
+
ftsQuery,
|
|
218
|
+
listSearchMemoryRows,
|
|
219
|
+
searchMemories,
|
|
220
|
+
} from "./search/memorySearch.ts";
|
|
221
|
+
export type { RankableMemory, RankedMemory, RankerConfig, SearchWeights } from "./search/ranker.ts";
|
|
222
|
+
export {
|
|
223
|
+
cosineSimilarity,
|
|
224
|
+
hybridScore,
|
|
225
|
+
rankMemories,
|
|
226
|
+
recencyScore,
|
|
227
|
+
reinforcementScore,
|
|
228
|
+
} from "./search/ranker.ts";
|
|
229
|
+
export { expandHome, normalizeProjectPath } from "./util/paths.ts";
|
|
230
|
+
export { newId, nowIso, toMicrosecondIso } from "./util/pyGenerators.ts";
|
|
231
|
+
// --- Python-compatibility utilities ---
|