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,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tr-plugin-automations",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Scheduled plugin task runner plus automation sources, triggers, observed outcomes and coverage across the Total Recall mesh.",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "vitest run",
|
|
8
|
+
"ssss": "ssss"
|
|
9
|
+
},
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"files": [
|
|
12
|
+
"cli.mjs",
|
|
13
|
+
"plugin.json",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE",
|
|
16
|
+
"inventory.mjs",
|
|
17
|
+
"adapters.mjs",
|
|
18
|
+
"scheduler.mjs",
|
|
19
|
+
"cron.mjs",
|
|
20
|
+
"capability/",
|
|
21
|
+
"BRICK.md",
|
|
22
|
+
"DESIGN.md",
|
|
23
|
+
"ui/home.js",
|
|
24
|
+
"ui/automations.js",
|
|
25
|
+
"ui/chunks/"
|
|
26
|
+
],
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@gregiteen/ssss-cli": "0.14.5"
|
|
32
|
+
},
|
|
33
|
+
"overrides": {
|
|
34
|
+
"@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.5"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://github.com/gregiteen/total-recall/blob/main/metadata.plugin.schema.json",
|
|
3
|
+
"id": "automations",
|
|
4
|
+
"name": "Automations",
|
|
5
|
+
"version": "1.2.0",
|
|
6
|
+
"description": "Run scheduled plugin tasks and inspect automation sources, triggers, observed outcomes and coverage across the mesh.",
|
|
7
|
+
"author": "Total Recall",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"reuse": {
|
|
10
|
+
"commands": ["total-recall mesh nodes"],
|
|
11
|
+
"owned": "Collects automation sources, triggers, outcomes and node coverage, and delegates confirmed local task cancellation to its owner."
|
|
12
|
+
},
|
|
13
|
+
"use_cases": [
|
|
14
|
+
"automation",
|
|
15
|
+
"monitoring"
|
|
16
|
+
],
|
|
17
|
+
"gate": {
|
|
18
|
+
"tasks": ["List scheduled tasks and automations across the mesh", "Check an automation's real outcome", "Cancel a pending local task"],
|
|
19
|
+
"owned_commands": [
|
|
20
|
+
{ "pattern": "(crontab\\s+-l\\b|launchctl\\s+list\\b)", "use": "total-recall automations list --json" }
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"cli": {
|
|
24
|
+
"answers_help": true,
|
|
25
|
+
"command": "automations",
|
|
26
|
+
"handler": "./cli.mjs",
|
|
27
|
+
"subcommands": [
|
|
28
|
+
{
|
|
29
|
+
"name": "list",
|
|
30
|
+
"description": "List automations and source coverage across known nodes",
|
|
31
|
+
"timeout_ms": 25000,
|
|
32
|
+
"effect": "read",
|
|
33
|
+
"output": "json",
|
|
34
|
+
"args": []
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "status",
|
|
38
|
+
"description": "Report observed automation states and source coverage",
|
|
39
|
+
"timeout_ms": 25000,
|
|
40
|
+
"effect": "read",
|
|
41
|
+
"output": "json",
|
|
42
|
+
"args": []
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "show",
|
|
46
|
+
"description": "Inspect one automation by its stable id",
|
|
47
|
+
"timeout_ms": 25000,
|
|
48
|
+
"effect": "read",
|
|
49
|
+
"output": "json",
|
|
50
|
+
"args": [
|
|
51
|
+
{ "name": "receipt", "flag": "--receipt", "type": "boolean", "label": "Local terminal failure receipt" }
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "dream",
|
|
56
|
+
"description": "Run dream, including decay, for every brain on this node",
|
|
57
|
+
"timeout_ms": 600000,
|
|
58
|
+
"effect": "write",
|
|
59
|
+
"output": "json",
|
|
60
|
+
"args": []
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "cancel",
|
|
64
|
+
"description": "Cancel one pending local durable task through its owner",
|
|
65
|
+
"effect": "write",
|
|
66
|
+
"output": "json",
|
|
67
|
+
"args": []
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"tasks": [
|
|
72
|
+
{
|
|
73
|
+
"intent": "Dream every brain on this node",
|
|
74
|
+
"schedule": "40 3 * * *",
|
|
75
|
+
"command": "dream --all-brains",
|
|
76
|
+
"placement": "per-node"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"runtime": {
|
|
80
|
+
"modules": {
|
|
81
|
+
"scheduler": "scheduler.mjs"
|
|
82
|
+
},
|
|
83
|
+
"daemon": ["scheduler"]
|
|
84
|
+
},
|
|
85
|
+
"ui": {
|
|
86
|
+
"design_tokens": "DESIGN.md",
|
|
87
|
+
"home": "automations",
|
|
88
|
+
"elements": [
|
|
89
|
+
{
|
|
90
|
+
"id": "automations",
|
|
91
|
+
"kind": "panel",
|
|
92
|
+
"tag": "tr-automations",
|
|
93
|
+
"module": "ui/home.js",
|
|
94
|
+
"description": "Live automation inventory with per-source node coverage",
|
|
95
|
+
"events": [],
|
|
96
|
+
"tokens": [
|
|
97
|
+
"color-text",
|
|
98
|
+
"color-text-secondary",
|
|
99
|
+
"color-surface",
|
|
100
|
+
"color-border",
|
|
101
|
+
"color-success",
|
|
102
|
+
"color-error",
|
|
103
|
+
"spacing-md",
|
|
104
|
+
"radius-md"
|
|
105
|
+
],
|
|
106
|
+
"optional_tokens": []
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
"auth": {
|
|
111
|
+
"plugin": "auth",
|
|
112
|
+
"methods": [
|
|
113
|
+
"passkey",
|
|
114
|
+
"google-oauth2"
|
|
115
|
+
],
|
|
116
|
+
"session_verification": true
|
|
117
|
+
},
|
|
118
|
+
"deploy": {
|
|
119
|
+
"targets": [
|
|
120
|
+
"ssss-app",
|
|
121
|
+
"nextjs",
|
|
122
|
+
"react",
|
|
123
|
+
"flask"
|
|
124
|
+
],
|
|
125
|
+
"required_ssss_version": ">=0.9.3",
|
|
126
|
+
"access_grants": [
|
|
127
|
+
"auth:session:verify",
|
|
128
|
+
"ssss:vault:read",
|
|
129
|
+
"ssss:vault:write",
|
|
130
|
+
"ssss:events:append"
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
"branding": {
|
|
134
|
+
"name": "Automations",
|
|
135
|
+
"color": "#f2bd63",
|
|
136
|
+
"badge": "Source coverage",
|
|
137
|
+
"font": "space-grotesk"
|
|
138
|
+
},
|
|
139
|
+
"status": {
|
|
140
|
+
"command": "status",
|
|
141
|
+
"refresh_seconds": 300
|
|
142
|
+
},
|
|
143
|
+
"capability": {
|
|
144
|
+
"entry": "capability/index.mjs",
|
|
145
|
+
"exports": ["collectSources"]
|
|
146
|
+
},
|
|
147
|
+
"distribution": {
|
|
148
|
+
"tier": "official",
|
|
149
|
+
"license": "open"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scheduled plugin tasks.
|
|
3
|
+
*
|
|
4
|
+
* A manifest task `{ intent, schedule: "<5-field cron>", command }` runs the
|
|
5
|
+
* plugin's own CLI on that schedule, out of process. `command` is a subcommand
|
|
6
|
+
* followed by its arguments ("cleanup --auto --json"). Tasks are per node by
|
|
7
|
+
* default; selected-node tasks run only on the node named in
|
|
8
|
+
* plugin_record.task_nodes[command].
|
|
9
|
+
*
|
|
10
|
+
* Scheduling runs against the global brain (the home installation), so run
|
|
11
|
+
* records and plugin.task_run events land where `automations list` reads
|
|
12
|
+
* them, whatever directory the daemon was started from.
|
|
13
|
+
*
|
|
14
|
+
* The last minute-slot each command ran in is kept in the plugin_record, so a
|
|
15
|
+
* restart neither repeats a slot nor loses one: when the daemon was busy or
|
|
16
|
+
* down, the most recent matching slot since the last run (within a day) runs
|
|
17
|
+
* once. A task never runs just because it was installed: the first run is the
|
|
18
|
+
* first matching slot after the scheduler first sees it.
|
|
19
|
+
*
|
|
20
|
+
* The daemon starts this module through the plugin's `runtime.daemon`
|
|
21
|
+
* declaration; Total Recall core holds no scheduler of its own.
|
|
22
|
+
*/
|
|
23
|
+
import os from 'node:os';
|
|
24
|
+
import path from 'node:path';
|
|
25
|
+
import { pathToFileURL } from 'node:url';
|
|
26
|
+
import { parseCron, cronMatches } from './cron.mjs';
|
|
27
|
+
|
|
28
|
+
export { parseCron, cronMatches } from './cron.mjs';
|
|
29
|
+
|
|
30
|
+
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
31
|
+
const MAX_CATCHUP_MINUTES = 24 * 60;
|
|
32
|
+
const TAIL_BYTES = 2000;
|
|
33
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
34
|
+
|
|
35
|
+
/** Core primitives the scheduler uses, loaded from the running Total Recall package. */
|
|
36
|
+
export async function loadCore(packageRoot = process.env.TR_PACKAGE_ROOT) {
|
|
37
|
+
if (!packageRoot) throw new Error('TR_PACKAGE_ROOT is not set; the scheduler runs inside the Total Recall daemon');
|
|
38
|
+
const load = (name) => import(pathToFileURL(path.join(packageRoot, 'src', 'core', `${name}.mjs`)).href);
|
|
39
|
+
const [loader, store, state, runner, events, log, mesh] = await Promise.all([
|
|
40
|
+
load('plugin-loader'), load('plugin-store'), load('plugin-state'), load('plugin-runner'),
|
|
41
|
+
load('ssss-operation-service'), load('logger'), load('mesh'),
|
|
42
|
+
]);
|
|
43
|
+
return {
|
|
44
|
+
discoverPlugins: loader.discoverPlugins,
|
|
45
|
+
vaultForPluginsDir: loader.vaultForPluginsDir,
|
|
46
|
+
readPluginRecord: store.readPluginRecord,
|
|
47
|
+
patchPluginRecord: store.patchPluginRecord,
|
|
48
|
+
ensurePluginRecord: store.ensurePluginRecord,
|
|
49
|
+
pluginExecutionEnabled: state.pluginExecutionEnabled,
|
|
50
|
+
runPluginCommand: runner.runPluginCommand,
|
|
51
|
+
appendVfsEvent: events.appendVfsEvent,
|
|
52
|
+
logger: log.logger,
|
|
53
|
+
getMeshSelf: mesh.getMeshSelf,
|
|
54
|
+
meshNodeKey: mesh.meshNodeKey,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Split a manifest task command into its subcommand and arguments. */
|
|
59
|
+
export function splitTaskCommand(command) {
|
|
60
|
+
const [subcommand = '', ...args] = String(command || '').trim().split(/\s+/).filter(Boolean);
|
|
61
|
+
return { subcommand, args };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Task timeout: the task's own, else the subcommand's declared one, else 60 s. */
|
|
65
|
+
export function taskTimeoutMs(task, manifest) {
|
|
66
|
+
if (Number.isInteger(task.timeout_ms)) return task.timeout_ms;
|
|
67
|
+
const { subcommand } = splitTaskCommand(task.command);
|
|
68
|
+
const declared = manifest?.cli?.subcommands?.find((s) => s.name === subcommand);
|
|
69
|
+
const value = declared?.timeout_ms ?? declared?.timeoutMs;
|
|
70
|
+
return Number.isInteger(value) ? value : DEFAULT_TIMEOUT_MS;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** A selected-node task stays idle until this node's plugin record selects it. */
|
|
74
|
+
export function taskRunsOnNode(task, record, self, meshNodeKey = (v) => String(v).toLowerCase()) {
|
|
75
|
+
if (task.placement !== 'selected-node') return true;
|
|
76
|
+
const selected = String(record?.task_nodes?.[task.command] || '').trim();
|
|
77
|
+
if (!selected || !self?.hostname) return false;
|
|
78
|
+
return selected === self.ip || meshNodeKey(selected) === meshNodeKey(self.hostname);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Local minute-slot key, e.g. 2026-09-22T14:05. */
|
|
82
|
+
export function minuteSlot(date) {
|
|
83
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function slotToDate(slot) {
|
|
87
|
+
const m = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})$/.exec(String(slot || ''));
|
|
88
|
+
return m ? new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]), Number(m[4]), Number(m[5])) : null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** The most recent slot matching `cron` in (lastSlot, now], or null. */
|
|
92
|
+
export function latestDueSlot(cron, lastSlot, now = new Date()) {
|
|
93
|
+
const floorNow = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes());
|
|
94
|
+
const last = slotToDate(lastSlot);
|
|
95
|
+
for (let i = 0; i < MAX_CATCHUP_MINUTES; i++) {
|
|
96
|
+
const candidate = new Date(floorNow.getTime() - i * 60_000);
|
|
97
|
+
if (last && candidate <= last) return null;
|
|
98
|
+
if (cronMatches(cron, candidate)) return minuteSlot(candidate);
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Last non-empty lines of a run's output, bounded for logs and alerts. */
|
|
104
|
+
export function outputTail(output, maxChars = 400) {
|
|
105
|
+
const lines = String(output || '').trim().split('\n').map((l) => l.trim()).filter(Boolean);
|
|
106
|
+
const tail = lines.slice(-3).join(' | ');
|
|
107
|
+
return tail.length > maxChars ? tail.slice(-maxChars) : tail;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Ask the operator-alerts owner to report a failed run, once per task per day. */
|
|
111
|
+
async function alertFailure(core, { plugin, command, slot, result, projectRoot }) {
|
|
112
|
+
const owner = core.discoverPlugins(projectRoot).find((p) => p.id === 'operator-alerts' && p.valid);
|
|
113
|
+
if (!owner) return { sent: false, error: 'operator-alerts is not installed' };
|
|
114
|
+
const reason = result.timedOut ? 'timed out' : `exit ${result.exitCode}`;
|
|
115
|
+
const tail = outputTail(result.output) || 'no output';
|
|
116
|
+
const args = [
|
|
117
|
+
'--title', `Scheduled task failed: ${plugin.id} ${command}`,
|
|
118
|
+
'--message', `${plugin.id} "${command}" (slot ${slot}) failed: ${reason}. ${tail}`,
|
|
119
|
+
'--event-id', `plugin-task-${plugin.id}-${command.replace(/[^a-z0-9]+/gi, '-')}-${slot.slice(0, 10)}`,
|
|
120
|
+
];
|
|
121
|
+
try {
|
|
122
|
+
const sent = await core.runPluginCommand(owner, { subcommand: 'send', args, cwd: projectRoot, timeoutMs: 30_000 });
|
|
123
|
+
return { sent: sent.ok, error: sent.ok ? null : outputTail(sent.output) };
|
|
124
|
+
} catch (err) {
|
|
125
|
+
return { sent: false, error: err.message };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Run every task that is due. Tasks run sequentially so a slow plugin cannot
|
|
131
|
+
* multiply into concurrent processes on a constrained host.
|
|
132
|
+
* @param {{ core: object, projectRoot?: string, now?: Date, selfNode?: object, alert?: Function }} options
|
|
133
|
+
*/
|
|
134
|
+
export async function runDuePluginTasks(options) {
|
|
135
|
+
const { core, projectRoot = os.homedir(), now = new Date() } = options;
|
|
136
|
+
const alert = options.alert || ((info) => alertFailure(core, info));
|
|
137
|
+
const selfNode = options.selfNode === undefined ? core.getMeshSelf() : options.selfNode;
|
|
138
|
+
const results = [];
|
|
139
|
+
|
|
140
|
+
for (const plugin of core.discoverPlugins(projectRoot)) {
|
|
141
|
+
if (!plugin.valid || !Array.isArray(plugin.manifest.tasks) || plugin.manifest.tasks.length === 0) continue;
|
|
142
|
+
|
|
143
|
+
let record = core.readPluginRecord(plugin);
|
|
144
|
+
if (!record) record = await core.ensurePluginRecord(plugin);
|
|
145
|
+
if (!core.pluginExecutionEnabled(plugin, { projectRoot })) continue;
|
|
146
|
+
const runs = { ...(record?.task_runs || {}) };
|
|
147
|
+
let changed = false;
|
|
148
|
+
|
|
149
|
+
for (const task of plugin.manifest.tasks) {
|
|
150
|
+
if (!taskRunsOnNode(task, record, selfNode, core.meshNodeKey)) continue;
|
|
151
|
+
let cron;
|
|
152
|
+
try {
|
|
153
|
+
cron = parseCron(task.schedule);
|
|
154
|
+
} catch (err) {
|
|
155
|
+
core.logger.warn('plugin-tasks', `Skipping ${plugin.id}:${task.command} — ${err.message}`);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (!runs[task.command]) {
|
|
160
|
+
// First sighting: mark the present so the first run is the next real slot.
|
|
161
|
+
runs[task.command] = minuteSlot(now);
|
|
162
|
+
changed = true;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const slot = latestDueSlot(cron, runs[task.command], now);
|
|
167
|
+
if (!slot) continue;
|
|
168
|
+
|
|
169
|
+
const { subcommand, args } = splitTaskCommand(task.command);
|
|
170
|
+
const result = await core.runPluginCommand(plugin, { subcommand, args, cwd: projectRoot, timeoutMs: taskTimeoutMs(task, plugin.manifest) })
|
|
171
|
+
.catch((err) => ({ ok: false, exitCode: null, output: err.message, durationMs: 0, timedOut: false }));
|
|
172
|
+
runs[task.command] = slot;
|
|
173
|
+
changed = true;
|
|
174
|
+
const entry = { plugin: plugin.id, command: task.command, slot, ok: result.ok, exitCode: result.exitCode, timedOut: !!result.timedOut, tail: result.ok ? '' : outputTail(result.output) };
|
|
175
|
+
if (!result.ok) entry.alert = await alert({ plugin, command: task.command, slot, result, projectRoot });
|
|
176
|
+
results.push(entry);
|
|
177
|
+
|
|
178
|
+
try {
|
|
179
|
+
await core.appendVfsEvent(
|
|
180
|
+
`plugins/${plugin.id}/task-${Date.now()}`,
|
|
181
|
+
{
|
|
182
|
+
kind: 'plugin.task_run',
|
|
183
|
+
plugin_id: plugin.id,
|
|
184
|
+
command: task.command,
|
|
185
|
+
intent: task.intent,
|
|
186
|
+
slot,
|
|
187
|
+
ok: result.ok,
|
|
188
|
+
exit_code: result.exitCode,
|
|
189
|
+
timed_out: !!result.timedOut,
|
|
190
|
+
duration_ms: result.durationMs,
|
|
191
|
+
output_tail: String(result.output || '').slice(-TAIL_BYTES),
|
|
192
|
+
},
|
|
193
|
+
{ actorRole: 'system', intent: 'Record plugin task run', vaultRoot: core.vaultForPluginsDir(plugin.pluginsDir) }
|
|
194
|
+
);
|
|
195
|
+
} catch (err) {
|
|
196
|
+
core.logger.warn('plugin-tasks', `Could not record task run for ${plugin.id}: ${err.message}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (changed) {
|
|
201
|
+
try {
|
|
202
|
+
await core.patchPluginRecord(plugin, { task_runs: runs });
|
|
203
|
+
} catch (err) {
|
|
204
|
+
core.logger.warn('plugin-tasks', `Could not update task runs for ${plugin.id}: ${err.message}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return results;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** One log line per run; failures carry the reason and the output tail. */
|
|
213
|
+
export function describeRun(r) {
|
|
214
|
+
if (r.ok) return `${r.plugin}:${r.command} slot ${r.slot} ok`;
|
|
215
|
+
const reason = r.timedOut ? 'timed out' : `exit ${r.exitCode}`;
|
|
216
|
+
const alert = r.alert ? (r.alert.sent ? '; operator alerted' : `; alert not sent (${r.alert.error})`) : '';
|
|
217
|
+
return `${r.plugin}:${r.command} slot ${r.slot} failed (${reason}): ${r.tail || 'no output'}${alert}`;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Daemon service entry point: check for due tasks once a minute.
|
|
222
|
+
* @returns {Promise<Function>} stop function
|
|
223
|
+
*/
|
|
224
|
+
export async function start(options = {}) {
|
|
225
|
+
const core = options.core || await loadCore();
|
|
226
|
+
const projectRoot = options.projectRoot || os.homedir();
|
|
227
|
+
let running = false;
|
|
228
|
+
const tick = async () => {
|
|
229
|
+
if (running) return;
|
|
230
|
+
running = true;
|
|
231
|
+
try {
|
|
232
|
+
for (const r of await runDuePluginTasks({ core, projectRoot })) {
|
|
233
|
+
core.logger[r.ok ? 'info' : 'warn']('plugin-tasks', describeRun(r));
|
|
234
|
+
}
|
|
235
|
+
} catch (err) {
|
|
236
|
+
core.logger.warn('plugin-tasks', `Scheduler tick failed: ${err.message}`);
|
|
237
|
+
} finally {
|
|
238
|
+
running = false;
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
const timer = setInterval(tick, 60_000);
|
|
242
|
+
timer.unref?.();
|
|
243
|
+
tick();
|
|
244
|
+
core.logger.info('plugin-tasks', `Plugin task scheduler started (automations) for ${projectRoot}`);
|
|
245
|
+
return () => clearInterval(timer);
|
|
246
|
+
}
|
|
@@ -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>
|