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,41 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# boundary-hook.sh — runtime-neutral PreToolUse entry for the instance wall.
|
|
3
|
+
# Usage: boundary-hook.sh claude|codex (hook JSON on stdin)
|
|
4
|
+
# Claude Code reaches it through .claude/hooks/boundary-check.sh, Codex
|
|
5
|
+
# through .codex/hooks.json. The policy lives in bin/boundary-guard.cjs; this
|
|
6
|
+
# file only starts it and keeps the exit contract: 0 allows, 2 blocks with the
|
|
7
|
+
# reason on stderr. A hook host treats any other status as a non-blocking
|
|
8
|
+
# error, so every failure to start or finish the check becomes a denial here.
|
|
9
|
+
|
|
10
|
+
deny() {
|
|
11
|
+
echo "Environment isolation: the boundary check could not run ($1), so this action is blocked. Ask the user to install Node 22 or run /update, then restart the session." >&2
|
|
12
|
+
exit 2
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
missing() {
|
|
16
|
+
echo "Environment isolation: boundary guard missing ($1) — run /update, then restart the session. Every action is blocked until the guard is back." >&2
|
|
17
|
+
exit 2
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
BIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" || deny "its directory cannot be resolved"
|
|
21
|
+
ROOT="$(dirname "$BIN_DIR")"
|
|
22
|
+
GUARD="$BIN_DIR/boundary-guard.cjs"
|
|
23
|
+
case "${1:-claude}" in
|
|
24
|
+
codex) PROJECT_DIR="${EGREGORE_CODEX_PROJECT_DIR:-$ROOT}" ;;
|
|
25
|
+
*) PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$ROOT}" ;;
|
|
26
|
+
esac
|
|
27
|
+
[ -f "$GUARD" ] || missing "bin/boundary-guard.cjs"
|
|
28
|
+
|
|
29
|
+
NODE_BIN="$(command -v node 2>/dev/null || true)"
|
|
30
|
+
if [ -z "$NODE_BIN" ] && [ -f "$BIN_DIR/node-run.sh" ]; then
|
|
31
|
+
NODE_BIN="$(bash "$BIN_DIR/node-run.sh" -e 'process.stdout.write(process.execPath)' 2>/dev/null || true)"
|
|
32
|
+
fi
|
|
33
|
+
[ -n "$NODE_BIN" ] || deny "Node is missing"
|
|
34
|
+
|
|
35
|
+
# The check runs with no inherited Node options: a preload cannot replace it.
|
|
36
|
+
env -u NODE_OPTIONS "$NODE_BIN" "$GUARD" --project-dir "$PROJECT_DIR"
|
|
37
|
+
status=$?
|
|
38
|
+
case "$status" in
|
|
39
|
+
0|2) exit "$status" ;;
|
|
40
|
+
*) deny "it exited with status $status" ;;
|
|
41
|
+
esac
|
|
@@ -60,7 +60,7 @@ Usage:
|
|
|
60
60
|
capture-run.sh --mode personal|baseline --author HANDLE --topic TOPIC
|
|
61
61
|
--summary SUMMARY [--session-id ID] [--branch BRANCH] [--date ISO]
|
|
62
62
|
[--duration TEXT] [--open-threads-json JSON] [--no-push]
|
|
63
|
-
[--async-push] [--no-reconcile] < details.md
|
|
63
|
+
[--async-push] [--no-reconcile] [--replace-session] < details.md
|
|
64
64
|
EOF
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -139,6 +139,11 @@ OPEN_THREADS_JSON="[]"
|
|
|
139
139
|
NO_PUSH=0
|
|
140
140
|
ASYNC_PUSH=0
|
|
141
141
|
NO_RECONCILE=0
|
|
142
|
+
REPLACE_SESSION=0
|
|
143
|
+
RECORD_METADATA=""
|
|
144
|
+
RECORD_ROOT="$SCRIPT_DIR"
|
|
145
|
+
RECORD_FOLDER=""
|
|
146
|
+
RECORD_STAGING=""
|
|
142
147
|
|
|
143
148
|
while [ $# -gt 0 ]; do
|
|
144
149
|
case "$1" in
|
|
@@ -154,11 +159,32 @@ while [ $# -gt 0 ]; do
|
|
|
154
159
|
--no-push) NO_PUSH=1; shift ;;
|
|
155
160
|
--async-push) ASYNC_PUSH=1; shift ;;
|
|
156
161
|
--no-reconcile) NO_RECONCILE=1; shift ;;
|
|
162
|
+
--replace-session) REPLACE_SESSION=1; shift ;;
|
|
163
|
+
--record-metadata) RECORD_METADATA="${2:-}"; shift 2 ;;
|
|
164
|
+
--project-root) RECORD_ROOT="${2:-}"; shift 2 ;;
|
|
165
|
+
--record-folder) RECORD_FOLDER="${2:-}"; shift 2 ;;
|
|
166
|
+
--staging) RECORD_STAGING="${2:-}"; shift 2 ;;
|
|
157
167
|
--no-index|--no-publish|--no-notify) shift ;; # addressed-only compatibility flags
|
|
158
168
|
*) echo "Unknown capture option: $1" >&2; exit 1 ;;
|
|
159
169
|
esac
|
|
160
170
|
done
|
|
161
171
|
|
|
172
|
+
# Session records use the same capture entry point with an isolated writer.
|
|
173
|
+
# Replacement, revision guards, staging, and the canonical memory lock apply
|
|
174
|
+
# only to this path; checkpoint records write files without committing.
|
|
175
|
+
if [ "$REPLACE_SESSION" = "1" ] && [ "$CAPTURE_MODE" = "baseline" ]; then
|
|
176
|
+
RECORD_ARGS=(capture --root "$RECORD_ROOT")
|
|
177
|
+
if [ -n "$RECORD_METADATA" ]; then
|
|
178
|
+
RECORD_ARGS+=(--data "$RECORD_METADATA")
|
|
179
|
+
else
|
|
180
|
+
RECORD_ARGS+=(--author "$AUTHOR" --topic "$TOPIC" --summary "$SUMMARY"
|
|
181
|
+
--session-id "$SESSION_ID" --branch "$BRANCH" --date "$CAPTURE_DATE" --duration "$DURATION")
|
|
182
|
+
fi
|
|
183
|
+
[ -z "$RECORD_FOLDER" ] || RECORD_ARGS+=("--folder=$RECORD_FOLDER")
|
|
184
|
+
[ -z "$RECORD_STAGING" ] || RECORD_ARGS+=(--staging "$RECORD_STAGING")
|
|
185
|
+
exec python3 "$SCRIPT_DIR/bin/lib/session_record.py" "${RECORD_ARGS[@]}"
|
|
186
|
+
fi
|
|
187
|
+
|
|
162
188
|
AUTHOR="$(printf '%s' "$AUTHOR" | tr -cd 'a-zA-Z0-9_-')"
|
|
163
189
|
[ -n "$AUTHOR" ] || { echo "Missing --author" >&2; exit 1; }
|
|
164
190
|
[ -n "$TOPIC" ] || { echo "Missing --topic" >&2; exit 1; }
|
|
@@ -253,7 +279,11 @@ memory_save() {
|
|
|
253
279
|
local _
|
|
254
280
|
for _ in 1 2 3; do
|
|
255
281
|
git pull --rebase origin main --quiet >/dev/null 2>&1 || true
|
|
256
|
-
|
|
282
|
+
if bash "$SCRIPT_DIR/bin/memory-push.sh" --repository "$SCRIPT_DIR/memory" --branch main >/dev/null 2>&1; then
|
|
283
|
+
exit 0
|
|
284
|
+
else
|
|
285
|
+
case "$?" in 75) ;; *) exit 1 ;; esac
|
|
286
|
+
fi
|
|
257
287
|
sleep 1
|
|
258
288
|
done
|
|
259
289
|
exit 1
|
|
@@ -80,12 +80,9 @@ formats: \`docs/AGENT-PROTOCOL.md\`. Follow the generated contract below.
|
|
|
80
80
|
|
|
81
81
|
Internal handoffs use \`bin/agent.sh handoff\` (\`memory/handoffs/\` + index,
|
|
82
82
|
via \`bin/handoff-run.sh\`). External capsules use \`egregore-emissary\`.
|
|
83
|
-
Never use deprecated \`egregore-handoff\` for internal handoffs
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
Claude Code follows \`CLAUDE.md\`; other shell agents use the generated
|
|
88
|
-
contract below. All runtimes share canonical memory.`;
|
|
83
|
+
Never use deprecated \`egregore-handoff\` for internal handoffs.`;
|
|
84
|
+
// A "Compatibility" section used to restate the precedence guard above; it was
|
|
85
|
+
// dropped (2026-09) to keep AGENTS.md inside the 32 KiB budget.
|
|
89
86
|
|
|
90
87
|
function sha(text) {
|
|
91
88
|
return crypto.createHash('sha256').update(text).digest('hex').slice(0, 12);
|
|
@@ -130,18 +127,8 @@ attribution line alone. Never re-print ranked results or raw JSON.`;
|
|
|
130
127
|
const SHELL_PACKET_NOTE = `Search output is model-internal: show only the retrieval line and receipts —
|
|
131
128
|
never ranked blocks, file/rank/excerpt metadata, or raw JSON.`;
|
|
132
129
|
|
|
133
|
-
// The Command Awareness lifecycle bullet is Claude-surface routing prose; on
|
|
134
|
-
// Codex the same typed-lookup routing arrives through the shared hook
|
|
135
|
-
// contract, and the 32 KiB project-doc budget has no room to restate it.
|
|
136
|
-
// Decided 2026-09: drop the bullet from the render rather than ship a stale
|
|
137
|
-
// hand-reverted AGENTS.md.
|
|
138
|
-
const CLAUDE_LIFECYCLE_BULLET_PREFIX = '- Exact lifecycle questions (';
|
|
139
|
-
|
|
140
130
|
function transformSearchHygiene(body) {
|
|
141
131
|
return body
|
|
142
|
-
.split('\n')
|
|
143
|
-
.filter((line) => !line.startsWith(CLAUDE_LIFECYCLE_BULLET_PREFIX))
|
|
144
|
-
.join('\n')
|
|
145
132
|
.replaceAll(CLAUDE_PACKET_NOTE, SHELL_PACKET_NOTE)
|
|
146
133
|
.replace(/(\bbin\/search\.sh[^\n]*?) --context-packet\b/g, '$1');
|
|
147
134
|
}
|
|
@@ -209,25 +196,7 @@ For continued project work: **continuation intent → prior workspace → restor
|
|
|
209
196
|
|
|
210
197
|
### Handoff claiming
|
|
211
198
|
|
|
212
|
-
|
|
213
|
-
\`\`\`bash
|
|
214
|
-
bash bin/graph-op.sh claim-handoff "$SESSION_ID" "$HANDOFF_SESSION_ID" 2>/dev/null &
|
|
215
|
-
\`\`\`
|
|
216
|
-
|
|
217
|
-
**Auto-checkout repos from handoff**: after claiming, if \`addressed_rich\` carries a non-empty \`repoState\`, check out each entry's branch in its managed repo:
|
|
218
|
-
|
|
219
|
-
\`\`\`bash
|
|
220
|
-
PARENT_DIR="$(cd .. && pwd)"
|
|
221
|
-
# For each entry in repoState:
|
|
222
|
-
REPO_DIR="$PARENT_DIR/$REPO_NAME"
|
|
223
|
-
if [ -d "$REPO_DIR/.git" ] || [ -f "$REPO_DIR/.git" ]; then
|
|
224
|
-
git -C "$REPO_DIR" fetch origin "$BRANCH" --quiet 2>/dev/null
|
|
225
|
-
git -C "$REPO_DIR" checkout "$BRANCH" 2>/dev/null || \\
|
|
226
|
-
git -C "$REPO_DIR" checkout -b "$BRANCH" "origin/$BRANCH" 2>/dev/null
|
|
227
|
-
fi
|
|
228
|
-
\`\`\`
|
|
229
|
-
|
|
230
|
-
Report \`✓ Checked out {branch} in {repo1}, {repo2}\`; for a merged-away branch, \`◐ {repo}: PR #{N} merged — on {base}\`. If \`repoState\` is absent or empty, skip silently.
|
|
199
|
+
When the user picks up a handoff addressed to them, follow \`.claude/context/handoff-claiming.md\` after branch creation: it claims the handoff and checks out the branches its \`repoState\` names in each managed repo.
|
|
231
200
|
|
|
232
201
|
**Exceptions** — skip branching when the user explicitly created or named a branch themselves, or the intent continues the current working branch's topic.
|
|
233
202
|
|
|
@@ -262,7 +231,9 @@ only for dependencies. Deletion needs no rewrite unless purging secrets.
|
|
|
262
231
|
|
|
263
232
|
If the startup card output contains \`onboarding_needed\`, invoke the \`$onboarding\` skill instead of greeting.`;
|
|
264
233
|
|
|
265
|
-
const COMMAND_AWARENESS_PREPEND = `Codex reserves leading \`/\` for built-ins. Invoke Egregore skills with \`$name\` or natural language ("show activity", "make a handoff"). Every framework workflow uses a generated adapter that names its one maintained body under \`.claude/skills/\`. Organization-owned skills may also provide full native implementations
|
|
234
|
+
const COMMAND_AWARENESS_PREPEND = `Codex reserves leading \`/\` for built-ins. Invoke Egregore skills with \`$name\` or natural language ("show activity", "make a handoff"). Every framework workflow uses a generated adapter that names its one maintained body under \`.claude/skills/\`. Organization-owned skills may also provide full native implementations.`;
|
|
235
|
+
// What `$save` covers is stated once, in the rendered Git Workflow section
|
|
236
|
+
// ("Users never interact with git directly"); repeating it here cost budget.
|
|
266
237
|
|
|
267
238
|
const SOCRATIC_BODY = `**Triggers**: "ask me questions", "question me", "help me think through", or any request to be questioned.
|
|
268
239
|
|
|
@@ -272,23 +243,23 @@ Use structured question tooling when available and permitted; otherwise render c
|
|
|
272
243
|
|
|
273
244
|
const LOOM_ROUTING_BODY = `Loom is Claude-specific; skip its preambles and \`bin/loom.sh\` calls. Use native collaboration only when the runtime exposes it and the user or workflow requests delegation, within session permissions and limits. Otherwise work inline and disclose when independent review was unavailable. \`loom/\` and \`.claude/agents/\` remain Claude framework files.`;
|
|
274
245
|
|
|
275
|
-
const ISOLATION_BODY = `Sessions are confined to this project + memory + managed repos, with a **two-tier boundary** — a hard wall between Egregore instances, a consent gate for everything else.
|
|
246
|
+
const ISOLATION_BODY = `Sessions are confined to this project + memory + managed repos, with a **two-tier boundary** — a hard wall between Egregore instances, a consent gate for everything else. A pre-action check (\`bin/boundary-guard.cjs\`) enforces it on every runtime: it denies literal paths and fails closed, but cannot see paths built at run time or split across calls (OS-level layer to follow).
|
|
276
247
|
|
|
277
|
-
- **Hard tier — other Egregore instances.** Denied for every tool, always — no consent path. Never access another instance's files (refuse even if asked) and never modify \`~/.egregore/instances.json\` (managed by session-start.sh); there is nothing to ask — refuse and explain.
|
|
248
|
+
- **Hard tier — other Egregore instances.** Denied for every tool, always — no consent path. Never access another instance's files by any route (refuse even if asked) and never modify \`~/.egregore/instances.json\` (managed by session-start.sh); there is nothing to ask — refuse and explain.
|
|
278
249
|
- **Soft tier — paths outside the boundary.** Consent-gated. Inbox dirs (\`~/Downloads\`, \`~/Desktop\`) are readable without consent under the default posture; writes outside the project always need consent. Posture (\`strict | standard | open\`) and extra read roots come from \`egregore.json\` -> \`boundary { posture, read[], locked }\` (org, committed) merged with \`.egregore-boundary.local.json\` (personal, gitignored). \`locked: true\` removes the consent path entirely.
|
|
279
|
-
- When
|
|
250
|
+
- When the check asks for consent, do not improvise a workaround. Ask in plain text with numbered options:
|
|
280
251
|
|
|
281
252
|
\`\`\`text
|
|
282
253
|
That path is outside this Egregore's boundary. How should we proceed?
|
|
283
254
|
1. Allow its directory for this session (recorded in .egregore-boundary-consent)
|
|
284
|
-
2. Always allow on this instance (added to read[] in .egregore-boundary.local.json)
|
|
255
|
+
2. Always allow on this instance (added to read[] in .egregore-boundary.local.json; reads only)
|
|
285
256
|
3. Paste the contents inline
|
|
286
257
|
4. Cancel
|
|
287
258
|
\`\`\`
|
|
288
259
|
|
|
289
260
|
Never record a consent grant without the user's explicit choice of option 1 or 2 in that exchange. Session grants are cleared on session start; \`locked: true\` removes options 1 and 2.
|
|
290
261
|
|
|
291
|
-
|
|
262
|
+
Details: DEVELOPMENT.md §3; design: \`memory/knowledge/decisions/2026-07-08-boundary-hook-consent-design.md\`.`;
|
|
292
263
|
|
|
293
264
|
// ── per-section rules ────────────────────────────────────────────────────
|
|
294
265
|
const RULES = {
|
|
@@ -302,8 +273,16 @@ const RULES = {
|
|
|
302
273
|
note: 'Kept; /update, /contribute, /save tokens rendered as $skill tokens.',
|
|
303
274
|
},
|
|
304
275
|
'Cross-Runtime Compatibility': {
|
|
305
|
-
action: '
|
|
306
|
-
|
|
276
|
+
action: 'replace',
|
|
277
|
+
body: `Share \`bin/\` mechanics through thin Claude/Codex/Pi/Prime adapters. Startup,
|
|
278
|
+
lifecycle, capture, skill and command changes require tracing every runtime,
|
|
279
|
+
parity tests and regenerated specs/bundles before completion.
|
|
280
|
+
|
|
281
|
+
Discover via \`bash bin/spirit-discovery-codex.sh capabilities.list\` (Pi/Prime:
|
|
282
|
+
registered tool). Follow \`docs/spirit-discovery.md\`: keep seven facets separate;
|
|
283
|
+
generic shell needs one snapshot. Discovery reads code/install evidence, not
|
|
284
|
+
memory, and grants no authority.`,
|
|
285
|
+
note: 'Compact translation preserves shared mechanics, thin adapters, every-runtime tracing/parity and regeneration, and neutral discovery without authority. Full query/facet and fixed-adapter details remain in shipped docs/spirit-discovery.md. Fits the 32 KiB project-doc budget.',
|
|
307
286
|
},
|
|
308
287
|
'Voice': {
|
|
309
288
|
action: 'keep',
|
|
@@ -317,7 +296,7 @@ const RULES = {
|
|
|
317
296
|
'Before Project Changes — WORKING BRANCH': {
|
|
318
297
|
action: 'replace',
|
|
319
298
|
body: AFTER_GREETING_BODY,
|
|
320
|
-
note: 'EnterWorktree -> bin/agent.sh branch with git checkout fallback; AskUserQuestion -> numbered options in plain text; branch-guard mapped to .codex/hooks/branch-guard.js with instruction fallback; plan-mode note dropped (no plan mode on Codex); /branch + /onboarding -> skill tokens. Handoff claiming
|
|
299
|
+
note: 'EnterWorktree -> bin/agent.sh branch with git checkout fallback; AskUserQuestion -> numbered options in plain text; branch-guard mapped to .codex/hooks/branch-guard.js with instruction fallback; plan-mode note dropped (no plan mode on Codex); /branch + /onboarding -> skill tokens. Handoff claiming points to the shared .claude/context/handoff-claiming.md procedure; surrounding prose compressed 2026-08 for the 32 KiB budget, every rule retained.',
|
|
321
300
|
},
|
|
322
301
|
'Config Files': { action: 'keep', note: 'Kept verbatim — shell facts, runtime-neutral.' },
|
|
323
302
|
'Optional Knowledge Graph Projection': {
|
|
@@ -338,7 +317,6 @@ const RULES = {
|
|
|
338
317
|
action: 'keep',
|
|
339
318
|
note: 'Kept; slash tokens rendered as $skill tokens. Branch diagram unchanged (code fence).',
|
|
340
319
|
},
|
|
341
|
-
'Working Conventions': { action: 'keep', note: 'Kept verbatim.' },
|
|
342
320
|
'Command Awareness': {
|
|
343
321
|
action: 'keep',
|
|
344
322
|
prepend: COMMAND_AWARENESS_PREPEND,
|
|
@@ -354,7 +332,7 @@ const RULES = {
|
|
|
354
332
|
'Environment Isolation': {
|
|
355
333
|
action: 'replace',
|
|
356
334
|
body: ISOLATION_BODY,
|
|
357
|
-
note: 'boundary
|
|
335
|
+
note: 'The boundary policy is shared (bin/boundary-guard.cjs): Claude (boundary-check.sh) and Codex (.codex/hooks.json) run it through bin/boundary-hook.sh (PreToolUse), Pi and Prime from their tool_call gate. AskUserQuestion remediation -> numbered options, including the two consent-grant options (session grant -> .egregore-boundary-consent, instance grant -> .egregore-boundary.local.json read[], reads only).',
|
|
358
336
|
},
|
|
359
337
|
};
|
|
360
338
|
|
|
@@ -26,6 +26,16 @@ rm -f "$SCRIPT_DIR/.egregore-branch-consent" "$MAIN_PROJECT_DIR/.egregore-branch
|
|
|
26
26
|
rm -f "$SCRIPT_DIR/.egregore-boundary-consent" "$MAIN_PROJECT_DIR/.egregore-boundary-consent" 2>/dev/null
|
|
27
27
|
# Prune abandoned scratch without blocking startup or fresh sibling work.
|
|
28
28
|
( bash "$SCRIPT_DIR/bin/scratch-sweep.sh" --older-than 60 >/dev/null 2>&1 & ) 2>/dev/null
|
|
29
|
+
# Compute the session boundary the pre-action checks read (Codex hook, Pi and
|
|
30
|
+
# Prime tool_call gate) — the same shared computation Claude's SessionStart
|
|
31
|
+
# runs. If it fails, the checks recompute it themselves instead of failing open.
|
|
32
|
+
bash "$SCRIPT_DIR/bin/node-run.sh" "$SCRIPT_DIR/bin/boundary-guard.cjs" write-cache "$SCRIPT_DIR" >/dev/null 2>&1 || true
|
|
33
|
+
# Registry maintenance shared with Claude's SessionStart: drop entries that are
|
|
34
|
+
# another instance's runtime state (bin/lib/instance-registry.sh).
|
|
35
|
+
if command -v jq >/dev/null 2>&1 && [ -f "$SCRIPT_DIR/bin/lib/instance-registry.sh" ]; then
|
|
36
|
+
( ( source "$SCRIPT_DIR/bin/lib/instance-registry.sh" \
|
|
37
|
+
&& egregore_registry_prune "$HOME/.egregore/instances.json" ) >/dev/null 2>&1 & ) 2>/dev/null || true
|
|
38
|
+
fi
|
|
29
39
|
|
|
30
40
|
if [ -f "$SCRIPT_DIR/bin/lib/worktree-links.sh" ]; then
|
|
31
41
|
source "$SCRIPT_DIR/bin/lib/worktree-links.sh" >/dev/null 2>/dev/null || true
|
|
@@ -77,7 +87,12 @@ if [ "$LOCAL_MODE" != "true" ]; then
|
|
|
77
87
|
fi
|
|
78
88
|
fi
|
|
79
89
|
|
|
90
|
+
source "$SCRIPT_DIR/bin/lib/startup-restart.sh"
|
|
91
|
+
_STARTUP_HEAD=$(egregore_startup_head)
|
|
80
92
|
source "$SCRIPT_DIR/bin/lib/git-sync.sh" >/dev/null 2>/dev/null
|
|
93
|
+
# A sync that pulled a newer startup finishes on it (bin/lib/startup-restart.sh).
|
|
94
|
+
egregore_startup_restart "$_STARTUP_HEAD" "$SCRIPT_DIR/bin/codex-session-start.sh" "$@"
|
|
95
|
+
unset _STARTUP_HEAD
|
|
81
96
|
source "$SCRIPT_DIR/bin/lib/health-footer.sh"
|
|
82
97
|
source "$SCRIPT_DIR/bin/lib/notices.sh"
|
|
83
98
|
_notice_init
|
|
@@ -237,6 +252,10 @@ render_card() {
|
|
|
237
252
|
case "${1:---card}" in
|
|
238
253
|
--card|card)
|
|
239
254
|
render_card
|
|
255
|
+
EGREGORE_GREETING_RECORDS_ONLY=1 source "$SCRIPT_DIR/bin/lib/greeting.sh"
|
|
256
|
+
_print_session_records
|
|
257
|
+
EGREGORE_HARNESS="${EGREGORE_HARNESS:-codex}" _print_reflexes
|
|
258
|
+
( bash "$SCRIPT_DIR/bin/session-record.sh" --mode sweep >/dev/null 2>&1 & ) 2>/dev/null
|
|
240
259
|
;;
|
|
241
260
|
--prompt|prompt)
|
|
242
261
|
native_tokens="$(bash "$SCRIPT_DIR/bin/codex-sync-skills.sh" --list-native | awk 'BEGIN { sep="" } NF { printf "%s$%s", sep, $0; sep=", " }')"
|
|
@@ -148,6 +148,20 @@ function classifyGraph(data, options = {}) {
|
|
|
148
148
|
};
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
+
function spiritRows(data, personal = false) {
|
|
152
|
+
const rows = firstArray(data, personal ? ['my_spirit_records'] : ['spirit_records']);
|
|
153
|
+
if (!rows.length && !data.unsupported_native_records && !data.held_records?.length) return [];
|
|
154
|
+
const lines = [rule(), padLine('SPIRIT RECORDS')];
|
|
155
|
+
rows.slice(0, 5).forEach((row) => {
|
|
156
|
+
const state = row.state || {};
|
|
157
|
+
lines.push(padLine(`${row.producer_principal_id || 'spirit'} · ${state.execution || 'unknown'}`, `outcome ${state.outcome || 'unknown'}`));
|
|
158
|
+
lines.push(padLine(`verification ${state.verification || 'unknown'} · partial coverage`));
|
|
159
|
+
});
|
|
160
|
+
if (data.unsupported_native_records) lines.push(padLine(`${data.unsupported_native_records} unsupported records · metadata unavailable`));
|
|
161
|
+
if (data.held_records?.length) lines.push(padLine(`${data.held_records.length} held records · details withheld`));
|
|
162
|
+
return lines;
|
|
163
|
+
}
|
|
164
|
+
|
|
151
165
|
function renderActivity(data) {
|
|
152
166
|
const graph = classifyGraph(data, { mode: data.mode || 'connected', attempt: 'retry' });
|
|
153
167
|
const org = data.org || data.organization || 'Egregore';
|
|
@@ -219,6 +233,8 @@ function renderActivity(data) {
|
|
|
219
233
|
});
|
|
220
234
|
}
|
|
221
235
|
|
|
236
|
+
lines.push(...spiritRows(data));
|
|
237
|
+
|
|
222
238
|
lines.push(rule());
|
|
223
239
|
if (handoffs.length > 0) {
|
|
224
240
|
lines.push(padLine('Handoff actions: done N · expire N · reopen N'));
|
|
@@ -305,6 +321,8 @@ function renderDashboard(data) {
|
|
|
305
321
|
});
|
|
306
322
|
}
|
|
307
323
|
|
|
324
|
+
lines.push(...spiritRows(data, true));
|
|
325
|
+
|
|
308
326
|
lines.push(rule());
|
|
309
327
|
const total = stats.totalSessions ?? data.local_sessions?.session_count ?? sessions.length;
|
|
310
328
|
const wrapped = stats.wrappedSessions ?? sessions.filter((s) => valueOf(s, ['status', 'type'], '').includes('wrap')).length;
|
|
@@ -4,6 +4,7 @@ set -euo pipefail
|
|
|
4
4
|
unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE GIT_OBJECT_DIRECTORY GIT_ALTERNATE_OBJECT_DIRECTORIES GIT_COMMON_DIR
|
|
5
5
|
|
|
6
6
|
# Print one configuration value for skill instructions to name and reuse.
|
|
7
|
+
# api_url prints the address to send requests to (the saved one, resolved).
|
|
7
8
|
# Present-but-empty and non-string values are unset; repo_name defaults to
|
|
8
9
|
# egregore. The composed repo requires a nonempty string github_org.
|
|
9
10
|
# Exit 0 = value printed (or unset), Exit 1 = invalid/unreadable configuration
|
|
@@ -35,7 +36,15 @@ fi
|
|
|
35
36
|
|
|
36
37
|
case "$1" in
|
|
37
38
|
mode) _detect_mode ;;
|
|
38
|
-
api_url
|
|
39
|
+
api_url)
|
|
40
|
+
# Skills send credentials to this address: never hand them the retired
|
|
41
|
+
# origin, or an address that is not plain (bin/lib/config.sh
|
|
42
|
+
# _hosted_api_url). A refused one prints nothing and fails, so the
|
|
43
|
+
# skill sends nothing.
|
|
44
|
+
value=$(_hosted_api_url "$(jq -r '.api_url | select(type == "string" and length > 0)' "$CONFIG")") || exit 1
|
|
45
|
+
if [ -n "$value" ]; then printf '%s\n' "$value"; fi
|
|
46
|
+
;;
|
|
47
|
+
github_org|org_name|slug|memory_repo|upstream_url)
|
|
39
48
|
value=$(jq -r --arg key "$1" '.[$key] | select(type == "string" and length > 0)' "$CONFIG")
|
|
40
49
|
if [ -n "$value" ]; then printf '%s\n' "$value"; fi
|
|
41
50
|
;;
|
|
@@ -16,6 +16,22 @@ if [ "$MODE" != "connected" ] && [ -z "$API_URL" ]; then
|
|
|
16
16
|
exit 0
|
|
17
17
|
fi
|
|
18
18
|
|
|
19
|
+
# The refresh runs whichever create-egregore npx has cached, which may be a
|
|
20
|
+
# release from before the October 2026 security reset: it sends the org key
|
|
21
|
+
# to the saved address exactly as written. Run it only when that address needs
|
|
22
|
+
# no resolving, so it never reaches the retired origin or an address the
|
|
23
|
+
# resolver refuses (bin/lib/config.sh). Those wait for /update, quietly.
|
|
24
|
+
# shellcheck source=lib/config.sh
|
|
25
|
+
source "$SCRIPT_DIR/lib/config.sh" 2>/dev/null || exit 0
|
|
26
|
+
SAVED="$API_URL"
|
|
27
|
+
SAVED="${SAVED#"${SAVED%%[![:space:]]*}"}"
|
|
28
|
+
SAVED="${SAVED%"${SAVED##*[![:space:]]}"}"
|
|
29
|
+
while [ "${SAVED%/}" != "$SAVED" ]; do SAVED="${SAVED%/}"; done
|
|
30
|
+
RESOLVED="$(EGREGORE_ADDRESS_NOTICE=shown _hosted_api_url "$API_URL" 2>/dev/null)" || exit 0
|
|
31
|
+
if [ -z "$RESOLVED" ] || [ "$RESOLVED" != "$SAVED" ]; then
|
|
32
|
+
exit 0
|
|
33
|
+
fi
|
|
34
|
+
|
|
19
35
|
LOG_DIR="$ROOT/.egregore"
|
|
20
36
|
mkdir -p "$LOG_DIR" 2>/dev/null || true
|
|
21
37
|
LOG="$LOG_DIR/connect-refresh.log"
|
|
@@ -799,6 +799,11 @@ def parser() -> argparse.ArgumentParser:
|
|
|
799
799
|
|
|
800
800
|
def main() -> int:
|
|
801
801
|
args = parser().parse_args()
|
|
802
|
+
root = Path(__file__).resolve().parent.parent
|
|
803
|
+
sys.path.insert(0, str(root))
|
|
804
|
+
from egregore_runtime.admin_entry import require_admin
|
|
805
|
+
|
|
806
|
+
require_admin("The corpus map", root) # admin-only: it reads the corpus outside the predicate
|
|
802
807
|
return args.func(args)
|
|
803
808
|
|
|
804
809
|
|