create-egregore 0.21.6 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/egregore-launcher.js +58 -6
- package/assets/egregore-launcher.sh +15 -2
- package/lib/claude-runtime.js +2 -0
- package/lib/codex-runtime.js +2 -0
- package/lib/setup.js +20 -3
- package/package.json +2 -2
- package/runtime/claude/.claude/context/commit-format.md +7 -4
- package/runtime/claude/.claude/context/handoff-claiming.md +32 -0
- package/runtime/claude/.claude/context/notification-consent.md +12 -9
- package/runtime/claude/.claude/hooks/boundary-check.sh +14 -331
- package/runtime/claude/.claude/hooks/memory-read-guard.sh +9 -1
- package/runtime/claude/.claude/rules/voice-bedrock.md +6 -2
- package/runtime/claude/.claude/settings.json +1 -1
- package/runtime/claude/.claude/skills/commit/SKILL.md +5 -3
- package/runtime/claude/.claude/skills/dark-mode/SKILL.md +48 -369
- package/runtime/claude/.claude/skills/records/SKILL.md +158 -0
- package/runtime/claude/.claude/skills/reflect/SKILL.md +50 -21
- package/runtime/claude/.claude/skills/review-pr/SKILL.md +4 -2
- package/runtime/claude/.claude/skills/save/SKILL.md +9 -3
- package/runtime/claude/.claude/skills/summon/SKILL.md +138 -207
- package/runtime/claude/.claude/skills/tui-design/SKILL.md +1 -1
- package/runtime/claude/.claude/skills/update/SKILL.md +1 -1
- package/runtime/claude/.claude/skills/view/SKILL.md +52 -16
- package/runtime/claude/.claude/skills/view/compose-scaffold.html +19 -13
- package/runtime/claude/CLAUDE.md +59 -95
- package/runtime/claude/bin/agent.sh +231 -7
- package/runtime/claude/bin/api-call.sh +44 -23
- package/runtime/claude/bin/artifact-register.sh +7 -1
- package/runtime/claude/bin/artifact-writeback.sh +1 -1
- package/runtime/claude/bin/artifacts.sh +66 -265
- package/runtime/claude/bin/attendant.sh +4 -1
- package/runtime/claude/bin/boundary-guard.cjs +1848 -0
- package/runtime/claude/bin/boundary-hook.sh +41 -0
- package/runtime/claude/bin/boundary.sh +15 -155
- package/runtime/claude/bin/capture-run.sh +32 -2
- package/runtime/claude/bin/codex-render-spec.mjs +24 -46
- package/runtime/claude/bin/codex-session-start.sh +19 -0
- package/runtime/claude/bin/codex-skill-render.mjs +18 -0
- package/runtime/claude/bin/config-get.sh +10 -1
- package/runtime/claude/bin/connect-refresh.sh +16 -0
- package/runtime/claude/bin/corpus_map.py +5 -0
- package/runtime/claude/bin/data/capabilities/claude.json +1480 -0
- package/runtime/claude/bin/genui.sh +19 -0
- package/runtime/claude/bin/graph-batch.sh +1 -1
- package/runtime/claude/bin/graph-op.sh +14 -0
- package/runtime/claude/bin/graph.sh +1 -1
- package/runtime/claude/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/claude/bin/handoff-run.sh +11 -6
- package/runtime/claude/bin/ingest-item.sh +1 -1
- package/runtime/claude/bin/ingest-surface.html +22 -4
- package/runtime/claude/bin/issue.sh +1 -1
- package/runtime/claude/bin/knowledge.sh +1 -1
- package/runtime/claude/bin/lib/card-delivery.sh +329 -0
- package/runtime/claude/bin/lib/config.sh +148 -3
- package/runtime/claude/bin/lib/context.sh +38 -67
- package/runtime/claude/bin/lib/genui-entry.py +36 -0
- package/runtime/claude/bin/lib/git-message.sh +25 -6
- package/runtime/claude/bin/lib/git-sync.sh +12 -4
- package/runtime/claude/bin/lib/greeting.sh +255 -28
- package/runtime/claude/bin/lib/handoff_meta.py +294 -0
- package/runtime/claude/bin/lib/health-footer.sh +83 -2
- package/runtime/claude/bin/lib/identity.sh +31 -10
- package/runtime/claude/bin/lib/instance-registry.sh +71 -0
- package/runtime/claude/bin/lib/local_ci_receipt.py +249 -0
- package/runtime/claude/bin/lib/metrics.sh +121 -8
- package/runtime/claude/bin/lib/notices.sh +36 -0
- package/runtime/claude/bin/lib/record_outcomes.py +729 -0
- package/runtime/claude/bin/lib/reflexes.py +267 -0
- package/runtime/claude/bin/lib/retrieval_scorecard.py +624 -0
- package/runtime/claude/bin/lib/session-record-prompt.txt +18 -0
- package/runtime/claude/bin/lib/session_record.py +3747 -0
- package/runtime/claude/bin/lib/session_trail.py +1983 -0
- package/runtime/claude/bin/lib/settings-drift.sh +8 -5
- package/runtime/claude/bin/lib/startup-restart.sh +41 -0
- package/runtime/claude/bin/lib/worktree-links.sh +92 -0
- package/runtime/claude/bin/memory-push.sh +6 -0
- package/runtime/claude/bin/merge-gate.sh +498 -0
- package/runtime/claude/bin/notify.sh +5 -2
- package/runtime/claude/bin/page-access.sh +103 -0
- package/runtime/claude/bin/person.sh +13 -2
- package/runtime/claude/bin/pi-render-spec.mjs +0 -1
- package/runtime/claude/bin/pi-spirit-discovery.mjs +34 -0
- package/runtime/claude/bin/post-update.sh +181 -0
- package/runtime/claude/bin/prime-render-spec.mjs +0 -1
- package/runtime/claude/bin/publish-artifact.sh +89 -42
- package/runtime/claude/bin/qa-inventory.sh +2 -2
- package/runtime/claude/bin/quest.sh +1 -1
- package/runtime/claude/bin/records.sh +11 -0
- package/runtime/claude/bin/reflexes/05-vitals.sh +9 -0
- package/runtime/claude/bin/reflexes/10-open-items.sh +12 -0
- package/runtime/claude/bin/reflexes/15-retrieval.sh +8 -0
- package/runtime/claude/bin/reflexes/20-nightly.sh +100 -0
- package/runtime/claude/bin/reflexes/20-sandbox.sh +85 -0
- package/runtime/claude/bin/reflexes/30-cost.py +116 -0
- package/runtime/claude/bin/reflexes/40-shells.py +51 -0
- package/runtime/claude/bin/reflexes/README.md +61 -0
- package/runtime/claude/bin/reflexes.sh +7 -0
- package/runtime/claude/bin/runtime-identity.sh +140 -42
- package/runtime/claude/bin/screenshot.sh +77 -0
- package/runtime/claude/bin/scroll.sh +1 -1
- package/runtime/claude/bin/search.sh +31 -5
- package/runtime/claude/bin/session-autosave.sh +6 -3
- package/runtime/claude/bin/session-id.sh +147 -0
- package/runtime/claude/bin/session-log.sh +19 -0
- package/runtime/claude/bin/session-record.sh +26 -0
- package/runtime/claude/bin/session-start.sh +121 -151
- package/runtime/claude/bin/settings.sh +13 -8
- package/runtime/claude/bin/spirit-discovery-claude.sh +4 -0
- package/runtime/claude/bin/spirit-discovery-codex.sh +4 -0
- package/runtime/claude/bin/spirit-discovery-pi.sh +4 -0
- package/runtime/claude/bin/spirit-discovery-prime.sh +4 -0
- package/runtime/claude/bin/spirit-discovery.sh +4 -0
- package/runtime/claude/bin/startup-check.sh +1 -1
- package/runtime/claude/bin/telemetry.sh +11 -4
- package/runtime/claude/bin/test-baseline.sh +33 -5
- package/runtime/claude/bin/todo.sh +1 -1
- package/runtime/claude/bin/worktree-create.sh +15 -45
- package/runtime/claude/bin/worktree.sh +6 -0
- package/runtime/claude/docs/spirit-discovery.md +96 -0
- package/runtime/claude/egregore_runtime/__init__.py +18 -12
- package/runtime/claude/egregore_runtime/access.py +608 -0
- package/runtime/claude/egregore_runtime/access_cli.py +190 -0
- package/runtime/claude/egregore_runtime/adapters/invitation.py +5 -3
- package/runtime/claude/egregore_runtime/adapters/qmd.py +521 -47
- package/runtime/claude/egregore_runtime/admin_entry.py +56 -0
- package/runtime/claude/egregore_runtime/artifacts.py +222 -16
- package/runtime/claude/egregore_runtime/contracts.py +27 -0
- package/runtime/claude/egregore_runtime/eligibility.py +5 -12
- package/runtime/claude/egregore_runtime/episode_binding.py +16 -5
- package/runtime/claude/egregore_runtime/github_issues.py +2 -2
- package/runtime/claude/egregore_runtime/handoff_lookup.py +9 -20
- package/runtime/claude/egregore_runtime/harness_cli.py +674 -149
- package/runtime/claude/egregore_runtime/held.py +2436 -0
- package/runtime/claude/egregore_runtime/hosted_api.py +137 -0
- package/runtime/claude/egregore_runtime/identity.py +196 -65
- package/runtime/claude/egregore_runtime/identity_transfer.py +6 -2
- package/runtime/claude/egregore_runtime/ingest_cli.py +2 -2
- package/runtime/claude/egregore_runtime/ingest_index_cli.py +4 -16
- package/runtime/claude/egregore_runtime/installation.py +119 -0
- package/runtime/claude/egregore_runtime/investigation.py +64 -41
- package/runtime/claude/egregore_runtime/investigation_guidance.py +16 -11
- package/runtime/claude/egregore_runtime/issue_cli.py +51 -32
- package/runtime/claude/egregore_runtime/issue_reporting.py +4 -3
- package/runtime/claude/egregore_runtime/issue_triage_service.py +2 -2
- package/runtime/claude/egregore_runtime/issues.py +12 -6
- package/runtime/claude/egregore_runtime/knowledge.py +331 -5
- package/runtime/claude/egregore_runtime/knowledge_cli.py +57 -17
- package/runtime/claude/egregore_runtime/lifecycle.py +88 -22
- package/runtime/claude/egregore_runtime/lifecycle_cli.py +21 -13
- package/runtime/claude/egregore_runtime/line_ids.py +10 -0
- package/runtime/claude/egregore_runtime/memory_push.py +349 -0
- package/runtime/claude/egregore_runtime/observe.py +64 -25
- package/runtime/claude/egregore_runtime/observers.py +19 -0
- package/runtime/claude/egregore_runtime/optional_modules.py +13 -0
- package/runtime/claude/egregore_runtime/outputs_cli.py +321 -0
- package/runtime/claude/egregore_runtime/policy.py +651 -24
- package/runtime/claude/egregore_runtime/private_result.py +2 -1
- package/runtime/claude/egregore_runtime/projection.py +946 -0
- package/runtime/claude/egregore_runtime/quest_cli.py +20 -23
- package/runtime/claude/egregore_runtime/question_cli.py +15 -11
- package/runtime/claude/egregore_runtime/questions.py +10 -10
- package/runtime/claude/egregore_runtime/quests.py +10 -10
- package/runtime/claude/egregore_runtime/record_publish.py +548 -0
- package/runtime/claude/egregore_runtime/record_subject.py +564 -0
- package/runtime/claude/egregore_runtime/research_ingest.py +2 -4
- package/runtime/claude/egregore_runtime/runtime.py +169 -60
- package/runtime/claude/egregore_runtime/sandbox.py +194 -0
- package/runtime/claude/egregore_runtime/scroll_cli.py +22 -32
- package/runtime/claude/egregore_runtime/scrolls.py +23 -15
- package/runtime/claude/egregore_runtime/shadow.py +262 -0
- package/runtime/claude/egregore_runtime/spirit_discovery.py +487 -0
- package/runtime/claude/egregore_runtime/spirit_discovery_cli.py +25 -0
- package/runtime/claude/egregore_runtime/spirit_discovery_transport.py +18 -0
- package/runtime/claude/egregore_runtime/status.py +101 -44
- package/runtime/claude/egregore_runtime/status_cli.py +13 -5
- package/runtime/claude/egregore_runtime/sync.py +39 -21
- package/runtime/claude/egregore_runtime/taste.py +934 -0
- package/runtime/claude/egregore_runtime/taste_cli.py +242 -0
- package/runtime/claude/egregore_runtime/taste_rules.py +91 -0
- package/runtime/claude/egregore_runtime/telemetry.py +26 -3
- package/runtime/claude/egregore_runtime/todo_cli.py +15 -12
- package/runtime/claude/egregore_runtime/todos.py +3 -2
- package/runtime/claude/egregore_runtime/upgrade.py +85 -58
- package/runtime/claude/egregore_runtime/writeback.py +330 -24
- package/runtime/claude/manifest.json +65 -5
- package/runtime/codex/.claude/context/handoff-claiming.md +32 -0
- package/runtime/codex/.claude/context/notification-consent.md +12 -9
- package/runtime/codex/.claude/skills/view/SKILL.md +438 -0
- package/runtime/codex/.codex/hooks.json +11 -0
- package/runtime/codex/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/records/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/view/assets/compose-scaffold.html +19 -13
- package/runtime/codex/.codex/spec-manifest.json +13 -19
- package/runtime/codex/AGENTS.md +54 -105
- package/runtime/codex/bin/agent.sh +231 -7
- package/runtime/codex/bin/api-call.sh +44 -23
- package/runtime/codex/bin/artifact-register.sh +7 -1
- package/runtime/codex/bin/artifact-writeback.sh +1 -1
- package/runtime/codex/bin/artifacts.sh +66 -265
- package/runtime/codex/bin/attendant.sh +4 -1
- package/runtime/codex/bin/boundary-guard.cjs +1848 -0
- package/runtime/codex/bin/boundary-hook.sh +41 -0
- package/runtime/codex/bin/capture-run.sh +32 -2
- package/runtime/codex/bin/codex-render-spec.mjs +24 -46
- package/runtime/codex/bin/codex-session-start.sh +19 -0
- package/runtime/codex/bin/codex-skill-render.mjs +18 -0
- package/runtime/codex/bin/config-get.sh +10 -1
- package/runtime/codex/bin/connect-refresh.sh +16 -0
- package/runtime/codex/bin/corpus_map.py +5 -0
- package/runtime/codex/bin/data/capabilities/codex.json +1458 -0
- package/runtime/codex/bin/genui.sh +19 -0
- package/runtime/codex/bin/graph-batch.sh +1 -1
- package/runtime/codex/bin/graph-op.sh +14 -0
- package/runtime/codex/bin/graph.sh +1 -1
- package/runtime/codex/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/codex/bin/handoff-run.sh +11 -6
- package/runtime/codex/bin/ingest-item.sh +1 -1
- package/runtime/codex/bin/ingest-surface.html +22 -4
- package/runtime/codex/bin/issue.sh +1 -1
- package/runtime/codex/bin/knowledge.sh +1 -1
- package/runtime/codex/bin/lib/card-delivery.sh +329 -0
- package/runtime/codex/bin/lib/config.sh +148 -3
- package/runtime/codex/bin/lib/context.sh +38 -67
- package/runtime/codex/bin/lib/genui-entry.py +36 -0
- package/runtime/codex/bin/lib/git-message.sh +25 -6
- package/runtime/codex/bin/lib/git-sync.sh +12 -4
- package/runtime/codex/bin/lib/greeting.sh +255 -28
- package/runtime/codex/bin/lib/handoff_meta.py +294 -0
- package/runtime/codex/bin/lib/health-footer.sh +83 -2
- package/runtime/codex/bin/lib/identity.sh +31 -10
- package/runtime/codex/bin/lib/instance-registry.sh +71 -0
- package/runtime/codex/bin/lib/local_ci_receipt.py +249 -0
- package/runtime/codex/bin/lib/metrics.sh +121 -8
- package/runtime/codex/bin/lib/notices.sh +36 -0
- package/runtime/codex/bin/lib/record_outcomes.py +729 -0
- package/runtime/codex/bin/lib/reflexes.py +267 -0
- package/runtime/codex/bin/lib/retrieval_scorecard.py +624 -0
- package/runtime/codex/bin/lib/session-record-prompt.txt +18 -0
- package/runtime/codex/bin/lib/session_record.py +3747 -0
- package/runtime/codex/bin/lib/session_trail.py +1983 -0
- package/runtime/codex/bin/lib/settings-drift.sh +8 -5
- package/runtime/codex/bin/lib/startup-restart.sh +41 -0
- package/runtime/codex/bin/lib/worktree-links.sh +92 -0
- package/runtime/codex/bin/memory-push.sh +6 -0
- package/runtime/codex/bin/merge-gate.sh +498 -0
- package/runtime/codex/bin/notify.sh +5 -2
- package/runtime/codex/bin/page-access.sh +103 -0
- package/runtime/codex/bin/person.sh +13 -2
- package/runtime/codex/bin/pi-render-spec.mjs +0 -1
- package/runtime/codex/bin/pi-spirit-discovery.mjs +34 -0
- package/runtime/codex/bin/post-update.sh +181 -0
- package/runtime/codex/bin/prime-render-spec.mjs +0 -1
- package/runtime/codex/bin/publish-artifact.sh +89 -42
- package/runtime/codex/bin/qa-inventory.sh +2 -2
- package/runtime/codex/bin/quest.sh +1 -1
- package/runtime/codex/bin/records.sh +11 -0
- package/runtime/codex/bin/reflexes/05-vitals.sh +9 -0
- package/runtime/codex/bin/reflexes/10-open-items.sh +12 -0
- package/runtime/codex/bin/reflexes/15-retrieval.sh +8 -0
- package/runtime/codex/bin/reflexes/20-nightly.sh +100 -0
- package/runtime/codex/bin/reflexes/20-sandbox.sh +85 -0
- package/runtime/codex/bin/reflexes/30-cost.py +116 -0
- package/runtime/codex/bin/reflexes/40-shells.py +51 -0
- package/runtime/codex/bin/reflexes/README.md +61 -0
- package/runtime/codex/bin/reflexes.sh +7 -0
- package/runtime/codex/bin/runtime-identity.sh +140 -42
- package/runtime/codex/bin/screenshot.sh +77 -0
- package/runtime/codex/bin/scroll.sh +1 -1
- package/runtime/codex/bin/search.sh +31 -5
- package/runtime/codex/bin/session-autosave.sh +6 -3
- package/runtime/codex/bin/session-id.sh +147 -0
- package/runtime/codex/bin/session-log.sh +19 -0
- package/runtime/codex/bin/session-record.sh +26 -0
- package/runtime/codex/bin/settings.sh +13 -8
- package/runtime/codex/bin/spirit-discovery-claude.sh +4 -0
- package/runtime/codex/bin/spirit-discovery-codex.sh +4 -0
- package/runtime/codex/bin/spirit-discovery-pi.sh +4 -0
- package/runtime/codex/bin/spirit-discovery-prime.sh +4 -0
- package/runtime/codex/bin/spirit-discovery.sh +4 -0
- package/runtime/codex/bin/startup-check.sh +1 -1
- package/runtime/codex/bin/telemetry.sh +11 -4
- package/runtime/codex/bin/test-baseline.sh +33 -5
- package/runtime/codex/bin/todo.sh +1 -1
- package/runtime/codex/bin/worktree-create.sh +15 -45
- package/runtime/codex/bin/worktree.sh +6 -0
- package/runtime/codex/docs/spirit-discovery.md +96 -0
- package/runtime/codex/egregore_runtime/__init__.py +18 -12
- package/runtime/codex/egregore_runtime/access.py +608 -0
- package/runtime/codex/egregore_runtime/access_cli.py +190 -0
- package/runtime/codex/egregore_runtime/adapters/invitation.py +5 -3
- package/runtime/codex/egregore_runtime/adapters/qmd.py +521 -47
- package/runtime/codex/egregore_runtime/admin_entry.py +56 -0
- package/runtime/codex/egregore_runtime/artifacts.py +222 -16
- package/runtime/codex/egregore_runtime/contracts.py +27 -0
- package/runtime/codex/egregore_runtime/eligibility.py +5 -12
- package/runtime/codex/egregore_runtime/episode_binding.py +16 -5
- package/runtime/codex/egregore_runtime/github_issues.py +2 -2
- package/runtime/codex/egregore_runtime/handoff_lookup.py +9 -20
- package/runtime/codex/egregore_runtime/harness_cli.py +674 -149
- package/runtime/codex/egregore_runtime/held.py +2436 -0
- package/runtime/codex/egregore_runtime/hosted_api.py +137 -0
- package/runtime/codex/egregore_runtime/identity.py +196 -65
- package/runtime/codex/egregore_runtime/identity_transfer.py +6 -2
- package/runtime/codex/egregore_runtime/ingest_cli.py +2 -2
- package/runtime/codex/egregore_runtime/ingest_index_cli.py +4 -16
- package/runtime/codex/egregore_runtime/installation.py +119 -0
- package/runtime/codex/egregore_runtime/investigation.py +64 -41
- package/runtime/codex/egregore_runtime/investigation_guidance.py +16 -11
- package/runtime/codex/egregore_runtime/issue_cli.py +51 -32
- package/runtime/codex/egregore_runtime/issue_reporting.py +4 -3
- package/runtime/codex/egregore_runtime/issue_triage_service.py +2 -2
- package/runtime/codex/egregore_runtime/issues.py +12 -6
- package/runtime/codex/egregore_runtime/knowledge.py +331 -5
- package/runtime/codex/egregore_runtime/knowledge_cli.py +57 -17
- package/runtime/codex/egregore_runtime/lifecycle.py +88 -22
- package/runtime/codex/egregore_runtime/lifecycle_cli.py +21 -13
- package/runtime/codex/egregore_runtime/line_ids.py +10 -0
- package/runtime/codex/egregore_runtime/memory_push.py +349 -0
- package/runtime/codex/egregore_runtime/observe.py +64 -25
- package/runtime/codex/egregore_runtime/observers.py +19 -0
- package/runtime/codex/egregore_runtime/optional_modules.py +13 -0
- package/runtime/codex/egregore_runtime/outputs_cli.py +321 -0
- package/runtime/codex/egregore_runtime/policy.py +651 -24
- package/runtime/codex/egregore_runtime/private_result.py +2 -1
- package/runtime/codex/egregore_runtime/projection.py +946 -0
- package/runtime/codex/egregore_runtime/quest_cli.py +20 -23
- package/runtime/codex/egregore_runtime/question_cli.py +15 -11
- package/runtime/codex/egregore_runtime/questions.py +10 -10
- package/runtime/codex/egregore_runtime/quests.py +10 -10
- package/runtime/codex/egregore_runtime/record_publish.py +548 -0
- package/runtime/codex/egregore_runtime/record_subject.py +564 -0
- package/runtime/codex/egregore_runtime/research_ingest.py +2 -4
- package/runtime/codex/egregore_runtime/runtime.py +169 -60
- package/runtime/codex/egregore_runtime/sandbox.py +194 -0
- package/runtime/codex/egregore_runtime/scroll_cli.py +22 -32
- package/runtime/codex/egregore_runtime/scrolls.py +23 -15
- package/runtime/codex/egregore_runtime/shadow.py +262 -0
- package/runtime/codex/egregore_runtime/spirit_discovery.py +487 -0
- package/runtime/codex/egregore_runtime/spirit_discovery_cli.py +25 -0
- package/runtime/codex/egregore_runtime/spirit_discovery_transport.py +18 -0
- package/runtime/codex/egregore_runtime/status.py +101 -44
- package/runtime/codex/egregore_runtime/status_cli.py +13 -5
- package/runtime/codex/egregore_runtime/sync.py +39 -21
- package/runtime/codex/egregore_runtime/taste.py +934 -0
- package/runtime/codex/egregore_runtime/taste_cli.py +242 -0
- package/runtime/codex/egregore_runtime/taste_rules.py +91 -0
- package/runtime/codex/egregore_runtime/telemetry.py +26 -3
- package/runtime/codex/egregore_runtime/todo_cli.py +15 -12
- package/runtime/codex/egregore_runtime/todos.py +3 -2
- package/runtime/codex/egregore_runtime/upgrade.py +85 -58
- package/runtime/codex/egregore_runtime/writeback.py +330 -24
- package/runtime/codex/manifest.json +66 -5
- package/runtime/pi/.claude/context/handoff-claiming.md +32 -0
- package/runtime/pi/.claude/context/notification-consent.md +12 -9
- package/runtime/pi/.claude/skills/view/SKILL.md +438 -0
- package/runtime/pi/.codex/hooks.json +11 -0
- package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/records/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/view/assets/compose-scaffold.html +19 -13
- package/runtime/pi/.codex/spec-manifest.json +13 -19
- package/runtime/pi/.pi/APPEND_SYSTEM.md +53 -99
- package/runtime/pi/.pi/extensions/egregore.ts +13 -1
- package/runtime/pi/.pi/spec-manifest.json +2 -2
- package/runtime/pi/AGENTS.md +54 -105
- package/runtime/pi/bin/agent.sh +231 -7
- package/runtime/pi/bin/api-call.sh +44 -23
- package/runtime/pi/bin/artifact-register.sh +7 -1
- package/runtime/pi/bin/artifact-writeback.sh +1 -1
- package/runtime/pi/bin/artifacts.sh +66 -265
- package/runtime/pi/bin/attendant.sh +4 -1
- package/runtime/pi/bin/boundary-guard.cjs +1848 -0
- package/runtime/pi/bin/boundary-hook.sh +41 -0
- package/runtime/pi/bin/capture-run.sh +32 -2
- package/runtime/pi/bin/codex-render-spec.mjs +24 -46
- package/runtime/pi/bin/codex-session-start.sh +19 -0
- package/runtime/pi/bin/codex-skill-render.mjs +18 -0
- package/runtime/pi/bin/config-get.sh +10 -1
- package/runtime/pi/bin/connect-refresh.sh +16 -0
- package/runtime/pi/bin/corpus_map.py +5 -0
- package/runtime/pi/bin/data/capabilities/pi.json +1458 -0
- package/runtime/pi/bin/genui.sh +19 -0
- package/runtime/pi/bin/graph-batch.sh +1 -1
- package/runtime/pi/bin/graph-op.sh +14 -0
- package/runtime/pi/bin/graph.sh +1 -1
- package/runtime/pi/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/pi/bin/handoff-run.sh +11 -6
- package/runtime/pi/bin/ingest-item.sh +1 -1
- package/runtime/pi/bin/ingest-surface.html +22 -4
- package/runtime/pi/bin/issue.sh +1 -1
- package/runtime/pi/bin/knowledge.sh +1 -1
- package/runtime/pi/bin/lib/card-delivery.sh +329 -0
- package/runtime/pi/bin/lib/config.sh +148 -3
- package/runtime/pi/bin/lib/context.sh +38 -67
- package/runtime/pi/bin/lib/genui-entry.py +36 -0
- package/runtime/pi/bin/lib/git-message.sh +25 -6
- package/runtime/pi/bin/lib/git-sync.sh +12 -4
- package/runtime/pi/bin/lib/greeting.sh +255 -28
- package/runtime/pi/bin/lib/handoff_meta.py +294 -0
- package/runtime/pi/bin/lib/health-footer.sh +83 -2
- package/runtime/pi/bin/lib/identity.sh +31 -10
- package/runtime/pi/bin/lib/instance-registry.sh +71 -0
- package/runtime/pi/bin/lib/local_ci_receipt.py +249 -0
- package/runtime/pi/bin/lib/metrics.sh +121 -8
- package/runtime/pi/bin/lib/notices.sh +36 -0
- package/runtime/pi/bin/lib/record_outcomes.py +729 -0
- package/runtime/pi/bin/lib/reflexes.py +267 -0
- package/runtime/pi/bin/lib/retrieval_scorecard.py +624 -0
- package/runtime/pi/bin/lib/session-record-prompt.txt +18 -0
- package/runtime/pi/bin/lib/session_record.py +3747 -0
- package/runtime/pi/bin/lib/session_trail.py +1983 -0
- package/runtime/pi/bin/lib/settings-drift.sh +8 -5
- package/runtime/pi/bin/lib/startup-restart.sh +41 -0
- package/runtime/pi/bin/lib/worktree-links.sh +92 -0
- package/runtime/pi/bin/memory-push.sh +6 -0
- package/runtime/pi/bin/merge-gate.sh +498 -0
- package/runtime/pi/bin/notify.sh +5 -2
- package/runtime/pi/bin/page-access.sh +103 -0
- package/runtime/pi/bin/person.sh +13 -2
- package/runtime/pi/bin/pi-branch-policy.mjs +37 -0
- package/runtime/pi/bin/pi-observe-context.mjs +97 -4
- package/runtime/pi/bin/pi-render-spec.mjs +0 -1
- package/runtime/pi/bin/pi-session-start.sh +4 -1
- package/runtime/pi/bin/pi-spirit-discovery.mjs +34 -0
- package/runtime/pi/bin/post-update.sh +181 -0
- package/runtime/pi/bin/prime-render-spec.mjs +0 -1
- package/runtime/pi/bin/publish-artifact.sh +89 -42
- package/runtime/pi/bin/qa-inventory.sh +2 -2
- package/runtime/pi/bin/quest.sh +1 -1
- package/runtime/pi/bin/records.sh +11 -0
- package/runtime/pi/bin/reflexes/05-vitals.sh +9 -0
- package/runtime/pi/bin/reflexes/10-open-items.sh +12 -0
- package/runtime/pi/bin/reflexes/15-retrieval.sh +8 -0
- package/runtime/pi/bin/reflexes/20-nightly.sh +100 -0
- package/runtime/pi/bin/reflexes/20-sandbox.sh +85 -0
- package/runtime/pi/bin/reflexes/30-cost.py +116 -0
- package/runtime/pi/bin/reflexes/40-shells.py +51 -0
- package/runtime/pi/bin/reflexes/README.md +61 -0
- package/runtime/pi/bin/reflexes.sh +7 -0
- package/runtime/pi/bin/runtime-identity.sh +140 -42
- package/runtime/pi/bin/screenshot.sh +77 -0
- package/runtime/pi/bin/scroll.sh +1 -1
- package/runtime/pi/bin/search.sh +31 -5
- package/runtime/pi/bin/session-autosave.sh +6 -3
- package/runtime/pi/bin/session-id.sh +147 -0
- package/runtime/pi/bin/session-log.sh +19 -0
- package/runtime/pi/bin/session-record.sh +26 -0
- package/runtime/pi/bin/settings.sh +13 -8
- package/runtime/pi/bin/spirit-discovery-claude.sh +4 -0
- package/runtime/pi/bin/spirit-discovery-codex.sh +4 -0
- package/runtime/pi/bin/spirit-discovery-pi.sh +4 -0
- package/runtime/pi/bin/spirit-discovery-prime.sh +4 -0
- package/runtime/pi/bin/spirit-discovery.sh +4 -0
- package/runtime/pi/bin/startup-check.sh +1 -1
- package/runtime/pi/bin/telemetry.sh +11 -4
- package/runtime/pi/bin/test-baseline.sh +33 -5
- package/runtime/pi/bin/todo.sh +1 -1
- package/runtime/pi/bin/worktree-create.sh +15 -45
- package/runtime/pi/bin/worktree.sh +6 -0
- package/runtime/pi/docs/spirit-discovery.md +96 -0
- package/runtime/pi/egregore_runtime/__init__.py +18 -12
- package/runtime/pi/egregore_runtime/access.py +608 -0
- package/runtime/pi/egregore_runtime/access_cli.py +190 -0
- package/runtime/pi/egregore_runtime/adapters/invitation.py +5 -3
- package/runtime/pi/egregore_runtime/adapters/qmd.py +521 -47
- package/runtime/pi/egregore_runtime/admin_entry.py +56 -0
- package/runtime/pi/egregore_runtime/artifacts.py +222 -16
- package/runtime/pi/egregore_runtime/contracts.py +27 -0
- package/runtime/pi/egregore_runtime/eligibility.py +5 -12
- package/runtime/pi/egregore_runtime/episode_binding.py +16 -5
- package/runtime/pi/egregore_runtime/github_issues.py +2 -2
- package/runtime/pi/egregore_runtime/handoff_lookup.py +9 -20
- package/runtime/pi/egregore_runtime/harness_cli.py +674 -149
- package/runtime/pi/egregore_runtime/held.py +2436 -0
- package/runtime/pi/egregore_runtime/hosted_api.py +137 -0
- package/runtime/pi/egregore_runtime/identity.py +196 -65
- package/runtime/pi/egregore_runtime/identity_transfer.py +6 -2
- package/runtime/pi/egregore_runtime/ingest_cli.py +2 -2
- package/runtime/pi/egregore_runtime/ingest_index_cli.py +4 -16
- package/runtime/pi/egregore_runtime/installation.py +119 -0
- package/runtime/pi/egregore_runtime/investigation.py +64 -41
- package/runtime/pi/egregore_runtime/investigation_guidance.py +16 -11
- package/runtime/pi/egregore_runtime/issue_cli.py +51 -32
- package/runtime/pi/egregore_runtime/issue_reporting.py +4 -3
- package/runtime/pi/egregore_runtime/issue_triage_service.py +2 -2
- package/runtime/pi/egregore_runtime/issues.py +12 -6
- package/runtime/pi/egregore_runtime/knowledge.py +331 -5
- package/runtime/pi/egregore_runtime/knowledge_cli.py +57 -17
- package/runtime/pi/egregore_runtime/lifecycle.py +88 -22
- package/runtime/pi/egregore_runtime/lifecycle_cli.py +21 -13
- package/runtime/pi/egregore_runtime/line_ids.py +10 -0
- package/runtime/pi/egregore_runtime/memory_push.py +349 -0
- package/runtime/pi/egregore_runtime/observe.py +64 -25
- package/runtime/pi/egregore_runtime/observers.py +19 -0
- package/runtime/pi/egregore_runtime/optional_modules.py +13 -0
- package/runtime/pi/egregore_runtime/outputs_cli.py +321 -0
- package/runtime/pi/egregore_runtime/policy.py +651 -24
- package/runtime/pi/egregore_runtime/private_result.py +2 -1
- package/runtime/pi/egregore_runtime/projection.py +946 -0
- package/runtime/pi/egregore_runtime/quest_cli.py +20 -23
- package/runtime/pi/egregore_runtime/question_cli.py +15 -11
- package/runtime/pi/egregore_runtime/questions.py +10 -10
- package/runtime/pi/egregore_runtime/quests.py +10 -10
- package/runtime/pi/egregore_runtime/record_publish.py +548 -0
- package/runtime/pi/egregore_runtime/record_subject.py +564 -0
- package/runtime/pi/egregore_runtime/research_ingest.py +2 -4
- package/runtime/pi/egregore_runtime/runtime.py +169 -60
- package/runtime/pi/egregore_runtime/sandbox.py +194 -0
- package/runtime/pi/egregore_runtime/scroll_cli.py +22 -32
- package/runtime/pi/egregore_runtime/scrolls.py +23 -15
- package/runtime/pi/egregore_runtime/shadow.py +262 -0
- package/runtime/pi/egregore_runtime/spirit_discovery.py +487 -0
- package/runtime/pi/egregore_runtime/spirit_discovery_cli.py +25 -0
- package/runtime/pi/egregore_runtime/spirit_discovery_transport.py +18 -0
- package/runtime/pi/egregore_runtime/status.py +101 -44
- package/runtime/pi/egregore_runtime/status_cli.py +13 -5
- package/runtime/pi/egregore_runtime/sync.py +39 -21
- package/runtime/pi/egregore_runtime/taste.py +934 -0
- package/runtime/pi/egregore_runtime/taste_cli.py +242 -0
- package/runtime/pi/egregore_runtime/taste_rules.py +91 -0
- package/runtime/pi/egregore_runtime/telemetry.py +26 -3
- package/runtime/pi/egregore_runtime/todo_cli.py +15 -12
- package/runtime/pi/egregore_runtime/todos.py +3 -2
- package/runtime/pi/egregore_runtime/upgrade.py +85 -58
- package/runtime/pi/egregore_runtime/writeback.py +330 -24
- package/runtime/pi/manifest.json +66 -5
- package/runtime/prime/.claude/context/handoff-claiming.md +32 -0
- package/runtime/prime/.claude/context/notification-consent.md +12 -9
- package/runtime/prime/.claude/skills/view/SKILL.md +438 -0
- package/runtime/prime/.codex/hooks.json +11 -0
- package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/records/SKILL.md +29 -0
- package/runtime/prime/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/view/assets/compose-scaffold.html +19 -13
- package/runtime/prime/.codex/spec-manifest.json +13 -19
- package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +53 -99
- package/runtime/prime/.prime/agent/extensions/egregore.ts +14 -1
- package/runtime/prime/.prime/agent/skills/egregore/SKILL.md +14 -6
- package/runtime/prime/.prime/agent/skills/egregore/src/egregore/__init__.py +66 -1
- package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
- package/runtime/prime/AGENTS.md +54 -105
- package/runtime/prime/bin/agent.sh +231 -7
- package/runtime/prime/bin/api-call.sh +44 -23
- package/runtime/prime/bin/artifact-register.sh +7 -1
- package/runtime/prime/bin/artifact-writeback.sh +1 -1
- package/runtime/prime/bin/artifacts.sh +66 -265
- package/runtime/prime/bin/attendant.sh +4 -1
- package/runtime/prime/bin/boundary-guard.cjs +1848 -0
- package/runtime/prime/bin/boundary-hook.sh +41 -0
- package/runtime/prime/bin/capture-run.sh +32 -2
- package/runtime/prime/bin/codex-render-spec.mjs +24 -46
- package/runtime/prime/bin/codex-session-start.sh +19 -0
- package/runtime/prime/bin/codex-skill-render.mjs +18 -0
- package/runtime/prime/bin/config-get.sh +10 -1
- package/runtime/prime/bin/connect-refresh.sh +16 -0
- package/runtime/prime/bin/corpus_map.py +5 -0
- package/runtime/prime/bin/data/capabilities/prime.json +1458 -0
- package/runtime/prime/bin/genui.sh +19 -0
- package/runtime/prime/bin/graph-batch.sh +1 -1
- package/runtime/prime/bin/graph-op.sh +14 -0
- package/runtime/prime/bin/graph.sh +1 -1
- package/runtime/prime/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/prime/bin/handoff-run.sh +11 -6
- package/runtime/prime/bin/ingest-item.sh +1 -1
- package/runtime/prime/bin/ingest-surface.html +22 -4
- package/runtime/prime/bin/issue.sh +1 -1
- package/runtime/prime/bin/knowledge.sh +1 -1
- package/runtime/prime/bin/lib/card-delivery.sh +329 -0
- package/runtime/prime/bin/lib/config.sh +148 -3
- package/runtime/prime/bin/lib/context.sh +38 -67
- package/runtime/prime/bin/lib/genui-entry.py +36 -0
- package/runtime/prime/bin/lib/git-message.sh +25 -6
- package/runtime/prime/bin/lib/git-sync.sh +12 -4
- package/runtime/prime/bin/lib/greeting.sh +255 -28
- package/runtime/prime/bin/lib/handoff_meta.py +294 -0
- package/runtime/prime/bin/lib/health-footer.sh +83 -2
- package/runtime/prime/bin/lib/identity.sh +31 -10
- package/runtime/prime/bin/lib/instance-registry.sh +71 -0
- package/runtime/prime/bin/lib/local_ci_receipt.py +249 -0
- package/runtime/prime/bin/lib/metrics.sh +121 -8
- package/runtime/prime/bin/lib/notices.sh +36 -0
- package/runtime/prime/bin/lib/record_outcomes.py +729 -0
- package/runtime/prime/bin/lib/reflexes.py +267 -0
- package/runtime/prime/bin/lib/retrieval_scorecard.py +624 -0
- package/runtime/prime/bin/lib/session-record-prompt.txt +18 -0
- package/runtime/prime/bin/lib/session_record.py +3747 -0
- package/runtime/prime/bin/lib/session_trail.py +1983 -0
- package/runtime/prime/bin/lib/settings-drift.sh +8 -5
- package/runtime/prime/bin/lib/startup-restart.sh +41 -0
- package/runtime/prime/bin/lib/worktree-links.sh +92 -0
- package/runtime/prime/bin/memory-push.sh +6 -0
- package/runtime/prime/bin/merge-gate.sh +498 -0
- package/runtime/prime/bin/notify.sh +5 -2
- package/runtime/prime/bin/page-access.sh +103 -0
- package/runtime/prime/bin/person.sh +13 -2
- package/runtime/prime/bin/pi-branch-policy.mjs +37 -0
- package/runtime/prime/bin/pi-observe-context.mjs +97 -4
- package/runtime/prime/bin/pi-render-spec.mjs +0 -1
- package/runtime/prime/bin/pi-spirit-discovery.mjs +34 -0
- package/runtime/prime/bin/post-update.sh +181 -0
- package/runtime/prime/bin/prime-render-spec.mjs +0 -1
- package/runtime/prime/bin/prime-session-start.sh +3 -1
- package/runtime/prime/bin/publish-artifact.sh +89 -42
- package/runtime/prime/bin/qa-inventory.sh +2 -2
- package/runtime/prime/bin/quest.sh +1 -1
- package/runtime/prime/bin/records.sh +11 -0
- package/runtime/prime/bin/reflexes/05-vitals.sh +9 -0
- package/runtime/prime/bin/reflexes/10-open-items.sh +12 -0
- package/runtime/prime/bin/reflexes/15-retrieval.sh +8 -0
- package/runtime/prime/bin/reflexes/20-nightly.sh +100 -0
- package/runtime/prime/bin/reflexes/20-sandbox.sh +85 -0
- package/runtime/prime/bin/reflexes/30-cost.py +116 -0
- package/runtime/prime/bin/reflexes/40-shells.py +51 -0
- package/runtime/prime/bin/reflexes/README.md +61 -0
- package/runtime/prime/bin/reflexes.sh +7 -0
- package/runtime/prime/bin/runtime-identity.sh +140 -42
- package/runtime/prime/bin/screenshot.sh +77 -0
- package/runtime/prime/bin/scroll.sh +1 -1
- package/runtime/prime/bin/search.sh +31 -5
- package/runtime/prime/bin/session-autosave.sh +6 -3
- package/runtime/prime/bin/session-id.sh +147 -0
- package/runtime/prime/bin/session-log.sh +19 -0
- package/runtime/prime/bin/session-record.sh +26 -0
- package/runtime/prime/bin/settings.sh +13 -8
- package/runtime/prime/bin/spirit-discovery-claude.sh +4 -0
- package/runtime/prime/bin/spirit-discovery-codex.sh +4 -0
- package/runtime/prime/bin/spirit-discovery-pi.sh +4 -0
- package/runtime/prime/bin/spirit-discovery-prime.sh +4 -0
- package/runtime/prime/bin/spirit-discovery.sh +4 -0
- package/runtime/prime/bin/startup-check.sh +1 -1
- package/runtime/prime/bin/telemetry.sh +11 -4
- package/runtime/prime/bin/test-baseline.sh +33 -5
- package/runtime/prime/bin/todo.sh +1 -1
- package/runtime/prime/bin/worktree-create.sh +15 -45
- package/runtime/prime/bin/worktree.sh +6 -0
- package/runtime/prime/docs/spirit-discovery.md +96 -0
- package/runtime/prime/egregore_runtime/__init__.py +18 -12
- package/runtime/prime/egregore_runtime/access.py +608 -0
- package/runtime/prime/egregore_runtime/access_cli.py +190 -0
- package/runtime/prime/egregore_runtime/adapters/invitation.py +5 -3
- package/runtime/prime/egregore_runtime/adapters/qmd.py +521 -47
- package/runtime/prime/egregore_runtime/admin_entry.py +56 -0
- package/runtime/prime/egregore_runtime/artifacts.py +222 -16
- package/runtime/prime/egregore_runtime/contracts.py +27 -0
- package/runtime/prime/egregore_runtime/eligibility.py +5 -12
- package/runtime/prime/egregore_runtime/episode_binding.py +16 -5
- package/runtime/prime/egregore_runtime/github_issues.py +2 -2
- package/runtime/prime/egregore_runtime/handoff_lookup.py +9 -20
- package/runtime/prime/egregore_runtime/harness_cli.py +674 -149
- package/runtime/prime/egregore_runtime/held.py +2436 -0
- package/runtime/prime/egregore_runtime/hosted_api.py +137 -0
- package/runtime/prime/egregore_runtime/identity.py +196 -65
- package/runtime/prime/egregore_runtime/identity_transfer.py +6 -2
- package/runtime/prime/egregore_runtime/ingest_cli.py +2 -2
- package/runtime/prime/egregore_runtime/ingest_index_cli.py +4 -16
- package/runtime/prime/egregore_runtime/installation.py +119 -0
- package/runtime/prime/egregore_runtime/investigation.py +64 -41
- package/runtime/prime/egregore_runtime/investigation_guidance.py +16 -11
- package/runtime/prime/egregore_runtime/issue_cli.py +51 -32
- package/runtime/prime/egregore_runtime/issue_reporting.py +4 -3
- package/runtime/prime/egregore_runtime/issue_triage_service.py +2 -2
- package/runtime/prime/egregore_runtime/issues.py +12 -6
- package/runtime/prime/egregore_runtime/knowledge.py +331 -5
- package/runtime/prime/egregore_runtime/knowledge_cli.py +57 -17
- package/runtime/prime/egregore_runtime/lifecycle.py +88 -22
- package/runtime/prime/egregore_runtime/lifecycle_cli.py +21 -13
- package/runtime/prime/egregore_runtime/line_ids.py +10 -0
- package/runtime/prime/egregore_runtime/memory_push.py +349 -0
- package/runtime/prime/egregore_runtime/observe.py +64 -25
- package/runtime/prime/egregore_runtime/observers.py +19 -0
- package/runtime/prime/egregore_runtime/optional_modules.py +13 -0
- package/runtime/prime/egregore_runtime/outputs_cli.py +321 -0
- package/runtime/prime/egregore_runtime/policy.py +651 -24
- package/runtime/prime/egregore_runtime/private_result.py +2 -1
- package/runtime/prime/egregore_runtime/projection.py +946 -0
- package/runtime/prime/egregore_runtime/quest_cli.py +20 -23
- package/runtime/prime/egregore_runtime/question_cli.py +15 -11
- package/runtime/prime/egregore_runtime/questions.py +10 -10
- package/runtime/prime/egregore_runtime/quests.py +10 -10
- package/runtime/prime/egregore_runtime/record_publish.py +548 -0
- package/runtime/prime/egregore_runtime/record_subject.py +564 -0
- package/runtime/prime/egregore_runtime/research_ingest.py +2 -4
- package/runtime/prime/egregore_runtime/runtime.py +169 -60
- package/runtime/prime/egregore_runtime/sandbox.py +194 -0
- package/runtime/prime/egregore_runtime/scroll_cli.py +22 -32
- package/runtime/prime/egregore_runtime/scrolls.py +23 -15
- package/runtime/prime/egregore_runtime/shadow.py +262 -0
- package/runtime/prime/egregore_runtime/spirit_discovery.py +487 -0
- package/runtime/prime/egregore_runtime/spirit_discovery_cli.py +25 -0
- package/runtime/prime/egregore_runtime/spirit_discovery_transport.py +18 -0
- package/runtime/prime/egregore_runtime/status.py +101 -44
- package/runtime/prime/egregore_runtime/status_cli.py +13 -5
- package/runtime/prime/egregore_runtime/sync.py +39 -21
- package/runtime/prime/egregore_runtime/taste.py +934 -0
- package/runtime/prime/egregore_runtime/taste_cli.py +242 -0
- package/runtime/prime/egregore_runtime/taste_rules.py +91 -0
- package/runtime/prime/egregore_runtime/telemetry.py +26 -3
- package/runtime/prime/egregore_runtime/todo_cli.py +15 -12
- package/runtime/prime/egregore_runtime/todos.py +3 -2
- package/runtime/prime/egregore_runtime/upgrade.py +85 -58
- package/runtime/prime/egregore_runtime/writeback.py +330 -24
- package/runtime/prime/manifest.json +66 -5
- package/runtime/claude/bin/thread.sh +0 -9
- package/runtime/claude/egregore_runtime/admin_gate.py +0 -102
- package/runtime/claude/egregore_runtime/thread_cli.py +0 -173
- package/runtime/claude/egregore_runtime/threads.py +0 -521
- package/runtime/codex/bin/thread.sh +0 -9
- package/runtime/codex/egregore_runtime/admin_gate.py +0 -102
- package/runtime/codex/egregore_runtime/thread_cli.py +0 -173
- package/runtime/codex/egregore_runtime/threads.py +0 -521
- package/runtime/pi/bin/thread.sh +0 -9
- package/runtime/pi/egregore_runtime/admin_gate.py +0 -102
- package/runtime/pi/egregore_runtime/thread_cli.py +0 -173
- package/runtime/pi/egregore_runtime/threads.py +0 -521
- package/runtime/prime/bin/thread.sh +0 -9
- package/runtime/prime/egregore_runtime/admin_gate.py +0 -102
- package/runtime/prime/egregore_runtime/thread_cli.py +0 -173
- package/runtime/prime/egregore_runtime/threads.py +0 -521
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Session-record admission is silent and detached for hooks. Python uses only
|
|
3
|
+
# the standard library. Summarizer flags (all checked against claude --help):
|
|
4
|
+
# Private trails, durable holds, stamps and locks live in $HOME/.egregore/trails.
|
|
5
|
+
# --tools "" --strict-mcp-config --mcp-config '{"mcpServers":{}}'
|
|
6
|
+
# --setting-sources "" --model MODEL --output-format text -p PROMPT
|
|
7
|
+
# Built-in tools, MCP servers, project settings, hooks and plugins are disabled,
|
|
8
|
+
# so the call is a single turn without a separate turn-limit flag.
|
|
9
|
+
# A CLI missing any isolation flag (including the empty --tools allowlist)
|
|
10
|
+
# is never invoked for a build; the record is deterministic instead.
|
|
11
|
+
# Checkpoints only write the record file in the memory working tree. Session
|
|
12
|
+
# end commits and pushes it with this person's earlier uncommitted records.
|
|
13
|
+
# --mode sweep always refreshes local counts in a detached worker. Publication
|
|
14
|
+
# requires an answered offer and enabled recording; only publication is
|
|
15
|
+
# debounced for six hours unless --force is supplied.
|
|
16
|
+
# Publications and hold markers use the same canonical memory lock; holds wait
|
|
17
|
+
# for an active publication, then redact going forward without rewriting history.
|
|
18
|
+
# The one thing a hook prints: at a checkpoint, the session's cost line, once
|
|
19
|
+
# per mark ($200 priced, or ten million Codex input tokens) at the next stop.
|
|
20
|
+
# Descriptor 3 carries the hook's stdout past the silenced streams for it.
|
|
21
|
+
set -uo pipefail
|
|
22
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)" || exit 0
|
|
23
|
+
command -v jq >/dev/null 2>&1 || exit 0
|
|
24
|
+
command -v python3 >/dev/null 2>&1 || exit 0
|
|
25
|
+
[ -n "${HOME:-}" ] || exit 0
|
|
26
|
+
exec python3 "$SCRIPT_DIR/bin/lib/session_record.py" record --root "$SCRIPT_DIR" --notice-fd 3 "$@" 3>&1 >/dev/null 2>&1
|
|
@@ -23,6 +23,8 @@ set -euo pipefail
|
|
|
23
23
|
|
|
24
24
|
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
25
25
|
CONFIG="$SCRIPT_DIR/egregore.json"
|
|
26
|
+
# shellcheck source=bin/lib/config.sh
|
|
27
|
+
source "$SCRIPT_DIR/bin/lib/config.sh"
|
|
26
28
|
|
|
27
29
|
# ── helpers ──────────────────────────────────────────────────────────────
|
|
28
30
|
|
|
@@ -54,7 +56,7 @@ _save() {
|
|
|
54
56
|
# start's settings sync (bin/lib/settings-drift.sh).
|
|
55
57
|
_control_plane_push() {
|
|
56
58
|
local api_url api_key payload actor response revision
|
|
57
|
-
api_url=$(
|
|
59
|
+
api_url=$(_config_api_url) || return 0
|
|
58
60
|
[ -n "$api_url" ] || return 0
|
|
59
61
|
api_key=$(grep '^EGREGORE_API_KEY=' "$SCRIPT_DIR/.env" 2>/dev/null | cut -d'=' -f2- || true)
|
|
60
62
|
[ -n "$api_key" ] || return 0
|
|
@@ -70,10 +72,13 @@ _control_plane_push() {
|
|
|
70
72
|
--data-binary "$payload" 2>/dev/null) || return 0
|
|
71
73
|
revision=$(printf '%s' "$response" | jq -r '.settings_revision // empty' 2>/dev/null)
|
|
72
74
|
if [ -n "$revision" ] && [ -f "$SCRIPT_DIR/.egregore-state.json" ]; then
|
|
73
|
-
local st
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
local st state_file
|
|
76
|
+
# A worktree links the checkout's state file: the rename lands on the
|
|
77
|
+
# file it points to, so the link stays and the installation keeps one state.
|
|
78
|
+
state_file="$(realpath "$SCRIPT_DIR/.egregore-state.json" 2>/dev/null)" || state_file="$SCRIPT_DIR/.egregore-state.json"
|
|
79
|
+
st="$(mktemp "$state_file.XXXXXX")" || return 0
|
|
80
|
+
if jq --arg rev "$revision" '.org_settings_revision = $rev' "$state_file" > "$st" 2>/dev/null && [ -s "$st" ]; then
|
|
81
|
+
mv "$st" "$state_file"
|
|
77
82
|
else
|
|
78
83
|
rm -f "$st"
|
|
79
84
|
fi
|
|
@@ -394,7 +399,7 @@ _people_file() {
|
|
|
394
399
|
fi
|
|
395
400
|
( cd "$SCRIPT_DIR/memory" 2>/dev/null && git add -A people/ 2>/dev/null \
|
|
396
401
|
&& git commit -q -m "chore(settings): $op $user in people" 2>/dev/null \
|
|
397
|
-
&&
|
|
402
|
+
&& bash "$SCRIPT_DIR/bin/memory-push.sh" --repository "$SCRIPT_DIR/memory" --branch main >/dev/null 2>&1 ) || true
|
|
398
403
|
}
|
|
399
404
|
|
|
400
405
|
cmd_people() {
|
|
@@ -469,7 +474,7 @@ set -- "${_args[@]+"${_args[@]}"}"
|
|
|
469
474
|
# ── privacy & access (read snapshot) ─────────────────────────────────────
|
|
470
475
|
# One composed JSON for the Settings Privacy & access panel. Identity,
|
|
471
476
|
# membership, and capability values come from the Runtime authorization
|
|
472
|
-
# backend (access
|
|
477
|
+
# backend (access show --json); this shell layer adds only committed boundary
|
|
473
478
|
# config, the personal boundary-local file, isolation state, and honest
|
|
474
479
|
# constant statements. Never includes secrets, tokens, or internal paths.
|
|
475
480
|
|
|
@@ -499,7 +504,7 @@ cmd_privacy() {
|
|
|
499
504
|
local access posture locked org_reads personal_reads denied digest graph
|
|
500
505
|
access=$(cd "$SCRIPT_DIR" && EGREGORE_ROOT="$SCRIPT_DIR" \
|
|
501
506
|
PYTHONSAFEPATH=1 PYTHONPATH="$SCRIPT_DIR${PYTHONPATH:+:$PYTHONPATH}" \
|
|
502
|
-
python3 -m egregore_runtime.harness_cli access
|
|
507
|
+
python3 -m egregore_runtime.harness_cli access show --json 2>/dev/null) || true
|
|
503
508
|
printf '%s' "$access" | jq -e . >/dev/null 2>&1 || access='{"status":"attention"}'
|
|
504
509
|
posture=$(jq -r '.boundary.posture // "standard"' "$CONFIG" 2>/dev/null || echo standard)
|
|
505
510
|
locked=$(jq -r 'if (.boundary.locked // false) == true then "true" else "false" end' "$CONFIG" 2>/dev/null || echo false)
|
|
@@ -13,7 +13,6 @@ STATE_FILE="$SCRIPT_DIR/.egregore-state.json"
|
|
|
13
13
|
[ -f "$ENV_FILE" ] || exit 0
|
|
14
14
|
|
|
15
15
|
# --- Read config ---
|
|
16
|
-
API_URL=$(jq -r '.api_url // empty' "$CONFIG" 2>/dev/null)
|
|
17
16
|
MODE=$(jq -r '.mode // "local"' "$CONFIG" 2>/dev/null)
|
|
18
17
|
CONFIG_SLUG=$(jq -r '.slug // empty' "$CONFIG" 2>/dev/null)
|
|
19
18
|
ORG_NAME=$(jq -r '.org_name // empty' "$CONFIG" 2>/dev/null)
|
|
@@ -21,6 +20,7 @@ GITHUB_ORG=$(jq -r '.github_org // empty' "$CONFIG" 2>/dev/null)
|
|
|
21
20
|
|
|
22
21
|
# shellcheck source=bin/lib/config.sh
|
|
23
22
|
source "$SCRIPT_DIR/bin/lib/config.sh"
|
|
23
|
+
API_URL=$(_config_api_url)
|
|
24
24
|
|
|
25
25
|
# Runtime telemetry and diagnostics remain on-device by default. Historical
|
|
26
26
|
# Connected health reporting is retained only as an explicit operator action;
|
|
@@ -7,6 +7,8 @@ set -euo pipefail
|
|
|
7
7
|
umask 077
|
|
8
8
|
|
|
9
9
|
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
10
|
+
# shellcheck source=bin/lib/config.sh
|
|
11
|
+
source "$SCRIPT_DIR/bin/lib/config.sh"
|
|
10
12
|
if [ -n "${EGREGORE_TELEMETRY_DIR:-}" ]; then
|
|
11
13
|
BUFFER_DIR="$EGREGORE_TELEMETRY_DIR"
|
|
12
14
|
else
|
|
@@ -516,12 +518,16 @@ cmd_export() {
|
|
|
516
518
|
_resolve_share_target() {
|
|
517
519
|
local requested_endpoint="$1"
|
|
518
520
|
if [ -n "$requested_endpoint" ]; then
|
|
519
|
-
|
|
520
|
-
|
|
521
|
+
# An explicit endpoint never gets the org key (cmd_share adds it only for
|
|
522
|
+
# the configured sink), so it needs the retired host mapped and nothing
|
|
523
|
+
# more; any other address goes to cmd_share's scheme check as typed.
|
|
524
|
+
_hosted_api_target "$requested_endpoint" 2>/dev/null || printf '%s\n' "$requested_endpoint"
|
|
525
|
+
return 0
|
|
521
526
|
fi
|
|
522
527
|
local api_url="" api_key=""
|
|
523
528
|
if [ -f "$CONFIG" ]; then
|
|
524
|
-
|
|
529
|
+
# A refused saved address names no sink: never fall through to the relay.
|
|
530
|
+
api_url=$(_hosted_api_url "$(jq -r '.api_url // empty' "$CONFIG" 2>/dev/null || true)") || return 0
|
|
525
531
|
fi
|
|
526
532
|
if [ -f "$ENV_FILE" ]; then
|
|
527
533
|
api_key=$(grep '^EGREGORE_API_KEY=' "$ENV_FILE" 2>/dev/null | cut -d'=' -f2- || true)
|
|
@@ -691,7 +697,8 @@ cmd_share() {
|
|
|
691
697
|
: > "$share_file"
|
|
692
698
|
fi
|
|
693
699
|
|
|
694
|
-
|
|
700
|
+
# -q first (no ~/.curlrc), --globoff: the endpoint reaches the one host it names.
|
|
701
|
+
local curl_args=(-q --globoff -s -o /dev/null -w '%{http_code}' -X POST "$endpoint"
|
|
695
702
|
-H "Content-Type: application/x-ndjson" --data-binary "@$share_file" --max-time 15)
|
|
696
703
|
local api_key="" configured_endpoint=""
|
|
697
704
|
configured_endpoint=$(_resolve_share_target "")
|
|
@@ -39,6 +39,9 @@ json=false
|
|
|
39
39
|
head_first=false
|
|
40
40
|
strict_head=false
|
|
41
41
|
timeout=""
|
|
42
|
+
# A suite may declare a longer deadline than --timeout, up to 900 seconds,
|
|
43
|
+
# with a line "# test-baseline: timeout=N" in its first 30 lines.
|
|
44
|
+
child_limit=""
|
|
42
45
|
selected=()
|
|
43
46
|
add_suite() {
|
|
44
47
|
local existing
|
|
@@ -147,8 +150,23 @@ run_dir=$(mktemp -d "${TMPDIR:-/tmp}/qa-baseline.XXXXXX") || error "cannot creat
|
|
|
147
150
|
# Use the physical spelling consistently in Git, logs, and failure normalization.
|
|
148
151
|
run_dir=$(cd -P "$run_dir" && pwd)
|
|
149
152
|
mkdir -p "$run_dir/logs/base" "$run_dir/logs/head" || error "cannot create scratch logs"
|
|
150
|
-
|
|
151
|
-
|
|
153
|
+
# A worktree another run is adding at the same moment can make Git read its
|
|
154
|
+
# half-written entry ("failed to read .git/worktrees/<name>/commondir"), so a
|
|
155
|
+
# failed add is tried again before it counts as an environment failure.
|
|
156
|
+
add_base_tree() {
|
|
157
|
+
local attempt
|
|
158
|
+
for attempt in 1 2 3; do
|
|
159
|
+
if git -C "$SCRIPT_DIR" worktree add --detach --quiet "$run_dir/base" "$base_oid" \
|
|
160
|
+
> "$run_dir/worktree.out" 2> "$run_dir/worktree.err"; then
|
|
161
|
+
return 0
|
|
162
|
+
fi
|
|
163
|
+
[ "$attempt" -lt 3 ] || return 1
|
|
164
|
+
git -C "$SCRIPT_DIR" worktree remove --force "$run_dir/base" >/dev/null 2>&1 || true
|
|
165
|
+
rm -rf "$run_dir/base"
|
|
166
|
+
sleep "$attempt"
|
|
167
|
+
done
|
|
168
|
+
}
|
|
169
|
+
if ! add_base_tree; then
|
|
152
170
|
echo 'test-baseline: cannot create the base worktree:' >&2
|
|
153
171
|
cat "$run_dir/worktree.err" >&2
|
|
154
172
|
exit 2
|
|
@@ -169,13 +187,14 @@ run_child() {
|
|
|
169
187
|
set -m
|
|
170
188
|
(cd "$tree" && exec "$@") < /dev/null > "$log" 2>&1 &
|
|
171
189
|
child_pid=$!
|
|
172
|
-
|
|
190
|
+
local limit="${child_limit:-$timeout}"
|
|
191
|
+
if [ -n "$limit" ]; then
|
|
173
192
|
watched_pid=$child_pid
|
|
174
193
|
(
|
|
175
194
|
# This watchdog owns a separate group, including its sleep process, so
|
|
176
195
|
# normal completion and external interruption cancel the whole timer.
|
|
177
196
|
set +m
|
|
178
|
-
if ! sleep "$
|
|
197
|
+
if ! sleep "$limit"; then
|
|
179
198
|
: > "$run_dir/timer-failed"
|
|
180
199
|
fi
|
|
181
200
|
if kill -0 -- "-$watched_pid" 2>/dev/null; then
|
|
@@ -270,6 +289,13 @@ for suite in "${selected[@]}"; do
|
|
|
270
289
|
note=""
|
|
271
290
|
status=""
|
|
272
291
|
runner=""
|
|
292
|
+
suite_limit="$timeout"
|
|
293
|
+
if [ -n "$timeout" ] && [ -f "$SCRIPT_DIR/$suite" ]; then
|
|
294
|
+
declared=$(head -n 30 "$SCRIPT_DIR/$suite" | sed -n 's/^# test-baseline: timeout=\([1-9][0-9]*\)$/\1/p' | head -n 1)
|
|
295
|
+
if [ -n "$declared" ] && [ "$declared" -gt "$timeout" ]; then
|
|
296
|
+
suite_limit=$(( declared > 900 ? 900 : declared ))
|
|
297
|
+
fi
|
|
298
|
+
fi
|
|
273
299
|
printf 'test-baseline: suite %s\n' "$suite" >&2
|
|
274
300
|
case "$suite" in
|
|
275
301
|
*.sh) runner=bash ;;
|
|
@@ -345,7 +371,9 @@ for suite in "${selected[@]}"; do
|
|
|
345
371
|
bats) command_args=(bats) ;;
|
|
346
372
|
esac
|
|
347
373
|
printf 'test-baseline: %s %s starting\n' "$side" "$suite" >&2
|
|
374
|
+
child_limit="$suite_limit"
|
|
348
375
|
run_child "$tree" "$run_dir/logs/$side/$log_name" "${command_args[@]}" "./$suite"
|
|
376
|
+
child_limit=""
|
|
349
377
|
printf 'test-baseline: %s %s exit=%s seconds=%s timed_out=%s\n' \
|
|
350
378
|
"$side" "$suite" "$run_exit" "$run_seconds" "$run_timed_out" >&2
|
|
351
379
|
failure_lines "$run_dir/logs/$side/$log_name" "$run_dir/$side.lines"
|
|
@@ -355,7 +383,7 @@ for suite in "${selected[@]}"; do
|
|
|
355
383
|
head_exit=$run_exit; head_seconds=$run_seconds; head_timed_out=$run_timed_out
|
|
356
384
|
fi
|
|
357
385
|
if $run_timed_out; then
|
|
358
|
-
status=blocked; note="$side timed out after ${
|
|
386
|
+
status=blocked; note="$side timed out after ${suite_limit}s"; break
|
|
359
387
|
fi
|
|
360
388
|
if $head_first && [ "$side" = head ] && [ "$head_exit" -eq 0 ]; then break; fi
|
|
361
389
|
done
|
|
@@ -3,7 +3,7 @@ set -euo pipefail
|
|
|
3
3
|
|
|
4
4
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
5
5
|
export EGREGORE_ROOT="$ROOT"
|
|
6
|
-
export EGREGORE_SESSION_ID="${EGREGORE_SESSION_ID:-$(cat "$ROOT/.egregore-session-id" 2>/dev/null || true)}"
|
|
6
|
+
export EGREGORE_SESSION_ID="${EGREGORE_SESSION_ID:-$(bash "$ROOT/bin/session-id.sh" --root "$ROOT" 2>/dev/null || cat "$ROOT/.egregore-session-id" 2>/dev/null || true)}"
|
|
7
7
|
export PYTHONSAFEPATH=1 PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}"
|
|
8
8
|
|
|
9
9
|
exec python3 -m egregore_runtime.todo_cli "$@"
|
|
@@ -94,52 +94,22 @@ fi
|
|
|
94
94
|
# egregore.json
|
|
95
95
|
[ -f "$REPO_ROOT/egregore.json" ] && [ ! -f "$WT_PATH/egregore.json" ] && ln -sfn "$REPO_ROOT/egregore.json" "$WT_PATH/egregore.json"
|
|
96
96
|
|
|
97
|
+
# Installed tools (node_modules, .egregore/tools), so tests and the renderer
|
|
98
|
+
# run without an install step. Same helper as worktree.sh setup, loaded from
|
|
99
|
+
# this script's own bin/. Its one diagnostic, a link git cannot be made to
|
|
100
|
+
# ignore, goes to stderr, keeping stdout the worktree path only.
|
|
101
|
+
# shellcheck source=bin/lib/worktree-links.sh
|
|
102
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/worktree-links.sh" && egregore_link_tools "$WT_PATH" "$REPO_ROOT" >&2
|
|
103
|
+
|
|
97
104
|
# --- Compute boundary for worktree (so isolation hook works) ---
|
|
98
|
-
# session-start.sh doesn't re-run for worktrees, so we compute it here
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
#
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
_repos=$(jq -r '(.repos[]? // empty) | if type == "object" then .name else . end' "$WT_PATH/egregore.json" 2>/dev/null || true)
|
|
107
|
-
for _r in $_repos; do
|
|
108
|
-
[[ "$_r" == *".."* ]] && continue
|
|
109
|
-
_resolved=$(realpath "$PARENT_DIR/$_r" 2>/dev/null || true)
|
|
110
|
-
[ -z "$_resolved" ] && continue
|
|
111
|
-
MANAGED_REPOS_JSON="$MANAGED_REPOS_JSON,\"$_resolved\""
|
|
112
|
-
done
|
|
113
|
-
MANAGED_REPOS_JSON="$MANAGED_REPOS_JSON]"
|
|
114
|
-
# Denied paths: shared computation (bin/boundary.sh compute-denied). The main
|
|
115
|
-
# repo is passed as the caller-proven same-instance allowance — this worktree
|
|
116
|
-
# was just created from it and physically shares its git dir — so it stays
|
|
117
|
-
# excluded even on legacy registries whose entries carry no org_id yet.
|
|
118
|
-
DENIED_JSON="[]"
|
|
119
|
-
REGISTRY="$HOME/.egregore/instances.json"
|
|
120
|
-
if [ -f "$REGISTRY" ]; then
|
|
121
|
-
WT_ORG=$(jq -r '.org_id // empty' "$WT_PATH/egregore.json" 2>/dev/null || true)
|
|
122
|
-
DENIED_JSON=$(bash "$REPO_ROOT/bin/boundary.sh" compute-denied \
|
|
123
|
-
"$REGISTRY" "$WT_PATH" "$WT_ORG" "$REPO_ROOT" 2>/dev/null || echo "[]")
|
|
124
|
-
case "$DENIED_JSON" in "["*) ;; *) DENIED_JSON="[]" ;; esac
|
|
125
|
-
fi
|
|
126
|
-
# Inherit posture, locked, and read roots from the main checkout's boundary
|
|
127
|
-
# cache: a worktree that silently dropped them fell back to `standard` and
|
|
128
|
-
# stopped honoring `locked: true` (found in the 6b.3 enforcement audit).
|
|
129
|
-
MAIN_DIGEST=$(printf '%s' "$REPO_ROOT" | md5 2>/dev/null || printf '%s' "$REPO_ROOT" | md5sum | cut -d' ' -f1)
|
|
130
|
-
MAIN_BOUNDARY="/tmp/egregore-boundary-${MAIN_DIGEST}.json"
|
|
131
|
-
POSTURE_JSON='{}'
|
|
132
|
-
if [ -f "$MAIN_BOUNDARY" ]; then
|
|
133
|
-
POSTURE_JSON=$(jq -c '{posture: (.posture // "standard"), locked: (.locked // false), read_roots: (.read_roots // [])}' "$MAIN_BOUNDARY" 2>/dev/null || echo '{}')
|
|
134
|
-
fi
|
|
135
|
-
jq -n \
|
|
136
|
-
--arg project_dir "$WT_PATH" \
|
|
137
|
-
--arg memory_dir "$MEMORY_DIR" \
|
|
138
|
-
--argjson managed_repos "$MANAGED_REPOS_JSON" \
|
|
139
|
-
--argjson denied_paths "$DENIED_JSON" \
|
|
140
|
-
--argjson inherited "$POSTURE_JSON" \
|
|
141
|
-
'{project_dir: $project_dir, memory_dir: $memory_dir, managed_repos: $managed_repos, denied_paths: $denied_paths} + $inherited' \
|
|
142
|
-
> "$BOUNDARY_FILE.tmp" 2>/dev/null && mv "$BOUNDARY_FILE.tmp" "$BOUNDARY_FILE" 2>/dev/null || true
|
|
105
|
+
# session-start.sh doesn't re-run for worktrees, so we compute it here through
|
|
106
|
+
# the shared computation (bin/boundary-guard.cjs write-cache). It recognizes a
|
|
107
|
+
# linked worktree: the main checkout it physically shares a git dir with is the
|
|
108
|
+
# caller-proven same instance (excluded from denied paths even on legacy
|
|
109
|
+
# registries without org_id) and a managed repo, and posture, lock and read
|
|
110
|
+
# roots come from the main checkout's config — a worktree that dropped them
|
|
111
|
+
# fell back to `standard` and stopped honoring `locked: true` (6b.3 audit).
|
|
112
|
+
bash "$REPO_ROOT/bin/node-run.sh" "$REPO_ROOT/bin/boundary-guard.cjs" write-cache "$WT_PATH" >/dev/null 2>&1 || true
|
|
143
113
|
|
|
144
114
|
# --- Session topic on the graph (fire-and-forget, detached) ---
|
|
145
115
|
# CLAUDE.md used to ask the model to run this after EnterWorktree with a
|
|
@@ -57,6 +57,12 @@ case "$CMD" in
|
|
|
57
57
|
ln -sfn "$MAIN_DIR/egregore.json" "$WT_PATH/egregore.json"
|
|
58
58
|
fi
|
|
59
59
|
|
|
60
|
+
# Installed tools (node_modules, .egregore/tools), through the same helper
|
|
61
|
+
# as the WorktreeCreate hook; a link git cannot be made to ignore is
|
|
62
|
+
# reported on stderr.
|
|
63
|
+
# shellcheck source=bin/lib/worktree-links.sh
|
|
64
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/worktree-links.sh" && egregore_link_tools "$WT_PATH" "$MAIN_DIR"
|
|
65
|
+
|
|
60
66
|
# Find terminal TTY for statusline matching
|
|
61
67
|
_pid=$$
|
|
62
68
|
_tty=""
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Capability and system discovery
|
|
2
|
+
|
|
3
|
+
Each harness reads the same evidence through a fixed adapter:
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
bash bin/spirit-discovery-claude.sh capabilities.list
|
|
7
|
+
bash bin/spirit-discovery-codex.sh capabilities.find research
|
|
8
|
+
bash bin/spirit-discovery-pi.sh capabilities.describe tool.spirit-query
|
|
9
|
+
bash bin/spirit-discovery-prime.sh system.explain
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Pi and Prime also register `egregore_discover_capabilities`. Prime's Python
|
|
13
|
+
bridge provides `capabilities_list`, `capabilities_find`, `capabilities_describe`,
|
|
14
|
+
`capabilities_explain` and `system_explain`.
|
|
15
|
+
|
|
16
|
+
The generic `bin/spirit-discovery.sh` selects a runtime only when exactly one
|
|
17
|
+
valid installed snapshot exists. Multiple snapshots produce `ambiguous`; use the
|
|
18
|
+
fixed adapter for your current harness. A runtime label selects installation
|
|
19
|
+
evidence. It confers no permission.
|
|
20
|
+
|
|
21
|
+
The operations are `capabilities.list`, `capabilities.find <text>`,
|
|
22
|
+
`capabilities.describe <id>`, `capabilities.explain <id>` and
|
|
23
|
+
`system.explain [id]`. `--json` reads the corresponding request from stdin:
|
|
24
|
+
`{"operation":"capabilities.find","query":"research"}`. Only operation-specific
|
|
25
|
+
`operation`, `query` and `id` fields are accepted; duplicate fields are rejected.
|
|
26
|
+
No request selects an actor, endpoint, file, policy or source map.
|
|
27
|
+
Malformed Unicode and excessively nested JSON are rejected with a bounded error
|
|
28
|
+
envelope and no diagnostic traceback.
|
|
29
|
+
|
|
30
|
+
Responses use `egregore.capability-query/v1`. The `views` array keeps local
|
|
31
|
+
installation evidence separate from optional authenticated Durable host evidence.
|
|
32
|
+
There is no combined ready badge. All responses have `execution_authority: false`.
|
|
33
|
+
Local callability remains false, even when a remote binding says it is callable
|
|
34
|
+
in the remote observed scope.
|
|
35
|
+
|
|
36
|
+
The local view reads an OSS-only build snapshot at
|
|
37
|
+
`bin/data/capabilities/<runtime>.json`. It checks the snapshot and its referenced
|
|
38
|
+
current files against the existing local installer ownership record. Modified,
|
|
39
|
+
missing, unrecorded, conflicting and unreadable evidence remain explicit. The
|
|
40
|
+
snapshot's internal digest detects inconsistency; it is not publisher authentication.
|
|
41
|
+
Its raw file hash is separately compared with the installer record.
|
|
42
|
+
|
|
43
|
+
The installed facet covers the enumerated delivered files. A capability with
|
|
44
|
+
unmeasured package/service dependencies is partial even when those files match.
|
|
45
|
+
The runtime import dependency closure is not enumerated; its explicit coverage
|
|
46
|
+
gap remains even when a tool's listed files match. File evidence does not prove
|
|
47
|
+
the whole capability can run.
|
|
48
|
+
The current registry, caller permission, operational success, evaluation evidence
|
|
49
|
+
and adoption of an authenticated release are independent facts and remain unknown
|
|
50
|
+
when no owner supplies them. An org-owned replacement cannot inherit verification
|
|
51
|
+
from the replaced framework files. Source checkouts without installer records
|
|
52
|
+
remain unrecorded. Connect overlays are not enumerated by this OSS reader.
|
|
53
|
+
|
|
54
|
+
An optional `.egregore/spirit-discovery/binding.json` enables the Durable view.
|
|
55
|
+
This private, regular, unlinked file is provisioned by the operator; discovery
|
|
56
|
+
never creates it. Its exact fields are `schema` (`egregore.discovery-binding/v1`),
|
|
57
|
+
`org_id`, `installation_key`, `actor_id`, `origin`, `remote_runtime_actor_id`,
|
|
58
|
+
`bridge_token_env` and `actor_token_env`. The last two name environment variables;
|
|
59
|
+
they do not contain credentials. The binding must match the current persisted
|
|
60
|
+
Runtime actor and installation. The HTTP response must independently identify the
|
|
61
|
+
freshly authenticated remote Runtime actor. Remote deployment identity currently
|
|
62
|
+
remains unknown. A local filesystem owner can change their own configuration;
|
|
63
|
+
these checks do not sandbox that owner.
|
|
64
|
+
|
|
65
|
+
Discovery uses the Runtime identity owner's `require_existing` resolution path.
|
|
66
|
+
It requires canonical retained account, actor, membership and organization IDs;
|
|
67
|
+
it cannot migrate, mint, lock or write identity state. The resolver reads only
|
|
68
|
+
bounded config/state files and never opens referenced identity documents. Its
|
|
69
|
+
`profile-config-only-sha256` revision covers configuration, and cannot substitute
|
|
70
|
+
for the ordinary profile revision covering declared identity documents. The
|
|
71
|
+
installation key uses that already validated organization ID without rereading
|
|
72
|
+
config; installation-root and Git-backlink behavior retains its existing scope.
|
|
73
|
+
|
|
74
|
+
The origin permits HTTPS, or numeric-loopback HTTP for local hosts. Credentials
|
|
75
|
+
are sent only to that fixed origin. Redirects are rejected. A disposable transport
|
|
76
|
+
child bounds the complete HTTP operation, including DNS resolution and trickling
|
|
77
|
+
responses, to seven seconds; response bytes are capped. Credentials travel on
|
|
78
|
+
stdin and never appear in arguments or output. Discovery makes no model/provider
|
|
79
|
+
calls, starts no jobs, probes no capabilities and writes no state.
|
|
80
|
+
|
|
81
|
+
The remote adapter accepts the exact supported v1 response shape, including
|
|
82
|
+
typed facets, bindings, generation and source evidence, and bounded standard
|
|
83
|
+
JSON Schema with local references. Extra fields, unsupported schema extensions,
|
|
84
|
+
malformed values or expired evidence make the remote view unavailable. Accepted
|
|
85
|
+
native contracts are preserved in full; response-shape validation does not
|
|
86
|
+
independently attest the host's claims or inspect arbitrary prose for secrets.
|
|
87
|
+
|
|
88
|
+
Local reads use descriptor-relative, no-symlink traversal. Snapshots are capped at
|
|
89
|
+
2 MB, 512 entries and 4096 file references; cumulative inspected payload bytes are
|
|
90
|
+
capped at 16 MB per query. Files exceeding remaining coverage are unreadable for
|
|
91
|
+
that query. Queries report coverage limits rather than interpreting an incomplete
|
|
92
|
+
view as proof of absence.
|
|
93
|
+
|
|
94
|
+
For source architecture investigation use the separate source-only
|
|
95
|
+
`bin/spirit-map.mjs` workflow. It is not imported by this reader or shipped as an
|
|
96
|
+
installed system authority. Organizational recall continues through Runtime search.
|
|
@@ -16,6 +16,7 @@ from .contracts import (
|
|
|
16
16
|
CanonicalArtifact,
|
|
17
17
|
Capability,
|
|
18
18
|
Entitlements,
|
|
19
|
+
ExecutionAuthority,
|
|
19
20
|
EgregoreProfile,
|
|
20
21
|
EvidenceItem,
|
|
21
22
|
GraphProjection,
|
|
@@ -47,7 +48,8 @@ from .contracts import (
|
|
|
47
48
|
)
|
|
48
49
|
from .errors import AuthorizationDenied, ContextBudgetError, EgregoreRuntimeError
|
|
49
50
|
from .observe import DefaultOrgContextCompiler
|
|
50
|
-
from .policy import ActorGrant, StaticPolicy,
|
|
51
|
+
from .policy import ActorGrant, StaticPolicy, allows, check, policy_for
|
|
52
|
+
from .access import authorization_inputs, AuthorizationInputs, Principal, PRINCIPAL_KINDS
|
|
51
53
|
from .telemetry import (
|
|
52
54
|
ALLOWED_METRIC_KEYS,
|
|
53
55
|
TELEMETRY_SCHEMA_VERSION,
|
|
@@ -140,7 +142,7 @@ from .ingest import (
|
|
|
140
142
|
LocalQuarantine,
|
|
141
143
|
NormalizedIngest,
|
|
142
144
|
)
|
|
143
|
-
from .runtime import EgregoreRuntime, local_runtime
|
|
145
|
+
from .runtime import EgregoreRuntime, authenticated_member_runtime, local_runtime
|
|
144
146
|
from .questions import (
|
|
145
147
|
QUESTION_SCHEMA_VERSION,
|
|
146
148
|
CanonicalQuestionService,
|
|
@@ -200,16 +202,20 @@ from .lifecycle import (
|
|
|
200
202
|
LifecycleTransition,
|
|
201
203
|
ObligationState,
|
|
202
204
|
)
|
|
203
|
-
from .
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
205
|
+
from .optional_modules import optional_module as _optional_module
|
|
206
|
+
|
|
207
|
+
# Threads are held out of installs (runtime.thread is queued in placement).
|
|
208
|
+
if _optional_module(".threads") is not None:
|
|
209
|
+
from .threads import (
|
|
210
|
+
THREAD_CONFIRMATION,
|
|
211
|
+
THREAD_EVENT_SCHEMA_VERSION,
|
|
212
|
+
THREAD_SCHEMA_VERSION,
|
|
213
|
+
CanonicalThreadService,
|
|
214
|
+
ThreadError,
|
|
215
|
+
ThreadFoldReceipt,
|
|
216
|
+
ThreadSnapshot,
|
|
217
|
+
parse_thread_markdown,
|
|
218
|
+
)
|
|
213
219
|
from .scrolls import (
|
|
214
220
|
EXACT_SHARE_CONFIRMATION,
|
|
215
221
|
SCROLL_EVENT_SCHEMA_VERSION,
|