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,147 @@
1
+ #!/usr/bin/env node
2
+ // Derive Prime Agent's project-local system appendix from the generated Codex
3
+ // protocol. CLAUDE.md remains canonical:
4
+ // CLAUDE.md -> AGENTS.md -> .prime/agent/APPEND_SYSTEM.md.
5
+ // The second hop deliberately reuses the reviewed shell-runtime translation,
6
+ // then adapts only the harness surfaces that differ between Codex and Prime.
7
+
8
+ import crypto from "node:crypto";
9
+ import fs from "node:fs";
10
+ import path from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+
13
+ const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
14
+ const SOURCE = path.join(ROOT, "AGENTS.md");
15
+ const OUTPUT = path.join(ROOT, ".prime", "agent", "APPEND_SYSTEM.md");
16
+ const MANIFEST = path.join(ROOT, ".prime", "agent", "spec-manifest.json");
17
+ const CODEX_BEGIN = "<!-- BEGIN GENERATED EGREGORE CODEX SPEC";
18
+ const CODEX_END = "<!-- END GENERATED EGREGORE CODEX SPEC -->";
19
+
20
+ function hash(value) {
21
+ return crypto.createHash("sha256").update(value).digest("hex").slice(0, 12);
22
+ }
23
+
24
+ function extractSpec(source) {
25
+ const begin = source.indexOf(CODEX_BEGIN);
26
+ const contentStart = source.indexOf("\n", begin);
27
+ const end = source.indexOf(CODEX_END, contentStart);
28
+ if (begin < 0 || contentStart < 0 || end < 0) {
29
+ throw new Error("AGENTS.md does not contain the generated Codex spec");
30
+ }
31
+ return source.slice(contentStart + 1, end).trim();
32
+ }
33
+
34
+ function replaceSection(markdown, heading, body) {
35
+ const marker = `## ${heading}`;
36
+ const start = markdown.indexOf(marker);
37
+ if (start < 0) throw new Error(`missing section in AGENTS.md: ${heading}`);
38
+ const rest = markdown.slice(start + marker.length);
39
+ const boundary = rest.search(/\n\n---\n\n## /);
40
+ const end = boundary < 0 ? markdown.length : start + marker.length + boundary;
41
+ return `${markdown.slice(0, start)}${marker}\n\n${body}${markdown.slice(end)}`;
42
+ }
43
+
44
+ // Keep an inherited section and put runtime-specific framing in front of it.
45
+ // Command Awareness is the case that matters: the canonical category rows and
46
+ // disambiguation map live in CLAUDE.md, and a full replace here silently
47
+ // shipped a truncated copy that drifted for months. The Codex spec opens the
48
+ // section with its own skills-not-slash-commands paragraph, which is wrong for
49
+ // a runtime that does have slash commands, so that one paragraph is dropped.
50
+ function prependToSection(markdown, heading, body, dropLeadParagraphStartingWith) {
51
+ const marker = `## ${heading}`;
52
+ const start = markdown.indexOf(marker);
53
+ if (start < 0) throw new Error(`missing section in AGENTS.md: ${heading}`);
54
+ const rest = markdown.slice(start + marker.length);
55
+ const boundary = rest.search(/\n\n---\n\n## /);
56
+ const end = boundary < 0 ? markdown.length : start + marker.length + boundary;
57
+ let inherited = markdown.slice(start + marker.length, end).trim();
58
+ if (dropLeadParagraphStartingWith) {
59
+ if (!inherited.startsWith(dropLeadParagraphStartingWith)) {
60
+ throw new Error(`prime-render-spec: "${heading}" no longer opens with "${dropLeadParagraphStartingWith}" — the Codex wording moved; update this adaptation`);
61
+ }
62
+ inherited = inherited.slice(inherited.indexOf("\n\n") + 2).trim();
63
+ }
64
+ return replaceSection(markdown, heading, `${body}\n\n${inherited}`);
65
+ }
66
+
67
+ const CODEX_COMMAND_LEAD = "Codex reserves leading";
68
+
69
+ function adapt(sourceSpec) {
70
+ // Anchored replacements: every `from` string MUST exist in the generated
71
+ // Codex spec — a missing anchor no-ops silently and drops Prime-specific
72
+ // wording (see the tool_call gate incident). Fail the render loudly instead.
73
+ const ANCHORED = [
74
+ ["Egregore on Codex", "Egregore on Prime Agent"],
75
+ ["Codex-native", "Prime-native"],
76
+ ["Codex sessions", "Prime Agent sessions"],
77
+ ["On Codex", "On Prime Agent"],
78
+ ["Codex has no", "Prime Agent has no built-in"],
79
+ ["bin/codex-session-start.sh", "bin/prime-session-start.sh"],
80
+ [".codex/hooks/branch-guard.js", ".prime/agent/extensions/egregore.ts"],
81
+ ["PreToolUse hook (launcher `--enable hooks`)", "`tool_call` gate (loaded from the project-local extension)"],
82
+ ["If this Codex build does not support hooks", "If Prime Agent project extensions are disabled"],
83
+ ["change permissions in `.claude/settings.json` anytime", "review or disable project resources in `.prime/agent/` anytime"],
84
+ ];
85
+ let text = sourceSpec;
86
+ for (const [from, to] of ANCHORED) {
87
+ if (!text.includes(from)) {
88
+ throw new Error(`prime-render-spec: anchor not found in generated Codex spec: "${from}" — the Codex wording moved; update this replacement`);
89
+ }
90
+ text = text.replaceAll(from, to);
91
+ }
92
+ text = text
93
+ .replace(/`\$([a-z][a-z0-9-]*)/g, "`/$1")
94
+ .replace(/\$([a-z][a-z0-9-]*)/g, "/$1");
95
+
96
+ text = replaceSection(text, "Egregore on Prime Agent", `You are Prime Agent running inside Egregore — a shared intelligence layer for organizations using AI coding agents. You operate through Git-based shared memory, project-local Prime Agent resources, Egregore skills, and conventions that accumulate knowledge across sessions and people. You are not a tool. You are a participant.
97
+
98
+ This appendix is generated from the reviewed shell-runtime translation of \`CLAUDE.md\`, the behavioral source of truth. Prime Agent loads it through \`.prime/agent/APPEND_SYSTEM.md\`. Egregore workflows are shared from \`.codex/skills/\` through the Agent Skills standard (via \`.agents/skills\` and project settings) and exposed as familiar slash commands by \`.prime/agent/extensions/egregore.ts\`.
99
+
100
+ Your subagent mechanism (\`rlm(...)\`) spawns Prime Agent child sessions, not Egregore Loom lanes. Ignore Loom routing preambles inside shared skills: run those workflows inline.`);
101
+
102
+ text = replaceSection(text, "On Launch — MANDATORY FIRST ACTION", `The project-local Prime Agent extension renders the Egregore startup card (identity, handoffs, team activity) inside the session via \`bin/prime-session-start.sh\`. This works for direct \`prime-agent\` launches and launcher-managed sessions. Do not rerun startup checks and do not narrate startup. The card ends with **"What are you working on?"** — that question is already on screen; treat the user's first message as the answer to it. To re-show the card outside Prime Agent, run \`bash bin/prime-session-start.sh --card\`.`);
103
+
104
+ text = prependToSection(text, "Command Awareness", `Egregore workflows are available as Prime Agent slash commands such as \`/activity\`, \`/handoff\`, \`/save\`, and \`/view\`. They are registered from the shared skill inventory by \`.prime/agent/extensions/egregore.ts\`; the duplicate \`/skill:name\` listings are disabled so each workflow appears once. Natural-language requests work normally — and are the route for any workflow whose name collides with a Prime Agent built-in: **say "update egregore" rather than typing \`/update\`**, which is Prime Agent's own self-updater. \`/save\` is the user-facing abstraction for committing, pushing, opening or reusing pull requests, and syncing memory — never make users manage the git workflow by hand.
105
+
106
+ Read the selected skill's \`SKILL.md\` completely before acting. Codex wording inside the shared portable skills means the shell-capable runtime adapter; in Prime Agent, run referenced \`bin/\` scripts through the IPython kernel (or the bash tool when active), use ordinary shell/network access, ignore Codex approval-channel wording, and render compact numbered questions when no UI question surface is available.
107
+
108
+ The \`egregore\` Python-backed skill exposes the mechanics as kernel functions — \`import egregore\`, then \`egregore.search(query)\`, \`egregore.activity()\`, \`egregore.handoff(to, topic, body)\`, \`egregore.save(message, topic)\`, \`egregore.branch(topic)\`, \`egregore.notify_plan(recipient, message)\`. Prefer these over re-deriving \`bin/\` CLI usage by reading scripts. \`notify_plan\` is proposal-only: approval and dispatch always pass through the explicit human Send / Edit / Cancel checkpoint.
109
+
110
+ "Get the latest changes" inside a session means \`/reload\` — it re-reads instructions, context files, skills, and extensions from disk. Never \`git pull\`, \`git reset\`, or \`git checkout\` the working branch to pick up updates. When pivoting topics inside a worktree that carries unmerged branch work, create the new branch from the current HEAD, not \`origin/{base}\` — branching from the configured base in such a worktree removes the unmerged files from disk.
111
+
112
+ Kernel shell escapes can be time-capped by the harness. Egregore \`bin/\` scripts that sync git state or query the connected graph legitimately run 10–120 seconds: run them with a generous timeout (a \`%%bash\` cell, or the longest limit the harness exposes). If a command dies suspiciously fast (~5s) with partial output, treat it as a timeout — rerun once with a longer limit or render the workflow's designed one-line fallback. Never debug data plumbing inside a product workflow. Connected mode works normally here: graph reads and \`bin/search.sh\` enrichment use the instance's configured credentials, and when graph data is degraded say so in one plain line rather than narrating connectivity theories.`, CODEX_COMMAND_LEAD);
113
+
114
+ return `# Egregore on Prime Agent\n\nThis file is generated by \`bin/prime-render-spec.mjs\`; do not edit it by hand.\n\n${text}\n`;
115
+ }
116
+
117
+ const check = process.argv.includes("--check");
118
+ const source = fs.readFileSync(SOURCE, "utf8");
119
+ const sourceSpec = extractSpec(source);
120
+ const rendered = adapt(sourceSpec);
121
+ const manifest = `${JSON.stringify({
122
+ generatedBy: "bin/prime-render-spec.mjs",
123
+ source: "AGENTS.md generated Codex spec",
124
+ sourceHash: hash(sourceSpec),
125
+ outputHash: hash(rendered),
126
+ adaptations: [
127
+ "Prime Agent APPEND_SYSTEM delivery from .prime/agent/",
128
+ "Prime Agent tool_call branch gate incl. ipython classification",
129
+ "Prime Agent slash-command extension over shared portable skills",
130
+ "rlm() subagents are not Loom lanes; Loom preambles run inline",
131
+ ],
132
+ }, null, 2)}\n`;
133
+
134
+ if (check) {
135
+ const currentOutput = fs.existsSync(OUTPUT) ? fs.readFileSync(OUTPUT, "utf8") : "";
136
+ const currentManifest = fs.existsSync(MANIFEST) ? fs.readFileSync(MANIFEST, "utf8") : "";
137
+ if (currentOutput !== rendered || currentManifest !== manifest) {
138
+ console.error("prime spec out of date — run: bash bin/node-run.sh bin/prime-render-spec.mjs");
139
+ process.exit(1);
140
+ }
141
+ console.log("prime spec up to date");
142
+ } else {
143
+ fs.mkdirSync(path.dirname(OUTPUT), { recursive: true });
144
+ fs.writeFileSync(OUTPUT, rendered);
145
+ fs.writeFileSync(MANIFEST, manifest);
146
+ console.log(`prime spec rendered: .prime/agent/APPEND_SYSTEM.md (${Buffer.byteLength(rendered)} bytes)`);
147
+ }
@@ -0,0 +1,324 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # publish-artifact.sh — Generate HTML artifact + upload to API
5
+ # Usage: publish-artifact.sh <type> <file> [--title "..."] [--author "..."] [--description "..."] [--id "..."] [--raw-html] [--no-references]
6
+ #
7
+ # Connected mode (API key present): publishes to /api/artifacts/publish (permanent, org-scoped)
8
+ # OSS mode (no API key): publishes to /api/artifacts/share on a PUBLIC, UNAUTHENTICATED
9
+ # relay (ephemeral, 7-day TTL). OFF unless the instance opted in — see
10
+ # "Public-relay opt-in" below and `bin/settings.sh relay on`.
11
+ #
12
+ # --id <slug>: stable artifact ID — re-publishing with the same ID upserts the content
13
+ # at the same URL (e.g. egregore.xyz/view/{org}/board). Connected mode only;
14
+ # ignored in OSS mode. Must be 1-50 chars, alphanumeric/hyphen/underscore.
15
+ #
16
+ # --raw-html: Skip the egregore-artifacts render step and upload <file> directly.
17
+ # Use for already-rendered HTML attachments referenced from a handoff.
18
+ #
19
+ # --no-references: Skip the depth-1 auto-publish of backtick-referenced memory files.
20
+ # Set automatically when publish-references.sh invokes us for a child,
21
+ # preventing recursion.
22
+ #
23
+ # Outputs artifact URL on success, exits silently on soft failure.
24
+ # Designed for fire-and-forget use: `bash bin/publish-artifact.sh handoff file.md &`
25
+ #
26
+ # Exit codes: 0 ok (or soft failure — no URL on stdout) · 1 usage/validation
27
+ # 3 hosting turned off (features.publishing=false)
28
+ # 4 nothing uploaded — public relay not enabled and no org API key,
29
+ # or egregore.json is missing/unreadable (fail closed)
30
+ # 5 renderer/fidelity validation failed (nothing uploaded)
31
+
32
+ SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
33
+ CONFIG="$SCRIPT_DIR/egregore.json"
34
+
35
+ # --- Parse arguments ---
36
+ TYPE=""
37
+ FILE=""
38
+ TITLE=""
39
+ AUTHOR=""
40
+ DESCRIPTION=""
41
+ ARTIFACT_ID=""
42
+ RAW_HTML=0
43
+ SKIP_REFERENCES=0
44
+ ALLOW_ADMIN=0
45
+ PAIR=""
46
+ VERIFY_FIDELITY=0
47
+ FIDELITY_SOURCE=""
48
+
49
+ while [[ $# -gt 0 ]]; do
50
+ case "$1" in
51
+ --title) TITLE="$2"; shift 2 ;;
52
+ --author) AUTHOR="$2"; shift 2 ;;
53
+ --description) DESCRIPTION="$2"; shift 2 ;;
54
+ --id) ARTIFACT_ID="$2"; shift 2 ;;
55
+ --pair) PAIR="$2"; shift 2 ;;
56
+ --verify-fidelity) VERIFY_FIDELITY=1; shift ;;
57
+ --source) FIDELITY_SOURCE="$2"; shift 2 ;;
58
+ --raw-html) RAW_HTML=1; shift ;;
59
+ --allow-admin) ALLOW_ADMIN=1; shift ;;
60
+ --no-references) SKIP_REFERENCES=1; shift ;;
61
+ *)
62
+ if [ -z "$TYPE" ]; then
63
+ TYPE="$1"
64
+ elif [ -z "$FILE" ]; then
65
+ FILE="$1"
66
+ fi
67
+ shift ;;
68
+ esac
69
+ done
70
+
71
+ if [ -z "$TYPE" ] || [ -z "$FILE" ]; then
72
+ echo "Usage: publish-artifact.sh <type> <file> [--title ...] [--author ...] [--description ...] [--id ...]" >&2
73
+ exit 1
74
+ fi
75
+
76
+ # Validate --id format if provided (matches API regex ^[a-zA-Z0-9_-]{1,50}$)
77
+ if [ -n "$ARTIFACT_ID" ] && ! [[ "$ARTIFACT_ID" =~ ^[a-zA-Z0-9_-]{1,50}$ ]]; then
78
+ echo "--id must be 1-50 chars, alphanumeric/hyphen/underscore only" >&2
79
+ exit 1
80
+ fi
81
+
82
+ if [ ! -f "$FILE" ]; then
83
+ echo "File not found: $FILE" >&2
84
+ exit 1
85
+ fi
86
+
87
+ # --- Load config ---
88
+ if [ -f "$SCRIPT_DIR/.env" ]; then
89
+ EGREGORE_API_URL="${EGREGORE_API_URL:-$(grep '^EGREGORE_API_URL=' "$SCRIPT_DIR/.env" 2>/dev/null | cut -d'=' -f2- || true)}"
90
+ EGREGORE_API_KEY="${EGREGORE_API_KEY:-$(grep '^EGREGORE_API_KEY=' "$SCRIPT_DIR/.env" 2>/dev/null | cut -d'=' -f2- || true)}"
91
+ EGREGORE_USE_PUBLISHED="${EGREGORE_USE_PUBLISHED:-$(grep '^EGREGORE_USE_PUBLISHED=' "$SCRIPT_DIR/.env" 2>/dev/null | cut -d'=' -f2- || true)}"
92
+ fi
93
+
94
+ # A config we cannot parse is a config we cannot trust. Every routing decision
95
+ # below — authenticated org upload vs. public relay, hosting on vs. off — is
96
+ # read out of this file, so an unreadable one means we cannot tell those apart.
97
+ if [ ! -f "$CONFIG" ] || ! jq -e 'type == "object"' "$CONFIG" >/dev/null 2>&1; then
98
+ echo "Not published — nothing left this machine." >&2
99
+ echo "egregore.json is missing or unreadable, so there is no way to tell an authenticated org upload from a public one." >&2
100
+ exit 4
101
+ fi
102
+
103
+ API_URL="${EGREGORE_API_URL:-$(jq -r '.api_url // empty' "$CONFIG" 2>/dev/null)}"
104
+ API_KEY="${EGREGORE_API_KEY:-}"
105
+ ORG_SLUG="$(jq -r '.slug // empty' "$CONFIG" 2>/dev/null)"
106
+ VIEW_BASE="https://egregore.xyz/view"
107
+
108
+ # Resolve "use published renderer" from env first, then egregore.json. The
109
+ # env var lets individuals override per-shell; egregore.json lets an
110
+ # instance (e.g. the upstream dev repo) opt in for every teammate.
111
+ if [ -z "${EGREGORE_USE_PUBLISHED:-}" ]; then
112
+ CONFIG_USE_PUBLISHED="$(jq -r '.prefer_published_artifacts // empty' "$CONFIG" 2>/dev/null)"
113
+ if [ "$CONFIG_USE_PUBLISHED" = "true" ]; then
114
+ EGREGORE_USE_PUBLISHED=1
115
+ fi
116
+ fi
117
+
118
+ # Public relay for OSS share endpoint. Unauthenticated: anything posted here is
119
+ # readable by anyone holding the URL, for 7 days, with nothing in front of it.
120
+ RELAY_URL="https://egregore-production-55f2.up.railway.app"
121
+
122
+ # --- Artifact hosting off-switch (compliance / privacy) ---
123
+ # An instance can disable ALL egregore.xyz publishing via `bin/settings.sh hosting off`
124
+ # (sets features.publishing=false). Absent/true means ON, so existing instances are
125
+ # unaffected. We bail BEFORE any render or upload so "off" truly does nothing and costs
126
+ # nothing. Exit 3 is distinct from usage errors; fire-and-forget callers ignore it.
127
+ # NOTE: test `!= false`, not jq's `// "true"` — `//` treats an explicit `false` as empty
128
+ # and would return the default, silently defeating the off-switch.
129
+ PUBLISHING_ENABLED="$(jq -r 'if .features.publishing == false then "false" else "true" end' "$CONFIG" 2>/dev/null || echo "true")"
130
+ if [ "$PUBLISHING_ENABLED" = "false" ]; then
131
+ echo "Artifact hosting is off for this egregore (features.publishing=false); nothing uploaded." >&2
132
+ echo "Turn it on with: bin/settings.sh hosting on (or: egregore settings → Hosting)." >&2
133
+ exit 3
134
+ fi
135
+
136
+ # --- Public-relay opt-in (privacy) ---
137
+ # Without BOTH an api_url and an org API key there is exactly one upload route
138
+ # left: the unauthenticated public relay below. Content must not leave the
139
+ # machine for that route unless a person explicitly enabled it. The gate sits
140
+ # before rendering so the default path generates and uploads nothing.
141
+ #
142
+ # NOTE: use an explicit `== true` test, never jq's `// false`: `//` treats an
143
+ # explicit false like null and silently replaces it with the default.
144
+ if [ -z "$API_URL" ] || [ -z "$API_KEY" ]; then
145
+ PUBLIC_RELAY_ENABLED="$(jq -r 'if .features.public_relay == true then "true" else "false" end' "$CONFIG" 2>/dev/null || echo "false")"
146
+ if [ "$PUBLIC_RELAY_ENABLED" != "true" ]; then
147
+ echo "Not published — nothing left this machine." >&2
148
+ echo "Without an org API key the only sharing route is a public relay: no auth, anyone with the link can read it, expires after 7 days. It is off unless you turn it on." >&2
149
+ echo "Turn it on with: bin/settings.sh relay on" >&2
150
+ exit 4
151
+ fi
152
+ fi
153
+
154
+ # --- Admin-content gate (the refusal documented in bin/lib/permissions.sh) --
155
+ # `admin: true` sources — including backtick-referenced memory files — are
156
+ # refused before any render or upload. An authorized admin (stable identity,
157
+ # github.username alias against egregore.json admins) may proceed only with
158
+ # the explicit --allow-admin confirmation, which is separate from and never
159
+ # replaces normal publication approval. This protects the Egregore surface;
160
+ # repository members can still read raw Git files.
161
+ # shellcheck source=bin/lib/permissions.sh
162
+ source "$SCRIPT_DIR/bin/lib/permissions.sh"
163
+ ADMIN_MARKED=()
164
+ if _is_admin_only_file "$FILE"; then
165
+ ADMIN_MARKED+=("$FILE")
166
+ fi
167
+ if [ "$RAW_HTML" -eq 0 ]; then
168
+ while IFS= read -r ref; do
169
+ [ -z "$ref" ] && continue
170
+ rel="${ref#\`}"
171
+ rel="${rel%\`}"
172
+ if [ -f "$SCRIPT_DIR/$rel" ] && _is_admin_only_file "$SCRIPT_DIR/$rel"; then
173
+ ADMIN_MARKED+=("$rel")
174
+ fi
175
+ done < <(grep -Eo '`memory/[^`[:space:]]+\.(md|html)`' "$FILE" 2>/dev/null | sort -u)
176
+ fi
177
+ if [ "${#ADMIN_MARKED[@]}" -gt 0 ]; then
178
+ IS_ADMIN="false"
179
+ ADMIN_JSON=$(cd "$SCRIPT_DIR" && EGREGORE_ROOT="$SCRIPT_DIR" \
180
+ PYTHONPATH="$SCRIPT_DIR${PYTHONPATH:+:$PYTHONPATH}" \
181
+ python3 -m egregore_runtime.harness_cli admin-status 2>/dev/null) || true
182
+ IS_ADMIN=$(printf '%s' "$ADMIN_JSON" | jq -r '.admin // false' 2>/dev/null || echo "false")
183
+ if [ "$IS_ADMIN" != "true" ]; then
184
+ echo "publish refused: admin-marked content cannot be published by a non-admin member:" >&2
185
+ printf ' %s\n' "${ADMIN_MARKED[@]}" >&2
186
+ echo "(--allow-admin is available to organization admins only)" >&2
187
+ exit 5
188
+ fi
189
+ if [ "$ALLOW_ADMIN" -ne 1 ]; then
190
+ echo "publish refused: this content is admin-marked:" >&2
191
+ printf ' %s\n' "${ADMIN_MARKED[@]}" >&2
192
+ echo "re-run with --allow-admin to confirm publishing admin-marked content" >&2
193
+ echo "(this confirmation is separate from normal publication approval)" >&2
194
+ exit 5
195
+ fi
196
+ fi
197
+
198
+ # --- Prepare HTML ---
199
+ TMP_HTML="/tmp/egregore-artifacts/publish-$$.html"
200
+ mkdir -p /tmp/egregore-artifacts
201
+
202
+ if [ "$RAW_HTML" -eq 1 ]; then
203
+ # Upload the file as-is (used for pre-rendered HTML attachments).
204
+ cp "$FILE" "$TMP_HTML" 2>/dev/null || exit 0
205
+ else
206
+ # Pass --org-slug + --view-base so the renderer can emit clickable links
207
+ # for backtick `memory/*.{md,html}` references. Only when connected AND the
208
+ # slug is known — in OSS mode we leave them empty so rendering falls back
209
+ # to plain <code> and we don't produce dead links.
210
+ RENDER_ARGS=("$TYPE" "$FILE" --output "$TMP_HTML")
211
+ if [ -n "$API_KEY" ] && [ -n "$ORG_SLUG" ]; then
212
+ RENDER_ARGS+=(--org-slug "$ORG_SLUG" --view-base "$VIEW_BASE")
213
+ fi
214
+ # Palette family (meridian default | agronomic | sovereign). Role-token driven,
215
+ # so it themes any composed artifact with no extra CSS.
216
+ if [ -n "$PAIR" ]; then
217
+ RENDER_ARGS+=(--pair "$PAIR")
218
+ fi
219
+ if [ "$VERIFY_FIDELITY" -eq 1 ]; then
220
+ RENDER_ARGS+=(--verify-fidelity)
221
+ if [ "$TYPE" = "composed" ]; then
222
+ [ -n "$FIDELITY_SOURCE" ] || {
223
+ echo "Handoff fidelity check requires --source <canonical-handoff.md>" >&2
224
+ exit 1
225
+ }
226
+ RENDER_ARGS+=(--source "$FIDELITY_SOURCE")
227
+ fi
228
+ fi
229
+
230
+ # Prefer the in-repo package copy when it's present AND its dependencies
231
+ # have been installed — that way local edits to packages/egregore-artifacts
232
+ # are exercised without waiting for an npm release. Fall back to the
233
+ # published `npx egregore-artifacts` otherwise.
234
+ # Set EGREGORE_USE_PUBLISHED=1 to force the npm-published renderer even
235
+ # when a local install is present — useful in the upstream dev repo to
236
+ # dogfood what teammates and OSS users actually run.
237
+ LOCAL_CLI="$SCRIPT_DIR/packages/egregore-artifacts/bin/cli.js"
238
+ RENDER_ERROR="/tmp/egregore-artifacts/render-error-$$.log"
239
+ if [ "${EGREGORE_USE_PUBLISHED:-0}" != "1" ] && [ -f "$LOCAL_CLI" ] && [ -d "$SCRIPT_DIR/packages/egregore-artifacts/node_modules/react" ]; then
240
+ if ! bash "$SCRIPT_DIR/bin/node-run.sh" "$LOCAL_CLI" "${RENDER_ARGS[@]}" >/dev/null 2>"$RENDER_ERROR"; then
241
+ sed -n '1,4p' "$RENDER_ERROR" >&2
242
+ rm -f "$RENDER_ERROR"
243
+ exit 5
244
+ fi
245
+ else
246
+ # Installed published renderer only — never npx/@latest: a hidden
247
+ # registry fetch of a floating version is not an acceptable renderer.
248
+ PUBLISHED_CLI="$(command -v egregore-artifacts || true)"
249
+ if [ -z "$PUBLISHED_CLI" ]; then
250
+ echo "no artifact renderer available: the checked-out packages/egregore-artifacts is unusable and no installed egregore-artifacts was found" >&2
251
+ exit 5
252
+ fi
253
+ if ! bash "$SCRIPT_DIR/bin/node-run.sh" "$PUBLISHED_CLI" "${RENDER_ARGS[@]}" >/dev/null 2>"$RENDER_ERROR"; then
254
+ sed -n '1,4p' "$RENDER_ERROR" >&2
255
+ rm -f "$RENDER_ERROR"
256
+ exit 5
257
+ fi
258
+ fi
259
+ rm -f "$RENDER_ERROR"
260
+ fi
261
+
262
+ if [ ! -f "$TMP_HTML" ]; then
263
+ exit 0
264
+ fi
265
+
266
+ # Default title from filename if not provided
267
+ if [ -z "$TITLE" ]; then
268
+ TITLE="$(basename "$FILE" | sed 's/\.[^.]*$//' | sed 's/[-_]/ /g')"
269
+ fi
270
+
271
+ # --- Upload ---
272
+ RESPONSE=""
273
+
274
+ if [ -n "$API_URL" ] && [ -n "$API_KEY" ]; then
275
+ # Connected mode: permanent, org-scoped
276
+ RESPONSE=$(curl -s -X POST "${API_URL}/api/artifacts/publish" \
277
+ -H "Authorization: Bearer $API_KEY" \
278
+ -F "file=@${TMP_HTML}" \
279
+ -F "artifact_type=${TYPE}" \
280
+ -F "title=${TITLE}" \
281
+ -F "author=${AUTHOR}" \
282
+ -F "description=${DESCRIPTION}" \
283
+ -F "artifact_id=${ARTIFACT_ID}" \
284
+ --max-time 15 2>/dev/null) || true
285
+ else
286
+ # OSS mode: ephemeral, 7-day TTL
287
+ RESPONSE=$(curl -s -X POST "${RELAY_URL}/api/artifacts/share" \
288
+ -F "file=@${TMP_HTML}" \
289
+ -F "artifact_type=${TYPE}" \
290
+ -F "title=${TITLE}" \
291
+ -F "author=${AUTHOR}" \
292
+ -F "description=${DESCRIPTION}" \
293
+ --max-time 15 2>/dev/null) || true
294
+ fi
295
+
296
+ # Clean up
297
+ rm -f "$TMP_HTML"
298
+
299
+ # Output URL if successful
300
+ URL=""
301
+ if [ -n "$RESPONSE" ]; then
302
+ URL=$(echo "$RESPONSE" | jq -r '.url // empty' 2>/dev/null)
303
+ if [ -n "$URL" ]; then
304
+ echo "$URL"
305
+ # Register in the local artifact registry (memory/artifacts/) so this hosted
306
+ # artifact is findable by CONTENT, not just name — grep/ls (Claude Code /
307
+ # Codex, OSS), and search + graph (paid). Never fatal to the publish.
308
+ bash "$SCRIPT_DIR/bin/artifact-register.sh" \
309
+ --id "$ARTIFACT_ID" --url "$URL" --type "$TYPE" --title "$TITLE" \
310
+ --author "$AUTHOR" --source "$FILE" --description "$DESCRIPTION" \
311
+ >/dev/null 2>&1 || true
312
+ fi
313
+ fi
314
+
315
+ # Depth-1 auto-publish of backtick-referenced memory files so the clickable
316
+ # links in the rendered parent resolve. Connected mode only; the helper exits
317
+ # silently in OSS mode. Skipped when:
318
+ # - parent publish failed (no URL),
319
+ # - --raw-html (HTML attachments don't embed markdown refs we'd parse),
320
+ # - --no-references (caller explicitly opts out / recursion guard).
321
+ if [ -n "$URL" ] && [ "$RAW_HTML" -eq 0 ] && [ "$SKIP_REFERENCES" -eq 0 ]; then
322
+ bash "$SCRIPT_DIR/bin/publish-references.sh" "$FILE" >/dev/null 2>&1 &
323
+ disown 2>/dev/null || true
324
+ fi
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env bash
2
+ set -uo pipefail
3
+
4
+ # publish-references.sh — Depth-1 auto-publish for referenced memory files.
5
+ #
6
+ # Usage: publish-references.sh <source-markdown-file>
7
+ #
8
+ # Reads the source markdown, extracts backtick-wrapped references to
9
+ # `memory/**/*.{md,html}` paths, and publishes each one in parallel with a
10
+ # deterministic artifact id (see bin/lib/artifact-id.sh). The deterministic id
11
+ # means the rendered parent view can construct a predictable link to each
12
+ # referenced file *before* this script finishes — so even a slight delay
13
+ # produces clickable links that resolve once the referenced publish completes.
14
+ #
15
+ # Connected mode only. Skips silently if EGREGORE_API_KEY is missing, because
16
+ # the OSS relay ignores artifact ids and would assign random slugs.
17
+ #
18
+ # Fire-and-forget: silent on errors, does not block the caller, bounded
19
+ # parallelism via EGREGORE_REF_PUBLISH_PARALLELISM (default 8).
20
+
21
+ SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
22
+ SOURCE_FILE="${1:-}"
23
+
24
+ [ -n "$SOURCE_FILE" ] || exit 0
25
+ [ -f "$SOURCE_FILE" ] || exit 0
26
+
27
+ # --- Connected-mode check ---
28
+ API_KEY="${EGREGORE_API_KEY:-}"
29
+ if [ -z "$API_KEY" ] && [ -f "$SCRIPT_DIR/.env" ]; then
30
+ API_KEY="$(grep '^EGREGORE_API_KEY=' "$SCRIPT_DIR/.env" 2>/dev/null | cut -d'=' -f2- || true)"
31
+ fi
32
+ [ -n "$API_KEY" ] || exit 0
33
+
34
+ # --- Helpers ---
35
+ # shellcheck disable=SC1091
36
+ . "$SCRIPT_DIR/bin/lib/artifact-id.sh"
37
+
38
+ PARALLELISM="${EGREGORE_REF_PUBLISH_PARALLELISM:-8}"
39
+
40
+ GIT_ROOT="$(git -C "$(dirname "$SOURCE_FILE")" rev-parse --show-toplevel 2>/dev/null || echo "$SCRIPT_DIR")"
41
+
42
+ # Absolute, symlink-resolved path of the source file. Used below to compare
43
+ # each resolved ref against the source and skip self-references. Using
44
+ # symlink-resolved absolute paths means `memory/` as a symlink into a sibling
45
+ # repo (and macOS's `/var` → `/private/var`) compare correctly — basename
46
+ # comparison alone would falsely skip unrelated files that happen to share
47
+ # a filename (e.g. date-prefixed handoffs, README.md, index.md).
48
+ SOURCE_ABS="$(cd "$(dirname "$SOURCE_FILE")" 2>/dev/null && pwd -P)/$(basename "$SOURCE_FILE")"
49
+
50
+ # Infer artifact type from path — mirrors egregore-artifacts/bin/cli.js inferType.
51
+ infer_type() {
52
+ local fp="$1"
53
+ case "$fp" in
54
+ */quests/*) echo "quest" ;;
55
+ */handoffs/*) echo "handoff" ;;
56
+ *) echo "document" ;;
57
+ esac
58
+ }
59
+
60
+ # Resolve a backtick-referenced path to a real file on disk.
61
+ resolve_ref() {
62
+ local ref="$1"
63
+ local src_dir
64
+ src_dir="$(dirname "$SOURCE_FILE")"
65
+ # Candidates: source file's repo-root resolution, then git root, then cwd.
66
+ local candidates=(
67
+ "$src_dir/../../$ref"
68
+ "$GIT_ROOT/$ref"
69
+ "$ref"
70
+ )
71
+ local c
72
+ for c in "${candidates[@]}"; do
73
+ if [ -f "$c" ]; then
74
+ printf '%s' "$c"
75
+ return 0
76
+ fi
77
+ done
78
+ return 1
79
+ }
80
+
81
+ publish_one() {
82
+ local ref="$1"
83
+ local resolved
84
+ resolved="$(resolve_ref "$ref")" || return 0
85
+ [ -n "$resolved" ] || return 0
86
+
87
+ # Self-ref guard: skip refs that resolve to the source file itself.
88
+ # Compared as symlink-resolved absolute paths so symlinked memory layouts
89
+ # (and unrelated files with the same basename) are handled correctly.
90
+ local resolved_abs
91
+ resolved_abs="$(cd "$(dirname "$resolved")" 2>/dev/null && pwd -P)/$(basename "$resolved")"
92
+ if [ "$resolved_abs" = "$SOURCE_ABS" ]; then
93
+ return 0
94
+ fi
95
+
96
+ local id
97
+ id="$(artifact_id_from_path "$ref")" || return 0
98
+ [ -n "$id" ] || return 0
99
+
100
+ case "$ref" in
101
+ *.md)
102
+ local type
103
+ type="$(infer_type "$ref")"
104
+ bash "$SCRIPT_DIR/bin/publish-artifact.sh" "$type" "$resolved" --id "$id" --no-references >/dev/null 2>&1 || true
105
+ ;;
106
+ *.html)
107
+ bash "$SCRIPT_DIR/bin/publish-artifact.sh" document "$resolved" --id "$id" --raw-html --no-references >/dev/null 2>&1 || true
108
+ ;;
109
+ esac
110
+ }
111
+
112
+ # --- Extract refs, dedupe, publish in parallel ---
113
+ # grep -Eo prints each match on its own line; sed strips the surrounding
114
+ # backticks; sort -u dedupes. No dependency on GNU grep -P.
115
+ REFS="$(grep -Eo '`memory/[^`[:space:]]+\.(md|html)`' "$SOURCE_FILE" 2>/dev/null \
116
+ | sed 's/^`//; s/`$//' \
117
+ | sort -u)"
118
+
119
+ [ -n "$REFS" ] || exit 0
120
+
121
+ # Bounded parallelism — cap concurrent jobs at PARALLELISM.
122
+ # On bash ≥ 4 (`wait -n`) this is rolling parallelism. On bash 3.2 (macOS
123
+ # default /bin/bash), `wait -n` is unsupported and the `|| wait` fallback
124
+ # drains the whole batch before spawning the next — effectively batch-parallel
125
+ # of size PARALLELISM. Correct in both cases, just slower on bash 3.2.
126
+ active=0
127
+ while IFS= read -r ref; do
128
+ [ -n "$ref" ] || continue
129
+ # Self-reference filtering happens inside publish_one, after the ref is
130
+ # resolved to an absolute path — see the SOURCE_ABS check there.
131
+ publish_one "$ref" &
132
+ active=$((active + 1))
133
+ if [ "$active" -ge "$PARALLELISM" ]; then
134
+ if wait -n 2>/dev/null; then
135
+ active=$((active - 1))
136
+ else
137
+ wait
138
+ active=0
139
+ fi
140
+ fi
141
+ done <<< "$REFS"
142
+
143
+ wait 2>/dev/null || true
144
+ exit 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.quest_cli "$@"
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ # Runtime-neutral shell adapter for canonical asynchronous questions.
3
+ set -euo pipefail
4
+
5
+ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
6
+ export EGREGORE_ROOT="${EGREGORE_ROOT:-$ROOT}"
7
+ export PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}"
8
+ exec python3 -m egregore_runtime.question_cli "$@"