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; }
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env bash
2
+ # WorktreeCreate hook — replaces EnterWorktree's default behavior.
3
+ # Receives {"name": "<slug>"} on stdin. Must print absolute worktree path to stdout.
4
+ # All diagnostic output goes to stderr or /dev/null — stdout is ONLY for the path.
5
+ # Must complete in under 2 seconds.
6
+
7
+ # No set -e — a jq failure must not crash the hook
8
+ set -o pipefail
9
+
10
+ # --- Read input ---
11
+ INPUT=$(cat /dev/stdin 2>/dev/null || echo '{}')
12
+ SLUG=$(echo "$INPUT" | jq -r '.name // empty' 2>/dev/null)
13
+
14
+ if [ -z "$SLUG" ]; then
15
+ echo "Error: no name provided" >&2
16
+ exit 1
17
+ fi
18
+
19
+ # --- Resolve main repo root ---
20
+ # CLAUDE_PROJECT_DIR may point to main repo or a worktree
21
+ REPO_ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
22
+ if [ -f "$REPO_ROOT/.git" ]; then
23
+ # In a worktree — trace back to main repo
24
+ WT_GITDIR=$(sed 's/^gitdir: //' "$REPO_ROOT/.git" 2>/dev/null)
25
+ REPO_ROOT=$(cd "$WT_GITDIR/../../.." 2>/dev/null && pwd)
26
+ fi
27
+
28
+ # --- Read author ---
29
+ STATE_FILE="$REPO_ROOT/.egregore-state.json"
30
+ AUTHOR=$(jq -r '.github_username // .display_name // "unknown"' "$STATE_FILE" 2>/dev/null) || AUTHOR="unknown"
31
+
32
+ # --- Branch and worktree names ---
33
+ BRANCH="dev/${AUTHOR}/${SLUG}"
34
+ WT_PATH="$REPO_ROOT/.claude/worktrees/${SLUG}"
35
+
36
+ # --- Resolve and fetch the configured base branch ---
37
+ SCRIPT_DIR="$REPO_ROOT"
38
+ CONFIG="$REPO_ROOT/egregore.json"
39
+ if [ -f "$REPO_ROOT/bin/lib/config.sh" ]; then
40
+ # shellcheck source=bin/lib/config.sh
41
+ source "$REPO_ROOT/bin/lib/config.sh"
42
+ fi
43
+ if ! BASE_BRANCH=$(_get_base_branch); then
44
+ echo "Error: could not resolve the configured base branch" >&2
45
+ exit 1
46
+ fi
47
+ git -C "$REPO_ROOT" fetch origin "$BASE_BRANCH" --quiet 2>/dev/null || true
48
+
49
+ # --- Create branch (idempotent — skip if exists) ---
50
+ if ! git -C "$REPO_ROOT" show-ref --verify --quiet "refs/heads/$BRANCH" 2>/dev/null; then
51
+ # A task branch starts at the integration branch but must never track it.
52
+ # Otherwise `git push` can target origin/$BASE_BRANCH (especially when the
53
+ # user's push.default is `upstream`) before the first explicit task push.
54
+ git -C "$REPO_ROOT" branch --no-track "$BRANCH" "origin/$BASE_BRANCH" >/dev/null 2>&1 || {
55
+ echo "Error: failed to create branch $BRANCH" >&2
56
+ exit 1
57
+ }
58
+ fi
59
+
60
+ # --- Handle stale worktree at same path ---
61
+ if [ -d "$WT_PATH" ]; then
62
+ git -C "$REPO_ROOT" worktree remove "$WT_PATH" --force 2>/dev/null || rm -rf "$WT_PATH" 2>/dev/null
63
+ git -C "$REPO_ROOT" worktree prune 2>/dev/null || true
64
+ fi
65
+
66
+ # --- Create worktree on our branch ---
67
+ mkdir -p "$REPO_ROOT/.claude/worktrees" 2>/dev/null
68
+ git -C "$REPO_ROOT" worktree add "$WT_PATH" "$BRANCH" --quiet 2>/dev/null || {
69
+ echo "Error: failed to create worktree at $WT_PATH" >&2
70
+ exit 1
71
+ }
72
+
73
+ # --- Symlinks (same as worktree.sh setup) ---
74
+ # Memory — may be a symlink (follow to its target) or a real directory.
75
+ MEMORY_TARGET=""
76
+ if [ -L "$REPO_ROOT/memory" ]; then
77
+ MEMORY_TARGET=$(realpath "$REPO_ROOT/memory" 2>/dev/null)
78
+ elif [ -d "$REPO_ROOT/memory" ]; then
79
+ MEMORY_TARGET="$REPO_ROOT/memory"
80
+ fi
81
+ if [ -n "$MEMORY_TARGET" ] && [ -d "$MEMORY_TARGET" ]; then
82
+ ln -sfn "$MEMORY_TARGET" "$WT_PATH/memory"
83
+ fi
84
+
85
+ # .env
86
+ [ -f "$REPO_ROOT/.env" ] && ln -sfn "$REPO_ROOT/.env" "$WT_PATH/.env"
87
+
88
+ # .egregore-state.json
89
+ [ -f "$REPO_ROOT/.egregore-state.json" ] && ln -sfn "$REPO_ROOT/.egregore-state.json" "$WT_PATH/.egregore-state.json"
90
+
91
+ # .egregore-session-id
92
+ [ -f "$REPO_ROOT/.egregore-session-id" ] && ln -sfn "$REPO_ROOT/.egregore-session-id" "$WT_PATH/.egregore-session-id"
93
+
94
+ # egregore.json
95
+ [ -f "$REPO_ROOT/egregore.json" ] && [ ! -f "$WT_PATH/egregore.json" ] && ln -sfn "$REPO_ROOT/egregore.json" "$WT_PATH/egregore.json"
96
+
97
+ # --- Compute boundary for worktree (so isolation hook works) ---
98
+ # session-start.sh doesn't re-run for worktrees, so we compute it here.
99
+ HASH=$(echo -n "$WT_PATH" | md5 2>/dev/null || echo -n "$WT_PATH" | md5sum 2>/dev/null | cut -d' ' -f1)
100
+ BOUNDARY_FILE="/tmp/egregore-boundary-${HASH}.json"
101
+ MEMORY_DIR=""
102
+ [ -L "$WT_PATH/memory" ] && MEMORY_DIR=$(realpath "$WT_PATH/memory" 2>/dev/null || true)
103
+ # Managed repos: include main repo (worktree symlinks resolve there) + sibling repos
104
+ MANAGED_REPOS_JSON="[\"$REPO_ROOT\""
105
+ PARENT_DIR="$(dirname "$REPO_ROOT")"
106
+ _repos=$(jq -r '(.repos[]? // empty) | if type == "object" then .name else . end' "$WT_PATH/egregore.json" 2>/dev/null || true)
107
+ for _r in $_repos; do
108
+ [[ "$_r" == *".."* ]] && continue
109
+ _resolved=$(realpath "$PARENT_DIR/$_r" 2>/dev/null || true)
110
+ [ -z "$_resolved" ] && continue
111
+ MANAGED_REPOS_JSON="$MANAGED_REPOS_JSON,\"$_resolved\""
112
+ done
113
+ MANAGED_REPOS_JSON="$MANAGED_REPOS_JSON]"
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.
118
+ DENIED_JSON="[]"
119
+ REGISTRY="$HOME/.egregore/instances.json"
120
+ if [ -f "$REGISTRY" ]; then
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 '{}')
134
+ fi
135
+ jq -n \
136
+ --arg project_dir "$WT_PATH" \
137
+ --arg memory_dir "$MEMORY_DIR" \
138
+ --argjson managed_repos "$MANAGED_REPOS_JSON" \
139
+ --argjson denied_paths "$DENIED_JSON" \
140
+ --argjson inherited "$POSTURE_JSON" \
141
+ '{project_dir: $project_dir, memory_dir: $memory_dir, managed_repos: $managed_repos, denied_paths: $denied_paths} + $inherited' \
142
+ > "$BOUNDARY_FILE.tmp" 2>/dev/null && mv "$BOUNDARY_FILE.tmp" "$BOUNDARY_FILE" 2>/dev/null || true
143
+
144
+ # --- Output the worktree path (ONLY stdout line) ---
145
+ echo "$WT_PATH"
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env bash
2
+ # WorktreeRemove hook — handles cleanup when a worktree is removed.
3
+ # Receives {"worktree_path": "<path>"} on stdin. Best-effort, always exit 0.
4
+
5
+ INPUT=$(cat /dev/stdin 2>/dev/null || echo '{}')
6
+ WT_PATH=$(echo "$INPUT" | jq -r '.worktree_path // empty' 2>/dev/null)
7
+
8
+ if [ -z "$WT_PATH" ] || [ ! -d "$WT_PATH" ]; then
9
+ exit 0
10
+ fi
11
+
12
+ # --- Resolve main repo for git operations ---
13
+ REPO_ROOT="${CLAUDE_PROJECT_DIR:-}"
14
+ if [ -z "$REPO_ROOT" ] || [ -f "$REPO_ROOT/.git" ]; then
15
+ # In a worktree or no CLAUDE_PROJECT_DIR — trace from the worktree path
16
+ if [ -f "$WT_PATH/.git" ]; then
17
+ WT_GITDIR=$(sed 's/^gitdir: //' "$WT_PATH/.git" 2>/dev/null)
18
+ REPO_ROOT=$(cd "$WT_GITDIR/../../.." 2>/dev/null && pwd) || REPO_ROOT=""
19
+ fi
20
+ fi
21
+
22
+ # --- Remove from instance registry ---
23
+ REGISTRY="$HOME/.egregore/instances.json"
24
+ if [ -f "$REGISTRY" ]; then
25
+ RESOLVED_WT=$(realpath "$WT_PATH" 2>/dev/null || echo "$WT_PATH")
26
+ UPDATED=$(jq --arg p "$RESOLVED_WT" '[.[] | select(.path != $p)]' "$REGISTRY" 2>/dev/null)
27
+ if [ -n "$UPDATED" ]; then
28
+ echo "$UPDATED" > "$REGISTRY.tmp" && mv "$REGISTRY.tmp" "$REGISTRY"
29
+ fi
30
+ fi
31
+
32
+ # --- Remove worktree ---
33
+ if [ -n "$REPO_ROOT" ] && [ -d "$REPO_ROOT/.git" ]; then
34
+ git -C "$REPO_ROOT" worktree remove "$WT_PATH" --force 2>/dev/null || true
35
+ git -C "$REPO_ROOT" worktree prune 2>/dev/null || true
36
+ else
37
+ # Fallback: just remove the directory
38
+ rm -rf "$WT_PATH" 2>/dev/null || true
39
+ fi
40
+
41
+ # --- Clean up stale marker files ---
42
+ for MARKER_FILE in "$HOME/.egregore"/worktree-cleanup-*.marker; do
43
+ [ -f "$MARKER_FILE" ] || continue
44
+ MARKER_PATH=$(cat "$MARKER_FILE" 2>/dev/null)
45
+ if [ "$MARKER_PATH" = "$WT_PATH" ] || [ ! -d "$MARKER_PATH" ]; then
46
+ rm -f "$MARKER_FILE" 2>/dev/null || true
47
+ fi
48
+ done
49
+
50
+ exit 0