mirror-mind 0.0.1 → 0.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/log-session-end.sh +85 -0
- package/.claude/hooks/log-user-prompt.sh +85 -0
- package/.claude/hooks/mirror-inject.sh +85 -0
- package/.claude/hooks/session-start.sh +85 -0
- package/.gemini/hooks/log-assistant.sh +85 -0
- package/.gemini/hooks/log-user.sh +85 -0
- package/.gemini/hooks/session-end.sh +85 -0
- package/.gemini/hooks/session-start.sh +85 -0
- package/.pi/extensions/mirror-logger.ts +561 -0
- package/.pi/skills/mm-backup/SKILL.md +21 -0
- package/.pi/skills/mm-build/SKILL.md +1206 -0
- package/.pi/skills/mm-consolidate/SKILL.md +112 -0
- package/.pi/skills/mm-consult/SKILL.md +70 -0
- package/.pi/skills/mm-conversations/SKILL.md +16 -0
- package/.pi/skills/mm-discard/SKILL.md +39 -0
- package/.pi/skills/mm-explore/SKILL.md +255 -0
- package/.pi/skills/mm-help/SKILL.md +74 -0
- package/.pi/skills/mm-identity/SKILL.md +96 -0
- package/.pi/skills/mm-journal/SKILL.md +16 -0
- package/.pi/skills/mm-journey/SKILL.md +23 -0
- package/.pi/skills/mm-journeys/SKILL.md +15 -0
- package/.pi/skills/mm-memories/SKILL.md +17 -0
- package/.pi/skills/mm-mirror/SKILL.md +98 -0
- package/.pi/skills/mm-mute/SKILL.md +18 -0
- package/.pi/skills/mm-new/SKILL.md +18 -0
- package/.pi/skills/mm-recall/SKILL.md +17 -0
- package/.pi/skills/mm-release-notes/SKILL.md +52 -0
- package/.pi/skills/mm-seed/SKILL.md +19 -0
- package/.pi/skills/mm-shadow/SKILL.md +117 -0
- package/.pi/skills/mm-soul/SKILL.md +502 -0
- package/.pi/skills/mm-tasks/SKILL.md +24 -0
- package/.pi/skills/mm-update/SKILL.md +32 -0
- package/.pi/skills/mm-week/SKILL.md +28 -0
- package/.pi/skills/mm-welcome/SKILL.md +24 -0
- package/AGENTS.md +188 -0
- package/README.md +126 -9
- package/bin/loader.js +67 -0
- package/bin/mirror-hook.js +7 -0
- package/bin/mirror.js +7 -0
- package/docs/releases/index.md +99 -0
- package/docs/releases/pending-cutoffs.md +510 -0
- package/docs/releases/v0.10.0.md +123 -0
- package/docs/releases/v0.10.1.md +66 -0
- package/docs/releases/v0.10.10.md +51 -0
- package/docs/releases/v0.10.11.md +39 -0
- package/docs/releases/v0.10.12.md +57 -0
- package/docs/releases/v0.10.13.md +35 -0
- package/docs/releases/v0.10.14.md +42 -0
- package/docs/releases/v0.10.15.md +53 -0
- package/docs/releases/v0.10.16.md +35 -0
- package/docs/releases/v0.10.17.md +43 -0
- package/docs/releases/v0.10.2.md +64 -0
- package/docs/releases/v0.10.3.md +78 -0
- package/docs/releases/v0.10.4.md +42 -0
- package/docs/releases/v0.10.5.md +57 -0
- package/docs/releases/v0.10.6.md +47 -0
- package/docs/releases/v0.10.7.md +53 -0
- package/docs/releases/v0.10.8.md +49 -0
- package/docs/releases/v0.10.9.md +37 -0
- package/docs/releases/v0.11.0.md +86 -0
- package/docs/releases/v0.12.0.md +67 -0
- package/docs/releases/v0.13.0.md +64 -0
- package/docs/releases/v0.14.0.md +68 -0
- package/docs/releases/v0.15.0.md +48 -0
- package/docs/releases/v0.16.0.md +50 -0
- package/docs/releases/v0.16.1.md +55 -0
- package/docs/releases/v0.16.2.md +36 -0
- package/docs/releases/v0.17.0.md +50 -0
- package/docs/releases/v0.17.1.md +58 -0
- package/docs/releases/v0.17.2.md +42 -0
- package/docs/releases/v0.17.3.md +58 -0
- package/docs/releases/v0.18.0.md +84 -0
- package/docs/releases/v0.18.1.md +51 -0
- package/docs/releases/v0.18.2.md +69 -0
- package/docs/releases/v0.19.0.md +85 -0
- package/docs/releases/v0.19.1.md +46 -0
- package/docs/releases/v0.20.0.md +85 -0
- package/docs/releases/v0.21.0.md +61 -0
- package/docs/releases/v0.21.1.md +47 -0
- package/docs/releases/v0.22.0.md +77 -0
- package/docs/releases/v0.22.1.md +42 -0
- package/docs/releases/v0.23.0.md +105 -0
- package/docs/releases/v0.24.0.md +125 -0
- package/docs/releases/v0.25.0.md +107 -0
- package/docs/releases/v0.26.0.md +139 -0
- package/docs/releases/v0.26.1.md +65 -0
- package/docs/releases/v0.26.2.md +43 -0
- package/docs/releases/v0.27.0.md +63 -0
- package/docs/releases/v0.28.0.md +59 -0
- package/docs/releases/v0.29.0.md +61 -0
- package/docs/releases/v0.29.1.md +59 -0
- package/docs/releases/v0.29.2.md +59 -0
- package/docs/releases/v0.29.3.md +93 -0
- package/docs/releases/v0.30.0.md +75 -0
- package/docs/releases/v0.30.1.md +93 -0
- package/docs/releases/v0.30.2.md +66 -0
- package/docs/releases/v0.31.0.md +122 -0
- package/docs/releases/v0.31.1.md +142 -0
- package/docs/releases/v0.31.10.md +118 -0
- package/docs/releases/v0.31.11.md +88 -0
- package/docs/releases/v0.31.12.md +105 -0
- package/docs/releases/v0.31.13.md +99 -0
- package/docs/releases/v0.31.14.md +97 -0
- package/docs/releases/v0.31.2.md +115 -0
- package/docs/releases/v0.31.3.md +142 -0
- package/docs/releases/v0.31.4.md +117 -0
- package/docs/releases/v0.31.5.md +155 -0
- package/docs/releases/v0.31.6.md +132 -0
- package/docs/releases/v0.31.7.md +132 -0
- package/docs/releases/v0.31.8.md +120 -0
- package/docs/releases/v0.31.9.md +120 -0
- package/docs/releases/v0.32.0.md +261 -0
- package/docs/releases/v0.32.1.md +59 -0
- package/docs/releases/v0.8.0.md +118 -0
- package/docs/releases/v0.9.0.md +98 -0
- package/docs/releases/v0.9.1.md +83 -0
- package/package.json +102 -6
- package/plugins/mirror-mind/.claude-plugin/plugin.json +13 -0
- package/plugins/mirror-mind/hooks/hooks.json +50 -0
- package/plugins/mirror-mind/hooks/log-session-end.sh +98 -0
- package/plugins/mirror-mind/hooks/log-user-prompt.sh +98 -0
- package/plugins/mirror-mind/hooks/mirror-inject.sh +98 -0
- package/plugins/mirror-mind/hooks/session-start.sh +98 -0
- package/plugins/mirror-mind/mcp/launch.sh +52 -0
- package/plugins/mirror-mind/skills/mm-backup/SKILL.md +27 -0
- package/plugins/mirror-mind/skills/mm-build/SKILL.md +1206 -0
- package/plugins/mirror-mind/skills/mm-consolidate/SKILL.md +112 -0
- package/plugins/mirror-mind/skills/mm-consult/SKILL.md +83 -0
- package/plugins/mirror-mind/skills/mm-conversations/SKILL.md +17 -0
- package/plugins/mirror-mind/skills/mm-discard/SKILL.md +40 -0
- package/plugins/mirror-mind/skills/mm-explore/SKILL.md +241 -0
- package/plugins/mirror-mind/skills/mm-help/SKILL.md +104 -0
- package/plugins/mirror-mind/skills/mm-identity/SKILL.md +96 -0
- package/plugins/mirror-mind/skills/mm-journal/SKILL.md +21 -0
- package/plugins/mirror-mind/skills/mm-journey/SKILL.md +37 -0
- package/plugins/mirror-mind/skills/mm-journeys/SKILL.md +15 -0
- package/plugins/mirror-mind/skills/mm-memories/SKILL.md +20 -0
- package/plugins/mirror-mind/skills/mm-mirror/SKILL.md +65 -0
- package/plugins/mirror-mind/skills/mm-mute/SKILL.md +18 -0
- package/plugins/mirror-mind/skills/mm-new/SKILL.md +18 -0
- package/plugins/mirror-mind/skills/mm-recall/SKILL.md +17 -0
- package/plugins/mirror-mind/skills/mm-release-notes/SKILL.md +31 -0
- package/plugins/mirror-mind/skills/mm-seed/SKILL.md +15 -0
- package/plugins/mirror-mind/skills/mm-shadow/SKILL.md +117 -0
- package/plugins/mirror-mind/skills/mm-soul/SKILL.md +488 -0
- package/plugins/mirror-mind/skills/mm-tasks/SKILL.md +36 -0
- package/plugins/mirror-mind/skills/mm-update/SKILL.md +30 -0
- package/plugins/mirror-mind/skills/mm-week/SKILL.md +46 -0
- package/plugins/mirror-mind/skills/mm-welcome/SKILL.md +22 -0
- package/scripts/codex-hooks/session-end.sh +85 -0
- package/scripts/codex-hooks/session-start.sh +85 -0
- package/scripts/codex-mirror.sh +48 -0
- package/templates/identity/README.md +119 -0
- package/templates/identity/ego/behavior.yaml +52 -0
- package/templates/identity/ego/constraints.yaml +15 -0
- package/templates/identity/ego/identity.yaml +43 -0
- package/templates/identity/journeys/personal-growth.yaml +39 -0
- package/templates/identity/organization/identity.yaml +24 -0
- package/templates/identity/organization/principles.yaml +17 -0
- package/templates/identity/personas/coach.yaml +94 -0
- package/templates/identity/personas/designer.yaml +93 -0
- package/templates/identity/personas/doctor.yaml +96 -0
- package/templates/identity/personas/engineer.yaml +77 -0
- package/templates/identity/personas/financial.yaml +97 -0
- package/templates/identity/personas/prompt-engineer.yaml +122 -0
- package/templates/identity/personas/researcher.yaml +88 -0
- package/templates/identity/personas/strategist.yaml +91 -0
- package/templates/identity/personas/teacher.yaml +95 -0
- package/templates/identity/personas/therapist.yaml +91 -0
- package/templates/identity/personas/thinker.yaml +74 -0
- package/templates/identity/personas/writer.yaml +76 -0
- package/templates/identity/self/config.yaml +16 -0
- package/templates/identity/self/soul.yaml +105 -0
- package/templates/identity/user/identity.yaml +30 -0
- package/ts/src/backup/staging.ts +62 -0
- package/ts/src/backup/zipBackup.ts +267 -0
- package/ts/src/backup/zipReader.ts +109 -0
- package/ts/src/backup/zipWriter.ts +148 -0
- package/ts/src/builder/activeCheckpoint.ts +134 -0
- package/ts/src/builder/aggregateStatus.ts +34 -0
- package/ts/src/builder/approve.ts +149 -0
- package/ts/src/builder/argv.ts +292 -0
- package/ts/src/builder/ariadMethod.ts +536 -0
- package/ts/src/builder/artifacts/artifactSurfaces.ts +106 -0
- package/ts/src/builder/artifacts/artifactWriter.ts +113 -0
- package/ts/src/builder/artifacts/closureArtifacts.ts +199 -0
- package/ts/src/builder/artifacts/deliveryStoryArtifacts.ts +316 -0
- package/ts/src/builder/artifacts/planArtifacts.ts +242 -0
- package/ts/src/builder/artifacts/scaffoldSections.ts +273 -0
- package/ts/src/builder/artifacts/scaffoldState.ts +227 -0
- package/ts/src/builder/artifacts/storyFiles.ts +61 -0
- package/ts/src/builder/artifacts/storyIndex.ts +166 -0
- package/ts/src/builder/cadence.ts +59 -0
- package/ts/src/builder/card.ts +192 -0
- package/ts/src/builder/checkpointRefused.ts +66 -0
- package/ts/src/builder/closure.ts +964 -0
- package/ts/src/builder/commands.ts +2053 -0
- package/ts/src/builder/cursorPosition.ts +176 -0
- package/ts/src/builder/cursorTransitions.ts +77 -0
- package/ts/src/builder/deliveryCursor.ts +577 -0
- package/ts/src/builder/deliveryStoryClosure.ts +521 -0
- package/ts/src/builder/deliveryStoryPlan.ts +536 -0
- package/ts/src/builder/deliveryStoryReady.ts +160 -0
- package/ts/src/builder/deliveryStoryRoadmapClosure.ts +151 -0
- package/ts/src/builder/expand.ts +336 -0
- package/ts/src/builder/flowUnit.ts +339 -0
- package/ts/src/builder/homeSurface.ts +122 -0
- package/ts/src/builder/implementationGuard.ts +125 -0
- package/ts/src/builder/index.ts +11 -0
- package/ts/src/builder/lifecycleRefusal.ts +92 -0
- package/ts/src/builder/lifecycleRibbon.ts +159 -0
- package/ts/src/builder/load.ts +313 -0
- package/ts/src/builder/methodAdoption.ts +113 -0
- package/ts/src/builder/methodDefinition.ts +429 -0
- package/ts/src/builder/methodInspection.ts +371 -0
- package/ts/src/builder/plan.ts +408 -0
- package/ts/src/builder/planPreauthorization.ts +265 -0
- package/ts/src/builder/prepare.ts +225 -0
- package/ts/src/builder/projectPaths.ts +64 -0
- package/ts/src/builder/pull.ts +356 -0
- package/ts/src/builder/pullCandidates.ts +463 -0
- package/ts/src/builder/pullCandidatesRender.ts +238 -0
- package/ts/src/builder/refinementField.ts +93 -0
- package/ts/src/builder/releaseIntent.ts +173 -0
- package/ts/src/builder/resumeState.ts +84 -0
- package/ts/src/builder/resumeSurface.ts +149 -0
- package/ts/src/builder/roadmapGrammar.ts +300 -0
- package/ts/src/builder/roadmapScan.ts +97 -0
- package/ts/src/builder/roadmapScope.ts +210 -0
- package/ts/src/builder/scopePhrases.ts +146 -0
- package/ts/src/builder/storyPaths.ts +196 -0
- package/ts/src/builder/storyPlanPreauthorization.ts +287 -0
- package/ts/src/builder/surfaceProtocol.ts +42 -0
- package/ts/src/builder/templateGeneration.ts +148 -0
- package/ts/src/builder/transition.ts +178 -0
- package/ts/src/consult/args.ts +99 -0
- package/ts/src/consult/core.ts +122 -0
- package/ts/src/consult/modelCatalog.ts +55 -0
- package/ts/src/consult/render.ts +47 -0
- package/ts/src/conversation/append.ts +414 -0
- package/ts/src/conversation/backfill.ts +387 -0
- package/ts/src/conversation/closeTail.ts +467 -0
- package/ts/src/conversation/extraction.ts +333 -0
- package/ts/src/conversation/extractionDriver.ts +130 -0
- package/ts/src/conversation/extractionRun.ts +70 -0
- package/ts/src/conversation/journeyInference.ts +165 -0
- package/ts/src/conversation/journeyRepair.ts +114 -0
- package/ts/src/conversation/lifecycleFaces.ts +197 -0
- package/ts/src/conversation/lifecycleWrites.ts +313 -0
- package/ts/src/conversation/listing.ts +77 -0
- package/ts/src/conversation/logger.ts +576 -0
- package/ts/src/conversation/loggerCli.ts +282 -0
- package/ts/src/conversation/loggerRuntime.ts +259 -0
- package/ts/src/conversation/metadataLifecycle.ts +443 -0
- package/ts/src/conversation/recall.ts +66 -0
- package/ts/src/conversation/sessionComposites.ts +258 -0
- package/ts/src/conversation/sessionImport.ts +90 -0
- package/ts/src/conversation/transcriptBackfill.ts +141 -0
- package/ts/src/cultivation/applyActions.ts +241 -0
- package/ts/src/cultivation/cluster.ts +86 -0
- package/ts/src/cultivation/consolidationStore.ts +281 -0
- package/ts/src/cultivation/promptContext.ts +62 -0
- package/ts/src/cultivation/propose.ts +305 -0
- package/ts/src/cultivation/scan.ts +155 -0
- package/ts/src/db/backupGate.ts +47 -0
- package/ts/src/db/bootstrap.ts +108 -0
- package/ts/src/db/bootstrapLock.ts +223 -0
- package/ts/src/db/copyGuard.ts +60 -0
- package/ts/src/db/database.ts +397 -0
- package/ts/src/db/decode.ts +66 -0
- package/ts/src/db/ftsIntegrity.ts +41 -0
- package/ts/src/db/migrateOnOpen.ts +214 -0
- package/ts/src/db/migrations.ts +576 -0
- package/ts/src/db/readyOnOpen.ts +35 -0
- package/ts/src/db/rowDecode.ts +42 -0
- package/ts/src/db/schema.ts +432 -0
- package/ts/src/db/schemaInventory.ts +225 -0
- package/ts/src/db/schemaInventorySnapshot.ts +2107 -0
- package/ts/src/db/schemaState.ts +91 -0
- package/ts/src/db/schemaTsDivergence.ts +114 -0
- package/ts/src/descriptor/descriptorRead.ts +49 -0
- package/ts/src/docs/docsLint.ts +265 -0
- package/ts/src/explorer/handoff.ts +522 -0
- package/ts/src/explorer/render.ts +335 -0
- package/ts/src/explorer/story.ts +769 -0
- package/ts/src/explorer/transition.ts +72 -0
- package/ts/src/extensions/bindings.ts +170 -0
- package/ts/src/extensions/catalog.ts +249 -0
- package/ts/src/extensions/catalogCommands.ts +513 -0
- package/ts/src/extensions/catalogWrites.ts +652 -0
- package/ts/src/extensions/contextRuntime.ts +325 -0
- package/ts/src/extensions/dispatch.ts +374 -0
- package/ts/src/extensions/errors.ts +24 -0
- package/ts/src/extensions/manifest.ts +356 -0
- package/ts/src/extensions/migrations.ts +350 -0
- package/ts/src/extraction/conversation.ts +304 -0
- package/ts/src/extraction/conversationMetadata.ts +206 -0
- package/ts/src/extraction/fencing.ts +106 -0
- package/ts/src/extraction/json.ts +17 -0
- package/ts/src/extraction/prompts.ts +470 -0
- package/ts/src/frontDoor/args.ts +30 -0
- package/ts/src/frontDoor/argvShape.ts +106 -0
- package/ts/src/frontDoor/buildLoadRuntime.ts +139 -0
- package/ts/src/frontDoor/buildRoute.ts +398 -0
- package/ts/src/frontDoor/cli.ts +1865 -0
- package/ts/src/frontDoor/cloneRoleGuard.ts +98 -0
- package/ts/src/frontDoor/consultRoute.ts +50 -0
- package/ts/src/frontDoor/contentTailRoute.ts +239 -0
- package/ts/src/frontDoor/conversationLoggerRoute.ts +73 -0
- package/ts/src/frontDoor/cultivationRoute.ts +210 -0
- package/ts/src/frontDoor/dbPath.ts +131 -0
- package/ts/src/frontDoor/dbSafetyToolsRoute.ts +240 -0
- package/ts/src/frontDoor/exploreRoute.ts +572 -0
- package/ts/src/frontDoor/extensionCatalogRoute.ts +252 -0
- package/ts/src/frontDoor/frontDoorLog.ts +57 -0
- package/ts/src/frontDoor/identityWrite.ts +36 -0
- package/ts/src/frontDoor/journeyWriteRoute.ts +26 -0
- package/ts/src/frontDoor/lifecycleWriteRoute.ts +110 -0
- package/ts/src/frontDoor/liveBackup.ts +100 -0
- package/ts/src/frontDoor/mirrorModeRoute.ts +163 -0
- package/ts/src/frontDoor/namedRefusal.ts +35 -0
- package/ts/src/frontDoor/nodeSupport.ts +24 -0
- package/ts/src/frontDoor/render/consolidate.ts +199 -0
- package/ts/src/frontDoor/render/conversations.ts +33 -0
- package/ts/src/frontDoor/render/cultivationShared.ts +21 -0
- package/ts/src/frontDoor/render/descriptor.ts +20 -0
- package/ts/src/frontDoor/render/detectPersona.ts +50 -0
- package/ts/src/frontDoor/render/icons.ts +13 -0
- package/ts/src/frontDoor/render/identity.ts +59 -0
- package/ts/src/frontDoor/render/identityRows.ts +17 -0
- package/ts/src/frontDoor/render/inspectPersona.ts +53 -0
- package/ts/src/frontDoor/render/journeyStatus.ts +78 -0
- package/ts/src/frontDoor/render/journeys.ts +79 -0
- package/ts/src/frontDoor/render/list.ts +41 -0
- package/ts/src/frontDoor/render/memories.ts +67 -0
- package/ts/src/frontDoor/render/recall.ts +49 -0
- package/ts/src/frontDoor/render/shadow.ts +155 -0
- package/ts/src/frontDoor/render/tasks.ts +99 -0
- package/ts/src/frontDoor/render/tasksImportSync.ts +63 -0
- package/ts/src/frontDoor/render/week.ts +113 -0
- package/ts/src/frontDoor/routing.ts +999 -0
- package/ts/src/frontDoor/runtimeRoute.ts +623 -0
- package/ts/src/frontDoor/searchRoute.ts +166 -0
- package/ts/src/frontDoor/seedPaths.ts +98 -0
- package/ts/src/frontDoor/soulRoute.ts +433 -0
- package/ts/src/frontDoor/tasksImportSyncRoute.ts +110 -0
- package/ts/src/frontDoor/tasksWriteRoute.ts +101 -0
- package/ts/src/frontDoor/usage.ts +176 -0
- package/ts/src/guards/claudePlugin.ts +252 -0
- package/ts/src/guards/packContents.ts +306 -0
- package/ts/src/guards/piSourcedSkills.ts +70 -0
- package/ts/src/guards/retiredRouteShadows.ts +57 -0
- package/ts/src/guards/retiredSurfaces.ts +564 -0
- package/ts/src/hooks/claude.ts +176 -0
- package/ts/src/hooks/codex.ts +45 -0
- package/ts/src/hooks/gemini.ts +126 -0
- package/ts/src/hooks/main.ts +109 -0
- package/ts/src/hooks/mirrorState.ts +71 -0
- package/ts/src/hooks/payload.ts +68 -0
- package/ts/src/hooks/runtime.ts +159 -0
- package/ts/src/identity/applyConsolidationIdentityUpdate.ts +67 -0
- package/ts/src/identity/descriptorGenerate.ts +162 -0
- package/ts/src/identity/identityEdit.ts +143 -0
- package/ts/src/identity/identityKey.ts +77 -0
- package/ts/src/identity/identityRead.ts +69 -0
- package/ts/src/identity/identityStore.ts +80 -0
- package/ts/src/identity/journeyListing.ts +53 -0
- package/ts/src/identity/personaInspect.ts +44 -0
- package/ts/src/identity/personaListing.ts +37 -0
- package/ts/src/identity/setIdentity.ts +64 -0
- package/ts/src/index.ts +231 -0
- package/ts/src/init/init.ts +111 -0
- package/ts/src/journey/journeyOptions.ts +131 -0
- package/ts/src/journey/journeyRemoval.ts +158 -0
- package/ts/src/journey/journeyStatus.ts +149 -0
- package/ts/src/journey/journeySyncFile.ts +87 -0
- package/ts/src/journey/journeyWrite.ts +203 -0
- package/ts/src/journey/parentJourney.ts +41 -0
- package/ts/src/journey/validateParentJourney.ts +55 -0
- package/ts/src/mcp/boundary.ts +151 -0
- package/ts/src/mcp/guards.ts +244 -0
- package/ts/src/mcp/main.ts +121 -0
- package/ts/src/mcp/payload.ts +141 -0
- package/ts/src/mcp/protocol.ts +141 -0
- package/ts/src/mcp/readModels.ts +241 -0
- package/ts/src/mcp/registry.ts +201 -0
- package/ts/src/mcp/serve.ts +120 -0
- package/ts/src/mcp/tools/deterministic.ts +137 -0
- package/ts/src/mcp/tools/providerCrossing.ts +187 -0
- package/ts/src/mcp/wire.ts +8 -0
- package/ts/src/memory/journal.ts +180 -0
- package/ts/src/memory/listing.ts +107 -0
- package/ts/src/memory/memoryWrite.ts +88 -0
- package/ts/src/memory/reinforcement.ts +35 -0
- package/ts/src/mirror/context.ts +161 -0
- package/ts/src/mirror/defaultResolution.ts +199 -0
- package/ts/src/mirror/orchestration.ts +364 -0
- package/ts/src/mirror/reception.ts +194 -0
- package/ts/src/mirror/render.ts +75 -0
- package/ts/src/mirror/runtimeSession.ts +205 -0
- package/ts/src/mode/operatingMode.ts +148 -0
- package/ts/src/observability/callOutcome.ts +115 -0
- package/ts/src/observability/inspectLedger.ts +329 -0
- package/ts/src/observability/ledgerHooks.ts +126 -0
- package/ts/src/observability/llmCalls.ts +154 -0
- package/ts/src/persona/detectPersona.ts +81 -0
- package/ts/src/planning/promptAssembly.ts +111 -0
- package/ts/src/planning/weekPending.ts +81 -0
- package/ts/src/planning/weekPlan.ts +183 -0
- package/ts/src/planning/weekSave.ts +117 -0
- package/ts/src/providers/config.ts +189 -0
- package/ts/src/providers/cost.ts +64 -0
- package/ts/src/providers/credits.ts +204 -0
- package/ts/src/providers/embedding.ts +321 -0
- package/ts/src/providers/familyProviders.ts +147 -0
- package/ts/src/providers/llm.ts +334 -0
- package/ts/src/providers/openrouter.ts +244 -0
- package/ts/src/providers/redaction.ts +110 -0
- package/ts/src/providers/replay.ts +15 -0
- package/ts/src/providers/transport.ts +410 -0
- package/ts/src/repair/encodingRepair.ts +253 -0
- package/ts/src/runtime/backup.ts +151 -0
- package/ts/src/runtime/channel.ts +146 -0
- package/ts/src/runtime/config.ts +168 -0
- package/ts/src/runtime/diagnose.ts +686 -0
- package/ts/src/runtime/git.ts +510 -0
- package/ts/src/runtime/installKind.ts +220 -0
- package/ts/src/runtime/migrate.ts +154 -0
- package/ts/src/runtime/packageIdentity.ts +102 -0
- package/ts/src/runtime/releaseNotes.ts +244 -0
- package/ts/src/runtime/status.ts +557 -0
- package/ts/src/runtime/strategies/clone.ts +200 -0
- package/ts/src/runtime/strategies/package.ts +328 -0
- package/ts/src/runtime/treeRoot.ts +30 -0
- package/ts/src/runtime/update.ts +445 -0
- package/ts/src/runtime/updateGate.ts +40 -0
- package/ts/src/runtime/updatePipeline.ts +159 -0
- package/ts/src/runtime/version.ts +36 -0
- package/ts/src/runtime/wiring.ts +130 -0
- package/ts/src/search/memorySearch.ts +338 -0
- package/ts/src/search/ranker.ts +154 -0
- package/ts/src/seed/seed.ts +256 -0
- package/ts/src/seed/seedYaml.ts +133 -0
- package/ts/src/soul/apply.ts +218 -0
- package/ts/src/soul/harvest.ts +267 -0
- package/ts/src/soul/prompts/soul_beauty_voice.md +103 -0
- package/ts/src/soul/prompts/soul_self_voice.md +219 -0
- package/ts/src/soul/prompts/soul_wisdom_voice.md +121 -0
- package/ts/src/soul/prompts.ts +85 -0
- package/ts/src/soul/render.ts +358 -0
- package/ts/src/soul/state.ts +212 -0
- package/ts/src/soul/transition.ts +37 -0
- package/ts/src/tasks/journeyPathParse.ts +113 -0
- package/ts/src/tasks/taskImportSync.ts +142 -0
- package/ts/src/tasks/taskStore.ts +312 -0
- package/ts/src/tasks/weekView.ts +120 -0
- package/ts/src/util/clipCodePoints.ts +26 -0
- package/ts/src/util/paths.ts +63 -0
- package/ts/src/util/program.ts +9 -0
- package/ts/src/util/pyGenerators.ts +144 -0
- package/ts/src/util/pythonText.ts +317 -0
- package/ts/src/util/semver.ts +45 -0
- package/ts/src/util/shellWord.ts +25 -0
- package/ts/src/util/slug.ts +64 -0
- package/ts/src/welcome/card.ts +339 -0
- package/ts/src/welcome/statusLine.ts +101 -0
- package/ts/src/welcome/updateCache.ts +129 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// CV22.DS7.US8 plateau 1 — the primitives under every Builder surface.
|
|
2
|
+
//
|
|
3
|
+
// Python has TEN copies of `_wrap_plain_text` and SEVEN of `_card_prefixed`,
|
|
4
|
+
// spread across `src/memory/builder/`. Measured across the 501-row card golden
|
|
5
|
+
// rather than read, they collapse to TWO behaviors each:
|
|
6
|
+
//
|
|
7
|
+
// * wrap: eight owners CHUNK a word longer than the width into width-sized
|
|
8
|
+
// slices; `release_intent` appends it whole and lets `cardText` truncate
|
|
9
|
+
// the tail away. Same input, two outputs, one module apart.
|
|
10
|
+
// * prefixed: `delivery_story_closure` strips a leading `"- "` from each
|
|
11
|
+
// item; the other six do not. (`flow_unit`'s `lines or [none]` is
|
|
12
|
+
// STRUCTURALLY different from the others' `if not items` but behaviorally
|
|
13
|
+
// identical on every row of the corpus, so it is not a third behavior.)
|
|
14
|
+
//
|
|
15
|
+
// So this module is one wrapper with one flag and one prefixer with one flag,
|
|
16
|
+
// not ten functions. Factoring them into a single shared helper with no flag
|
|
17
|
+
// would be wrong in exactly one place, which is the trap the golden exists to
|
|
18
|
+
// catch — grading all nine owners means a future refactor cannot quietly
|
|
19
|
+
// unify them.
|
|
20
|
+
//
|
|
21
|
+
// Widths are Python's literals: 54 for card body text, 52 for prefixed list
|
|
22
|
+
// items. Both budgets are measured in CODE POINTS, because Python's `len()`
|
|
23
|
+
// is.
|
|
24
|
+
|
|
25
|
+
import { clipCodePoints } from "#util/clipCodePoints.ts";
|
|
26
|
+
import { codePointLength, pySplitWhitespace, sliceCodePoints } from "#util/pythonText.ts";
|
|
27
|
+
|
|
28
|
+
/** `_card_text`'s field width: `f"│ {text[:54]:<54} │"`. */
|
|
29
|
+
export const CARD_WIDTH = 54;
|
|
30
|
+
|
|
31
|
+
/** `_card_prefixed`'s wrap budget: the prefix and its space cost two columns. */
|
|
32
|
+
export const CARD_PREFIX_WIDTH = 52;
|
|
33
|
+
|
|
34
|
+
/** Python's `["none"]` fallback for an empty wrap result. */
|
|
35
|
+
const NONE = "none";
|
|
36
|
+
|
|
37
|
+
export interface WrapOptions {
|
|
38
|
+
width: number;
|
|
39
|
+
/**
|
|
40
|
+
* Python's divergence, as a parameter. `true` for the eight owners that
|
|
41
|
+
* slice an over-long word into width-sized chunks; `false` for
|
|
42
|
+
* `release_intent`, which appends it whole so `cardText` truncates it.
|
|
43
|
+
*/
|
|
44
|
+
chunkLongWords: boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Python `_wrap_plain_text(text, *, width)`.
|
|
49
|
+
*
|
|
50
|
+
* Splits with `str.split()` semantics — Python's whitespace set, not
|
|
51
|
+
* JavaScript's `\s` — so embedded newlines are separators and paragraphs
|
|
52
|
+
* COLLAPSE. That is Python's behavior, not an oversight to fix here.
|
|
53
|
+
*
|
|
54
|
+
* Returns `["none"]` for text that contains no words, matching Python's
|
|
55
|
+
* `return lines or ["none"]`.
|
|
56
|
+
*/
|
|
57
|
+
export function wrapPlainText(text: string, options: WrapOptions): string[] {
|
|
58
|
+
const { width, chunkLongWords } = options;
|
|
59
|
+
const lines: string[] = [];
|
|
60
|
+
let current = "";
|
|
61
|
+
|
|
62
|
+
for (const word of pySplitWhitespace(text)) {
|
|
63
|
+
if (chunkLongWords && codePointLength(word) > width) {
|
|
64
|
+
// Python flushes `current` BEFORE slicing, so a short lead word does not
|
|
65
|
+
// get glued to the first chunk.
|
|
66
|
+
if (current !== "") {
|
|
67
|
+
lines.push(current);
|
|
68
|
+
current = "";
|
|
69
|
+
}
|
|
70
|
+
const points = Array.from(word);
|
|
71
|
+
for (let start = 0; start < points.length; start += width) {
|
|
72
|
+
lines.push(points.slice(start, start + width).join(""));
|
|
73
|
+
}
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const candidate = current === "" ? word : `${current} ${word}`;
|
|
77
|
+
if (codePointLength(candidate) > width && current !== "") {
|
|
78
|
+
lines.push(current);
|
|
79
|
+
current = word;
|
|
80
|
+
} else {
|
|
81
|
+
current = candidate;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (current !== "") lines.push(current);
|
|
86
|
+
return lines.length > 0 ? lines : [NONE];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Python `_card_text(text)`: `f"│ {text[:54]:<54} │"` — truncate to 54 code
|
|
91
|
+
* points, THEN pad to 54. The order matters: a 60-character string is cut to
|
|
92
|
+
* 54 and not padded; a 3-character string is padded to 54.
|
|
93
|
+
*
|
|
94
|
+
* Padding is in code points, so a card carrying astral-plane glyphs (`🟪`,
|
|
95
|
+
* `🟦`, `🧰`) is padded to the same CODE POINT count as an ASCII card and
|
|
96
|
+
* therefore renders NARROWER in a terminal that gives those glyphs two
|
|
97
|
+
* columns. That is Python's output and the golden pins it.
|
|
98
|
+
*/
|
|
99
|
+
export function cardText(text: string): string {
|
|
100
|
+
const truncated = sliceCodePoints(text, CARD_WIDTH);
|
|
101
|
+
const padding = " ".repeat(Math.max(0, CARD_WIDTH - codePointLength(truncated)));
|
|
102
|
+
return `│ ${truncated}${padding} │`;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* A row that restates a title on one line (CR018): `cardText`, except that a cut says
|
|
107
|
+
* so, by `clipCodePoints`'s rule. `cardText` cuts silently, as Python's `_card_text`
|
|
108
|
+
* did, and a Navigator reading `Canonical Refinement Index And Artifact Conven` has no
|
|
109
|
+
* way to know a title goes on. Where a title is read rather than restated, it wraps
|
|
110
|
+
* instead (`cardWrapped`).
|
|
111
|
+
*/
|
|
112
|
+
export function cardClipped(text: string): string {
|
|
113
|
+
return cardText(clipCodePoints(text, CARD_WIDTH));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Python `_card_wrapped(text)`: wrap at 54, then one card line per wrapped line. */
|
|
117
|
+
export function cardWrapped(text: string): string[] {
|
|
118
|
+
return wrapPlainText(text, { width: CARD_WIDTH, chunkLongWords: true }).map(cardText);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Python `_card_line(left, right)` (`pull_candidates` only): right-anchor
|
|
123
|
+
* `right`, give `left` whatever remains, and pad the whole content to 54.
|
|
124
|
+
*
|
|
125
|
+
* Two details a port drops: `left_width` has a `max(1, …)` floor, so a `right`
|
|
126
|
+
* wider than the card still leaves one column for `left`; and the content is
|
|
127
|
+
* padded to `width` AFTER the inner `left` padding, so a short pair is padded
|
|
128
|
+
* twice and the result is still exactly 54 code points.
|
|
129
|
+
*
|
|
130
|
+
* `clip` marks a cut in `left` with `…`, for a left side that restates a title
|
|
131
|
+
* (CR018); the right side is never cut.
|
|
132
|
+
*/
|
|
133
|
+
export function cardLine(left: string, right: string, options: { clip?: boolean } = {}): string {
|
|
134
|
+
const leftWidth = Math.max(1, CARD_WIDTH - codePointLength(right) - 1);
|
|
135
|
+
const trimmedLeft = options.clip
|
|
136
|
+
? clipCodePoints(left, leftWidth)
|
|
137
|
+
: sliceCodePoints(left, leftWidth);
|
|
138
|
+
const leftPadding = " ".repeat(Math.max(0, leftWidth - codePointLength(trimmedLeft)));
|
|
139
|
+
const content = `${trimmedLeft}${leftPadding} ${right}`;
|
|
140
|
+
const contentPadding = " ".repeat(Math.max(0, CARD_WIDTH - codePointLength(content)));
|
|
141
|
+
return `│ ${content}${contentPadding} │`;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Python `_card_context_items(items)` (`lifecycle` only): the Prepare surface's
|
|
146
|
+
* terrain read. The glyph is chosen by a SUBSTRING test — `"present" in item`
|
|
147
|
+
* — not by a status field, so an item whose path happens to contain the word
|
|
148
|
+
* "present" renders `✓` regardless of whether the file exists. Reproduced.
|
|
149
|
+
*/
|
|
150
|
+
export function cardContextItems(items: readonly string[]): string[] {
|
|
151
|
+
if (items.length === 0) return [cardText(NONE)];
|
|
152
|
+
return items.map((item) => cardText(`${item.includes("present") ? "✓" : "○"} ${item}`));
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface CardPrefixedOptions {
|
|
156
|
+
/**
|
|
157
|
+
* `delivery_story_closure`'s divergence: strip a leading `"- "` from each
|
|
158
|
+
* item before wrapping, so a Markdown-bulleted debt list renders unbulleted
|
|
159
|
+
* there and bulleted everywhere else. Note it is `"- "` exactly — `-x` is
|
|
160
|
+
* not a bullet.
|
|
161
|
+
*/
|
|
162
|
+
stripDash?: boolean;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Python `_card_prefixed(items, prefix)`: the first wrapped line of each item
|
|
167
|
+
* carries the prefix glyph, continuation lines carry a space.
|
|
168
|
+
*
|
|
169
|
+
* An empty tuple yields a single `none` card. An item that wraps to nothing —
|
|
170
|
+
* `""` or only spaces — yields `none` as its body, because `wrapPlainText`
|
|
171
|
+
* returns `["none"]`, so a tuple of two blanks renders TWO `none` cards. That
|
|
172
|
+
* reads like a defect and is Python's behavior; it is reproduced, not fixed.
|
|
173
|
+
*/
|
|
174
|
+
export function cardPrefixed(
|
|
175
|
+
items: readonly string[],
|
|
176
|
+
prefix: string,
|
|
177
|
+
options: CardPrefixedOptions = {},
|
|
178
|
+
): string[] {
|
|
179
|
+
if (items.length === 0) return [cardText(NONE)];
|
|
180
|
+
const lines: string[] = [];
|
|
181
|
+
for (const item of items) {
|
|
182
|
+
const normalized = options.stripDash && item.startsWith("- ") ? item.slice(2) : item;
|
|
183
|
+
const wrapped = wrapPlainText(normalized, {
|
|
184
|
+
width: CARD_PREFIX_WIDTH,
|
|
185
|
+
chunkLongWords: true,
|
|
186
|
+
});
|
|
187
|
+
wrapped.forEach((line, index) => {
|
|
188
|
+
lines.push(cardText(`${index === 0 ? prefix : " "} ${line}`));
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return lines;
|
|
192
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// CR067 with CR020 — a refused lifecycle request, rendered where the cursor stands.
|
|
2
|
+
//
|
|
3
|
+
// Every refusal of the story closure commands used to render the Implement guard, so a
|
|
4
|
+
// refused Coherence placed the item five stages back and claimed implementation was
|
|
5
|
+
// blocked. This surface takes the stage from the cursor, gives the refusal's own reason,
|
|
6
|
+
// prints the literal command that shows the active checkpoint, and closes on what did
|
|
7
|
+
// not change. `IMPLEMENTATION_GUARD` stays with `check-implementation`, the one
|
|
8
|
+
// condition it was written for.
|
|
9
|
+
|
|
10
|
+
import { cardText, cardWrapped } from "./card.ts";
|
|
11
|
+
import { lifecycleStageOf } from "./cursorPosition.ts";
|
|
12
|
+
import type { BuilderDeliveryCursor } from "./deliveryCursor.ts";
|
|
13
|
+
import { renderLifecycleRibbon } from "./lifecycleRibbon.ts";
|
|
14
|
+
import { NO_ITEM_PULLED_YET, showCheckpoint } from "./scopePhrases.ts";
|
|
15
|
+
import { wrapAriadSurface } from "./surfaceProtocol.ts";
|
|
16
|
+
|
|
17
|
+
const FRAME_TOP = "╭────────────────────────────────────────────────────────╮";
|
|
18
|
+
const FRAME_BOTTOM = "╰────────────────────────────────────────────────────────╯";
|
|
19
|
+
const FRAME_BLANK = "│ │";
|
|
20
|
+
|
|
21
|
+
export interface CheckpointRefusal {
|
|
22
|
+
/** The command that was refused, as typed: `validate-item`, `continue-lifecycle`. */
|
|
23
|
+
readonly request: string;
|
|
24
|
+
readonly reason: string;
|
|
25
|
+
readonly journey: string;
|
|
26
|
+
/** The cursor as it stands; a refusal never changed it. */
|
|
27
|
+
readonly cursor: BuilderDeliveryCursor | null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** The cursor on one line: the item, its last event, and what it waits on. */
|
|
31
|
+
function cursorLine(cursor: BuilderDeliveryCursor | null): string {
|
|
32
|
+
if (cursor === null || !cursor.activeItem) return NO_ITEM_PULLED_YET;
|
|
33
|
+
const event = cursor.lastDeliveryEvent ?? "none";
|
|
34
|
+
const pending = cursor.pendingConfirmation ?? "none";
|
|
35
|
+
return `${cursor.activeItem} · last event ${event} · pending ${pending}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function renderCheckpointRefused(refusal: CheckpointRefusal): string {
|
|
39
|
+
const stage = refusal.cursor === null ? null : lifecycleStageOf(refusal.cursor);
|
|
40
|
+
const body = [
|
|
41
|
+
"Delivery",
|
|
42
|
+
...(stage === null
|
|
43
|
+
? []
|
|
44
|
+
: [renderLifecycleRibbon(stage, refusal.cursor?.activeItemLevel ?? null)]),
|
|
45
|
+
"",
|
|
46
|
+
FRAME_TOP,
|
|
47
|
+
cardText(" ■ REQUEST REFUSED"),
|
|
48
|
+
FRAME_BLANK,
|
|
49
|
+
cardText("request"),
|
|
50
|
+
cardText(refusal.request),
|
|
51
|
+
FRAME_BLANK,
|
|
52
|
+
cardText("reason"),
|
|
53
|
+
...cardWrapped(refusal.reason),
|
|
54
|
+
FRAME_BLANK,
|
|
55
|
+
cardText("cursor"),
|
|
56
|
+
...cardWrapped(cursorLine(refusal.cursor)),
|
|
57
|
+
FRAME_BLANK,
|
|
58
|
+
cardText("to see the checkpoint"),
|
|
59
|
+
...cardWrapped(showCheckpoint(refusal.journey)),
|
|
60
|
+
FRAME_BLANK,
|
|
61
|
+
cardText("boundary"),
|
|
62
|
+
...cardWrapped("Refused before any change: the cursor and the project files are as they were."),
|
|
63
|
+
FRAME_BOTTOM,
|
|
64
|
+
].join("\n");
|
|
65
|
+
return wrapAriadSurface("checkpoint_refused", `${body}\n`);
|
|
66
|
+
}
|