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,318 @@
1
+ #!/usr/bin/env bash
2
+ # Compatibility shell for Egregore's Local Retriever.
3
+ # Usage:
4
+ # bash bin/search.sh query "text" [-n N] [--fast|--semantic] [--recent-days N] [--min-evidence N] [--compact] [--context-packet] [--enrich] [--all] [--new-search]
5
+ # bash bin/search.sh reindex [--embed]
6
+ # bash bin/search.sh install
7
+ # bash bin/search.sh status
8
+ # bash bin/search.sh start
9
+ # bash bin/search.sh stop
10
+ # bash bin/search.sh open memory/path/to/source.md
11
+ #
12
+ # The shell owns the established user-facing output. Retrieval infrastructure
13
+ # is isolated behind the Egregore Retriever adapter.
14
+
15
+ set -u
16
+
17
+ SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
18
+ MEM_PATH="$(readlink -f "$SCRIPT_DIR/memory" 2>/dev/null || true)"
19
+
20
+ _runtime() {
21
+ EGREGORE_ROOT="$SCRIPT_DIR" \
22
+ PYTHONPATH="$SCRIPT_DIR${PYTHONPATH:+:$PYTHONPATH}" \
23
+ python3 -m egregore_runtime.harness_cli "$@"
24
+ }
25
+
26
+ # Explicit index provisioning/rebuild remains a maintenance compatibility
27
+ # surface. Normal harness query/open/lifecycle traffic never enters this
28
+ # implementation-specific bridge.
29
+ _maintenance_runtime() {
30
+ EGREGORE_ROOT="$SCRIPT_DIR" \
31
+ PYTHONPATH="$SCRIPT_DIR${PYTHONPATH:+:$PYTHONPATH}" \
32
+ python3 -m egregore_runtime.adapters.qmd_cli "$@"
33
+ }
34
+
35
+ _result_paths() {
36
+ local line path canonical_prefix
37
+ canonical_prefix="**file:** \`memory/"
38
+ while IFS= read -r line || [ -n "$line" ]; do
39
+ path=""
40
+ if [[ "$line" == *"$canonical_prefix"* ]]; then
41
+ path="${line#*"$canonical_prefix"}"
42
+ fi
43
+ path="${path%%\`*}"
44
+ case "$path" in
45
+ *.md*) printf '%s\n' "${path%%.md*}.md" ;;
46
+ esac
47
+ done | sort -u
48
+ }
49
+
50
+ # Legacy explicit graph annotation remains available while the graph is moved
51
+ # behind its projection boundary. It is intentionally never selected by the
52
+ # default Local retrieval path.
53
+ #
54
+ # An instance whose Runtime MVP upgrade has been activated retrieves through
55
+ # Runtime/QMD exclusively: even the explicit --enrich flag makes zero graph
56
+ # calls there. The dormant graph configuration is preserved untouched for
57
+ # rollback only.
58
+ _upgrade_instance_key() {
59
+ # Mirrors egregore_runtime.upgrade.instance_key: stable org identity
60
+ # composed with the main installation path. No org_id → fail closed.
61
+ local org main gitdir
62
+ org=$(jq -r '.org_id // empty' "$SCRIPT_DIR/egregore.json" 2>/dev/null)
63
+ [ -n "$org" ] || return 1
64
+ main="$SCRIPT_DIR"
65
+ if [ -f "$SCRIPT_DIR/.git" ]; then
66
+ gitdir=$(sed -n 's/^gitdir: //p' "$SCRIPT_DIR/.git" 2>/dev/null)
67
+ case "$gitdir" in
68
+ */.git/worktrees/*) main="${gitdir%/.git/worktrees/*}" ;;
69
+ esac
70
+ fi
71
+ main=$(cd "$main" 2>/dev/null && pwd -P) || return 1
72
+ printf '%s|%s' "$org" "$main" | shasum -a 256 2>/dev/null | cut -c1-16
73
+ }
74
+
75
+ _upgraded_runtime_active() {
76
+ local key record
77
+ key=$(_upgrade_instance_key) || return 1
78
+ [ -n "$key" ] || return 1
79
+ record="${EGREGORE_UPGRADE_ROOT:-$HOME/.egregore/runtime/upgrade}/${key}/active.json"
80
+ [ -f "$record" ] || return 1
81
+ [ "$(jq -r '.retrieval // empty' "$record" 2>/dev/null)" = "runtime-qmd" ]
82
+ }
83
+
84
+ _enrich() {
85
+ local results paths params out
86
+ results=$(cat)
87
+ echo "$results"
88
+ if _upgraded_runtime_active; then
89
+ echo "↳ graph retrieval: not used by this Runtime version"
90
+ return 0
91
+ fi
92
+ paths=$(printf '%s\n' "$results" | _result_paths)
93
+ [ -z "$paths" ] && return 0
94
+ params=$(printf '%s\n' "$paths" | jq -R . | jq -sc '{paths: .}')
95
+ out=$(bash "$SCRIPT_DIR/bin/graph.sh" query "UNWIND \$paths AS fp
96
+ OPTIONAL MATCH (s:Session {filePath: fp})
97
+ OPTIONAL MATCH (a:Artifact {filePath: fp})
98
+ WITH fp, s, a WHERE s IS NOT NULL OR a IS NOT NULL
99
+ RETURN fp,
100
+ CASE WHEN s IS NOT NULL THEN coalesce(s.handoffStatus, s.status) ELSE null END AS sessionStatus,
101
+ s.handedTo AS handedTo, a.type AS artifactType,
102
+ CASE WHEN a IS NOT NULL THEN [q IN [(a)-[:PART_OF]->(qq:Quest) | qq.id] | q][0] ELSE null END AS quest" \
103
+ "$params" 2>/dev/null)
104
+ echo "$out" | jq -r '.values[]? | @tsv' 2>/dev/null | while IFS=$'\t' read -r fp sstat sto atype quest; do
105
+ local ann=""
106
+ [ -n "$sstat" ] && [ "$sstat" != "null" ] && ann="status: $sstat"
107
+ [ -n "$sto" ] && [ "$sto" != "null" ] && ann="$ann${ann:+ · }to: $sto"
108
+ [ -n "$atype" ] && [ "$atype" != "null" ] && ann="$ann${ann:+ · }artifact: $atype"
109
+ [ -n "$quest" ] && [ "$quest" != "null" ] && ann="$ann${ann:+ · }quest: $quest"
110
+ [ -n "$ann" ] && echo "↳ graph · $fp — $ann"
111
+ done
112
+ }
113
+
114
+ _banner_and_emit() {
115
+ local label="$1" t0="$2" emit="$3" out="$4" hide_results="${5:-0}"
116
+ local hits dur product surface plural="" gap actual required
117
+ if [[ "$out" == EGREGORE_OBSERVE_CONTEXT_REUSED* ]]; then
118
+ printf '⌕ Egregore · using context already compiled for this prompt · 0s\n\n'
119
+ [ "$hide_results" = 1 ] || printf '%s\n' "$out" | tail -n +2
120
+ return 0
121
+ fi
122
+ gap=$(printf '%s\n' "$out" | head -n 1)
123
+ if [[ "$gap" == EGREGORE_EVIDENCE_GAP* ]]; then
124
+ actual="${gap#*actual=}"
125
+ actual="${actual%% *}"
126
+ required="${gap#*required=}"
127
+ required="${required%% *}"
128
+ dur=$(( $(date +%s) - t0 ))
129
+ printf '⌕ Egregore · searching your organization’s memory · %s · evidence gap · %s/%s sources · %ss\n\n' \
130
+ "$label" "$actual" "$required" "$dur"
131
+ [ "$hide_results" = 1 ] || printf '%s\n' "$out" | tail -n +2
132
+ return 0
133
+ fi
134
+ hits=$(printf '%s\n' "$out" | _result_paths | wc -l | tr -d ' ')
135
+ dur=$(( $(date +%s) - t0 ))
136
+ product="Egregore"
137
+ surface="searching your organization’s memory"
138
+ if [ "$emit" = "_enrich" ] && [ "$hits" -gt 0 ]; then
139
+ product="Egregore Connect"
140
+ surface="${surface} and relationships"
141
+ fi
142
+ [ "$hits" != "1" ] && plural="s"
143
+ local line="⌕ ${product} · ${surface} · ${label} · ${hits} hit${plural} · ${dur}s"
144
+ if [ -t 1 ]; then
145
+ printf '\033[1;38;5;30m%s\033[0m\n\n' "$line"
146
+ else
147
+ printf '%s\n\n' "$line"
148
+ fi
149
+ [ "$hide_results" = 1 ] || printf '%s\n' "$out" | "$emit"
150
+ }
151
+
152
+ _context_packet_path() {
153
+ local session context_dir
154
+ # Same precedence as the Python runtime's session identity: an explicit
155
+ # EGREGORE_SESSION_ID wins, the session file is the fallback.
156
+ session="${EGREGORE_SESSION_ID:-}"
157
+ [ -n "$session" ] || session=$(cat "$SCRIPT_DIR/.egregore-session-id" 2>/dev/null || true)
158
+ session=$(printf '%s' "$session" | tr -cd 'A-Za-z0-9_.-')
159
+ [ -n "$session" ] || return 1
160
+ context_dir="${TMPDIR:-/tmp}/egregore-retrieval-context"
161
+ mkdir -p "$context_dir" 2>/dev/null || return 1
162
+ chmod 700 "$context_dir" 2>/dev/null || true
163
+ printf '%s/%s.context\n' "$context_dir" "$session"
164
+ }
165
+
166
+ cmd_query() {
167
+ local mode="lex+vec" label="hybrid" n=6 enrich=0 all=0 new_search=0 recent_days="" min_evidence=1 compact=0 context_packet=0
168
+ local -a words=()
169
+ while [ $# -gt 0 ]; do
170
+ case "$1" in
171
+ --fast) mode="lex"; label="keyword" ;;
172
+ --semantic) mode="vec"; label="semantic" ;;
173
+ --enrich) enrich=1 ;;
174
+ --no-enrich) enrich=0 ;;
175
+ --all) all=1 ;;
176
+ --new-search) new_search=1 ;;
177
+ --recent-days)
178
+ [ $# -ge 2 ] || { echo "search: --recent-days requires a positive integer" >&2; return 1; }
179
+ recent_days="$2"
180
+ shift
181
+ ;;
182
+ --min-evidence)
183
+ [ $# -ge 2 ] || { echo "search: --min-evidence requires a positive integer" >&2; return 1; }
184
+ min_evidence="$2"
185
+ shift
186
+ ;;
187
+ --compact) compact=1 ;;
188
+ --context-packet) context_packet=1 ;;
189
+ -n)
190
+ [ $# -ge 2 ] || { echo "search: -n requires a positive integer" >&2; return 1; }
191
+ n="$2"
192
+ shift
193
+ ;;
194
+ *) words+=("$1") ;;
195
+ esac
196
+ shift
197
+ done
198
+ local q="${words[*]}"
199
+ if [ -z "$q" ]; then
200
+ echo "usage: bash bin/search.sh query \"text\" [-n N] [--fast|--semantic] [--recent-days N] [--min-evidence N] [--compact] [--context-packet] [--all] [--new-search]" >&2
201
+ return 1
202
+ fi
203
+ [[ "$n" =~ ^[1-9][0-9]*$ ]] || { echo "search: -n requires a positive integer" >&2; return 1; }
204
+ [ -z "$recent_days" ] || [[ "$recent_days" =~ ^[1-9][0-9]*$ ]] || {
205
+ echo "search: --recent-days requires a positive integer" >&2
206
+ return 1
207
+ }
208
+ [[ "$min_evidence" =~ ^[1-9][0-9]*$ ]] || {
209
+ echo "search: --min-evidence requires a positive integer" >&2
210
+ return 1
211
+ }
212
+ [ "$all" = 1 ] && n=10000
213
+
214
+ local -a args=(query --task "$q" --mode "$mode" --limit "$n")
215
+ [ "$new_search" = 1 ] && args+=(--new-search)
216
+ [ -n "$recent_days" ] && args+=(--recent-days "$recent_days")
217
+ args+=(--min-evidence "$min_evidence")
218
+ [ "$compact" = 1 ] && args+=(--compact)
219
+ case "$mode" in
220
+ lex) args+=(--lex "$q") ;;
221
+ vec) args+=(--vec "$q") ;;
222
+ lex+vec) args+=(--lex "$q" --vec "$q") ;;
223
+ esac
224
+
225
+ local t0 out emit="cat" query_rc
226
+ t0=$(date +%s)
227
+ out=$(_runtime "${args[@]}" 2>&1)
228
+ query_rc=$?
229
+ if [ "$query_rc" -ne 0 ]; then
230
+ {
231
+ echo "⚠ Egregore Runtime retrieval failed."
232
+ printf '%s\n' "$out" | tail -3 | sed 's/^/ /'
233
+ echo "This is a Runtime failure — do not fall back to manual scanning (rg/grep/ls over memory), a global qmd, npx, or graph."
234
+ echo "Diagnose with: bash bin/search.sh readiness · report with /issue · stop here."
235
+ } >&2
236
+ return "$query_rc"
237
+ fi
238
+ [ "$enrich" = 1 ] && emit="_enrich"
239
+ if [ "$context_packet" = 1 ]; then
240
+ local packet
241
+ packet=$(_context_packet_path) || {
242
+ echo "search: context packet requires an active Egregore session" >&2
243
+ return 1
244
+ }
245
+ umask 077
246
+ printf '%s\n' "$out" > "$packet"
247
+ _banner_and_emit "$label" "$t0" "$emit" "$out" 1
248
+ else
249
+ _banner_and_emit "$label" "$t0" "$emit" "$out"
250
+ fi
251
+ }
252
+
253
+ cmd_reindex() {
254
+ local -a args=(update)
255
+ [ "${1:-}" = "--embed" ] && args+=(--embed)
256
+ _maintenance_runtime "${args[@]}"
257
+ }
258
+
259
+ cmd_status() {
260
+ _runtime status
261
+ echo ""
262
+ echo "canonical memory: $MEM_PATH"
263
+ }
264
+
265
+ case "${1:-}" in
266
+ query) shift; cmd_query "$@" ;;
267
+ reindex) shift; cmd_reindex "$@" ;;
268
+ install) shift; _maintenance_runtime install "$@" ;;
269
+ status) shift; cmd_status ;;
270
+ readiness) shift; _runtime readiness "$@" ;;
271
+ handoffs)
272
+ shift
273
+ if ! _runtime handoffs "$@"; then
274
+ {
275
+ echo "⚠ Egregore Runtime lifecycle lookup failed."
276
+ echo "This is a Runtime failure — do not fall back to manual scanning (ls/rg/grep over memory), a semantic re-query, or graph."
277
+ echo "Diagnose with: bash bin/search.sh readiness · report with /issue · stop here."
278
+ } >&2
279
+ exit 1
280
+ fi
281
+ ;;
282
+ start) shift; _runtime start "$@" ;;
283
+ stop) shift; _runtime stop "$@" ;;
284
+ open)
285
+ shift
286
+ OPEN_PACKET=0; OPEN_PATH=""
287
+ for _arg in "$@"; do
288
+ case "$_arg" in
289
+ --context-packet) OPEN_PACKET=1 ;;
290
+ *) OPEN_PATH="$_arg" ;;
291
+ esac
292
+ done
293
+ if [ "$OPEN_PACKET" = 1 ]; then
294
+ # Claude: full documents attach privately through the PostToolUse
295
+ # packet instead of splashing raw markdown into the transcript —
296
+ # the same contract query --context-packet already follows.
297
+ packet=$(_context_packet_path) || {
298
+ echo "search: context packet requires an active Egregore session" >&2
299
+ exit 1
300
+ }
301
+ umask 077
302
+ if _runtime open "$OPEN_PATH" > "$packet" 2>"$packet.err"; then
303
+ rm -f "$packet.err"
304
+ echo "↳ opened $OPEN_PATH · content attached privately"
305
+ else
306
+ cat "$packet.err" >&2 2>/dev/null
307
+ rm -f "$packet" "$packet.err"
308
+ exit 1
309
+ fi
310
+ else
311
+ _runtime open "$OPEN_PATH"
312
+ fi
313
+ ;;
314
+ *)
315
+ echo "usage: bash bin/search.sh {query|reindex|install|start|stop|status|readiness|open}" >&2
316
+ exit 1
317
+ ;;
318
+ esac
@@ -0,0 +1,220 @@
1
+ #!/usr/bin/env bash
2
+ # session-autosave.sh — save non-coding session work without an explicit /save.
3
+ #
4
+ # Terminal-close is the design constraint: no single "session end" event is
5
+ # reliable (people just close the window), so durability comes from three
6
+ # overlapping triggers:
7
+ # - Stop hook, debounced (Claude Code): saves DURING the session, after a
8
+ # turn completes — a killed terminal loses at most the debounce window.
9
+ # - Session-start sweep (--sweep, all runtimes): the next launch on this
10
+ # machine rescues leftovers in the main checkout and lingering worktrees.
11
+ # - SessionEnd hook / agent.sh wrap (Codex, Pi): immediate save on clean exit.
12
+ #
13
+ # Gate: acts ONLY when every pending change — uncommitted files AND commits
14
+ # ahead of origin/develop — is non-coding per bin/lib/noncode.sh. Any code in
15
+ # the pending set → exit silently; code always goes through explicit /save and
16
+ # review. Never auto-commits half-finished code.
17
+ #
18
+ # When the gate passes, delegates commit→push→PR→auto-merge to
19
+ # handoff-save-egregore.sh (--kind autosave), and pushes the memory repo.
20
+ #
21
+ # Usage:
22
+ # session-autosave.sh [--dir <repo-dir>] [--author <name>]
23
+ # [--debounce <sec>] [--min-idle <sec>] [--sweep]
24
+ # --debounce skip if this dir was autosaved less than <sec> ago (Stop hook)
25
+ # --min-idle skip if any dirty file was modified less than <sec> ago
26
+ # (don't commit prose someone is actively typing)
27
+ # --sweep iterate main checkout + .claude/worktrees/* (session start)
28
+ # (Hook invocations pass nothing; stdin JSON supplies cwd.)
29
+
30
+ set -uo pipefail
31
+
32
+ # shellcheck source=bin/lib/git-message.sh
33
+ . "$(cd "$(dirname "$0")" && pwd)/lib/git-message.sh" 2>/dev/null || true
34
+ type egregore_commit >/dev/null 2>&1 || egregore_commit() {
35
+ local gd="$1" m="$3"; shift 3; git -C "$gd" commit -m "$m" "$@"
36
+ }
37
+
38
+ DIR=""
39
+ AUTHOR=""
40
+ DEBOUNCE=0
41
+ MIN_IDLE=0
42
+ SWEEP=0
43
+ while [ $# -gt 0 ]; do
44
+ case "$1" in
45
+ --dir) DIR="${2:-}"; shift 2 ;;
46
+ --author) AUTHOR="${2:-}"; shift 2 ;;
47
+ --debounce) DEBOUNCE="${2:-0}"; shift 2 ;;
48
+ --min-idle) MIN_IDLE="${2:-0}"; shift 2 ;;
49
+ --sweep) SWEEP=1; shift ;;
50
+ *) shift ;;
51
+ esac
52
+ done
53
+
54
+ SCRIPT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
55
+
56
+ # --- Sweep mode: rescue abandoned checkouts, then exit -------------------
57
+ if [ "$SWEEP" = "1" ]; then
58
+ # Let session-start's own git syncs settle before touching the checkout.
59
+ sleep 15
60
+ for d in "$SCRIPT_ROOT" "$SCRIPT_ROOT"/.claude/worktrees/*/; do
61
+ d="${d%/}"
62
+ [ -d "$d" ] || continue
63
+ # min-idle protects live sessions in other terminals: never commit files
64
+ # someone touched in the last 10 minutes. debounce dedupes concurrent
65
+ # session launches sweeping the same dirs.
66
+ bash "$0" --dir "$d" --min-idle 600 --debounce 120 >/dev/null 2>&1 || true
67
+ done
68
+ exit 0
69
+ fi
70
+
71
+ # Hook invocations deliver JSON on stdin (cwd = where the session worked).
72
+ if [ -z "$DIR" ] && [ ! -t 0 ]; then
73
+ HOOK_INPUT=$(cat 2>/dev/null || true)
74
+ DIR=$(echo "$HOOK_INPUT" | jq -r '.cwd // empty' 2>/dev/null || true)
75
+ fi
76
+
77
+ [ -n "$DIR" ] && [ -d "$DIR" ] || DIR="$SCRIPT_ROOT"
78
+ cd "$DIR" 2>/dev/null || exit 0
79
+ git rev-parse --git-dir >/dev/null 2>&1 || exit 0
80
+
81
+ # --- Debounce (per-dir stamp) --------------------------------------------
82
+ # NB: `cmd | cut || fallback` doesn't work — cut succeeds on empty input, so
83
+ # the fallback never fires and every dir collapses to one stamp (macOS has
84
+ # md5, not md5sum). Group the hash commands, then cut.
85
+ DIR_HASH=$( { md5sum <<<"$DIR" 2>/dev/null || md5 -q -s "$DIR" 2>/dev/null || echo default; } | cut -c1-8 )
86
+ STAMP="/tmp/.egregore-autosave-${DIR_HASH}"
87
+ if [ "$DEBOUNCE" -gt 0 ] && [ -f "$STAMP" ]; then
88
+ if stat -c %Y "$STAMP" >/dev/null 2>&1; then
89
+ LAST=$(stat -c %Y "$STAMP")
90
+ else
91
+ LAST=$(stat -f %m "$STAMP" 2>/dev/null || echo 0)
92
+ fi
93
+ case "$LAST" in ""|*[!0-9]*) LAST=0 ;; esac
94
+ [ $(( $(date +%s) - LAST )) -lt "$DEBOUNCE" ] && exit 0
95
+ fi
96
+ touch "$STAMP" 2>/dev/null || true
97
+
98
+ # shellcheck source=bin/lib/noncode.sh
99
+ . "$SCRIPT_ROOT/bin/lib/noncode.sh" 2>/dev/null || exit 0
100
+
101
+ # --- Per-user consent settings (bin/autosave.sh / the /autosave skill) ----
102
+ # enabled=false → fully off, nothing captured ambiently
103
+ # scope=handoffs → memory repo only; the core repo is never touched ambiently
104
+ # publish=gate → PR is opened but NEVER merged without the user's word
105
+ # NB: jq's `//` swallows false (falsy) — `.k // empty` on k:false yields the
106
+ # default, silently re-enabling autosave. Test key presence instead (this is
107
+ # the same trap that broke auto_update:false).
108
+ _as_conf() { # key default
109
+ local v
110
+ v=$(jq -r "if (.$1 != null) then (.$1|tostring) else empty end" "$DIR/.egregore-state.json" 2>/dev/null)
111
+ [ -n "$v" ] || v=$(jq -r "if (.$1 != null) then (.$1|tostring) else empty end" "$SCRIPT_ROOT/.egregore-state.json" 2>/dev/null)
112
+ [ -n "$v" ] && echo "$v" || echo "$2"
113
+ }
114
+ # Autosave is an opt-in experiment: enabled defaults to FALSE. Nothing is
115
+ # captured ambiently until the user runs `/autosave on` (or autosave.sh on).
116
+ AS_ENABLED=$(_as_conf autosave_enabled false)
117
+ AS_SCOPE=$(_as_conf autosave_scope all)
118
+ AS_PUBLISH=$(_as_conf autosave_publish gate)
119
+ [ "$AS_ENABLED" = "true" ] || exit 0
120
+
121
+ if [ -z "$AUTHOR" ]; then
122
+ AUTHOR=$(jq -r '.github_username // .name // empty' "$DIR/.egregore-state.json" 2>/dev/null || true)
123
+ [ -n "$AUTHOR" ] || AUTHOR=$(jq -r '.github_username // .name // empty' "$SCRIPT_ROOT/.egregore-state.json" 2>/dev/null || true)
124
+ [ -n "$AUTHOR" ] || AUTHOR=$(git config user.name 2>/dev/null | tr '[:upper:] ' '[:lower:]-' || true)
125
+ [ -n "$AUTHOR" ] || AUTHOR="egregore"
126
+ fi
127
+
128
+ # --- Memory repo: markdown by definition, push straight to main ----------
129
+ if git -C "$DIR/memory" rev-parse --git-dir >/dev/null 2>&1; then
130
+ if [ -n "$(git -C "$DIR/memory" status --porcelain 2>/dev/null)" ]; then
131
+ git -C "$DIR/memory" add -A >/dev/null 2>&1 || true
132
+ egregore_commit "$DIR/memory" "$DIR" "chore(autosave): save session work" --quiet 2>/dev/null || true
133
+ fi
134
+ if [ -n "$(git -C "$DIR/memory" log origin/main..HEAD --oneline 2>/dev/null)" ]; then
135
+ for _try in 1 2 3; do
136
+ if git -C "$DIR/memory" pull --rebase origin main --quiet 2>/dev/null \
137
+ && git -C "$DIR/memory" push origin main --quiet 2>/dev/null; then
138
+ break
139
+ fi
140
+ sleep 1
141
+ done
142
+ fi
143
+ fi
144
+
145
+ # scope=handoffs: memory (above) is the handoff channel; stop before the
146
+ # core repo — it is never captured ambiently under this scope.
147
+ [ "$AS_SCOPE" = "handoffs" ] && exit 0
148
+
149
+ # --- Core repo gate: everything pending must be non-coding ---------------
150
+ # -uall expands untracked dirs to individual files: a collapsed "docs/" entry
151
+ # would defeat both the classifier (code nested under a content dir) and the
152
+ # idle guard (directory mtime, not file mtime).
153
+ DIRTY_PATHS=$(git status --porcelain -uall 2>/dev/null | cut -c4- | sed 's/.* -> //' | sed '/^$/d')
154
+ PENDING=$(
155
+ {
156
+ printf '%s\n' "$DIRTY_PATHS"
157
+ git diff origin/develop...HEAD --name-only 2>/dev/null
158
+ } | sed '/^$/d'
159
+ )
160
+ [ -n "$PENDING" ] || exit 0
161
+
162
+ BLOCKER=$(printf '%s\n' "$PENDING" | noncode_filter)
163
+ if [ -n "$BLOCKER" ]; then
164
+ # Code in the pending set — leave it for an explicit /save + review.
165
+ exit 0
166
+ fi
167
+
168
+ # --- Idle guard: don't commit files someone is actively editing ----------
169
+ if [ "$MIN_IDLE" -gt 0 ] && [ -n "$DIRTY_PATHS" ]; then
170
+ NOW=$(date +%s)
171
+ while IFS= read -r f; do
172
+ [ -e "$f" ] || continue
173
+ M=$(stat -f %m "$f" 2>/dev/null || stat -c %Y "$f" 2>/dev/null || echo 0)
174
+ [ $(( NOW - M )) -lt "$MIN_IDLE" ] && exit 0
175
+ done <<< "$DIRTY_PATHS"
176
+ fi
177
+
178
+ ORIG_BRANCH=$(git branch --show-current 2>/dev/null || echo "")
179
+
180
+ bash "$SCRIPT_ROOT/bin/handoff-save-egregore.sh" "$AUTHOR" \
181
+ "session content $(date +%Y-%m-%d)" --kind autosave --repo-dir "$DIR" \
182
+ --branch-suffix "$DIR_HASH" --publish "$AS_PUBLISH" \
183
+ >/dev/null 2>&1 || true
184
+
185
+ # Tell the user what just happened. Under the Stop hook this line surfaces in
186
+ # the Claude Code UI; sweep/SessionEnd invocations discard stdout (their trail
187
+ # is the ledger, reported by the next greeting).
188
+ LEDGER="${EGREGORE_AUTOSAVE_LOG:-$HOME/.egregore/autosave.log}"
189
+ LAST=$(grep -F "|autosave|$DIR|" "$LEDGER" 2>/dev/null | tail -1 || true)
190
+ if [ -n "$LAST" ]; then
191
+ TS=$(echo "$LAST" | cut -d'|' -f1)
192
+ PR=$(echo "$LAST" | cut -d'|' -f5)
193
+ RESULT=$(echo "$LAST" | cut -d'|' -f6)
194
+ NF=$(echo "$LAST" | cut -d'|' -f7)
195
+ NOW_EPOCH=$(date +%s)
196
+ TS_EPOCH=$(date -u -j -f %Y-%m-%dT%H:%M:%SZ "$TS" +%s 2>/dev/null || date -u -d "$TS" +%s 2>/dev/null || echo 0)
197
+ if [ $(( NOW_EPOCH - TS_EPOCH )) -lt 120 ]; then
198
+ case "$RESULT" in
199
+ merged) echo "⟲ auto-saved: $NF non-coding file(s) → develop (PR #$PR merged)" ;;
200
+ staged) echo "⟲ auto-saved: $NF non-coding file(s) → PR #$PR — yours to merge (say \"merge my auto-saves\" or /autosave)" ;;
201
+ open) echo "⟲ auto-saved: $NF non-coding file(s) → PR #$PR (merge pending)" ;;
202
+ *) echo "⟲ auto-saved: $NF non-coding file(s) → branch pushed (PR pending)" ;;
203
+ esac
204
+ fi
205
+ fi
206
+
207
+ # The helper branches off protected branches before committing. If this
208
+ # checkout was on develop/main (e.g. the main checkout during a sweep),
209
+ # restore it so the next session doesn't land on a stray autosave branch.
210
+ case "$ORIG_BRANCH" in
211
+ develop|main|master)
212
+ CUR=$(git branch --show-current 2>/dev/null || echo "")
213
+ if [ "$CUR" != "$ORIG_BRANCH" ]; then
214
+ git checkout "$ORIG_BRANCH" --quiet 2>/dev/null || true
215
+ git pull --ff-only origin "$ORIG_BRANCH" --quiet 2>/dev/null || true
216
+ fi
217
+ ;;
218
+ esac
219
+
220
+ exit 0