create-egregore 0.20.2 → 0.21.0-runtime-mvp.2
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 +1013 -16
- package/bin/cli.js +11 -0
- package/lib/claude-runtime.js +192 -0
- package/lib/local.js +38 -31
- package/lib/pi-runtime.js +1 -0
- package/lib/prime-runtime.js +1 -0
- package/lib/runtime-identity.js +146 -0
- package/lib/setup.js +116 -17
- package/package.json +10 -6
- package/runtime/claude/.claude/context/commit-format.md +110 -0
- package/runtime/claude/.claude/context/git-language.md +46 -0
- package/runtime/claude/.claude/context/notification-consent.md +66 -0
- package/runtime/claude/.claude/context/pr-format.md +67 -0
- package/runtime/claude/.claude/context/telemetry.md +133 -0
- package/runtime/claude/.claude/hooks/boundary-check.sh +333 -0
- package/runtime/claude/.claude/hooks/branch-guard.sh +231 -0
- package/runtime/claude/.claude/hooks/card-context.sh +38 -0
- package/runtime/claude/.claude/hooks/emissary-detect.sh +53 -0
- package/runtime/claude/.claude/hooks/memory-refresh.sh +67 -0
- package/runtime/claude/.claude/hooks/onboarding-guard.sh +86 -0
- package/runtime/claude/.claude/hooks/retrieval-context.sh +43 -0
- package/runtime/claude/.claude/rules/voice-bedrock.md +73 -0
- package/runtime/claude/.claude/settings.json +131 -0
- package/runtime/claude/.claude/skills/activity/SKILL.md +68 -0
- package/runtime/claude/.claude/skills/announce/SKILL.md +54 -0
- package/runtime/claude/.claude/skills/archive/SKILL.md +71 -0
- package/runtime/claude/.claude/skills/branch/SKILL.md +147 -0
- package/runtime/claude/.claude/skills/checkup/SKILL.md +159 -0
- package/runtime/claude/.claude/skills/commit/SKILL.md +103 -0
- package/runtime/claude/.claude/skills/contribute/SKILL.md +343 -0
- package/runtime/claude/.claude/skills/create-skill/SKILL.md +135 -0
- package/runtime/claude/.claude/skills/dark-mode/SKILL.md +410 -0
- package/runtime/claude/.claude/skills/dashboard/SKILL.md +43 -0
- package/runtime/claude/.claude/skills/deep-reflect/REPORT.md +140 -0
- package/runtime/claude/.claude/skills/deep-reflect/RESEARCH.md +132 -0
- package/runtime/claude/.claude/skills/deep-reflect/ROLES.md +104 -0
- package/runtime/claude/.claude/skills/deep-reflect/SKILL.md +170 -0
- package/runtime/claude/.claude/skills/delete-user/SKILL.md +150 -0
- package/runtime/claude/.claude/skills/emissary/SKILL.md +220 -0
- package/runtime/claude/.claude/skills/handoff/SKILL.md +124 -0
- package/runtime/claude/.claude/skills/harvest/AUDIT.md +546 -0
- package/runtime/claude/.claude/skills/harvest/FORMAT.md +436 -0
- package/runtime/claude/.claude/skills/harvest/PROCESS.md +395 -0
- package/runtime/claude/.claude/skills/harvest/QUESTION_PALETTE.md +76 -0
- package/runtime/claude/.claude/skills/harvest/SKILL.md +100 -0
- package/runtime/claude/.claude/skills/ingest/SKILL.md +112 -0
- package/runtime/claude/.claude/skills/ingest-corpus/SKILL.md +187 -0
- package/runtime/claude/.claude/skills/ingest-notion/SKILL.md +214 -0
- package/runtime/claude/.claude/skills/ingest-user-interview/SKILL.md +65 -0
- package/runtime/claude/.claude/skills/ingest-user-interview/references/analysis-contract.md +125 -0
- package/runtime/claude/.claude/skills/invite/SKILL.md +111 -0
- package/runtime/claude/.claude/skills/issue/SKILL.md +104 -0
- package/runtime/claude/.claude/skills/me/SKILL.md +81 -0
- package/runtime/claude/.claude/skills/meeting/SKILL.md +76 -0
- package/runtime/claude/.claude/skills/meeting/references/analysis-contract.md +102 -0
- package/runtime/claude/.claude/skills/note/SKILL.md +71 -0
- package/runtime/claude/.claude/skills/notion-connect/SKILL.md +124 -0
- package/runtime/claude/.claude/skills/onboarding/SKILL.md +159 -0
- package/runtime/claude/.claude/skills/pr/SKILL.md +85 -0
- package/runtime/claude/.claude/skills/pull/SKILL.md +79 -0
- package/runtime/claude/.claude/skills/push/SKILL.md +47 -0
- package/runtime/claude/.claude/skills/quest/SKILL.md +121 -0
- package/runtime/claude/.claude/skills/reflect/SKILL.md +69 -0
- package/runtime/claude/.claude/skills/review-pr/SKILL.md +276 -0
- package/runtime/claude/.claude/skills/save/SKILL.md +92 -0
- package/runtime/claude/.claude/skills/slack-connect/SKILL.md +148 -0
- package/runtime/claude/.claude/skills/summon/SKILL.md +240 -0
- package/runtime/claude/.claude/skills/sync-repos/SKILL.md +82 -0
- package/runtime/claude/.claude/skills/teams-connect/SKILL.md +216 -0
- package/runtime/claude/.claude/skills/telegram-connect/SKILL.md +110 -0
- package/runtime/claude/.claude/skills/telemetry/SKILL.md +117 -0
- package/runtime/claude/.claude/skills/test/SKILL.md +87 -0
- package/runtime/claude/.claude/skills/the-spiral/SKILL.md +492 -0
- package/runtime/claude/.claude/skills/tui-design/SKILL.md +188 -0
- package/runtime/claude/.claude/skills/tutorial/SKILL.md +100 -0
- package/runtime/claude/.claude/skills/update/SKILL.md +265 -0
- package/runtime/claude/.claude/skills/view/SKILL.md +393 -0
- package/runtime/claude/.claude/skills/view/compose-scaffold.html +221 -0
- package/runtime/claude/.claude/skills/visual-explain/SKILL.md +132 -0
- package/runtime/claude/.claude/skills/wrap/SKILL.md +98 -0
- package/runtime/claude/CLAUDE.md +447 -0
- package/runtime/claude/bin/activity-action.sh +92 -0
- package/runtime/claude/bin/activity-data.sh +17 -0
- package/runtime/claude/bin/agent.sh +783 -0
- package/runtime/claude/bin/artifact-register.sh +164 -0
- package/runtime/claude/bin/artifact-writeback.sh +53 -0
- package/runtime/claude/bin/artifacts.sh +288 -0
- package/runtime/claude/bin/attendant.sh +707 -0
- package/runtime/claude/bin/autosave.sh +112 -0
- package/runtime/claude/bin/boundary.sh +253 -0
- package/runtime/claude/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/claude/bin/capture-reconcile.sh +69 -0
- package/runtime/claude/bin/capture-run.sh +357 -0
- package/runtime/claude/bin/codex-install-skills.sh +78 -0
- package/runtime/claude/bin/codex-render-spec.mjs +462 -0
- package/runtime/claude/bin/codex-session-start.sh +275 -0
- package/runtime/claude/bin/codex-skill-render.mjs +349 -0
- package/runtime/claude/bin/codex-sync-skills.sh +237 -0
- package/runtime/claude/bin/connect-refresh.sh +33 -0
- package/runtime/claude/bin/contribute-guard.sh +79 -0
- package/runtime/claude/bin/corpus_map.py +806 -0
- package/runtime/claude/bin/corpus_survey.py +304 -0
- package/runtime/claude/bin/dashboard-data.sh +18 -0
- package/runtime/claude/bin/github-auth.sh +121 -0
- package/runtime/claude/bin/graph-batch.sh +86 -0
- package/runtime/claude/bin/graph-op.sh +1106 -0
- package/runtime/claude/bin/graph-projection.sh +54 -0
- package/runtime/claude/bin/graph-wal.sh +242 -0
- package/runtime/claude/bin/graph.sh +267 -0
- package/runtime/claude/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/claude/bin/handoff-lifecycle.sh +280 -0
- package/runtime/claude/bin/handoff-pr-backfill.sh +86 -0
- package/runtime/claude/bin/handoff-preview.sh +169 -0
- package/runtime/claude/bin/handoff-run.sh +692 -0
- package/runtime/claude/bin/handoff-save-egregore.sh +224 -0
- package/runtime/claude/bin/index-handoff.sh +322 -0
- package/runtime/claude/bin/ingest-graph.sh +86 -0
- package/runtime/claude/bin/ingest-item.sh +10 -0
- package/runtime/claude/bin/ingest-surface.html +495 -0
- package/runtime/claude/bin/ingest.py +1011 -0
- package/runtime/claude/bin/ingest.sh +308 -0
- package/runtime/claude/bin/ingest_graph.py +856 -0
- package/runtime/claude/bin/ingest_surface.py +544 -0
- package/runtime/claude/bin/invite.sh +6 -0
- package/runtime/claude/bin/issue.sh +10 -0
- package/runtime/claude/bin/knowledge.sh +10 -0
- package/runtime/claude/bin/lib/artifact-id.sh +46 -0
- package/runtime/claude/bin/lib/config.sh +136 -0
- package/runtime/claude/bin/lib/context.sh +642 -0
- package/runtime/claude/bin/lib/dashboard-artifact.sh +242 -0
- package/runtime/claude/bin/lib/ensure-develop.sh +183 -0
- package/runtime/claude/bin/lib/git-message.sh +37 -0
- package/runtime/claude/bin/lib/git-sync.sh +494 -0
- package/runtime/claude/bin/lib/greeting.sh +548 -0
- package/runtime/claude/bin/lib/handoff-meta.sh +97 -0
- package/runtime/claude/bin/lib/hash.sh +13 -0
- package/runtime/claude/bin/lib/identity.sh +213 -0
- package/runtime/claude/bin/lib/metrics.sh +374 -0
- package/runtime/claude/bin/lib/noncode.sh +31 -0
- package/runtime/claude/bin/lib/permissions.sh +106 -0
- package/runtime/claude/bin/lib/time.sh +56 -0
- package/runtime/claude/bin/lib/worktree-links.sh +85 -0
- package/runtime/claude/bin/node-run.sh +42 -0
- package/runtime/claude/bin/notification.sh +6 -0
- package/runtime/claude/bin/notify.sh +636 -0
- package/runtime/claude/bin/observe-context.sh +14 -0
- package/runtime/claude/bin/onboarding.sh +6 -0
- package/runtime/claude/bin/person.py +634 -0
- package/runtime/claude/bin/person.sh +481 -0
- package/runtime/claude/bin/pi-render-spec.mjs +140 -0
- package/runtime/claude/bin/post-update.sh +37 -0
- package/runtime/claude/bin/prime-render-spec.mjs +147 -0
- package/runtime/claude/bin/publish-artifact.sh +324 -0
- package/runtime/claude/bin/publish-references.sh +144 -0
- package/runtime/claude/bin/quest.sh +9 -0
- package/runtime/claude/bin/question.sh +8 -0
- package/runtime/claude/bin/repo-state.sh +96 -0
- package/runtime/claude/bin/research-ingest.sh +7 -0
- package/runtime/claude/bin/restore-owned-skills.sh +67 -0
- package/runtime/claude/bin/retrieval_eval.py +385 -0
- package/runtime/claude/bin/runtime-identity.sh +70 -0
- package/runtime/claude/bin/runtime-upgrade.sh +43 -0
- package/runtime/claude/bin/scroll.sh +9 -0
- package/runtime/claude/bin/search.sh +318 -0
- package/runtime/claude/bin/session-autosave.sh +220 -0
- package/runtime/claude/bin/session-log.sh +199 -0
- package/runtime/claude/bin/session-start.sh +696 -0
- package/runtime/claude/bin/settings.sh +532 -0
- package/runtime/claude/bin/startup-check.sh +136 -0
- package/runtime/claude/bin/statusline.sh +41 -0
- package/runtime/claude/bin/telemetry.sh +666 -0
- package/runtime/claude/bin/test-changes.sh +344 -0
- package/runtime/claude/bin/thread.sh +9 -0
- package/runtime/claude/bin/todo.sh +9 -0
- package/runtime/claude/bin/view-render.sh +126 -0
- package/runtime/claude/bin/worktree-create.sh +145 -0
- package/runtime/claude/bin/worktree-remove.sh +50 -0
- package/runtime/claude/bin/worktree.sh +198 -0
- package/runtime/claude/egregore_runtime/__init__.py +228 -0
- package/runtime/claude/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/claude/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/claude/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/claude/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/claude/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/claude/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/claude/egregore_runtime/admin_gate.py +102 -0
- package/runtime/claude/egregore_runtime/artifacts.py +523 -0
- package/runtime/claude/egregore_runtime/contracts.py +499 -0
- package/runtime/claude/egregore_runtime/entitlements.py +85 -0
- package/runtime/claude/egregore_runtime/errors.py +10 -0
- package/runtime/claude/egregore_runtime/graph.py +356 -0
- package/runtime/claude/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/claude/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/claude/egregore_runtime/identity.py +734 -0
- package/runtime/claude/egregore_runtime/identity_cli.py +91 -0
- package/runtime/claude/egregore_runtime/ingest.py +575 -0
- package/runtime/claude/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/claude/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/claude/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/claude/egregore_runtime/invitations.py +116 -0
- package/runtime/claude/egregore_runtime/issue_cli.py +305 -0
- package/runtime/claude/egregore_runtime/issues.py +359 -0
- package/runtime/claude/egregore_runtime/knowledge.py +376 -0
- package/runtime/claude/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/claude/egregore_runtime/lifecycle.py +888 -0
- package/runtime/claude/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/claude/egregore_runtime/notification_cli.py +125 -0
- package/runtime/claude/egregore_runtime/notifications.py +230 -0
- package/runtime/claude/egregore_runtime/observe.py +342 -0
- package/runtime/claude/egregore_runtime/onboarding.py +290 -0
- package/runtime/claude/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/claude/egregore_runtime/policy.py +144 -0
- package/runtime/claude/egregore_runtime/profile.py +193 -0
- package/runtime/claude/egregore_runtime/quest_cli.py +216 -0
- package/runtime/claude/egregore_runtime/question_cli.py +180 -0
- package/runtime/claude/egregore_runtime/questions.py +304 -0
- package/runtime/claude/egregore_runtime/quests.py +419 -0
- package/runtime/claude/egregore_runtime/readiness.py +379 -0
- package/runtime/claude/egregore_runtime/research_ingest.py +256 -0
- package/runtime/claude/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/claude/egregore_runtime/runtime.py +464 -0
- package/runtime/claude/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/claude/egregore_runtime/scrolls.py +726 -0
- package/runtime/claude/egregore_runtime/status.py +412 -0
- package/runtime/claude/egregore_runtime/status_cli.py +174 -0
- package/runtime/claude/egregore_runtime/sync.py +218 -0
- package/runtime/claude/egregore_runtime/teamsync.py +139 -0
- package/runtime/claude/egregore_runtime/telemetry.py +640 -0
- package/runtime/claude/egregore_runtime/thread_cli.py +173 -0
- package/runtime/claude/egregore_runtime/threads.py +517 -0
- package/runtime/claude/egregore_runtime/todo_cli.py +142 -0
- package/runtime/claude/egregore_runtime/todos.py +244 -0
- package/runtime/claude/egregore_runtime/upgrade.py +770 -0
- package/runtime/claude/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/claude/egregore_runtime/writeback.py +391 -0
- package/runtime/claude/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/claude/manifest.json +284 -0
- package/runtime/codex/.codex/hooks/search-hint.js +21 -52
- package/runtime/codex/.codex/hooks.json +3 -3
- package/runtime/codex/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/codex/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/codex/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/codex/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/codex/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/codex/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/codex/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/codex/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/codex/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/codex/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/codex/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/codex/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/codex/.codex/skills/me/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/codex/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/codex/.codex/skills/note/SKILL.md +30 -25
- package/runtime/codex/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/codex/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/codex/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/codex/.codex/skills/save/SKILL.md +2 -2
- package/runtime/codex/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/test/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/codex/.codex/skills/view/SKILL.md +115 -111
- package/runtime/codex/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/codex/.codex/spec-manifest.json +9 -9
- package/runtime/codex/AGENTS.md +62 -58
- package/runtime/codex/bin/activity-action.sh +92 -0
- package/runtime/codex/bin/activity-data.sh +12 -233
- package/runtime/codex/bin/agent.sh +84 -100
- package/runtime/codex/bin/artifact-register.sh +164 -0
- package/runtime/codex/bin/artifact-writeback.sh +53 -0
- package/runtime/codex/bin/artifacts.sh +288 -0
- package/runtime/codex/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/codex/bin/capture-run.sh +18 -2
- package/runtime/codex/bin/codex-render-spec.mjs +41 -16
- package/runtime/codex/bin/codex-session-start.sh +14 -4
- package/runtime/codex/bin/codex-skill-render.mjs +9 -7
- package/runtime/codex/bin/corpus_map.py +806 -0
- package/runtime/codex/bin/corpus_survey.py +304 -0
- package/runtime/codex/bin/dashboard-data.sh +11 -171
- package/runtime/codex/bin/github-auth.sh +121 -0
- package/runtime/codex/bin/graph-batch.sh +7 -0
- package/runtime/codex/bin/graph-op.sh +4 -0
- package/runtime/codex/bin/graph-projection.sh +54 -0
- package/runtime/codex/bin/graph-wal.sh +13 -0
- package/runtime/codex/bin/graph.sh +44 -0
- package/runtime/codex/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/codex/bin/handoff-lifecycle.sh +280 -0
- package/runtime/codex/bin/handoff-preview.sh +169 -0
- package/runtime/codex/bin/handoff-run.sh +42 -26
- package/runtime/codex/bin/ingest-graph.sh +6 -0
- package/runtime/codex/bin/ingest-item.sh +10 -0
- package/runtime/codex/bin/ingest.sh +59 -30
- package/runtime/codex/bin/invite.sh +6 -0
- package/runtime/codex/bin/issue.sh +10 -0
- package/runtime/codex/bin/knowledge.sh +10 -0
- package/runtime/codex/bin/lib/config.sh +20 -0
- package/runtime/codex/bin/lib/context.sh +46 -25
- package/runtime/codex/bin/lib/git-sync.sh +70 -6
- package/runtime/codex/bin/lib/greeting.sh +34 -5
- package/runtime/codex/bin/lib/handoff-meta.sh +97 -0
- package/runtime/codex/bin/lib/worktree-links.sh +6 -0
- package/runtime/codex/bin/node-run.sh +42 -0
- package/runtime/codex/bin/notification.sh +6 -0
- package/runtime/codex/bin/observe-context.sh +14 -0
- package/runtime/codex/bin/onboarding.sh +6 -0
- package/runtime/codex/bin/person.py +4 -0
- package/runtime/codex/bin/person.sh +43 -10
- package/runtime/codex/bin/pi-render-spec.mjs +140 -0
- package/runtime/codex/bin/post-update.sh +37 -0
- package/runtime/codex/bin/prime-render-spec.mjs +147 -0
- package/runtime/codex/bin/publish-artifact.sh +55 -2
- package/runtime/codex/bin/quest.sh +9 -0
- package/runtime/codex/bin/question.sh +8 -0
- package/runtime/codex/bin/research-ingest.sh +7 -0
- package/runtime/codex/bin/restore-owned-skills.sh +67 -0
- package/runtime/codex/bin/retrieval_eval.py +385 -0
- package/runtime/codex/bin/runtime-identity.sh +70 -0
- package/runtime/codex/bin/runtime-upgrade.sh +43 -0
- package/runtime/codex/bin/scroll.sh +9 -0
- package/runtime/codex/bin/search.sh +231 -195
- package/runtime/codex/bin/settings.sh +174 -5
- package/runtime/codex/bin/startup-check.sh +136 -0
- package/runtime/codex/bin/telemetry.sh +522 -247
- package/runtime/codex/bin/test-changes.sh +344 -0
- package/runtime/codex/bin/thread.sh +9 -0
- package/runtime/codex/bin/todo.sh +9 -0
- package/runtime/codex/bin/view-render.sh +126 -0
- package/runtime/codex/bin/worktree-create.sh +19 -5
- package/runtime/codex/egregore_runtime/__init__.py +228 -0
- package/runtime/codex/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/codex/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/codex/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/codex/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/codex/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/codex/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/codex/egregore_runtime/admin_gate.py +102 -0
- package/runtime/codex/egregore_runtime/artifacts.py +523 -0
- package/runtime/codex/egregore_runtime/contracts.py +499 -0
- package/runtime/codex/egregore_runtime/entitlements.py +85 -0
- package/runtime/codex/egregore_runtime/errors.py +10 -0
- package/runtime/codex/egregore_runtime/graph.py +356 -0
- package/runtime/codex/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/codex/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/codex/egregore_runtime/identity.py +734 -0
- package/runtime/codex/egregore_runtime/identity_cli.py +91 -0
- package/runtime/codex/egregore_runtime/ingest.py +575 -0
- package/runtime/codex/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/codex/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/codex/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/codex/egregore_runtime/invitations.py +116 -0
- package/runtime/codex/egregore_runtime/issue_cli.py +305 -0
- package/runtime/codex/egregore_runtime/issues.py +359 -0
- package/runtime/codex/egregore_runtime/knowledge.py +376 -0
- package/runtime/codex/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/codex/egregore_runtime/lifecycle.py +888 -0
- package/runtime/codex/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/codex/egregore_runtime/notification_cli.py +125 -0
- package/runtime/codex/egregore_runtime/notifications.py +230 -0
- package/runtime/codex/egregore_runtime/observe.py +342 -0
- package/runtime/codex/egregore_runtime/onboarding.py +290 -0
- package/runtime/codex/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/codex/egregore_runtime/policy.py +144 -0
- package/runtime/codex/egregore_runtime/profile.py +193 -0
- package/runtime/codex/egregore_runtime/quest_cli.py +216 -0
- package/runtime/codex/egregore_runtime/question_cli.py +180 -0
- package/runtime/codex/egregore_runtime/questions.py +304 -0
- package/runtime/codex/egregore_runtime/quests.py +419 -0
- package/runtime/codex/egregore_runtime/readiness.py +379 -0
- package/runtime/codex/egregore_runtime/research_ingest.py +256 -0
- package/runtime/codex/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/codex/egregore_runtime/runtime.py +464 -0
- package/runtime/codex/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/codex/egregore_runtime/scrolls.py +726 -0
- package/runtime/codex/egregore_runtime/status.py +412 -0
- package/runtime/codex/egregore_runtime/status_cli.py +174 -0
- package/runtime/codex/egregore_runtime/sync.py +218 -0
- package/runtime/codex/egregore_runtime/teamsync.py +139 -0
- package/runtime/codex/egregore_runtime/telemetry.py +640 -0
- package/runtime/codex/egregore_runtime/thread_cli.py +173 -0
- package/runtime/codex/egregore_runtime/threads.py +517 -0
- package/runtime/codex/egregore_runtime/todo_cli.py +142 -0
- package/runtime/codex/egregore_runtime/todos.py +244 -0
- package/runtime/codex/egregore_runtime/upgrade.py +770 -0
- package/runtime/codex/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/codex/egregore_runtime/writeback.py +391 -0
- package/runtime/codex/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/codex/manifest.json +98 -1
- package/runtime/pi/.codex/hooks/search-hint.js +21 -52
- package/runtime/pi/.codex/hooks.json +3 -3
- package/runtime/pi/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/pi/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/pi/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/pi/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/pi/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/pi/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/pi/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/pi/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/pi/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/pi/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/pi/.codex/skills/me/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/pi/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/pi/.codex/skills/note/SKILL.md +30 -25
- package/runtime/pi/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/pi/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/pi/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/pi/.codex/skills/save/SKILL.md +2 -2
- package/runtime/pi/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/test/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/pi/.codex/skills/view/SKILL.md +115 -111
- package/runtime/pi/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/pi/.codex/spec-manifest.json +9 -9
- package/runtime/pi/.pi/APPEND_SYSTEM.md +57 -48
- package/runtime/pi/.pi/extensions/egregore.ts +7 -0
- package/runtime/pi/.pi/spec-manifest.json +2 -2
- package/runtime/pi/AGENTS.md +62 -58
- package/runtime/pi/bin/activity-action.sh +92 -0
- package/runtime/pi/bin/activity-data.sh +12 -233
- package/runtime/pi/bin/agent.sh +84 -100
- package/runtime/pi/bin/artifact-register.sh +164 -0
- package/runtime/pi/bin/artifact-writeback.sh +53 -0
- package/runtime/pi/bin/artifacts.sh +288 -0
- package/runtime/pi/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/pi/bin/capture-run.sh +18 -2
- package/runtime/pi/bin/codex-render-spec.mjs +41 -16
- package/runtime/pi/bin/codex-session-start.sh +14 -4
- package/runtime/pi/bin/codex-skill-render.mjs +9 -7
- package/runtime/pi/bin/corpus_map.py +806 -0
- package/runtime/pi/bin/corpus_survey.py +304 -0
- package/runtime/pi/bin/dashboard-data.sh +11 -171
- package/runtime/pi/bin/github-auth.sh +121 -0
- package/runtime/pi/bin/graph-batch.sh +7 -0
- package/runtime/pi/bin/graph-op.sh +4 -0
- package/runtime/pi/bin/graph-projection.sh +54 -0
- package/runtime/pi/bin/graph-wal.sh +13 -0
- package/runtime/pi/bin/graph.sh +44 -0
- package/runtime/pi/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/pi/bin/handoff-lifecycle.sh +280 -0
- package/runtime/pi/bin/handoff-preview.sh +169 -0
- package/runtime/pi/bin/handoff-run.sh +42 -26
- package/runtime/pi/bin/ingest-graph.sh +6 -0
- package/runtime/pi/bin/ingest-item.sh +10 -0
- package/runtime/pi/bin/ingest.sh +59 -30
- package/runtime/pi/bin/invite.sh +6 -0
- package/runtime/pi/bin/issue.sh +10 -0
- package/runtime/pi/bin/knowledge.sh +10 -0
- package/runtime/pi/bin/lib/config.sh +20 -0
- package/runtime/pi/bin/lib/context.sh +46 -25
- package/runtime/pi/bin/lib/git-sync.sh +70 -6
- package/runtime/pi/bin/lib/greeting.sh +34 -5
- package/runtime/pi/bin/lib/handoff-meta.sh +97 -0
- package/runtime/pi/bin/lib/worktree-links.sh +6 -0
- package/runtime/pi/bin/node-run.sh +42 -0
- package/runtime/pi/bin/notification.sh +6 -0
- package/runtime/pi/bin/observe-context.sh +14 -0
- package/runtime/pi/bin/onboarding.sh +6 -0
- package/runtime/pi/bin/person.py +4 -0
- package/runtime/pi/bin/person.sh +43 -10
- package/runtime/pi/bin/pi-observe-context.mjs +93 -0
- package/runtime/pi/bin/pi-product-workflows.mjs +1 -1
- package/runtime/pi/bin/pi-render-spec.mjs +1 -1
- package/runtime/pi/bin/post-update.sh +37 -0
- package/runtime/pi/bin/prime-render-spec.mjs +147 -0
- package/runtime/pi/bin/publish-artifact.sh +55 -2
- package/runtime/pi/bin/quest.sh +9 -0
- package/runtime/pi/bin/question.sh +8 -0
- package/runtime/pi/bin/research-ingest.sh +7 -0
- package/runtime/pi/bin/restore-owned-skills.sh +67 -0
- package/runtime/pi/bin/retrieval_eval.py +385 -0
- package/runtime/pi/bin/runtime-identity.sh +70 -0
- package/runtime/pi/bin/runtime-upgrade.sh +43 -0
- package/runtime/pi/bin/scroll.sh +9 -0
- package/runtime/pi/bin/search.sh +231 -195
- package/runtime/pi/bin/settings.sh +174 -5
- package/runtime/pi/bin/startup-check.sh +136 -0
- package/runtime/pi/bin/telemetry.sh +522 -247
- package/runtime/pi/bin/test-changes.sh +344 -0
- package/runtime/pi/bin/thread.sh +9 -0
- package/runtime/pi/bin/todo.sh +9 -0
- package/runtime/pi/bin/view-render.sh +126 -0
- package/runtime/pi/bin/worktree-create.sh +19 -5
- package/runtime/pi/egregore_runtime/__init__.py +228 -0
- package/runtime/pi/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/pi/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/pi/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/pi/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/pi/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/pi/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/pi/egregore_runtime/admin_gate.py +102 -0
- package/runtime/pi/egregore_runtime/artifacts.py +523 -0
- package/runtime/pi/egregore_runtime/contracts.py +499 -0
- package/runtime/pi/egregore_runtime/entitlements.py +85 -0
- package/runtime/pi/egregore_runtime/errors.py +10 -0
- package/runtime/pi/egregore_runtime/graph.py +356 -0
- package/runtime/pi/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/pi/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/pi/egregore_runtime/identity.py +734 -0
- package/runtime/pi/egregore_runtime/identity_cli.py +91 -0
- package/runtime/pi/egregore_runtime/ingest.py +575 -0
- package/runtime/pi/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/pi/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/pi/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/pi/egregore_runtime/invitations.py +116 -0
- package/runtime/pi/egregore_runtime/issue_cli.py +305 -0
- package/runtime/pi/egregore_runtime/issues.py +359 -0
- package/runtime/pi/egregore_runtime/knowledge.py +376 -0
- package/runtime/pi/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/pi/egregore_runtime/lifecycle.py +888 -0
- package/runtime/pi/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/pi/egregore_runtime/notification_cli.py +125 -0
- package/runtime/pi/egregore_runtime/notifications.py +230 -0
- package/runtime/pi/egregore_runtime/observe.py +342 -0
- package/runtime/pi/egregore_runtime/onboarding.py +290 -0
- package/runtime/pi/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/pi/egregore_runtime/policy.py +144 -0
- package/runtime/pi/egregore_runtime/profile.py +193 -0
- package/runtime/pi/egregore_runtime/quest_cli.py +216 -0
- package/runtime/pi/egregore_runtime/question_cli.py +180 -0
- package/runtime/pi/egregore_runtime/questions.py +304 -0
- package/runtime/pi/egregore_runtime/quests.py +419 -0
- package/runtime/pi/egregore_runtime/readiness.py +379 -0
- package/runtime/pi/egregore_runtime/research_ingest.py +256 -0
- package/runtime/pi/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/pi/egregore_runtime/runtime.py +464 -0
- package/runtime/pi/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/pi/egregore_runtime/scrolls.py +726 -0
- package/runtime/pi/egregore_runtime/status.py +412 -0
- package/runtime/pi/egregore_runtime/status_cli.py +174 -0
- package/runtime/pi/egregore_runtime/sync.py +218 -0
- package/runtime/pi/egregore_runtime/teamsync.py +139 -0
- package/runtime/pi/egregore_runtime/telemetry.py +640 -0
- package/runtime/pi/egregore_runtime/thread_cli.py +173 -0
- package/runtime/pi/egregore_runtime/threads.py +517 -0
- package/runtime/pi/egregore_runtime/todo_cli.py +142 -0
- package/runtime/pi/egregore_runtime/todos.py +244 -0
- package/runtime/pi/egregore_runtime/upgrade.py +770 -0
- package/runtime/pi/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/pi/egregore_runtime/writeback.py +391 -0
- package/runtime/pi/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/pi/manifest.json +98 -1
- package/runtime/prime/.codex/hooks/search-hint.js +21 -52
- package/runtime/prime/.codex/hooks.json +3 -3
- package/runtime/prime/.codex/skills/activity/SKILL.md +23 -66
- package/runtime/prime/.codex/skills/announce/SKILL.md +27 -50
- package/runtime/prime/.codex/skills/archive/SKILL.md +21 -36
- package/runtime/prime/.codex/skills/checkup/SKILL.md +77 -36
- package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/dashboard/SKILL.md +17 -47
- package/runtime/prime/.codex/skills/handoff/SKILL.md +84 -133
- package/runtime/prime/.codex/skills/harvest/SKILL.md +32 -117
- package/runtime/prime/.codex/skills/ingest/SKILL.md +47 -25
- package/runtime/prime/.codex/skills/ingest-user-interview/SKILL.md +18 -36
- package/runtime/prime/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
- package/runtime/prime/.codex/skills/invite/SKILL.md +21 -35
- package/runtime/prime/.codex/skills/issue/SKILL.md +60 -41
- package/runtime/prime/.codex/skills/me/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/meeting/SKILL.md +16 -36
- package/runtime/prime/.codex/skills/meeting/references/analysis-contract.md +48 -0
- package/runtime/prime/.codex/skills/note/SKILL.md +30 -25
- package/runtime/prime/.codex/skills/onboarding/SKILL.md +36 -41
- package/runtime/prime/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/quest/SKILL.md +27 -66
- package/runtime/prime/.codex/skills/reflect/SKILL.md +22 -36
- package/runtime/prime/.codex/skills/save/SKILL.md +2 -2
- package/runtime/prime/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/test/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/tutorial/SKILL.md +40 -41
- package/runtime/prime/.codex/skills/view/SKILL.md +115 -111
- package/runtime/prime/.codex/skills/wrap/SKILL.md +45 -41
- package/runtime/prime/.codex/spec-manifest.json +9 -9
- package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +57 -48
- package/runtime/prime/.prime/agent/extensions/egregore.ts +7 -0
- package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
- package/runtime/prime/AGENTS.md +62 -58
- package/runtime/prime/bin/activity-action.sh +92 -0
- package/runtime/prime/bin/activity-data.sh +12 -233
- package/runtime/prime/bin/agent.sh +84 -100
- package/runtime/prime/bin/artifact-register.sh +164 -0
- package/runtime/prime/bin/artifact-writeback.sh +53 -0
- package/runtime/prime/bin/artifacts.sh +288 -0
- package/runtime/prime/bin/build-sealed-dataroom.mjs +722 -0
- package/runtime/prime/bin/capture-run.sh +18 -2
- package/runtime/prime/bin/codex-render-spec.mjs +41 -16
- package/runtime/prime/bin/codex-session-start.sh +14 -4
- package/runtime/prime/bin/codex-skill-render.mjs +9 -7
- package/runtime/prime/bin/corpus_map.py +806 -0
- package/runtime/prime/bin/corpus_survey.py +304 -0
- package/runtime/prime/bin/dashboard-data.sh +11 -171
- package/runtime/prime/bin/github-auth.sh +121 -0
- package/runtime/prime/bin/graph-batch.sh +7 -0
- package/runtime/prime/bin/graph-op.sh +4 -0
- package/runtime/prime/bin/graph-projection.sh +54 -0
- package/runtime/prime/bin/graph-wal.sh +13 -0
- package/runtime/prime/bin/graph.sh +44 -0
- package/runtime/prime/bin/handoff-lifecycle-job.sh +146 -0
- package/runtime/prime/bin/handoff-lifecycle.sh +280 -0
- package/runtime/prime/bin/handoff-preview.sh +169 -0
- package/runtime/prime/bin/handoff-run.sh +42 -26
- package/runtime/prime/bin/ingest-graph.sh +6 -0
- package/runtime/prime/bin/ingest-item.sh +10 -0
- package/runtime/prime/bin/ingest.sh +59 -30
- package/runtime/prime/bin/invite.sh +6 -0
- package/runtime/prime/bin/issue.sh +10 -0
- package/runtime/prime/bin/knowledge.sh +10 -0
- package/runtime/prime/bin/lib/config.sh +20 -0
- package/runtime/prime/bin/lib/context.sh +46 -25
- package/runtime/prime/bin/lib/git-sync.sh +70 -6
- package/runtime/prime/bin/lib/greeting.sh +34 -5
- package/runtime/prime/bin/lib/handoff-meta.sh +97 -0
- package/runtime/prime/bin/lib/worktree-links.sh +6 -0
- package/runtime/prime/bin/node-run.sh +42 -0
- package/runtime/prime/bin/notification.sh +6 -0
- package/runtime/prime/bin/observe-context.sh +14 -0
- package/runtime/prime/bin/onboarding.sh +6 -0
- package/runtime/prime/bin/person.py +4 -0
- package/runtime/prime/bin/person.sh +43 -10
- package/runtime/prime/bin/pi-observe-context.mjs +93 -0
- package/runtime/prime/bin/pi-product-workflows.mjs +1 -1
- package/runtime/prime/bin/pi-render-spec.mjs +140 -0
- package/runtime/prime/bin/post-update.sh +37 -0
- package/runtime/prime/bin/prime-render-spec.mjs +1 -1
- package/runtime/prime/bin/publish-artifact.sh +55 -2
- package/runtime/prime/bin/quest.sh +9 -0
- package/runtime/prime/bin/question.sh +8 -0
- package/runtime/prime/bin/research-ingest.sh +7 -0
- package/runtime/prime/bin/restore-owned-skills.sh +67 -0
- package/runtime/prime/bin/retrieval_eval.py +385 -0
- package/runtime/prime/bin/runtime-identity.sh +70 -0
- package/runtime/prime/bin/runtime-upgrade.sh +43 -0
- package/runtime/prime/bin/scroll.sh +9 -0
- package/runtime/prime/bin/search.sh +231 -195
- package/runtime/prime/bin/settings.sh +174 -5
- package/runtime/prime/bin/startup-check.sh +136 -0
- package/runtime/prime/bin/telemetry.sh +522 -247
- package/runtime/prime/bin/test-changes.sh +344 -0
- package/runtime/prime/bin/thread.sh +9 -0
- package/runtime/prime/bin/todo.sh +9 -0
- package/runtime/prime/bin/view-render.sh +126 -0
- package/runtime/prime/bin/worktree-create.sh +19 -5
- package/runtime/prime/egregore_runtime/__init__.py +228 -0
- package/runtime/prime/egregore_runtime/adapters/__init__.py +5 -0
- package/runtime/prime/egregore_runtime/adapters/invitation.py +237 -0
- package/runtime/prime/egregore_runtime/adapters/notification.py +59 -0
- package/runtime/prime/egregore_runtime/adapters/qmd.py +1701 -0
- package/runtime/prime/egregore_runtime/adapters/qmd_cli.py +210 -0
- package/runtime/prime/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
- package/runtime/prime/egregore_runtime/admin_gate.py +102 -0
- package/runtime/prime/egregore_runtime/artifacts.py +523 -0
- package/runtime/prime/egregore_runtime/contracts.py +499 -0
- package/runtime/prime/egregore_runtime/entitlements.py +85 -0
- package/runtime/prime/egregore_runtime/errors.py +10 -0
- package/runtime/prime/egregore_runtime/graph.py +356 -0
- package/runtime/prime/egregore_runtime/handoff_lookup.py +196 -0
- package/runtime/prime/egregore_runtime/harness_cli.py +1221 -0
- package/runtime/prime/egregore_runtime/identity.py +734 -0
- package/runtime/prime/egregore_runtime/identity_cli.py +91 -0
- package/runtime/prime/egregore_runtime/ingest.py +575 -0
- package/runtime/prime/egregore_runtime/ingest_cli.py +254 -0
- package/runtime/prime/egregore_runtime/ingest_index_cli.py +147 -0
- package/runtime/prime/egregore_runtime/invitation_cli.py +51 -0
- package/runtime/prime/egregore_runtime/invitations.py +116 -0
- package/runtime/prime/egregore_runtime/issue_cli.py +305 -0
- package/runtime/prime/egregore_runtime/issues.py +359 -0
- package/runtime/prime/egregore_runtime/knowledge.py +376 -0
- package/runtime/prime/egregore_runtime/knowledge_cli.py +173 -0
- package/runtime/prime/egregore_runtime/lifecycle.py +888 -0
- package/runtime/prime/egregore_runtime/lifecycle_cli.py +269 -0
- package/runtime/prime/egregore_runtime/notification_cli.py +125 -0
- package/runtime/prime/egregore_runtime/notifications.py +230 -0
- package/runtime/prime/egregore_runtime/observe.py +342 -0
- package/runtime/prime/egregore_runtime/onboarding.py +290 -0
- package/runtime/prime/egregore_runtime/onboarding_cli.py +110 -0
- package/runtime/prime/egregore_runtime/policy.py +144 -0
- package/runtime/prime/egregore_runtime/profile.py +193 -0
- package/runtime/prime/egregore_runtime/quest_cli.py +216 -0
- package/runtime/prime/egregore_runtime/question_cli.py +180 -0
- package/runtime/prime/egregore_runtime/questions.py +304 -0
- package/runtime/prime/egregore_runtime/quests.py +419 -0
- package/runtime/prime/egregore_runtime/readiness.py +379 -0
- package/runtime/prime/egregore_runtime/research_ingest.py +256 -0
- package/runtime/prime/egregore_runtime/research_ingest_cli.py +44 -0
- package/runtime/prime/egregore_runtime/runtime.py +464 -0
- package/runtime/prime/egregore_runtime/scroll_cli.py +185 -0
- package/runtime/prime/egregore_runtime/scrolls.py +726 -0
- package/runtime/prime/egregore_runtime/status.py +412 -0
- package/runtime/prime/egregore_runtime/status_cli.py +174 -0
- package/runtime/prime/egregore_runtime/sync.py +218 -0
- package/runtime/prime/egregore_runtime/teamsync.py +139 -0
- package/runtime/prime/egregore_runtime/telemetry.py +640 -0
- package/runtime/prime/egregore_runtime/thread_cli.py +173 -0
- package/runtime/prime/egregore_runtime/threads.py +517 -0
- package/runtime/prime/egregore_runtime/todo_cli.py +142 -0
- package/runtime/prime/egregore_runtime/todos.py +244 -0
- package/runtime/prime/egregore_runtime/upgrade.py +770 -0
- package/runtime/prime/egregore_runtime/upgrade_worker.py +53 -0
- package/runtime/prime/egregore_runtime/writeback.py +391 -0
- package/runtime/prime/egregore_runtime/writeback_cli.py +114 -0
- package/runtime/prime/manifest.json +98 -1
|
@@ -95,6 +95,24 @@ if [ -n "${CTX_SEED_TAR:-}" ] && [ -f "${CTX_SEED_TAR:-}" ]; then
|
|
|
95
95
|
fi
|
|
96
96
|
fi
|
|
97
97
|
fi
|
|
98
|
+
# Record why a fresh bake was not used — seed misses silently cost a full
|
|
99
|
+
# live gather, so the reason must be observable in startup traces.
|
|
100
|
+
if [ "$CTX_SEED_USED" != "true" ]; then
|
|
101
|
+
_SEED_REASON="tar-extract"
|
|
102
|
+
if [ "$_SEED_TS" != "0" ] || [ -n "$_SEED_AUTHOR" ]; then
|
|
103
|
+
if [ "$_SEED_AUTHOR" != "$AUTHOR" ]; then _SEED_REASON="author"
|
|
104
|
+
elif [ "$_SEED_MODE" != "${LOCAL_MODE:-false}" ]; then _SEED_REASON="mode"
|
|
105
|
+
elif [ "$_SEED_CONFIG" != "$_NOW_CONFIG" ]; then _SEED_REASON="config"
|
|
106
|
+
elif [ "$_SEED_SCOPE" != "$_NOW_SCOPE" ]; then _SEED_REASON="scope"
|
|
107
|
+
elif [ "$_SEED_SCHEMA" != "$_NOW_SCHEMA" ]; then _SEED_REASON="schema"
|
|
108
|
+
elif [ "$_SEED_AGE" -lt 0 ] || [ "$_SEED_AGE" -ge 900 ]; then _SEED_REASON="age:${_SEED_AGE}s"
|
|
109
|
+
else _SEED_REASON="completeness"
|
|
110
|
+
fi
|
|
111
|
+
fi
|
|
112
|
+
type egregore_trace_mark >/dev/null 2>&1 && egregore_trace_mark "context:seed-rejected:${_SEED_REASON}"
|
|
113
|
+
else
|
|
114
|
+
type egregore_trace_mark >/dev/null 2>&1 && egregore_trace_mark "context:seed-accepted"
|
|
115
|
+
fi
|
|
98
116
|
rm -rf "$_SEED_TMP"
|
|
99
117
|
fi
|
|
100
118
|
|
|
@@ -370,28 +388,21 @@ fi
|
|
|
370
388
|
JSON="[]"
|
|
371
389
|
RICH="[]"
|
|
372
390
|
if [ -d "$SCRIPT_DIR/memory/handoffs" ]; then
|
|
373
|
-
# One definition everywhere:
|
|
374
|
-
#
|
|
375
|
-
#
|
|
376
|
-
# uses. The file grep below stays as the local-mode/offline fallback.
|
|
391
|
+
# One definition everywhere: Egregore Runtime folds canonical lifecycle
|
|
392
|
+
# state for both Local and Connected instances. Graph is an optional
|
|
393
|
+
# projection and must never become the startup/default retrieval path.
|
|
377
394
|
ADDRESSED=""
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
echo "$_F"
|
|
390
|
-
elif [ -f "$SCRIPT_DIR/memory/handoffs/$_SID.md" ]; then
|
|
391
|
-
echo "$SCRIPT_DIR/memory/handoffs/$_SID.md"
|
|
392
|
-
fi
|
|
393
|
-
done | head -5)
|
|
394
|
-
fi
|
|
395
|
+
_RUNTIME_STATUS=$(bash "$SCRIPT_DIR/bin/activity-data.sh" 2>/dev/null || true)
|
|
396
|
+
if echo "$_RUNTIME_STATUS" | jq -e '.handoffs_to_me | type == "array"' >/dev/null 2>&1; then
|
|
397
|
+
ADDRESSED=$(echo "$_RUNTIME_STATUS" | jq -r '.handoffs_to_me[0:5][]?.filePath // empty' 2>/dev/null | while IFS= read -r _REL; do
|
|
398
|
+
_F=""
|
|
399
|
+
if [[ "$_REL" == memory/* ]]; then
|
|
400
|
+
_F="$SCRIPT_DIR/$_REL"
|
|
401
|
+
elif [[ "$_REL" == handoffs/* ]]; then
|
|
402
|
+
_F="$SCRIPT_DIR/memory/$_REL"
|
|
403
|
+
fi
|
|
404
|
+
[ -n "$_F" ] && [ -f "$_F" ] && printf '%s\n' "$_F"
|
|
405
|
+
done)
|
|
395
406
|
fi
|
|
396
407
|
# Match github username, display name, github_name first word, and people-file name
|
|
397
408
|
# Handoff files may use "to: name", "**To**: name", or "To: name"
|
|
@@ -410,6 +421,8 @@ fi
|
|
|
410
421
|
echo "$_GREP_PAT" | grep -qF "$_VARIANT" && continue
|
|
411
422
|
_GREP_PAT="$_GREP_PAT\|[Tt]o[*]*: *$_VARIANT\|[Tt]o[*]*:$_VARIANT"
|
|
412
423
|
done
|
|
424
|
+
# Compatibility fallback for an unavailable Runtime. It reads canonical
|
|
425
|
+
# Markdown directly and never calls graph or a control-plane retrieval API.
|
|
413
426
|
if [ -z "$ADDRESSED" ]; then
|
|
414
427
|
ADDRESSED=$(grep -rli "$_GREP_PAT" "$SCRIPT_DIR/memory/handoffs/" 2>/dev/null | sort -r | head -5 || true)
|
|
415
428
|
fi
|
|
@@ -509,12 +522,20 @@ fi
|
|
|
509
522
|
|
|
510
523
|
# 7. Graph health (background — zero added latency, runs in parallel; seeded)
|
|
511
524
|
[ "$CTX_SEED_USED" != "true" ] && (
|
|
512
|
-
if [ "$LOCAL_MODE" = "true" ]; then
|
|
525
|
+
if [ "$LOCAL_MODE" = "true" ] || ! _graph_projection_enabled; then
|
|
513
526
|
echo "skip"
|
|
514
|
-
elif bash "$SCRIPT_DIR/bin/graph.sh" test 2>/dev/null | grep -q "Connected"; then
|
|
515
|
-
echo "ok"
|
|
516
527
|
else
|
|
517
|
-
|
|
528
|
+
_GRAPH_TEST=$(bash "$SCRIPT_DIR/bin/graph.sh" test 2>/dev/null)
|
|
529
|
+
if printf '%s' "$_GRAPH_TEST" | grep -q "runtime_qmd_active"; then
|
|
530
|
+
# Not a failure: the activated Runtime/QMD does not use graph
|
|
531
|
+
# retrieval — the greeting already carries that receipt, so /checkup
|
|
532
|
+
# nagging here would be false alarm.
|
|
533
|
+
echo "skip"
|
|
534
|
+
elif printf '%s' "$_GRAPH_TEST" | grep -q "Connected"; then
|
|
535
|
+
echo "ok"
|
|
536
|
+
else
|
|
537
|
+
echo "fail"
|
|
538
|
+
fi
|
|
518
539
|
fi
|
|
519
540
|
) > "$CTX_DIR/graph_health" 2>/dev/null &
|
|
520
541
|
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
FRAMEWORK_UPDATED="false"
|
|
22
22
|
FRAMEWORK_UPDATED_COUNT=0
|
|
23
23
|
FRAMEWORK_UPDATED_FILES=""
|
|
24
|
+
HEALTH_RETRIEVAL="skip"
|
|
25
|
+
SYNC_RECEIPT=""
|
|
24
26
|
|
|
25
27
|
# The core repo's integration branch: "develop" unless egregore.json sets
|
|
26
28
|
# base_branch. session-start.sh resolves this before sourcing; resolve it here
|
|
@@ -115,6 +117,7 @@ fi
|
|
|
115
117
|
|
|
116
118
|
# Wait for all fetches
|
|
117
119
|
wait 2>/dev/null || true
|
|
120
|
+
type egregore_trace_mark >/dev/null 2>&1 && egregore_trace_mark "sync:fetch-join(refs_fresh=$_REFS_FRESH)"
|
|
118
121
|
|
|
119
122
|
# --- Auto-update framework from upstream (deferred) ---
|
|
120
123
|
# Moved AFTER setup_develop() so framework commits land on develop, not on
|
|
@@ -278,6 +281,17 @@ setup_develop() {
|
|
|
278
281
|
COMMITS_AHEAD=$(git rev-list "origin/main..$BASE_BRANCH" --count 2>/dev/null || echo "0")
|
|
279
282
|
fi
|
|
280
283
|
|
|
284
|
+
# Read-only invocations (tests, card/prompt renders exercised outside a
|
|
285
|
+
# real session start) stop here: the ref updates above are working-tree
|
|
286
|
+
# safe, but autosave commits, branch pushes, and parking the checkout on
|
|
287
|
+
# the base branch mutate a live repo out from under whatever session owns
|
|
288
|
+
# it.
|
|
289
|
+
if [ "${EGREGORE_GIT_SYNC_READONLY:-0}" = "1" ]; then
|
|
290
|
+
ACTION="ready"
|
|
291
|
+
SAVED_BRANCH=""
|
|
292
|
+
return 0
|
|
293
|
+
fi
|
|
294
|
+
|
|
281
295
|
# Always start from the base branch
|
|
282
296
|
# Every session begins there. Claude creates a fresh topic branch
|
|
283
297
|
# (dev/{author}/{topic-slug}) when the user says what they're working on.
|
|
@@ -397,15 +411,65 @@ if [ "$IS_WORKTREE" != "true" ] && [ "$BASE_BRANCH_READY" = "true" ]; then
|
|
|
397
411
|
_apply_framework_update 2>/dev/null || true
|
|
398
412
|
fi
|
|
399
413
|
|
|
400
|
-
# ---
|
|
414
|
+
# --- Synchronize canonical memory and retrieval readiness ---
|
|
415
|
+
type egregore_trace_mark >/dev/null 2>&1 && egregore_trace_mark "sync:branch-setup"
|
|
401
416
|
if [ -d "$SCRIPT_DIR/memory/.git" ]; then
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
417
|
+
# Runtime owns the whole receipt: canonical Git state gates the synchronous
|
|
418
|
+
# lexical refresh, then semantic construction is scheduled in the
|
|
419
|
+
# background. Capture stderr as part of a visible failure instead of turning
|
|
420
|
+
# a failed pull into a false "memory synced" state.
|
|
421
|
+
# When the attendant's warm marker proved a successful fetch round within
|
|
422
|
+
# the freshness window, the memory remote-tracking ref is already current —
|
|
423
|
+
# let the Runtime sync reuse it instead of fetching a second time. Boots
|
|
424
|
+
# without that proof keep the Runtime's own fetch as the canonical gate.
|
|
425
|
+
_SYNC_FETCH_FRESH=0
|
|
426
|
+
[ "${_REFS_FRESH:-false}" = "true" ] && _SYNC_FETCH_FRESH=1
|
|
427
|
+
SYNC_RECEIPT=$(EGREGORE_ROOT="$SCRIPT_DIR" \
|
|
428
|
+
PYTHONPATH="$SCRIPT_DIR${PYTHONPATH:+:$PYTHONPATH}" \
|
|
429
|
+
EGREGORE_SYNC_FETCH_FRESH="$_SYNC_FETCH_FRESH" \
|
|
430
|
+
python3 -m egregore_runtime.harness_cli sync --json 2>&1) || true
|
|
431
|
+
if printf '%s' "$SYNC_RECEIPT" | jq -e '.schema_version == "egregore-runtime-sync/v1"' >/dev/null 2>&1; then
|
|
432
|
+
if [ "$(printf '%s' "$SYNC_RECEIPT" | jq -r '.canonical_current')" = "true" ]; then
|
|
433
|
+
MEMORY_SYNCED="true"
|
|
434
|
+
else
|
|
435
|
+
MEMORY_SYNCED="false"
|
|
436
|
+
HEALTH_GIT="fail"
|
|
437
|
+
fi
|
|
438
|
+
if [ "$(printf '%s' "$SYNC_RECEIPT" | jq -r '.status')" = "ready" ]; then
|
|
439
|
+
HEALTH_RETRIEVAL="ok"
|
|
440
|
+
else
|
|
441
|
+
HEALTH_RETRIEVAL="fail"
|
|
442
|
+
fi
|
|
443
|
+
else
|
|
444
|
+
# Import/runtime failures are still retained as the startup receipt and
|
|
445
|
+
# surfaced through health; never call this synchronized.
|
|
446
|
+
MEMORY_SYNCED="false"
|
|
447
|
+
HEALTH_GIT="fail"
|
|
448
|
+
HEALTH_RETRIEVAL="fail"
|
|
449
|
+
fi
|
|
450
|
+
|
|
451
|
+
# Canonical synchronization and local retrieval readiness are independent
|
|
452
|
+
# health dimensions. A dirty or diverged memory repository must keep Git
|
|
453
|
+
# red, but it does not invalidate a BM25 index that is aligned with the
|
|
454
|
+
# exact local canonical snapshot. Consult the typed health surface after a
|
|
455
|
+
# failed/degraded sync so the greeting does not report retrieval unavailable
|
|
456
|
+
# when QMD can safely answer from that snapshot. Semantic warming is healthy.
|
|
457
|
+
if [ "$HEALTH_RETRIEVAL" != "ok" ]; then
|
|
458
|
+
RETRIEVAL_HEALTH=$(EGREGORE_ROOT="$SCRIPT_DIR" \
|
|
459
|
+
PYTHONPATH="$SCRIPT_DIR${PYTHONPATH:+:$PYTHONPATH}" \
|
|
460
|
+
python3 -m egregore_runtime.harness_cli status --json 2>/dev/null) || true
|
|
461
|
+
if printf '%s' "$RETRIEVAL_HEALTH" | jq -e '
|
|
462
|
+
.available == true
|
|
463
|
+
and .canonical_state_ready == true
|
|
464
|
+
and .bm25_ready == true
|
|
465
|
+
and .index_source_revision != null
|
|
466
|
+
and .index_source_revision == .source_revision
|
|
467
|
+
' >/dev/null 2>&1; then
|
|
468
|
+
HEALTH_RETRIEVAL="ok"
|
|
469
|
+
fi
|
|
406
470
|
fi
|
|
407
|
-
MEMORY_SYNCED="true"
|
|
408
471
|
fi
|
|
472
|
+
type egregore_trace_mark >/dev/null 2>&1 && egregore_trace_mark "sync:memory-retrieval"
|
|
409
473
|
|
|
410
474
|
# --- Sync managed repos ---
|
|
411
475
|
# Managed repos sync silently — they are a CLI concern and never render in the
|
|
@@ -103,7 +103,7 @@ if [ "$LOCAL_MODE" = "true" ]; then
|
|
|
103
103
|
# Local mode: only check github + git, skip api-key/graph/telegram
|
|
104
104
|
HAS_FAILURE="false"
|
|
105
105
|
FAILED_SERVICES=""
|
|
106
|
-
for pair in "github:$HEALTH_GITHUB" "git:$HEALTH_GIT"; do
|
|
106
|
+
for pair in "github:$HEALTH_GITHUB" "git:$HEALTH_GIT" "retrieval:${HEALTH_RETRIEVAL:-skip}"; do
|
|
107
107
|
svc="${pair%%:*}"
|
|
108
108
|
svc_status="${pair#*:}"
|
|
109
109
|
if [ "$svc_status" = "fail" ]; then
|
|
@@ -125,7 +125,7 @@ else
|
|
|
125
125
|
# Connected mode: check all services
|
|
126
126
|
HAS_FAILURE="false"
|
|
127
127
|
FAILED_SERVICES=""
|
|
128
|
-
for pair in "github:$HEALTH_GITHUB" "git:$HEALTH_GIT" "api-key:$HEALTH_APIKEY" "graph:$HEALTH_GRAPH" "telegram:$HEALTH_TELEGRAM"; do
|
|
128
|
+
for pair in "github:$HEALTH_GITHUB" "git:$HEALTH_GIT" "retrieval:${HEALTH_RETRIEVAL:-skip}" "api-key:$HEALTH_APIKEY" "graph:$HEALTH_GRAPH" "telegram:$HEALTH_TELEGRAM"; do
|
|
129
129
|
svc="${pair%%:*}"
|
|
130
130
|
svc_status="${pair#*:}"
|
|
131
131
|
if [ "$svc_status" = "fail" ]; then
|
|
@@ -141,7 +141,11 @@ else
|
|
|
141
141
|
FOOTER_LEFT=" ✓ ready"
|
|
142
142
|
FOOTER_RIGHT=""
|
|
143
143
|
if [ "$MEMORY_SYNCED" = "true" ]; then
|
|
144
|
-
|
|
144
|
+
if [ "${HEALTH_RETRIEVAL:-skip}" = "ok" ]; then
|
|
145
|
+
FOOTER_RIGHT="◆ memory + recall ready"
|
|
146
|
+
else
|
|
147
|
+
FOOTER_RIGHT="◆ memory synced · recall unavailable"
|
|
148
|
+
fi
|
|
145
149
|
fi
|
|
146
150
|
|
|
147
151
|
FL_LEN=${#FOOTER_LEFT}
|
|
@@ -152,6 +156,31 @@ else
|
|
|
152
156
|
fi
|
|
153
157
|
fi
|
|
154
158
|
|
|
159
|
+
# Runtime update summary — cached durable state only, never a live probe, so
|
|
160
|
+
# session start stays fast. One compact line; silent when nothing is staged.
|
|
161
|
+
# Keyed by stable org identity composed with the main installation path
|
|
162
|
+
# (mirrors egregore_runtime.upgrade.instance_key); no org_id → no summary.
|
|
163
|
+
_UPGRADE_ORG=$(jq -r '.org_id // empty' "$SCRIPT_DIR/egregore.json" 2>/dev/null)
|
|
164
|
+
_UPGRADE_MAIN=$(cd "${MAIN_PROJECT_DIR:-$SCRIPT_DIR}" 2>/dev/null && pwd -P || true)
|
|
165
|
+
if [ -n "$_UPGRADE_ORG" ] && [ -n "$_UPGRADE_MAIN" ]; then
|
|
166
|
+
_UPGRADE_HASH=$(printf '%s|%s' "$_UPGRADE_ORG" "$_UPGRADE_MAIN" | shasum -a 256 2>/dev/null | cut -c1-16)
|
|
167
|
+
_UPGRADE_DIR="${EGREGORE_UPGRADE_ROOT:-$HOME/.egregore/runtime/upgrade}/${_UPGRADE_HASH}"
|
|
168
|
+
if [ -f "$_UPGRADE_DIR/active.json" ] \
|
|
169
|
+
&& [ "$(jq -r '.retrieval // empty' "$_UPGRADE_DIR/active.json" 2>/dev/null)" = "runtime-qmd" ]; then
|
|
170
|
+
_UPGRADE_VER=$(jq -r '.active_version // "?"' "$_UPGRADE_DIR/active.json" 2>/dev/null)
|
|
171
|
+
echo " ◆ runtime ${_UPGRADE_VER} active · organizational retrieval: Runtime/QMD"
|
|
172
|
+
elif [ -f "$_UPGRADE_DIR/state.json" ]; then
|
|
173
|
+
case "$(jq -r '.status // empty' "$_UPGRADE_DIR/state.json" 2>/dev/null)" in
|
|
174
|
+
preparing)
|
|
175
|
+
echo " ◐ runtime update preparing in background — egregore settings" ;;
|
|
176
|
+
ready-to-activate)
|
|
177
|
+
echo " ● runtime update ready to activate — egregore settings" ;;
|
|
178
|
+
failed)
|
|
179
|
+
echo " ⚠ runtime update needs attention — egregore settings" ;;
|
|
180
|
+
esac
|
|
181
|
+
fi
|
|
182
|
+
fi
|
|
183
|
+
|
|
155
184
|
# Framework update trail — an auto-update overwrites every framework path from
|
|
156
185
|
# upstream, local edits included. It used to surface as the footer word
|
|
157
186
|
# "updated" in local mode and as nothing at all in connected mode, which is not
|
|
@@ -282,7 +311,7 @@ _print_pending_scroll_turns() {
|
|
|
282
311
|
| select(if $mode == "scroll" then true else (is_applied($events; $turn.id) | not) end)]
|
|
283
312
|
| length
|
|
284
313
|
' --arg mode scroll "$file" 2>/dev/null) || continue
|
|
285
|
-
[[ "$count" =~ ^[0-9]+$ ]] ||
|
|
314
|
+
[[ "$count" =~ ^[0-9]+$ ]] || continue
|
|
286
315
|
[ "$count" -gt 0 ] && rows+="${safe_slug}"$'\t'"${count}"$'\n'
|
|
287
316
|
done
|
|
288
317
|
|
|
@@ -326,7 +355,7 @@ _print_pending_scroll_turns() {
|
|
|
326
355
|
| select((is_declined($events; $received; $turn.id) | not))]
|
|
327
356
|
| length
|
|
328
357
|
' --arg mode harvest "$file" 2>/dev/null) || continue
|
|
329
|
-
[[ "$count" =~ ^[0-9]+$ ]] ||
|
|
358
|
+
[[ "$count" =~ ^[0-9]+$ ]] || continue
|
|
330
359
|
[ "$count" -gt 0 ] && rows+="${safe_slug}"$'\t'"${count}"$'\n'
|
|
331
360
|
done
|
|
332
361
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# shellcheck shell=bash
|
|
2
|
+
# Shared handoff metadata extraction for legacy markdown headers and YAML front matter.
|
|
3
|
+
|
|
4
|
+
eg_handoff_md_field() {
|
|
5
|
+
local file="$1"
|
|
6
|
+
local key="$2"
|
|
7
|
+
local val
|
|
8
|
+
|
|
9
|
+
val="$(grep -m1 "^\*\*${key}\*\*:" "$file" 2>/dev/null | sed "s/^\*\*${key}\*\*:[[:space:]]*//" | xargs 2>/dev/null || true)"
|
|
10
|
+
if [ -z "$val" ]; then
|
|
11
|
+
val="$(grep -m1 "^\*\*${key}:\*\*" "$file" 2>/dev/null | sed "s/^\*\*${key}:\*\*[[:space:]]*//" | xargs 2>/dev/null || true)"
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
printf '%s\n' "$val"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
eg_handoff_yaml_field() {
|
|
18
|
+
local file="$1"
|
|
19
|
+
local key="$2"
|
|
20
|
+
|
|
21
|
+
sed -n '/^---$/,/^---$/p' "$file" 2>/dev/null \
|
|
22
|
+
| grep -m1 "^${key}:" 2>/dev/null \
|
|
23
|
+
| sed "s/^${key}:[[:space:]]*//" \
|
|
24
|
+
| sed 's/^"//; s/"$//' \
|
|
25
|
+
| sed "s/^'//; s/'$//" \
|
|
26
|
+
| xargs 2>/dev/null || true
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
eg_handoff_author_from_filename() {
|
|
30
|
+
local file="$1"
|
|
31
|
+
local name
|
|
32
|
+
|
|
33
|
+
name="$(basename "$file" .md)"
|
|
34
|
+
if [[ "$name" =~ ^[0-9]{2}-([^-]+)- ]]; then
|
|
35
|
+
printf '%s\n' "${BASH_REMATCH[1]}"
|
|
36
|
+
elif [[ "$name" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}-([^-]+)- ]]; then
|
|
37
|
+
printf '%s\n' "${BASH_REMATCH[1]}"
|
|
38
|
+
fi
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
eg_handoff_date_from_filename() {
|
|
42
|
+
local file="$1"
|
|
43
|
+
local name dir day
|
|
44
|
+
|
|
45
|
+
name="$(basename "$file" .md)"
|
|
46
|
+
dir="$(basename "$(dirname "$file")")"
|
|
47
|
+
if [[ "$dir" =~ ^[0-9]{4}-[0-9]{2}$ && "$name" =~ ^([0-9]{2})- ]]; then
|
|
48
|
+
day="${BASH_REMATCH[1]}"
|
|
49
|
+
printf '%s-%s\n' "$dir" "$day"
|
|
50
|
+
elif [[ "$name" =~ ^([0-9]{4}-[0-9]{2}-[0-9]{2})- ]]; then
|
|
51
|
+
printf '%s\n' "${BASH_REMATCH[1]}"
|
|
52
|
+
fi
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
eg_handoff_author() {
|
|
56
|
+
local file="$1"
|
|
57
|
+
local author
|
|
58
|
+
|
|
59
|
+
author="$(eg_handoff_md_field "$file" "Author")"
|
|
60
|
+
[ -z "$author" ] && author="$(eg_handoff_md_field "$file" "From")"
|
|
61
|
+
[ -z "$author" ] && author="$(grep -m1 '^From:' "$file" 2>/dev/null | sed 's/^From:[[:space:]]*//' | xargs 2>/dev/null || true)"
|
|
62
|
+
[ -z "$author" ] && author="$(eg_handoff_yaml_field "$file" "author")"
|
|
63
|
+
[ -z "$author" ] && author="$(eg_handoff_yaml_field "$file" "from")"
|
|
64
|
+
[ -z "$author" ] && author="$(eg_handoff_author_from_filename "$file")"
|
|
65
|
+
|
|
66
|
+
printf '%s\n' "$author" | sed 's/[[:space:]]*→.*//' | xargs 2>/dev/null || true
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
eg_handoff_topic() {
|
|
70
|
+
local file="$1"
|
|
71
|
+
local topic
|
|
72
|
+
|
|
73
|
+
topic="$(grep -m1 '^# ' "$file" 2>/dev/null | sed 's/^# //; s/^Handoff:[[:space:]]*//' | xargs 2>/dev/null || true)"
|
|
74
|
+
[ -z "$topic" ] && topic="$(eg_handoff_yaml_field "$file" "topic")"
|
|
75
|
+
printf '%s\n' "$topic"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
eg_handoff_date() {
|
|
79
|
+
local file="$1"
|
|
80
|
+
local date
|
|
81
|
+
|
|
82
|
+
date="$(eg_handoff_md_field "$file" "Date")"
|
|
83
|
+
[ -z "$date" ] && date="$(grep -m1 '^Date:' "$file" 2>/dev/null | sed 's/^Date:[[:space:]]*//' | xargs 2>/dev/null || true)"
|
|
84
|
+
[ -z "$date" ] && date="$(eg_handoff_yaml_field "$file" "date")"
|
|
85
|
+
[ -z "$date" ] && date="$(eg_handoff_date_from_filename "$file")"
|
|
86
|
+
printf '%s\n' "$date"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
eg_handoff_metadata_json() {
|
|
90
|
+
local file="$1"
|
|
91
|
+
|
|
92
|
+
jq -cn \
|
|
93
|
+
--arg author "$(eg_handoff_author "$file")" \
|
|
94
|
+
--arg topic "$(eg_handoff_topic "$file")" \
|
|
95
|
+
--arg date "$(eg_handoff_date "$file")" \
|
|
96
|
+
'{author:$author, topic:$topic, date:$date}'
|
|
97
|
+
}
|
|
@@ -47,6 +47,12 @@ egregore_link_shared_state() {
|
|
|
47
47
|
|
|
48
48
|
if [ -L "$dst" ]; then
|
|
49
49
|
ln -sfn "$src" "$dst" 2>/dev/null || true
|
|
50
|
+
elif [ -f "$dst" ] && cmp -s "$src" "$dst"; then
|
|
51
|
+
# Older atomic writers could replace a shared-state symlink with an
|
|
52
|
+
# identical private file. Exact equality makes this repair lossless;
|
|
53
|
+
# differing files are left untouched for explicit reconciliation.
|
|
54
|
+
rm -f "$dst" 2>/dev/null || continue
|
|
55
|
+
ln -s "$src" "$dst" 2>/dev/null || true
|
|
50
56
|
elif [ ! -e "$dst" ]; then
|
|
51
57
|
ln -s "$src" "$dst" 2>/dev/null || true
|
|
52
58
|
fi
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Resolve a working Node executable without trusting a broken version-manager
|
|
5
|
+
# shim. Skills call this adapter instead of embedding Volta/NVM paths.
|
|
6
|
+
working_node() {
|
|
7
|
+
local candidate
|
|
8
|
+
candidate="$(command -v node 2>/dev/null || true)"
|
|
9
|
+
if [ -n "$candidate" ] && "$candidate" --version >/dev/null 2>&1; then
|
|
10
|
+
printf '%s\n' "$candidate"
|
|
11
|
+
return 0
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
for root in \
|
|
15
|
+
"${VOLTA_HOME:-$HOME/.volta}/tools/image/node" \
|
|
16
|
+
"${NVM_DIR:-$HOME/.nvm}/versions/node"
|
|
17
|
+
do
|
|
18
|
+
[ -d "$root" ] || continue
|
|
19
|
+
while IFS= read -r candidate; do
|
|
20
|
+
if [ -x "$candidate" ] && "$candidate" --version >/dev/null 2>&1; then
|
|
21
|
+
printf '%s\n' "$candidate"
|
|
22
|
+
return 0
|
|
23
|
+
fi
|
|
24
|
+
done < <(find "$root" -type f -path '*/bin/node' 2>/dev/null)
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
for candidate in /opt/homebrew/bin/node /usr/local/bin/node /usr/bin/node; do
|
|
28
|
+
if [ -x "$candidate" ] && "$candidate" --version >/dev/null 2>&1; then
|
|
29
|
+
printf '%s\n' "$candidate"
|
|
30
|
+
return 0
|
|
31
|
+
fi
|
|
32
|
+
done
|
|
33
|
+
return 1
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
NODE_BIN="$(working_node || true)"
|
|
37
|
+
if [ -z "$NODE_BIN" ]; then
|
|
38
|
+
echo "egregore: Node is unavailable; install Node 22, then retry" >&2
|
|
39
|
+
exit 126
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
exec "$NODE_BIN" "$@"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Compile authorized organizational context for harness UserPromptSubmit hooks.
|
|
3
|
+
# Input: the harness hook JSON on stdin. Output: a hook additionalContext JSON
|
|
4
|
+
# envelope, or nothing when the prompt is not organizational recall.
|
|
5
|
+
|
|
6
|
+
set -u
|
|
7
|
+
|
|
8
|
+
ROOT="${EGREGORE_ROOT:-${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/.." && pwd)}}"
|
|
9
|
+
HARNESS="${1:-shell}"
|
|
10
|
+
|
|
11
|
+
EGREGORE_ROOT="$ROOT" \
|
|
12
|
+
EGREGORE_RUNTIME="$HARNESS" \
|
|
13
|
+
PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}" \
|
|
14
|
+
python3 -m egregore_runtime.harness_cli prompt-hook --harness "$HARNESS" || true
|
|
@@ -104,6 +104,10 @@ def display_slug(value: str) -> str:
|
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
def atomic_text(path: Path, text: str) -> None:
|
|
107
|
+
# Worktrees and transient harness clones share personal state through a
|
|
108
|
+
# symlink to the primary instance. Replace the target, never the link.
|
|
109
|
+
if path.is_symlink():
|
|
110
|
+
path = path.resolve()
|
|
107
111
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
108
112
|
fd, temp_name = tempfile.mkstemp(prefix=path.name + ".", dir=path.parent)
|
|
109
113
|
try:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
|
-
#
|
|
5
|
-
#
|
|
4
|
+
# Provider-independent identity spine for local state, canonical people files,
|
|
5
|
+
# and the shared control plane. Neo4j is an optional derived projection.
|
|
6
6
|
|
|
7
7
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
8
8
|
SCRIPT_DIR="$ROOT"
|
|
@@ -18,6 +18,13 @@ usage() {
|
|
|
18
18
|
exit 2
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
authorize_identity() {
|
|
22
|
+
permission="$1"
|
|
23
|
+
resource="$2"
|
|
24
|
+
EGREGORE_ROOT="$ROOT" python3 -m egregore_runtime.identity_cli \
|
|
25
|
+
authorize-self "$permission" "$resource" >/dev/null
|
|
26
|
+
}
|
|
27
|
+
|
|
21
28
|
remote_config() {
|
|
22
29
|
api_url="${EGREGORE_API_URL:-$(_config_val api_url)}"
|
|
23
30
|
api_key="${EGREGORE_API_KEY:-$(_load_env_var EGREGORE_API_KEY)}"
|
|
@@ -46,6 +53,12 @@ sync_remote_identity() {
|
|
|
46
53
|
--max-time 10 2>/dev/null || true)"
|
|
47
54
|
api_status="$(printf '%s' "$api_result" | jq -r '.status // "failed"' 2>/dev/null || echo failed)"
|
|
48
55
|
platform_user_id="$(printf '%s' "$api_result" | jq -r '.user_id // empty' 2>/dev/null || true)"
|
|
56
|
+
if [ "$api_status" = "ok" ]; then
|
|
57
|
+
if ! printf '%s' "$api_result" | EGREGORE_ROOT="$ROOT" \
|
|
58
|
+
python3 -m egregore_runtime.identity_cli >/dev/null 2>&1; then
|
|
59
|
+
api_status="identity-reconcile-failed"
|
|
60
|
+
fi
|
|
61
|
+
fi
|
|
49
62
|
fi
|
|
50
63
|
|
|
51
64
|
# A removed membership is terminal until an admin explicitly re-invites
|
|
@@ -82,8 +95,11 @@ sync_remote_identity() {
|
|
|
82
95
|
platformUserId:$platformUserId
|
|
83
96
|
}')"
|
|
84
97
|
|
|
85
|
-
|
|
86
|
-
|
|
98
|
+
graph_enabled="${EGREGORE_GRAPH_PROJECTION:-0}"
|
|
99
|
+
graph_status="disabled"
|
|
100
|
+
if [ "$graph_enabled" = "1" ]; then
|
|
101
|
+
graph_status="failed"
|
|
102
|
+
if graph_result="$(bash "$ROOT/bin/graph.sh" query "
|
|
87
103
|
OPTIONAL MATCH (legacy:Person)
|
|
88
104
|
WHERE NOT coalesce(legacy.kind, '') IN ['external', 'identity_alias']
|
|
89
105
|
AND coalesce(legacy.status, 'active') = 'active'
|
|
@@ -140,11 +156,12 @@ sync_remote_identity() {
|
|
|
140
156
|
MATCH (o:Org {id: \$_org})
|
|
141
157
|
MERGE (p)-[:MEMBER_OF]->(o)
|
|
142
158
|
RETURN p.personId AS personId
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
159
|
+
" "$params" 2>/dev/null)"; then
|
|
160
|
+
if printf '%s' "$graph_result" | jq -e \
|
|
161
|
+
--arg personId "$(printf '%s' "$identity" | jq -r .person_id)" \
|
|
162
|
+
'.values[0][0] == $personId' >/dev/null 2>&1; then
|
|
163
|
+
graph_status="synced"
|
|
164
|
+
fi
|
|
148
165
|
fi
|
|
149
166
|
fi
|
|
150
167
|
|
|
@@ -188,7 +205,9 @@ sync_remote_identity() {
|
|
|
188
205
|
|
|
189
206
|
status="synced"
|
|
190
207
|
[ "$api_status" = "ok" ] || status="partial"
|
|
191
|
-
[ "$
|
|
208
|
+
if [ "$graph_enabled" = "1" ] && [ "$graph_status" != "synced" ]; then
|
|
209
|
+
status="partial"
|
|
210
|
+
fi
|
|
192
211
|
printf '%s' "$identity" | jq \
|
|
193
212
|
--arg status "$status" \
|
|
194
213
|
--arg supabase "$api_status" \
|
|
@@ -366,6 +385,7 @@ command="${1:-}"
|
|
|
366
385
|
[ -n "$command" ] || usage
|
|
367
386
|
|
|
368
387
|
if [ "$command" = "show" ]; then
|
|
388
|
+
authorize_identity read "identity:self"
|
|
369
389
|
jq '{
|
|
370
390
|
person_id,
|
|
371
391
|
display_name,
|
|
@@ -382,6 +402,7 @@ if [ "$command" = "show" ]; then
|
|
|
382
402
|
fi
|
|
383
403
|
|
|
384
404
|
if [ "$command" = "backfill" ]; then
|
|
405
|
+
authorize_identity administer "identity:roster"
|
|
385
406
|
backfill_people "$@"
|
|
386
407
|
exit $?
|
|
387
408
|
fi
|
|
@@ -413,6 +434,13 @@ case "$command" in
|
|
|
413
434
|
*) usage ;;
|
|
414
435
|
esac
|
|
415
436
|
|
|
437
|
+
# Bootstrap reconciliation is allowed to establish the first ActorContext;
|
|
438
|
+
# every explicit self-service mutation must authorize before provider lookup,
|
|
439
|
+
# canonical profile writes, control-plane reconciliation, or projection.
|
|
440
|
+
if [ "$command" = "set-name" ] || [ "$command" = "set-email" ]; then
|
|
441
|
+
authorize_identity administer "identity:self"
|
|
442
|
+
fi
|
|
443
|
+
|
|
416
444
|
github_args=()
|
|
417
445
|
state_github="$(jq -r '.github_username // empty' "$STATE" 2>/dev/null)"
|
|
418
446
|
if command -v gh >/dev/null 2>&1; then
|
|
@@ -437,8 +465,13 @@ fi
|
|
|
437
465
|
if [ "$(jq -r '.onboarding_complete // false' "$STATE" 2>/dev/null)" = "true" ]; then
|
|
438
466
|
onboard_args=(--onboarded)
|
|
439
467
|
fi
|
|
468
|
+
# macOS still ships Bash 3.2, where expanding an empty array under `set -u`
|
|
469
|
+
# raises "unbound variable". Disable nounset only for this argument expansion;
|
|
470
|
+
# every value remains passed as a separately quoted argument.
|
|
471
|
+
set +u
|
|
440
472
|
identity="$(python3 "$PERSON_PY" sync-local \
|
|
441
473
|
"${display_args[@]}" "${github_args[@]}" "${email_args[@]}" "${onboard_args[@]}")"
|
|
474
|
+
set -u
|
|
442
475
|
|
|
443
476
|
if [ "$(_detect_mode)" = "local" ]; then
|
|
444
477
|
printf '%s' "$identity" | jq '. + {status:"synced-local",supabase:"unavailable",graph:"unavailable"}'
|