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
|
@@ -34,6 +34,9 @@ fi
|
|
|
34
34
|
type egregore_commit >/dev/null 2>&1 || egregore_commit() {
|
|
35
35
|
local gd="$1" m="$3"; shift 3; git -C "$gd" commit -m "$m" "$@"
|
|
36
36
|
}
|
|
37
|
+
type egregore_session_id >/dev/null 2>&1 || egregore_session_id() {
|
|
38
|
+
head -n 1 "$1/.egregore-session-id" 2>/dev/null; return 0
|
|
39
|
+
}
|
|
37
40
|
type egregore_pr_skeleton >/dev/null 2>&1 || egregore_pr_skeleton() {
|
|
38
41
|
printf '## What\n%s\n\n## Why\n%s\n\n## Verification\n%s\n\n%s\n' "$1" "$2" "$3" "$4"
|
|
39
42
|
}
|
|
@@ -54,7 +57,12 @@ Runtime-neutral commands:
|
|
|
54
57
|
Commit and push current repo + memory changes;
|
|
55
58
|
PR body follows .claude/context/pr-format.md
|
|
56
59
|
(auto-generated skeleton if not provided);
|
|
57
|
-
new code PRs stay draft until --ready
|
|
60
|
+
new code PRs stay draft until --ready, which
|
|
61
|
+
first runs the checks CI would select here
|
|
62
|
+
merge <pr> [--receipt FILE] [--dry-run] [--local-receipt FILE]
|
|
63
|
+
Merge a PR into the integration branch through
|
|
64
|
+
the gate: green merges; a red check needs a
|
|
65
|
+
receipt naming it and why (bin/merge-gate.sh)
|
|
58
66
|
autosave [status|on|off|scope|publish|merge] Personal ambient-save settings + consent
|
|
59
67
|
wrap --topic T --summary TEXT Write a session wrap to memory/wraps
|
|
60
68
|
handoff --from A --to B --topic T [--intent action|feedback|fyi]
|
|
@@ -148,9 +156,13 @@ save_memory() {
|
|
|
148
156
|
branch="$(memory_branch)"
|
|
149
157
|
[ -z "$branch" ] && branch="main"
|
|
150
158
|
for _try in 1 2 3; do
|
|
151
|
-
if git -C "$MEMORY_DIR" pull --rebase origin "$branch" --quiet 2>/dev/null
|
|
152
|
-
|
|
153
|
-
|
|
159
|
+
if git -C "$MEMORY_DIR" pull --rebase origin "$branch" --quiet 2>/dev/null; then
|
|
160
|
+
if bash "$SCRIPT_DIR/bin/memory-push.sh" --repository "$MEMORY_DIR" --branch "$branch" >/dev/null 2>&1; then
|
|
161
|
+
return 0
|
|
162
|
+
else
|
|
163
|
+
local push_status=$?
|
|
164
|
+
case "$push_status" in 75) ;; *) die "memory saved locally; guarded publication is pending review or reconciliation" ;; esac
|
|
165
|
+
fi
|
|
154
166
|
fi
|
|
155
167
|
sleep 1
|
|
156
168
|
done
|
|
@@ -229,6 +241,7 @@ Egregore portable agent protocol
|
|
|
229
241
|
7. Run `bin/agent.sh search "<query>"` to recall shared memory (decisions, handoffs, knowledge) before answering questions about past work.
|
|
230
242
|
8. Run `bin/agent.sh branch --topic "<what you are working on>"` before code changes when you need a task branch/worktree.
|
|
231
243
|
9. Run `bin/agent.sh save` and `bin/agent.sh wrap` for portable save/wrap flows.
|
|
244
|
+
10. Run `bin/agent.sh merge <pr>` to merge a PR into its integration branch, never `gh pr merge`; a red check needs `--receipt <file>` naming each failing job and why.
|
|
232
245
|
|
|
233
246
|
This protocol is runtime-neutral. Claude Code may still use .claude hooks and
|
|
234
247
|
skills, while Codex or another agent can call this script directly.
|
|
@@ -403,9 +416,188 @@ build_pr_body() {
|
|
|
403
416
|
"🤖 Saved via bin/agent.sh"
|
|
404
417
|
}
|
|
405
418
|
|
|
419
|
+
# Inputs of each step the save regenerates, as Git pathspecs. The generators
|
|
420
|
+
# are the authority; re-derive a list when its generator changes. A step's
|
|
421
|
+
# own outputs count as inputs, so a hand edit is regenerated, not committed.
|
|
422
|
+
# codex-skills bin/codex-sync-skills.sh: the .codex/skills adapters, from
|
|
423
|
+
# .claude/skills frontmatter classified by the skill inventory
|
|
424
|
+
# (capability-distribution.json, egregore.json owned_skills)
|
|
425
|
+
# codex-spec bin/codex-render-spec.mjs: AGENTS.md and
|
|
426
|
+
# .codex/spec-manifest.json, from CLAUDE.md alone
|
|
427
|
+
# pi-spec bin/pi-render-spec.mjs: .pi/APPEND_SYSTEM.md, from AGENTS.md
|
|
428
|
+
# prime-spec bin/prime-render-spec.mjs: .prime/agent/APPEND_SYSTEM.md,
|
|
429
|
+
# from AGENTS.md
|
|
430
|
+
# bundles `npm run build:runtime` in packages/create-egregore, chaining
|
|
431
|
+
# bin/capability-distribution.mjs generate-skill-view and
|
|
432
|
+
# packages/create-egregore/scripts/build-runtime-bundle.mjs (Codex):
|
|
433
|
+
# AGENTS.md, .claude/context, .codex, .agents, docs/{credential-entry,spirit-discovery}.md,
|
|
434
|
+
# egregore_runtime and the bin allowlist; Pi and Prime copy this tree
|
|
435
|
+
# packages/create-egregore/scripts/build-claude-runtime-bundle.mjs:
|
|
436
|
+
# CLAUDE.md, .claude/{context,hooks,rules,skills}, the same docs, bin
|
|
437
|
+
# packages/create-egregore/scripts/build-pi-runtime-bundle.mjs: .pi, bin
|
|
438
|
+
# packages/create-egregore/scripts/build-prime-runtime-bundle.mjs: .prime, bin
|
|
439
|
+
# api/scripts/build-connect-runtime-pack.mjs: .claude/skills, .codex/skills
|
|
440
|
+
# Each reads capability-distribution.json, which selects what ships; the
|
|
441
|
+
# builders and the package.json script that chains them are inputs too.
|
|
442
|
+
# A directory stands in for the curated list inside it (bin for the
|
|
443
|
+
# allowlist): an unrelated change there costs a no-op build of about a
|
|
444
|
+
# second, while a missing input ships a stale bundle.
|
|
445
|
+
derivation_inputs() {
|
|
446
|
+
case "$1" in
|
|
447
|
+
codex-skills) printf '%s\n' .claude/skills .codex/skills capability-distribution.json \
|
|
448
|
+
egregore.json bin/codex-sync-skills.sh bin/capability-distribution.mjs ;;
|
|
449
|
+
codex-spec) printf '%s\n' CLAUDE.md AGENTS.md .codex/spec-manifest.json bin/codex-render-spec.mjs ;;
|
|
450
|
+
pi-spec) printf '%s\n' AGENTS.md .pi/APPEND_SYSTEM.md .pi/spec-manifest.json bin/pi-render-spec.mjs ;;
|
|
451
|
+
prime-spec) printf '%s\n' AGENTS.md .prime/agent/APPEND_SYSTEM.md \
|
|
452
|
+
.prime/agent/spec-manifest.json bin/prime-render-spec.mjs ;;
|
|
453
|
+
bundles) printf '%s\n' \
|
|
454
|
+
AGENTS.md CLAUDE.md capability-distribution.json docs/credential-entry.md docs/spirit-discovery.md \
|
|
455
|
+
bin egregore_runtime .agents .codex .pi .prime \
|
|
456
|
+
.claude/context .claude/hooks .claude/rules .claude/skills \
|
|
457
|
+
packages/create-egregore/package.json packages/create-egregore/scripts \
|
|
458
|
+
api/scripts/build-connect-runtime-pack.mjs ;;
|
|
459
|
+
esac
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
# What the counted steps write.
|
|
463
|
+
derivation_outputs() {
|
|
464
|
+
case "$1" in
|
|
465
|
+
codex-spec) printf '%s\n' AGENTS.md .codex/spec-manifest.json ;;
|
|
466
|
+
pi-spec) printf '%s\n' .pi/APPEND_SYSTEM.md .pi/spec-manifest.json ;;
|
|
467
|
+
prime-spec) printf '%s\n' .prime/agent/APPEND_SYSTEM.md .prime/agent/spec-manifest.json ;;
|
|
468
|
+
bundles) printf '%s\n' packages/create-egregore/runtime api/assets/connect-runtime-pack.json \
|
|
469
|
+
skill-distribution.json ;;
|
|
470
|
+
esac
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
# derivation_due BASE STEP: whether an input of STEP differs in the working
|
|
474
|
+
# tree or, on a task branch, since origin/BASE. Only a task branch's own
|
|
475
|
+
# commits reach its PR: a save from a protected branch starts a new one from
|
|
476
|
+
# origin/BASE. An unavailable comparison counts as a change: regenerating is
|
|
477
|
+
# idempotent, while skipping can commit a stale view.
|
|
478
|
+
derivation_due() {
|
|
479
|
+
local base="$1" path="" diff=""
|
|
480
|
+
local -a inputs=()
|
|
481
|
+
while IFS= read -r path; do inputs+=("$path"); done < <(derivation_inputs "$2")
|
|
482
|
+
[ -z "$(git -C "$SCRIPT_DIR" status --porcelain --untracked-files=normal -- "${inputs[@]}" 2>/dev/null | head -1)" ] \
|
|
483
|
+
|| return 0
|
|
484
|
+
case "$(git -C "$SCRIPT_DIR" branch --show-current 2>/dev/null || true)" in
|
|
485
|
+
dev/*|feature/*|bugfix/*) ;;
|
|
486
|
+
*) return 1 ;;
|
|
487
|
+
esac
|
|
488
|
+
diff="$(git -C "$SCRIPT_DIR" diff --name-only "origin/$base...HEAD" -- "${inputs[@]}" 2>/dev/null)" || return 0
|
|
489
|
+
[ -n "$diff" ]
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
# derivation_changes STEP: how many of STEP's outputs differ from HEAD.
|
|
493
|
+
derivation_changes() {
|
|
494
|
+
local path=""
|
|
495
|
+
local -a outputs=()
|
|
496
|
+
while IFS= read -r path; do outputs+=("$path"); done < <(derivation_outputs "$1")
|
|
497
|
+
git -C "$SCRIPT_DIR" status --porcelain --untracked-files=all -- "${outputs[@]}" | wc -l | tr -d ' '
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
# run_derivation LABEL COMMAND...: run one step, keeping its output in
|
|
501
|
+
# DERIVED_OUTPUT; a failure shows the last lines and stops the save.
|
|
502
|
+
run_derivation() {
|
|
503
|
+
local label="$1"
|
|
504
|
+
shift
|
|
505
|
+
if ! DERIVED_OUTPUT="$("$@" 2>&1)"; then
|
|
506
|
+
printf '%s\n' "$DERIVED_OUTPUT" | tail -n 20 >&2
|
|
507
|
+
die "$label failed (output above); the save stopped before the project commit"
|
|
508
|
+
fi
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
# npm_build_runtime NPM NODE_DIR: the build's script chain calls bare node, so
|
|
512
|
+
# the node bin/node-run.sh resolved goes first on PATH, as in
|
|
513
|
+
# bin/artifact-renderer-install.sh.
|
|
514
|
+
npm_build_runtime() {
|
|
515
|
+
cd "$SCRIPT_DIR/packages/create-egregore" && PATH="$2:$PATH" "$1" run build:runtime
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
# Regenerate the derived views and runtime bundles before the save commits, so
|
|
519
|
+
# the commit carries them and CI's checks stay a backstop. Steps run in the
|
|
520
|
+
# order their inputs require: the Codex adapters and the three specs feed the
|
|
521
|
+
# bundles, and the Codex render's AGENTS.md feeds the Pi and Prime specs. Each
|
|
522
|
+
# runs only when derivation_due says so and prints one receipt line; a failure
|
|
523
|
+
# stops the save. Sets DERIVED_SUBJECT for a commit of regeneration alone.
|
|
524
|
+
regenerate_derived() {
|
|
525
|
+
local base="$1" spec="" specs="" rendered="" made="" count="" review="" path="" node_bin="" npm_bin=""
|
|
526
|
+
local -a inputs=() fresh=()
|
|
527
|
+
|
|
528
|
+
if [ ! -f "$SCRIPT_DIR/bin/codex-sync-skills.sh" ]; then
|
|
529
|
+
echo "codex skills: not applicable"
|
|
530
|
+
elif ! derivation_due "$base" codex-skills; then
|
|
531
|
+
echo "codex skills: current"
|
|
532
|
+
else
|
|
533
|
+
run_derivation "codex skill sync" bash "$SCRIPT_DIR/bin/codex-sync-skills.sh"
|
|
534
|
+
count="$(printf '%s\n' "$DERIVED_OUTPUT" | grep -c '^generated adapter: ' || true)"
|
|
535
|
+
case "$count" in
|
|
536
|
+
0) echo "codex skills: current" ;;
|
|
537
|
+
1) echo "codex skills: synced (1 file)"; made="codex adapters" ;;
|
|
538
|
+
*) echo "codex skills: synced ($count files)"; made="codex adapters" ;;
|
|
539
|
+
esac
|
|
540
|
+
fi
|
|
541
|
+
|
|
542
|
+
for spec in codex pi prime; do
|
|
543
|
+
[ -f "$SCRIPT_DIR/bin/$spec-render-spec.mjs" ] || continue
|
|
544
|
+
specs="$specs $spec"
|
|
545
|
+
derivation_due "$base" "$spec-spec" || continue
|
|
546
|
+
run_derivation "$spec spec render" bash "$SCRIPT_DIR/bin/node-run.sh" "$SCRIPT_DIR/bin/$spec-render-spec.mjs"
|
|
547
|
+
[ "$(derivation_changes "$spec-spec")" = 0 ] || rendered="${rendered:+$rendered, }$spec"
|
|
548
|
+
done
|
|
549
|
+
if [ -z "$specs" ]; then
|
|
550
|
+
echo "specs: not applicable"
|
|
551
|
+
elif [ -z "$rendered" ]; then
|
|
552
|
+
echo "specs: current"
|
|
553
|
+
else
|
|
554
|
+
echo "specs: rendered ($rendered)"
|
|
555
|
+
made="${made:+$made, }specs"
|
|
556
|
+
fi
|
|
557
|
+
# A hand-written Codex section keeps its text when CLAUDE.md changes under
|
|
558
|
+
# it; the render refreshes only the source hash that --check used to flag.
|
|
559
|
+
case "$rendered" in
|
|
560
|
+
codex*)
|
|
561
|
+
review="$(git -C "$SCRIPT_DIR" show HEAD:.codex/spec-manifest.json 2>/dev/null \
|
|
562
|
+
| jq -r --slurpfile now "$SCRIPT_DIR/.codex/spec-manifest.json" '
|
|
563
|
+
(reduce (.sections // [])[] as $s ({}; .[$s.section] = $s.sourceHash)) as $was
|
|
564
|
+
| [$now[0].sections[] | select(.action == "replace" and $was[.section] != .sourceHash) | .section]
|
|
565
|
+
| join(", ")' 2>/dev/null)" || review=""
|
|
566
|
+
[ -z "$review" ] || echo "specs: review the hand-written Codex sections in bin/codex-render-spec.mjs: $review"
|
|
567
|
+
;;
|
|
568
|
+
esac
|
|
569
|
+
|
|
570
|
+
DERIVED_SUBJECT="chore(bundles): regenerate ${made:+$made and }runtime bundles"
|
|
571
|
+
if ! derivation_due "$base" bundles; then
|
|
572
|
+
echo "bundles: current"
|
|
573
|
+
return 0
|
|
574
|
+
fi
|
|
575
|
+
# The builders copy only files Git tracks, so new and deleted inputs enter
|
|
576
|
+
# the index first: a new module ships beside its callers, and a deleted one
|
|
577
|
+
# leaves the bundle instead of failing the copy.
|
|
578
|
+
while IFS= read -r path; do inputs+=("$path"); done < <(derivation_inputs bundles)
|
|
579
|
+
while IFS= read -r -d '' path; do fresh+=("$path"); done \
|
|
580
|
+
< <(git -C "$SCRIPT_DIR" ls-files -z --others --deleted --exclude-standard -- "${inputs[@]}")
|
|
581
|
+
if [ "${#fresh[@]}" -gt 0 ]; then
|
|
582
|
+
git -C "$SCRIPT_DIR" add -A -- "${fresh[@]}" >/dev/null 2>&1 || die "could not stage new bundle inputs"
|
|
583
|
+
fi
|
|
584
|
+
node_bin="$(bash "$SCRIPT_DIR/bin/node-run.sh" -p 'process.execPath')" \
|
|
585
|
+
|| die "the bundle rebuild needs Node; install Node 22, then save again"
|
|
586
|
+
npm_bin="$(command -v npm 2>/dev/null || true)"
|
|
587
|
+
[ -n "$npm_bin" ] || npm_bin="${node_bin%/*}/npm"
|
|
588
|
+
[ -x "$npm_bin" ] || die "the bundle rebuild needs npm; install Node with npm, then save again"
|
|
589
|
+
run_derivation "bundle rebuild" npm_build_runtime "$npm_bin" "${node_bin%/*}"
|
|
590
|
+
count="$(derivation_changes bundles)" || die "could not read the bundles after the rebuild"
|
|
591
|
+
case "$count" in
|
|
592
|
+
0) echo "bundles: current" ;;
|
|
593
|
+
1) echo "bundles: rebuilt (1 file changed)" ;;
|
|
594
|
+
*) echo "bundles: rebuilt ($count files changed)" ;;
|
|
595
|
+
esac
|
|
596
|
+
}
|
|
597
|
+
|
|
406
598
|
cmd_save() {
|
|
407
599
|
local message="" topic="" no_pr=0 branch base pushed="false" committed="false" pr_url="" existing_pr="" pr_number="" merged="false" pr_body="" pr_body_file=""
|
|
408
|
-
local readiness="" pr_draft="" changed_paths="" non_code="" use_pr=0
|
|
600
|
+
local readiness="" pr_draft="" changed_paths="" non_code="" use_pr=0 commit_message="" tree_was_clean=0 checks_failed=0
|
|
409
601
|
local -a create_args
|
|
410
602
|
|
|
411
603
|
while [ $# -gt 0 ]; do
|
|
@@ -450,12 +642,26 @@ cmd_save() {
|
|
|
450
642
|
echo "memory: synced"
|
|
451
643
|
fi
|
|
452
644
|
|
|
645
|
+
commit_message="$message"
|
|
646
|
+
# Installed instances carry the derived views and bundles but not the
|
|
647
|
+
# builders; /update regenerates their views.
|
|
648
|
+
if [ -f "$SCRIPT_DIR/packages/create-egregore/package.json" ]; then
|
|
649
|
+
[ -n "$(git -C "$SCRIPT_DIR" status --porcelain --untracked-files=normal 2>/dev/null | head -1)" ] \
|
|
650
|
+
|| tree_was_clean=1
|
|
651
|
+
regenerate_derived "$base"
|
|
652
|
+
# On a clean tree the regeneration makes the only changes, so they commit
|
|
653
|
+
# under their own subject; the caller's message describes committed work.
|
|
654
|
+
[ "$tree_was_clean" = "0" ] || commit_message="$DERIVED_SUBJECT"
|
|
655
|
+
else
|
|
656
|
+
printf '%s\n' "codex skills: not applicable" "specs: not applicable" "bundles: not applicable"
|
|
657
|
+
fi
|
|
658
|
+
|
|
453
659
|
branch="$(git -C "$SCRIPT_DIR" branch --show-current 2>/dev/null || echo "")"
|
|
454
660
|
if [ -n "$(git -C "$SCRIPT_DIR" status --porcelain 2>/dev/null | head -1)" ]; then
|
|
455
661
|
branch="$(ensure_working_branch "$topic")"
|
|
456
662
|
git -C "$SCRIPT_DIR" add -A >/dev/null 2>&1 || die "git add failed"
|
|
457
663
|
if ! git -C "$SCRIPT_DIR" diff --cached --quiet 2>/dev/null; then
|
|
458
|
-
egregore_commit "$SCRIPT_DIR" "$SCRIPT_DIR" "$
|
|
664
|
+
egregore_commit "$SCRIPT_DIR" "$SCRIPT_DIR" "$commit_message" --quiet || die "git commit failed"
|
|
459
665
|
committed="true"
|
|
460
666
|
fi
|
|
461
667
|
fi
|
|
@@ -486,6 +692,18 @@ cmd_save() {
|
|
|
486
692
|
if [ -n "$pr_url" ]; then
|
|
487
693
|
pr_number="$(printf '%s' "$existing_pr" | jq -r '.[0].number')"
|
|
488
694
|
pr_draft="$(printf '%s' "$existing_pr" | jq -r '.[0].isDraft')"
|
|
695
|
+
fi
|
|
696
|
+
# A PR goes ready only after the checks CI would select pass here. On a
|
|
697
|
+
# failure the work is still pushed, as a draft, so GitHub never spends
|
|
698
|
+
# a run on what this machine already saw fail. Installed instances do
|
|
699
|
+
# not ship the runner.
|
|
700
|
+
if [ "$readiness" = "--ready" ] && [ -f "$SCRIPT_DIR/bin/ci-local.py" ]; then
|
|
701
|
+
if ! python3 "$SCRIPT_DIR/bin/ci-local.py" --base "$base"; then
|
|
702
|
+
checks_failed=1
|
|
703
|
+
readiness="--draft"
|
|
704
|
+
fi
|
|
705
|
+
fi
|
|
706
|
+
if [ -n "$pr_url" ]; then
|
|
489
707
|
# Convert before push: a synchronize event must already see the draft.
|
|
490
708
|
if [ "$readiness" = "--draft" ] && [ "$pr_draft" = "false" ]; then
|
|
491
709
|
(cd "$SCRIPT_DIR" && gh pr ready "$pr_number" --undo) \
|
|
@@ -545,6 +763,10 @@ cmd_save() {
|
|
|
545
763
|
[ -n "$pr_url" ] && echo "pr: $pr_url"
|
|
546
764
|
[ -n "$pr_draft" ] && echo "pr-draft: $pr_draft"
|
|
547
765
|
[ "$merged" = "true" ] && echo "merge: non-coding, merged to $base"
|
|
766
|
+
if [ "$checks_failed" = "1" ]; then
|
|
767
|
+
echo "local checks failed: the work is pushed and the PR stays a draft; fix the checks above, then save again with --ready" >&2
|
|
768
|
+
return 1
|
|
769
|
+
fi
|
|
548
770
|
return 0
|
|
549
771
|
}
|
|
550
772
|
|
|
@@ -608,7 +830,7 @@ cmd_wrap() {
|
|
|
608
830
|
local capture_args=(--mode personal)
|
|
609
831
|
tmpd="$(mktemp -d -t egregore-agent-wrap-XXXXXX)"
|
|
610
832
|
trap 'rm -rf "$tmpd"' RETURN
|
|
611
|
-
session_id="$(
|
|
833
|
+
session_id="$(egregore_session_id "$SCRIPT_DIR")"
|
|
612
834
|
branch="$(git -C "$SCRIPT_DIR" branch --show-current 2>/dev/null || true)"
|
|
613
835
|
[ "$no_push" = "1" ] && capture_args+=(--no-push)
|
|
614
836
|
|
|
@@ -884,7 +1106,9 @@ case "${1:-}" in
|
|
|
884
1106
|
people) shift; cmd_people "$@" ;;
|
|
885
1107
|
branch) shift; cmd_branch "$@" ;;
|
|
886
1108
|
save) shift; cmd_save "$@" ;;
|
|
1109
|
+
merge) shift; exec bash "$SCRIPT_DIR/bin/merge-gate.sh" "$@" ;;
|
|
887
1110
|
autosave) shift; bash "$SCRIPT_DIR/bin/autosave.sh" "$@" ;;
|
|
1111
|
+
records) shift; bash "$SCRIPT_DIR/bin/records.sh" "$@" ;;
|
|
888
1112
|
wrap) shift; cmd_wrap "$@" ;;
|
|
889
1113
|
wrap-card) shift; render_wrap_card "$@" ;;
|
|
890
1114
|
handoff) shift; cmd_handoff "$@" ;;
|
|
@@ -14,7 +14,7 @@ source "$SCRIPT_DIR/bin/lib/config.sh"
|
|
|
14
14
|
source "$SCRIPT_DIR/bin/lib/scratch.sh"
|
|
15
15
|
|
|
16
16
|
usage() {
|
|
17
|
-
echo 'Usage: bash bin/api-call.sh <METHOD> <path-or-url> [--auth github|egregore|resend] [--json-file <file>] [--out <file>] [--error-out <file>]' >&2
|
|
17
|
+
echo 'Usage: bash bin/api-call.sh <METHOD> <path-or-url> [--auth github|egregore|resend|egregore+github] [--json-file <file>] [--out <file>] [--error-out <file>]' >&2
|
|
18
18
|
echo 'Failed responses are discarded unless --error-out requests a private HTTP error body.' >&2
|
|
19
19
|
exit 2
|
|
20
20
|
}
|
|
@@ -34,7 +34,7 @@ while [ "$#" -gt 0 ]; do
|
|
|
34
34
|
case "$1" in
|
|
35
35
|
--auth)
|
|
36
36
|
[ -z "$auth" ] || usage
|
|
37
|
-
case "$2" in github|egregore|resend) auth="$2" ;; *) usage ;; esac
|
|
37
|
+
case "$2" in github|egregore|resend|egregore+github) auth="$2" ;; *) usage ;; esac
|
|
38
38
|
;;
|
|
39
39
|
--json-file) [ -z "$json_file" ] || usage; json_file="$2" ;;
|
|
40
40
|
--out) [ -z "$out" ] || usage; out="$2" ;;
|
|
@@ -99,41 +99,59 @@ fi
|
|
|
99
99
|
|
|
100
100
|
url="$target"
|
|
101
101
|
if [[ "$target" == /* ]]; then
|
|
102
|
-
|
|
102
|
+
# config-get.sh refuses an address that is not plain, and says why.
|
|
103
|
+
api_url=$(bash "$SCRIPT_DIR/bin/config-get.sh" api_url) || exit 2
|
|
103
104
|
if [ -z "$api_url" ]; then
|
|
104
105
|
echo 'api-call: api_url is not set' >&2
|
|
105
106
|
exit 2
|
|
106
107
|
fi
|
|
107
108
|
url="${api_url%/}$target"
|
|
108
109
|
fi
|
|
110
|
+
# The retired hosted origin (October 2026 reset) never receives a credential,
|
|
111
|
+
# whether it came from egregore.json or an absolute target, and neither does an
|
|
112
|
+
# origin that is not plain. Resolve the final address before any key is
|
|
113
|
+
# loaded; curl runs with --globoff, so the path and query stay literal.
|
|
114
|
+
url="$(_hosted_api_target "$url")" || exit 2
|
|
109
115
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
resend) key_name=RESEND_API_KEY ;;
|
|
116
|
-
esac
|
|
117
|
-
token=$(_load_env_var "$key_name")
|
|
116
|
+
# load_key KEY_NAME: the key from .env, edges trimmed; GITHUB_TOKEN falls
|
|
117
|
+
# back to `gh auth token`. Sets `loaded`; exits 2 when the key is missing.
|
|
118
|
+
loaded=''
|
|
119
|
+
load_key() {
|
|
120
|
+
loaded=$(_load_env_var "$1")
|
|
118
121
|
# Strip surrounding whitespace, including CRLF, without evaluating .env.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if [ "$
|
|
122
|
+
loaded="${loaded#"${loaded%%[![:space:]]*}"}"
|
|
123
|
+
loaded="${loaded%"${loaded##*[![:space:]]}"}"
|
|
124
|
+
if [ "$1" = RESEND_API_KEY ]; then
|
|
122
125
|
# The email skill historically removes all whitespace from Resend keys.
|
|
123
|
-
|
|
124
|
-
elif [ "$
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
loaded=$(printf '%s' "$loaded" | tr -d '[:space:]')
|
|
127
|
+
elif [ "$1" = GITHUB_TOKEN ] && [ -z "$loaded" ]; then
|
|
128
|
+
loaded=$(gh auth token 2>/dev/null) || loaded=''
|
|
129
|
+
loaded="${loaded#"${loaded%%[![:space:]]*}"}"
|
|
130
|
+
loaded="${loaded%"${loaded##*[![:space:]]}"}"
|
|
128
131
|
fi
|
|
129
|
-
if [ -z "$
|
|
130
|
-
printf 'api-call: %s is not set in .env\n' "$
|
|
132
|
+
if [ -z "$loaded" ]; then
|
|
133
|
+
printf 'api-call: %s is not set in .env\n' "$1" >&2
|
|
131
134
|
exit 2
|
|
132
135
|
fi
|
|
133
|
-
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
# egregore+github: the org key names the organisation (Authorization) and the
|
|
139
|
+
# caller's own GitHub token proves the person (X-GitHub-Token).
|
|
140
|
+
token=''
|
|
141
|
+
person_token=''
|
|
142
|
+
case "$auth" in
|
|
143
|
+
github) load_key GITHUB_TOKEN; token="$loaded" ;;
|
|
144
|
+
egregore) load_key EGREGORE_API_KEY; token="$loaded" ;;
|
|
145
|
+
resend) load_key RESEND_API_KEY; token="$loaded" ;;
|
|
146
|
+
egregore+github)
|
|
147
|
+
load_key EGREGORE_API_KEY; token="$loaded"
|
|
148
|
+
load_key GITHUB_TOKEN; person_token="$loaded"
|
|
149
|
+
;;
|
|
150
|
+
esac
|
|
151
|
+
loaded=''
|
|
134
152
|
|
|
135
153
|
response_file=$(mktemp "$SCRIPT_DIR/tmp/api-call.XXXXXX")
|
|
136
|
-
args=(-q -sS --max-time 60 --request "$method" --url "$url"
|
|
154
|
+
args=(-q -sS --globoff --max-time 60 --request "$method" --url "$url"
|
|
137
155
|
--output "$response_file" --write-out '%{http_code}' -H @-)
|
|
138
156
|
if [ -n "$json_file" ]; then
|
|
139
157
|
args+=(--data-binary "@$json_file")
|
|
@@ -143,6 +161,9 @@ headers() {
|
|
|
143
161
|
if [ -n "$token" ]; then
|
|
144
162
|
printf 'Authorization: Bearer %s\n' "$token"
|
|
145
163
|
fi
|
|
164
|
+
if [ -n "$person_token" ]; then
|
|
165
|
+
printf 'X-GitHub-Token: %s\n' "$person_token"
|
|
166
|
+
fi
|
|
146
167
|
# Preserve delete-user's JSON header even on its bodyless DELETE request.
|
|
147
168
|
if [ -n "$json_file" ] || [ "$method" = DELETE ]; then
|
|
148
169
|
printf '%s\n' 'Content-Type: application/json'
|
|
@@ -184,7 +184,13 @@ REL="artifacts/$(basename "$FILE")"
|
|
|
184
184
|
git commit -m "chore(artifacts): register ${TITLE}" -- "$REL" >/dev/null 2>&1 || exit 0
|
|
185
185
|
for _ in 1 2 3; do
|
|
186
186
|
before="$(git rev-parse HEAD 2>/dev/null)" || break
|
|
187
|
-
git pull --rebase --no-edit >/dev/null 2>&1
|
|
187
|
+
if git pull --rebase --no-edit >/dev/null 2>&1; then
|
|
188
|
+
if bash "$SCRIPT_DIR/bin/memory-push.sh" --repository "$SCRIPT_DIR/memory" --branch main >/dev/null 2>&1; then
|
|
189
|
+
break
|
|
190
|
+
else
|
|
191
|
+
case "$?" in 75) ;; *) break ;; esac
|
|
192
|
+
fi
|
|
193
|
+
fi
|
|
188
194
|
if [ "$(rebase_start)" = "$before" ]; then
|
|
189
195
|
if [ "$(git diff --name-only --diff-filter=U 2>/dev/null)" = "$REL" ] \
|
|
190
196
|
&& git checkout --ours -- "$REL" 2>/dev/null && git add -- "$REL" 2>/dev/null; then
|
|
@@ -7,7 +7,7 @@ set -euo pipefail
|
|
|
7
7
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
8
8
|
export EGREGORE_ROOT="$ROOT"
|
|
9
9
|
export PYTHONSAFEPATH=1 PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}"
|
|
10
|
-
export EGREGORE_SESSION_ID="${EGREGORE_SESSION_ID:-$(cat "$ROOT/.egregore-session-id" 2>/dev/null || true)}"
|
|
10
|
+
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)}"
|
|
11
11
|
|
|
12
12
|
case "${1:-}" in
|
|
13
13
|
capture)
|