total-recall-brain 3.44.0 → 3.46.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/bin/total-recall.mjs +10 -6
- package/docs/ARCHITECTURE.md +10 -7
- package/docs/reference/cli-reference.md +13 -8
- package/frontend/dist/assets/index-BRYE1jmv.css +1 -0
- package/frontend/dist/assets/index-D1goIPjC.js +5598 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/dist/sw.js +5 -4
- package/frontend/src/App.tsx +185 -238
- package/frontend/src/api/auth-inventory.ts +62 -0
- package/frontend/src/api/memory.ts +13 -8
- package/frontend/src/api/plugin-credentials.ts +23 -0
- package/frontend/src/api/plugins.ts +37 -53
- package/frontend/src/api/workspace-drawers.ts +97 -0
- package/frontend/src/components/BrainSelector.tsx +9 -3
- package/frontend/src/components/plugins/PluginPanel.tsx +83 -42
- package/frontend/src/components/plugins/PluginSettings.tsx +10 -20
- package/frontend/src/components/plugins/PluginWorkspace.tsx +367 -0
- package/frontend/src/components/plugins/ScopedPluginCommands.tsx +142 -0
- package/frontend/src/components/plugins/plugin-frame.ts +44 -33
- package/frontend/src/components/plugins/scoped-plugin-operations.ts +28 -0
- package/frontend/src/components/workspace/DrawerChat.tsx +110 -0
- package/frontend/src/components/workspace/DrawerLayout.tsx +196 -0
- package/frontend/src/components/workspace/DrawerMarkup.tsx +49 -0
- package/frontend/src/components/workspace/PluginChunkLibrary.tsx +92 -0
- package/frontend/src/components/workspace/PluginHome.tsx +76 -0
- package/frontend/src/components/workspace/WorkspaceDrawers.tsx +96 -0
- package/frontend/src/components/workspace/WorkspacePage.tsx +95 -0
- package/frontend/src/components/workspace/usePluginDesign.ts +38 -0
- package/frontend/src/index.css +409 -136
- package/frontend/src/pages/HelpPage.tsx +15 -46
- package/frontend/src/pages/MemoryPage.tsx +19 -36
- package/frontend/src/pages/SettingsPage.tsx +1 -1
- package/metadata.plugin.schema.json +53 -227
- package/package.json +1 -1
- package/scaffold/.agent/skills/plugin/SKILL.md +13 -11
- package/scaffold/.agent/skills/plugin/evals/README.md +14 -21
- package/scaffold/.agent/skills/plugin/evals/cases/01-fabricated-seed.mjs +15 -18
- package/scaffold/.agent/skills/plugin/evals/cases/02-reassuring-default.mjs +19 -24
- package/scaffold/.agent/skills/plugin/evals/cases/03-declared-template.mjs +12 -20
- package/scaffold/.agent/skills/plugin/evals/cases/04-home-collects-credential.mjs +35 -0
- package/scaffold/.agent/skills/plugin/evals/cases/05-host-leak-in-scaffold.mjs +8 -28
- package/scaffold/.agent/skills/plugin/evals/cases/06-correct-plugin.mjs +85 -47
- package/scaffold/.agent/skills/plugin/evals/run.mjs +17 -18
- package/scaffold/.agent/skills/plugin/prompts/05-credentials.md +4 -4
- package/scaffold/.agent/skills/plugin/prompts/07-scaffold.md +2 -2
- package/scaffold/.agent/skills/plugin/prompts/08-verify.md +4 -4
- package/scaffold/.agent/skills/plugin/references/anti-patterns.md +2 -2
- package/scaffold/.agent/skills/plugin/references/generative-home.md +38 -0
- package/scaffold/.agent/skills/plugin/references/scaffold.md +5 -5
- package/scaffold/.agent/skills/plugin/references/surfaces.md +13 -4
- package/scaffold/.agent/skills/plugin/scripts/record.mjs +75 -153
- package/scaffold/.agent/skills/plugin/subagents/plugin-reviewer.md +4 -4
- package/scaffold/.agent/skills/total-recall/plugins/auth/DESIGN.md +76 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/README.md +3 -1
- package/scaffold/.agent/skills/total-recall/plugins/auth/cli.mjs +20 -15
- package/scaffold/.agent/skills/total-recall/plugins/auth/package-lock.json +7 -7
- package/scaffold/.agent/skills/total-recall/plugins/auth/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/auth/plugin.json +13 -51
- package/scaffold/.agent/skills/total-recall/plugins/auth/src/cli-secret.mjs +20 -1
- package/scaffold/.agent/skills/total-recall/plugins/auth/src/secrets-store.mjs +12 -1
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/access-overview.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/agent-login.md +20 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/baseline-audit.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/credential-repository-binding.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/credential-store-maintenance.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/dashboard-password.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/dashboard-sessions.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/endpoint-probe.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/google-sign-in.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/mesh-machines.md +16 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/passkey-enrollment.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/registered-brains.md +16 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/scoped-access-keys.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/secret-inventory.md +25 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/chunks/signing-key-rotation.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/home.js +375 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/BRICK.md +7 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/DESIGN.md +53 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/LICENSE +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/README.md +66 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/adapters.mjs +247 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/capability/index.mjs +16 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/cli.mjs +130 -0
- package/{src/core/plugin-cron.mjs → scaffold/.agent/skills/total-recall/plugins/automations/cron.mjs} +1 -3
- package/scaffold/.agent/skills/total-recall/plugins/automations/inventory.mjs +88 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/package-lock.json +7661 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/package.json +36 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/plugin.json +151 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/scheduler.mjs +246 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/automations.js +2 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/control-ledger.md +42 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/local-inventory-triage.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/pending-control.md +39 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/run-evidence.md +41 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/schedule-vs-run-evidence.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/source-coverage.md +41 -0
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/home.js +278 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/DESIGN.md +53 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/cli.mjs +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/commands/run-core.mjs +5 -3
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/core/check.mjs +61 -7
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/core/report-data.mjs +40 -14
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/core/report.mjs +15 -40
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +7 -7
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/plugin.json +40 -40
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/config.md +15 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/detect.md +15 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/gate.md +15 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/init.md +15 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/report.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/run.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/chunks/snapshot.md +15 -0
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/code-quality-report.mjs +55 -23
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/home.mjs +214 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/DESIGN.md +146 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package-lock.json +7 -7
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/plugin.json +51 -34
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/src/command.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/create.md +35 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/history.md +35 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/library.md +49 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/list.md +42 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/promote.md +40 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/read.md +25 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/remove.md +26 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/rollback.md +26 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/show.md +53 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/status.md +40 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/test-path.md +38 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/test.md +46 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/chunks/update.md +32 -0
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/home.js +533 -0
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/DESIGN.md +110 -0
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/package-lock.json +7 -7
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/plugin.json +13 -10
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/benchmark.md +49 -0
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/coverage.md +53 -0
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/models.md +43 -0
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/pull.md +41 -0
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/chunks/status.md +59 -0
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/home.js +353 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/DESIGN.md +31 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/README.md +136 -0
- package/scaffold/.agent/skills/total-recall/plugins/{git-sentinel → git}/cli.mjs +140 -24
- package/scaffold/.agent/skills/total-recall/plugins/{git-sentinel → git}/package-lock.json +9 -9
- package/scaffold/.agent/skills/total-recall/plugins/{git-sentinel → git}/package.json +4 -2
- package/scaffold/.agent/skills/total-recall/plugins/git/plugin.json +151 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/lib/context.mjs +94 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/lib/phase3-spec-support.mjs +50 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/lib/runtime.mjs +40 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/lib/spec-support.mjs +51 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/_support.mjs +195 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/auth.mjs +201 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/bisect.mjs +40 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/cli-meta.mjs +159 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/commit-memory.mjs +54 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/commit.mjs +46 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/fleet.mjs +174 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/force-push.mjs +58 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/group.mjs +119 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/handoff.mjs +59 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/message.mjs +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/resolve.mjs +60 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/rules.mjs +81 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/secret-firewall.mjs +92 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/undo.mjs +156 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/unmerged.mjs +182 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/why.mjs +16 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/change-comparison.md +27 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/commit-identity.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/create-worktree.md +25 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/registered-worktrees.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/remove-worktree.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/repository-ledger.md +25 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/unmerged-work.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/upstream-divergence.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/worktree-conflict-triage.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/chunks/worktree-terminal.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/git/ui/home.js +273 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/DESIGN.md +35 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/README.md +4 -5
- package/scaffold/.agent/skills/total-recall/plugins/mesh/cli.mjs +9 -3
- package/scaffold/.agent/skills/total-recall/plugins/mesh/package-lock.json +7 -7
- package/scaffold/.agent/skills/total-recall/plugins/mesh/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/mesh/plugin.json +37 -39
- package/scaffold/.agent/skills/total-recall/plugins/mesh/src/cli/mesh.mjs +5 -3
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/active-device-dispatch.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/control-probe.md +25 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/control-server.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/credential-readiness.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/elected-leader.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/enrollment-key.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/file-receipt.md +25 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/fleet-execution.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/fleet-presence.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/interactive-ssh.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/local-enrollment.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/mesh-policy.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/network-atlas.md +25 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/node-roster.md +26 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/node-selection-proof.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/owner-observations.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/peer-path.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/pinned-leader.md +24 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/reachability-evidence-ladder.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/recorded-login.md +23 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/remote-execution.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/chunks/secret-grants.md +26 -0
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/{card.js → home.js} +93 -22
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/DESIGN.md +86 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/README.md +44 -9
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/capability/BRICK.md +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/capability/index.mjs +18 -6
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/cli.mjs +128 -24
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package-lock.json +7 -7
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package.json +3 -2
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/plugin.json +188 -34
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/skills/meta-harness/SKILL.md +17 -3
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/adoption.mjs +2 -2
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/alerts.mjs +3 -3
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/cascade.mjs +92 -18
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/chat.mjs +80 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/control.mjs +145 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/coordinator.mjs +42 -21
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/dispatch-request.mjs +4 -2
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/dispatch.mjs +33 -9
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/documentation.mjs +55 -11
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/executor.mjs +26 -4
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/hermes.mjs +29 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/index.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/included-usage.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/jobs.mjs +84 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/learner.mjs +3 -12
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/maintenance.mjs +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/mcp-server.mjs +228 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/process-manager.mjs +25 -2
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/reasoning.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/remote-operation.mjs +5 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/review.mjs +34 -3
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/reviews.mjs +25 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/router.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/claude.mjs +319 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/codex.mjs +387 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/result.mjs +67 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/resume.mjs +373 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session/run.mjs +223 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/session-jobs.mjs +72 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/setup.mjs +6 -3
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/termination.mjs +16 -12
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/threads.mjs +32 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/usage-queue.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/verify-ssss.mjs +3 -3
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/worker.mjs +285 -40
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/worktree.mjs +76 -9
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/adapter-docs-freshness.md +16 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/chat-handoff.md +26 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/fleet-maintenance.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/harness-inventory.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/included-access.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/included-usage-verification.md +15 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/independent-review.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/managed-execution.md +20 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/official-documentation.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/quota-recovery.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/review-routing-decision.md +16 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/route-work.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/routing-evidence.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/chunks/run-ledger.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/home.js +198 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/DESIGN.md +75 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/README.md +2 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/cli.mjs +64 -32
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +7 -7
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/plugin.json +10 -44
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/generate.mjs +5 -4
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/graph.mjs +3 -4
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/ingest.mjs +23 -18
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/mesh-vaults.mjs +8 -3
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/refresh-diagnostics.mjs +44 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/refresh.mjs +123 -113
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/search.mjs +3 -5
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/token.mjs +21 -47
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/upstream-watcher.mjs +17 -6
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/auto-refresh.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/bootstrap-pages.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/generate-wiki.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/generator-settings.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/host-probe.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/ingest-preview.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/link-hygiene.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/link-topology.md +19 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/passage-search.md +19 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/propagation-plan.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/provider-credentials.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/refresh-report.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/task-evidence.md +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/upstream-record.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/watch-upstream.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/chunks/wiki-atlas.md +19 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/panel.js +261 -513
- package/scaffold/.agent/skills/total-recall/plugins/security/DESIGN.md +84 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/README.md +4 -2
- package/scaffold/.agent/skills/total-recall/plugins/security/cli.mjs +7 -19
- package/scaffold/.agent/skills/total-recall/plugins/security/package-lock.json +7 -7
- package/scaffold/.agent/skills/total-recall/plugins/security/package.json +2 -3
- package/scaffold/.agent/skills/total-recall/plugins/security/plugin.json +19 -52
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/device-evidence.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/evidence-desk.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/guided-device-review.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/host-and-network.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/https-headers.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/mesh-coverage.md +18 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/private-security-tools.md +16 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/single-origin-header-check.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/source-review.md +21 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/chunks/ssh-permission-plan.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/home.js +283 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/DESIGN.md +93 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/package-lock.json +2 -2
- package/scaffold/.agent/skills/total-recall/plugins/ssss/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/ssss/plugin.json +5 -3
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/conformance.md +26 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/registry.md +37 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/repair.md +42 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/scaffold.md +33 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/status.md +43 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/validate.md +34 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/validation-diagnostics.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/workspace-registry-preflight.md +17 -0
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/home.js +348 -0
- package/scaffold/.agent/skills/total-recall/references/operations.md +3 -1
- package/src/cli/agent.mjs +1 -1
- package/src/cli/api.mjs +3 -3
- package/src/cli/brief.mjs +3 -0
- package/src/cli/command.mjs +41 -2
- package/src/cli/config.mjs +16 -0
- package/src/cli/connect.mjs +2 -7
- package/src/cli/dream.mjs +93 -69
- package/src/cli/harness.mjs +4 -4
- package/src/cli/help.mjs +1 -1
- package/src/cli/init.mjs +0 -25
- package/src/cli/lessons.mjs +51 -0
- package/src/cli/memory-plugin.mjs +1 -1
- package/src/cli/plugin/chunks.mjs +145 -0
- package/src/cli/plugin/copies.mjs +64 -14
- package/src/cli/plugin/create.mjs +30 -59
- package/src/cli/plugin/index.mjs +31 -16
- package/src/cli/plugin/install.mjs +10 -15
- package/src/cli/plugin/remove.mjs +1 -1
- package/src/cli/plugin/search.mjs +2 -2
- package/src/cli/preflight.mjs +19 -6
- package/src/cli/proposals.mjs +1 -1
- package/src/cli/recall.mjs +66 -23
- package/src/cli/remember.mjs +3 -14
- package/src/cli/server.mjs +18 -0
- package/src/cli/setup.mjs +2 -9
- package/src/cli/start.mjs +1 -0
- package/src/cli/startup.mjs +19 -0
- package/src/cli/task.mjs +9 -2
- package/src/cli/update.mjs +6 -2
- package/src/core/access-ledger.mjs +78 -0
- package/src/core/agent-manager.mjs +2 -2
- package/src/core/app-deploy/design-tokens.mjs +14 -9
- package/src/core/app-deploy/ui-elements.mjs +1 -1
- package/src/core/brain-locate.mjs +15 -0
- package/src/core/brain-registry.mjs +5 -0
- package/src/core/brain-updates.mjs +35 -11
- package/src/core/claude-hooks.mjs +3 -1
- package/src/core/cleanup-task.mjs +15 -0
- package/src/core/cli-commands.mjs +2 -0
- package/src/core/cli-maintenance.mjs +4 -1
- package/src/core/cli-semantic-index.mjs +23 -3
- package/src/core/context-compiler.mjs +20 -0
- package/src/core/daemon-control.mjs +5 -1
- package/src/core/daemon-loop.mjs +39 -62
- package/src/core/dashboard-bundle.mjs +261 -0
- package/src/core/default-plugins.mjs +1 -1
- package/src/core/dream.mjs +33 -105
- package/src/core/ensure-dependencies.mjs +152 -0
- package/src/core/fast-recall.mjs +2 -2
- package/src/core/field-evaluation.mjs +23 -0
- package/src/core/gate-mode.mjs +1 -1
- package/src/core/harness-hooks.mjs +14 -2
- package/src/core/lesson-hooks.mjs +74 -0
- package/src/core/lesson-memory.mjs +24 -0
- package/src/core/lesson-sessions.mjs +52 -0
- package/src/core/lessons.mjs +96 -0
- package/src/core/memory-brain.mjs +30 -8
- package/src/core/meta-harness.mjs +2 -2
- package/src/core/optimizer.mjs +66 -165
- package/src/core/plugin-activation.mjs +63 -20
- package/src/core/plugin-contracts/{card.mjs → manifest.mjs} +26 -57
- package/src/core/plugin-contracts/startup-check.mjs +49 -0
- package/src/core/plugin-contracts/ui.mjs +9 -3
- package/src/core/plugin-distribution.mjs +6 -6
- package/src/core/plugin-lifecycle.mjs +58 -0
- package/src/core/plugin-loader.mjs +21 -8
- package/src/core/plugin-runner.mjs +21 -10
- package/src/core/plugin-runtime.mjs +40 -1
- package/src/core/plugin-startup-checks.mjs +44 -0
- package/src/core/plugin-state.mjs +19 -5
- package/src/core/plugin-store.mjs +64 -33
- package/src/core/post-mortem.mjs +52 -36
- package/src/core/preflight-gate.mjs +23 -2
- package/src/core/project-id.mjs +15 -5
- package/src/core/proposal-applier.mjs +31 -2
- package/src/core/repo-sync.mjs +4 -6
- package/src/core/required-plugins.mjs +57 -10
- package/src/core/rule-length.mjs +23 -0
- package/src/core/runtime.mjs +1 -1
- package/src/core/scheduler.mjs +35 -43
- package/src/core/schema.mjs +3 -2
- package/src/core/search.mjs +4 -3
- package/src/core/server-service.mjs +148 -0
- package/src/core/session-watcher.mjs +19 -1
- package/src/core/skill-gap.mjs +16 -0
- package/src/core/ssss-kernel-bridge.mjs +32 -4
- package/src/core/ssss-operation-service.mjs +1 -0
- package/src/core/startup-health.mjs +34 -4
- package/src/core/surface.mjs +65 -54
- package/src/core/task-executors.mjs +54 -106
- package/src/core/testing/plugin-fixture.mjs +22 -21
- package/src/core/throttled-fetch.mjs +25 -18
- package/src/core/ui-chunk-choice.mjs +77 -0
- package/src/core/ui-chunk.registry.json +23 -0
- package/src/core/ui-chunks.mjs +434 -0
- package/src/core/validated-write.mjs +1 -0
- package/src/core/vault-cache.mjs +58 -59
- package/src/core/vector-field.mjs +134 -192
- package/src/core/workspace-compositions.mjs +151 -0
- package/src/core/workspace-drawers.mjs +79 -0
- package/src/server/api.mjs +4 -27
- package/src/server/index.mjs +28 -21
- package/src/server/invoke-core-child.mjs +24 -0
- package/src/server/invoke-core-operations.mjs +102 -0
- package/src/server/memory-events.mjs +31 -0
- package/src/server/plugin-brain-targets.mjs +89 -0
- package/src/server/rest.mjs +2 -0
- package/src/server/route-inventory.mjs +3 -2
- package/src/server/route-manifest.json +47 -55
- package/src/server/routes/_shared.mjs +7 -14
- package/src/server/routes/brains.mjs +29 -62
- package/src/server/routes/context.mjs +0 -41
- package/src/server/routes/dashboard.mjs +26 -0
- package/src/server/routes/invoke.mjs +26 -1
- package/src/server/routes/plugins.mjs +154 -45
- package/src/server/routes/ssss.mjs +0 -169
- package/src/server/routes/system.mjs +0 -15
- package/src/server/routes/tasks.mjs +0 -26
- package/src/server/routes/ui-chunks.mjs +192 -0
- package/src/server/routes/vault.mjs +2 -23
- package/frontend/dist/assets/index-DD4qONvH.js +0 -5607
- package/frontend/dist/assets/index-DtwsDyFM.css +0 -1
- package/frontend/src/components/plugins/card/CardEngine.tsx +0 -108
- package/frontend/src/components/plugins/card/CardScenes.tsx +0 -103
- package/frontend/src/components/plugins/card/ExecutionPicker.tsx +0 -64
- package/frontend/src/components/plugins/card/args.ts +0 -28
- package/frontend/src/components/plugins/card/card.css +0 -32
- package/frontend/src/components/plugins/card/cli-line.ts +0 -13
- package/frontend/src/components/plugins/card/contract.ts +0 -91
- package/frontend/src/components/plugins/card/format.ts +0 -49
- package/frontend/src/components/plugins/card/runner-context.ts +0 -11
- package/frontend/src/components/plugins/card/runner.tsx +0 -43
- package/frontend/src/components/plugins/card/theme.ts +0 -35
- package/frontend/src/components/plugins/card/use-source.ts +0 -22
- package/frontend/src/components/plugins/card/widgets.tsx +0 -94
- package/frontend/src/components/plugins/workspace/WorkspaceHost.tsx +0 -23
- package/frontend/src/pages/PluginsPage.tsx +0 -1719
- package/scaffold/.agent/skills/plugin/evals/cases/04-card-collects-credential.mjs +0 -47
- package/scaffold/.agent/skills/plugin/prompts/06-card.md +0 -46
- package/scaffold/.agent/skills/plugin/references/card.md +0 -90
- package/scaffold/.agent/skills/plugin/subagents/card-designer.md +0 -60
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/DESIGN.md +0 -67
- package/scaffold/.agent/skills/total-recall/plugins/auth/ui/card.js +0 -1179
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/DESIGN.md +0 -32
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/card.js +0 -588
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/card.js +0 -575
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/DESIGN.md +0 -32
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/card.js +0 -482
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/README.md +0 -53
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/plugin.json +0 -129
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/ui/DESIGN.md +0 -100
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/ui/card.js +0 -637
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/DESIGN.md +0 -217
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/DESIGN.md +0 -32
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/card.js +0 -1276
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/DESIGN.md +0 -45
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/card.js +0 -1401
- package/scaffold/.agent/skills/total-recall/plugins/security/scripts/build-ui.mjs +0 -4
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/DESIGN.md +0 -41
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/card.js +0 -396
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/panel.js +0 -98
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/DESIGN.md +0 -15
- package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/card.js +0 -182
- package/src/core/append-log.mjs +0 -131
- package/src/core/plugin-tasks.mjs +0 -173
- package/templates/onboarding-interview.md +0 -82
- /package/scaffold/.agent/skills/total-recall/plugins/{git-sentinel → git}/LICENSE +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: ssss
|
|
4
|
+
id: validate
|
|
5
|
+
title: Document contract
|
|
6
|
+
description: Validates one SSSS Markdown document's frontmatter against the effective registry, optionally with an extension registry, and lists each error and warning.
|
|
7
|
+
timestamp: '2026-11-08T08:12:00Z'
|
|
8
|
+
intents: ["validate ssss document", "check frontmatter against registry", "why is this ssss document invalid", "validate with extension registry"]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
operations: [validate]
|
|
11
|
+
data: ["validate:/ok", "validate:/valid", "validate:/type", "validate:/errors", "validate:/warnings", "validate:/error", "validate:/checkedAt"]
|
|
12
|
+
panel: home
|
|
13
|
+
---
|
|
14
|
+
<section class="ssss-contract" data-design-component="ledger-sheet" aria-labelledby="ssss-validate-title">
|
|
15
|
+
<style>
|
|
16
|
+
.ssss-contract { display:grid; gap:var(--spacing-md, 12px); }
|
|
17
|
+
.ssss-contract h2 { margin:0; font:var(--typography-heading-font-weight, 650) var(--typography-heading-font-size, 18px)/var(--typography-heading-line-height, 1.3) var(--typography-heading-font-family, sans-serif); }
|
|
18
|
+
.ssss-contract p { margin:0; color:var(--color-quiet, #c2b59f); }
|
|
19
|
+
.ssss-contract table { width:100%; border-collapse:collapse; }
|
|
20
|
+
.ssss-contract th, .ssss-contract td { text-align:left; vertical-align:top; padding:var(--spacing-sm, 8px); border-top:1px solid var(--color-line, #564636); }
|
|
21
|
+
.ssss-contract th { font-weight:400; white-space:nowrap; }
|
|
22
|
+
</style>
|
|
23
|
+
<h2 id="ssss-validate-title">Document contract</h2>
|
|
24
|
+
<p>Give a document path inside the current workspace. Only the verdict comes back. The document's contents are never returned.</p>
|
|
25
|
+
<table>
|
|
26
|
+
<tbody>
|
|
27
|
+
<tr><th scope="row"><code data-design-component="field-pointer">valid</code></th><td>Whether the frontmatter satisfies the type it declares.</td></tr>
|
|
28
|
+
<tr><th scope="row"><code data-design-component="field-pointer">type</code></th><td>The SSSS primitive type the document claims.</td></tr>
|
|
29
|
+
<tr><th scope="row"><code data-design-component="field-pointer">errors</code></th><td>Each violation that makes the document invalid.</td></tr>
|
|
30
|
+
<tr><th scope="row"><code data-design-component="field-pointer">warnings</code></th><td>Findings that do not block validity.</td></tr>
|
|
31
|
+
<tr><th scope="row"><code data-design-component="field-pointer">error</code></th><td>Why the check could not run, such as a path outside the workspace.</td></tr>
|
|
32
|
+
</tbody>
|
|
33
|
+
</table>
|
|
34
|
+
</section>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: ssss
|
|
4
|
+
id: validation-diagnostics
|
|
5
|
+
title: Diagnose SSSS frontmatter validation findings
|
|
6
|
+
description: Distinguish a file that the validator could not open from a document whose declared SSSS type failed its required fields.
|
|
7
|
+
timestamp: '2026-11-08T23:21:00Z'
|
|
8
|
+
intents: ["fix a missing SSSS frontmatter field", "diagnose SSSS validation findings", "distinguish invalid document from unavailable file"]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
operations: [validate]
|
|
11
|
+
data: ["validate:/ok", "validate:/valid", "validate:/type", "validate:/errors", "validate:/warnings", "validate:/error"]
|
|
12
|
+
panel: home
|
|
13
|
+
---
|
|
14
|
+
<section data-design-component="ledger-sheet">
|
|
15
|
+
<h2>Separate document errors from file errors</h2>
|
|
16
|
+
<ol><li>Enter the file path inside the selected workspace and run Validate document.</li><li>Confirm the expected primitive type, then read the individual findings.</li><li>Review warnings separately from errors that block the document.</li></ol>
|
|
17
|
+
</section>
|
package/scaffold/.agent/skills/total-recall/plugins/ssss/ui/chunks/workspace-registry-preflight.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: ssss
|
|
4
|
+
id: workspace-registry-preflight
|
|
5
|
+
title: Check the workspace registry before validating documents
|
|
6
|
+
description: Verify the current lock and extension combination before diagnosing a workspace document against that registry.
|
|
7
|
+
timestamp: '2026-11-08T23:21:00Z'
|
|
8
|
+
intents: ["check SSSS registry before validating documents", "diagnose workspace schema version drift", "verify lock and extension registry together"]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
operations: [registry, validate]
|
|
11
|
+
data: ["registry:/valid", "registry:/expected_integrity", "registry:/actual_integrity", "registry:/specVersion", "validate:/type", "validate:/valid"]
|
|
12
|
+
panel: home
|
|
13
|
+
---
|
|
14
|
+
<section data-design-component="ledger-sheet">
|
|
15
|
+
<h2>Check the registry before inspecting a document</h2>
|
|
16
|
+
<p>Verify the lock using the workspace's extension registry. When it matches, validate the document with the same extension. If the lock differs, compare the recorded and computed integrity before changing the schema.</p>
|
|
17
|
+
</section>
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
const ink = 'var(--color-ink, #1b1814)';
|
|
2
|
+
const panel = 'var(--color-panel, #27211a)';
|
|
3
|
+
const line = 'var(--color-line, #564636)';
|
|
4
|
+
const paper = 'var(--color-paper, #f7ebd6)';
|
|
5
|
+
const quiet = 'var(--color-quiet, #c2b59f)';
|
|
6
|
+
const amber = 'var(--color-amber, #b98439)';
|
|
7
|
+
const gold = 'var(--color-gold, #f4c97a)';
|
|
8
|
+
const sans = 'var(--typography-body-font-family, IBM Plex Sans, system-ui, sans-serif)';
|
|
9
|
+
const mono = 'var(--typography-evidence-font-family, IBM Plex Mono, ui-monospace, monospace)';
|
|
10
|
+
|
|
11
|
+
const page = `
|
|
12
|
+
<style>
|
|
13
|
+
:host { display:block; color:${paper}; font:var(--typography-body-font-size, 14px)/var(--typography-body-line-height, 1.45) ${sans}; }
|
|
14
|
+
* { box-sizing:border-box; }
|
|
15
|
+
h2,h3,p,dl,dd,ul { margin:0; }
|
|
16
|
+
.sheet {
|
|
17
|
+
background:var(--component-ledger-sheet-background-color, ${ink});
|
|
18
|
+
border:1px solid var(--component-ledger-sheet-border-color, ${line});
|
|
19
|
+
border-radius:var(--radius-md, 10px); overflow:hidden;
|
|
20
|
+
}
|
|
21
|
+
header { display:flex; flex-wrap:wrap; align-items:center; gap:var(--spacing-md, 12px);
|
|
22
|
+
padding:var(--spacing-md, 12px) var(--spacing-lg, 16px); border-bottom:1px solid ${line}; }
|
|
23
|
+
.mark { width:32px; height:32px; flex:none; color:${gold}; }
|
|
24
|
+
.title { flex:1 1 200px; }
|
|
25
|
+
h2 { font:var(--typography-heading-font-weight, 650) var(--typography-heading-font-size, 18px)/var(--typography-heading-line-height, 1.3) ${sans}; }
|
|
26
|
+
h3 { font-size:15px; margin-bottom:var(--spacing-sm, 8px); }
|
|
27
|
+
.quiet, label, dt { color:${quiet}; }
|
|
28
|
+
.ledger { display:grid; grid-template-columns:repeat(auto-fit, minmax(min(100%, 200px), 1fr)); gap:1px; background:${line}; }
|
|
29
|
+
.slot {
|
|
30
|
+
min-width:0; background:var(--component-ledger-slot-background-color, ${panel});
|
|
31
|
+
border-left:3px solid var(--component-ledger-slot-border-color, ${amber});
|
|
32
|
+
padding:var(--component-ledger-slot-padding, 12px 16px);
|
|
33
|
+
}
|
|
34
|
+
dd { margin-top:var(--spacing-xs, 4px); font-size:16px; font-weight:650; overflow-wrap:anywhere; }
|
|
35
|
+
small, .path { display:block; margin-top:var(--spacing-xs, 4px); color:${quiet}; font-family:${mono}; font-size:12px; overflow-wrap:anywhere; }
|
|
36
|
+
.reading { display:flex; flex-wrap:wrap; justify-content:space-between; gap:var(--spacing-sm, 8px);
|
|
37
|
+
padding:var(--spacing-sm, 8px) var(--spacing-lg, 16px); border-bottom:1px solid ${line}; }
|
|
38
|
+
.groups { display:grid; grid-template-columns:repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
|
|
39
|
+
section.group { min-width:0; padding:var(--spacing-lg, 16px); border-bottom:1px solid ${line}; border-right:1px solid ${line}; }
|
|
40
|
+
form { display:grid; gap:var(--spacing-sm, 8px); }
|
|
41
|
+
label { display:grid; gap:var(--spacing-xs, 4px); }
|
|
42
|
+
.choice { display:flex; align-items:center; gap:6px; min-height:44px; color:${paper}; }
|
|
43
|
+
button, input, select {
|
|
44
|
+
min-height:44px; max-width:100%; padding:6px 10px; font:inherit; color:${paper};
|
|
45
|
+
background:${panel}; border:1px solid ${line}; border-radius:var(--radius-sm, 5px);
|
|
46
|
+
}
|
|
47
|
+
input[type=text] { width:100%; min-width:0; font-family:${mono}; }
|
|
48
|
+
input[type=checkbox] { min-height:auto; width:18px; height:18px; }
|
|
49
|
+
button { cursor:pointer; }
|
|
50
|
+
.primary { border-color:${gold}; color:${gold}; }
|
|
51
|
+
button:disabled, select:disabled { opacity:.55; cursor:wait; }
|
|
52
|
+
:focus-visible { outline:2px solid ${gold}; outline-offset:2px; }
|
|
53
|
+
.outcome { margin-top:var(--spacing-md, 12px); }
|
|
54
|
+
.verdict { font-weight:650; }
|
|
55
|
+
[data-tone=pass] { color:var(--component-verdict-pass-text-color, var(--color-pass, #c2e4ad)); }
|
|
56
|
+
[data-tone=fail] { color:var(--component-verdict-fail-text-color, var(--color-fail, #ffaaa1)); }
|
|
57
|
+
.fields { display:grid; grid-template-columns:max-content 1fr; gap:2px var(--spacing-md, 12px); margin-top:var(--spacing-sm, 8px); }
|
|
58
|
+
.fields dt { font-family:${mono}; color:var(--component-field-pointer-text-color, ${gold}); font-size:12px; }
|
|
59
|
+
.fields dd { margin:0; font-size:13px; font-weight:400; font-family:${mono}; overflow-wrap:anywhere; }
|
|
60
|
+
ul.findings { padding-left:18px; margin-top:var(--spacing-xs, 4px); font-family:${mono}; font-size:12px; }
|
|
61
|
+
pre {
|
|
62
|
+
margin:var(--spacing-sm, 8px) 0 0; max-height:280px; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
|
|
63
|
+
background:var(--component-evidence-readout-background-color, ${panel});
|
|
64
|
+
padding:var(--component-evidence-readout-padding, 12px); border-radius:var(--radius-sm, 5px);
|
|
65
|
+
font:var(--typography-evidence-font-size, 13px)/var(--typography-evidence-line-height, 1.5) ${mono};
|
|
66
|
+
}
|
|
67
|
+
pre:empty { display:none; }
|
|
68
|
+
details { margin-top:var(--spacing-sm, 8px); }
|
|
69
|
+
summary { cursor:pointer; color:${quiet}; min-height:28px; }
|
|
70
|
+
.changed { animation:settle .2s ease-out; }
|
|
71
|
+
@keyframes settle { from { transform:translateY(3px); opacity:.75; } to { transform:none; opacity:1; } }
|
|
72
|
+
@media (prefers-reduced-motion: reduce) { .changed { animation:none; } }
|
|
73
|
+
</style>
|
|
74
|
+
<article class="sheet" aria-label="SSSS installation and contract checks">
|
|
75
|
+
<header>
|
|
76
|
+
<svg class="mark" viewBox="0 0 40 40" aria-hidden="true">
|
|
77
|
+
<path d="M10 8h17l3 3M10 16h14l6-5M10 24h14l6-5M10 32h17l3-5M10 8v24"
|
|
78
|
+
fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/>
|
|
79
|
+
</svg>
|
|
80
|
+
<div class="title"><h2>SSSS</h2><p class="quiet">Engine, portable skill and project scaffold</p></div>
|
|
81
|
+
<label>Brain <select id="scope">
|
|
82
|
+
<option value="auto">Current brain</option><option value="project">Project</option><option value="global">Shared</option>
|
|
83
|
+
</select></label>
|
|
84
|
+
<button type="button" id="inspect" class="primary">Check installation</button>
|
|
85
|
+
<button type="button" id="repair">Repair managed files</button>
|
|
86
|
+
</header>
|
|
87
|
+
<dl class="ledger">
|
|
88
|
+
<div class="slot"><dt>Engine / spec</dt><dd id="engine">—</dd><small id="engine-note"></small></div>
|
|
89
|
+
<div class="slot"><dt>Portable skill</dt><dd id="skill">—</dd><small id="skill-note"></small></div>
|
|
90
|
+
<div class="slot"><dt>Project scaffold</dt><dd id="scaffold">—</dd><small id="scaffold-note"></small></div>
|
|
91
|
+
</dl>
|
|
92
|
+
<div class="reading" aria-live="polite">
|
|
93
|
+
<strong id="install-verdict" class="verdict">Not checked yet</strong>
|
|
94
|
+
<time id="install-time" class="quiet"></time>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="groups">
|
|
97
|
+
<section class="group" aria-labelledby="validate-title">
|
|
98
|
+
<h3 id="validate-title">Document contract</h3>
|
|
99
|
+
<form id="validate">
|
|
100
|
+
<label>Document path <input type="text" name="file" required autocomplete="off"></label>
|
|
101
|
+
<label>Extension registry path <input type="text" name="extension" autocomplete="off"></label>
|
|
102
|
+
<button type="button">Validate document</button>
|
|
103
|
+
</form>
|
|
104
|
+
<div class="outcome" id="validate-outcome" aria-live="polite"></div>
|
|
105
|
+
</section>
|
|
106
|
+
<section class="group" aria-labelledby="registry-title">
|
|
107
|
+
<h3 id="registry-title">Registry lock</h3>
|
|
108
|
+
<form id="registry">
|
|
109
|
+
<label>Lock file path <input type="text" name="lock" required autocomplete="off"></label>
|
|
110
|
+
<label>Extension registry path <input type="text" name="extension" autocomplete="off"></label>
|
|
111
|
+
<button type="button">Verify registry</button>
|
|
112
|
+
</form>
|
|
113
|
+
<div class="outcome" id="registry-outcome" aria-live="polite"></div>
|
|
114
|
+
</section>
|
|
115
|
+
<section class="group" aria-labelledby="scaffold-title">
|
|
116
|
+
<h3 id="scaffold-title">New SSSS project</h3>
|
|
117
|
+
<form id="scaffold-form">
|
|
118
|
+
<label>New directory <input type="text" name="directory" required autocomplete="off"></label>
|
|
119
|
+
<label>Extension name <input type="text" name="extension" autocomplete="off"></label>
|
|
120
|
+
<label class="choice"><input type="checkbox" name="with-total-recall"> Include Total Recall wiring</label>
|
|
121
|
+
<button type="button">Create project</button>
|
|
122
|
+
</form>
|
|
123
|
+
<div class="outcome" id="scaffold-outcome" aria-live="polite"></div>
|
|
124
|
+
</section>
|
|
125
|
+
<section class="group" aria-labelledby="conformance-title">
|
|
126
|
+
<h3 id="conformance-title">Engine conformance</h3>
|
|
127
|
+
<p class="quiet">Runs the canonical reference suite. Allow up to two minutes.</p>
|
|
128
|
+
<form id="conformance"><button type="button">Run engine conformance</button></form>
|
|
129
|
+
<div class="outcome" id="conformance-outcome" aria-live="polite"></div>
|
|
130
|
+
</section>
|
|
131
|
+
</div>
|
|
132
|
+
</article>`;
|
|
133
|
+
|
|
134
|
+
function element(tag, text, attributes = {}) {
|
|
135
|
+
const node = document.createElement(tag);
|
|
136
|
+
if (text !== undefined && text !== null) node.textContent = String(text);
|
|
137
|
+
for (const [name, value] of Object.entries(attributes)) node.setAttribute(name, value);
|
|
138
|
+
return node;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function fields(entries) {
|
|
142
|
+
const list = element('dl', undefined, { class: 'fields' });
|
|
143
|
+
for (const [name, value] of entries) {
|
|
144
|
+
if (value === undefined || value === null || value === '') continue;
|
|
145
|
+
list.append(element('dt', name), element('dd', value));
|
|
146
|
+
}
|
|
147
|
+
return list;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function findings(title, items) {
|
|
151
|
+
if (!Array.isArray(items) || !items.length) return [];
|
|
152
|
+
const list = element('ul', undefined, { class: 'findings' });
|
|
153
|
+
for (const item of items) {
|
|
154
|
+
list.append(element('li', typeof item === 'string' ? item : item?.message || JSON.stringify(item)));
|
|
155
|
+
}
|
|
156
|
+
return [element('p', title + ' (' + items.length + ')', { class: 'quiet' }), list];
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export class SsssHome extends HTMLElement {
|
|
160
|
+
set host(value) {
|
|
161
|
+
this.bridge = value;
|
|
162
|
+
if (this.isConnected && this.shadowRoot) this.inspect();
|
|
163
|
+
}
|
|
164
|
+
get host() { return this.bridge; }
|
|
165
|
+
|
|
166
|
+
connectedCallback() {
|
|
167
|
+
if (!this.shadowRoot) {
|
|
168
|
+
this.attachShadow({ mode: 'open' }).innerHTML = page;
|
|
169
|
+
this.find('inspect').onclick = () => this.inspect();
|
|
170
|
+
this.find('scope').onchange = () => this.inspect();
|
|
171
|
+
this.find('repair').onclick = () => this.inspect('repair');
|
|
172
|
+
this.bindForm('validate', 'validate', result => this.showValidation(result));
|
|
173
|
+
this.bindForm('registry', 'registry', result => this.showRegistry(result));
|
|
174
|
+
this.bindForm('scaffold-form', 'scaffold', result => this.showScaffold(result));
|
|
175
|
+
this.bindForm('conformance', 'conformance', result => this.showConformance(result));
|
|
176
|
+
}
|
|
177
|
+
this.inspect();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
find(id) { return this.shadowRoot.getElementById(id); }
|
|
181
|
+
|
|
182
|
+
bindForm(id, operation, show) {
|
|
183
|
+
const form = this.find(id);
|
|
184
|
+
// The dashboard frame intentionally disables native form submission.
|
|
185
|
+
const run = () => {
|
|
186
|
+
if (!form.reportValidity()) return;
|
|
187
|
+
const args = [];
|
|
188
|
+
for (const [name, value] of new FormData(form)) {
|
|
189
|
+
if (name === 'with-total-recall') args.push('--with-total-recall');
|
|
190
|
+
else if (String(value).trim()) args.push('--' + name, String(value).trim());
|
|
191
|
+
}
|
|
192
|
+
this.perform(operation, args, this.find(operation === 'scaffold' ? 'scaffold-outcome' : id + '-outcome'), show);
|
|
193
|
+
};
|
|
194
|
+
form.querySelector('button').onclick = run;
|
|
195
|
+
form.onkeydown = event => {
|
|
196
|
+
if (event.key !== 'Enter' || event.isComposing || !event.target.matches('input[type="text"]')) return;
|
|
197
|
+
event.preventDefault();
|
|
198
|
+
run();
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Runs one operation through the authenticated bridge and returns its parsed verdict.
|
|
203
|
+
async run(operation, args) {
|
|
204
|
+
if (!this.host?.run) throw new Error('Command bridge unavailable. Open this Home from the Total Recall dashboard.');
|
|
205
|
+
let reply;
|
|
206
|
+
try {
|
|
207
|
+
reply = await this.host.run(operation, [...args, '--json']);
|
|
208
|
+
} catch (error) {
|
|
209
|
+
// A failed check emits one JSON verdict followed by human-readable stderr.
|
|
210
|
+
for (const line of String(error?.message || '').split('\n')) {
|
|
211
|
+
if (!line.startsWith('{')) continue;
|
|
212
|
+
try {
|
|
213
|
+
const verdict = JSON.parse(line);
|
|
214
|
+
if (verdict?.ok === false) return verdict;
|
|
215
|
+
} catch { /* A bridge error may carry no owner verdict. */ }
|
|
216
|
+
}
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
const result = typeof reply === 'string' ? JSON.parse(reply) : reply;
|
|
220
|
+
if (typeof result?.ok !== 'boolean') throw new Error('SSSS returned no verdict.');
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
lock(busy) {
|
|
225
|
+
this.busy = busy;
|
|
226
|
+
for (const control of this.shadowRoot.querySelectorAll('button,select')) control.disabled = busy;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
async perform(operation, args, outcome, show) {
|
|
230
|
+
if (this.busy) return;
|
|
231
|
+
this.lock(true);
|
|
232
|
+
outcome.replaceChildren(element('p', 'Running…', { class: 'quiet' }));
|
|
233
|
+
let nodes;
|
|
234
|
+
try {
|
|
235
|
+
const result = await this.run(operation, args);
|
|
236
|
+
nodes = show(result);
|
|
237
|
+
} catch (error) {
|
|
238
|
+
nodes = [element('p', 'Unavailable', { class: 'verdict', 'data-tone': 'fail' }), element('p', error.message, { class: 'path' })];
|
|
239
|
+
} finally {
|
|
240
|
+
this.lock(false);
|
|
241
|
+
}
|
|
242
|
+
const stamp = new Date().toISOString();
|
|
243
|
+
outcome.replaceChildren(...nodes, element('time', stamp, { class: 'path', datetime: stamp }));
|
|
244
|
+
outcome.classList.remove('changed');
|
|
245
|
+
void outcome.offsetWidth;
|
|
246
|
+
outcome.classList.add('changed');
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
verdict(ok, pass, fail) {
|
|
250
|
+
return element('p', ok ? pass : fail, { class: 'verdict', 'data-tone': ok ? 'pass' : 'fail' });
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
showValidation(result) {
|
|
254
|
+
return [
|
|
255
|
+
this.verdict(result.ok, 'Valid', 'Invalid'),
|
|
256
|
+
fields([['type', result.type], ['error', result.error]]),
|
|
257
|
+
...findings('Errors', result.errors),
|
|
258
|
+
...findings('Warnings', result.warnings),
|
|
259
|
+
];
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
showRegistry(result) {
|
|
263
|
+
return [
|
|
264
|
+
this.verdict(result.ok, 'Lock matches the effective registry', 'Lock does not match'),
|
|
265
|
+
fields([
|
|
266
|
+
['specVersion', result.specVersion],
|
|
267
|
+
['expected_integrity', result.expected_integrity],
|
|
268
|
+
['actual_integrity', result.actual_integrity === null ? 'none in lock' : result.actual_integrity],
|
|
269
|
+
['error', result.error],
|
|
270
|
+
]),
|
|
271
|
+
];
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
showScaffold(result) {
|
|
275
|
+
const nodes = [
|
|
276
|
+
this.verdict(result.ok, 'Project created', 'Project not created'),
|
|
277
|
+
fields([
|
|
278
|
+
['directory', result.directory],
|
|
279
|
+
['version', result.version],
|
|
280
|
+
['files', Array.isArray(result.files) ? result.files.length : undefined],
|
|
281
|
+
['error', result.error],
|
|
282
|
+
]),
|
|
283
|
+
];
|
|
284
|
+
if (Array.isArray(result.files) && result.files.length) {
|
|
285
|
+
const list = element('details');
|
|
286
|
+
list.append(element('summary', 'Generated files'), element('pre', result.files.join('\n')));
|
|
287
|
+
nodes.push(list);
|
|
288
|
+
}
|
|
289
|
+
return nodes;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
showConformance(result) {
|
|
293
|
+
return [
|
|
294
|
+
this.verdict(result.ok, 'Conformance passed', 'Conformance failed'),
|
|
295
|
+
fields([['exitCode', result.exitCode], ['signal', result.signal], ['error', result.error]]),
|
|
296
|
+
element('pre', result.output || '', { tabindex: '0' }),
|
|
297
|
+
];
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
paintLedger(result) {
|
|
301
|
+
this.find('engine').textContent = result?.version ? result.version + ' / ' + result.specVersion : '—';
|
|
302
|
+
this.find('engine-note').textContent = result?.error || '';
|
|
303
|
+
for (const part of ['skill', 'scaffold']) {
|
|
304
|
+
const item = result?.[part];
|
|
305
|
+
const value = this.find(part);
|
|
306
|
+
value.textContent = item ? (item.ok ? item.files + ' files verified' : 'Needs repair') : '—';
|
|
307
|
+
if (item) value.dataset.tone = item.ok ? 'pass' : 'fail';
|
|
308
|
+
else delete value.dataset.tone;
|
|
309
|
+
this.find(part + '-note').textContent = item ? (item.error || item.path || '') : '';
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
async inspect(operation = 'status') {
|
|
314
|
+
if (this.busy || !this.shadowRoot) return;
|
|
315
|
+
const verdict = this.find('install-verdict');
|
|
316
|
+
const time = this.find('install-time');
|
|
317
|
+
this.paintLedger(null);
|
|
318
|
+
this.lock(true);
|
|
319
|
+
verdict.textContent = operation === 'repair' ? 'Repairing…' : 'Checking…';
|
|
320
|
+
delete verdict.dataset.tone;
|
|
321
|
+
try {
|
|
322
|
+
const result = await this.run(operation, ['--scope', this.find('scope').value]);
|
|
323
|
+
this.paintLedger(result);
|
|
324
|
+
verdict.dataset.tone = result.ok ? 'pass' : 'fail';
|
|
325
|
+
verdict.textContent = result.ok
|
|
326
|
+
? (operation === 'repair' ? 'Repaired and verified' : 'Installation complete and current')
|
|
327
|
+
: 'Installation needs attention';
|
|
328
|
+
const notes = [];
|
|
329
|
+
if (result.error) notes.push(result.error);
|
|
330
|
+
if (result.recoveredFrom) notes.push('Previous scaffold kept at ' + result.recoveredFrom);
|
|
331
|
+
if (result.replacedLink) notes.push('Replaced link ' + result.replacedLink.path + ' → ' + result.replacedLink.target);
|
|
332
|
+
if (notes.length) this.find('engine-note').textContent = notes.join('. ');
|
|
333
|
+
} catch (error) {
|
|
334
|
+
verdict.dataset.tone = 'fail';
|
|
335
|
+
verdict.textContent = 'Reading unavailable: ' + error.message;
|
|
336
|
+
} finally {
|
|
337
|
+
this.lock(false);
|
|
338
|
+
}
|
|
339
|
+
const stamp = new Date().toISOString();
|
|
340
|
+
time.textContent = stamp;
|
|
341
|
+
time.dateTime = stamp;
|
|
342
|
+
verdict.classList.remove('changed');
|
|
343
|
+
void verdict.offsetWidth;
|
|
344
|
+
verdict.classList.add('changed');
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
if (!customElements.get('tr-ssss-home')) customElements.define('tr-ssss-home', SsssHome);
|
|
@@ -4,6 +4,8 @@ This is the maintained operations reference for Total Recall 3.39.1 source. Core
|
|
|
4
4
|
|
|
5
5
|
Run `startup check --json`, `status --json`, `daemon status`, and relevant plugin status/help. Check configured backend health, authenticated instructions access, selected project/brain, daemon identity, SSSS tooling and freshness separately. A listening port or process is not health. `startup ensure` starts only configured managed stopped services; preserve running/unknown/foreign services. Scope/auth failures are not transport retries.
|
|
6
6
|
|
|
7
|
+
`startup check` and `brief` also show what needs attention without affecting readiness: a dashboard bundle older than its frontend sources, and each installed plugin's `startup_check` (for example the git plugin's `unmerged`: branches and worktrees whose work is not in the default branch). Act on those lines; land or report every branch and worktree `total-recall git unmerged` lists before ending work. A server running from a source checkout rebuilds a missing or stale dashboard in the background, keeps serving the current bundle until the new one is complete, never installs dependencies, and reports its state in `/health` `dashboard`.
|
|
8
|
+
|
|
7
9
|
Before tests/build/release, read the owning test/code-quality skills and actual repository config. Use the sanctioned remote test node, resolved by Total Recall. Run one background checker at a time; honor live locks and never delete another job's lock. Hash/synchronize the exact tested sources, inspect raw completion and exit status, and clean owned test fixtures/jobs. Run full suites for significant changes. Browser mocks do not certify live provider delivery. Never infer publication from a local version bump, a package build or a wrapper exit.
|
|
8
10
|
|
|
9
11
|
Use the five project files plus source OpenWiki hubs throughout work. Append timestamped actions/failures/verification to the tracker's bottom Action Log. Keep implementation, tests, gates, package, release, deployed source and live evidence distinct. No deferred required work without the user's instruction.
|
|
@@ -16,7 +18,7 @@ Publication/deployment use the owning push/deploy procedures when authorized. Sh
|
|
|
16
18
|
|
|
17
19
|
Use `brain status` to check the current project and physical global storage. Preview `brain relocate-global <dir>` before adding `--apply`. The destination must be a new private directory outside Git on the same filesystem as home. The home skills path links to the relocated tree. Keep repository brains in their own directories.
|
|
18
20
|
|
|
19
|
-
Run normal preflight from home for global orchestration. Pass a repository working directory when routing repository work through
|
|
21
|
+
Run normal preflight from home for global orchestration. Pass a repository working directory when routing repository work through Metaharness. Use `plugin copies` to audit old project copies of shared defaults. `--apply` deletes verified bundled matches. Add `--archive-stale` to retain differing older copies in the replacement archive and use the shared versions.
|
|
20
22
|
|
|
21
23
|
## Optional developer API
|
|
22
24
|
|
package/src/cli/agent.mjs
CHANGED
|
@@ -31,7 +31,7 @@ Options:
|
|
|
31
31
|
--allow-unknown-auth Explicitly permit a harness without a verified login probe
|
|
32
32
|
|
|
33
33
|
Auth:
|
|
34
|
-
The
|
|
34
|
+
The Metaharness owner probes login and resolves only adapter-declared credentials through auth.
|
|
35
35
|
|
|
36
36
|
Available Harnesses:
|
|
37
37
|
agy, claude, codex, dsh, hermes, openclaw
|
package/src/cli/api.mjs
CHANGED
|
@@ -41,7 +41,7 @@ function parse(argv) {
|
|
|
41
41
|
return out;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
async function
|
|
44
|
+
export async function callApi(method, routePath, { query = {}, data } = {}) {
|
|
45
45
|
const { url, token } = brainConnection();
|
|
46
46
|
const qs = new URLSearchParams(query).toString();
|
|
47
47
|
const res = await fetch(`${url.replace(/\/$/, '')}${routePath}${qs ? `?${qs}` : ''}`, {
|
|
@@ -97,7 +97,7 @@ export default async function apiCli(argv = []) {
|
|
|
97
97
|
console.error('Usage: total-recall api call <METHOD> </api/path> [--data json] [--query k=v]');
|
|
98
98
|
process.exit(1);
|
|
99
99
|
}
|
|
100
|
-
return finish(await
|
|
100
|
+
return finish(await callApi(method, routePath, opts), opts);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
const group = first;
|
|
@@ -121,7 +121,7 @@ export default async function apiCli(argv = []) {
|
|
|
121
121
|
route.params.forEach((name, i) => {
|
|
122
122
|
p = p.replace(`:${name}`, encodeURIComponent(rest[i]));
|
|
123
123
|
});
|
|
124
|
-
return finish(await
|
|
124
|
+
return finish(await callApi(route.method, p, opts), opts);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
function finish(r, opts) {
|
package/src/cli/brief.mjs
CHANGED
|
@@ -177,6 +177,9 @@ const { queryHarnessUsage } = await import('../core/meta-harness.mjs');
|
|
|
177
177
|
const harnesses = await queryHarnessUsage().catch(() => []);
|
|
178
178
|
const warnings = [];
|
|
179
179
|
if (!runtime.ready) warnings.push('Shared runtime readiness failed or unknown: total-recall startup check --json.');
|
|
180
|
+
// Unfinished merges, a stale dashboard and other plugin startup checks.
|
|
181
|
+
const { startupFindings } = await import('./startup.mjs');
|
|
182
|
+
for (const line of startupFindings(runtime)) warnings.push(line);
|
|
180
183
|
if (!project?.project_id) warnings.push('No project brain here (total-recall init) — memory, secrets and rules are global-only.');
|
|
181
184
|
if (secrets.rotation_due && secrets.rotation_due !== 0) warnings.push(`Secrets overdue for rotation: ${secrets.rotation_due} (total-recall auth secret rotation-due).`);
|
|
182
185
|
if (secrets.shared_values && secrets.shared_values !== 0) warnings.push(`Credential values reused across keys/apps: ${secrets.shared_values} group(s) (total-recall auth secret shared).`);
|
package/src/cli/command.mjs
CHANGED
|
@@ -247,21 +247,59 @@ function existingTag(file, key) {
|
|
|
247
247
|
try { return fs.readFileSync(file, 'utf8').match(new RegExp(`^// @${key} (.+)$`, 'm'))?.[1] || undefined; } catch { return undefined; }
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
+
/** Where the background recompile records its outcome: <agentDir>/state and <agentDir>/logs. */
|
|
251
|
+
export function compileRecordPaths(isGlobal) {
|
|
252
|
+
const agentDir = path.dirname(resolveTargetDir(isGlobal));
|
|
253
|
+
return {
|
|
254
|
+
status: path.join(agentDir, 'state', 'command-compile.json'),
|
|
255
|
+
log: path.join(agentDir, 'logs', 'command-compile.log'),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Runs in the detached child: compile, then record the exit code and output.
|
|
260
|
+
const COMPILE_RECORDER = `
|
|
261
|
+
const { spawnSync } = require('node:child_process');
|
|
262
|
+
const fs = require('node:fs');
|
|
263
|
+
const [cli, layer, statusFile, logFile] = process.argv.slice(1);
|
|
264
|
+
const startedAt = new Date().toISOString();
|
|
265
|
+
const r = spawnSync(process.execPath, [cli, 'compile', layer], { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
|
|
266
|
+
const code = r.status === null ? 1 : r.status;
|
|
267
|
+
fs.writeFileSync(logFile, (r.stdout || '') + (r.stderr || '') + (r.error ? String(r.error) + '\\n' : ''));
|
|
268
|
+
const record = { ok: code === 0, code, signal: r.signal || null, layer, startedAt, finishedAt: new Date().toISOString(), log: logFile };
|
|
269
|
+
fs.writeFileSync(statusFile + '.tmp', JSON.stringify(record, null, 2));
|
|
270
|
+
fs.renameSync(statusFile + '.tmp', statusFile);
|
|
271
|
+
`;
|
|
272
|
+
|
|
250
273
|
/**
|
|
251
274
|
* Composable instructions: the surfaces list every command, so any change to
|
|
252
275
|
* the command set recompiles them (project layer, or every project for global).
|
|
276
|
+
* A global compile takes minutes, so it runs in the background; its exit code and
|
|
277
|
+
* output are recorded, and the next `command` call reports a failure.
|
|
253
278
|
*/
|
|
254
279
|
export function recompileSurfaces(isGlobal) {
|
|
255
280
|
if (process.env.TR_COMMAND_NO_COMPILE === '1' || !process.argv[1]) return;
|
|
256
281
|
try {
|
|
257
|
-
const
|
|
282
|
+
const { status, log } = compileRecordPaths(isGlobal);
|
|
283
|
+
fs.mkdirSync(path.dirname(status), { recursive: true });
|
|
284
|
+
fs.mkdirSync(path.dirname(log), { recursive: true });
|
|
285
|
+
const child = spawn(process.execPath, ['-e', COMPILE_RECORDER, process.argv[1], isGlobal ? '--global' : '--project', status, log], { detached: true, stdio: 'ignore' });
|
|
258
286
|
child.unref();
|
|
259
|
-
console.log(
|
|
287
|
+
console.log(` ⏳ Instruction surfaces recompiling in the background (command list updated). Outcome: ${status}`);
|
|
260
288
|
} catch (error) {
|
|
261
289
|
console.warn(` ⚠️ Command saved, but surface recompile failed to start: ${error.message}`);
|
|
290
|
+
process.exitCode = 1;
|
|
262
291
|
}
|
|
263
292
|
}
|
|
264
293
|
|
|
294
|
+
/** Report a failed background recompile; returns the record when it failed. */
|
|
295
|
+
export function reportFailedCompile(isGlobal, out = console.warn) {
|
|
296
|
+
let record;
|
|
297
|
+
try { record = JSON.parse(fs.readFileSync(compileRecordPaths(isGlobal).status, 'utf8')); } catch { return null; }
|
|
298
|
+
if (record.ok) return null;
|
|
299
|
+
out(` ❌ The last instruction-surface recompile (${record.layer}, ${record.finishedAt}) failed with exit ${record.code}. Surfaces may not list current commands. Log: ${record.log}. Run 'total-recall compile ${record.layer}' to retry.`);
|
|
300
|
+
return record;
|
|
301
|
+
}
|
|
302
|
+
|
|
265
303
|
/**
|
|
266
304
|
* Register every `commands` entry of an installed plugin as a composable command.
|
|
267
305
|
* A command that already exists and was generated from this plugin is refreshed;
|
|
@@ -319,6 +357,7 @@ export default async function commandCmd(rawArgs = []) {
|
|
|
319
357
|
|
|
320
358
|
const action = cleanArgs[0];
|
|
321
359
|
const name = cleanArgs[1];
|
|
360
|
+
if (process.env.TR_COMMAND_NO_COMPILE !== '1') reportFailedCompile(isGlobal);
|
|
322
361
|
|
|
323
362
|
if (!action || action === '--help' || action === '-h') {
|
|
324
363
|
printHelp();
|
package/src/cli/config.mjs
CHANGED
|
@@ -152,6 +152,8 @@ export default async function configCommand(args) {
|
|
|
152
152
|
Commands:
|
|
153
153
|
get [key] Retrieve the value of a configuration key. If key is omitted, lists all keys.
|
|
154
154
|
set <key> <v> Set the value of a configuration key. Converts inputs to correct type.
|
|
155
|
+
drawer <right|bottom> Read a workspace drawer as JSON
|
|
156
|
+
drawer <right|bottom> --file <json> Save a workspace drawer configuration
|
|
155
157
|
|
|
156
158
|
Options:
|
|
157
159
|
--global Explicitly target the global brain configuration (~/.agent/)
|
|
@@ -177,6 +179,20 @@ export default async function configCommand(args) {
|
|
|
177
179
|
return;
|
|
178
180
|
}
|
|
179
181
|
|
|
182
|
+
if (command === 'drawer') {
|
|
183
|
+
const { readDrawerConfig, writeDrawerConfig } = await import('../core/workspace-drawers.mjs');
|
|
184
|
+
const [, edge, fileFlag, file] = remainingArgs;
|
|
185
|
+
if (!edge || (remainingArgs.length !== 2 && (remainingArgs.length !== 4 || fileFlag !== '--file' || !file))) {
|
|
186
|
+
throw new Error('Usage: total-recall config drawer <right|bottom> [--file <json>] [--global|--project]');
|
|
187
|
+
}
|
|
188
|
+
const brain = layer === 'auto' && process.env.TR_BRAIN ? path.resolve(process.env.TR_BRAIN) : resolveBrainDir(layer);
|
|
189
|
+
const current = readDrawerConfig(brain, edge);
|
|
190
|
+
if (file && fs.statSync(file).size > 512 * 1024) throw new Error('Drawer file exceeds 512 KiB.');
|
|
191
|
+
const result = file ? await writeDrawerConfig(brain, edge, JSON.parse(fs.readFileSync(file, 'utf8')), current.version) : current;
|
|
192
|
+
console.log(JSON.stringify(result, null, 2));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
180
196
|
const brainDir = resolveBrainDir(layer);
|
|
181
197
|
const configDir = path.join(brainDir, 'config');
|
|
182
198
|
const securityPath = path.join(configDir, 'security.yml');
|
package/src/cli/connect.mjs
CHANGED
|
@@ -5,6 +5,7 @@ import { agentDir as configAgentDir, brainDir as configBrainDir, xdgConfigHome,
|
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
import { resolveAgentDir, getBothBrains, detectProjectBrain } from './agent-dir.mjs';
|
|
7
7
|
import { discoverRepoSkills, projectSkillsAsCommands } from './skill-projection.mjs';
|
|
8
|
+
import { writeBrainConnection } from '../core/memory-brain.mjs';
|
|
8
9
|
|
|
9
10
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
11
|
// Resolve templates dir relative to this file (src/cli/ → ../../templates/)
|
|
@@ -379,13 +380,7 @@ function readInstructions(cwd, agentDir) {
|
|
|
379
380
|
|
|
380
381
|
function ensureBrainConfig(brainDir, opts) {
|
|
381
382
|
if (!opts.brain) return null;
|
|
382
|
-
|
|
383
|
-
fs.mkdirSync(configDir, { recursive: true });
|
|
384
|
-
const config = { url: opts.brain };
|
|
385
|
-
if (opts.token) config.token = opts.token;
|
|
386
|
-
const filePath = path.join(configDir, 'brain.json');
|
|
387
|
-
fs.writeFileSync(filePath, JSON.stringify(config, null, 2));
|
|
388
|
-
return filePath;
|
|
383
|
+
return writeBrainConnection(brainDir, { url: opts.brain, token: opts.token || undefined });
|
|
389
384
|
}
|
|
390
385
|
|
|
391
386
|
function registerClient(brainDir, clientName, preset, projectionPath) {
|