@zerwiz/ymir 0.1.4 → 0.1.7
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/.agents/README.md +291 -0
- package/.agents/agents/bragi-marketer.md +111 -0
- package/.agents/agents/brokk.md +352 -0
- package/.agents/agents/forseti-reviewer.md +93 -0
- package/.agents/agents/frigg-consent.md +77 -0
- package/.agents/agents/groa-update.md +77 -0
- package/.agents/agents/hnoss-designer.md +69 -0
- package/.agents/agents/huginn-researcher.md +99 -0
- package/.agents/agents/jord-projects.md +78 -0
- package/.agents/agents/kvasir-scout.md +91 -0
- package/.agents/agents/mimir-planner.md +92 -0
- package/.agents/agents/muninn-stow.md +77 -0
- package/.agents/agents/saga-bearings.md +78 -0
- package/.agents/agents/sindri-developer.md +114 -0
- package/.agents/agents/snotra-documenter.md +105 -0
- package/.agents/agents/syn-recovery.md +78 -0
- package/.agents/agents/tyr-check.md +78 -0
- package/.agents/agents/urdh-hold.md +77 -0
- package/.agents/agents/volundr-smith.md +80 -0
- package/.agents/agents/vor-diagnostics.md +77 -0
- package/.agents/assets/agents/naming.md +50 -0
- package/.agents/assets/agents/registry.md +93 -0
- package/.agents/assets/agents/runtime.md +36 -0
- package/.agents/assets/agents/toon-tasks-cli.md +42 -0
- package/.agents/assets/templates/company_entity.template.md +37 -0
- package/.agents/backend/README.md +74 -0
- package/.agents/backend/backends/cmux.sh +649 -0
- package/.agents/backend/backends/herdr-eventwait.py +157 -0
- package/.agents/backend/backends/herdr-workspace-move.py +114 -0
- package/.agents/backend/backends/herdr.sh +3386 -0
- package/.agents/backend/backends/orca.sh +290 -0
- package/.agents/backend/backends/tmux.sh +357 -0
- package/.agents/backend/backends/zellij.sh +700 -0
- package/.agents/backend/fm-afk-launch.sh +654 -0
- package/.agents/backend/fm-afk-return.sh +241 -0
- package/.agents/backend/fm-afk-start.sh +172 -0
- package/.agents/backend/fm-arm-command-policy.mjs +960 -0
- package/.agents/backend/fm-arm-pretool-check.sh +200 -0
- package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
- package/.agents/backend/fm-backend.sh +981 -0
- package/.agents/backend/fm-backlog-handoff.sh +909 -0
- package/.agents/backend/fm-backlog-receive.sh +187 -0
- package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
- package/.agents/backend/fm-bearings-board.sh +204 -0
- package/.agents/backend/fm-bearings-snapshot.sh +546 -0
- package/.agents/backend/fm-bootstrap.sh +1568 -0
- package/.agents/backend/fm-branch-outcome.sh +203 -0
- package/.agents/backend/fm-branch-prompt.sh +101 -0
- package/.agents/backend/fm-brief.sh +452 -0
- package/.agents/backend/fm-busy-event.sh +234 -0
- package/.agents/backend/fm-busy-lib.sh +986 -0
- package/.agents/backend/fm-captain-hold.sh +1001 -0
- package/.agents/backend/fm-cd-command-policy.mjs +153 -0
- package/.agents/backend/fm-cd-pretool-check.sh +190 -0
- package/.agents/backend/fm-check-lib.sh +74 -0
- package/.agents/backend/fm-check-register.sh +42 -0
- package/.agents/backend/fm-check-unregister.sh +52 -0
- package/.agents/backend/fm-classify-lib.sh +1770 -0
- package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
- package/.agents/backend/fm-composer-lib.sh +1416 -0
- package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
- package/.agents/backend/fm-config-push.sh +254 -0
- package/.agents/backend/fm-control-lib.sh +251 -0
- package/.agents/backend/fm-control.sh +878 -0
- package/.agents/backend/fm-crew-state.sh +625 -0
- package/.agents/backend/fm-cursor-lib.sh +243 -0
- package/.agents/backend/fm-decision-hold.sh +232 -0
- package/.agents/backend/fm-doc-audience-check.sh +269 -0
- package/.agents/backend/fm-dod-lib.sh +67 -0
- package/.agents/backend/fm-ensure-agents-md.sh +253 -0
- package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
- package/.agents/backend/fm-extension.mjs +2577 -0
- package/.agents/backend/fm-extension.sh +16 -0
- package/.agents/backend/fm-ff-lib.sh +420 -0
- package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
- package/.agents/backend/fm-fleet-sync.sh +458 -0
- package/.agents/backend/fm-fleet-view.sh +96 -0
- package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
- package/.agents/backend/fm-guard.sh +242 -0
- package/.agents/backend/fm-harness.sh +195 -0
- package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
- package/.agents/backend/fm-herdr-lab.sh +346 -0
- package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
- package/.agents/backend/fm-home-seed.sh +984 -0
- package/.agents/backend/fm-home-summary-refresh.sh +255 -0
- package/.agents/backend/fm-hook-host-lib.sh +36 -0
- package/.agents/backend/fm-inactive-reconcile.sh +531 -0
- package/.agents/backend/fm-inbox.sh +399 -0
- package/.agents/backend/fm-install-actionlint.sh +84 -0
- package/.agents/backend/fm-install-herdr.sh +96 -0
- package/.agents/backend/fm-install-shellcheck.sh +84 -0
- package/.agents/backend/fm-install-treehouse.sh +95 -0
- package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
- package/.agents/backend/fm-lease-lib.sh +218 -0
- package/.agents/backend/fm-lease.sh +189 -0
- package/.agents/backend/fm-line-cap-lib.sh +51 -0
- package/.agents/backend/fm-lint-workflows.sh +137 -0
- package/.agents/backend/fm-lint.sh +591 -0
- package/.agents/backend/fm-lock-lib.sh +104 -0
- package/.agents/backend/fm-lock.sh +107 -0
- package/.agents/backend/fm-marker-lib.sh +12 -0
- package/.agents/backend/fm-merge-local.sh +74 -0
- package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
- package/.agents/backend/fm-nm-run-lib.sh +124 -0
- package/.agents/backend/fm-on.sh +125 -0
- package/.agents/backend/fm-operational-input.sh +253 -0
- package/.agents/backend/fm-peek.sh +46 -0
- package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
- package/.agents/backend/fm-pr-check.sh +135 -0
- package/.agents/backend/fm-pr-lib.sh +1016 -0
- package/.agents/backend/fm-pr-merge.sh +707 -0
- package/.agents/backend/fm-pr-poll.sh +110 -0
- package/.agents/backend/fm-primary-scope-lib.sh +33 -0
- package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
- package/.agents/backend/fm-procevent-lavish.sh +628 -0
- package/.agents/backend/fm-procevent-lib.sh +892 -0
- package/.agents/backend/fm-procevent-quota.sh +290 -0
- package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
- package/.agents/backend/fm-procevent-when.sh +504 -0
- package/.agents/backend/fm-procevent.sh +1466 -0
- package/.agents/backend/fm-project-mode.sh +92 -0
- package/.agents/backend/fm-project-origin-lib.sh +180 -0
- package/.agents/backend/fm-promote.sh +282 -0
- package/.agents/backend/fm-public-followup-emit.sh +260 -0
- package/.agents/backend/fm-public-followup-lib.sh +398 -0
- package/.agents/backend/fm-public-followup.sh +1330 -0
- package/.agents/backend/fm-push-transition-lib.sh +168 -0
- package/.agents/backend/fm-quota-axi-lib.sh +93 -0
- package/.agents/backend/fm-quota-choose.sh +384 -0
- package/.agents/backend/fm-remote-delta-read.sh +189 -0
- package/.agents/backend/fm-remote-doctor.sh +800 -0
- package/.agents/backend/fm-remote-entrypoint.sh +193 -0
- package/.agents/backend/fm-remote-file.sh +234 -0
- package/.agents/backend/fm-remote-home-provision.sh +259 -0
- package/.agents/backend/fm-remote-home-seed.sh +259 -0
- package/.agents/backend/fm-remote-inherit-push.sh +90 -0
- package/.agents/backend/fm-remote-inherit.sh +179 -0
- package/.agents/backend/fm-remote-job-lib.sh +1241 -0
- package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
- package/.agents/backend/fm-remote-job-worker.sh +1124 -0
- package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
- package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
- package/.agents/backend/fm-review-diff.sh +158 -0
- package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
- package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
- package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
- package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
- package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
- package/.agents/backend/fm-secondmate-report.sh +88 -0
- package/.agents/backend/fm-send.sh +1059 -0
- package/.agents/backend/fm-session-lock-lib.sh +176 -0
- package/.agents/backend/fm-session-start.sh +970 -0
- package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
- package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
- package/.agents/backend/fm-sessionstart-run.sh +145 -0
- package/.agents/backend/fm-spawn.sh +3153 -0
- package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
- package/.agents/backend/fm-startup-memory-budget.sh +94 -0
- package/.agents/backend/fm-startup-network.sh +642 -0
- package/.agents/backend/fm-stow-cascade.sh +251 -0
- package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
- package/.agents/backend/fm-supervise-daemon.sh +1732 -0
- package/.agents/backend/fm-supervision-instructions.sh +215 -0
- package/.agents/backend/fm-supervision-lib.sh +90 -0
- package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
- package/.agents/backend/fm-tangle-lib.sh +53 -0
- package/.agents/backend/fm-task-inbox-lib.sh +402 -0
- package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
- package/.agents/backend/fm-teardown.sh +2922 -0
- package/.agents/backend/fm-test-isolation-proof.sh +588 -0
- package/.agents/backend/fm-test-run.sh +2191 -0
- package/.agents/backend/fm-timeout-lib.sh +141 -0
- package/.agents/backend/fm-timing-lib.sh +179 -0
- package/.agents/backend/fm-tmux-lib.sh +291 -0
- package/.agents/backend/fm-tool-update-check.sh +898 -0
- package/.agents/backend/fm-trace-context-lib.sh +227 -0
- package/.agents/backend/fm-transition-lib.sh +103 -0
- package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
- package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
- package/.agents/backend/fm-turnend-guard.sh +432 -0
- package/.agents/backend/fm-update.sh +110 -0
- package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
- package/.agents/backend/fm-voice-client.py +1373 -0
- package/.agents/backend/fm-voice-relay.py +1256 -0
- package/.agents/backend/fm-wake-drain.sh +592 -0
- package/.agents/backend/fm-wake-grant.sh +127 -0
- package/.agents/backend/fm-wake-lib.sh +1849 -0
- package/.agents/backend/fm-watch-arm.sh +602 -0
- package/.agents/backend/fm-watch-checkpoint.sh +109 -0
- package/.agents/backend/fm-watch.sh +1962 -0
- package/.agents/backend/fm-x-dismiss.sh +116 -0
- package/.agents/backend/fm-x-followup.sh +286 -0
- package/.agents/backend/fm-x-lib.sh +1000 -0
- package/.agents/backend/fm-x-link.sh +234 -0
- package/.agents/backend/fm-x-poll.sh +185 -0
- package/.agents/backend/fm-x-reply.sh +385 -0
- package/.agents/backend/fm_voice_frame.py +166 -0
- package/.agents/backend/fm_voice_records.py +574 -0
- package/.agents/backend/model-bridge.py +360 -0
- package/.agents/backend/opencode-go-bridge.py +30 -0
- package/.agents/bus/README.md +12 -0
- package/.agents/bus/messages.json +1 -0
- package/.agents/config/agents.machine.example.yaml +16 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +11 -0
- package/.agents/config/eindri-dispatch.json +67 -0
- package/.agents/config/eindri-harness +1 -0
- package/.agents/config/startup-memory-budget +1 -0
- package/.agents/filebrowser/.filebrowser.json +6 -0
- package/.agents/filebrowser/README.md +11 -0
- package/.agents/gateway/README.md +12 -0
- package/.agents/github/README.md +15 -0
- package/.agents/github/webhooks/.gitkeep +0 -0
- package/.agents/github/workflows/.gitkeep +0 -0
- package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
- package/.agents/harness/opencode/plugins/package.json +4 -0
- package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
- package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
- package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
- package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
- package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
- package/.agents/memory/README.md +46 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/migrations/0001-hodd-layout.sh +38 -0
- package/.agents/migrations/0002-a2a-mcp.sh +27 -0
- package/.agents/migrations/0003-private-data-separation.sh +121 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
- package/.agents/migrations/0005-roots-out-of-tree.sh +158 -0
- package/.agents/sandbox/Dockerfile.utgard +19 -0
- package/.agents/sandbox/README.md +14 -0
- package/.agents/sandbox/utgard.config.json +14 -0
- package/.agents/skills/README.md +59 -0
- package/.agents/skills/bragi-marketing/README.md +3 -0
- package/.agents/skills/bragi-marketing/SKILL.md +82 -0
- package/.agents/skills/eindri-homes/README.md +3 -0
- package/.agents/skills/eindri-homes/SKILL.md +291 -0
- package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
- package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
- package/.agents/skills/frigg-consent/README.md +3 -0
- package/.agents/skills/frigg-consent/SKILL.md +56 -0
- package/.agents/skills/galdr-ymirsystem/README.md +3 -0
- package/.agents/skills/galdr-ymirsystem/SKILL.md +159 -0
- package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
- package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +736 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
- package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +539 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +763 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
- package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +415 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +133 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +101 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
- package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
- package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
- package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
- package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
- package/.agents/skills/galdr-ymirsystem/assets/smidja.md +180 -0
- package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
- package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
- package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
- package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +503 -0
- package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
- package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
- package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
- package/.agents/skills/gjallarhorn-relay/README.md +3 -0
- package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
- package/.agents/skills/groa-update/SKILL.md +90 -0
- package/.agents/skills/hamr-adapters/README.md +3 -0
- package/.agents/skills/hamr-adapters/SKILL.md +123 -0
- package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
- package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
- package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
- package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
- package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
- package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
- package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
- package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
- package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
- package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
- package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
- package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
- package/.agents/skills/herdr-panes/README.md +3 -0
- package/.agents/skills/herdr-panes/SKILL.md +92 -0
- package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
- package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
- package/.agents/skills/hnoss-design/DESIGN.md +19 -0
- package/.agents/skills/hnoss-design/README.md +3 -0
- package/.agents/skills/hnoss-design/SKILL.md +83 -0
- package/.agents/skills/hvild-afk/README.md +3 -0
- package/.agents/skills/hvild-afk/SKILL.md +241 -0
- package/.agents/skills/jord-projects/README.md +3 -0
- package/.agents/skills/jord-projects/SKILL.md +92 -0
- package/.agents/skills/lifecycle/SKILL.md +56 -0
- package/.agents/skills/lifecycle/smoke_test.sh +57 -0
- package/.agents/skills/lifecycle/start.sh +21 -0
- package/.agents/skills/lifecycle/status.sh +35 -0
- package/.agents/skills/lifecycle/stop.sh +16 -0
- package/.agents/skills/muninn-stow/README.md +3 -0
- package/.agents/skills/muninn-stow/SKILL.md +309 -0
- package/.agents/skills/no-mistakes/SKILL.md +379 -0
- package/.agents/skills/nornir-schedule/README.md +3 -0
- package/.agents/skills/nornir-schedule/SKILL.md +25 -0
- package/.agents/skills/nornir-schedule/assets/events.md +137 -0
- package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
- package/.agents/skills/nsr-compliance/README.md +3 -0
- package/.agents/skills/nsr-compliance/SKILL.md +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/pr-ops/README.md +3 -0
- package/.agents/skills/pr-ops/SKILL.md +109 -0
- package/.agents/skills/ratatoskr-a2a/README.md +3 -0
- package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
- package/.agents/skills/rules-check-drift/SKILL.md +81 -0
- package/.agents/skills/saga-bearings/README.md +3 -0
- package/.agents/skills/saga-bearings/SKILL.md +26 -0
- package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
- package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
- package/.agents/skills/saga-bearings/assets/recap.md +56 -0
- package/.agents/skills/syn-recovery/README.md +3 -0
- package/.agents/skills/syn-recovery/SKILL.md +54 -0
- package/.agents/skills/tyr-check/README.md +3 -0
- package/.agents/skills/tyr-check/SKILL.md +218 -0
- package/.agents/skills/urdh-hold/README.md +3 -0
- package/.agents/skills/urdh-hold/SKILL.md +25 -0
- package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
- package/.agents/skills/urdh-hold/assets/hold.md +54 -0
- package/.agents/skills/vor-diagnostics/README.md +3 -0
- package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
- package/.agents/skills/ymir-host/README.md +3 -0
- package/.agents/skills/ymir-host/SKILL.md +35 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -0
- package/.agents/skills/ymir-host/assets/install.md +69 -0
- package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
- package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
- package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
- package/.agents/skills/ymir-host/assets/update.md +64 -0
- package/.agents/tests/assets/board-render-harness.mjs +117 -0
- package/.agents/tests/cmux-test-safety.sh +51 -0
- package/.agents/tests/fixtures.sh +291 -0
- package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
- package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
- package/.agents/tests/fm-afk-launch.test.sh +961 -0
- package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
- package/.agents/tests/fm-afk-return.test.sh +283 -0
- package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
- package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
- package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
- package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
- package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
- package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
- package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
- package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
- package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
- package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
- package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
- package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
- package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
- package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
- package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
- package/.agents/tests/fm-backend-orca.test.sh +1357 -0
- package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
- package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
- package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
- package/.agents/tests/fm-backend.test.sh +1142 -0
- package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
- package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
- package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
- package/.agents/tests/fm-bearings-board.test.sh +414 -0
- package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
- package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
- package/.agents/tests/fm-bootstrap.test.sh +1178 -0
- package/.agents/tests/fm-branch-supervision.test.sh +552 -0
- package/.agents/tests/fm-brief.test.sh +785 -0
- package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
- package/.agents/tests/fm-busy-state.test.sh +465 -0
- package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
- package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
- package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
- package/.agents/tests/fm-check-unregister.test.sh +198 -0
- package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
- package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
- package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
- package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
- package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
- package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
- package/.agents/tests/fm-composer-ghost.test.sh +716 -0
- package/.agents/tests/fm-composer-lib.test.sh +666 -0
- package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
- package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
- package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
- package/.agents/tests/fm-control.test.sh +910 -0
- package/.agents/tests/fm-crew-state.test.sh +1610 -0
- package/.agents/tests/fm-cursor-harness.test.sh +404 -0
- package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
- package/.agents/tests/fm-cursor-primary.test.sh +708 -0
- package/.agents/tests/fm-daemon.test.sh +2740 -0
- package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
- package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
- package/.agents/tests/fm-extension-binding.test.sh +2187 -0
- package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
- package/.agents/tests/fm-fleet-sync.test.sh +721 -0
- package/.agents/tests/fm-gate-refuse.test.sh +356 -0
- package/.agents/tests/fm-gitignore-config.test.sh +89 -0
- package/.agents/tests/fm-gotmp.test.sh +230 -0
- package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
- package/.agents/tests/fm-grok-harness.test.sh +117 -0
- package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
- package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
- package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
- package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
- package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
- package/.agents/tests/fm-herdr-lab.test.sh +243 -0
- package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
- package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
- package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
- package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
- package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
- package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
- package/.agents/tests/fm-kimi-harness.test.sh +687 -0
- package/.agents/tests/fm-lint-workflows.test.sh +532 -0
- package/.agents/tests/fm-lint.test.sh +1023 -0
- package/.agents/tests/fm-muse-harness.test.sh +932 -0
- package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
- package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
- package/.agents/tests/fm-on.test.sh +507 -0
- package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
- package/.agents/tests/fm-operational-input.test.sh +160 -0
- package/.agents/tests/fm-peek-remote.test.sh +110 -0
- package/.agents/tests/fm-pending-reply.test.sh +1288 -0
- package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
- package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
- package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
- package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
- package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
- package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
- package/.agents/tests/fm-pr-merge.test.sh +2135 -0
- package/.agents/tests/fm-procevent-quota.test.sh +225 -0
- package/.agents/tests/fm-procevent-when.test.sh +406 -0
- package/.agents/tests/fm-procevent.test.sh +1745 -0
- package/.agents/tests/fm-project-origin.test.sh +110 -0
- package/.agents/tests/fm-public-followup.test.sh +2272 -0
- package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
- package/.agents/tests/fm-quota-choose.test.sh +626 -0
- package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
- package/.agents/tests/fm-remote-doctor.test.sh +625 -0
- package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
- package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
- package/.agents/tests/fm-remote-job.test.sh +768 -0
- package/.agents/tests/fm-remote-reply.test.sh +520 -0
- package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
- package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
- package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
- package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
- package/.agents/tests/fm-review-diff.test.sh +176 -0
- package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
- package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
- package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
- package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
- package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
- package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
- package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
- package/.agents/tests/fm-send-inbox.test.sh +352 -0
- package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
- package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
- package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
- package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
- package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
- package/.agents/tests/fm-send-settle.test.sh +147 -0
- package/.agents/tests/fm-send-strict.test.sh +241 -0
- package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
- package/.agents/tests/fm-session-start.test.sh +2515 -0
- package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
- package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
- package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
- package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
- package/.agents/tests/fm-spawn-batch.test.sh +148 -0
- package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
- package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
- package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
- package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
- package/.agents/tests/fm-startup-network.test.sh +712 -0
- package/.agents/tests/fm-stow-cascade.test.sh +370 -0
- package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
- package/.agents/tests/fm-supervision-events.test.sh +156 -0
- package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
- package/.agents/tests/fm-tangle-guard.test.sh +277 -0
- package/.agents/tests/fm-task-delivery.test.sh +420 -0
- package/.agents/tests/fm-task-inbox.test.sh +513 -0
- package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
- package/.agents/tests/fm-teardown.test.sh +2665 -0
- package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
- package/.agents/tests/fm-test-fixtures.test.sh +132 -0
- package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
- package/.agents/tests/fm-test-run.test.sh +1196 -0
- package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
- package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
- package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
- package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
- package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
- package/.agents/tests/fm-transition-lib.test.sh +54 -0
- package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
- package/.agents/tests/fm-update.test.sh +304 -0
- package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
- package/.agents/tests/fm-voice-relay.test.sh +4741 -0
- package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
- package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
- package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
- package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
- package/.agents/tests/fm-wake-queue.test.sh +1224 -0
- package/.agents/tests/fm-watch-arm.test.sh +821 -0
- package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
- package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
- package/.agents/tests/fm-watch-triage.test.sh +3889 -0
- package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
- package/.agents/tests/fm-x-mode.test.sh +3042 -0
- package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
- package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
- package/.agents/tests/herdr-test-safety.sh +42 -0
- package/.agents/tests/lib.sh +315 -0
- package/.agents/tests/remote-herdr-fixture.sh +125 -0
- package/.agents/tests/secondmate-helpers.sh +193 -0
- package/.agents/tests/smoke.test.sh +93 -0
- package/.agents/tests/wake-helpers.sh +338 -0
- package/.agents/tests/zellij-test-safety.sh +60 -0
- package/.agents/tools/README.md +10 -0
- package/.agents/tools/bin/tasks-cli +267 -0
- package/.agents/tools/tasks-cli.ts +216 -0
- package/AGENTS.md +498 -0
- package/CHANGELOG.md +1913 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +114 -60
- package/RULES/01-domains.md +51 -0
- package/RULES/02-agents.md +78 -0
- package/RULES/03-houses.md +61 -0
- package/RULES/04-hoard.md +97 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +108 -0
- package/RULES/07-config.md +101 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/09-electron.md +58 -0
- package/RULES/README.md +22 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +133 -0
- package/bin/a2a-serve.py +103 -0
- package/bin/a2a-serve.sh +8 -0
- package/bin/a2a-talk.sh +50 -0
- package/bin/a2abridge-ensure.sh +108 -0
- package/bin/agent-run.sh +43 -0
- package/bin/agents-config.sh +256 -0
- package/bin/apodex-smoke-test.sh +105 -0
- package/bin/bifrost-bridge.sh +131 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +112 -0
- package/bin/bootstrap-windows.ps1 +112 -0
- package/bin/branch-guard.sh +64 -0
- package/bin/brokk +73 -0
- package/bin/brokk-classify-lib.sh +1770 -0
- package/bin/brokk-lease-lib.sh +222 -0
- package/bin/brokk-lease.sh +193 -0
- package/bin/brokk-lint.sh +65 -0
- package/bin/brokk-send.sh +51 -0
- package/bin/brokk-update.sh +9 -0
- package/bin/brokk-wake-grant.sh +127 -0
- package/bin/brokk-wake-lib.sh +1849 -0
- package/bin/changelog-assemble.sh +154 -0
- package/bin/changelog-guard.sh +197 -0
- package/bin/crash-sense.sh +173 -0
- package/bin/design-check.sh +80 -0
- package/bin/design-icon.sh +153 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +225 -0
- package/bin/eindri-acclaim.sh +47 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seat.sh +83 -0
- package/bin/eindri-seen.sh +54 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +98 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +158 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/feature-inventory.sh +73 -0
- package/bin/fleet-apply.sh +81 -0
- package/bin/github-deploy.sh +94 -0
- package/bin/gjallarhorn-expose.sh +136 -0
- package/bin/gjallarhorn-notify.sh +71 -0
- package/bin/gjallarhorn-purge.sh +67 -0
- package/bin/gjallarhorn-tunnel.sh +85 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +130 -0
- package/bin/hall-snapshot.sh +111 -0
- package/bin/hamr-harness.sh +246 -0
- package/bin/heimdall-ssh-keys.sh +374 -0
- package/bin/herdr-agents.py +44 -0
- package/bin/herdr-ensure.sh +104 -0
- package/bin/herdr-run.sh +452 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hlidskjalf-agents.sh +172 -0
- package/bin/hlidskjalf-usage.sh +196 -0
- package/bin/hoard-guard.sh +135 -0
- package/bin/hoard-lib.sh +105 -0
- package/bin/hodd.sh +102 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +121 -0
- package/bin/local-model-lock.sh +70 -0
- package/bin/mimir-bridge.py +259 -0
- package/bin/mimir-bridge.sh +100 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir-reflect.sh +27 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +72 -0
- package/bin/mjollnir.sh +104 -0
- package/bin/model-hardware.sh +96 -0
- package/bin/model-resolve.sh +160 -0
- package/bin/models-detect.sh +178 -0
- package/bin/nornir-cron-start.sh +162 -0
- package/bin/nornir-job-daily-briefing.sh +191 -0
- package/bin/nornir-job-git-sync.sh +152 -0
- package/bin/nornir-job-hall-snapshot.sh +28 -0
- package/bin/nornir-job-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-nsr-compliance.sh +54 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/npm-publish.sh +136 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +161 -0
- package/bin/omarchy-plugins.sh +187 -0
- package/bin/omarchy-sense.sh +162 -0
- package/bin/perm-guard.sh +30 -0
- package/bin/pi-agent.sh +68 -0
- package/bin/pi-ensure.sh +77 -0
- package/bin/pi-local.sh +37 -0
- package/bin/pi-model-agnostic.sh +71 -0
- package/bin/pi-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +58 -0
- package/bin/project-git.sh +69 -0
- package/bin/public-guard.sh +71 -0
- package/bin/ratatoskr.sh +49 -0
- package/bin/realm-lib.sh +32 -0
- package/bin/repo-scrub.sh +62 -0
- package/bin/rodd-operational-input.sh +250 -0
- package/bin/runes-append.sh +198 -0
- package/bin/saga-session-start.sh +172 -0
- package/bin/saga-sessionstart-run.sh +79 -0
- package/bin/saga-wake-drain.sh +41 -0
- package/bin/secret-guard.sh +63 -0
- package/bin/sessrumnir-ensure.sh +100 -0
- package/bin/sessrumnir-sync.sh +237 -0
- package/bin/sessrumnir.sh +104 -0
- package/bin/skillopt-setup.sh +76 -0
- package/bin/skuld-branch-outcome.sh +203 -0
- package/bin/skuld-branch-prompt.sh +101 -0
- package/bin/smidja-bootstrap.sh +94 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +89 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-spawn-pretool-check.sh +58 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +203 -0
- package/bin/telegram-bot.sh +82 -0
- package/bin/toolchain.sh +74 -0
- package/bin/ui-truth-check.sh +75 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +298 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +60 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +163 -0
- package/bin/wyrd-db.sh +47 -0
- package/bin/yggdrasil.sh +152 -0
- package/bin/ymir-edit.sh +145 -0
- package/bin/ymir-install.sh +806 -0
- package/bin/ymir-invite.sh +93 -0
- package/bin/ymir-isolation.sh +88 -0
- package/bin/ymir-migrate.sh +61 -0
- package/bin/ymir-plan.sh +356 -0
- package/bin/ymir-platform.sh +348 -0
- package/bin/ymir-say.sh +110 -0
- package/bin/ymir-setup-auth.sh +119 -0
- package/bin/ymir-validate.sh +193 -0
- package/bin/ymir.js +74 -16
- package/docs/Architecture.md +339 -0
- package/docs/design.md +351 -0
- package/docs/installations/README.md +63 -0
- package/docs/installations/ymir-home.md +93 -0
- package/docs/integration.md +105 -0
- package/docs/lore.md +1060 -0
- package/docs/research/agent-harnesses.md +290 -0
- package/docs/runbooks/README.md +19 -0
- package/docs/runbooks/a2a.md +91 -0
- package/docs/runbooks/agent-permissions.md +99 -0
- package/docs/runbooks/agents.md +57 -0
- package/docs/runbooks/models.md +69 -0
- package/docs/runbooks/realm-onboarding.md +60 -0
- package/docs/runbooks/secrets-and-hoard.md +60 -0
- package/docs/runbooks/updates-and-migrations.md +110 -0
- package/docs/runbooks/worktrees-isolation.md +72 -0
- package/docs/session-start.md +105 -0
- package/docs/skillopt-integration.md +321 -0
- package/docs/sync-system.md +66 -0
- package/docs/workspaces.md +104 -0
- package/docs/ymir-rut.md +260 -0
- package/package.json +54 -14
- package/packaging/build.sh +74 -0
- package/packaging/macos/Ymir Installer.command +43 -0
- package/packaging/windows/ymir-setup.nsi +74 -0
- package/scripts/README.md +22 -0
- package/scripts/electron.sh +269 -0
- package/scripts/lower.sh +34 -0
- package/scripts/raise.sh +42 -0
- package/scripts/start.sh +217 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# eir-doctor.sh — Eir, the healer: diagnose the running system, then mend it.
|
|
3
|
+
#
|
|
4
|
+
# Eir composes the surfaces that already own their health — she does not
|
|
5
|
+
# re-implement them. `check` (default) reports each surface; `fix` runs the
|
|
6
|
+
# matching repair path for the broken ones. She never arms supervision (the
|
|
7
|
+
# harness extension owns that) and never touches a tracked tree.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# eir-doctor.sh [check] # diagnose every surface, aggregate TOON
|
|
11
|
+
# eir-doctor.sh fix # mend what can be mended safely, then re-check
|
|
12
|
+
# eir-doctor.sh --version
|
|
13
|
+
set -u
|
|
14
|
+
|
|
15
|
+
VERSION="1.0.0"
|
|
16
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
17
|
+
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
18
|
+
YMIR_HOME="${YMIR_HOME:-$HOME/Documents/Ymir}"
|
|
19
|
+
STATE="${BROKK_STATE_OVERRIDE:-$YMIR_HOME/state}"
|
|
20
|
+
|
|
21
|
+
case "${1-}" in -v|-V|--version) printf '%s\n' "$VERSION"; exit 0 ;; -h|--help|"") sed -n '2,15p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; esac
|
|
22
|
+
ACTION="${1:-check}"; shift || true
|
|
23
|
+
|
|
24
|
+
have() { command -v "$1" >/dev/null 2>&1; }
|
|
25
|
+
say_ok() { return 0; }
|
|
26
|
+
|
|
27
|
+
# Each surface: `s_<name>` = healthy? (exit 0), `f_<name>` = the repair.
|
|
28
|
+
SURFACES=(floors herdr a2abridge hermes sessrumnir well mcp lock migrations hoard)
|
|
29
|
+
|
|
30
|
+
s_floors() { [ -x "$SCRIPT_DIR/prereq-ensure.sh" ] && "$SCRIPT_DIR/prereq-ensure.sh" status >/dev/null 2>&1; }
|
|
31
|
+
f_floors() { "$SCRIPT_DIR/prereq-ensure.sh" ensure --install >/dev/null 2>&1; }
|
|
32
|
+
s_herdr() { [ -x "$SCRIPT_DIR/herdr-ensure.sh" ] && "$SCRIPT_DIR/herdr-ensure.sh" status >/dev/null 2>&1; }
|
|
33
|
+
f_herdr() { "$SCRIPT_DIR/herdr-ensure.sh" ensure --install >/dev/null 2>&1; }
|
|
34
|
+
s_a2abridge() { [ -x "$SCRIPT_DIR/a2abridge-ensure.sh" ] && "$SCRIPT_DIR/a2abridge-ensure.sh" status >/dev/null 2>&1; }
|
|
35
|
+
f_a2abridge() { "$SCRIPT_DIR/a2abridge-ensure.sh" ensure --install >/dev/null 2>&1; }
|
|
36
|
+
s_hermes() { [ -x "$SCRIPT_DIR/hermes-ensure.sh" ] && "$SCRIPT_DIR/hermes-ensure.sh" status >/dev/null 2>&1; }
|
|
37
|
+
f_hermes() { "$SCRIPT_DIR/hermes-ensure.sh" ensure --install >/dev/null 2>&1; }
|
|
38
|
+
s_sessrumnir(){ [ -x "$SCRIPT_DIR/sessrumnir-ensure.sh" ] && "$SCRIPT_DIR/sessrumnir-ensure.sh" status >/dev/null 2>&1; }
|
|
39
|
+
f_sessrumnir(){ "$SCRIPT_DIR/sessrumnir-ensure.sh" ensure --install >/dev/null 2>&1; }
|
|
40
|
+
s_well() { [ -x "$SCRIPT_DIR/mimir.sh" ] && "$SCRIPT_DIR/mimir.sh" health >/dev/null 2>&1; }
|
|
41
|
+
f_well() { "$SCRIPT_DIR/mimir.sh" start >/dev/null 2>&1; }
|
|
42
|
+
# MCP: both A2A servers wired into opencode + pi.
|
|
43
|
+
s_mcp() {
|
|
44
|
+
local pi="$HOME/.pi/agent/mcp.json" oc="$ROOT/opencode.json"
|
|
45
|
+
[ -f "$oc" ] || return 1
|
|
46
|
+
grep -q '"engram"' "$oc" 2>/dev/null && grep -q '"a2abridge"' "$oc" 2>/dev/null || return 1
|
|
47
|
+
if [ -f "$pi" ]; then grep -q '"a2abridge"' "$pi" 2>/dev/null || return 1; fi
|
|
48
|
+
return 0
|
|
49
|
+
}
|
|
50
|
+
f_mcp() { [ -x "$SCRIPT_DIR/a2a-mcp.sh" ] && "$SCRIPT_DIR/a2a-mcp.sh" install >/dev/null 2>&1; }
|
|
51
|
+
# Lock: absent, or held by a live pid.
|
|
52
|
+
s_lock() {
|
|
53
|
+
local f="$STATE/.lock" pid
|
|
54
|
+
[ -r "$f" ] || return 0
|
|
55
|
+
pid="$(tr -d '[:space:]' <"$f" 2>/dev/null || true)"
|
|
56
|
+
[ -n "$pid" ] || return 0
|
|
57
|
+
kill -0 "$pid" 2>/dev/null
|
|
58
|
+
}
|
|
59
|
+
f_lock() {
|
|
60
|
+
local f="$STATE/.lock" pid
|
|
61
|
+
if [ -r "$f" ]; then
|
|
62
|
+
pid="$(tr -d '[:space:]' <"$f" 2>/dev/null || true)"
|
|
63
|
+
if [ -n "$pid" ] && ! kill -0 "$pid" 2>/dev/null; then
|
|
64
|
+
rm -f "$f" "$STATE/.lock-path"
|
|
65
|
+
# A stale arm marker with no live session would silence the turn-end guard.
|
|
66
|
+
rm -f "$STATE/.supervision-armed" "$STATE/.watch.heartbeat"
|
|
67
|
+
fi
|
|
68
|
+
fi
|
|
69
|
+
}
|
|
70
|
+
s_migrations(){ [ ! -x "$SCRIPT_DIR/ymir-migrate.sh" ] || "$SCRIPT_DIR/ymir-migrate.sh" status >/dev/null 2>&1; }
|
|
71
|
+
f_migrations(){ [ -x "$SCRIPT_DIR/ymir-migrate.sh" ] && "$SCRIPT_DIR/ymir-migrate.sh" apply >/dev/null 2>&1; }
|
|
72
|
+
# Hoard: private data sits under the hoard, and .ymir-layout.yaml tells the truth.
|
|
73
|
+
# Two failures this catches: (1) a declared layout path that does not exist — a
|
|
74
|
+
# stale map is what lets private work land outside the hoard; (2) a flat
|
|
75
|
+
# $YMIR_HOME/{identity,data,docs,secrets,tenants} duplicate beside hodd/ — the
|
|
76
|
+
# drift that RULES/04-hoard.md (correction 2026-09-17) forbids.
|
|
77
|
+
_hoard_root() { local r; if [ -x "$SCRIPT_DIR/hoard-lib.sh" ]; then . "$SCRIPT_DIR/hoard-lib.sh"; hoard_root r; printf '%s' "$r"; else printf '%s' "${YMIR_HOARD:-$YMIR_HOME/hodd}"; fi; }
|
|
78
|
+
s_hoard() {
|
|
79
|
+
local h; h="$(_hoard_root)"
|
|
80
|
+
[ -d "$h" ] || return 1
|
|
81
|
+
local lay="$YMIR_HOME/.ymir-layout.yaml" k p
|
|
82
|
+
if [ -f "$lay" ]; then
|
|
83
|
+
for k in config secrets identity workspaces memory smidja state data; do
|
|
84
|
+
p="$(sed -nE "s/^ $k: \"([^\"]+)\".*/\1/p" "$lay" | head -1)"
|
|
85
|
+
[ -n "$p" ] && [ ! -d "$p" ] && return 1
|
|
86
|
+
done
|
|
87
|
+
fi
|
|
88
|
+
for k in identity data docs secrets tenants; do
|
|
89
|
+
[ -d "$YMIR_HOME/$k" ] && return 1
|
|
90
|
+
done
|
|
91
|
+
return 0
|
|
92
|
+
}
|
|
93
|
+
f_hoard() {
|
|
94
|
+
local h; h="$(_hoard_root)"
|
|
95
|
+
mkdir -p "$h" 2>/dev/null || return 1
|
|
96
|
+
# A flat duplicate beside hodd/ is the drift: merge it in, never clobber.
|
|
97
|
+
local k
|
|
98
|
+
for k in identity data docs secrets tenants; do
|
|
99
|
+
local src="$YMIR_HOME/$k"
|
|
100
|
+
[ -d "$src" ] || continue
|
|
101
|
+
mkdir -p "$h/$k" 2>/dev/null || continue
|
|
102
|
+
cp -an "$src/." "$h/$k/" 2>/dev/null || true
|
|
103
|
+
rm -rf "$src" 2>/dev/null || true
|
|
104
|
+
done
|
|
105
|
+
# A layout entry naming a nonexistent dir is repointed at the hoard.
|
|
106
|
+
local lay="$YMIR_HOME/.ymir-layout.yaml" k2 p
|
|
107
|
+
if [ -f "$lay" ] && [ -d "$h" ]; then
|
|
108
|
+
for k2 in identity data secrets docs tenants; do
|
|
109
|
+
p="$(sed -nE "s/^ $k2: \"([^\"]+)\".*/\1/p" "$lay" | head -1)"
|
|
110
|
+
if [ -n "$p" ] && [ ! -d "$p" ]; then
|
|
111
|
+
sed -i "s|^ $k2: .*| $k2: \"$h/$k2\"|" "$lay"
|
|
112
|
+
fi
|
|
113
|
+
done
|
|
114
|
+
fi
|
|
115
|
+
s_hoard
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
detail() { # <name> -> one short fact
|
|
119
|
+
case "$1" in
|
|
120
|
+
floors) "[ -x $SCRIPT_DIR/prereq-ensure.sh ] && echo tool floors" ;;
|
|
121
|
+
herdr) "have herdr && herdr --version 2>/dev/null | head -1 || echo 'herdr absent'" ;;
|
|
122
|
+
a2abridge) "have a2abridge && a2abridge --version 2>/dev/null | head -1 || echo 'engine absent'" ;;
|
|
123
|
+
hermes) "have hermes && echo present || echo absent" ;;
|
|
124
|
+
sessrumnir)"[ -d $ROOT/apps/sessrumnir/out ] && echo built || echo 'not built'" ;;
|
|
125
|
+
well) "echo 'engram :4602'" ;;
|
|
126
|
+
mcp) "echo 'a2abridge + engram'" ;;
|
|
127
|
+
lock) "cat $STATE/.lock 2>/dev/null | tr -d '[:space:]' | sed 's/^/pid /' || echo none" ;;
|
|
128
|
+
migrations)"echo 'structure'" ;;
|
|
129
|
+
hoard) "printf 'hoard %s' \"$(_hoard_root)\" ; [ -d \"$YMIR_HOME/identity\" ] && printf ' +flat-duplicate' ; printf '\\n'" ;;
|
|
130
|
+
esac
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
broken=0
|
|
134
|
+
if [ "$ACTION" = "fix" ]; then
|
|
135
|
+
for s in "${SURFACES[@]}"; do
|
|
136
|
+
if ! "s_$s" >/dev/null 2>&1; then
|
|
137
|
+
"f_$s" >/dev/null 2>&1 && printf 'eir: mended %s\n' "$s" || printf 'eir: could not mend %s\n' "$s" >&2
|
|
138
|
+
fi
|
|
139
|
+
done
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
rows=""
|
|
143
|
+
count=0
|
|
144
|
+
for s in "${SURFACES[@]}"; do
|
|
145
|
+
if "s_$s" >/dev/null 2>&1; then state=ok; else state=broken; broken=$((broken+1)); fi
|
|
146
|
+
d="$("detail" "$s" 2>/dev/null | head -1)"
|
|
147
|
+
rows="${rows} \"${s}\",\"${state}\",\"${d}\"\n"
|
|
148
|
+
count=$((count+1))
|
|
149
|
+
done
|
|
150
|
+
|
|
151
|
+
printf 'eir[1]{action,root,broken}:\n "%s","%s",%s\n' "$ACTION" "$ROOT" "$broken"
|
|
152
|
+
printf 'health[%d]{surface,state,detail}:\n' "$count"
|
|
153
|
+
printf '%b' "$rows"
|
|
154
|
+
if [ "$broken" != 0 ]; then
|
|
155
|
+
printf 'eir: %s surface(s) need mending — run: bin/eir-doctor.sh fix\n' "$broken"
|
|
156
|
+
exit 1
|
|
157
|
+
fi
|
|
158
|
+
exit 0
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# erindi-brief.sh - scaffold an Eindri worker brief at data/<task-id>/brief.md.
|
|
3
|
+
#
|
|
4
|
+
# Erindi ("the errand") is the written errand Brokk hands an Eindri. The brief
|
|
5
|
+
# carries the Setup / Rules / Definition-of-done contract, a fixed machine-
|
|
6
|
+
# readable "Delivery contract: mode=<mode>" line, the worktree-isolation
|
|
7
|
+
# assertion, the status protocol, and the steering-inbox receive/ack section.
|
|
8
|
+
# Ported from the upstream distro brief scaffold for plan 29
|
|
9
|
+
# (docs/plans/29-brokk-distro-runtime.md).
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
# erindi-brief.sh <task-id> <repo-name> --mode <no-mistakes|direct-PR|local-only>
|
|
13
|
+
# erindi-brief.sh <task-id> <repo-name> --scout
|
|
14
|
+
# erindi-brief.sh <task-id> --relaunch
|
|
15
|
+
#
|
|
16
|
+
# --scout writes the scout contract: the deliverable is a report at
|
|
17
|
+
# data/<task-id>/report.md (no branch, no push, no PR) and the worktree is
|
|
18
|
+
# scratch.
|
|
19
|
+
# --relaunch regenerates the brief from the task's recorded state/<id>.meta so
|
|
20
|
+
# a replacement Eindri receives the SAME delivery contract as the original; it
|
|
21
|
+
# refuses to invent a mode and it will not run without an existing meta record.
|
|
22
|
+
# The fixed "Delivery contract: mode=<mode>" line is read by
|
|
23
|
+
# bin/einherjar-spawn.sh, which refuses to launch a ship task whose explicit
|
|
24
|
+
# --mode disagrees, so an adjusted brief and the recorded task cannot drift.
|
|
25
|
+
# --mode is refused on --scout and --relaunch: a scout delivers a report and a
|
|
26
|
+
# relaunch re-derives the mode from the task record, not from a flag.
|
|
27
|
+
# Refuses to overwrite an existing brief unless --relaunch is given.
|
|
28
|
+
set -eu
|
|
29
|
+
|
|
30
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
31
|
+
|
|
32
|
+
usage() {
|
|
33
|
+
awk 'NR == 1 { next } /^#/ { sub(/^# ?/, ""); print; next } { exit }' "$0"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
case "${1:-}" in
|
|
37
|
+
-h|--help) usage; exit 0 ;;
|
|
38
|
+
esac
|
|
39
|
+
|
|
40
|
+
ROOT="${BROKK_ROOT_OVERRIDE:-$(cd "$SCRIPT_DIR/.." && pwd)}"
|
|
41
|
+
BROKK_HOME="${BROKK_HOME:-${BROKK_ROOT_OVERRIDE:-$ROOT}}"
|
|
42
|
+
DATA="${BROKK_DATA_OVERRIDE:-$BROKK_HOME/data}"
|
|
43
|
+
STATE="${BROKK_STATE_OVERRIDE:-$BROKK_HOME/state}"
|
|
44
|
+
PAUSED_VERB="${BROKK_PAUSED_VERB:-paused}"
|
|
45
|
+
|
|
46
|
+
KIND=ship
|
|
47
|
+
SCOUT=0
|
|
48
|
+
RELAUNCH=0
|
|
49
|
+
MODE=
|
|
50
|
+
MODE_SET=0
|
|
51
|
+
POS=()
|
|
52
|
+
want_value=
|
|
53
|
+
for a in "$@"; do
|
|
54
|
+
if [ -n "$want_value" ]; then
|
|
55
|
+
case "$a" in
|
|
56
|
+
--*) echo "error: --$want_value requires a value" >&2; exit 1 ;;
|
|
57
|
+
esac
|
|
58
|
+
case "$want_value" in
|
|
59
|
+
mode) MODE=$a; MODE_SET=1 ;;
|
|
60
|
+
*) echo "error: internal parser state for --$want_value" >&2; exit 1 ;;
|
|
61
|
+
esac
|
|
62
|
+
want_value=
|
|
63
|
+
continue
|
|
64
|
+
fi
|
|
65
|
+
case "$a" in
|
|
66
|
+
--scout) SCOUT=1 ;;
|
|
67
|
+
--relaunch) RELAUNCH=1 ;;
|
|
68
|
+
--mode) want_value=mode ;;
|
|
69
|
+
--mode=*) MODE=${a#--mode=}; MODE_SET=1 ;;
|
|
70
|
+
--yolo|--yolo=*) echo "error: --yolo is not a brief input; pass it to bin/einherjar-spawn.sh, which records the task's merge posture" >&2; exit 1 ;;
|
|
71
|
+
*) POS+=("$a") ;;
|
|
72
|
+
esac
|
|
73
|
+
done
|
|
74
|
+
[ -z "$want_value" ] || { echo "error: --$want_value requires a value" >&2; exit 1; }
|
|
75
|
+
|
|
76
|
+
if [ "$SCOUT" -eq 1 ] && [ "$RELAUNCH" -eq 1 ]; then
|
|
77
|
+
echo "error: --scout and --relaunch are mutually exclusive" >&2
|
|
78
|
+
exit 1
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
ID=${POS[0]:-}
|
|
82
|
+
[ -n "$ID" ] || { echo "error: task-id is required" >&2; exit 2; }
|
|
83
|
+
case "$ID" in
|
|
84
|
+
*/*|.*|*' '*) echo "error: invalid task-id '$ID' (no slashes, no leading dot, no spaces)" >&2; exit 2 ;;
|
|
85
|
+
esac
|
|
86
|
+
|
|
87
|
+
meta_value() { # <meta> <key>
|
|
88
|
+
grep "^$2=" "$1" 2>/dev/null | tail -1 | cut -d= -f2- || true
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if [ "$RELAUNCH" -eq 1 ]; then
|
|
92
|
+
META="$STATE/$ID.meta"
|
|
93
|
+
[ -f "$META" ] || { echo "error: --relaunch requires an existing task record at $META" >&2; exit 1; }
|
|
94
|
+
RECORDED_KIND=$(meta_value "$META" kind); RECORDED_KIND=${RECORDED_KIND:-ship}
|
|
95
|
+
REPO=$(meta_value "$META" project)
|
|
96
|
+
[ -n "$REPO" ] || REPO=$(meta_value "$META" worktree)
|
|
97
|
+
[ -n "$REPO" ] || { echo "error: task record $META records no project; cannot regenerate the brief" >&2; exit 1; }
|
|
98
|
+
if [ "$MODE_SET" -eq 1 ]; then
|
|
99
|
+
echo "error: --mode is refused with --relaunch; the delivery mode is re-derived from $META" >&2
|
|
100
|
+
exit 1
|
|
101
|
+
fi
|
|
102
|
+
if [ "$RECORDED_KIND" = ship ]; then
|
|
103
|
+
MODE=$(meta_value "$META" mode)
|
|
104
|
+
case "$MODE" in
|
|
105
|
+
no-mistakes|direct-PR|local-only) ;;
|
|
106
|
+
*) echo "error: task record $META records no valid mode; refusing to regenerate the brief" >&2; exit 1 ;;
|
|
107
|
+
esac
|
|
108
|
+
elif [ "$RECORDED_KIND" != scout ]; then
|
|
109
|
+
echo "error: task record $META records kind=$RECORDED_KIND, which has no brief scaffold" >&2
|
|
110
|
+
exit 1
|
|
111
|
+
fi
|
|
112
|
+
KIND=$RECORDED_KIND
|
|
113
|
+
else
|
|
114
|
+
if [ "$SCOUT" -eq 1 ]; then
|
|
115
|
+
KIND=scout
|
|
116
|
+
else
|
|
117
|
+
[ "$MODE_SET" -eq 1 ] || {
|
|
118
|
+
echo "error: ship briefs require --mode <no-mistakes|direct-PR|local-only>; resolve it at intake and pass it here" >&2
|
|
119
|
+
exit 1
|
|
120
|
+
}
|
|
121
|
+
case "$MODE" in
|
|
122
|
+
no-mistakes|direct-PR|local-only) ;;
|
|
123
|
+
*) echo "error: --mode must be one of no-mistakes, direct-PR, local-only (got '$MODE')" >&2; exit 1 ;;
|
|
124
|
+
esac
|
|
125
|
+
fi
|
|
126
|
+
if [ "$MODE_SET" -eq 1 ] && [ "$SCOUT" -eq 1 ]; then
|
|
127
|
+
echo "error: --mode applies only to ship briefs; a scout delivers a report" >&2
|
|
128
|
+
exit 1
|
|
129
|
+
fi
|
|
130
|
+
REPO=${POS[1]:-}
|
|
131
|
+
[ -n "$REPO" ] || { echo "error: <repo-name> is required for a fresh brief" >&2; exit 2; }
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
BRIEF="$DATA/$ID/brief.md"
|
|
135
|
+
if [ -e "$BRIEF" ] && [ "$RELAUNCH" -ne 1 ]; then
|
|
136
|
+
echo "error: $BRIEF already exists (use --relaunch to regenerate from the task record)" >&2
|
|
137
|
+
exit 1
|
|
138
|
+
fi
|
|
139
|
+
mkdir -p "$DATA/$ID"
|
|
140
|
+
|
|
141
|
+
shell_quote() {
|
|
142
|
+
printf "'"
|
|
143
|
+
printf '%s' "$1" | sed "s/'/'\\\\''/g"
|
|
144
|
+
printf "'"
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
STATUS_FILE=$(shell_quote "$STATE/$ID.status")
|
|
148
|
+
INBOX_DIR=$(shell_quote "$STATE/$ID.inbox")
|
|
149
|
+
REPORT_FILE="$DATA/$ID/report.md"
|
|
150
|
+
|
|
151
|
+
INBOX_SECTION=$(cat <<EOF
|
|
152
|
+
# Brokk instruction inbox
|
|
153
|
+
Brokk steers you through durable message files in $INBOX_DIR.
|
|
154
|
+
When a terminal message says an instruction is waiting there - and at any natural checkpoint when you are unsure - list $INBOX_DIR/*.msg, read and act on each message in numeric order, then acknowledge each handled message by moving it: \`mv $INBOX_DIR/NNN.msg $INBOX_DIR/handled/\`.
|
|
155
|
+
The move IS the acknowledgement: without it Brokk rings again and eventually treats you as stuck. An empty or absent inbox needs no action.
|
|
156
|
+
EOF
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
STATUS_SECTION=$(cat <<EOF
|
|
160
|
+
Report status by appending one line:
|
|
161
|
+
\`echo "{state}: {one short line}" >> $STATUS_FILE\`
|
|
162
|
+
States: working, needs-decision, blocked, $PAUSED_VERB, done, failed.
|
|
163
|
+
Each append wakes Brokk, so report sparingly: only phase changes a supervisor
|
|
164
|
+
would act on and the needs-decision/blocked/$PAUSED_VERB/done/failed states.
|
|
165
|
+
Use \`$PAUSED_VERB: {why}\` - distinct from \`blocked:\` - ONLY when you are deliberately
|
|
166
|
+
idling on a known external wait you expect to clear on its own (an upstream release,
|
|
167
|
+
a rate-limit reset); use \`blocked:\` when you are stuck and need Brokk to act.
|
|
168
|
+
A mid-task \`working:\` line is nonterminal: do not end the turn after it; continue
|
|
169
|
+
until a defined \`done:\` gate under Definition of done.
|
|
170
|
+
A decision or blocker stays open until a \`resolved\` line carrying its exact key
|
|
171
|
+
lands; a later \`done:\` or \`working:\` line never closes it.
|
|
172
|
+
EOF
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
if [ "$KIND" = scout ]; then
|
|
176
|
+
cat > "$BRIEF" <<EOF
|
|
177
|
+
You are an Eindri: an autonomous worker agent managed by Brokk. Work on your own; do not wait for the Allfather.
|
|
178
|
+
|
|
179
|
+
# Task
|
|
180
|
+
{TASK}
|
|
181
|
+
|
|
182
|
+
# Delivery contract
|
|
183
|
+
Delivery contract: mode=scout
|
|
184
|
+
|
|
185
|
+
# Setup
|
|
186
|
+
You are in a disposable git worktree of $REPO at .yggdrasil/$ID on the host (under Utgard it appears at /sandbox/workspace), at a detached HEAD on a clean default branch.
|
|
187
|
+
This is a SCOUT task: the deliverable is a written report, not a PR.
|
|
188
|
+
The worktree is your laboratory - install, run, edit, and make scratch commits freely; all of it is discarded at teardown.
|
|
189
|
+
The report is the only thing that survives, so anything worth keeping must be in it.
|
|
190
|
+
|
|
191
|
+
**Verify isolation before anything else.** Run \`pwd -P\` and \`git rev-parse --show-toplevel\`; both must resolve to this disposable task worktree (host path .yggdrasil/$ID, or /sandbox/workspace under Utgard), never the primary checkout Brokk operates from.
|
|
192
|
+
If the top-level path is the primary checkout or not the worktree you were launched in, STOP - do not branch or commit here - append \`blocked: launched in primary checkout, not an isolated worktree\` to the status file and stop.
|
|
193
|
+
|
|
194
|
+
# Rules
|
|
195
|
+
1. Never push to any remote and never open a PR.
|
|
196
|
+
2. Stay inside this worktree; the only files you may write outside it are the report and the status file below.
|
|
197
|
+
3. $STATUS_SECTION
|
|
198
|
+
4. If you hit the same obstacle twice, append \`blocked: {why}\` and stop; Brokk will help.
|
|
199
|
+
5. If a decision belongs to the Allfather (product choices, destructive actions), append \`needs-decision: {summary of options}\` and stop. Brokk will reply with the decision.
|
|
200
|
+
|
|
201
|
+
$INBOX_SECTION
|
|
202
|
+
|
|
203
|
+
# Definition of done
|
|
204
|
+
Write your findings to \`$REPORT_FILE\`.
|
|
205
|
+
The report must stand alone: what you did, what you found, the evidence (commands run, output, file:line references), and what you recommend.
|
|
206
|
+
When the report is complete, append \`done: {one-line conclusion}\` to the status file and stop.
|
|
207
|
+
EOF
|
|
208
|
+
if [ "$RELAUNCH" -eq 1 ]; then
|
|
209
|
+
printf 'scaffolded: %s (scout, relaunch; replace {TASK})\n' "$BRIEF"
|
|
210
|
+
else
|
|
211
|
+
printf 'scaffolded: %s (scout; replace {TASK})\n' "$BRIEF"
|
|
212
|
+
fi
|
|
213
|
+
exit 0
|
|
214
|
+
fi
|
|
215
|
+
|
|
216
|
+
case "$MODE" in
|
|
217
|
+
direct-PR)
|
|
218
|
+
RULE1='Never push to the default branch (push only your `eindri/'"$ID"'` branch). Never merge a PR; the Glitnir human gate owns the merge.'
|
|
219
|
+
DOD_BODY='Commit your work on `eindri/'"$ID"'`. Push the branch and open a PR with `gh`. Report the PR URL: append `done: opened PR <url>` to the status file and stop. Brokk routes the PR to the Glitnir human gate; you never merge.'
|
|
220
|
+
;;
|
|
221
|
+
local-only)
|
|
222
|
+
RULE1="Never push to any remote and never open a PR. Work only on your \`eindri/$ID\` branch; Brokk merges into local \`main\` after the Allfather approves."
|
|
223
|
+
DOD_BODY="Commit your work on \`eindri/$ID\`. Append \`done: ready in branch eindri/$ID\` to the status file and stop. Brokk merges into local \`main\` after the Allfather approves."
|
|
224
|
+
;;
|
|
225
|
+
*) # no-mistakes
|
|
226
|
+
RULE1='Never push to the default branch. Never merge a PR; the Glitnir human gate owns the merge.'
|
|
227
|
+
DOD_BODY='Run the `no-mistakes` pipeline over your branch and open the PR it produces. Append `done: <PR url> (pipeline <status>)` to the status file and stop. Brokk routes the PR to the Glitnir human gate; you never merge.'
|
|
228
|
+
;;
|
|
229
|
+
esac
|
|
230
|
+
|
|
231
|
+
if [ "$MODE" = no-mistakes ]; then
|
|
232
|
+
SETUP_STEP2='
|
|
233
|
+
2. Run `no-mistakes doctor`; if it reports the repo is not initialized here, run `no-mistakes init`.'
|
|
234
|
+
else
|
|
235
|
+
SETUP_STEP2=""
|
|
236
|
+
fi
|
|
237
|
+
|
|
238
|
+
cat > "$BRIEF" <<EOF
|
|
239
|
+
You are an Eindri: an autonomous worker agent managed by Brokk. Work on your own; do not wait for the Allfather.
|
|
240
|
+
|
|
241
|
+
# Task
|
|
242
|
+
{TASK}
|
|
243
|
+
|
|
244
|
+
# Delivery contract
|
|
245
|
+
Delivery contract: mode=$MODE
|
|
246
|
+
|
|
247
|
+
# Setup
|
|
248
|
+
You are in a disposable git worktree of $REPO at .yggdrasil/$ID on the host (under Utgard it appears at /sandbox/workspace), at a detached HEAD on a clean default branch.
|
|
249
|
+
|
|
250
|
+
**Verify isolation before anything else.** Run \`pwd -P\` and \`git rev-parse --show-toplevel\`; both must resolve to this disposable task worktree (host path .yggdrasil/$ID, or /sandbox/workspace under Utgard), never the primary checkout Brokk operates from.
|
|
251
|
+
The path check is authoritative. If the top-level path is the primary checkout or not the worktree you were launched in, STOP - do not branch or commit here - append \`blocked: launched in primary checkout, not an isolated worktree\` to the status file and stop.
|
|
252
|
+
|
|
253
|
+
1. First action: create your branch: \`git checkout -b eindri/$ID\`$SETUP_STEP2
|
|
254
|
+
|
|
255
|
+
# Rules
|
|
256
|
+
1. $RULE1
|
|
257
|
+
2. Stay inside this worktree; modify nothing outside it.
|
|
258
|
+
3. $STATUS_SECTION
|
|
259
|
+
4. If you hit the same obstacle twice, append \`blocked: {why}\` and stop; Brokk will help.
|
|
260
|
+
5. If a decision belongs to the Allfather (product choices, destructive actions), append \`needs-decision: {summary of options}\` and stop. Brokk will reply with the decision.
|
|
261
|
+
|
|
262
|
+
$INBOX_SECTION
|
|
263
|
+
|
|
264
|
+
# Definition of done
|
|
265
|
+
$DOD_BODY
|
|
266
|
+
EOF
|
|
267
|
+
if [ "$RELAUNCH" -eq 1 ]; then
|
|
268
|
+
printf 'scaffolded: %s (ship, mode=%s, relaunch; replace {TASK})\n' "$BRIEF" "$MODE"
|
|
269
|
+
else
|
|
270
|
+
printf 'scaffolded: %s (ship, mode=%s; replace {TASK})\n' "$BRIEF" "$MODE"
|
|
271
|
+
fi
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# feature-inventory.sh — every feature the system CLAIMS, in one checklist.
|
|
3
|
+
#
|
|
4
|
+
# "Every single feature must work" is a hope until there is a list. This builds
|
|
5
|
+
# the list from the tree itself rather than from anyone's memory: every tool, job,
|
|
6
|
+
# skill, agent, app, workflow, service and registered project. It asserts nothing
|
|
7
|
+
# about whether they work — that is the verification pass, and it needs this
|
|
8
|
+
# inventory to exist first.
|
|
9
|
+
#
|
|
10
|
+
# bin/feature-inventory.sh # the inventory, as TOON
|
|
11
|
+
# bin/feature-inventory.sh --counts # just the tallies
|
|
12
|
+
# bin/feature-inventory.sh --verify-plan # the inventory as a checklist to fill in
|
|
13
|
+
set -u
|
|
14
|
+
|
|
15
|
+
VERSION="1.0.0"
|
|
16
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
17
|
+
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
18
|
+
HOARD="${YMIR_HOARD:-${YMIR_HOME:-$HOME/Documents/Ymir}/hodd}"
|
|
19
|
+
|
|
20
|
+
case "${1-}" in
|
|
21
|
+
-v|-V|--version) printf '%s\n' "$VERSION"; exit 0 ;;
|
|
22
|
+
-h|--help|"") sed -n '2,14p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
|
|
23
|
+
esac
|
|
24
|
+
MODE="${1:-all}"
|
|
25
|
+
|
|
26
|
+
n_tools=$(find "$ROOT/bin" -maxdepth 1 -type f \( -name '*.sh' -o -name '*.py' -o -name '*.js' \) 2>/dev/null | wc -l | tr -d ' ')
|
|
27
|
+
n_jobs=$(ls "$ROOT"/bin/nornir-job-*.sh 2>/dev/null | wc -l | tr -d ' ')
|
|
28
|
+
n_skills=$(find -L "$ROOT/.agents/skills" -mindepth 2 -maxdepth 2 -name SKILL.md 2>/dev/null | wc -l | tr -d ' ')
|
|
29
|
+
n_agents=$(ls "$ROOT"/.agents/agents/*.md 2>/dev/null | wc -l | tr -d ' ')
|
|
30
|
+
n_workflows=$(ls "$ROOT"/.github/workflows/*.yml 2>/dev/null | wc -l | tr -d ' ')
|
|
31
|
+
n_apps=$(find "$ROOT/apps" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l | tr -d ' ')
|
|
32
|
+
n_migrations=$(ls "$ROOT"/.agents/migrations/*.sh 2>/dev/null | wc -l | tr -d ' ')
|
|
33
|
+
n_projects=0
|
|
34
|
+
[ -r "$HOARD/identity/projects.yaml" ] && n_projects=$(grep -c '^ - id:' "$HOARD/identity/projects.yaml" 2>/dev/null | tr -d ' ')
|
|
35
|
+
|
|
36
|
+
if [ "$MODE" = "--counts" ]; then
|
|
37
|
+
printf 'features[8]{kind,count}:\n'
|
|
38
|
+
printf ' "tools (bin/)",%s\n' "$n_tools"
|
|
39
|
+
printf ' "nornir jobs",%s\n' "$n_jobs"
|
|
40
|
+
printf ' "skills",%s\n' "$n_skills"
|
|
41
|
+
printf ' "agents",%s\n' "$n_agents"
|
|
42
|
+
printf ' "workflows (CI)",%s\n' "$n_workflows"
|
|
43
|
+
printf ' "apps",%s\n' "$n_apps"
|
|
44
|
+
printf ' "migrations",%s\n' "$n_migrations"
|
|
45
|
+
printf ' "registered projects",%s\n' "$n_projects"
|
|
46
|
+
exit 0
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
# The checklist: one row per thing that must be proven.
|
|
50
|
+
printf 'inventory[8]{kind,count,how_proven}:\n'
|
|
51
|
+
printf ' "tools (bin/)",%s,"bash -n + --version/--help runs, exit 0"\n' "$n_tools"
|
|
52
|
+
printf ' "nornir jobs",%s,"one run each, --check or dry-run, writes as documented"\n' "$n_jobs"
|
|
53
|
+
printf ' "skills",%s,"its scripts run; its asset paths resolve (skillindex gate)"\n' "$n_skills"
|
|
54
|
+
printf ' "agents",%s,"bound into all five harnesses (harnesses gate) + a dispatch"\n' "$n_agents"
|
|
55
|
+
printf ' "workflows (CI)",%s,"YAML parses + the job runs green on the branch"\n' "$n_workflows"
|
|
56
|
+
printf ' "apps",%s,"builds, serves, wears its rune, installs its entry, opens in Electron"\n' "$n_apps"
|
|
57
|
+
printf ' "migrations",%s,"idempotent; re-run leaves the home unchanged"\n' "$n_migrations"
|
|
58
|
+
printf ' "registered projects",%s,"gh resolves the repo; PR ledger reports its PRs"\n' "$n_projects"
|
|
59
|
+
|
|
60
|
+
printf 'tools[%s]{tool}:\n' "$n_tools"
|
|
61
|
+
for f in "$ROOT"/bin/*; do
|
|
62
|
+
[ -f "$f" ] || continue
|
|
63
|
+
case "$f" in *.sh|*.py|*.js) printf ' "%s"\n' "$(basename "$f")" ;; esac
|
|
64
|
+
done
|
|
65
|
+
|
|
66
|
+
printf 'jobs[%s]{job}:\n' "$n_jobs"
|
|
67
|
+
for f in "$ROOT"/bin/nornir-job-*.sh; do [ -f "$f" ] && printf ' "%s"\n' "$(basename "$f")"; done
|
|
68
|
+
|
|
69
|
+
printf 'apps[%s]{app}:\n' "$n_apps"
|
|
70
|
+
for d in "$ROOT"/apps/*/; do [ -d "$d" ] && printf ' "%s"\n' "$(basename "$d")"; done
|
|
71
|
+
|
|
72
|
+
printf 'skills[%s]{skill,owner}:\n' "$n_skills"
|
|
73
|
+
grep -oE '^ "[a-z0-9-]+","[^"]*","[a-z]+"' "$ROOT/.agents/skills/README.md" 2>/dev/null | sed 's/^ //' || true
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# fleet-apply.sh — apply fleet-wide preferences to every registered Eindri-home.
|
|
3
|
+
#
|
|
4
|
+
# Reads `data/fleet.md` (`key: value` lines; key `ro` = on|off) and writes each
|
|
5
|
+
# into the home's gitignored `state/` (for `ro`: `state/ro`), so a single fleet
|
|
6
|
+
# setting reaches every home without dirtying any tracked tree. Remote routes are
|
|
7
|
+
# reported, not written. Galdr-style TOON.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# fleet-apply.sh [--check]
|
|
11
|
+
# fleet-apply.sh --version
|
|
12
|
+
set -u
|
|
13
|
+
|
|
14
|
+
VERSION="1.0.0"
|
|
15
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
|
+
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
17
|
+
|
|
18
|
+
# The roots that live OUTSIDE the code tree: this machine's records and the
|
|
19
|
+
# runtime state belong to the home the operator chose at installation, never in
|
|
20
|
+
# the tree — a packaged install replaces its tree on upgrade (Rule 04).
|
|
21
|
+
if [ -z "${YMIR_HOARD_LIB_LOADED:-}" ]; then
|
|
22
|
+
_yr="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
23
|
+
for _yc in "$_yr/hoard-lib.sh" "$(dirname "$_yr")/bin/hoard-lib.sh"; do
|
|
24
|
+
[ -r "$_yc" ] && { . "$_yc"; YMIR_HOARD_LIB_LOADED=1; break; }
|
|
25
|
+
done
|
|
26
|
+
unset _yr _yc
|
|
27
|
+
fi
|
|
28
|
+
hoard_state_dir YMIR_STATE_DIR
|
|
29
|
+
hoard_data_dir YMIR_DATA_DIR
|
|
30
|
+
REG="${BROKK_EINDRI_HOMES:-$YMIR_DATA_DIR/eindri-homes.md}"
|
|
31
|
+
PREFS="${BROKK_FLEET_PREFS:-$YMIR_DATA_DIR/fleet.md}"
|
|
32
|
+
CHECK=0
|
|
33
|
+
|
|
34
|
+
case "${1-}" in -v|-V|--version) printf '%s\n' "$VERSION"; exit 0 ;; -h|--help) sed -n '2,12p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;; esac
|
|
35
|
+
[ "${1-}" = "--check" ] && CHECK=1
|
|
36
|
+
|
|
37
|
+
pref() { sed -nE "s/^[[:space:]]*$1:[[:space:]]*([^[:space:]#]+).*/\1/p" "$PREFS" 2>/dev/null | head -1; }
|
|
38
|
+
|
|
39
|
+
if [ ! -f "$PREFS" ]; then
|
|
40
|
+
printf 'fleet[1]{prefs,state,detail}:\n "absent","noop","%s (no fleet preferences set)"\n' "${PREFS#"$ROOT"/}"
|
|
41
|
+
exit 0
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
ro="$(pref ro)"
|
|
45
|
+
[ -n "$ro" ] || ro=""
|
|
46
|
+
|
|
47
|
+
declare -a ROWS
|
|
48
|
+
apply_home() { # <id> <path>
|
|
49
|
+
local id="$1" p="$2"
|
|
50
|
+
[ -d "$p" ] || { ROWS+=(" \"$id\",\"$p\",\"skipped\",\"not found\""); return; }
|
|
51
|
+
if [ "$CHECK" = 1 ]; then ROWS+=(" \"$id\",\"$p\",\"would-apply\",\"ro=$ro\""); return; fi
|
|
52
|
+
if [ -n "$ro" ]; then
|
|
53
|
+
mkdir -p "$p/state"
|
|
54
|
+
printf '%s\n' "$ro" >"$p/state/ro" && ROWS+=(" \"$id\",\"$p\",\"applied\",\"ro=$ro\"") || ROWS+=(" \"$id\",\"$p\",\"failed\",\"ro\"")
|
|
55
|
+
else
|
|
56
|
+
ROWS+=(" \"$id\",\"$p\",\"noop\",\"no ro pref\"")
|
|
57
|
+
fi
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# This home is always a target.
|
|
61
|
+
apply_home "this" "$ROOT"
|
|
62
|
+
|
|
63
|
+
if [ -f "$REG" ]; then
|
|
64
|
+
while IFS= read -r line; do
|
|
65
|
+
case "$line" in '- '*) ;; *) continue ;; esac
|
|
66
|
+
id="$(printf '%s' "$line" | sed -nE 's/^- ([^ ]+).*/\1/p')"
|
|
67
|
+
host="$(printf '%s' "$line" | sed -nE 's/.*\(host: ([^;)]+).*/\1/p' | tr -d ' ')"
|
|
68
|
+
home="$(printf '%s' "$line" | sed -nE 's/.*\(.*home: ([^;)]+).*/\1/p' | tr -d ' ')"
|
|
69
|
+
[ -n "$id" ] || continue
|
|
70
|
+
if [ -n "$host" ]; then
|
|
71
|
+
ROWS+=(" \"$id\",\"remote $host\",\"skipped\",\"run bin/fleet-apply.sh on $host\""); continue
|
|
72
|
+
fi
|
|
73
|
+
[ -n "$home" ] || home="$id"
|
|
74
|
+
apply_home "$id" "$home"
|
|
75
|
+
done <"$REG"
|
|
76
|
+
else
|
|
77
|
+
ROWS+=(" \"-\",\"registry\",\"absent\",\"$REG (no Eindri-homes registered)\"")
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
printf 'fleet[%d]{id,target,state,detail}:\n' "${#ROWS[@]}"
|
|
81
|
+
printf '%s\n' "${ROWS[@]}"
|