total-recall-brain 3.45.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 +4 -2
- 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 +183 -236
- 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 +6 -6
- 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/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/{ui/DESIGN.md → DESIGN.md} +32 -21
- package/scaffold/.agent/skills/total-recall/plugins/automations/adapters.mjs +17 -1
- package/scaffold/.agent/skills/total-recall/plugins/automations/cli.mjs +10 -1
- package/scaffold/.agent/skills/total-recall/plugins/automations/package-lock.json +6 -6
- package/scaffold/.agent/skills/total-recall/plugins/automations/package.json +4 -3
- package/scaffold/.agent/skills/total-recall/plugins/automations/plugin.json +11 -27
- package/scaffold/.agent/skills/total-recall/plugins/automations/ui/automations.js +2 -2
- 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/{card.js → home.js} +32 -27
- 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 +4 -2
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/core/check.mjs +4 -2
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +6 -6
- 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 +6 -6
- 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 +6 -6
- 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 +25 -1
- package/scaffold/.agent/skills/total-recall/plugins/git/cli.mjs +5 -1
- package/scaffold/.agent/skills/total-recall/plugins/git/package-lock.json +6 -6
- package/scaffold/.agent/skills/total-recall/plugins/git/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/git/plugin.json +17 -27
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/commit-memory.mjs +30 -6
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/fleet.mjs +24 -6
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/secret-firewall.mjs +33 -7
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/undo.mjs +29 -5
- package/scaffold/.agent/skills/total-recall/plugins/git/src/ops/unmerged.mjs +182 -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 +6 -6
- 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 +19 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/cli.mjs +5 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package-lock.json +6 -6
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package.json +2 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/plugin.json +43 -22
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/chat.mjs +80 -0
- 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 +17 -14
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +6 -6
- 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.mjs +6 -3
- 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 +6 -6
- 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 +2 -0
- package/src/cli/api.mjs +3 -3
- package/src/cli/brief.mjs +3 -0
- package/src/cli/config.mjs +16 -0
- package/src/cli/connect.mjs +2 -7
- package/src/cli/plugin/chunks.mjs +145 -0
- package/src/cli/plugin/create.mjs +24 -52
- package/src/cli/plugin/index.mjs +20 -9
- package/src/cli/setup.mjs +2 -9
- package/src/cli/start.mjs +1 -0
- package/src/cli/startup.mjs +18 -0
- package/src/core/app-deploy/design-tokens.mjs +14 -9
- package/src/core/app-deploy/ui-elements.mjs +1 -1
- package/src/core/brain-registry.mjs +5 -0
- package/src/core/brain-updates.mjs +5 -1
- package/src/core/daemon-control.mjs +5 -1
- package/src/core/dashboard-bundle.mjs +261 -0
- package/src/core/ensure-dependencies.mjs +19 -15
- package/src/core/memory-brain.mjs +30 -8
- package/src/core/plugin-activation.mjs +63 -20
- package/src/core/plugin-contracts/{card.mjs → manifest.mjs} +23 -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 +9 -5
- package/src/core/plugin-runner.mjs +21 -10
- package/src/core/plugin-startup-checks.mjs +44 -0
- package/src/core/plugin-state.mjs +19 -5
- package/src/core/plugin-store.mjs +30 -11
- package/src/core/project-id.mjs +15 -5
- package/src/core/required-plugins.mjs +31 -6
- package/src/core/schema.mjs +2 -0
- package/src/core/ssss-operation-service.mjs +1 -0
- package/src/core/startup-health.mjs +28 -3
- 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/vault-cache.mjs +58 -59
- 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/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 +52 -4
- package/src/server/routes/_shared.mjs +7 -14
- package/src/server/routes/brains.mjs +29 -44
- package/src/server/routes/dashboard.mjs +26 -0
- package/src/server/routes/plugins.mjs +154 -45
- package/src/server/routes/ui-chunks.mjs +192 -0
- package/frontend/dist/assets/index-DACh1dhx.js +0 -5613
- 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/ui/DESIGN.md +0 -100
- package/scaffold/.agent/skills/total-recall/plugins/git/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
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: automations
|
|
4
|
+
id: control-ledger
|
|
5
|
+
title: Automation control ledger
|
|
6
|
+
description: Browse observed automation records, filter by trigger and state, and distinguish declarations from an actual run.
|
|
7
|
+
timestamp: "2026-11-08T10:14:00Z"
|
|
8
|
+
intents: [automation inventory, scheduled work control ledger, filter automation trigger state and source]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
panel: automations
|
|
11
|
+
operations: [list]
|
|
12
|
+
data:
|
|
13
|
+
- list:/schema_version
|
|
14
|
+
- list:/checked_at
|
|
15
|
+
- list:/complete
|
|
16
|
+
- list:/nodes/0/automations/0/id
|
|
17
|
+
- list:/nodes/0/automations/0/node_id
|
|
18
|
+
- list:/nodes/0/automations/0/source
|
|
19
|
+
- list:/nodes/0/automations/0/name
|
|
20
|
+
- list:/nodes/0/automations/0/intent
|
|
21
|
+
- list:/nodes/0/automations/0/origin
|
|
22
|
+
- list:/nodes/0/automations/0/trigger/kind
|
|
23
|
+
- list:/nodes/0/automations/0/trigger/summary
|
|
24
|
+
- list:/nodes/0/automations/0/trigger/timezone
|
|
25
|
+
- list:/nodes/0/automations/0/enabled
|
|
26
|
+
- list:/nodes/0/automations/0/state
|
|
27
|
+
- list:/nodes/0/automations/0/runner_available
|
|
28
|
+
- list:/nodes/0/automations/0/placement
|
|
29
|
+
- list:/nodes/0/automations/0/plugin_id
|
|
30
|
+
- list:/nodes/0/automations/0/plugin_name
|
|
31
|
+
- list:/nodes/0/automations/0/schedule
|
|
32
|
+
- list:/nodes/0/automations/0/valid
|
|
33
|
+
- list:/nodes/0/automations/0/last_handled_slot
|
|
34
|
+
- list:/nodes/0/automations/0/last_run/at
|
|
35
|
+
- list:/nodes/0/automations/0/last_run/state
|
|
36
|
+
- list:/nodes/0/automations/0/last_run/exit_code
|
|
37
|
+
---
|
|
38
|
+
<section data-design-component="ledger-note" aria-label="Automation control ledger">
|
|
39
|
+
<p data-design-component="ledger-label">Triggers · sources · outcomes</p>
|
|
40
|
+
<h2>Automation control ledger</h2>
|
|
41
|
+
<p>Filter the inventory by node, source, trigger or observed state. Start with this node and scan the mesh when you need remote coverage.</p>
|
|
42
|
+
</section>
|
package/scaffold/.agent/skills/total-recall/plugins/automations/ui/chunks/local-inventory-triage.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: automations
|
|
4
|
+
id: local-inventory-triage
|
|
5
|
+
title: Triage missing automations in local inventory
|
|
6
|
+
description: Inspect this machine's source coverage before treating an absent record as a missing automation.
|
|
7
|
+
timestamp: "2026-11-08T23:12:00Z"
|
|
8
|
+
intents: [why is an automation missing locally, check local automation inventory completeness, narrow fleet automation inventory to this host]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
panel: automations
|
|
11
|
+
operations: [list, status]
|
|
12
|
+
data: ["list:/complete", "list:/nodes/0/self", "list:/nodes/0/coverage/0/source", "list:/nodes/0/coverage/0/status"]
|
|
13
|
+
---
|
|
14
|
+
<section data-design-component="ledger-note">
|
|
15
|
+
<h2>Start with local source coverage</h2>
|
|
16
|
+
<p>Switch the ledger to this machine. Check whether the automation's source was read before looking elsewhere or deciding that its record is absent.</p>
|
|
17
|
+
</section>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: automations
|
|
4
|
+
id: pending-control
|
|
5
|
+
title: Confirm pending task cancellation
|
|
6
|
+
description: Review the local source-owned control, confirm the pending task target, and verify its final cancellation receipt.
|
|
7
|
+
timestamp: "2026-11-08T10:14:00Z"
|
|
8
|
+
intents: [cancel pending local durable automation, source owned task cancellation receipt, pending task safety controls]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
operations: [list, show, cancel]
|
|
11
|
+
data:
|
|
12
|
+
- list:/nodes/0/coverage/0/source
|
|
13
|
+
- list:/nodes/0/coverage/0/status
|
|
14
|
+
- list:/nodes/0/coverage/0/checked_at
|
|
15
|
+
- list:/nodes/0/coverage/0/error
|
|
16
|
+
- list:/nodes/0/automations/0/last_exit_code
|
|
17
|
+
- list:/nodes/0/automations/0/command
|
|
18
|
+
- list:/nodes/0/automations/0/actions/0/command
|
|
19
|
+
- list:/nodes/0/automations/0/actions/0/label
|
|
20
|
+
- list:/nodes/0/automations/0/actions/0/args/0
|
|
21
|
+
- list:/nodes/0/automations/0/actions/0/effect
|
|
22
|
+
- list:/nodes/0/automations/0/owner_ref/layer
|
|
23
|
+
- list:/nodes/0/automations/0/owner_ref/slug
|
|
24
|
+
- show:/automation/actions/0/command
|
|
25
|
+
- show:/automation/actions/0/label
|
|
26
|
+
- show:/automation/actions/0/args/0
|
|
27
|
+
- show:/automation/actions/0/effect
|
|
28
|
+
- show:/automation/owner_ref/layer
|
|
29
|
+
- show:/automation/owner_ref/slug
|
|
30
|
+
- show:/automation/last_exit_code
|
|
31
|
+
- cancel:/success
|
|
32
|
+
- cancel:/id
|
|
33
|
+
- cancel:/state
|
|
34
|
+
---
|
|
35
|
+
<section data-design-component="ledger-note" aria-label="Confirm pending task cancellation">
|
|
36
|
+
<p data-design-component="ledger-label">Local controls</p>
|
|
37
|
+
<h2>Confirm pending task cancellation</h2>
|
|
38
|
+
<p>Choose a pending record with an advertised cancellation action. Review its source and stable ID before confirming. The owner must report the final cancelled state.</p>
|
|
39
|
+
</section>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: automations
|
|
4
|
+
id: run-evidence
|
|
5
|
+
title: Automation run evidence
|
|
6
|
+
description: Inspect the source-owned automation record, schedule, last handled slot and actual outcome by stable ID.
|
|
7
|
+
timestamp: "2026-11-08T10:14:00Z"
|
|
8
|
+
intents: [inspect automation run outcome, audit handled slot and exit code, show automation by stable ID]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
operations: [show]
|
|
11
|
+
data:
|
|
12
|
+
- show:/schema_version
|
|
13
|
+
- show:/checked_at
|
|
14
|
+
- show:/automation/id
|
|
15
|
+
- show:/automation/node_id
|
|
16
|
+
- show:/automation/source
|
|
17
|
+
- show:/automation/name
|
|
18
|
+
- show:/automation/intent
|
|
19
|
+
- show:/automation/command
|
|
20
|
+
- show:/automation/origin
|
|
21
|
+
- show:/automation/trigger/kind
|
|
22
|
+
- show:/automation/trigger/summary
|
|
23
|
+
- show:/automation/trigger/timezone
|
|
24
|
+
- show:/automation/enabled
|
|
25
|
+
- show:/automation/state
|
|
26
|
+
- show:/automation/runner_available
|
|
27
|
+
- show:/automation/last_run/at
|
|
28
|
+
- show:/automation/last_run/state
|
|
29
|
+
- show:/automation/last_run/exit_code
|
|
30
|
+
- show:/automation/placement
|
|
31
|
+
- show:/automation/plugin_id
|
|
32
|
+
- show:/automation/plugin_name
|
|
33
|
+
- show:/automation/schedule
|
|
34
|
+
- show:/automation/valid
|
|
35
|
+
- show:/automation/last_handled_slot
|
|
36
|
+
---
|
|
37
|
+
<section data-design-component="ledger-note" aria-label="Automation run evidence">
|
|
38
|
+
<p data-design-component="ledger-label">Observed runs</p>
|
|
39
|
+
<h2>Automation run evidence</h2>
|
|
40
|
+
<p>Read the record by stable ID. A handled slot records scheduler activity. The run timestamp, state and exit code describe execution when the owner reports them.</p>
|
|
41
|
+
</section>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: automations
|
|
4
|
+
id: schedule-vs-run-evidence
|
|
5
|
+
title: Verify that a scheduled automation actually ran
|
|
6
|
+
description: Compare the declared schedule and last handled slot with the observed run time and exit state for an automation.
|
|
7
|
+
timestamp: "2026-11-08T23:12:00Z"
|
|
8
|
+
intents: [verify scheduled automation actually ran, investigate missed schedule slot, compare schedule with observed automation outcome]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
panel: automations
|
|
11
|
+
operations: [list, show]
|
|
12
|
+
data: ["show:/automation/schedule", "show:/automation/last_handled_slot", "show:/automation/last_run/at", "show:/automation/last_run/state", "show:/automation/last_run/exit_code"]
|
|
13
|
+
---
|
|
14
|
+
<section data-design-component="ledger-note">
|
|
15
|
+
<h2>Find observed run evidence</h2>
|
|
16
|
+
<p>Open the automation in the ledger. Compare the schedule and last handled slot with the observed run time and exit state. A schedule identifies when work should run.</p>
|
|
17
|
+
</section>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ui-chunk:chunk
|
|
3
|
+
plugin: automations
|
|
4
|
+
id: source-coverage
|
|
5
|
+
title: Mesh automation source coverage
|
|
6
|
+
description: Inspect node reachability, per-source coverage and observed state counts before relying on an inventory.
|
|
7
|
+
timestamp: "2026-11-08T10:14:00Z"
|
|
8
|
+
intents: [automation node coverage, offline or unauthorized automation source, observed automation state counts]
|
|
9
|
+
surfaces: [page]
|
|
10
|
+
operations: [list, status]
|
|
11
|
+
data:
|
|
12
|
+
- status:/schema_version
|
|
13
|
+
- status:/checked_at
|
|
14
|
+
- status:/complete
|
|
15
|
+
- status:/nodes/0/node_id
|
|
16
|
+
- status:/nodes/0/hostname
|
|
17
|
+
- status:/nodes/0/ip
|
|
18
|
+
- status:/nodes/0/self
|
|
19
|
+
- status:/nodes/0/online
|
|
20
|
+
- status:/nodes/0/checked_at
|
|
21
|
+
- status:/nodes/0/status
|
|
22
|
+
- status:/nodes/0/error
|
|
23
|
+
- status:/nodes/0/counts
|
|
24
|
+
- status:/nodes/0/coverage/0/source
|
|
25
|
+
- status:/nodes/0/coverage/0/status
|
|
26
|
+
- status:/nodes/0/coverage/0/checked_at
|
|
27
|
+
- status:/nodes/0/coverage/0/error
|
|
28
|
+
- list:/nodes/0/node_id
|
|
29
|
+
- list:/nodes/0/hostname
|
|
30
|
+
- list:/nodes/0/ip
|
|
31
|
+
- list:/nodes/0/self
|
|
32
|
+
- list:/nodes/0/online
|
|
33
|
+
- list:/nodes/0/checked_at
|
|
34
|
+
- list:/nodes/0/status
|
|
35
|
+
- list:/nodes/0/error
|
|
36
|
+
---
|
|
37
|
+
<section data-design-component="ledger-note" aria-label="Mesh automation source coverage">
|
|
38
|
+
<p data-design-component="ledger-label">Coverage</p>
|
|
39
|
+
<h2>Mesh automation source coverage</h2>
|
|
40
|
+
<p>Review the node check time and each source outcome. A count is meaningful only beside its coverage, including unsupported sources and offline nodes.</p>
|
|
41
|
+
</section>
|
|
@@ -23,7 +23,7 @@ export function decodeInventory(result) {
|
|
|
23
23
|
return data;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export class
|
|
26
|
+
export class AutomationsElement extends HTMLElement {
|
|
27
27
|
constructor() {
|
|
28
28
|
super();
|
|
29
29
|
this.attachShadow({ mode: 'open' });
|
|
@@ -37,6 +37,8 @@ export class AutomationsCard extends HTMLElement {
|
|
|
37
37
|
this.request = 0;
|
|
38
38
|
this.attemptedAt = null;
|
|
39
39
|
this.pendingControl = null;
|
|
40
|
+
this.localOnly = true;
|
|
41
|
+
this.showInventoryJson = false;
|
|
40
42
|
this.boundClick = (event) => this.click(event);
|
|
41
43
|
this.boundChange = (event) => this.change(event);
|
|
42
44
|
this.boundKey = (event) => this.key(event);
|
|
@@ -58,7 +60,7 @@ export class AutomationsCard extends HTMLElement {
|
|
|
58
60
|
this.shadowRoot.addEventListener('keydown', this.boundKey);
|
|
59
61
|
window.addEventListener('plugin-show-screen', this.boundScreen);
|
|
60
62
|
this.render();
|
|
61
|
-
void this.refresh();
|
|
63
|
+
if (this.host?.run) void this.refresh();
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
disconnectedCallback() {
|
|
@@ -71,14 +73,8 @@ export class AutomationsCard extends HTMLElement {
|
|
|
71
73
|
}
|
|
72
74
|
|
|
73
75
|
async invoke(command, args = []) {
|
|
74
|
-
if (this.host?.run)
|
|
75
|
-
|
|
76
|
-
method: 'POST', credentials: 'same-origin', signal: this.controller?.signal,
|
|
77
|
-
headers: { 'Content-Type': 'application/json' },
|
|
78
|
-
body: JSON.stringify({ subcommand: command, args }),
|
|
79
|
-
});
|
|
80
|
-
if (!response.ok) throw new Error(`Automation request failed (${response.status})`);
|
|
81
|
-
return response.json();
|
|
76
|
+
if (!this.host?.run) throw new Error('Authenticated automation bridge unavailable');
|
|
77
|
+
return this.host.run(command, args);
|
|
82
78
|
}
|
|
83
79
|
|
|
84
80
|
async refresh() {
|
|
@@ -86,10 +82,11 @@ export class AutomationsCard extends HTMLElement {
|
|
|
86
82
|
this.controller?.abort();
|
|
87
83
|
this.controller = new AbortController();
|
|
88
84
|
this.phase = 'loading'; this.inventory = null; this.error = ''; this.feedback = ''; this.pendingControl = null;
|
|
85
|
+
this.showInventoryJson = false;
|
|
89
86
|
this.attemptedAt = new Date().toISOString();
|
|
90
87
|
this.render();
|
|
91
88
|
try {
|
|
92
|
-
const data = decodeInventory(await this.invoke('list'));
|
|
89
|
+
const data = decodeInventory(await this.invoke('list', this.localOnly ? ['--local'] : []));
|
|
93
90
|
if (request !== this.request || !this.isConnected) return;
|
|
94
91
|
this.inventory = data; this.phase = 'ready';
|
|
95
92
|
} catch (error) {
|
|
@@ -148,20 +145,24 @@ export class AutomationsCard extends HTMLElement {
|
|
|
148
145
|
const selected = [...this.shadowRoot.querySelectorAll('[data-record]')].find((item) => item.dataset.record === this.selected);
|
|
149
146
|
selected?.focus();
|
|
150
147
|
} else if (button.dataset.action === 'refresh') void this.refresh();
|
|
151
|
-
else if (button.dataset.action === '
|
|
148
|
+
else if (button.dataset.action === 'scope') { this.localOnly = !this.localOnly; void this.refresh(); }
|
|
149
|
+
else if (button.dataset.action === 'inventory-json') this.toggleInventoryJson();
|
|
152
150
|
else if (button.dataset.action === 'confirm-control') void this.executeControl(this.pendingControl?.index, true);
|
|
153
151
|
else if (button.dataset.action === 'dismiss-control') { this.pendingControl = null; this.render(); }
|
|
154
152
|
else if (button.dataset.control) void this.executeControl(Number(button.dataset.control));
|
|
155
153
|
}
|
|
156
154
|
|
|
157
|
-
|
|
155
|
+
toggleInventoryJson() {
|
|
158
156
|
if (!this.inventory) return;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
157
|
+
this.showInventoryJson = !this.showInventoryJson;
|
|
158
|
+
this.render();
|
|
159
|
+
if (this.showInventoryJson) {
|
|
160
|
+
const field = this.shadowRoot.querySelector('#inventory-json-value');
|
|
161
|
+
field.focus();
|
|
162
|
+
field.select();
|
|
163
|
+
} else {
|
|
164
|
+
this.shadowRoot.querySelector('[data-action="inventory-json"]').focus();
|
|
165
|
+
}
|
|
165
166
|
}
|
|
166
167
|
|
|
167
168
|
async executeControl(index, confirmed = false) {
|
|
@@ -251,23 +252,27 @@ export class AutomationsCard extends HTMLElement {
|
|
|
251
252
|
: this.phase === 'ready' ? (this.inventory.complete === true ? 'Discovery complete' : 'Partial discovery — inspect source coverage') : 'Not checked';
|
|
252
253
|
const content = this.phase !== 'ready' ? `<div class="empty"><h3>${escape(status)}</h3><p>${escape(this.phase === 'error' ? this.error : this.phase === 'loading' ? 'Reading automation sources and node availability…' : 'Refresh to inspect automation sources.')}</p></div>`
|
|
253
254
|
: this.screen === 'nodes' ? this.renderNodes() : this.screen === 'audit' ? this.renderAudit() : this.screen === 'run' ? this.renderRun() : this.renderScheduled();
|
|
255
|
+
const inventoryJson = this.showInventoryJson ? `
|
|
256
|
+
<label for="inventory-json-value">Inventory JSON</label>
|
|
257
|
+
<p id="inventory-json-help" class="note">Copy the selection with your browser’s Copy command or Ctrl+C / ⌘C.</p>
|
|
258
|
+
<textarea id="inventory-json-value" aria-describedby="inventory-json-help" rows="8" readonly>${escape(JSON.stringify(this.inventory, null, 2))}</textarea>` : '';
|
|
254
259
|
this.shadowRoot.innerHTML = `
|
|
255
260
|
<style>
|
|
256
|
-
|
|
261
|
+
.inventory-json { padding:0 16px 16px; }
|
|
262
|
+
.inventory-json .note { margin:4px 0 8px; }
|
|
263
|
+
.inventory-json textarea { width:100%; resize:vertical; padding:8px; border:1px solid var(--automation-border); border-radius:5px; background:var(--automation-surface); color:var(--automation-text); font:12px/1.5 ui-monospace,monospace; }
|
|
264
|
+
.inventory-json textarea:focus-visible { outline:3px solid var(--automation-focus); outline-offset:3px; }
|
|
265
|
+
:host { --automation-bg:var(--color-background,#181713); --automation-surface:var(--color-surface,#24221c); --automation-text:var(--color-text,#f4efe5); --automation-muted:var(--color-muted,#c5bca9); --automation-border:var(--color-border,#726652); --automation-accent:var(--color-primary,#f2bd63); --automation-error:var(--color-error,#ffb5a9); --automation-focus:var(--color-focus,#b8d9ff); display:block; color:var(--automation-text); font:var(--typography-body-font-size,14px)/1.45 var(--typography-body-font-family,system-ui,sans-serif); min-width:0; color-scheme:dark; }
|
|
257
266
|
*,*::before,*::after { box-sizing:border-box; } button,select { font:inherit; color:inherit; min-height:44px; min-width:44px; } button { cursor:pointer; } button:disabled { cursor:wait; opacity:.6; } button:focus-visible,select:focus-visible { outline:3px solid var(--automation-focus); outline-offset:3px; } .workspace { border:1px solid var(--automation-border); border-radius:12px; background:var(--automation-bg); overflow:hidden; } .masthead { padding:20px; display:flex; gap:16px; align-items:center; flex-wrap:wrap; } .brand { display:flex; gap:12px; align-items:center; flex:1; min-width:0; } svg { width:40px; height:40px; color:var(--automation-accent); flex:none; } h2,h3,p { margin:0; } h2 { font-size:20px; letter-spacing:-.03em; } h3 { font-size:15px; } .eyebrow { text-transform:uppercase; letter-spacing:.11em; font-size:10px; color:var(--automation-muted); margin-bottom:4px; } .subtle,small,.note { color:var(--automation-muted); } small { display:block; font-size:11px; margin-top:3px; overflow-wrap:anywhere; } .refresh { border:1px solid var(--automation-accent); background:var(--automation-accent); color:var(--automation-bg); border-radius:7px; padding:8px 14px; font-weight:700; } .status-line { padding:12px 20px; background:var(--automation-surface); border-block:1px solid var(--automation-border); display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap; } .status-line strong { font-size:12px; font-weight:600; } .tabs { display:flex; padding:8px 12px 0; gap:4px; border-bottom:1px solid var(--automation-border); } .tabs button { flex:1; background:transparent; border:0; border-bottom:3px solid transparent; padding:10px 4px; color:var(--automation-muted); } .tabs button[aria-selected=true] { border-color:var(--automation-accent); color:var(--automation-text); font-weight:700; } .body { padding:16px; min-height:200px; animation:reveal .16s ease-out; } .filters { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin-bottom:16px; } label { font-size:11px; color:var(--automation-muted); display:grid; gap:4px; } select { width:100%; max-width:100%; background:var(--automation-surface); border:1px solid var(--automation-border); border-radius:5px; padding:6px; } .ledger { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:16px; } .index,.detail,.node { min-width:0; } .index h3 { margin-bottom:8px; } ul { list-style:none; padding:0; margin:0; } .index ul { max-height:380px; overflow:auto; } .index li+li { margin-top:6px; } .index button { width:100%; display:flex; justify-content:space-between; gap:12px; align-items:center; text-align:left; padding:12px; background:transparent; border:1px solid var(--automation-border); border-radius:7px; } .index button[aria-pressed=true] { border-color:var(--automation-accent); background:var(--automation-surface); } strong { overflow-wrap:anywhere; } .state { display:inline-block; text-transform:none; font:11px/1.4 ui-monospace,monospace; border:1px solid var(--automation-border); border-radius:4px; padding:3px 6px; overflow-wrap:anywhere; } .bad { color:var(--automation-error); } .detail { border-left:2px solid var(--automation-accent); padding:0 0 0 16px; } .detail h3 { font-size:19px; margin-bottom:12px; overflow-wrap:anywhere; } dl { display:grid; grid-template-columns:minmax(80px,.7fr) minmax(0,1fr); gap:9px 12px; margin:0; } dt { color:var(--automation-muted); font-size:11px; } dd { margin:0; overflow-wrap:anywhere; font-size:12px; } .mono { font-family:ui-monospace,monospace; overflow-wrap:anywhere; font-size:11px; } .note { font-size:11px; margin-top:16px; } .count { font:11px ui-monospace,monospace; margin-left:4px; color:var(--automation-muted); } .node-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr)); gap:16px; } .node { border:1px solid var(--automation-border); border-radius:8px; padding:14px; } .node header { display:flex; justify-content:space-between; align-items:start; gap:12px; margin-bottom:4px; } .coverage { margin-top:12px; } .coverage li { border-top:1px solid var(--automation-border); padding:10px 0; } .coverage li>div { display:flex; justify-content:space-between; align-items:center; gap:12px; } .coverage strong { font-size:12px; } .coverage p { font-size:12px; margin-top:6px; } .audit li { display:flex; justify-content:space-between; gap:16px; padding:12px 0; border-bottom:1px solid var(--automation-border); } .audit li>div { min-width:0; } .audit li>div:last-child { text-align:right; } .audit { margin-top:12px; } .source-actions { display:flex; flex-wrap:wrap; gap:8px; margin-top:16px; } .source-actions button { border:1px solid var(--automation-accent); border-radius:5px; background:var(--automation-surface); padding:8px 12px; } .effect { display:block; font:10px ui-monospace,monospace; color:var(--automation-muted); } .footer { display:flex; align-items:center; justify-content:space-between; padding:8px 16px; gap:12px; border-top:1px solid var(--automation-border); } .footer button { background:transparent; border:0; color:var(--automation-muted); padding:8px; font-size:12px; } .feedback { font-size:12px; overflow-wrap:anywhere; } .empty { padding:26px 12px; } .empty p { color:var(--automation-muted); margin-top:8px; } @keyframes reveal { from { opacity:.65; } to { opacity:1; } } @media(max-width:600px) { .masthead { padding:16px; gap:10px; } .filters { grid-template-columns:repeat(2,minmax(0,1fr)); } .ledger { grid-template-columns:minmax(0,1fr); } .detail { border-left:0; border-top:2px solid var(--automation-accent); padding:16px 0 0; } .index ul { max-height:260px; } .status-line { padding:10px 16px; } .body { padding:12px; } h2 { font-size:18px; } } @media(prefers-reduced-motion:reduce) { .body { animation:none; } }
|
|
258
267
|
</style>
|
|
259
268
|
<div class="workspace"><header class="masthead"><div class="brand"><svg viewBox="0 0 40 40" fill="none" aria-hidden="true"><path d="M4 20h9m0 0 7-11h12m-19 11 7 11h12M13 20h19" stroke="currentColor" stroke-width="2"/><circle cx="5" cy="20" r="3" fill="currentColor"/><path d="M30 6h6v6h-6zM30 17h6v6h-6zM30 28h6v6h-6z" stroke="currentColor" stroke-width="2"/></svg><div><p class="eyebrow">Triggers · sources · outcomes</p><h2>Automations</h2></div></div><button class="refresh" data-action="refresh" ${this.phase === 'loading' ? 'disabled' : ''}>Refresh</button></header>
|
|
260
|
-
<div class="status-line" role="status" aria-live="polite"><strong class="${this.phase === 'error' ? 'bad' : ''}">${escape(status)}</strong><small>${this.phase === 'ready' ? 'Checked' : 'Last attempt'} ${escape(date(this.phase === 'ready' ? this.inventory.checked_at : this.attemptedAt))}</small></div>
|
|
269
|
+
<div class="status-line"><div role="status" aria-live="polite"><strong class="${this.phase === 'error' ? 'bad' : ''}">${escape(status)} · ${this.localOnly ? 'This node' : 'Mesh'}</strong><small>${this.phase === 'ready' ? 'Checked' : 'Last attempt'} ${escape(date(this.phase === 'ready' ? this.inventory.checked_at : this.attemptedAt))}</small></div><button data-action="scope" ${this.phase === 'loading' ? 'disabled' : ''}>${this.localOnly ? 'Scan mesh' : 'Use this node'}</button></div>
|
|
261
270
|
<nav class="tabs" role="tablist" aria-label="Automation views">${SCREENS.map((screen) => `<button id="tab-${screen.id}" role="tab" aria-controls="panel-${screen.id}" aria-selected="${this.screen === screen.id}" tabindex="${this.screen === screen.id ? '0' : '-1'}" data-screen="${screen.id}">${screen.label}</button>`).join('')}</nav>
|
|
262
271
|
<div class="body" id="panel-${this.screen}" role="tabpanel" aria-labelledby="tab-${this.screen}" tabindex="0" aria-busy="${this.phase === 'loading'}">${content}</div>
|
|
263
|
-
<footer class="footer"><span class="feedback" role="status">${escape(this.feedback || (this.phase === 'ready' ? 'Coverage determines completeness.' : 'No current inventory.'))}</span><button data-action="
|
|
272
|
+
<footer class="footer"><span class="feedback" role="status">${escape(this.feedback || (this.phase === 'ready' ? 'Coverage determines completeness.' : 'No current inventory.'))}</span><button type="button" data-action="inventory-json" aria-expanded="${this.showInventoryJson}" aria-controls="inventory-json" ${this.inventory ? '' : 'disabled'}>${this.showInventoryJson ? 'Hide inventory JSON' : 'Select inventory JSON'}</button></footer>
|
|
273
|
+
<div class="inventory-json" id="inventory-json" ${this.showInventoryJson ? '' : 'hidden'}>${inventoryJson}</div></div>`;
|
|
264
274
|
if (focusedAction) this.shadowRoot.querySelector(`[data-action="${focusedAction}"]`)?.focus();
|
|
265
275
|
}
|
|
266
276
|
}
|
|
267
277
|
|
|
268
|
-
// Card and panel share the same inventory contract.
|
|
269
|
-
export const ChronosAutomationsCard = AutomationsCard;
|
|
270
|
-
export class AutomationsElement extends AutomationsCard {}
|
|
271
|
-
if (!customElements.get('tr-automations-card')) customElements.define('tr-automations-card', AutomationsCard);
|
|
272
|
-
if (!customElements.get('automations-card')) customElements.define('automations-card', class extends AutomationsCard {});
|
|
273
278
|
if (!customElements.get('tr-automations')) customElements.define('tr-automations', AutomationsElement);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Code Quality Gates"
|
|
3
|
+
plugin: code-quality
|
|
4
|
+
tokens:
|
|
5
|
+
color-primary: "#eab308"
|
|
6
|
+
color-primary-strong: "#facc15"
|
|
7
|
+
color-background: "#0f172a"
|
|
8
|
+
color-surface: "#1e293b"
|
|
9
|
+
color-border: "#334155"
|
|
10
|
+
color-text: "#f8fafc"
|
|
11
|
+
color-muted: "#94a3b8"
|
|
12
|
+
color-accent: "#38bdf8"
|
|
13
|
+
color-success: "#10b981"
|
|
14
|
+
color-warning: "#f59e0b"
|
|
15
|
+
color-danger: "#ef4444"
|
|
16
|
+
color-on-primary: "#0f172a"
|
|
17
|
+
font-body: "'Space Grotesk', system-ui, sans-serif"
|
|
18
|
+
font-mono: "'JetBrains Mono', 'Fira Code', monospace"
|
|
19
|
+
radius-md: "8px"
|
|
20
|
+
space-4: "16px"
|
|
21
|
+
components:
|
|
22
|
+
report:
|
|
23
|
+
backgroundColor: "{tokens.color-surface}"
|
|
24
|
+
textColor: "{tokens.color-text}"
|
|
25
|
+
rounded: "{tokens.radius-md}"
|
|
26
|
+
padding: "{tokens.space-4}"
|
|
27
|
+
workflow:
|
|
28
|
+
backgroundColor: "{tokens.color-background}"
|
|
29
|
+
textColor: "{tokens.color-text}"
|
|
30
|
+
rounded: "{tokens.radius-md}"
|
|
31
|
+
padding: "{tokens.space-4}"
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
# Code Quality Gates — design
|
|
35
|
+
|
|
36
|
+
The plugin's own visual language, for the Home panel, the SSSS UI chunks and any
|
|
37
|
+
host that themes them. Values follow `branding.color` in `plugin.json` and the
|
|
38
|
+
card palette in `ui/DESIGN.md`.
|
|
39
|
+
|
|
40
|
+
## Meaning of colour
|
|
41
|
+
|
|
42
|
+
- `color-success`: a report with status `clean` and nothing else.
|
|
43
|
+
- `color-warning`: `partial`, `stale`, `unknown-freshness`, `zero-scope`, and skipped gates.
|
|
44
|
+
- `color-danger`: `failed`, `unparsed-failure`, `infrastructure`, `unreadable`, `missing`, and failing gates.
|
|
45
|
+
- `color-primary`: the one action that runs gates.
|
|
46
|
+
|
|
47
|
+
No colour ever signals "passing" without a `clean` report view. Absent data is
|
|
48
|
+
shown as absent, in `color-muted`.
|
|
49
|
+
|
|
50
|
+
## Type
|
|
51
|
+
|
|
52
|
+
`font-mono` for gate ids, file paths, revisions and commands; `font-body` for
|
|
53
|
+
everything else.
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* `total-recall code-quality <verb>` for the repository you run it from.
|
|
3
3
|
*
|
|
4
4
|
* report [view] [arg] read the latest gate report; never starts a check
|
|
5
|
+
* run --tier fast|full run the configured gates once
|
|
5
6
|
* snapshot --node <name> put the exact source under test on the test node (git file list only)
|
|
6
7
|
* gate list|add|remove edit the repo's gate list
|
|
7
8
|
* config get|set|…, detect [--apply], init
|
|
@@ -74,6 +75,28 @@ export async function run(argv = []) {
|
|
|
74
75
|
return;
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
if (verb === 'run') {
|
|
79
|
+
const usage = 'Usage: total-recall code-quality run [--tier fast|full] [--json]';
|
|
80
|
+
if (rest.includes('--help') || rest.includes('-h')) { console.log(usage); return; }
|
|
81
|
+
const json = rest.includes('--json');
|
|
82
|
+
const options = rest.filter((arg) => arg !== '--json');
|
|
83
|
+
const tier = options.length ? options[1] : 'fast';
|
|
84
|
+
const emitFailure = (exitCode, error) => {
|
|
85
|
+
if (json) console.log(JSON.stringify({ ok: false, exitCode, error }));
|
|
86
|
+
else console.error(error);
|
|
87
|
+
process.exitCode = exitCode;
|
|
88
|
+
};
|
|
89
|
+
if ((options.length && (options.length !== 2 || options[0] !== '--tier')) || !['fast', 'full'].includes(tier)) {
|
|
90
|
+
return emitFailure(2, usage);
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const { exitCode } = runCore('check.mjs', ['--tier', tier], { quiet: json });
|
|
94
|
+
if (json) console.log(JSON.stringify({ ok: exitCode === 0, exitCode, tier }));
|
|
95
|
+
if (exitCode) process.exitCode = exitCode;
|
|
96
|
+
} catch (error) { emitFailure(error.exitCode || 1, error.message); }
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
77
100
|
const moduleUrl = skillConfigModule();
|
|
78
101
|
if (!moduleUrl) {
|
|
79
102
|
return fail('Run this through the total-recall CLI: config verbs need a Total Recall install with skill config support.', 2);
|
|
@@ -15,13 +15,15 @@ export function findSkillDir(start = process.cwd()) {
|
|
|
15
15
|
return stateDir(start);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export function runCore(script, args) {
|
|
18
|
+
export function runCore(script, args, { quiet = false } = {}) {
|
|
19
19
|
if (!fs.existsSync(stateDir())) {
|
|
20
20
|
const error = new Error('No code-quality state in this repository (.agent/skills/code-quality). Create configuration: total-recall code-quality detect --apply');
|
|
21
21
|
error.exitCode = 2;
|
|
22
22
|
throw error;
|
|
23
23
|
}
|
|
24
|
-
const result = spawnSync(process.execPath, [path.join(CORE_DIR, script), ...args], {
|
|
24
|
+
const result = spawnSync(process.execPath, [path.join(CORE_DIR, script), ...args], {
|
|
25
|
+
stdio: quiet ? ['ignore', 'ignore', 'inherit'] : 'inherit',
|
|
26
|
+
});
|
|
25
27
|
if (result.error) throw result.error;
|
|
26
28
|
return { exitCode: result.status ?? 1, data: { state_dir: stateDir(), script } };
|
|
27
29
|
}
|
|
@@ -204,12 +204,14 @@ function acquireLock(lockPath, label) {
|
|
|
204
204
|
const ageMs = held?.startedAt ? Date.now() - Date.parse(held.startedAt) : Infinity;
|
|
205
205
|
const expired = Number.isFinite(ageMs) && ageMs > STALE_AFTER_MS;
|
|
206
206
|
|
|
207
|
-
|
|
207
|
+
const protectedHolder = state === 'alive' || state === 'alive-foreign' ||
|
|
208
|
+
(state === 'unverifiable' && !expired);
|
|
209
|
+
if (STEAL_LOCK && protectedHolder) {
|
|
208
210
|
// The machine-wide lock is shared by every repo on this host. A verified
|
|
209
211
|
// live holder is another repo's (or this repo's) real run: stealing its
|
|
210
212
|
// lock, or killing it, silently destroys that run's result.
|
|
211
213
|
fail(
|
|
212
|
-
`--steal-lock refused: the ${label} lock
|
|
214
|
+
`--steal-lock refused: the ${label} lock has a protected holder (state=${state}) ` +
|
|
213
215
|
`(pid ${held.pid}, ${held.repoRoot ?? 'unknown repo'}, started ${held.startedAt ?? 'unknown'}).\n` +
|
|
214
216
|
` Wait for it to finish, or stop that process yourself if you own it.`,
|
|
215
217
|
3
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tr-plugin-code-quality",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "tr-plugin-code-quality",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.3.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@gregiteen/ssss-cli": "0.14.5"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
|
-
"total-recall-brain": "3.
|
|
15
|
+
"total-recall-brain": "3.45.0"
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
"node_modules/@alcalzone/ansi-tokenize": {
|
|
@@ -5543,9 +5543,9 @@
|
|
|
5543
5543
|
}
|
|
5544
5544
|
},
|
|
5545
5545
|
"node_modules/total-recall-brain": {
|
|
5546
|
-
"version": "3.
|
|
5547
|
-
"resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.
|
|
5548
|
-
"integrity": "sha512-
|
|
5546
|
+
"version": "3.45.0",
|
|
5547
|
+
"resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.45.0.tgz",
|
|
5548
|
+
"integrity": "sha512-HDYfROazZbsLHQsFPnlBcSpe1HL1QEi7JG8x/eNRUI06RxVQsZWl8LwBo2lTWjWRDrKmCy7BUmSXQDuWF3lrEw==",
|
|
5549
5549
|
"dev": true,
|
|
5550
5550
|
"license": "MIT",
|
|
5551
5551
|
"workspaces": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tr-plugin-code-quality",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Total Recall code-quality plugin: shared gate runner core and per-repo gate configuration.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"plugin.json",
|
|
19
19
|
"README.md",
|
|
20
20
|
"LICENSE",
|
|
21
|
+
"DESIGN.md",
|
|
21
22
|
"core/",
|
|
22
23
|
"commands/",
|
|
23
24
|
"ui/"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://github.com/gregiteen/total-recall/blob/main/metadata.plugin.schema.json",
|
|
3
3
|
"id": "code-quality",
|
|
4
4
|
"name": "Code Quality Gates",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.3.0",
|
|
6
6
|
"description": "Fail-closed deterministic code-quality gates, lint rules, and test compliance reporting.",
|
|
7
7
|
"author": "Total Recall contributors",
|
|
8
8
|
"license": "MIT",
|
|
@@ -22,6 +22,15 @@
|
|
|
22
22
|
"description": "Read the latest gate report or --review-diagnostics, with --json for machine output. Never starts a check",
|
|
23
23
|
"effect": "read"
|
|
24
24
|
},
|
|
25
|
+
{
|
|
26
|
+
"name": "run",
|
|
27
|
+
"description": "Run the selected repository's configured fast or full gates once and persist the report",
|
|
28
|
+
"effect": "write",
|
|
29
|
+
"timeoutMs": 600000,
|
|
30
|
+
"args": [
|
|
31
|
+
{ "name": "tier", "flag": "--tier", "type": "choice", "options": ["fast", "full"], "label": "Gate tier" }
|
|
32
|
+
]
|
|
33
|
+
},
|
|
25
34
|
{
|
|
26
35
|
"name": "snapshot",
|
|
27
36
|
"description": "Copy the exact source under test (git file lists of this repo and linked plugin repos, secrets refused) to the test node, with a SHA-256 manifest",
|
|
@@ -63,7 +72,37 @@
|
|
|
63
72
|
}
|
|
64
73
|
],
|
|
65
74
|
"ui": {
|
|
75
|
+
"home": "code-quality-home",
|
|
76
|
+
"design_tokens": "DESIGN.md",
|
|
66
77
|
"elements": [
|
|
78
|
+
{
|
|
79
|
+
"id": "code-quality-home",
|
|
80
|
+
"kind": "panel",
|
|
81
|
+
"tag": "code-quality-home",
|
|
82
|
+
"module": "ui/home.mjs",
|
|
83
|
+
"description": "Home: verdict, freshness, coverage, findings and the declared operations for this repository. Data comes from `code-quality report --json`; absent data never renders as passing.",
|
|
84
|
+
"props": {
|
|
85
|
+
"view": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"description": "JSON printed by `total-recall code-quality report --json`. Absent view renders as no data, never as passing."
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"optional_tokens": [
|
|
91
|
+
"font-body",
|
|
92
|
+
"font-mono",
|
|
93
|
+
"color-primary",
|
|
94
|
+
"color-primary-strong",
|
|
95
|
+
"color-on-primary",
|
|
96
|
+
"color-background",
|
|
97
|
+
"color-surface",
|
|
98
|
+
"color-border",
|
|
99
|
+
"color-text",
|
|
100
|
+
"color-muted",
|
|
101
|
+
"color-success",
|
|
102
|
+
"color-warning",
|
|
103
|
+
"color-danger"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
67
106
|
{
|
|
68
107
|
"id": "code-quality-report",
|
|
69
108
|
"kind": "panel",
|
|
@@ -76,10 +115,6 @@
|
|
|
76
115
|
"description": "JSON printed by `total-recall code-quality report json`. Absent view renders as no data, never as passing."
|
|
77
116
|
}
|
|
78
117
|
},
|
|
79
|
-
"events": [
|
|
80
|
-
"run-check",
|
|
81
|
-
"reload"
|
|
82
|
-
],
|
|
83
118
|
"optional_tokens": [
|
|
84
119
|
"font-body",
|
|
85
120
|
"color-text",
|
|
@@ -91,41 +126,6 @@
|
|
|
91
126
|
"radius-md",
|
|
92
127
|
"space-4"
|
|
93
128
|
]
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"id": "card",
|
|
97
|
-
"kind": "card",
|
|
98
|
-
"tag": "tr-code-quality-card",
|
|
99
|
-
"module": "ui/card.js",
|
|
100
|
-
"description": "Gatekeeper Card Face"
|
|
101
|
-
}
|
|
102
|
-
]
|
|
103
|
-
},
|
|
104
|
-
"card_face": {
|
|
105
|
-
"skin": "winamp-classic",
|
|
106
|
-
"theme": "vibrant",
|
|
107
|
-
"headline": "Deterministic Code Gates & Lint",
|
|
108
|
-
"primary_color": "#06b6d4",
|
|
109
|
-
"secondary_color": "#164e63",
|
|
110
|
-
"accent_color": "#22d3ee",
|
|
111
|
-
"touch_layout": "comfortable",
|
|
112
|
-
"interactive": true,
|
|
113
|
-
"quick_actions": [
|
|
114
|
-
{
|
|
115
|
-
"subcommand": "report",
|
|
116
|
-
"label": "REPORT"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"subcommand": "gate",
|
|
120
|
-
"label": "GATE"
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"subcommand": "config",
|
|
124
|
-
"label": "CONFIG"
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
"subcommand": "detect",
|
|
128
|
-
"label": "DETECT"
|
|
129
129
|
}
|
|
130
130
|
]
|
|
131
131
|
},
|