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.
Files changed (706) hide show
  1. package/assets/egregore-launcher.js +1013 -16
  2. package/bin/cli.js +11 -0
  3. package/lib/claude-runtime.js +192 -0
  4. package/lib/local.js +38 -31
  5. package/lib/pi-runtime.js +1 -0
  6. package/lib/prime-runtime.js +1 -0
  7. package/lib/runtime-identity.js +146 -0
  8. package/lib/setup.js +116 -17
  9. package/package.json +10 -6
  10. package/runtime/claude/.claude/context/commit-format.md +110 -0
  11. package/runtime/claude/.claude/context/git-language.md +46 -0
  12. package/runtime/claude/.claude/context/notification-consent.md +66 -0
  13. package/runtime/claude/.claude/context/pr-format.md +67 -0
  14. package/runtime/claude/.claude/context/telemetry.md +133 -0
  15. package/runtime/claude/.claude/hooks/boundary-check.sh +333 -0
  16. package/runtime/claude/.claude/hooks/branch-guard.sh +231 -0
  17. package/runtime/claude/.claude/hooks/card-context.sh +38 -0
  18. package/runtime/claude/.claude/hooks/emissary-detect.sh +53 -0
  19. package/runtime/claude/.claude/hooks/memory-refresh.sh +67 -0
  20. package/runtime/claude/.claude/hooks/onboarding-guard.sh +86 -0
  21. package/runtime/claude/.claude/hooks/retrieval-context.sh +43 -0
  22. package/runtime/claude/.claude/rules/voice-bedrock.md +73 -0
  23. package/runtime/claude/.claude/settings.json +131 -0
  24. package/runtime/claude/.claude/skills/activity/SKILL.md +68 -0
  25. package/runtime/claude/.claude/skills/announce/SKILL.md +54 -0
  26. package/runtime/claude/.claude/skills/archive/SKILL.md +71 -0
  27. package/runtime/claude/.claude/skills/branch/SKILL.md +147 -0
  28. package/runtime/claude/.claude/skills/checkup/SKILL.md +159 -0
  29. package/runtime/claude/.claude/skills/commit/SKILL.md +103 -0
  30. package/runtime/claude/.claude/skills/contribute/SKILL.md +343 -0
  31. package/runtime/claude/.claude/skills/create-skill/SKILL.md +135 -0
  32. package/runtime/claude/.claude/skills/dark-mode/SKILL.md +410 -0
  33. package/runtime/claude/.claude/skills/dashboard/SKILL.md +43 -0
  34. package/runtime/claude/.claude/skills/deep-reflect/REPORT.md +140 -0
  35. package/runtime/claude/.claude/skills/deep-reflect/RESEARCH.md +132 -0
  36. package/runtime/claude/.claude/skills/deep-reflect/ROLES.md +104 -0
  37. package/runtime/claude/.claude/skills/deep-reflect/SKILL.md +170 -0
  38. package/runtime/claude/.claude/skills/delete-user/SKILL.md +150 -0
  39. package/runtime/claude/.claude/skills/emissary/SKILL.md +220 -0
  40. package/runtime/claude/.claude/skills/handoff/SKILL.md +124 -0
  41. package/runtime/claude/.claude/skills/harvest/AUDIT.md +546 -0
  42. package/runtime/claude/.claude/skills/harvest/FORMAT.md +436 -0
  43. package/runtime/claude/.claude/skills/harvest/PROCESS.md +395 -0
  44. package/runtime/claude/.claude/skills/harvest/QUESTION_PALETTE.md +76 -0
  45. package/runtime/claude/.claude/skills/harvest/SKILL.md +100 -0
  46. package/runtime/claude/.claude/skills/ingest/SKILL.md +112 -0
  47. package/runtime/claude/.claude/skills/ingest-corpus/SKILL.md +187 -0
  48. package/runtime/claude/.claude/skills/ingest-notion/SKILL.md +214 -0
  49. package/runtime/claude/.claude/skills/ingest-user-interview/SKILL.md +65 -0
  50. package/runtime/claude/.claude/skills/ingest-user-interview/references/analysis-contract.md +125 -0
  51. package/runtime/claude/.claude/skills/invite/SKILL.md +111 -0
  52. package/runtime/claude/.claude/skills/issue/SKILL.md +104 -0
  53. package/runtime/claude/.claude/skills/me/SKILL.md +81 -0
  54. package/runtime/claude/.claude/skills/meeting/SKILL.md +76 -0
  55. package/runtime/claude/.claude/skills/meeting/references/analysis-contract.md +102 -0
  56. package/runtime/claude/.claude/skills/note/SKILL.md +71 -0
  57. package/runtime/claude/.claude/skills/notion-connect/SKILL.md +124 -0
  58. package/runtime/claude/.claude/skills/onboarding/SKILL.md +159 -0
  59. package/runtime/claude/.claude/skills/pr/SKILL.md +85 -0
  60. package/runtime/claude/.claude/skills/pull/SKILL.md +79 -0
  61. package/runtime/claude/.claude/skills/push/SKILL.md +47 -0
  62. package/runtime/claude/.claude/skills/quest/SKILL.md +121 -0
  63. package/runtime/claude/.claude/skills/reflect/SKILL.md +69 -0
  64. package/runtime/claude/.claude/skills/review-pr/SKILL.md +276 -0
  65. package/runtime/claude/.claude/skills/save/SKILL.md +92 -0
  66. package/runtime/claude/.claude/skills/slack-connect/SKILL.md +148 -0
  67. package/runtime/claude/.claude/skills/summon/SKILL.md +240 -0
  68. package/runtime/claude/.claude/skills/sync-repos/SKILL.md +82 -0
  69. package/runtime/claude/.claude/skills/teams-connect/SKILL.md +216 -0
  70. package/runtime/claude/.claude/skills/telegram-connect/SKILL.md +110 -0
  71. package/runtime/claude/.claude/skills/telemetry/SKILL.md +117 -0
  72. package/runtime/claude/.claude/skills/test/SKILL.md +87 -0
  73. package/runtime/claude/.claude/skills/the-spiral/SKILL.md +492 -0
  74. package/runtime/claude/.claude/skills/tui-design/SKILL.md +188 -0
  75. package/runtime/claude/.claude/skills/tutorial/SKILL.md +100 -0
  76. package/runtime/claude/.claude/skills/update/SKILL.md +265 -0
  77. package/runtime/claude/.claude/skills/view/SKILL.md +393 -0
  78. package/runtime/claude/.claude/skills/view/compose-scaffold.html +221 -0
  79. package/runtime/claude/.claude/skills/visual-explain/SKILL.md +132 -0
  80. package/runtime/claude/.claude/skills/wrap/SKILL.md +98 -0
  81. package/runtime/claude/CLAUDE.md +447 -0
  82. package/runtime/claude/bin/activity-action.sh +92 -0
  83. package/runtime/claude/bin/activity-data.sh +17 -0
  84. package/runtime/claude/bin/agent.sh +783 -0
  85. package/runtime/claude/bin/artifact-register.sh +164 -0
  86. package/runtime/claude/bin/artifact-writeback.sh +53 -0
  87. package/runtime/claude/bin/artifacts.sh +288 -0
  88. package/runtime/claude/bin/attendant.sh +707 -0
  89. package/runtime/claude/bin/autosave.sh +112 -0
  90. package/runtime/claude/bin/boundary.sh +253 -0
  91. package/runtime/claude/bin/build-sealed-dataroom.mjs +722 -0
  92. package/runtime/claude/bin/capture-reconcile.sh +69 -0
  93. package/runtime/claude/bin/capture-run.sh +357 -0
  94. package/runtime/claude/bin/codex-install-skills.sh +78 -0
  95. package/runtime/claude/bin/codex-render-spec.mjs +462 -0
  96. package/runtime/claude/bin/codex-session-start.sh +275 -0
  97. package/runtime/claude/bin/codex-skill-render.mjs +349 -0
  98. package/runtime/claude/bin/codex-sync-skills.sh +237 -0
  99. package/runtime/claude/bin/connect-refresh.sh +33 -0
  100. package/runtime/claude/bin/contribute-guard.sh +79 -0
  101. package/runtime/claude/bin/corpus_map.py +806 -0
  102. package/runtime/claude/bin/corpus_survey.py +304 -0
  103. package/runtime/claude/bin/dashboard-data.sh +18 -0
  104. package/runtime/claude/bin/github-auth.sh +121 -0
  105. package/runtime/claude/bin/graph-batch.sh +86 -0
  106. package/runtime/claude/bin/graph-op.sh +1106 -0
  107. package/runtime/claude/bin/graph-projection.sh +54 -0
  108. package/runtime/claude/bin/graph-wal.sh +242 -0
  109. package/runtime/claude/bin/graph.sh +267 -0
  110. package/runtime/claude/bin/handoff-lifecycle-job.sh +146 -0
  111. package/runtime/claude/bin/handoff-lifecycle.sh +280 -0
  112. package/runtime/claude/bin/handoff-pr-backfill.sh +86 -0
  113. package/runtime/claude/bin/handoff-preview.sh +169 -0
  114. package/runtime/claude/bin/handoff-run.sh +692 -0
  115. package/runtime/claude/bin/handoff-save-egregore.sh +224 -0
  116. package/runtime/claude/bin/index-handoff.sh +322 -0
  117. package/runtime/claude/bin/ingest-graph.sh +86 -0
  118. package/runtime/claude/bin/ingest-item.sh +10 -0
  119. package/runtime/claude/bin/ingest-surface.html +495 -0
  120. package/runtime/claude/bin/ingest.py +1011 -0
  121. package/runtime/claude/bin/ingest.sh +308 -0
  122. package/runtime/claude/bin/ingest_graph.py +856 -0
  123. package/runtime/claude/bin/ingest_surface.py +544 -0
  124. package/runtime/claude/bin/invite.sh +6 -0
  125. package/runtime/claude/bin/issue.sh +10 -0
  126. package/runtime/claude/bin/knowledge.sh +10 -0
  127. package/runtime/claude/bin/lib/artifact-id.sh +46 -0
  128. package/runtime/claude/bin/lib/config.sh +136 -0
  129. package/runtime/claude/bin/lib/context.sh +642 -0
  130. package/runtime/claude/bin/lib/dashboard-artifact.sh +242 -0
  131. package/runtime/claude/bin/lib/ensure-develop.sh +183 -0
  132. package/runtime/claude/bin/lib/git-message.sh +37 -0
  133. package/runtime/claude/bin/lib/git-sync.sh +494 -0
  134. package/runtime/claude/bin/lib/greeting.sh +548 -0
  135. package/runtime/claude/bin/lib/handoff-meta.sh +97 -0
  136. package/runtime/claude/bin/lib/hash.sh +13 -0
  137. package/runtime/claude/bin/lib/identity.sh +213 -0
  138. package/runtime/claude/bin/lib/metrics.sh +374 -0
  139. package/runtime/claude/bin/lib/noncode.sh +31 -0
  140. package/runtime/claude/bin/lib/permissions.sh +106 -0
  141. package/runtime/claude/bin/lib/time.sh +56 -0
  142. package/runtime/claude/bin/lib/worktree-links.sh +85 -0
  143. package/runtime/claude/bin/node-run.sh +42 -0
  144. package/runtime/claude/bin/notification.sh +6 -0
  145. package/runtime/claude/bin/notify.sh +636 -0
  146. package/runtime/claude/bin/observe-context.sh +14 -0
  147. package/runtime/claude/bin/onboarding.sh +6 -0
  148. package/runtime/claude/bin/person.py +634 -0
  149. package/runtime/claude/bin/person.sh +481 -0
  150. package/runtime/claude/bin/pi-render-spec.mjs +140 -0
  151. package/runtime/claude/bin/post-update.sh +37 -0
  152. package/runtime/claude/bin/prime-render-spec.mjs +147 -0
  153. package/runtime/claude/bin/publish-artifact.sh +324 -0
  154. package/runtime/claude/bin/publish-references.sh +144 -0
  155. package/runtime/claude/bin/quest.sh +9 -0
  156. package/runtime/claude/bin/question.sh +8 -0
  157. package/runtime/claude/bin/repo-state.sh +96 -0
  158. package/runtime/claude/bin/research-ingest.sh +7 -0
  159. package/runtime/claude/bin/restore-owned-skills.sh +67 -0
  160. package/runtime/claude/bin/retrieval_eval.py +385 -0
  161. package/runtime/claude/bin/runtime-identity.sh +70 -0
  162. package/runtime/claude/bin/runtime-upgrade.sh +43 -0
  163. package/runtime/claude/bin/scroll.sh +9 -0
  164. package/runtime/claude/bin/search.sh +318 -0
  165. package/runtime/claude/bin/session-autosave.sh +220 -0
  166. package/runtime/claude/bin/session-log.sh +199 -0
  167. package/runtime/claude/bin/session-start.sh +696 -0
  168. package/runtime/claude/bin/settings.sh +532 -0
  169. package/runtime/claude/bin/startup-check.sh +136 -0
  170. package/runtime/claude/bin/statusline.sh +41 -0
  171. package/runtime/claude/bin/telemetry.sh +666 -0
  172. package/runtime/claude/bin/test-changes.sh +344 -0
  173. package/runtime/claude/bin/thread.sh +9 -0
  174. package/runtime/claude/bin/todo.sh +9 -0
  175. package/runtime/claude/bin/view-render.sh +126 -0
  176. package/runtime/claude/bin/worktree-create.sh +145 -0
  177. package/runtime/claude/bin/worktree-remove.sh +50 -0
  178. package/runtime/claude/bin/worktree.sh +198 -0
  179. package/runtime/claude/egregore_runtime/__init__.py +228 -0
  180. package/runtime/claude/egregore_runtime/adapters/__init__.py +5 -0
  181. package/runtime/claude/egregore_runtime/adapters/invitation.py +237 -0
  182. package/runtime/claude/egregore_runtime/adapters/notification.py +59 -0
  183. package/runtime/claude/egregore_runtime/adapters/qmd.py +1701 -0
  184. package/runtime/claude/egregore_runtime/adapters/qmd_cli.py +210 -0
  185. package/runtime/claude/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  186. package/runtime/claude/egregore_runtime/admin_gate.py +102 -0
  187. package/runtime/claude/egregore_runtime/artifacts.py +523 -0
  188. package/runtime/claude/egregore_runtime/contracts.py +499 -0
  189. package/runtime/claude/egregore_runtime/entitlements.py +85 -0
  190. package/runtime/claude/egregore_runtime/errors.py +10 -0
  191. package/runtime/claude/egregore_runtime/graph.py +356 -0
  192. package/runtime/claude/egregore_runtime/handoff_lookup.py +196 -0
  193. package/runtime/claude/egregore_runtime/harness_cli.py +1221 -0
  194. package/runtime/claude/egregore_runtime/identity.py +734 -0
  195. package/runtime/claude/egregore_runtime/identity_cli.py +91 -0
  196. package/runtime/claude/egregore_runtime/ingest.py +575 -0
  197. package/runtime/claude/egregore_runtime/ingest_cli.py +254 -0
  198. package/runtime/claude/egregore_runtime/ingest_index_cli.py +147 -0
  199. package/runtime/claude/egregore_runtime/invitation_cli.py +51 -0
  200. package/runtime/claude/egregore_runtime/invitations.py +116 -0
  201. package/runtime/claude/egregore_runtime/issue_cli.py +305 -0
  202. package/runtime/claude/egregore_runtime/issues.py +359 -0
  203. package/runtime/claude/egregore_runtime/knowledge.py +376 -0
  204. package/runtime/claude/egregore_runtime/knowledge_cli.py +173 -0
  205. package/runtime/claude/egregore_runtime/lifecycle.py +888 -0
  206. package/runtime/claude/egregore_runtime/lifecycle_cli.py +269 -0
  207. package/runtime/claude/egregore_runtime/notification_cli.py +125 -0
  208. package/runtime/claude/egregore_runtime/notifications.py +230 -0
  209. package/runtime/claude/egregore_runtime/observe.py +342 -0
  210. package/runtime/claude/egregore_runtime/onboarding.py +290 -0
  211. package/runtime/claude/egregore_runtime/onboarding_cli.py +110 -0
  212. package/runtime/claude/egregore_runtime/policy.py +144 -0
  213. package/runtime/claude/egregore_runtime/profile.py +193 -0
  214. package/runtime/claude/egregore_runtime/quest_cli.py +216 -0
  215. package/runtime/claude/egregore_runtime/question_cli.py +180 -0
  216. package/runtime/claude/egregore_runtime/questions.py +304 -0
  217. package/runtime/claude/egregore_runtime/quests.py +419 -0
  218. package/runtime/claude/egregore_runtime/readiness.py +379 -0
  219. package/runtime/claude/egregore_runtime/research_ingest.py +256 -0
  220. package/runtime/claude/egregore_runtime/research_ingest_cli.py +44 -0
  221. package/runtime/claude/egregore_runtime/runtime.py +464 -0
  222. package/runtime/claude/egregore_runtime/scroll_cli.py +185 -0
  223. package/runtime/claude/egregore_runtime/scrolls.py +726 -0
  224. package/runtime/claude/egregore_runtime/status.py +412 -0
  225. package/runtime/claude/egregore_runtime/status_cli.py +174 -0
  226. package/runtime/claude/egregore_runtime/sync.py +218 -0
  227. package/runtime/claude/egregore_runtime/teamsync.py +139 -0
  228. package/runtime/claude/egregore_runtime/telemetry.py +640 -0
  229. package/runtime/claude/egregore_runtime/thread_cli.py +173 -0
  230. package/runtime/claude/egregore_runtime/threads.py +517 -0
  231. package/runtime/claude/egregore_runtime/todo_cli.py +142 -0
  232. package/runtime/claude/egregore_runtime/todos.py +244 -0
  233. package/runtime/claude/egregore_runtime/upgrade.py +770 -0
  234. package/runtime/claude/egregore_runtime/upgrade_worker.py +53 -0
  235. package/runtime/claude/egregore_runtime/writeback.py +391 -0
  236. package/runtime/claude/egregore_runtime/writeback_cli.py +114 -0
  237. package/runtime/claude/manifest.json +284 -0
  238. package/runtime/codex/.codex/hooks/search-hint.js +21 -52
  239. package/runtime/codex/.codex/hooks.json +3 -3
  240. package/runtime/codex/.codex/skills/activity/SKILL.md +23 -66
  241. package/runtime/codex/.codex/skills/announce/SKILL.md +27 -50
  242. package/runtime/codex/.codex/skills/archive/SKILL.md +21 -36
  243. package/runtime/codex/.codex/skills/checkup/SKILL.md +77 -36
  244. package/runtime/codex/.codex/skills/dark-mode/SKILL.md +1 -1
  245. package/runtime/codex/.codex/skills/dashboard/SKILL.md +17 -47
  246. package/runtime/codex/.codex/skills/handoff/SKILL.md +84 -133
  247. package/runtime/codex/.codex/skills/harvest/SKILL.md +32 -117
  248. package/runtime/codex/.codex/skills/ingest/SKILL.md +47 -25
  249. package/runtime/codex/.codex/skills/ingest-user-interview/SKILL.md +18 -36
  250. package/runtime/codex/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
  251. package/runtime/codex/.codex/skills/invite/SKILL.md +21 -35
  252. package/runtime/codex/.codex/skills/issue/SKILL.md +60 -41
  253. package/runtime/codex/.codex/skills/me/SKILL.md +1 -1
  254. package/runtime/codex/.codex/skills/meeting/SKILL.md +16 -36
  255. package/runtime/codex/.codex/skills/meeting/references/analysis-contract.md +48 -0
  256. package/runtime/codex/.codex/skills/note/SKILL.md +30 -25
  257. package/runtime/codex/.codex/skills/onboarding/SKILL.md +36 -41
  258. package/runtime/codex/.codex/skills/pull/SKILL.md +1 -1
  259. package/runtime/codex/.codex/skills/quest/SKILL.md +27 -66
  260. package/runtime/codex/.codex/skills/reflect/SKILL.md +22 -36
  261. package/runtime/codex/.codex/skills/save/SKILL.md +2 -2
  262. package/runtime/codex/.codex/skills/telemetry/SKILL.md +1 -1
  263. package/runtime/codex/.codex/skills/test/SKILL.md +1 -1
  264. package/runtime/codex/.codex/skills/tutorial/SKILL.md +40 -41
  265. package/runtime/codex/.codex/skills/view/SKILL.md +115 -111
  266. package/runtime/codex/.codex/skills/wrap/SKILL.md +45 -41
  267. package/runtime/codex/.codex/spec-manifest.json +9 -9
  268. package/runtime/codex/AGENTS.md +62 -58
  269. package/runtime/codex/bin/activity-action.sh +92 -0
  270. package/runtime/codex/bin/activity-data.sh +12 -233
  271. package/runtime/codex/bin/agent.sh +84 -100
  272. package/runtime/codex/bin/artifact-register.sh +164 -0
  273. package/runtime/codex/bin/artifact-writeback.sh +53 -0
  274. package/runtime/codex/bin/artifacts.sh +288 -0
  275. package/runtime/codex/bin/build-sealed-dataroom.mjs +722 -0
  276. package/runtime/codex/bin/capture-run.sh +18 -2
  277. package/runtime/codex/bin/codex-render-spec.mjs +41 -16
  278. package/runtime/codex/bin/codex-session-start.sh +14 -4
  279. package/runtime/codex/bin/codex-skill-render.mjs +9 -7
  280. package/runtime/codex/bin/corpus_map.py +806 -0
  281. package/runtime/codex/bin/corpus_survey.py +304 -0
  282. package/runtime/codex/bin/dashboard-data.sh +11 -171
  283. package/runtime/codex/bin/github-auth.sh +121 -0
  284. package/runtime/codex/bin/graph-batch.sh +7 -0
  285. package/runtime/codex/bin/graph-op.sh +4 -0
  286. package/runtime/codex/bin/graph-projection.sh +54 -0
  287. package/runtime/codex/bin/graph-wal.sh +13 -0
  288. package/runtime/codex/bin/graph.sh +44 -0
  289. package/runtime/codex/bin/handoff-lifecycle-job.sh +146 -0
  290. package/runtime/codex/bin/handoff-lifecycle.sh +280 -0
  291. package/runtime/codex/bin/handoff-preview.sh +169 -0
  292. package/runtime/codex/bin/handoff-run.sh +42 -26
  293. package/runtime/codex/bin/ingest-graph.sh +6 -0
  294. package/runtime/codex/bin/ingest-item.sh +10 -0
  295. package/runtime/codex/bin/ingest.sh +59 -30
  296. package/runtime/codex/bin/invite.sh +6 -0
  297. package/runtime/codex/bin/issue.sh +10 -0
  298. package/runtime/codex/bin/knowledge.sh +10 -0
  299. package/runtime/codex/bin/lib/config.sh +20 -0
  300. package/runtime/codex/bin/lib/context.sh +46 -25
  301. package/runtime/codex/bin/lib/git-sync.sh +70 -6
  302. package/runtime/codex/bin/lib/greeting.sh +34 -5
  303. package/runtime/codex/bin/lib/handoff-meta.sh +97 -0
  304. package/runtime/codex/bin/lib/worktree-links.sh +6 -0
  305. package/runtime/codex/bin/node-run.sh +42 -0
  306. package/runtime/codex/bin/notification.sh +6 -0
  307. package/runtime/codex/bin/observe-context.sh +14 -0
  308. package/runtime/codex/bin/onboarding.sh +6 -0
  309. package/runtime/codex/bin/person.py +4 -0
  310. package/runtime/codex/bin/person.sh +43 -10
  311. package/runtime/codex/bin/pi-render-spec.mjs +140 -0
  312. package/runtime/codex/bin/post-update.sh +37 -0
  313. package/runtime/codex/bin/prime-render-spec.mjs +147 -0
  314. package/runtime/codex/bin/publish-artifact.sh +55 -2
  315. package/runtime/codex/bin/quest.sh +9 -0
  316. package/runtime/codex/bin/question.sh +8 -0
  317. package/runtime/codex/bin/research-ingest.sh +7 -0
  318. package/runtime/codex/bin/restore-owned-skills.sh +67 -0
  319. package/runtime/codex/bin/retrieval_eval.py +385 -0
  320. package/runtime/codex/bin/runtime-identity.sh +70 -0
  321. package/runtime/codex/bin/runtime-upgrade.sh +43 -0
  322. package/runtime/codex/bin/scroll.sh +9 -0
  323. package/runtime/codex/bin/search.sh +231 -195
  324. package/runtime/codex/bin/settings.sh +174 -5
  325. package/runtime/codex/bin/startup-check.sh +136 -0
  326. package/runtime/codex/bin/telemetry.sh +522 -247
  327. package/runtime/codex/bin/test-changes.sh +344 -0
  328. package/runtime/codex/bin/thread.sh +9 -0
  329. package/runtime/codex/bin/todo.sh +9 -0
  330. package/runtime/codex/bin/view-render.sh +126 -0
  331. package/runtime/codex/bin/worktree-create.sh +19 -5
  332. package/runtime/codex/egregore_runtime/__init__.py +228 -0
  333. package/runtime/codex/egregore_runtime/adapters/__init__.py +5 -0
  334. package/runtime/codex/egregore_runtime/adapters/invitation.py +237 -0
  335. package/runtime/codex/egregore_runtime/adapters/notification.py +59 -0
  336. package/runtime/codex/egregore_runtime/adapters/qmd.py +1701 -0
  337. package/runtime/codex/egregore_runtime/adapters/qmd_cli.py +210 -0
  338. package/runtime/codex/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  339. package/runtime/codex/egregore_runtime/admin_gate.py +102 -0
  340. package/runtime/codex/egregore_runtime/artifacts.py +523 -0
  341. package/runtime/codex/egregore_runtime/contracts.py +499 -0
  342. package/runtime/codex/egregore_runtime/entitlements.py +85 -0
  343. package/runtime/codex/egregore_runtime/errors.py +10 -0
  344. package/runtime/codex/egregore_runtime/graph.py +356 -0
  345. package/runtime/codex/egregore_runtime/handoff_lookup.py +196 -0
  346. package/runtime/codex/egregore_runtime/harness_cli.py +1221 -0
  347. package/runtime/codex/egregore_runtime/identity.py +734 -0
  348. package/runtime/codex/egregore_runtime/identity_cli.py +91 -0
  349. package/runtime/codex/egregore_runtime/ingest.py +575 -0
  350. package/runtime/codex/egregore_runtime/ingest_cli.py +254 -0
  351. package/runtime/codex/egregore_runtime/ingest_index_cli.py +147 -0
  352. package/runtime/codex/egregore_runtime/invitation_cli.py +51 -0
  353. package/runtime/codex/egregore_runtime/invitations.py +116 -0
  354. package/runtime/codex/egregore_runtime/issue_cli.py +305 -0
  355. package/runtime/codex/egregore_runtime/issues.py +359 -0
  356. package/runtime/codex/egregore_runtime/knowledge.py +376 -0
  357. package/runtime/codex/egregore_runtime/knowledge_cli.py +173 -0
  358. package/runtime/codex/egregore_runtime/lifecycle.py +888 -0
  359. package/runtime/codex/egregore_runtime/lifecycle_cli.py +269 -0
  360. package/runtime/codex/egregore_runtime/notification_cli.py +125 -0
  361. package/runtime/codex/egregore_runtime/notifications.py +230 -0
  362. package/runtime/codex/egregore_runtime/observe.py +342 -0
  363. package/runtime/codex/egregore_runtime/onboarding.py +290 -0
  364. package/runtime/codex/egregore_runtime/onboarding_cli.py +110 -0
  365. package/runtime/codex/egregore_runtime/policy.py +144 -0
  366. package/runtime/codex/egregore_runtime/profile.py +193 -0
  367. package/runtime/codex/egregore_runtime/quest_cli.py +216 -0
  368. package/runtime/codex/egregore_runtime/question_cli.py +180 -0
  369. package/runtime/codex/egregore_runtime/questions.py +304 -0
  370. package/runtime/codex/egregore_runtime/quests.py +419 -0
  371. package/runtime/codex/egregore_runtime/readiness.py +379 -0
  372. package/runtime/codex/egregore_runtime/research_ingest.py +256 -0
  373. package/runtime/codex/egregore_runtime/research_ingest_cli.py +44 -0
  374. package/runtime/codex/egregore_runtime/runtime.py +464 -0
  375. package/runtime/codex/egregore_runtime/scroll_cli.py +185 -0
  376. package/runtime/codex/egregore_runtime/scrolls.py +726 -0
  377. package/runtime/codex/egregore_runtime/status.py +412 -0
  378. package/runtime/codex/egregore_runtime/status_cli.py +174 -0
  379. package/runtime/codex/egregore_runtime/sync.py +218 -0
  380. package/runtime/codex/egregore_runtime/teamsync.py +139 -0
  381. package/runtime/codex/egregore_runtime/telemetry.py +640 -0
  382. package/runtime/codex/egregore_runtime/thread_cli.py +173 -0
  383. package/runtime/codex/egregore_runtime/threads.py +517 -0
  384. package/runtime/codex/egregore_runtime/todo_cli.py +142 -0
  385. package/runtime/codex/egregore_runtime/todos.py +244 -0
  386. package/runtime/codex/egregore_runtime/upgrade.py +770 -0
  387. package/runtime/codex/egregore_runtime/upgrade_worker.py +53 -0
  388. package/runtime/codex/egregore_runtime/writeback.py +391 -0
  389. package/runtime/codex/egregore_runtime/writeback_cli.py +114 -0
  390. package/runtime/codex/manifest.json +98 -1
  391. package/runtime/pi/.codex/hooks/search-hint.js +21 -52
  392. package/runtime/pi/.codex/hooks.json +3 -3
  393. package/runtime/pi/.codex/skills/activity/SKILL.md +23 -66
  394. package/runtime/pi/.codex/skills/announce/SKILL.md +27 -50
  395. package/runtime/pi/.codex/skills/archive/SKILL.md +21 -36
  396. package/runtime/pi/.codex/skills/checkup/SKILL.md +77 -36
  397. package/runtime/pi/.codex/skills/dark-mode/SKILL.md +1 -1
  398. package/runtime/pi/.codex/skills/dashboard/SKILL.md +17 -47
  399. package/runtime/pi/.codex/skills/handoff/SKILL.md +84 -133
  400. package/runtime/pi/.codex/skills/harvest/SKILL.md +32 -117
  401. package/runtime/pi/.codex/skills/ingest/SKILL.md +47 -25
  402. package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +18 -36
  403. package/runtime/pi/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
  404. package/runtime/pi/.codex/skills/invite/SKILL.md +21 -35
  405. package/runtime/pi/.codex/skills/issue/SKILL.md +60 -41
  406. package/runtime/pi/.codex/skills/me/SKILL.md +1 -1
  407. package/runtime/pi/.codex/skills/meeting/SKILL.md +16 -36
  408. package/runtime/pi/.codex/skills/meeting/references/analysis-contract.md +48 -0
  409. package/runtime/pi/.codex/skills/note/SKILL.md +30 -25
  410. package/runtime/pi/.codex/skills/onboarding/SKILL.md +36 -41
  411. package/runtime/pi/.codex/skills/pull/SKILL.md +1 -1
  412. package/runtime/pi/.codex/skills/quest/SKILL.md +27 -66
  413. package/runtime/pi/.codex/skills/reflect/SKILL.md +22 -36
  414. package/runtime/pi/.codex/skills/save/SKILL.md +2 -2
  415. package/runtime/pi/.codex/skills/telemetry/SKILL.md +1 -1
  416. package/runtime/pi/.codex/skills/test/SKILL.md +1 -1
  417. package/runtime/pi/.codex/skills/tutorial/SKILL.md +40 -41
  418. package/runtime/pi/.codex/skills/view/SKILL.md +115 -111
  419. package/runtime/pi/.codex/skills/wrap/SKILL.md +45 -41
  420. package/runtime/pi/.codex/spec-manifest.json +9 -9
  421. package/runtime/pi/.pi/APPEND_SYSTEM.md +57 -48
  422. package/runtime/pi/.pi/extensions/egregore.ts +7 -0
  423. package/runtime/pi/.pi/spec-manifest.json +2 -2
  424. package/runtime/pi/AGENTS.md +62 -58
  425. package/runtime/pi/bin/activity-action.sh +92 -0
  426. package/runtime/pi/bin/activity-data.sh +12 -233
  427. package/runtime/pi/bin/agent.sh +84 -100
  428. package/runtime/pi/bin/artifact-register.sh +164 -0
  429. package/runtime/pi/bin/artifact-writeback.sh +53 -0
  430. package/runtime/pi/bin/artifacts.sh +288 -0
  431. package/runtime/pi/bin/build-sealed-dataroom.mjs +722 -0
  432. package/runtime/pi/bin/capture-run.sh +18 -2
  433. package/runtime/pi/bin/codex-render-spec.mjs +41 -16
  434. package/runtime/pi/bin/codex-session-start.sh +14 -4
  435. package/runtime/pi/bin/codex-skill-render.mjs +9 -7
  436. package/runtime/pi/bin/corpus_map.py +806 -0
  437. package/runtime/pi/bin/corpus_survey.py +304 -0
  438. package/runtime/pi/bin/dashboard-data.sh +11 -171
  439. package/runtime/pi/bin/github-auth.sh +121 -0
  440. package/runtime/pi/bin/graph-batch.sh +7 -0
  441. package/runtime/pi/bin/graph-op.sh +4 -0
  442. package/runtime/pi/bin/graph-projection.sh +54 -0
  443. package/runtime/pi/bin/graph-wal.sh +13 -0
  444. package/runtime/pi/bin/graph.sh +44 -0
  445. package/runtime/pi/bin/handoff-lifecycle-job.sh +146 -0
  446. package/runtime/pi/bin/handoff-lifecycle.sh +280 -0
  447. package/runtime/pi/bin/handoff-preview.sh +169 -0
  448. package/runtime/pi/bin/handoff-run.sh +42 -26
  449. package/runtime/pi/bin/ingest-graph.sh +6 -0
  450. package/runtime/pi/bin/ingest-item.sh +10 -0
  451. package/runtime/pi/bin/ingest.sh +59 -30
  452. package/runtime/pi/bin/invite.sh +6 -0
  453. package/runtime/pi/bin/issue.sh +10 -0
  454. package/runtime/pi/bin/knowledge.sh +10 -0
  455. package/runtime/pi/bin/lib/config.sh +20 -0
  456. package/runtime/pi/bin/lib/context.sh +46 -25
  457. package/runtime/pi/bin/lib/git-sync.sh +70 -6
  458. package/runtime/pi/bin/lib/greeting.sh +34 -5
  459. package/runtime/pi/bin/lib/handoff-meta.sh +97 -0
  460. package/runtime/pi/bin/lib/worktree-links.sh +6 -0
  461. package/runtime/pi/bin/node-run.sh +42 -0
  462. package/runtime/pi/bin/notification.sh +6 -0
  463. package/runtime/pi/bin/observe-context.sh +14 -0
  464. package/runtime/pi/bin/onboarding.sh +6 -0
  465. package/runtime/pi/bin/person.py +4 -0
  466. package/runtime/pi/bin/person.sh +43 -10
  467. package/runtime/pi/bin/pi-observe-context.mjs +93 -0
  468. package/runtime/pi/bin/pi-product-workflows.mjs +1 -1
  469. package/runtime/pi/bin/pi-render-spec.mjs +1 -1
  470. package/runtime/pi/bin/post-update.sh +37 -0
  471. package/runtime/pi/bin/prime-render-spec.mjs +147 -0
  472. package/runtime/pi/bin/publish-artifact.sh +55 -2
  473. package/runtime/pi/bin/quest.sh +9 -0
  474. package/runtime/pi/bin/question.sh +8 -0
  475. package/runtime/pi/bin/research-ingest.sh +7 -0
  476. package/runtime/pi/bin/restore-owned-skills.sh +67 -0
  477. package/runtime/pi/bin/retrieval_eval.py +385 -0
  478. package/runtime/pi/bin/runtime-identity.sh +70 -0
  479. package/runtime/pi/bin/runtime-upgrade.sh +43 -0
  480. package/runtime/pi/bin/scroll.sh +9 -0
  481. package/runtime/pi/bin/search.sh +231 -195
  482. package/runtime/pi/bin/settings.sh +174 -5
  483. package/runtime/pi/bin/startup-check.sh +136 -0
  484. package/runtime/pi/bin/telemetry.sh +522 -247
  485. package/runtime/pi/bin/test-changes.sh +344 -0
  486. package/runtime/pi/bin/thread.sh +9 -0
  487. package/runtime/pi/bin/todo.sh +9 -0
  488. package/runtime/pi/bin/view-render.sh +126 -0
  489. package/runtime/pi/bin/worktree-create.sh +19 -5
  490. package/runtime/pi/egregore_runtime/__init__.py +228 -0
  491. package/runtime/pi/egregore_runtime/adapters/__init__.py +5 -0
  492. package/runtime/pi/egregore_runtime/adapters/invitation.py +237 -0
  493. package/runtime/pi/egregore_runtime/adapters/notification.py +59 -0
  494. package/runtime/pi/egregore_runtime/adapters/qmd.py +1701 -0
  495. package/runtime/pi/egregore_runtime/adapters/qmd_cli.py +210 -0
  496. package/runtime/pi/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  497. package/runtime/pi/egregore_runtime/admin_gate.py +102 -0
  498. package/runtime/pi/egregore_runtime/artifacts.py +523 -0
  499. package/runtime/pi/egregore_runtime/contracts.py +499 -0
  500. package/runtime/pi/egregore_runtime/entitlements.py +85 -0
  501. package/runtime/pi/egregore_runtime/errors.py +10 -0
  502. package/runtime/pi/egregore_runtime/graph.py +356 -0
  503. package/runtime/pi/egregore_runtime/handoff_lookup.py +196 -0
  504. package/runtime/pi/egregore_runtime/harness_cli.py +1221 -0
  505. package/runtime/pi/egregore_runtime/identity.py +734 -0
  506. package/runtime/pi/egregore_runtime/identity_cli.py +91 -0
  507. package/runtime/pi/egregore_runtime/ingest.py +575 -0
  508. package/runtime/pi/egregore_runtime/ingest_cli.py +254 -0
  509. package/runtime/pi/egregore_runtime/ingest_index_cli.py +147 -0
  510. package/runtime/pi/egregore_runtime/invitation_cli.py +51 -0
  511. package/runtime/pi/egregore_runtime/invitations.py +116 -0
  512. package/runtime/pi/egregore_runtime/issue_cli.py +305 -0
  513. package/runtime/pi/egregore_runtime/issues.py +359 -0
  514. package/runtime/pi/egregore_runtime/knowledge.py +376 -0
  515. package/runtime/pi/egregore_runtime/knowledge_cli.py +173 -0
  516. package/runtime/pi/egregore_runtime/lifecycle.py +888 -0
  517. package/runtime/pi/egregore_runtime/lifecycle_cli.py +269 -0
  518. package/runtime/pi/egregore_runtime/notification_cli.py +125 -0
  519. package/runtime/pi/egregore_runtime/notifications.py +230 -0
  520. package/runtime/pi/egregore_runtime/observe.py +342 -0
  521. package/runtime/pi/egregore_runtime/onboarding.py +290 -0
  522. package/runtime/pi/egregore_runtime/onboarding_cli.py +110 -0
  523. package/runtime/pi/egregore_runtime/policy.py +144 -0
  524. package/runtime/pi/egregore_runtime/profile.py +193 -0
  525. package/runtime/pi/egregore_runtime/quest_cli.py +216 -0
  526. package/runtime/pi/egregore_runtime/question_cli.py +180 -0
  527. package/runtime/pi/egregore_runtime/questions.py +304 -0
  528. package/runtime/pi/egregore_runtime/quests.py +419 -0
  529. package/runtime/pi/egregore_runtime/readiness.py +379 -0
  530. package/runtime/pi/egregore_runtime/research_ingest.py +256 -0
  531. package/runtime/pi/egregore_runtime/research_ingest_cli.py +44 -0
  532. package/runtime/pi/egregore_runtime/runtime.py +464 -0
  533. package/runtime/pi/egregore_runtime/scroll_cli.py +185 -0
  534. package/runtime/pi/egregore_runtime/scrolls.py +726 -0
  535. package/runtime/pi/egregore_runtime/status.py +412 -0
  536. package/runtime/pi/egregore_runtime/status_cli.py +174 -0
  537. package/runtime/pi/egregore_runtime/sync.py +218 -0
  538. package/runtime/pi/egregore_runtime/teamsync.py +139 -0
  539. package/runtime/pi/egregore_runtime/telemetry.py +640 -0
  540. package/runtime/pi/egregore_runtime/thread_cli.py +173 -0
  541. package/runtime/pi/egregore_runtime/threads.py +517 -0
  542. package/runtime/pi/egregore_runtime/todo_cli.py +142 -0
  543. package/runtime/pi/egregore_runtime/todos.py +244 -0
  544. package/runtime/pi/egregore_runtime/upgrade.py +770 -0
  545. package/runtime/pi/egregore_runtime/upgrade_worker.py +53 -0
  546. package/runtime/pi/egregore_runtime/writeback.py +391 -0
  547. package/runtime/pi/egregore_runtime/writeback_cli.py +114 -0
  548. package/runtime/pi/manifest.json +98 -1
  549. package/runtime/prime/.codex/hooks/search-hint.js +21 -52
  550. package/runtime/prime/.codex/hooks.json +3 -3
  551. package/runtime/prime/.codex/skills/activity/SKILL.md +23 -66
  552. package/runtime/prime/.codex/skills/announce/SKILL.md +27 -50
  553. package/runtime/prime/.codex/skills/archive/SKILL.md +21 -36
  554. package/runtime/prime/.codex/skills/checkup/SKILL.md +77 -36
  555. package/runtime/prime/.codex/skills/dark-mode/SKILL.md +1 -1
  556. package/runtime/prime/.codex/skills/dashboard/SKILL.md +17 -47
  557. package/runtime/prime/.codex/skills/handoff/SKILL.md +84 -133
  558. package/runtime/prime/.codex/skills/harvest/SKILL.md +32 -117
  559. package/runtime/prime/.codex/skills/ingest/SKILL.md +47 -25
  560. package/runtime/prime/.codex/skills/ingest-user-interview/SKILL.md +18 -36
  561. package/runtime/prime/.codex/skills/ingest-user-interview/references/analysis-contract.md +42 -0
  562. package/runtime/prime/.codex/skills/invite/SKILL.md +21 -35
  563. package/runtime/prime/.codex/skills/issue/SKILL.md +60 -41
  564. package/runtime/prime/.codex/skills/me/SKILL.md +1 -1
  565. package/runtime/prime/.codex/skills/meeting/SKILL.md +16 -36
  566. package/runtime/prime/.codex/skills/meeting/references/analysis-contract.md +48 -0
  567. package/runtime/prime/.codex/skills/note/SKILL.md +30 -25
  568. package/runtime/prime/.codex/skills/onboarding/SKILL.md +36 -41
  569. package/runtime/prime/.codex/skills/pull/SKILL.md +1 -1
  570. package/runtime/prime/.codex/skills/quest/SKILL.md +27 -66
  571. package/runtime/prime/.codex/skills/reflect/SKILL.md +22 -36
  572. package/runtime/prime/.codex/skills/save/SKILL.md +2 -2
  573. package/runtime/prime/.codex/skills/telemetry/SKILL.md +1 -1
  574. package/runtime/prime/.codex/skills/test/SKILL.md +1 -1
  575. package/runtime/prime/.codex/skills/tutorial/SKILL.md +40 -41
  576. package/runtime/prime/.codex/skills/view/SKILL.md +115 -111
  577. package/runtime/prime/.codex/skills/wrap/SKILL.md +45 -41
  578. package/runtime/prime/.codex/spec-manifest.json +9 -9
  579. package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +57 -48
  580. package/runtime/prime/.prime/agent/extensions/egregore.ts +7 -0
  581. package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
  582. package/runtime/prime/AGENTS.md +62 -58
  583. package/runtime/prime/bin/activity-action.sh +92 -0
  584. package/runtime/prime/bin/activity-data.sh +12 -233
  585. package/runtime/prime/bin/agent.sh +84 -100
  586. package/runtime/prime/bin/artifact-register.sh +164 -0
  587. package/runtime/prime/bin/artifact-writeback.sh +53 -0
  588. package/runtime/prime/bin/artifacts.sh +288 -0
  589. package/runtime/prime/bin/build-sealed-dataroom.mjs +722 -0
  590. package/runtime/prime/bin/capture-run.sh +18 -2
  591. package/runtime/prime/bin/codex-render-spec.mjs +41 -16
  592. package/runtime/prime/bin/codex-session-start.sh +14 -4
  593. package/runtime/prime/bin/codex-skill-render.mjs +9 -7
  594. package/runtime/prime/bin/corpus_map.py +806 -0
  595. package/runtime/prime/bin/corpus_survey.py +304 -0
  596. package/runtime/prime/bin/dashboard-data.sh +11 -171
  597. package/runtime/prime/bin/github-auth.sh +121 -0
  598. package/runtime/prime/bin/graph-batch.sh +7 -0
  599. package/runtime/prime/bin/graph-op.sh +4 -0
  600. package/runtime/prime/bin/graph-projection.sh +54 -0
  601. package/runtime/prime/bin/graph-wal.sh +13 -0
  602. package/runtime/prime/bin/graph.sh +44 -0
  603. package/runtime/prime/bin/handoff-lifecycle-job.sh +146 -0
  604. package/runtime/prime/bin/handoff-lifecycle.sh +280 -0
  605. package/runtime/prime/bin/handoff-preview.sh +169 -0
  606. package/runtime/prime/bin/handoff-run.sh +42 -26
  607. package/runtime/prime/bin/ingest-graph.sh +6 -0
  608. package/runtime/prime/bin/ingest-item.sh +10 -0
  609. package/runtime/prime/bin/ingest.sh +59 -30
  610. package/runtime/prime/bin/invite.sh +6 -0
  611. package/runtime/prime/bin/issue.sh +10 -0
  612. package/runtime/prime/bin/knowledge.sh +10 -0
  613. package/runtime/prime/bin/lib/config.sh +20 -0
  614. package/runtime/prime/bin/lib/context.sh +46 -25
  615. package/runtime/prime/bin/lib/git-sync.sh +70 -6
  616. package/runtime/prime/bin/lib/greeting.sh +34 -5
  617. package/runtime/prime/bin/lib/handoff-meta.sh +97 -0
  618. package/runtime/prime/bin/lib/worktree-links.sh +6 -0
  619. package/runtime/prime/bin/node-run.sh +42 -0
  620. package/runtime/prime/bin/notification.sh +6 -0
  621. package/runtime/prime/bin/observe-context.sh +14 -0
  622. package/runtime/prime/bin/onboarding.sh +6 -0
  623. package/runtime/prime/bin/person.py +4 -0
  624. package/runtime/prime/bin/person.sh +43 -10
  625. package/runtime/prime/bin/pi-observe-context.mjs +93 -0
  626. package/runtime/prime/bin/pi-product-workflows.mjs +1 -1
  627. package/runtime/prime/bin/pi-render-spec.mjs +140 -0
  628. package/runtime/prime/bin/post-update.sh +37 -0
  629. package/runtime/prime/bin/prime-render-spec.mjs +1 -1
  630. package/runtime/prime/bin/publish-artifact.sh +55 -2
  631. package/runtime/prime/bin/quest.sh +9 -0
  632. package/runtime/prime/bin/question.sh +8 -0
  633. package/runtime/prime/bin/research-ingest.sh +7 -0
  634. package/runtime/prime/bin/restore-owned-skills.sh +67 -0
  635. package/runtime/prime/bin/retrieval_eval.py +385 -0
  636. package/runtime/prime/bin/runtime-identity.sh +70 -0
  637. package/runtime/prime/bin/runtime-upgrade.sh +43 -0
  638. package/runtime/prime/bin/scroll.sh +9 -0
  639. package/runtime/prime/bin/search.sh +231 -195
  640. package/runtime/prime/bin/settings.sh +174 -5
  641. package/runtime/prime/bin/startup-check.sh +136 -0
  642. package/runtime/prime/bin/telemetry.sh +522 -247
  643. package/runtime/prime/bin/test-changes.sh +344 -0
  644. package/runtime/prime/bin/thread.sh +9 -0
  645. package/runtime/prime/bin/todo.sh +9 -0
  646. package/runtime/prime/bin/view-render.sh +126 -0
  647. package/runtime/prime/bin/worktree-create.sh +19 -5
  648. package/runtime/prime/egregore_runtime/__init__.py +228 -0
  649. package/runtime/prime/egregore_runtime/adapters/__init__.py +5 -0
  650. package/runtime/prime/egregore_runtime/adapters/invitation.py +237 -0
  651. package/runtime/prime/egregore_runtime/adapters/notification.py +59 -0
  652. package/runtime/prime/egregore_runtime/adapters/qmd.py +1701 -0
  653. package/runtime/prime/egregore_runtime/adapters/qmd_cli.py +210 -0
  654. package/runtime/prime/egregore_runtime/adapters/qmd_embed_worker.py +59 -0
  655. package/runtime/prime/egregore_runtime/admin_gate.py +102 -0
  656. package/runtime/prime/egregore_runtime/artifacts.py +523 -0
  657. package/runtime/prime/egregore_runtime/contracts.py +499 -0
  658. package/runtime/prime/egregore_runtime/entitlements.py +85 -0
  659. package/runtime/prime/egregore_runtime/errors.py +10 -0
  660. package/runtime/prime/egregore_runtime/graph.py +356 -0
  661. package/runtime/prime/egregore_runtime/handoff_lookup.py +196 -0
  662. package/runtime/prime/egregore_runtime/harness_cli.py +1221 -0
  663. package/runtime/prime/egregore_runtime/identity.py +734 -0
  664. package/runtime/prime/egregore_runtime/identity_cli.py +91 -0
  665. package/runtime/prime/egregore_runtime/ingest.py +575 -0
  666. package/runtime/prime/egregore_runtime/ingest_cli.py +254 -0
  667. package/runtime/prime/egregore_runtime/ingest_index_cli.py +147 -0
  668. package/runtime/prime/egregore_runtime/invitation_cli.py +51 -0
  669. package/runtime/prime/egregore_runtime/invitations.py +116 -0
  670. package/runtime/prime/egregore_runtime/issue_cli.py +305 -0
  671. package/runtime/prime/egregore_runtime/issues.py +359 -0
  672. package/runtime/prime/egregore_runtime/knowledge.py +376 -0
  673. package/runtime/prime/egregore_runtime/knowledge_cli.py +173 -0
  674. package/runtime/prime/egregore_runtime/lifecycle.py +888 -0
  675. package/runtime/prime/egregore_runtime/lifecycle_cli.py +269 -0
  676. package/runtime/prime/egregore_runtime/notification_cli.py +125 -0
  677. package/runtime/prime/egregore_runtime/notifications.py +230 -0
  678. package/runtime/prime/egregore_runtime/observe.py +342 -0
  679. package/runtime/prime/egregore_runtime/onboarding.py +290 -0
  680. package/runtime/prime/egregore_runtime/onboarding_cli.py +110 -0
  681. package/runtime/prime/egregore_runtime/policy.py +144 -0
  682. package/runtime/prime/egregore_runtime/profile.py +193 -0
  683. package/runtime/prime/egregore_runtime/quest_cli.py +216 -0
  684. package/runtime/prime/egregore_runtime/question_cli.py +180 -0
  685. package/runtime/prime/egregore_runtime/questions.py +304 -0
  686. package/runtime/prime/egregore_runtime/quests.py +419 -0
  687. package/runtime/prime/egregore_runtime/readiness.py +379 -0
  688. package/runtime/prime/egregore_runtime/research_ingest.py +256 -0
  689. package/runtime/prime/egregore_runtime/research_ingest_cli.py +44 -0
  690. package/runtime/prime/egregore_runtime/runtime.py +464 -0
  691. package/runtime/prime/egregore_runtime/scroll_cli.py +185 -0
  692. package/runtime/prime/egregore_runtime/scrolls.py +726 -0
  693. package/runtime/prime/egregore_runtime/status.py +412 -0
  694. package/runtime/prime/egregore_runtime/status_cli.py +174 -0
  695. package/runtime/prime/egregore_runtime/sync.py +218 -0
  696. package/runtime/prime/egregore_runtime/teamsync.py +139 -0
  697. package/runtime/prime/egregore_runtime/telemetry.py +640 -0
  698. package/runtime/prime/egregore_runtime/thread_cli.py +173 -0
  699. package/runtime/prime/egregore_runtime/threads.py +517 -0
  700. package/runtime/prime/egregore_runtime/todo_cli.py +142 -0
  701. package/runtime/prime/egregore_runtime/todos.py +244 -0
  702. package/runtime/prime/egregore_runtime/upgrade.py +770 -0
  703. package/runtime/prime/egregore_runtime/upgrade_worker.py +53 -0
  704. package/runtime/prime/egregore_runtime/writeback.py +391 -0
  705. package/runtime/prime/egregore_runtime/writeback_cli.py +114 -0
  706. package/runtime/prime/manifest.json +98 -1
@@ -0,0 +1,344 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Static analysis for Egregore command and script files.
5
+ # Detects known antipatterns: unguarded Cypher date calls, macOS-incompatible bash,
6
+ # direct API curl calls, missing null guards.
7
+ #
8
+ # Usage:
9
+ # bash bin/test-changes.sh # scan changed files (git diff develop)
10
+ # bash bin/test-changes.sh --all # scan all command and script files
11
+ # bash bin/test-changes.sh file1 file2 # scan specific files
12
+ #
13
+ # Exit 0 = no FAILs, Exit 1 = any FAILs
14
+
15
+ SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
16
+
17
+ PASS=0
18
+ FAIL=0
19
+ WARN=0
20
+
21
+ # Colors
22
+ RED='\033[0;31m'
23
+ YELLOW='\033[0;33m'
24
+ GREEN='\033[0;32m'
25
+ DIM='\033[0;90m'
26
+ NC='\033[0m'
27
+
28
+ pass() {
29
+ PASS=$((PASS + 1))
30
+ echo -e " ${GREEN}✓${NC} $1"
31
+ }
32
+
33
+ fail() {
34
+ FAIL=$((FAIL + 1))
35
+ echo -e " ${RED}✗ FAIL${NC}: $1"
36
+ [ -n "${2:-}" ] && echo -e " ${DIM}$2${NC}"
37
+ }
38
+
39
+ warn() {
40
+ WARN=$((WARN + 1))
41
+ echo -e " ${YELLOW}⚠ WARN${NC}: $1"
42
+ [ -n "${2:-}" ] && echo -e " ${DIM}$2${NC}"
43
+ }
44
+
45
+ # --- Scope detection ---
46
+ FILES=()
47
+
48
+ if [ "${1:-}" = "--all" ]; then
49
+ # Scan all command and script files
50
+ while IFS= read -r f; do
51
+ [ -f "$f" ] && FILES+=("$f")
52
+ done < <(find "$SCRIPT_DIR/.claude/skills" "$SCRIPT_DIR/.codex/skills" \
53
+ "$SCRIPT_DIR/bin" -type f \( -name "*.md" -o -name "*.sh" \) 2>/dev/null)
54
+ elif [ $# -gt 0 ]; then
55
+ # Scan specific files
56
+ for f in "$@"; do
57
+ if [ -f "$f" ]; then
58
+ FILES+=("$f")
59
+ elif [ -f "$SCRIPT_DIR/$f" ]; then
60
+ FILES+=("$SCRIPT_DIR/$f")
61
+ fi
62
+ done
63
+ else
64
+ # Scan changed files vs develop
65
+ while IFS= read -r f; do
66
+ [ -f "$SCRIPT_DIR/$f" ] && FILES+=("$SCRIPT_DIR/$f")
67
+ done < <(git -C "$SCRIPT_DIR" diff origin/develop --name-only 2>/dev/null | grep -E '\.(md|sh)$' || true)
68
+ fi
69
+
70
+ if [ ${#FILES[@]} -eq 0 ]; then
71
+ echo "No testable files found."
72
+ echo '{"pass":0,"fail":0,"warn":0}'
73
+ exit 0
74
+ fi
75
+
76
+ echo "Scanning ${#FILES[@]} file(s)..."
77
+ echo ""
78
+
79
+ # Split files by type for targeted checks
80
+ MD_FILES=()
81
+ SH_FILES=()
82
+ MD_COUNT=0
83
+ SH_COUNT=0
84
+ for f in "${FILES[@]}"; do
85
+ case "$f" in
86
+ *.md) MD_FILES+=("$f"); MD_COUNT=$((MD_COUNT + 1)) ;;
87
+ *.sh) SH_FILES+=("$f"); SH_COUNT=$((SH_COUNT + 1)) ;;
88
+ esac
89
+ done
90
+
91
+ # ============================================================
92
+ # CHECK 1: date(x.field) without toString guard
93
+ # Severity: FAIL
94
+ # ============================================================
95
+ echo -e " ${DIM}[1/8] Unguarded date() calls...${NC}"
96
+ CHECK1_CLEAN=true
97
+ for f in ${MD_FILES[@]+"${MD_FILES[@]}"}; do
98
+ fname=$(basename "$f")
99
+ lineno=0
100
+ while IFS= read -r line; do
101
+ lineno=$((lineno + 1))
102
+ # Match date(x.field) where field is date/created/started/completed
103
+ # Exclude lines that have toString( before the date call
104
+ if echo "$line" | grep -qE 'date\([a-z]+\.(date|created|started|completed)\)'; then
105
+ if ! echo "$line" | grep -q 'toString('; then
106
+ fail "Unguarded date() call" "$fname:$lineno — use date(left(toString(x.field), 10))"
107
+ CHECK1_CLEAN=false
108
+ fi
109
+ fi
110
+ done < "$f"
111
+ done
112
+ $CHECK1_CLEAN && pass "No unguarded date() calls"
113
+
114
+ # ============================================================
115
+ # CHECK 2: .year/.month/.day on mixed-type date fields
116
+ # Severity: FAIL
117
+ # ============================================================
118
+ echo -e " ${DIM}[2/8] Mixed-type .year/.month/.day access...${NC}"
119
+ CHECK2_CLEAN=true
120
+ for f in ${MD_FILES[@]+"${MD_FILES[@]}"}; do
121
+ fname=$(basename "$f")
122
+ lineno=0
123
+ while IFS= read -r line; do
124
+ lineno=$((lineno + 1))
125
+ if echo "$line" | grep -qE '[a-z]+\.(date|created)\.(year|month|day)'; then
126
+ # Allow if preceded by a WITH that converts it, or if using a safe alias like sDate
127
+ if ! echo "$line" | grep -qE '(sDate|safeDate|dateVal)\.(year|month|day)'; then
128
+ fail ".year/.month/.day on mixed-type field" "$fname:$lineno — convert with date(left(toString(...), 10)) first"
129
+ CHECK2_CLEAN=false
130
+ fi
131
+ fi
132
+ done < "$f"
133
+ done
134
+ $CHECK2_CLEAN && pass "No .year/.month/.day on mixed-type fields"
135
+
136
+ # ============================================================
137
+ # CHECK 3: MATCH without LIMIT (stateful block parse)
138
+ # Severity: WARN
139
+ # ============================================================
140
+ echo -e " ${DIM}[3/8] MATCH without LIMIT...${NC}"
141
+ CHECK3_CLEAN=true
142
+ for f in ${MD_FILES[@]+"${MD_FILES[@]}"}; do
143
+ fname=$(basename "$f")
144
+ in_cypher=false
145
+ has_return=false
146
+ has_limit=false
147
+ has_aggregate=false
148
+ has_nolimit_comment=false
149
+ block_start=0
150
+ lineno=0
151
+ while IFS= read -r line; do
152
+ lineno=$((lineno + 1))
153
+ # Detect cypher block start
154
+ if echo "$line" | grep -qE '^\s*```cypher'; then
155
+ in_cypher=true
156
+ has_return=false
157
+ has_limit=false
158
+ has_aggregate=false
159
+ has_nolimit_comment=false
160
+ block_start=$lineno
161
+ continue
162
+ fi
163
+ # Detect block end
164
+ if $in_cypher && echo "$line" | grep -qE '^\s*```\s*$'; then
165
+ if $has_return && ! $has_limit && ! $has_aggregate && ! $has_nolimit_comment; then
166
+ warn "MATCH without LIMIT in Cypher block" "$fname:$block_start"
167
+ CHECK3_CLEAN=false
168
+ fi
169
+ in_cypher=false
170
+ continue
171
+ fi
172
+ if $in_cypher; then
173
+ echo "$line" | grep -qi 'RETURN' && has_return=true
174
+ echo "$line" | grep -qi 'LIMIT' && has_limit=true
175
+ # Aggregates like count(), sum(), avg() naturally limit results
176
+ echo "$line" | grep -qiE '(count|sum|avg|collect|min|max)\(' && has_aggregate=true
177
+ # Explicit opt-out comment
178
+ echo "$line" | grep -qi 'No LIMIT' && has_nolimit_comment=true
179
+ fi
180
+ done < "$f"
181
+ done
182
+ $CHECK3_CLEAN && pass "All MATCH blocks have LIMIT or aggregates"
183
+
184
+ # ============================================================
185
+ # CHECK 4: IN x.topics without coalesce null guard
186
+ # Severity: WARN
187
+ # ============================================================
188
+ echo -e " ${DIM}[4/8] Missing coalesce on collection access...${NC}"
189
+ CHECK4_CLEAN=true
190
+ for f in ${MD_FILES[@]+"${MD_FILES[@]}"}; do
191
+ fname=$(basename "$f")
192
+ lineno=0
193
+ while IFS= read -r line; do
194
+ lineno=$((lineno + 1))
195
+ if echo "$line" | grep -qE 'IN [a-z]+\.(topics|tags)'; then
196
+ if ! echo "$line" | grep -q 'coalesce'; then
197
+ warn "IN x.topics without coalesce guard" "$fname:$lineno — use coalesce(x.topics, [])"
198
+ CHECK4_CLEAN=false
199
+ fi
200
+ fi
201
+ done < "$f"
202
+ done
203
+ $CHECK4_CLEAN && pass "All collection access has coalesce guard"
204
+
205
+ # ============================================================
206
+ # CHECK 5: Hardcoded year-specific fallback dates
207
+ # Severity: WARN
208
+ # ============================================================
209
+ echo -e " ${DIM}[5/8] Hardcoded year-specific dates...${NC}"
210
+ CHECK5_CLEAN=true
211
+ for f in "${FILES[@]}"; do
212
+ fname=$(basename "$f")
213
+ lineno=0
214
+ in_frontmatter=false
215
+ while IFS= read -r line; do
216
+ lineno=$((lineno + 1))
217
+ # Skip YAML frontmatter
218
+ if [ $lineno -eq 1 ] && echo "$line" | grep -q '^---$'; then
219
+ in_frontmatter=true
220
+ continue
221
+ fi
222
+ if $in_frontmatter; then
223
+ echo "$line" | grep -q '^---$' && in_frontmatter=false
224
+ continue
225
+ fi
226
+ # Skip comments and example sections
227
+ if echo "$line" | grep -qE '^\s*(#|//|<!--)'; then
228
+ continue
229
+ fi
230
+ if echo "$line" | grep -qE '202[5-9]-[0-9]{2}-[0-9]{2}'; then
231
+ # Allow in code examples, markdown examples, and date format patterns
232
+ if ! echo "$line" | grep -qiE '(example|e\.g\.|YYYY-MM-DD|fallback|Joined:|Date.*:)'; then
233
+ warn "Hardcoded date literal" "$fname:$lineno"
234
+ CHECK5_CLEAN=false
235
+ fi
236
+ fi
237
+ done < "$f"
238
+ done
239
+ $CHECK5_CLEAN && pass "No hardcoded year-specific dates"
240
+
241
+ # ============================================================
242
+ # CHECK 6: macOS-incompatible bash
243
+ # Severity: FAIL
244
+ # ============================================================
245
+ echo -e " ${DIM}[6/8] macOS-compatible bash...${NC}"
246
+ CHECK6_CLEAN=true
247
+ for f in ${SH_FILES[@]+"${SH_FILES[@]}"}; do
248
+ fname=$(basename "$f")
249
+ [ "$fname" = "test-changes.sh" ] && continue
250
+ lineno=0
251
+ while IFS= read -r line; do
252
+ lineno=$((lineno + 1))
253
+ # date +%N (nanoseconds) — not available on macOS date
254
+ if echo "$line" | grep -qE 'date \+.*%[0-9]*N'; then
255
+ if ! echo "$line" | grep -q 'gdate'; then
256
+ fail "macOS-incompatible date +%N" "$fname:$lineno — use gdate or alternative"
257
+ CHECK6_CLEAN=false
258
+ fi
259
+ fi
260
+ # sed -i without '' (GNU vs BSD)
261
+ if echo "$line" | grep -qE "sed -i [^']"; then
262
+ fail "macOS-incompatible sed -i" "$fname:$lineno — use sed -i '' for BSD compatibility"
263
+ CHECK6_CLEAN=false
264
+ fi
265
+ done < "$f"
266
+ done
267
+ if [ "$SH_COUNT" -eq 0 ]; then
268
+ pass "macOS-compatible bash (no .sh files to check)"
269
+ else
270
+ $CHECK6_CLEAN && pass "macOS-compatible bash"
271
+ fi
272
+
273
+ # ============================================================
274
+ # CHECK 7: Direct curl to Neo4j/Telegram
275
+ # Severity: FAIL
276
+ # ============================================================
277
+ echo -e " ${DIM}[7/8] Direct API calls...${NC}"
278
+ CHECK7_CLEAN=true
279
+ for f in "${FILES[@]}"; do
280
+ fname=$(basename "$f")
281
+ # Skip the wrapper scripts themselves
282
+ case "$fname" in
283
+ graph.sh|notify.sh|test-changes.sh) continue ;;
284
+ esac
285
+ lineno=0
286
+ while IFS= read -r line; do
287
+ lineno=$((lineno + 1))
288
+ if echo "$line" | grep -qiE 'curl.*(neo4j|graph/query)'; then
289
+ if ! echo "$line" | grep -q 'bin/graph.sh'; then
290
+ fail "Direct curl to Neo4j" "$fname:$lineno — use bin/graph.sh"
291
+ CHECK7_CLEAN=false
292
+ fi
293
+ fi
294
+ if echo "$line" | grep -qiE 'curl.*(api\.telegram|sendMessage)'; then
295
+ if ! echo "$line" | grep -q 'bin/notify.sh'; then
296
+ fail "Direct curl to Telegram" "$fname:$lineno — use bin/notify.sh"
297
+ CHECK7_CLEAN=false
298
+ fi
299
+ fi
300
+ done < "$f"
301
+ done
302
+ $CHECK7_CLEAN && pass "No direct API calls (using bin/ wrappers)"
303
+
304
+ # ============================================================
305
+ # CHECK 8: source .env (should use grep|cut extraction instead)
306
+ # Severity: WARN
307
+ # ============================================================
308
+ echo -e " ${DIM}[8/8] Safe .env sourcing...${NC}"
309
+ CHECK8_CLEAN=true
310
+ for f in ${SH_FILES[@]+"${SH_FILES[@]}"}; do
311
+ fname=$(basename "$f")
312
+ [ "$fname" = "test-changes.sh" ] && continue
313
+ lineno=0
314
+ while IFS= read -r line; do
315
+ lineno=$((lineno + 1))
316
+ if echo "$line" | grep -qE 'source.*\.env'; then
317
+ warn "source .env found — use grep|cut extraction instead" "$fname:$lineno"
318
+ CHECK8_CLEAN=false
319
+ fi
320
+ done < "$f"
321
+ done
322
+ if [ "$SH_COUNT" -eq 0 ]; then
323
+ pass "Safe .env sourcing (no .sh files to check)"
324
+ else
325
+ $CHECK8_CLEAN && pass "Safe .env sourcing (no source .env usage)"
326
+ fi
327
+
328
+ # ============================================================
329
+ # SUMMARY
330
+ # ============================================================
331
+ echo ""
332
+ if [ $FAIL -eq 0 ] && [ $WARN -eq 0 ]; then
333
+ echo -e "${GREEN} ✓ All checks passed${NC}"
334
+ elif [ $FAIL -eq 0 ]; then
335
+ echo -e "${YELLOW} ⚠ $PASS passed, $WARN warning(s)${NC}"
336
+ else
337
+ echo -e "${RED} ✗ $PASS passed, $FAIL failure(s), $WARN warning(s)${NC}"
338
+ fi
339
+
340
+ # JSON summary (always last line)
341
+ echo "{\"pass\":$PASS,\"fail\":$FAIL,\"warn\":$WARN}"
342
+
343
+ # Exit 1 if any FAILs
344
+ [ $FAIL -eq 0 ]
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
5
+ export EGREGORE_ROOT="$ROOT"
6
+ export EGREGORE_SESSION_ID="${EGREGORE_SESSION_ID:-$(cat "$ROOT/.egregore-session-id" 2>/dev/null || true)}"
7
+ export PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}"
8
+
9
+ exec python3 -m egregore_runtime.thread_cli "$@"
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
5
+ export EGREGORE_ROOT="$ROOT"
6
+ export EGREGORE_SESSION_ID="${EGREGORE_SESSION_ID:-$(cat "$ROOT/.egregore-session-id" 2>/dev/null || true)}"
7
+ export PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}"
8
+
9
+ exec python3 -m egregore_runtime.todo_cli "$@"
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env bash
2
+ # view-render.sh — deterministic /view mechanics: stage, cache, render, open.
3
+ #
4
+ # The model's job in /view ends at judgment: resolving which artifact the user
5
+ # means (and, for documents, picking a design brief). Everything after that is
6
+ # mechanical and runs here with no model in the loop — staging the canonical
7
+ # source through the Runtime read boundary, serving repeat views from a
8
+ # content-addressed cache, invoking the packaged deterministic renderer, and
9
+ # opening the result.
10
+ #
11
+ # Usage:
12
+ # bash bin/view-render.sh <type> [source] [-- <extra renderer args>]
13
+ # type quest | handoff | document | activity | board | network
14
+ # source memory/... canonical path (staged via bin/search.sh open),
15
+ # or a local file path (already staged/synthesized).
16
+ # Omitted for the live types (activity, board, network).
17
+ # Extra args after -- are passed to the renderer verbatim (e.g. --brief).
18
+ set -uo pipefail
19
+
20
+ SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
21
+ TYPE="${1:-}"
22
+ [ -n "$TYPE" ] || { echo "usage: bash bin/view-render.sh <type> [source] [-- renderer args]" >&2; exit 2; }
23
+ shift
24
+
25
+ SOURCE=""
26
+ if [ $# -gt 0 ] && [ "$1" != "--" ]; then
27
+ SOURCE="$1"
28
+ shift
29
+ fi
30
+ [ "${1:-}" = "--" ] && shift
31
+ EXTRA=("$@")
32
+
33
+ ARTIFACT_DIR="${TMPDIR:-/tmp}/egregore-artifacts"
34
+ CACHE_DIR="$HOME/.egregore/runtime/render-cache"
35
+ mkdir -p "$ARTIFACT_DIR" "$CACHE_DIR"
36
+
37
+ _open() {
38
+ if command -v open >/dev/null 2>&1; then open "$1"; else xdg-open "$1" >/dev/null 2>&1; fi
39
+ }
40
+
41
+ # --- Resolve the packaged deterministic renderer (never fetch, never npx) ---
42
+ if [ -f "$SCRIPT_DIR/packages/egregore-artifacts/bin/cli.js" ] && [ -d "$SCRIPT_DIR/packages/egregore-artifacts/node_modules/react" ]; then
43
+ RENDER=(bash "$SCRIPT_DIR/bin/node-run.sh" "$SCRIPT_DIR/packages/egregore-artifacts/bin/cli.js")
44
+ RENDER_ID="$SCRIPT_DIR/packages/egregore-artifacts/bin/cli.js"
45
+ elif [ -f "$SCRIPT_DIR/packages/egregore-artifacts/bin/cli.js" ]; then
46
+ echo "The checked-out artifact renderer is missing its local dependencies." >&2
47
+ exit 1
48
+ elif command -v egregore-artifacts >/dev/null 2>&1; then
49
+ RENDER=(bash "$SCRIPT_DIR/bin/node-run.sh" "$(command -v egregore-artifacts)")
50
+ RENDER_ID="$(command -v egregore-artifacts)"
51
+ else
52
+ echo "The local artifact renderer is not installed for this instance." >&2
53
+ exit 1
54
+ fi
55
+
56
+ # --- Live surfaces render fresh every time (their data is the present) ------
57
+ case "$TYPE" in
58
+ activity|board|network)
59
+ "${RENDER[@]}" "$TYPE" ${EXTRA[@]+"${EXTRA[@]}"}
60
+ exit $?
61
+ ;;
62
+ esac
63
+
64
+ [ -n "$SOURCE" ] || { echo "type '$TYPE' needs a source file or memory/ path" >&2; exit 2; }
65
+
66
+ # --- Stage the source through the Runtime read boundary ---------------------
67
+ # An absolute path into this instance's memory is still organizational
68
+ # memory: normalize it to its canonical memory/... form so it goes through
69
+ # the same staging as any other canonical source — never rendered raw.
70
+ MEM_ROOT="$(cd "$SCRIPT_DIR/memory" 2>/dev/null && pwd -P || true)"
71
+ if [ -n "$MEM_ROOT" ]; then
72
+ case "$SOURCE" in
73
+ /*)
74
+ RESOLVED="$(cd "$(dirname "$SOURCE")" 2>/dev/null && pwd -P)/$(basename "$SOURCE")"
75
+ case "$RESOLVED" in
76
+ "$MEM_ROOT"/*) SOURCE="memory/${RESOLVED#"$MEM_ROOT"/}" ;;
77
+ esac
78
+ ;;
79
+ esac
80
+ fi
81
+ SLUG="$(basename "$SOURCE" .md | tr -c 'A-Za-z0-9._-' '-' | sed 's/-*$//')"
82
+ STAGE="$ARTIFACT_DIR/source-$SLUG.md"
83
+ case "$SOURCE" in
84
+ memory/*)
85
+ if ! bash "$SCRIPT_DIR/bin/search.sh" open "$SOURCE" > "$STAGE" 2>/dev/null || [ ! -s "$STAGE" ]; then
86
+ echo "source '$SOURCE' could not be opened through the Runtime read boundary" >&2
87
+ rm -f "$STAGE"
88
+ exit 1
89
+ fi
90
+ ;;
91
+ *)
92
+ [ -f "$SOURCE" ] || { echo "source file not found: $SOURCE" >&2; exit 1; }
93
+ STAGE="$SOURCE"
94
+ ;;
95
+ esac
96
+
97
+ # --- Content-addressed cache: same bytes + same renderer + same args --------
98
+ FINGERPRINT="$(
99
+ {
100
+ shasum -a 256 "$STAGE" "$RENDER_ID" 2>/dev/null
101
+ printf '%s\n' "$TYPE" ${EXTRA[@]+"${EXTRA[@]}"}
102
+ for a in ${EXTRA[@]+"${EXTRA[@]}"}; do [ -f "$a" ] && shasum -a 256 "$a" 2>/dev/null; done
103
+ } | shasum -a 256 | cut -c1-16
104
+ )"
105
+ OUT="$CACHE_DIR/$TYPE-$SLUG-$FINGERPRINT.html"
106
+
107
+ if [ -s "$OUT" ]; then
108
+ NO_OPEN=0
109
+ for a in ${EXTRA[@]+"${EXTRA[@]}"}; do [ "$a" = "--no-open" ] && NO_OPEN=1; done
110
+ if [ "$NO_OPEN" = 1 ]; then
111
+ echo "✓ Artifact written: $OUT"
112
+ else
113
+ _open "$OUT"
114
+ echo "✓ Artifact opened in browser"
115
+ echo " File: $OUT"
116
+ fi
117
+ echo " (served from render cache)"
118
+ exit 0
119
+ fi
120
+
121
+ # The renderer prints its own report and opens the browser itself.
122
+ if ! "${RENDER[@]}" "$TYPE" "$STAGE" --output "$OUT" ${EXTRA[@]+"${EXTRA[@]}"}; then
123
+ rm -f "$OUT"
124
+ exit 1
125
+ fi
126
+ [ -s "$OUT" ] || { echo "renderer produced no output" >&2; exit 1; }
@@ -111,20 +111,34 @@ for _r in $_repos; do
111
111
  MANAGED_REPOS_JSON="$MANAGED_REPOS_JSON,\"$_resolved\""
112
112
  done
113
113
  MANAGED_REPOS_JSON="$MANAGED_REPOS_JSON]"
114
- # Denied paths: other instances, but NOT the main repo (worktree is its child)
114
+ # Denied paths: shared computation (bin/boundary.sh compute-denied). The main
115
+ # repo is passed as the caller-proven same-instance allowance — this worktree
116
+ # was just created from it and physically shares its git dir — so it stays
117
+ # excluded even on legacy registries whose entries carry no org_id yet.
115
118
  DENIED_JSON="[]"
116
119
  REGISTRY="$HOME/.egregore/instances.json"
117
120
  if [ -f "$REGISTRY" ]; then
118
- DENIED_JSON=$(jq --arg self "$REPO_ROOT" --arg wt "$WT_PATH" \
119
- '[.[] | select(.path != $self and .path != $wt) | .path]' \
120
- "$REGISTRY" 2>/dev/null || echo "[]")
121
+ WT_ORG=$(jq -r '.org_id // empty' "$WT_PATH/egregore.json" 2>/dev/null || true)
122
+ DENIED_JSON=$(bash "$REPO_ROOT/bin/boundary.sh" compute-denied \
123
+ "$REGISTRY" "$WT_PATH" "$WT_ORG" "$REPO_ROOT" 2>/dev/null || echo "[]")
124
+ case "$DENIED_JSON" in "["*) ;; *) DENIED_JSON="[]" ;; esac
125
+ fi
126
+ # Inherit posture, locked, and read roots from the main checkout's boundary
127
+ # cache: a worktree that silently dropped them fell back to `standard` and
128
+ # stopped honoring `locked: true` (found in the 6b.3 enforcement audit).
129
+ MAIN_DIGEST=$(printf '%s' "$REPO_ROOT" | md5 2>/dev/null || printf '%s' "$REPO_ROOT" | md5sum | cut -d' ' -f1)
130
+ MAIN_BOUNDARY="/tmp/egregore-boundary-${MAIN_DIGEST}.json"
131
+ POSTURE_JSON='{}'
132
+ if [ -f "$MAIN_BOUNDARY" ]; then
133
+ POSTURE_JSON=$(jq -c '{posture: (.posture // "standard"), locked: (.locked // false), read_roots: (.read_roots // [])}' "$MAIN_BOUNDARY" 2>/dev/null || echo '{}')
121
134
  fi
122
135
  jq -n \
123
136
  --arg project_dir "$WT_PATH" \
124
137
  --arg memory_dir "$MEMORY_DIR" \
125
138
  --argjson managed_repos "$MANAGED_REPOS_JSON" \
126
139
  --argjson denied_paths "$DENIED_JSON" \
127
- '{project_dir: $project_dir, memory_dir: $memory_dir, managed_repos: $managed_repos, denied_paths: $denied_paths}' \
140
+ --argjson inherited "$POSTURE_JSON" \
141
+ '{project_dir: $project_dir, memory_dir: $memory_dir, managed_repos: $managed_repos, denied_paths: $denied_paths} + $inherited' \
128
142
  > "$BOUNDARY_FILE.tmp" 2>/dev/null && mv "$BOUNDARY_FILE.tmp" "$BOUNDARY_FILE" 2>/dev/null || true
129
143
 
130
144
  # --- Output the worktree path (ONLY stdout line) ---