elanous 0.2.6 → 0.2.8

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 (517) hide show
  1. package/.env.example +10 -7
  2. package/README.md +4 -0
  3. package/apps/pwa/out/404/index.html +1 -1
  4. package/apps/pwa/out/404.html +1 -1
  5. package/apps/pwa/out/_next/static/chunks/1105-c473ed46272fba79.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/1201-09613bce624467c0.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1377-1efeffbbac0963ff.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/1470.98a6ab61ccb4131c.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/216-5acd01cbde4acda7.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/2330-c2f07246c8788af1.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/{3995-bee512a7063036ce.js → 2375-cb6debea56cce4fb.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/2415.ed6428ff334c7ce2.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/2929-617f1e66a55be184.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/2977-e38442e86289f1d3.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/2982-2a2df543be3d2e5a.js +25 -0
  16. package/apps/pwa/out/_next/static/chunks/{8d0d9faf-97887ff99713b84e.js → 2ea96958-e8c7e112de50b067.js} +1 -1
  17. package/apps/pwa/out/_next/static/chunks/{5329.8b7e4bca684b6eec.js → 3403.4bc97b4066945a94.js} +2 -2
  18. package/apps/pwa/out/_next/static/chunks/3441-a1dd4acfeda14488.js +1 -0
  19. package/apps/pwa/out/_next/static/chunks/371-4ad6af55dad02ced.js +1 -0
  20. package/apps/pwa/out/_next/static/chunks/4114-3e63117452378807.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/{7633.0654fe6ea259c1ee.js → 4323.c5dfb6f503304775.js} +1 -1
  22. package/apps/pwa/out/_next/static/chunks/4836-3084c58c1725a40b.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/{2984-977cfa339fcd65a5.js → 5080-1613752891fcadb4.js} +3 -3
  24. package/apps/pwa/out/_next/static/chunks/5609-012bb3557211f07e.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/{763-7d0e1913b5074e98.js → 5791-bb82743fa6299562.js} +1 -1
  26. package/apps/pwa/out/_next/static/chunks/{4240-7153881b0b377306.js → 6062-73e68343a9814f6a.js} +1 -1
  27. package/apps/pwa/out/_next/static/chunks/6090-85a3f05f954e5697.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/6284-69db415193d5f8bd.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/6320-baac91d68843a9a6.js +1 -0
  30. package/apps/pwa/out/_next/static/chunks/6416-505ba707cacafbba.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/6725-68ab7cc0b1faf00d.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/6998-a654fe5c58271600.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/7032-f4ef698518fba61c.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/7647.2fcd30d894d5ee30.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/7673-2eda1507d38dadb8.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/7990-e12efba616f46e03.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/{91ff6dda-3b33d42d20657429.js → 8046cadf-211ca3c0e00f2b72.js} +1 -1
  38. package/apps/pwa/out/_next/static/chunks/8067-d976b441a104ab74.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/8142-744998d65d7bb17e.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/8519-5632377cce994f86.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/8619-4365e03a2862830f.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/8894-7317998f6cb97d8c.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/920-f7dceb78f1c585ef.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/9454-a3e0953307216c58.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/9651-3cd291a6fa1370d2.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/9740-8f5ff96c522b5f55.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/ae787e4c-f2998de7f1ba72a4.js +1 -0
  48. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-859cea1570b6227a.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/app/approvals/page-9aa47b0bc6d570ff.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f4d2ecbbae6088d6.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/board/page-2053e49930c82748.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/botlab/page-d4b6df905f185055.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/bots/page-a70ba27c33003dd0.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/app/chat/page-186fc6952f027acc.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/app/consult/page-18166f885d831d3e.js +1 -0
  56. package/apps/pwa/out/_next/static/chunks/app/control/page-1c9d6cfe68b121c2.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/app/design-check/page-cbbe03c0da7b081a.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/app/editor/page-c108ff1fdb665c97.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/app/exec/page-147a328753d983e2.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/app/field/page-799395a9df7d95aa.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/app/healthz/route-859cea1570b6227a.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/app/intake/page-6a8158b71d1fe9d7.js +1 -0
  63. package/apps/pwa/out/_next/static/chunks/app/layout-9567560270857531.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/app/live/page-e7ed3d010153d818.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/app/market/page-c0c0d19d51342d3e.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2e002ad8faa43291.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/app/morning/page-b672e02e4bec8deb.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/app/not-found-1ba4a5d857276334.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/app/observatory/page-9db2226f38c542fb.js +1 -0
  70. package/apps/pwa/out/_next/static/chunks/app/page-70ee65f5f7a151dc.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/app/reflection/page-0bb8e43203efb23b.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-092e1bcf27d751cc.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/app/sessions/page-eb52580c4b75b905.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-7464c1987dd76e6d.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/app/settings/page-e573437b0a1c728f.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-294300625e49e4d3.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/app/setup/layout-859cea1570b6227a.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/app/setup/page-085847b088675978.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/app/share/page-9fe9d38c36999eb4.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/app/showroom/page-d8ab4d1489223459.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/app/tasks/page-6141f67f531d8b6a.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/app/term/page-295a02b1026b8255.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/app/trace/page-1eb9a0e1e054209d.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/app/vault/page-82efa177a30f3741.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-d0be51cec4f62606.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/app/workflows/page-2e367075ffdbc062.js +1 -0
  87. package/apps/pwa/out/_next/static/chunks/app/workspace/page-647ed2b66c1d49f1.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-ba058c56e38f2792.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/framework-ea806bb57f2b8923.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/main-8d2302399c2c8f87.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/main-app-6870f30ea99f8346.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/pages/_app-b10928c60f0b8488.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/pages/_error-689039227d443fab.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/{webpack-37b8bf78a3c6eec5.js → webpack-e5bea36f183b25e6.js} +1 -1
  95. package/apps/pwa/out/_next/static/css/5ef72a618a8994f3.css +1 -0
  96. package/apps/pwa/out/_next/static/lywc8m_HDzH9MKSDQhyEj/_buildManifest.js +1 -0
  97. package/apps/pwa/out/approvals/index.html +1 -1
  98. package/apps/pwa/out/approvals/index.txt +22 -22
  99. package/apps/pwa/out/autopilot/index.html +1 -1
  100. package/apps/pwa/out/autopilot/index.txt +22 -22
  101. package/apps/pwa/out/board/index.html +1 -1
  102. package/apps/pwa/out/board/index.txt +22 -22
  103. package/apps/pwa/out/botlab/index.html +1 -1
  104. package/apps/pwa/out/botlab/index.txt +21 -21
  105. package/apps/pwa/out/bots/index.html +1 -1
  106. package/apps/pwa/out/bots/index.txt +21 -21
  107. package/apps/pwa/out/chat/index.html +1 -1
  108. package/apps/pwa/out/chat/index.txt +21 -21
  109. package/apps/pwa/out/consult/index.html +1 -0
  110. package/apps/pwa/out/consult/index.txt +32 -0
  111. package/apps/pwa/out/control/index.html +1 -1
  112. package/apps/pwa/out/control/index.txt +22 -22
  113. package/apps/pwa/out/design-check/index.html +1 -1
  114. package/apps/pwa/out/design-check/index.txt +22 -22
  115. package/apps/pwa/out/editor/index.html +1 -1
  116. package/apps/pwa/out/editor/index.txt +22 -22
  117. package/apps/pwa/out/exec/index.html +1 -0
  118. package/apps/pwa/out/exec/index.txt +32 -0
  119. package/apps/pwa/out/field/index.html +1 -0
  120. package/apps/pwa/out/field/index.txt +32 -0
  121. package/apps/pwa/out/healthz +1 -1
  122. package/apps/pwa/out/index.html +1 -1
  123. package/apps/pwa/out/index.txt +21 -21
  124. package/apps/pwa/out/intake/index.html +1 -1
  125. package/apps/pwa/out/intake/index.txt +22 -22
  126. package/apps/pwa/out/live/index.html +1 -1
  127. package/apps/pwa/out/live/index.txt +22 -22
  128. package/apps/pwa/out/market/index.html +1 -1
  129. package/apps/pwa/out/market/index.txt +21 -21
  130. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  131. package/apps/pwa/out/missions/placeholder/index.txt +21 -21
  132. package/apps/pwa/out/morning/index.html +1 -1
  133. package/apps/pwa/out/morning/index.txt +22 -22
  134. package/apps/pwa/out/observatory/index.html +1 -1
  135. package/apps/pwa/out/observatory/index.txt +22 -22
  136. package/apps/pwa/out/reflection/index.html +1 -1
  137. package/apps/pwa/out/reflection/index.txt +22 -22
  138. package/apps/pwa/out/scheduler/index.html +1 -1
  139. package/apps/pwa/out/scheduler/index.txt +22 -22
  140. package/apps/pwa/out/sessions/index.html +1 -1
  141. package/apps/pwa/out/sessions/index.txt +21 -21
  142. package/apps/pwa/out/settings/devices/index.html +1 -1
  143. package/apps/pwa/out/settings/devices/index.txt +22 -22
  144. package/apps/pwa/out/settings/index.html +1 -1
  145. package/apps/pwa/out/settings/index.txt +22 -22
  146. package/apps/pwa/out/setup/done/index.html +1 -1
  147. package/apps/pwa/out/setup/done/index.txt +22 -22
  148. package/apps/pwa/out/setup/index.html +1 -1
  149. package/apps/pwa/out/setup/index.txt +22 -22
  150. package/apps/pwa/out/share/index.html +1 -1
  151. package/apps/pwa/out/share/index.txt +22 -22
  152. package/apps/pwa/out/showroom/index.html +1 -1
  153. package/apps/pwa/out/showroom/index.txt +21 -21
  154. package/apps/pwa/out/tasks/index.html +1 -1
  155. package/apps/pwa/out/tasks/index.txt +22 -22
  156. package/apps/pwa/out/term/index.html +1 -1
  157. package/apps/pwa/out/term/index.txt +22 -22
  158. package/apps/pwa/out/trace/index.html +1 -1
  159. package/apps/pwa/out/trace/index.txt +22 -22
  160. package/apps/pwa/out/vault/index.html +1 -1
  161. package/apps/pwa/out/vault/index.txt +22 -22
  162. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  163. package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
  164. package/apps/pwa/out/workflows/index.html +1 -1
  165. package/apps/pwa/out/workflows/index.txt +22 -22
  166. package/apps/pwa/out/workspace/index.html +1 -1
  167. package/apps/pwa/out/workspace/index.txt +22 -22
  168. package/apps/pwa/out/worktrees/index.html +1 -1
  169. package/apps/pwa/out/worktrees/index.txt +22 -22
  170. package/bin/elanous.cjs +107 -0
  171. package/graphs/field/field-feed.yaml +24 -0
  172. package/graphs/field/recipes.yaml +12 -0
  173. package/graphs/landing/landing-heal.yaml +3 -1
  174. package/graphs/landing/recipes.yaml +3 -0
  175. package/graphs/release/recipes.yaml +10 -0
  176. package/graphs/release/release-loop.yaml +10 -3
  177. package/graphs/test-diet/recipes.yaml +9 -0
  178. package/graphs/test-diet/test-diet.yaml +22 -0
  179. package/package.json +6 -5
  180. package/persona-presets/_index.yaml +10 -0
  181. package/persona-presets/_schema.json +146 -0
  182. package/persona-presets/dana.yaml +26 -0
  183. package/persona-presets/haru.yaml +27 -0
  184. package/persona-presets/kai.yaml +27 -0
  185. package/persona-presets/leo.yaml +27 -0
  186. package/persona-presets/mira.yaml +30 -0
  187. package/persona-presets/nari.yaml +27 -0
  188. package/persona-presets/sora.yaml +27 -0
  189. package/persona-presets/yuna.yaml +27 -0
  190. package/plugins/card-followup/README.md +13 -4
  191. package/plugins/card-followup/graphs/card-followup.yaml +3 -1
  192. package/plugins/card-followup/graphs/recipes.yaml +5 -1
  193. package/plugins/card-followup/graphs/run-step.ts +122 -18
  194. package/plugins/card-followup/graphs/sales-strategy.ts +173 -0
  195. package/plugins/card-followup/plugin.json +1 -1
  196. package/plugins/doc-draft/README.md +13 -0
  197. package/plugins/doc-draft/examples/brief-sample.json +8 -0
  198. package/plugins/doc-draft/graphs/doc-draft.yaml +14 -0
  199. package/plugins/doc-draft/graphs/recipes.yaml +9 -0
  200. package/plugins/doc-draft/graphs/run-step.ts +113 -0
  201. package/plugins/doc-draft/plugin.json +24 -0
  202. package/plugins/geo-check/README.md +3 -1
  203. package/plugins/geo-check/graphs/run-step.ts +58 -13
  204. package/plugins/geo-check/plugin.json +1 -1
  205. package/plugins/job-coach/.codex-plugin/plugin.json +1 -1
  206. package/plugins/job-coach/README.md +1 -1
  207. package/plugins/job-coach/graphs/run-step.ts +2 -2
  208. package/plugins/job-coach/plugin.json +1 -1
  209. package/plugins/job-coach/plugin.ts +1 -1
  210. package/scripts/affinity/endcard.sh +3 -2
  211. package/scripts/affinity/reframe.sh +3 -1
  212. package/scripts/ci-public-export-leak-gate.ts +48 -0
  213. package/scripts/codex-quota-alert.ts +122 -258
  214. package/scripts/coord-tracks.json +4 -4
  215. package/scripts/field-feed/deliver-node.ts +57 -0
  216. package/scripts/field-feed/feed-node.ts +67 -0
  217. package/scripts/field-feed/lib.ts +164 -0
  218. package/scripts/field-feed/reel-node.ts +24 -0
  219. package/scripts/field-feed/start.ts +62 -0
  220. package/scripts/fixtures/vflow-sample.ndjson +6 -0
  221. package/scripts/install.sh +109 -21
  222. package/scripts/landing-heal/clean-checkout.ts +114 -0
  223. package/scripts/landing-heal/run-mission.ts +38 -3
  224. package/scripts/lib/pwa-scenarios/scenarios.ts +2 -1
  225. package/scripts/persona-presets/lint.ts +79 -0
  226. package/scripts/public-export.ts +8 -4
  227. package/scripts/release-loop/baseline-from-logs.ts +92 -0
  228. package/scripts/release-loop/checklist-gate-node.ts +2 -2
  229. package/scripts/release-loop/env-known-failures.ts +31 -0
  230. package/scripts/release-loop/gate-node.ts +108 -22
  231. package/scripts/release-loop/known-issues-node.ts +159 -0
  232. package/scripts/release-loop/npm-publish-node.ts +124 -0
  233. package/scripts/release-loop/ops-upgrade-node.ts +95 -0
  234. package/scripts/release-loop/publish-node.ts +23 -1
  235. package/scripts/release-loop/release-readiness.ts +58 -0
  236. package/scripts/release-loop/shard-plan.ts +17 -0
  237. package/scripts/release-loop/unattended-release.ts +93 -0
  238. package/scripts/storyboard/storyboard.ts +167 -0
  239. package/scripts/test-diet/lib.ts +88 -0
  240. package/scripts/test-diet/node.ts +102 -0
  241. package/scripts/ux/measure-first-text.ts +102 -0
  242. package/scripts/vflow-collect.ts +20 -7
  243. package/scripts/vflow-search.ts +73 -0
  244. package/scripts/video-free-line-test-walker.ts +36 -0
  245. package/scripts/video-pipeline.ts +2 -2
  246. package/skills/explainer-video/SKILL.md +12 -9
  247. package/skills/explainer-video/engine/build.mjs +1 -1
  248. package/skills/explainer-video/engine/reel.mjs +138 -31
  249. package/skills/explainer-video/engine/reel.sh +2 -1
  250. package/skills/explainer-video/examples/elanous-0.2.5/script.json +1 -1
  251. package/skills/grill-me/SKILL.md +1 -1
  252. package/skills/omni-digest/docs/diagrams/noncode-terminal-promotion-path-2026-08-13.mmd +1 -1
  253. package/src/a2a/server.ts +2 -0
  254. package/src/acp/auth-methods.ts +30 -0
  255. package/src/acp/elanous-aware-peers.ts +30 -0
  256. package/src/acp/server.ts +96 -20
  257. package/src/agent/monad-agent-turn.ts +25 -6
  258. package/src/agent/shared-app-tools.ts +5 -3
  259. package/src/agent-substrate/review-intent.ts +6 -2
  260. package/src/agent-substrate/shard-boundary-intent.ts +70 -0
  261. package/src/auth/github-app-token.ts +4 -1
  262. package/src/autopilot/track-agent-shadow.ts +151 -0
  263. package/src/autopilot/track-agent.ts +23 -3
  264. package/src/boot/acp-server-help.ts +16 -0
  265. package/src/boot/daemon-prompt-turn.ts +31 -10
  266. package/src/boot/daemon-tools/index.ts +7 -1
  267. package/src/budget/codex-credit-pace.ts +84 -0
  268. package/src/budget/codex-credit-plan.ts +154 -0
  269. package/src/budget/codex-reset-credit-state.ts +2 -0
  270. package/src/channel-import/detect.ts +191 -0
  271. package/src/channel-import/run.ts +111 -0
  272. package/src/chat/chat-cli.ts +4 -1
  273. package/src/chat/short-question.ts +40 -0
  274. package/src/cli/agent-cli.ts +24 -15
  275. package/src/cli/ask-bare.ts +42 -0
  276. package/src/cli/cli-user-error.ts +25 -0
  277. package/src/cli/codex-credit-plan-view.ts +25 -0
  278. package/src/cli/config-test-sync.ts +4 -0
  279. package/src/cli/decisions-cli.ts +13 -3
  280. package/src/cli/dependence-gauge.ts +237 -0
  281. package/src/cli/doctor-bundle.ts +128 -0
  282. package/src/cli/doctor-cli.ts +41 -1
  283. package/src/cli/doctor-local-llm.ts +95 -0
  284. package/src/cli/doctor-modes.ts +48 -0
  285. package/src/cli/import-cli.ts +60 -0
  286. package/src/cli/intake-cli.ts +12 -2
  287. package/src/cli/intake-source-cli.ts +58 -0
  288. package/src/cli/machine-cli.ts +23 -0
  289. package/src/cli/mcp-login.ts +13 -4
  290. package/src/cli/msg-cli.ts +137 -0
  291. package/src/cli/persona-cli.ts +116 -0
  292. package/src/cli/plugin-cli.ts +25 -0
  293. package/src/cli/pr-cli.ts +36 -0
  294. package/src/cli/provider-cli.ts +5 -0
  295. package/src/cli/release-cli.ts +50 -8
  296. package/src/cli/release-run-if-ready.ts +48 -0
  297. package/src/cli/setup-cli.ts +27 -6
  298. package/src/cli/setup-recommend.ts +8 -0
  299. package/src/cli/skills-cli.ts +173 -0
  300. package/src/cli/start-cli.ts +13 -4
  301. package/src/cli/usage-cli.ts +11 -1
  302. package/src/codex/setup.ts +37 -16
  303. package/src/dashboard/index.ts +18 -2
  304. package/src/dashboard/slash-runtime/dashboard-handlers.ts +2 -2
  305. package/src/dashboard/slash-runtime/help-from-registry.ts +4 -2
  306. package/src/decisions/decision-cards.ts +291 -0
  307. package/src/decisions/decision-ledger.ts +5 -2
  308. package/src/decisions/discord-decision-cards.ts +133 -0
  309. package/src/decisions/telegram-decision-cards.ts +100 -0
  310. package/src/directives/version-at.ts +77 -0
  311. package/src/discord.ts +73 -6
  312. package/src/domains/core-tools.ts +37 -14
  313. package/src/domains/outbound-alert.ts +94 -12
  314. package/src/domains/repeated-failure.ts +1 -1
  315. package/src/error-report/report.ts +200 -0
  316. package/src/exec-requests/planner.ts +146 -0
  317. package/src/exec-requests/runner.ts +378 -0
  318. package/src/exec-requests/store.ts +78 -0
  319. package/src/field/field-feed-auto.ts +48 -0
  320. package/src/field/field-media.ts +8 -3
  321. package/src/field/field-reel.ts +203 -0
  322. package/src/grok/credential.ts +7 -5
  323. package/src/harness/aside-run-status.ts +33 -0
  324. package/src/harness/browser-verify.ts +48 -17
  325. package/src/harness/harness-cli-command.ts +25 -3
  326. package/src/harness/image-load-state.ts +21 -0
  327. package/src/harness/process-garbage.ts +45 -0
  328. package/src/hooks/error-report.ts +210 -0
  329. package/src/hooks/receiver.ts +41 -1
  330. package/src/import/apply.ts +128 -0
  331. package/src/import/plan.ts +197 -0
  332. package/src/index.ts +168 -21
  333. package/src/input-core/text-entry.ts +13 -5
  334. package/src/instance/leader.ts +13 -1
  335. package/src/intake-plane/collect-github.ts +5 -3
  336. package/src/intake-plane/collect-telegram-saved.ts +15 -3
  337. package/src/intake-plane/discord-seat-work.ts +56 -0
  338. package/src/intake-plane/intake-sources.ts +202 -0
  339. package/src/intake-plane/items.ts +28 -12
  340. package/src/intake-plane/seat-answer.ts +96 -0
  341. package/src/intake-plane/seat-doc-route.ts +221 -0
  342. package/src/intake-plane/submit-intake-work.ts +9 -1
  343. package/src/intake-plane/telegram-seat-work.ts +72 -0
  344. package/src/llm/model-defaults.ts +24 -1
  345. package/src/llm.ts +5 -4
  346. package/src/machines/machine-ledger.ts +127 -0
  347. package/src/market/pack-internal-refs.ts +28 -0
  348. package/src/market/publish.ts +31 -4
  349. package/src/maturity/feature-maturity.ts +65 -0
  350. package/src/model-tier/turn-tier.ts +24 -0
  351. package/src/msg/msg-store.ts +149 -0
  352. package/src/native-tool-catalog.ts +2 -1
  353. package/src/nexus/api/chat-fast-path-config.ts +28 -0
  354. package/src/nexus/api/consult-requests.ts +128 -0
  355. package/src/nexus/api/discord-trigger-bot.ts +3 -0
  356. package/src/nexus/api/error-reports.ts +108 -0
  357. package/src/nexus/api/exec-requests.ts +51 -0
  358. package/src/nexus/api/field-uploads.ts +40 -3
  359. package/src/nexus/api/graph-approvals-feed.ts +140 -0
  360. package/src/nexus/api/graph-approvals.ts +71 -4
  361. package/src/nexus/api/http-server.ts +82 -8
  362. package/src/nexus/api/outbound-report.ts +7 -0
  363. package/src/nexus/api/running-runs-background.ts +68 -0
  364. package/src/nexus/api/running-runs-child.ts +6 -0
  365. package/src/nexus/api/seat-requests.ts +254 -0
  366. package/src/nexus/api/share-captures.ts +91 -0
  367. package/src/nexus/api/skill-problems.ts +56 -0
  368. package/src/nexus/api/terminals.ts +24 -8
  369. package/src/nexus/api/trace-run-scan.ts +37 -0
  370. package/src/nexus/api/trace.ts +19 -3
  371. package/src/nexus/index.ts +28 -1
  372. package/src/nexus/setup-status.ts +11 -7
  373. package/src/notify/llm-budget-alert.ts +16 -10
  374. package/src/oauth/browser-availability.ts +14 -0
  375. package/src/oauth/codex-account-rotation.ts +26 -4
  376. package/src/oauth/codex-account-store.ts +20 -2
  377. package/src/oauth/codex-browser-login.ts +173 -0
  378. package/src/oauth/codex-quota-policy.ts +16 -0
  379. package/src/oauth/codex.ts +4 -1
  380. package/src/oauth/fallback-chain.ts +5 -5
  381. package/src/oauth/store.ts +42 -5
  382. package/src/onboarding/continue-here.ts +34 -0
  383. package/src/onboarding/entry-hints.ts +8 -0
  384. package/src/onboarding/full-screen-io.ts +35 -3
  385. package/src/onboarding/help/skills.md +1 -1
  386. package/src/onboarding/non-interactive.ts +1 -0
  387. package/src/onboarding/subscription-hint.ts +27 -0
  388. package/src/onboarding/web-first.ts +90 -0
  389. package/src/onboarding.ts +287 -26
  390. package/src/persona/presets.ts +105 -0
  391. package/src/plugins/maker/node-install.ts +92 -0
  392. package/src/plugins/maker/node-maker.ts +139 -0
  393. package/src/plugins/maker/plugin-maker.ts +19 -7
  394. package/src/policy/llm-policy.ts +268 -0
  395. package/src/prompt-library/session-guidance.ts +7 -1
  396. package/src/prompt-library/universal-preamble.ts +2 -2
  397. package/src/relay/relay-cli.ts +20 -0
  398. package/src/relay/relay-server.ts +220 -0
  399. package/src/release-loop/checklist.ts +37 -13
  400. package/src/self-dev/decompose.ts +1 -0
  401. package/src/self-dev/dev-pipeline.ts +6 -3
  402. package/src/self-dev/orchestrate.ts +18 -11
  403. package/src/self-dev/run-record-mirror.ts +44 -0
  404. package/src/self-dev/run-store.ts +12 -3
  405. package/src/self-implement/harness-policy-gates.ts +4 -1
  406. package/src/self-implement/report-origin.ts +12 -1
  407. package/src/session/chat.ts +17 -5
  408. package/src/shell-env-bootstrap.ts +44 -7
  409. package/src/skills/connect-claude-plugin.ts +142 -0
  410. package/src/skills/connect.ts +70 -0
  411. package/src/skills/index.ts +29 -1
  412. package/src/skills/repair.ts +124 -0
  413. package/src/skills/runner.ts +11 -2
  414. package/src/skills/shared-agent-skill-roots.ts +25 -0
  415. package/src/skills/trigger-extract.ts +1 -1
  416. package/src/steward/failure-streak.ts +78 -0
  417. package/src/steward/steward-cards.ts +24 -0
  418. package/src/steward/triage-budget.ts +127 -0
  419. package/src/steward/triage-plan.ts +75 -0
  420. package/src/steward/triage.ts +244 -42
  421. package/src/task-cards/card-store.ts +1 -1
  422. package/src/task-orchestrator/surfaces/pod-command-job.ts +16 -8
  423. package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +11 -5
  424. package/src/task-orchestrator/surfaces/pod-ledger-events.ts +68 -0
  425. package/src/task-orchestrator/surfaces/self-implement-pod.ts +78 -4
  426. package/src/telegram-commands.ts +13 -0
  427. package/src/telegram.ts +72 -2
  428. package/src/tool-runtime/elanous-skills-list-runtime.ts +3 -3
  429. package/src/tool-runtime/self-cognition-runtimes.ts +160 -2
  430. package/src/user-config.ts +189 -15
  431. package/src/version/packed-revision.json +1 -1
  432. package/src/video-pipeline/recipes/character.ts +42 -5
  433. package/src/video-pipeline/recipes/ffmpeg.ts +1 -1
  434. package/src/video-pipeline/recipes/free-line.ts +16 -3
  435. package/src/video-pipeline/recipes/remote.ts +7 -1
  436. package/src/video-pipeline/vflow-reference.ts +109 -0
  437. package/apps/pwa/out/_next/static/chunks/1169-696263ac7af8c4d4.js +0 -1
  438. package/apps/pwa/out/_next/static/chunks/1883.c91a2648af4842fd.js +0 -1
  439. package/apps/pwa/out/_next/static/chunks/1947-9d64872eeb9cfdec.js +0 -1
  440. package/apps/pwa/out/_next/static/chunks/2808-dc06482994b40f70.js +0 -1
  441. package/apps/pwa/out/_next/static/chunks/3165-95515ca5f299a120.js +0 -1
  442. package/apps/pwa/out/_next/static/chunks/3190-e9282753e7ebde85.js +0 -1
  443. package/apps/pwa/out/_next/static/chunks/4259-99614149577e77cb.js +0 -1
  444. package/apps/pwa/out/_next/static/chunks/4283-329eabeaf233e6cd.js +0 -1
  445. package/apps/pwa/out/_next/static/chunks/4328-cb5058b1acc2de5e.js +0 -25
  446. package/apps/pwa/out/_next/static/chunks/4801-ecee6ef62b349b18.js +0 -1
  447. package/apps/pwa/out/_next/static/chunks/5110-8058791dd25a2e14.js +0 -1
  448. package/apps/pwa/out/_next/static/chunks/5330-c41e9670f594c38f.js +0 -1
  449. package/apps/pwa/out/_next/static/chunks/5423-e95fd125d1794349.js +0 -1
  450. package/apps/pwa/out/_next/static/chunks/5478-b5eae07dc79ea619.js +0 -1
  451. package/apps/pwa/out/_next/static/chunks/5787-96ee6642b9a661e5.js +0 -1
  452. package/apps/pwa/out/_next/static/chunks/6448-79d72368589f98bc.js +0 -1
  453. package/apps/pwa/out/_next/static/chunks/6522-9866c002b5531836.js +0 -1
  454. package/apps/pwa/out/_next/static/chunks/6729-b4a558b7aa891e0c.js +0 -1
  455. package/apps/pwa/out/_next/static/chunks/6969-cb03f9410b7d2e03.js +0 -1
  456. package/apps/pwa/out/_next/static/chunks/7007-3b9861091bb8dd21.js +0 -1
  457. package/apps/pwa/out/_next/static/chunks/7930-8dc7e20fc6fc19ca.js +0 -1
  458. package/apps/pwa/out/_next/static/chunks/8071-187edbc22a86741f.js +0 -1
  459. package/apps/pwa/out/_next/static/chunks/8198-d4101ad70cb9a579.js +0 -1
  460. package/apps/pwa/out/_next/static/chunks/8250.4a2c5553a07cdf47.js +0 -1
  461. package/apps/pwa/out/_next/static/chunks/8293-123b91e7b0330dc0.js +0 -1
  462. package/apps/pwa/out/_next/static/chunks/8296-d6d5d87dfa911d41.js +0 -1
  463. package/apps/pwa/out/_next/static/chunks/8305-603963c33ee8eec3.js +0 -1
  464. package/apps/pwa/out/_next/static/chunks/8612-4a0066f20951b8fd.js +0 -1
  465. package/apps/pwa/out/_next/static/chunks/9181-cf4e1b61c4783f92.js +0 -1
  466. package/apps/pwa/out/_next/static/chunks/9262-26c2ecbd5a67e4a2.js +0 -1
  467. package/apps/pwa/out/_next/static/chunks/9328-45abdebce4fbecb7.js +0 -1
  468. package/apps/pwa/out/_next/static/chunks/9355-dbc67205adf8745f.js +0 -1
  469. package/apps/pwa/out/_next/static/chunks/9763.255b90dd69875689.js +0 -1
  470. package/apps/pwa/out/_next/static/chunks/9933-66d31ec25c0231af.js +0 -1
  471. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-bd06fb55f4da0381.js +0 -1
  472. package/apps/pwa/out/_next/static/chunks/app/approvals/page-4e586142da455a25.js +0 -1
  473. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-889ad5cddcf45b0d.js +0 -1
  474. package/apps/pwa/out/_next/static/chunks/app/board/page-47ba401d56572c27.js +0 -1
  475. package/apps/pwa/out/_next/static/chunks/app/botlab/page-0b54f9c83458e038.js +0 -1
  476. package/apps/pwa/out/_next/static/chunks/app/bots/page-4fcc296ef6c8ed90.js +0 -1
  477. package/apps/pwa/out/_next/static/chunks/app/chat/page-fe9fda494a87f4e5.js +0 -1
  478. package/apps/pwa/out/_next/static/chunks/app/control/page-f9642e25ce129590.js +0 -1
  479. package/apps/pwa/out/_next/static/chunks/app/design-check/page-e1063e8ba5f3e2e7.js +0 -1
  480. package/apps/pwa/out/_next/static/chunks/app/editor/page-9d0df30027d8aa9d.js +0 -1
  481. package/apps/pwa/out/_next/static/chunks/app/healthz/route-bd06fb55f4da0381.js +0 -1
  482. package/apps/pwa/out/_next/static/chunks/app/intake/page-d97adf2c9455b8d0.js +0 -1
  483. package/apps/pwa/out/_next/static/chunks/app/layout-236b80d202110362.js +0 -1
  484. package/apps/pwa/out/_next/static/chunks/app/live/page-21a30f35f1a276ad.js +0 -1
  485. package/apps/pwa/out/_next/static/chunks/app/market/page-b1a5be357c4fa25d.js +0 -1
  486. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1705a60303f7f573.js +0 -1
  487. package/apps/pwa/out/_next/static/chunks/app/morning/page-76b337c11ad0e237.js +0 -1
  488. package/apps/pwa/out/_next/static/chunks/app/not-found-7c0f85fbb56f64c6.js +0 -1
  489. package/apps/pwa/out/_next/static/chunks/app/observatory/page-65ca16b20617b44d.js +0 -1
  490. package/apps/pwa/out/_next/static/chunks/app/page-e7f9b8fc29411c1d.js +0 -1
  491. package/apps/pwa/out/_next/static/chunks/app/reflection/page-92ea6213d1aeec04.js +0 -1
  492. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-a913a005aacb5476.js +0 -1
  493. package/apps/pwa/out/_next/static/chunks/app/sessions/page-2d78804a40dfdef6.js +0 -1
  494. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-08a99148e780ac00.js +0 -1
  495. package/apps/pwa/out/_next/static/chunks/app/settings/page-deb674e7ed36f815.js +0 -1
  496. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-49f8de0534d192d7.js +0 -1
  497. package/apps/pwa/out/_next/static/chunks/app/setup/layout-bd06fb55f4da0381.js +0 -1
  498. package/apps/pwa/out/_next/static/chunks/app/setup/page-ba162a28d2176e18.js +0 -1
  499. package/apps/pwa/out/_next/static/chunks/app/share/page-1ff1a37b550ab41a.js +0 -1
  500. package/apps/pwa/out/_next/static/chunks/app/showroom/page-ccaa698f56c0fbdb.js +0 -1
  501. package/apps/pwa/out/_next/static/chunks/app/tasks/page-53b944082de1d7db.js +0 -1
  502. package/apps/pwa/out/_next/static/chunks/app/term/page-9b70adf1552789bf.js +0 -1
  503. package/apps/pwa/out/_next/static/chunks/app/trace/page-30d482aa63241fe8.js +0 -1
  504. package/apps/pwa/out/_next/static/chunks/app/vault/page-aecf786f54651d8a.js +0 -1
  505. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6ab9b62c7b6e08f2.js +0 -1
  506. package/apps/pwa/out/_next/static/chunks/app/workflows/page-08949735455e0c9a.js +0 -1
  507. package/apps/pwa/out/_next/static/chunks/app/workspace/page-a1479005234a46c2.js +0 -1
  508. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-c3890e90bd232732.js +0 -1
  509. package/apps/pwa/out/_next/static/chunks/beb5cf10-9adcc10b83930090.js +0 -1
  510. package/apps/pwa/out/_next/static/chunks/framework-d68d41c88e05c801.js +0 -1
  511. package/apps/pwa/out/_next/static/chunks/main-app-11c63971b7a9593b.js +0 -1
  512. package/apps/pwa/out/_next/static/chunks/main-d09452353bd0d9cc.js +0 -1
  513. package/apps/pwa/out/_next/static/chunks/pages/_app-184d727cebeca767.js +0 -1
  514. package/apps/pwa/out/_next/static/chunks/pages/_error-21bbbbac99b720b1.js +0 -1
  515. package/apps/pwa/out/_next/static/css/eaa74e8bb2f62269.css +0 -1
  516. package/apps/pwa/out/_next/static/qMI0jnlZaBjjm4aIDYNGM/_buildManifest.js +0 -1
  517. /package/apps/pwa/out/_next/static/{qMI0jnlZaBjjm4aIDYNGM → lywc8m_HDzH9MKSDQhyEj}/_ssgManifest.js +0 -0
@@ -0,0 +1,22 @@
1
+ # TD2 — daily test review (shadow): pick a cost-weighted slice from the cursor ledger, measure each file alone on a
2
+ # remote host, judge mechanically, append one ledger line «#a~#b» and draft a card. It never deletes or moves a test.
3
+ # Inputs: budgetSecs (default 1800) · remote (default node-b) · mirror (default ~/mirror/elanous-agent.git)
4
+ graph_id: test-diet
5
+ loop:
6
+ title: 시험 들여다보기
7
+ description: 매일 시험 한 조각을 단독으로 재고 판정 초안을 남긴다
8
+ trigger:
9
+ events: [manual]
10
+ version: 1
11
+ entry_node: pick
12
+ terminal_nodes: [done, failed]
13
+ nodes:
14
+ - { node_id: pick, kind: judge, recipe: 'cmd:pick', max_visits: 1 }
15
+ - { node_id: measure, kind: gate, recipe: 'cmd:measure', max_visits: 1 }
16
+ - { node_id: record, kind: judge, recipe: 'cmd:record', max_visits: 1 }
17
+ - { node_id: done, kind: gate, max_visits: 1 }
18
+ - { node_id: failed, kind: gate, max_visits: 1 }
19
+ edges:
20
+ - { from: pick, on: outcome, map: { ok: measure, fail: failed, error: failed } }
21
+ - { from: measure, on: outcome, map: { ok: record, fail: failed, error: failed } }
22
+ - { from: record, on: outcome, map: { ok: done, fail: failed, error: failed } }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "elanous",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Self-healing coding harness where eyes, hands, and memory all turn on one sentence — it authors its own goals, implements them in isolated worktrees, and reviews its own work.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Elanvital AI",
@@ -11,8 +11,8 @@
11
11
  },
12
12
  "type": "module",
13
13
  "bin": {
14
- "elanous": "./bin/elanous.mjs",
15
- "eln": "./bin/elanous.mjs"
14
+ "elanous": "./bin/elanous.cjs",
15
+ "eln": "./bin/elanous.cjs"
16
16
  },
17
17
  "engines": {
18
18
  "bun": ">=1.3.5"
@@ -29,6 +29,7 @@
29
29
  "templates/",
30
30
  "catalog/",
31
31
  "personas/",
32
+ "persona-presets/",
32
33
  "graphs/",
33
34
  "apps/pwa/out/",
34
35
  ".python-version",
@@ -111,7 +112,6 @@
111
112
  "remark-rehype": "^11.1.2",
112
113
  "sharp": "^0.34.5",
113
114
  "shiki": "^4.0.2",
114
- "telegram": "^2.26.22",
115
115
  "typescript": "^5.7.0",
116
116
  "unified": "^11.0.5",
117
117
  "web-push": "^3.6.7",
@@ -119,7 +119,8 @@
119
119
  "yaml": "^2.8.3"
120
120
  },
121
121
  "optionalDependencies": {
122
- "node-pty": "^1.1.0"
122
+ "node-pty": "^1.1.0",
123
+ "telegram": "^2.26.22"
123
124
  },
124
125
  "devDependencies": {
125
126
  "@types/bun": "^1.2.0",
@@ -0,0 +1,10 @@
1
+ # Elanous 페르소나 프리셋 — 고르고 꾸미는 AI 동료의 출발점(일반인용 여덟).
2
+ # 파일 하나 = 프리셋 하나(persona-presets/<personaId>.yaml) · 형식 = _schema.json · 쓰는 법 = `elanous persona list|show|add`.
3
+ # 직함(COO·CMO·CTO·CXO)은 고를 수 있는 선택 칸이다 — 기본은 없음.
4
+ # tools 의 optional: true = 공식 묶음에 아직 없는 도구 — 따로 설치했을 때만 쓴다.
5
+ common:
6
+ loop_start: 그림자 — 초안만 만들고 밖으로 보내지 않는다. 사용자가 «이제 맡겨도 돼»를 누르면 실제로 돈다.
7
+ always_ask: [돈이 드는 일, 밖으로 보내는 일(메일·게시·공유), 지우는 일, 다른 사람의 연락처·사진]
8
+ memory: 이 페르소나와의 대화와 맡긴 일만 · 다른 페르소나와 나누려면 사용자가 켠다
9
+ title: 기본 없음 · 사용자가 붙일 수 있다(예 마케터에 «CMO»)
10
+ presets: [haru, mira, sora, kai, dana, yuna, leo, nari]
@@ -0,0 +1,146 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://elanous.ai/schemas/persona-preset.json",
4
+ "title": "Elanous persona preset",
5
+ "description": "정본 = persona-presets/<personaId>.yaml. 도구(tools)는 공식 묶음에 있는 것 · 없는 것은 optional: true(따로 설치했을 때만).",
6
+ "type": "object",
7
+ "required": [
8
+ "personaId",
9
+ "displayName",
10
+ "names",
11
+ "role",
12
+ "oneLine",
13
+ "voice",
14
+ "tasks",
15
+ "tools",
16
+ "firstQuestions",
17
+ "doesNot",
18
+ "forWhom"
19
+ ],
20
+ "additionalProperties": false,
21
+ "properties": {
22
+ "personaId": {
23
+ "type": "string",
24
+ "pattern": "^[a-z][a-z0-9-]{1,30}$"
25
+ },
26
+ "displayName": {
27
+ "type": "string",
28
+ "description": "기본 이름 · 한국어 · 영어"
29
+ },
30
+ "names": {
31
+ "type": "array",
32
+ "minItems": 2,
33
+ "items": {
34
+ "type": "string"
35
+ },
36
+ "description": "이름 후보(첫째가 기본)"
37
+ },
38
+ "role": {
39
+ "type": "string",
40
+ "description": "무슨 동료인가 — 비서·마케터… (직함 아님)"
41
+ },
42
+ "title": {
43
+ "type": [
44
+ "string",
45
+ "null"
46
+ ],
47
+ "description": "선택 직함(COO·CMO·CTO·CXO) — 기본 null"
48
+ },
49
+ "oneLine": {
50
+ "type": "string"
51
+ },
52
+ "voice": {
53
+ "type": "object",
54
+ "required": [
55
+ "rule",
56
+ "examples"
57
+ ],
58
+ "additionalProperties": false,
59
+ "properties": {
60
+ "rule": {
61
+ "type": "string"
62
+ },
63
+ "examples": {
64
+ "type": "array",
65
+ "minItems": 2,
66
+ "maxItems": 2,
67
+ "items": {
68
+ "type": "string"
69
+ }
70
+ }
71
+ }
72
+ },
73
+ "tasks": {
74
+ "type": "array",
75
+ "minItems": 3,
76
+ "maxItems": 3,
77
+ "items": {
78
+ "type": "object",
79
+ "required": [
80
+ "when",
81
+ "what"
82
+ ],
83
+ "additionalProperties": false,
84
+ "properties": {
85
+ "when": {
86
+ "type": "string"
87
+ },
88
+ "what": {
89
+ "type": "string"
90
+ }
91
+ }
92
+ }
93
+ },
94
+ "tools": {
95
+ "type": "array",
96
+ "minItems": 1,
97
+ "items": {
98
+ "type": "object",
99
+ "required": [
100
+ "name",
101
+ "from"
102
+ ],
103
+ "additionalProperties": false,
104
+ "properties": {
105
+ "name": {
106
+ "type": "string"
107
+ },
108
+ "from": {
109
+ "type": "string",
110
+ "description": "core | 공식 묶음 이름 | plugins/<이름>"
111
+ },
112
+ "optional": {
113
+ "type": "boolean",
114
+ "description": "공식 묶음에 아직 없는 도구 — 따로 설치했을 때만 쓴다"
115
+ }
116
+ }
117
+ }
118
+ },
119
+ "firstQuestions": {
120
+ "type": "array",
121
+ "minItems": 2,
122
+ "maxItems": 3,
123
+ "items": {
124
+ "type": "string"
125
+ },
126
+ "description": "고른 직후 처음 묻는 칸"
127
+ },
128
+ "askBefore": {
129
+ "type": "array",
130
+ "items": {
131
+ "type": "string"
132
+ },
133
+ "description": "공통 칸 외에 이 페르소나가 꼭 묻는 것"
134
+ },
135
+ "doesNot": {
136
+ "type": "array",
137
+ "minItems": 2,
138
+ "items": {
139
+ "type": "string"
140
+ }
141
+ },
142
+ "forWhom": {
143
+ "type": "string"
144
+ }
145
+ }
146
+ }
@@ -0,0 +1,26 @@
1
+ personaId: dana
2
+ displayName: 다나 · Dana
3
+ names: [다나, 도윤, Dana]
4
+ role: 코치
5
+ title: null
6
+ oneLine: 목표를 쪼개 매주 같이 점검하는 코치.
7
+ voice:
8
+ rule: 따뜻하지만 분명하게. 칭찬은 구체적으로, 질문은 하나씩.
9
+ examples:
10
+ - 이번 주 계획 다섯 중 넷을 했습니다. 남은 하나는 다음 주로 옮길까요, 줄일까요?
11
+ - 오늘 한 것 한 줄만 알려 주세요.
12
+ tasks:
13
+ - { when: 목표를 정하면, what: 4주 계획으로 쪼갠다 }
14
+ - { when: 매일 저녁, what: 오늘 한 것을 한 줄 묻고 기록한다 }
15
+ - { when: 매주, what: 계획 대비 진행을 정리하고 다음 주를 함께 조정한다 }
16
+ tools:
17
+ - { name: grill-me, from: elanous-basics }
18
+ - { name: job-coach, from: job-coach }
19
+ firstQuestions:
20
+ - 4주 뒤에 무엇이 달라져 있으면 좋겠어요?
21
+ - 하루 중 언제 물어볼까요?
22
+ askBefore: [계획을 크게 바꾸기, 다른 사람에게 진행 공유하기]
23
+ doesNot:
24
+ - 건강·의료·법률 판단을 대신하지 않는다
25
+ - 기록을 다른 사람에게 보여 주지 않는다
26
+ forWhom: 습관·공부·커리어 목표가 있는 사람
@@ -0,0 +1,27 @@
1
+ personaId: haru
2
+ displayName: 하루 · Haru
3
+ names: [하루, 소담, Haru]
4
+ role: 개인 비서
5
+ title: null
6
+ oneLine: 흩어진 링크·문서·사진을 먼저 정리해 두는 비서.
7
+ voice:
8
+ rule: 짧고 정중하게. 해야 할 일을 먼저, 이유는 한 줄로.
9
+ examples:
10
+ - 오늘 받은 링크 세 개를 요약해 «나중에 읽기»에 넣어 두었습니다. 그중 하나는 답장이 필요해 보입니다.
11
+ - 이번 주 정리 한 장을 만들었습니다. 다음 주로 넘어간 일이 두 개 있습니다 — 확인해 주시겠어요?
12
+ tasks:
13
+ - { when: 링크·문서를 받으면, what: 바로 요약해 «나중에 읽기»에 쌓는다 }
14
+ - { when: 서류·영수증 사진을 받으면, what: 글자로 옮겨 찾을 수 있게 둔다 }
15
+ - { when: 매주 금요일, what: 이번 주 맡긴 일과 남은 일을 한 장으로 정리한다 }
16
+ tools:
17
+ - { name: omni-digest, from: elanous-basics }
18
+ - { name: photo-intake-ocr, from: elanous-basics }
19
+ - { name: doc-draft, from: doc-draft, optional: true }
20
+ firstQuestions:
21
+ - 주로 어디서 링크·문서를 받으세요? (메신저 · 메일 · 직접 붙여 넣기)
22
+ - 주간 정리는 무슨 요일, 몇 시에 받을까요?
23
+ askBefore: [대신 답장하기]
24
+ doesNot:
25
+ - 대신 답장하거나 일정을 수락·거절하지 않는다
26
+ - 사진 속 다른 사람의 개인정보를 따로 모으지 않는다
27
+ forWhom: 일이 여러 곳에서 오는 직장인 · 1인 사업자
@@ -0,0 +1,27 @@
1
+ personaId: kai
2
+ displayName: 카이 · Kai
3
+ names: [카이, 준, Kai]
4
+ role: 개발 도우미
5
+ title: null
6
+ oneLine: 한 줄로 맡기면 코드를 고쳐 PR 까지 올려 오는 개발 도우미.
7
+ voice:
8
+ rule: 군더더기 없이. 바꾼 것 · 시험한 것 · 남은 것을 나눠 말한다.
9
+ examples:
10
+ - 상태 명령에 --json 을 넣었습니다. 바꾼 파일 둘 · 시험 통과 · PR 을 열었습니다.
11
+ - 기존 시험 하나가 이 변경과 무관하게 실패합니다 — 고칠까요, 따로 둘까요?
12
+ tasks:
13
+ - { when: 변경을 맡기면, what: 격리된 작업 공간에서 구현하고 시험한 뒤 PR 로 올린다 }
14
+ - { when: 새 저장소를 열면, what: 구조와 실행 방법을 한 장으로 정리한다 }
15
+ - { when: 오류 메시지를 받으면, what: 관련 문서·이슈를 찾아 원인 후보를 정리한다 }
16
+ tools:
17
+ - { name: harness, from: core }
18
+ - { name: project-onboarding, from: elanous-basics }
19
+ - { name: omni-crawl, from: elanous-basics }
20
+ firstQuestions:
21
+ - 작업할 저장소는 어디인가요?
22
+ - PR 을 자동으로 병합해도 될까요, 직접 보고 병합하실래요?
23
+ askBefore: [병합(설정에 따라), 배포, 비밀 키 다루기]
24
+ doesNot:
25
+ - 비밀 키를 출력하거나 저장소에 넣지 않는다
26
+ - 맡기지 않은 파일을 크게 고치지 않는다
27
+ forWhom: 개발자 · 사이드 프로젝트 하는 사람 · 기술 창업자
@@ -0,0 +1,27 @@
1
+ personaId: leo
2
+ displayName: 레오 · Leo
3
+ names: [레오, 태오, Leo]
4
+ role: 영업 파트너
5
+ title: null
6
+ oneLine: 만난 사람을 놓치지 않게 정리하고 다음 연락을 준비하는 영업 파트너.
7
+ voice:
8
+ rule: 실무적으로. 상대 회사의 사실과 추정을 나눠 쓴다.
9
+ examples:
10
+ - 명함의 회사를 찾아 정리했습니다. 확인된 것과 추정한 것을 나눠 적었습니다.
11
+ - 첫 연락 메일 초안입니다. 보내는 것은 직접 해 주세요.
12
+ tasks:
13
+ - { when: 명함을 받으면, what: 상대 회사 분석과 연락 기록 한 줄을 만든다 }
14
+ - { when: 분석이 끝나면, what: 첫 연락 메일 초안을 쓴다 }
15
+ - { when: 미팅 전날, what: 상대 회사 최근 소식을 요약한다 }
16
+ tools:
17
+ - { name: card-followup, from: card-followup, optional: true }
18
+ - { name: omni-crawl, from: elanous-basics }
19
+ - { name: omni-digest, from: elanous-basics }
20
+ firstQuestions:
21
+ - 무엇을 파세요? 한 줄이면 됩니다.
22
+ - 첫 연락은 주로 어떤 말로 하세요? (공식적 · 편하게)
23
+ askBefore: [메일 보내기, 연락처를 다른 곳에 저장하기]
24
+ doesNot:
25
+ - 메일을 대신 보내지 않는다
26
+ - 명함 사진을 분석 말고 다른 곳에 쓰지 않는다(분석은 외부 AI 로 보낸다고 먼저 알린다)
27
+ forWhom: 영업 담당 · 행사·네트워킹이 많은 사람 · 창업자
@@ -0,0 +1,30 @@
1
+ personaId: mira
2
+ displayName: 미라 · Mira
3
+ names: [미라, 하나, Mira]
4
+ role: 마케터
5
+ title: null
6
+ oneLine: 시장과 경쟁을 보고 콘텐츠 초안까지 써 오는 마케터.
7
+ voice:
8
+ rule: 근거 먼저, 숫자는 출처와 함께. 과장하지 않는다.
9
+ examples:
10
+ - 이번 주 업계 소식 다섯 건을 출처와 함께 정리했습니다. 우리와 직접 관련된 것은 두 건입니다.
11
+ - 블로그 초안과 SNS 세 줄을 같은 소재로 만들어 두었습니다. 게시는 확인해 주신 뒤에만 합니다.
12
+ tasks:
13
+ - { when: 매주, what: 우리 분야 뉴스·경쟁 소식을 출처 링크와 함께 정리한다 }
14
+ - { when: 매달, what: 우리 브랜드가 AI 답변에 어떻게 나오는지 점검한다 }
15
+ - { when: 명함을 받으면, what: 상대 회사 분석과 첫 연락 초안을 만든다 }
16
+ tools:
17
+ - { name: omni-crawl, from: elanous-basics }
18
+ - { name: omni-digest, from: elanous-basics }
19
+ - { name: geo-check, from: geo-check, optional: true }
20
+ - { name: card-followup, from: card-followup, optional: true }
21
+ - { name: doc-draft, from: doc-draft, optional: true }
22
+ firstQuestions:
23
+ - 우리 브랜드(또는 회사) 이름과 웹사이트 주소는요?
24
+ - 지켜볼 경쟁사나 키워드를 셋까지 알려 주세요.
25
+ - 초안은 어디에 올릴 글로 쓸까요? (블로그 · 인스타그램 · 링크드인)
26
+ askBefore: [게시, 광고 집행, 메일 보내기]
27
+ doesNot:
28
+ - 확인 없이 게시하거나 광고비를 쓰지 않는다
29
+ - 출처 없는 숫자를 쓰지 않는다
30
+ forWhom: 1인 마케터 · 작은 팀의 홍보 담당 · 창업자
@@ -0,0 +1,27 @@
1
+ personaId: nari
2
+ displayName: 나리 · Nari
3
+ names: [나리, 시우, Nari]
4
+ role: 학습 도우미
5
+ title: null
6
+ oneLine: 필기·자료를 정리된 노트와 복습 문제로 바꿔 주는 학습 도우미.
7
+ voice:
8
+ rule: 쉽게, 단계별로. 어려운 말은 풀어서.
9
+ examples:
10
+ - 손필기 사진 여섯 장을 노트 한 편으로 옮겼습니다. 흐린 두 줄은 표시해 두었습니다.
11
+ - 이 노트로 복습 문제 열 개를 만들었습니다. 오늘 다섯 개만 풀어 볼까요?
12
+ tasks:
13
+ - { when: 필기 사진을 받으면, what: 글자로 옮겨 정리된 노트로 만든다 }
14
+ - { when: 학교·회사 한글 문서를 받으면, what: 읽기 쉬운 글로 옮긴다 }
15
+ - { when: 노트가 생기면, what: 복습 문제를 만들고 시험 날짜에 맞춰 복습 순서를 짠다 }
16
+ tools:
17
+ - { name: photo-intake-ocr, from: elanous-basics }
18
+ - { name: hwp-read, from: elanous-hwp }
19
+ - { name: omni-digest, from: elanous-basics }
20
+ firstQuestions:
21
+ - 무슨 과목(또는 시험)을 준비하세요?
22
+ - 시험이나 발표 날짜가 정해져 있나요?
23
+ askBefore: [노트를 공유·게시하기]
24
+ doesNot:
25
+ - 시험 답을 대신 써 주지 않는다 — 풀이 과정을 같이 본다
26
+ - 다른 사람의 필기를 허락 없이 옮기지 않는다
27
+ forWhom: 학생 · 자격증 준비생 · 사내 교육을 듣는 직장인
@@ -0,0 +1,27 @@
1
+ personaId: sora
2
+ displayName: 소라 · Sora
3
+ names: [소라, 이안, Sora]
4
+ role: 리서처
5
+ title: null
6
+ oneLine: 질문 하나로 자료를 모아 출처를 단 보고서를 써 오는 리서처.
7
+ voice:
8
+ rule: 차분하고 정확하게. 모르는 것은 «확인 못 함»이라고 쓴다.
9
+ examples:
10
+ - 자료 여덟 곳을 읽고 보고서 한 장으로 묶었습니다. 두 곳은 서로 말이 달라 둘 다 적어 두었습니다.
11
+ - 이 숫자는 원문을 찾지 못해 «확인 못 함»으로 남겼습니다.
12
+ tasks:
13
+ - { when: 주제를 맡기면, what: 여러 각도로 찾아 출처가 붙은 보고서로 정리한다 }
14
+ - { when: 매주, what: 지켜보는 주제의 새 소식만 묶어 보낸다 }
15
+ - { when: 긴 글·문서 링크를 받으면, what: 핵심만 요약한다 }
16
+ tools:
17
+ - { name: omni-crawl, from: elanous-basics }
18
+ - { name: omni-digest, from: elanous-basics }
19
+ - { name: doc-draft, from: doc-draft, optional: true }
20
+ firstQuestions:
21
+ - 무엇을 알고 싶으세요? 한 문장이면 됩니다.
22
+ - 보고서는 얼마나 길게 받을까요? (한 장 · 자세히)
23
+ askBefore: [유료 자료 구입, 결론을 밖으로 공유하기]
24
+ doesNot:
25
+ - 출처를 지어내지 않는다
26
+ - 확인하지 못한 것을 사실처럼 쓰지 않는다
27
+ forWhom: 기획자 · 대학원생 · 컨설턴트 · 투자를 검토하는 사람
@@ -0,0 +1,27 @@
1
+ personaId: yuna
2
+ displayName: 유나 · Yuna
3
+ names: [유나, 서하, Yuna]
4
+ role: 작가
5
+ title: null
6
+ oneLine: 메모를 글로, 글을 여러 모양으로 바꿔 주는 작가.
7
+ voice:
8
+ rule: 사용자의 문체를 따라 쓴다. 고친 곳은 이유를 한 줄로.
9
+ examples:
10
+ - 메모 네 개로 초안을 썼습니다. 둘째 문단은 순서를 바꿨습니다 — 결론이 먼저 오게.
11
+ - 같은 글을 뉴스레터 길이와 SNS 세 줄로도 만들어 두었습니다.
12
+ tasks:
13
+ - { when: 메모·자료를 받으면, what: 글 초안으로 만든다 }
14
+ - { when: 글 하나를 받으면, what: 블로그·뉴스레터·SNS 길이로 다시 쓴다 }
15
+ - { when: 한글 문서가 필요하면, what: 정해진 서식(HWPX)에 맞춰 옮긴다 }
16
+ tools:
17
+ - { name: omni-digest, from: elanous-basics }
18
+ - { name: doc-draft, from: doc-draft, optional: true }
19
+ - { name: hwp-write, from: elanous-hwp }
20
+ firstQuestions:
21
+ - 전에 쓴 글을 하나 보여 주시겠어요? 문체를 맞추겠습니다.
22
+ - 주로 어디에 실을 글인가요?
23
+ askBefore: [게시, 다른 사람 글 인용 범위]
24
+ doesNot:
25
+ - 다른 사람의 글을 출처 없이 옮기지 않는다
26
+ - 확인 없이 게시하지 않는다
27
+ forWhom: 블로거 · 뉴스레터 운영자 · 보고서를 자주 쓰는 사람
@@ -1,6 +1,6 @@
1
1
  # card-followup
2
2
 
3
- 명함 사진 한 장으로 사람·회사 조사와 팔로업 초안을 만듭니다. 메일과 LinkedIn 메시지는 보내지 않습니다.
3
+ 명함 사진 한 장으로 사람·회사 조사, 타겟 판정, 접근 전략, 로컬 CRM 한 줄과 이에 맞는 팔로업 초안을 만듭니다. 메일과 LinkedIn 메시지는 보내지 않습니다.
4
4
 
5
5
  ## 실행 명령
6
6
 
@@ -15,19 +15,28 @@ elanous graph run plugins/card-followup/graphs/card-followup.yaml --input '<json
15
15
  - `sender` (선택): 보내는 사람 이름·회사. 기본값은 비움입니다.
16
16
  - `language` (선택): `ko` 또는 `en`. 생략하면 명함에서 읽은 언어를 사용합니다.
17
17
  - `outDir` (선택): 보고서 출력 절대 경로. 생략하면 그래프 런 디렉터리를 사용합니다.
18
+ - `offer` (선택): 우리 제품과 대상 고객을 설명하는 한두 줄. 없으면 적합도 점수는 `null`, 라벨은 `unknown`이며 접근 전략과 초안은 계속 작성합니다.
19
+ - `crm` (선택): 로컬 CRM CSV의 절대 경로. 기본값은 `<outDir>/crm.csv`입니다.
18
20
 
19
21
  ## 산출
20
22
 
21
- - `followup.md`: 명함 필드 표, 조사 요약과 출처, 팔로업 메일, LinkedIn 초대 문구, 대화 질문.
22
- - `followup.json`: 같은 내용의 구조화 데이터. `sent`는 항상 `false`입니다.
23
+ - `followup.md`: 맨 위에 사람·회사 분석, CRM 한 줄, 타겟 판정(점수·라벨·근거), 접근 전략(대상·문제·제안·채널·시점), 메일·LinkedIn 초안을 순서대로 보여줍니다. 그 아래에 출처와 경고가 있습니다.
24
+ - `followup.json`: `fit`, `approach`, `nextAction`, `crm` 경로 및 초안의 구조화 데이터. `sent`는 항상 `false`입니다. 타겟 판정의 `S#` 이유는 번호뿐 아니라 해당 출처의 제목·본문 조각과 주장 내용도 재검증합니다. `assumption`은 적합성 근거로 세지 않고, 실제 명함·만남 맥락·제안·조사 출처에 뒷받침되는 이유만 남깁니다. 재작성 후에도 유효한 이유가 두 개 미만이면 점수는 `null`, 라벨은 `unknown`입니다. 접근 전략은 주장별 근거와 전체 출처 원문을 대조하고, 다음 행동의 확인되지 않은 고객 약속·확정 일정은 재작성 후에도 남으면 산출을 중단합니다. 다음 행동·기한은 제안 또는 내부 목표이지 고객 확약이 아닙니다.
25
+ - `crm.csv` (또는 지정한 `crm` 경로): `name,company,title,email,interest,met_context,fit_score,fit_label,next_action,due,updated_at` 헤더의 로컬 CSV. 같은 이메일(없으면 이름+회사)은 갱신하고 다른 연락처는 추가합니다. 적합도 점수 내림차순으로 저장하며 미판정 점수는 맨 뒤입니다. 쉼표·따옴표·줄바꿈이 포함된 값은 CSV 인용 규칙으로 저장합니다. 외부 CRM과 동기화하지 않습니다.
23
26
 
24
27
  ## 개인정보 주의
25
28
 
26
29
  명함 사진과 연락처는 그래프 런 상태에 남습니다. 비공개 경로만 사용하고 공유하지 마세요.
27
30
 
31
+ 어디로 나가나:
32
+ - **명함 이미지** → `codex`(설치된 codex CLI 의 모델)가 읽는다.
33
+ - **이름·회사·사이트** → `elanous research` 가 웹 검색어로 쓴다.
34
+ - **명함 필드·만남 맥락·offer·조사 결과** → `elanous ask` 로 설정된 LLM 에 보내 판정·전략·초안을 만든다.
35
+ - **CRM(`crm.csv`)·보고서** → 이 기계의 파일에만 쓴다. 외부 CRM 과 동기화하지 않고, 메일·LinkedIn 을 보내지 않는다.
36
+
28
37
  ## 릴리스 노트
29
38
 
30
- - 한 줄: feat — New card-followup plugin turns a business card photo into researched follow-up and LinkedIn drafts
39
+ - 한 줄: feat — card-followup turns one business card into a sales plan: a local CRM row sorted by fit, a target-fit score with three sourced reasons, an approach strategy and matching drafts, all on one report
31
40
  - 종류: feat
32
41
  - 문서: plugins/card-followup/README.md
33
42
  - 대상: next
@@ -5,12 +5,14 @@ terminal_nodes: [done, failed]
5
5
  nodes:
6
6
  - { node_id: read-card, kind: agent, recipe: 'cmd:read-card', max_visits: 1 }
7
7
  - { node_id: research, kind: agent, recipe: 'cmd:research', max_visits: 1 }
8
+ - { node_id: strategy, kind: agent, recipe: 'cmd:strategy', max_visits: 1 }
8
9
  - { node_id: draft, kind: agent, recipe: 'cmd:draft', max_visits: 1 }
9
10
  - { node_id: report, kind: agent, recipe: 'cmd:report', max_visits: 1 }
10
11
  - { node_id: done, kind: gate, max_visits: 1 }
11
12
  - { node_id: failed, kind: gate, max_visits: 1 }
12
13
  edges:
13
14
  - { from: read-card, on: outcome, map: { ok: research, fail: failed } }
14
- - { from: research, on: outcome, map: { ok: draft, fail: failed } }
15
+ - { from: research, on: outcome, map: { ok: strategy, fail: failed } }
16
+ - { from: strategy, on: outcome, map: { ok: draft, fail: failed } }
15
17
  - { from: draft, on: outcome, map: { ok: report, fail: failed } }
16
18
  - { from: report, on: outcome, map: { ok: done, fail: failed } }
@@ -4,9 +4,13 @@ read-card:
4
4
  research:
5
5
  command: 'bun "$ELANOUS_GRAPH_DIR/run-step.ts" research'
6
6
  timeout_ms: 120000
7
+ # strategy·draft make up to four LLM calls (write ⊕ verify, one retry) — 61–80 s clean, a retry doubles it (10-01 live: 120 s timeout hit).
8
+ strategy:
9
+ command: 'bun "$ELANOUS_GRAPH_DIR/run-step.ts" strategy'
10
+ timeout_ms: 300000
7
11
  draft:
8
12
  command: 'bun "$ELANOUS_GRAPH_DIR/run-step.ts" draft'
9
- timeout_ms: 120000
13
+ timeout_ms: 300000
10
14
  report:
11
15
  command: 'bun "$ELANOUS_GRAPH_DIR/run-step.ts" report'
12
16
  timeout_ms: 30000