@zerwiz/ymir 0.1.4 → 0.1.5
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/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 +290 -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 +50 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +9 -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/config/tailscale-sync.yaml +27 -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/kaia.engram +0 -0
- package/.agents/memory/kaia.engram-shm +0 -0
- package/.agents/memory/kaia.engram-wal +0 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/memory/well/episodes.jsonl +367 -0
- package/.agents/memory/well/workspace.jsonl +27 -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 +111 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -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 +158 -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 +673 -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 +496 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +571 -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 +161 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +377 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +129 -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 +96 -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 +175 -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 +360 -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 +70 -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 +52 -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 +34 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -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 +454 -0
- package/CHANGELOG.md +881 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +113 -59
- 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 +65 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +58 -0
- package/RULES/07-config.md +45 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/README.md +20 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +98 -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 +233 -0
- package/bin/apodex-smoke-test.sh +92 -0
- package/bin/bifrost-bridge.sh +112 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +107 -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 +38 -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-guard.sh +165 -0
- package/bin/crash-sense.sh +160 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +207 -0
- package/bin/eindri-acclaim.sh +34 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seen.sh +41 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +85 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +112 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/fleet-apply.sh +68 -0
- package/bin/github-deploy.sh +81 -0
- package/bin/gjallarhorn-expose.sh +102 -0
- package/bin/gjallarhorn-notify.sh +58 -0
- package/bin/gjallarhorn-purge.sh +54 -0
- package/bin/gjallarhorn-tunnel.sh +72 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +122 -0
- package/bin/hall-snapshot.sh +92 -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 +431 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hoard-lib.sh +25 -0
- package/bin/hodd.sh +78 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +108 -0
- package/bin/local-model-lock.sh +51 -0
- package/bin/mimir-bridge.py +226 -0
- package/bin/mimir-bridge.sh +87 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +59 -0
- package/bin/mjollnir.sh +85 -0
- package/bin/model-hardware.sh +82 -0
- package/bin/model-resolve.sh +147 -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-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +148 -0
- package/bin/omarchy-plugins.sh +174 -0
- package/bin/omarchy-sense.sh +149 -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-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +38 -0
- package/bin/project-git.sh +55 -0
- package/bin/public-guard.sh +70 -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 +91 -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 +90 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +76 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +190 -0
- package/bin/telegram-bot.sh +69 -0
- package/bin/toolchain.sh +74 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +260 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +47 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +150 -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 +641 -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-platform.sh +348 -0
- package/bin/ymir-say.sh +97 -0
- package/bin/ymir-setup-auth.sh +108 -0
- package/bin/ymir-validate.sh +173 -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 +1056 -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 +44 -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 +210 -0
- package/scripts/start.sh +167 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""model-bridge.py — expose a model provider to pi via an OpenAI-compatible
|
|
3
|
+
local endpoint.
|
|
4
|
+
|
|
5
|
+
Why: pi resolves models from ~/.pi/agent/models.json, which cannot read the API
|
|
6
|
+
key from the repo's .env. This bridge listens on 127.0.0.1, reads the provider
|
|
7
|
+
credential from .env, and proxies /v1/* to the selected provider. pi then just
|
|
8
|
+
registers the provider with baseUrl=http://127.0.0.1:PORT/v1 and any placeholder
|
|
9
|
+
key.
|
|
10
|
+
|
|
11
|
+
Providers (YMIR_MODEL_PROVIDER):
|
|
12
|
+
opencode-go (default) OpenCode Zen Go gateway — REQUIRES OPENCODE_GO_API_KEY
|
|
13
|
+
lmstudio LM Studio on localhost — NO KEY REQUIRED
|
|
14
|
+
openai-compatible any OpenAI-compatible server — optional key
|
|
15
|
+
|
|
16
|
+
The Allfather chooses. No provider is forced to need a key: LM Studio runs
|
|
17
|
+
entirely locally and the bridge starts with no credential at all.
|
|
18
|
+
|
|
19
|
+
Endpoints (OpenAI-compatible):
|
|
20
|
+
GET /v1/models -> model list (for pi listing)
|
|
21
|
+
POST /v1/chat/completions -> proxied (JSON or SSE stream)
|
|
22
|
+
|
|
23
|
+
Usage:
|
|
24
|
+
python3 model-bridge.py [--port 4603] [--env /path/.env] [--provider NAME]
|
|
25
|
+
|
|
26
|
+
Env:
|
|
27
|
+
YMIR_MODEL_PROVIDER opencode-go | lmstudio | openai-compatible
|
|
28
|
+
YMIR_MODEL_BASE_URL override the provider's base URL
|
|
29
|
+
YMIR_MODEL_API_KEY credential for the selected provider
|
|
30
|
+
OPENCODE_GO_API_KEY credential when provider=opencode-go
|
|
31
|
+
LMSTUDIO_BASE_URL default http://127.0.0.1:1234/v1
|
|
32
|
+
OPENCODE_GO_BASE_URL default https://opencode.ai/zen/go/v1
|
|
33
|
+
OPENCODE_GO_BRIDGE_PORT default 4603
|
|
34
|
+
"""
|
|
35
|
+
import argparse
|
|
36
|
+
import json
|
|
37
|
+
import os
|
|
38
|
+
import sys
|
|
39
|
+
import urllib.request
|
|
40
|
+
import urllib.error
|
|
41
|
+
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
|
|
42
|
+
|
|
43
|
+
DEFAULT_PORT = 4603
|
|
44
|
+
|
|
45
|
+
# Provider catalogue. `key_env` lists the env names checked, in order; an empty
|
|
46
|
+
# key requirement (lmstudio) means the bridge starts with no credential.
|
|
47
|
+
PROVIDERS = {
|
|
48
|
+
"opencode-go": {
|
|
49
|
+
"base_url": "https://opencode.ai/zen/go/v1",
|
|
50
|
+
"base_url_env": "OPENCODE_GO_BASE_URL",
|
|
51
|
+
"key_env": ["OPENCODE_GO_API_KEY", "YMIR_MODEL_API_KEY"],
|
|
52
|
+
"requires_key": True,
|
|
53
|
+
},
|
|
54
|
+
"lmstudio": {
|
|
55
|
+
"base_url": "http://127.0.0.1:1234/v1",
|
|
56
|
+
"base_url_env": "LMSTUDIO_BASE_URL",
|
|
57
|
+
"key_env": ["LMSTUDIO_API_KEY", "YMIR_MODEL_API_KEY"],
|
|
58
|
+
"requires_key": False,
|
|
59
|
+
},
|
|
60
|
+
"openai-compatible": {
|
|
61
|
+
"base_url": "",
|
|
62
|
+
"base_url_env": "YMIR_MODEL_BASE_URL",
|
|
63
|
+
"key_env": ["YMIR_MODEL_API_KEY"],
|
|
64
|
+
"requires_key": False,
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# The opencode-go catalog (from `opencode models`, 2026-08-31).
|
|
69
|
+
# Bare model ids — the gateway rejects the `opencode-go/` prefix.
|
|
70
|
+
MODELS = [
|
|
71
|
+
{"id": "deepseek-v4-flash", "contextWindow": 131072, "input": ["text"]},
|
|
72
|
+
{"id": "deepseek-v4-flash-vision-exp", "contextWindow": 131072, "input": ["text", "image"]},
|
|
73
|
+
{"id": "deepseek-v4-pro", "contextWindow": 131072, "input": ["text"]},
|
|
74
|
+
{"id": "glm-5.1", "contextWindow": 131072, "input": ["text"]},
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
# Resolved at startup.
|
|
78
|
+
KEY = ""
|
|
79
|
+
BASE_URL = ""
|
|
80
|
+
PROVIDER = "opencode-go"
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def load_env(path: str) -> dict:
|
|
84
|
+
env = {}
|
|
85
|
+
try:
|
|
86
|
+
with open(path) as f:
|
|
87
|
+
for line in f:
|
|
88
|
+
line = line.strip()
|
|
89
|
+
if not line or line.startswith("#") or "=" not in line:
|
|
90
|
+
continue
|
|
91
|
+
k, _, v = line.partition("=")
|
|
92
|
+
env[k.strip()] = v.strip().strip('"').strip("'")
|
|
93
|
+
except FileNotFoundError:
|
|
94
|
+
pass
|
|
95
|
+
return env
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def resolve_provider(env: dict, cli_provider: str | None) -> str:
|
|
99
|
+
name = (cli_provider or env.get("YMIR_MODEL_PROVIDER")
|
|
100
|
+
or os.environ.get("YMIR_MODEL_PROVIDER") or "opencode-go").strip()
|
|
101
|
+
if name not in PROVIDERS:
|
|
102
|
+
print(f"[bridge] ERROR: unknown provider '{name}'. "
|
|
103
|
+
f"Choose one of: {', '.join(PROVIDERS)}", file=sys.stderr)
|
|
104
|
+
raise SystemExit(2)
|
|
105
|
+
return name
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def resolve_base_url(env: dict, spec: dict) -> str:
|
|
109
|
+
for holder in (env, os.environ):
|
|
110
|
+
v = holder.get("YMIR_MODEL_BASE_URL")
|
|
111
|
+
if v:
|
|
112
|
+
return v
|
|
113
|
+
v = env.get(spec["base_url_env"]) or os.environ.get(spec["base_url_env"])
|
|
114
|
+
return v or spec["base_url"]
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def resolve_key(env: dict, spec: dict) -> str:
|
|
118
|
+
for name in spec["key_env"]:
|
|
119
|
+
v = env.get(name) or os.environ.get(name)
|
|
120
|
+
if v:
|
|
121
|
+
return v
|
|
122
|
+
return ""
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def is_https(url: str) -> bool:
|
|
126
|
+
return url.startswith("https://")
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def split_url(url: str) -> tuple[str, str]:
|
|
130
|
+
rest = url.split("://", 1)[1]
|
|
131
|
+
host, _, path = rest.partition("/")
|
|
132
|
+
return host, "/" + path if path else ""
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class Handler(BaseHTTPRequestHandler):
|
|
136
|
+
protocol_version = "HTTP/1.1"
|
|
137
|
+
|
|
138
|
+
def log_message(self, fmt, *args): # quieter, timestamped
|
|
139
|
+
print(f"[bridge] {self.log_date_time_string()} {fmt % args}", flush=True)
|
|
140
|
+
|
|
141
|
+
def _send(self, code: int, body: bytes, ctype: str) -> None:
|
|
142
|
+
self.send_response(code)
|
|
143
|
+
self.send_header("Content-Type", ctype)
|
|
144
|
+
self.send_header("Content-Length", str(len(body)))
|
|
145
|
+
self.end_headers()
|
|
146
|
+
self.wfile.write(body)
|
|
147
|
+
|
|
148
|
+
def _models(self) -> list:
|
|
149
|
+
# Ask the provider what it serves; fall back to the static catalogue.
|
|
150
|
+
try:
|
|
151
|
+
req = urllib.request.Request(_upstream("models"),
|
|
152
|
+
headers=_auth_headers())
|
|
153
|
+
with urllib.request.urlopen(req, timeout=10) as r:
|
|
154
|
+
data = json.loads(r.read())
|
|
155
|
+
return data.get("data", [])
|
|
156
|
+
except Exception:
|
|
157
|
+
return [{"id": m["id"], "object": "model"} for m in MODELS]
|
|
158
|
+
|
|
159
|
+
def do_GET(self):
|
|
160
|
+
if self.path.split("?")[0] == "/v1/models":
|
|
161
|
+
payload = {"object": "list", "data": self._models()}
|
|
162
|
+
self._send(200, json.dumps(payload).encode(), "application/json")
|
|
163
|
+
else:
|
|
164
|
+
self._send(404, json.dumps({"error": "not found"}).encode(), "application/json")
|
|
165
|
+
|
|
166
|
+
def do_POST(self):
|
|
167
|
+
if self.path.split("?")[0] != "/v1/chat/completions":
|
|
168
|
+
self._send(404, json.dumps({"error": "not found"}).encode(), "application/json")
|
|
169
|
+
return
|
|
170
|
+
try:
|
|
171
|
+
length = int(self.headers.get("Content-Length", 0))
|
|
172
|
+
body = self.rfile.read(length) if length else b"{}"
|
|
173
|
+
req = json.loads(body)
|
|
174
|
+
mid = req.get("model", "")
|
|
175
|
+
# opencode-go rejects the `opencode-go/` prefix; strip provider prefixes.
|
|
176
|
+
if PROVIDER == "opencode-go" and "/" in mid and mid.split("/", 1)[0] != "openai":
|
|
177
|
+
req["model"] = mid.split("/", 1)[1]
|
|
178
|
+
body = json.dumps(req).encode()
|
|
179
|
+
self._proxy(body, req.get("stream", False))
|
|
180
|
+
except Exception as e:
|
|
181
|
+
print(f"[bridge] proxy error: {e}", flush=True)
|
|
182
|
+
try:
|
|
183
|
+
self._send(500, json.dumps({"error": str(e)}).encode(), "application/json")
|
|
184
|
+
except Exception:
|
|
185
|
+
pass
|
|
186
|
+
|
|
187
|
+
def _proxy(self, body: bytes, stream: bool) -> None:
|
|
188
|
+
req = urllib.request.Request(
|
|
189
|
+
_upstream("chat/completions"),
|
|
190
|
+
data=body,
|
|
191
|
+
headers=_auth_headers(stream),
|
|
192
|
+
method="POST",
|
|
193
|
+
)
|
|
194
|
+
try:
|
|
195
|
+
resp = urllib.request.urlopen(req, timeout=300)
|
|
196
|
+
except urllib.error.HTTPError as e:
|
|
197
|
+
# Relay the provider's error verbatim so the operator sees the cause.
|
|
198
|
+
payload = e.read()
|
|
199
|
+
self._send(e.code, payload, e.headers.get("Content-Type", "application/json"))
|
|
200
|
+
return
|
|
201
|
+
self.send_response(resp.status)
|
|
202
|
+
ctype = resp.headers.get("Content-Type", "application/json")
|
|
203
|
+
self.send_header("Content-Type", ctype)
|
|
204
|
+
self.send_header("Cache-Control", "no-cache")
|
|
205
|
+
if stream:
|
|
206
|
+
# no Content-Length: frame as chunked so the client gets EOF at
|
|
207
|
+
# the terminating 0-chunk even though upstream SSE never closes
|
|
208
|
+
self.send_header("Transfer-Encoding", "chunked")
|
|
209
|
+
self.send_header("Connection", "close")
|
|
210
|
+
chunked = True
|
|
211
|
+
else:
|
|
212
|
+
cl = resp.headers.get("Content-Length")
|
|
213
|
+
if cl:
|
|
214
|
+
self.send_header("Content-Length", cl)
|
|
215
|
+
chunked = False
|
|
216
|
+
self.end_headers()
|
|
217
|
+
while True:
|
|
218
|
+
chunk = resp.read(4096)
|
|
219
|
+
if not chunk:
|
|
220
|
+
break
|
|
221
|
+
try:
|
|
222
|
+
if chunked:
|
|
223
|
+
self.wfile.write(f"{len(chunk):x}\r\n".encode() + chunk + b"\r\n")
|
|
224
|
+
else:
|
|
225
|
+
self.wfile.write(chunk)
|
|
226
|
+
self.wfile.flush()
|
|
227
|
+
except (BrokenPipeError, ConnectionResetError):
|
|
228
|
+
break # client went away; upstream closes with us
|
|
229
|
+
if chunked:
|
|
230
|
+
try:
|
|
231
|
+
self.wfile.write(b"0\r\n\r\n")
|
|
232
|
+
self.wfile.flush()
|
|
233
|
+
except (BrokenPipeError, ConnectionResetError):
|
|
234
|
+
pass
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def _upstream(suffix: str) -> str:
|
|
238
|
+
return BASE_URL.rstrip("/") + "/" + suffix
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def _auth_headers(stream: bool = False) -> dict:
|
|
242
|
+
h = {"Content-Type": "application/json",
|
|
243
|
+
"Accept": "text/event-stream" if stream else "application/json"}
|
|
244
|
+
if KEY:
|
|
245
|
+
h["Authorization"] = f"Bearer {KEY}"
|
|
246
|
+
return h
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def main() -> int:
|
|
250
|
+
ap = argparse.ArgumentParser(description=__doc__)
|
|
251
|
+
ap.add_argument("--port", type=int,
|
|
252
|
+
default=int(os.environ.get("OPENCODE_GO_BRIDGE_PORT", DEFAULT_PORT)))
|
|
253
|
+
ap.add_argument("--env", default=os.environ.get("ENV_FILE",
|
|
254
|
+
str(__import__("pathlib").Path(__file__).resolve().parents[1] / ".env")))
|
|
255
|
+
ap.add_argument("--provider", default=None,
|
|
256
|
+
help="opencode-go | lmstudio | openai-compatible")
|
|
257
|
+
args = ap.parse_args()
|
|
258
|
+
|
|
259
|
+
global KEY, BASE_URL, PROVIDER
|
|
260
|
+
env = load_env(args.env)
|
|
261
|
+
PROVIDER = resolve_provider(env, args.provider)
|
|
262
|
+
spec = PROVIDERS[PROVIDER]
|
|
263
|
+
BASE_URL = resolve_base_url(env, spec)
|
|
264
|
+
KEY = resolve_key(env, spec)
|
|
265
|
+
|
|
266
|
+
if spec["requires_key"] and not KEY:
|
|
267
|
+
print(f"[bridge] ERROR: provider '{PROVIDER}' requires a key. Set "
|
|
268
|
+
f"{' or '.join(spec['key_env'])} in {args.env}, or choose a "
|
|
269
|
+
f"keyless provider such as 'lmstudio'.", file=sys.stderr)
|
|
270
|
+
return 1
|
|
271
|
+
if not BASE_URL:
|
|
272
|
+
print(f"[bridge] ERROR: provider '{PROVIDER}' has no base URL. Set "
|
|
273
|
+
f"YMIR_MODEL_BASE_URL in {args.env}.", file=sys.stderr)
|
|
274
|
+
return 1
|
|
275
|
+
|
|
276
|
+
host, path = split_url(BASE_URL)
|
|
277
|
+
keynote = "no key required" if not KEY else f"key from {args.env}"
|
|
278
|
+
print(f"[bridge] provider '{PROVIDER}' on 127.0.0.1:{args.port}/v1 "
|
|
279
|
+
f"-> {host}{path.rstrip('/')}/chat/completions ({keynote})", flush=True)
|
|
280
|
+
|
|
281
|
+
srv = ThreadingHTTPServer(("127.0.0.1", args.port), Handler)
|
|
282
|
+
try:
|
|
283
|
+
srv.serve_forever()
|
|
284
|
+
except KeyboardInterrupt:
|
|
285
|
+
print("\n[bridge] stopped", flush=True)
|
|
286
|
+
return 0
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
if __name__ == "__main__":
|
|
290
|
+
sys.exit(main())
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""opencode-go-bridge.py — backward-compatible entry point.
|
|
3
|
+
|
|
4
|
+
The bridge grew a provider choice, so the implementation now lives in
|
|
5
|
+
`model-bridge.py`. This shim keeps every existing reference to
|
|
6
|
+
`opencode-go-bridge.py` working by delegating with `--provider opencode-go`.
|
|
7
|
+
|
|
8
|
+
Prefer `model-bridge.py` (or `bin/bifrost-bridge.sh --provider NAME`) for new
|
|
9
|
+
work; the full provider list is opencode-go, lmstudio, openai-compatible.
|
|
10
|
+
"""
|
|
11
|
+
import os
|
|
12
|
+
import sys
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def main() -> int:
|
|
16
|
+
# Load model-bridge.py by path (its name is not a valid module identifier).
|
|
17
|
+
import importlib.util
|
|
18
|
+
here = os.path.dirname(os.path.abspath(__file__))
|
|
19
|
+
spec = importlib.util.spec_from_file_location(
|
|
20
|
+
"model_bridge", os.path.join(here, "model-bridge.py"))
|
|
21
|
+
mod = importlib.util.module_from_spec(spec)
|
|
22
|
+
spec.loader.exec_module(mod)
|
|
23
|
+
# Force the legacy provider unless the caller already chose one.
|
|
24
|
+
if "--provider" not in sys.argv:
|
|
25
|
+
sys.argv += ["--provider", "opencode-go"]
|
|
26
|
+
return mod.main()
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
if __name__ == "__main__":
|
|
30
|
+
sys.exit(main())
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# RATATOSKR — Inter-Agent Message Bus
|
|
2
|
+
|
|
3
|
+
Low-latency event queue carrying messages between agents, realms, and services.
|
|
4
|
+
|
|
5
|
+
## Planned Files
|
|
6
|
+
- `protocol.ts` — `InterAgentMessage` schema (sender/recipient/type/payload/status)
|
|
7
|
+
- `messages.json` — active message queue state (exists)
|
|
8
|
+
|
|
9
|
+
## Message Flow
|
|
10
|
+
1. Broker (Redis or file-backed) dispatches messages
|
|
11
|
+
2. Inbox consumers (agents) poll for pending tasks
|
|
12
|
+
3. All messages audited to `workspace/memory/runes_audit.md`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# config/agents.<hostname>.yaml — a per-machine OVERLAY for the personal setup.
|
|
2
|
+
#
|
|
3
|
+
# Copies next to config/agents.yaml and is deep-merged over it when the
|
|
4
|
+
# hostname matches (short form, before the first dot). Override the hostname
|
|
5
|
+
# with YMIR_AGENTS_MACHINE. Use it so each machine runs its own model/harness
|
|
6
|
+
# combination from one repo. Private (gitignored); this .example is the shape.
|
|
7
|
+
|
|
8
|
+
# Example: this machine's hnoss runs a bigger local model, and its default
|
|
9
|
+
# fallback differs.
|
|
10
|
+
# agents:
|
|
11
|
+
# hnoss: { model: "llama.cpp/qwen3.6-35b-q4_k_s" }
|
|
12
|
+
# brokk: { model: opencode-go/deepseek-v4.1-flash }
|
|
13
|
+
# providers:
|
|
14
|
+
# llama.cpp:
|
|
15
|
+
# base_url: "http://127.0.0.1:8080/v1"
|
|
16
|
+
# default_model: opencode-go/deepseek-v4.1-flash
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# config/agents.yaml — the Allfather's own combination of smiths and models.
|
|
2
|
+
#
|
|
3
|
+
# THIS IS YOUR FILE. Edit it, then run: bin/agents-config.sh apply
|
|
4
|
+
# No other Ymir file hardcodes a model for you; this YAML is the one place.
|
|
5
|
+
# Any agent without its own `model:` inherits `default_model`.
|
|
6
|
+
|
|
7
|
+
version: 1
|
|
8
|
+
|
|
9
|
+
# The harness is chosen by where the model lives — local through pi, online
|
|
10
|
+
# through opencode. An agent may still name `harness:` to override the rule.
|
|
11
|
+
harness:
|
|
12
|
+
local: pi # a model on a local provider runs through pi
|
|
13
|
+
online: opencode # a hosted model runs through opencode
|
|
14
|
+
local_providers: [llama.cpp, llama-cpp, lmstudio]
|
|
15
|
+
# The same local server is named differently per harness; translate on the way.
|
|
16
|
+
providers:
|
|
17
|
+
llama.cpp: { pi: llama-cpp }
|
|
18
|
+
|
|
19
|
+
# The fallback smith for any agent that does not name a model.
|
|
20
|
+
default_model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl
|
|
21
|
+
|
|
22
|
+
# Local, keyless model servers. `apply` writes these into the project harness
|
|
23
|
+
# config (opencode.json) so a model listed here is immediately usable. A bare
|
|
24
|
+
# alias (no @quant) is auto-resolved against the server's /v1/models.
|
|
25
|
+
providers:
|
|
26
|
+
llama.cpp:
|
|
27
|
+
npm: "@ai-sdk/openai-compatible"
|
|
28
|
+
name: "llama-server (local)"
|
|
29
|
+
base_url: "http://127.0.0.1:8080/v1"
|
|
30
|
+
models:
|
|
31
|
+
# A local llama.cpp router needs the EXACT served id (the @quant suffix);
|
|
32
|
+
# `apply` resolves the bare alias below to the id the server reports.
|
|
33
|
+
- frontend-design-expert-8b
|
|
34
|
+
|
|
35
|
+
# agent name -> { model, harness?, primary? }. Omit model to inherit
|
|
36
|
+
# default_model. Omit harness to follow the local/online rule above.
|
|
37
|
+
# `primary: true` marks the agent runnable directly (mode: all), not only
|
|
38
|
+
# dispatchable by another agent.
|
|
39
|
+
agents:
|
|
40
|
+
brokk: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
41
|
+
# Hnoss the Shaper runs local (no cloud key) -> pi, and is directly runnable.
|
|
42
|
+
hnoss: { model: "llama.cpp/qwen3.6-35b-a3b@q2_k_xl", primary: true }
|
|
43
|
+
sindri: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
44
|
+
bragi: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
45
|
+
huginn: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
46
|
+
kvasir: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
47
|
+
mimir: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
48
|
+
snotra: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
49
|
+
forseti: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
50
|
+
galdr: { model: llama.cpp/qwen3.6-35b-a3b@q2_k_xl }
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# config/agents.yaml.example — TEMPLATE for the Allfather's personal setup.
|
|
2
|
+
#
|
|
3
|
+
# Installation copies this to config/agents.yaml when none exists
|
|
4
|
+
# (bin/ymir-install.sh step: host) — or run: bin/agents-config.sh init
|
|
5
|
+
# Edit config/agents.yaml, then: bin/agents-config.sh apply
|
|
6
|
+
# config/agents.yaml is gitignored: it is YOURS, private, and pushable to a
|
|
7
|
+
# private repo. Override its path with YMIR_AGENTS_YAML=/path/to/yours.yaml.
|
|
8
|
+
# Any agent without its own `model:` inherits `default_model`.
|
|
9
|
+
|
|
10
|
+
version: 1
|
|
11
|
+
|
|
12
|
+
# The harness is chosen by where the model lives — local through pi, online
|
|
13
|
+
# through opencode. An agent may still name `harness:` to override the rule.
|
|
14
|
+
harness:
|
|
15
|
+
local: pi # a model on a local provider runs through pi
|
|
16
|
+
online: opencode # a hosted model runs through opencode
|
|
17
|
+
local_providers: [llama.cpp, llama-cpp, lmstudio, apodex]
|
|
18
|
+
# The same local server is named differently per harness; translate on the way.
|
|
19
|
+
providers:
|
|
20
|
+
llama.cpp: { pi: llama-cpp }
|
|
21
|
+
|
|
22
|
+
# The fallback smith for any agent that does not name a model.
|
|
23
|
+
default_model: opencode-go/deepseek-v4.1-flash
|
|
24
|
+
|
|
25
|
+
# Local, keyless model servers. `apply` writes these into the project harness
|
|
26
|
+
# config (opencode.json) so a model listed here is immediately usable. A bare
|
|
27
|
+
# alias (no @quant) is auto-resolved against the server's /v1/models.
|
|
28
|
+
providers:
|
|
29
|
+
llama.cpp:
|
|
30
|
+
npm: "@ai-sdk/openai-compatible"
|
|
31
|
+
name: "llama-server (local)"
|
|
32
|
+
base_url: "http://127.0.0.1:8080/v1"
|
|
33
|
+
models:
|
|
34
|
+
# A local llama.cpp router needs the EXACT served id (the @quant suffix);
|
|
35
|
+
# `apply` resolves the bare alias below to the id the server reports.
|
|
36
|
+
- frontend-design-expert-8b
|
|
37
|
+
apodex:
|
|
38
|
+
npm: "@ai-sdk/openai-compatible"
|
|
39
|
+
name: "apodex-mini (local)"
|
|
40
|
+
base_url: "http://127.0.0.1:1234/v1"
|
|
41
|
+
models:
|
|
42
|
+
- apodex-1.0-mini
|
|
43
|
+
|
|
44
|
+
# agent name -> { model, harness?, primary? }. Omit model to inherit
|
|
45
|
+
# default_model. Omit harness to follow the local/online rule above.
|
|
46
|
+
# `primary: true` marks the agent runnable directly (mode: all), not only
|
|
47
|
+
# dispatchable by another agent.
|
|
48
|
+
agents:
|
|
49
|
+
brokk: { model: opencode-go/deepseek-v4.1-flash }
|
|
50
|
+
# Hnoss the Shaper runs local (no cloud key) -> pi, and is directly runnable.
|
|
51
|
+
hnoss: { model: "llama.cpp/frontend-design-expert-8b", primary: true }
|
|
52
|
+
sindri: { model: opencode-go/deepseek-v4.1-flash }
|
|
53
|
+
bragi: { model: opencode-go/deepseek-v4.1-flash }
|
|
54
|
+
huginn: { model: "apodex/apodex-1.0-mini" }
|
|
55
|
+
kvasir: { model: opencode-go/deepseek-v4.1-flash }
|
|
56
|
+
mimir: { model: opencode-go/deepseek-v4.1-flash }
|
|
57
|
+
snotra: { model: opencode-go/deepseek-v4.1-flash }
|
|
58
|
+
forseti: { model: opencode-go/deepseek-v4.1-flash }
|
|
59
|
+
galdr: { model: opencode-go/deepseek-v4.1-flash }
|
|
60
|
+
tyr: { model: opencode-go/deepseek-v4.1-flash }
|
|
61
|
+
saga: { model: opencode-go/deepseek-v4.1-flash }
|
|
62
|
+
muninn: { model: opencode-go/deepseek-v4.1-flash }
|
|
63
|
+
urdh: { model: opencode-go/deepseek-v4.1-flash }
|
|
64
|
+
frigg: { model: opencode-go/deepseek-v4.1-flash }
|
|
65
|
+
vor: { model: opencode-go/deepseek-v4.1-flash }
|
|
66
|
+
syn: { model: opencode-go/deepseek-v4.1-flash }
|
|
67
|
+
jord: { model: opencode-go/deepseek-v4.1-flash }
|
|
68
|
+
groa: { model: opencode-go/deepseek-v4.1-flash }
|
|
69
|
+
volundr: { model: opencode-go/deepseek-v4.1-flash }
|
|
70
|
+
|
|
71
|
+
# How many LOCAL models this machine may run at once (most boxes: 1).
|
|
72
|
+
local_concurrency: 1
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"rules": [
|
|
3
|
+
{
|
|
4
|
+
"when": "General coding tasks, implementation, refactoring, or bug fixes",
|
|
5
|
+
"use": { "harness": "opencode", "model": "opencode/nemotron-3-ultra-free", "effort": "medium" },
|
|
6
|
+
"why": "Nemotron 3 Ultra Free provides strong reasoning for coding tasks at no cost via opencode"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"when": "Investigation, diagnosis, planning, or ambiguous design work requiring deep reasoning",
|
|
10
|
+
"use": { "harness": "opencode", "model": "opencode/nemotron-3-ultra-free", "effort": "xhigh" },
|
|
11
|
+
"why": "Maximum reasoning for open-ended investigation and design work"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"when": "Trivial mechanical edits such as rote renames, formatting sweeps, or simple file gathering",
|
|
15
|
+
"use": { "harness": "opencode", "model": "opencode/nemotron-3-ultra-free", "effort": "low" },
|
|
16
|
+
"why": "Fast, cheap profile for narrow low-ambiguity tasks"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"default": [
|
|
20
|
+
{ "harness": "opencode", "model": "opencode/nemotron-3-ultra-free", "effort": "medium" }
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Nornir cron schedule — real jobs
|
|
2
|
+
# Format: HH:MM <command>. Started idempotently by bin/nornir-cron-start.sh at
|
|
3
|
+
# every session start. Private (gitignored).
|
|
4
|
+
|
|
5
|
+
07:00 bin/nornir-job-daily-briefing.sh
|
|
6
|
+
06:00 bin/nornir-job-observer.sh
|
|
7
|
+
00:30 bin/nornir-job-skillopt-sleep.sh
|
|
8
|
+
00:15 bin/nornir-job-memory-housekeeping.sh
|
|
9
|
+
00:00 bin/nornir-job-git-sync.sh
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"platform": "ymir",
|
|
4
|
+
"notes": "Brokk reads these rules before dispatching an Eindri and passes only concrete --harness/--model/--effort flags to bin/einherjar-spawn.sh. opencode is the primary Ymir harness; pi is the verified secondary harness. Model tokens must match a model opencode/pi can run on this host, or be omitted to use the harness default. effort values: low|medium|high|xhigh|max.",
|
|
5
|
+
"rules": [
|
|
6
|
+
{
|
|
7
|
+
"when": "General implementation, refactoring, or bug fixes in a codebase",
|
|
8
|
+
"use": [
|
|
9
|
+
{
|
|
10
|
+
"harness": "opencode",
|
|
11
|
+
"model": "opencode-go/deepseek-v4.1-flash",
|
|
12
|
+
"effort": "medium"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"why": "opencode is the primary Ymir harness; the flash model is the verified build model for implementation work"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"when": "Deep investigation, diagnosis, planning, or ambiguous design work requiring deep reasoning",
|
|
19
|
+
"use": [
|
|
20
|
+
{
|
|
21
|
+
"harness": "opencode",
|
|
22
|
+
"model": "opencode-go/deepseek-v4.1-flash",
|
|
23
|
+
"effort": "xhigh"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"why": "Maximum reasoning for open-ended investigation and design work on the primary harness"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"when": "Trivial mechanical edits such as rote renames, formatting sweeps, or simple file gathering",
|
|
30
|
+
"use": [
|
|
31
|
+
{
|
|
32
|
+
"harness": "opencode",
|
|
33
|
+
"model": "opencode-go/deepseek-v4.1-flash",
|
|
34
|
+
"effort": "low"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"why": "Fast, cheap profile for narrow low-ambiguity tasks"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"when": "Long-running autonomous or background execution: supervision branches, unattended sweeps, or persistent workers",
|
|
41
|
+
"use": [
|
|
42
|
+
{
|
|
43
|
+
"harness": "pi",
|
|
44
|
+
"effort": "medium"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"why": "Pi is the verified secondary Ymir harness for persistent and background workers; omitting model uses Pi's configured default"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"when": "The Allfather names a model, a family/quant, or a locality (local/online)",
|
|
51
|
+
"use": [
|
|
52
|
+
{
|
|
53
|
+
"resolve": "bin/model-resolve.sh resolve \"<request>\"",
|
|
54
|
+
"then": "pass the returned --harness/--model to bin/einherjar-spawn.sh"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"why": "Resolve a friendly request to an exact servable id: local -> pi, online -> opencode. If it returns unresolved (or the requested quant is unavailable, e.g. 'iq2' -> nearest), ASK the Allfather with ask_user_question; never guess. Local runs are serialized by bin/local-model-lock.sh."
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"default": [
|
|
61
|
+
{
|
|
62
|
+
"harness": "opencode",
|
|
63
|
+
"model": "opencode-go/deepseek-v4.1-flash",
|
|
64
|
+
"effort": "medium"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
opencode
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
7500
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# config/tailscale-sync.example.yaml — TEMPLATE for the Allfather's machine mesh.
|
|
2
|
+
#
|
|
3
|
+
# Copies to the private, gitignored config/tailscale-sync.yaml on install, or
|
|
4
|
+
# run: bin/tailscale-sync.sh init
|
|
5
|
+
# Override the path with YMIR_TAILSCALE_SYNC.
|
|
6
|
+
#
|
|
7
|
+
# Sync is peer-to-peer over Tailscale (rsync over ssh, addressed by MagicDNS).
|
|
8
|
+
# There is no central server and no relay unless the Allfather adds one.
|
|
9
|
+
|
|
10
|
+
machine: zerwiz
|
|
11
|
+
|
|
12
|
+
# The allowlist: only these tailnet hosts may be synced with. Use the MagicDNS
|
|
13
|
+
# name (e.g. `ymir-desktop`) or the tailnet IP.
|
|
14
|
+
peers:
|
|
15
|
+
- host: omarchy-1
|
|
16
|
+
- host: zerwizserver
|
|
17
|
+
|
|
18
|
+
# What may move. Paths are on both ends; ~ expands on each machine.
|
|
19
|
+
paths:
|
|
20
|
+
- ~/.pi/agent/models.json
|
|
21
|
+
- ~/.pi/agent/models-store.json
|
|
22
|
+
- ~/.pi/agent/settings.json
|
|
23
|
+
- ~/.pi/agent/trust.json
|
|
24
|
+
|
|
25
|
+
# auth.json holds live credentials. Leave false unless the Allfather trusts
|
|
26
|
+
# every listed peer to hold them; Tailscale encrypts the wire, not the trust.
|
|
27
|
+
include_auth: false
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SKRYMIR — Web File Browser Config
|
|
2
|
+
|
|
3
|
+
Web-based drive interface for users to view, upload, and edit workspace files.
|
|
4
|
+
|
|
5
|
+
## Planned Files
|
|
6
|
+
- `.filebrowser.json` — root config mapping `/files` route (exists)
|
|
7
|
+
- `filebrowser.db` — user auth, roles, scoped permissions (created at runtime)
|
|
8
|
+
|
|
9
|
+
## Scoping
|
|
10
|
+
- `./svartalfaheim` mounted at `/srv/realms`
|
|
11
|
+
- `./midgard` mounted at `/srv/shared`
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# BIFROST — Reverse Proxy & Gateway
|
|
2
|
+
|
|
3
|
+
HTTP routing, external traffic ingress, WebSocket tunneling, and authentication guard.
|
|
4
|
+
|
|
5
|
+
## Planned Files
|
|
6
|
+
- `nginx.conf` — routes UI, WebSocket streams, webhook listeners
|
|
7
|
+
|
|
8
|
+
## Routes
|
|
9
|
+
- `/` → Hlidskjalf portal
|
|
10
|
+
- `/files/` → Skrymir file browser
|
|
11
|
+
- `/webhooks/github` → Mjollnir issue listener
|
|
12
|
+
- `/oauth2/` → Heimdall GitHub OAuth
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# HEIMDALL & MJOLLNIR — GitHub Integration
|
|
2
|
+
|
|
3
|
+
Zero-trust GitHub CI/CD, webhook security, and autonomous Issue-to-PR pipeline.
|
|
4
|
+
|
|
5
|
+
## Webhooks
|
|
6
|
+
- `webhooks/issue_listener.ts` — receives `issues.opened` events, verifies HMAC
|
|
7
|
+
|
|
8
|
+
## Workflows
|
|
9
|
+
- `workflows/deploy-staging.yml`
|
|
10
|
+
- `workflows/deploy-production.yml`
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
- Webhooks verified via HMAC signature
|
|
14
|
+
- Secrets injected via `gh secret set` — never committed
|
|
15
|
+
- Mjollnir never force-merges
|
|
File without changes
|
|
File without changes
|