elanous 0.2.12 → 0.2.13

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 (289) hide show
  1. package/apps/pwa/out/404/index.html +1 -1
  2. package/apps/pwa/out/404.html +1 -1
  3. package/apps/pwa/out/_next/static/chunks/{1394-ee3795b112907122.js → 1394-931c9827067b2276.js} +1 -1
  4. package/apps/pwa/out/_next/static/chunks/{3992-2e522a8ac5f2afde.js → 3992-fe5c06d6b31f8b25.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/5250-c78ca295585bbf95.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/6511-ff8360be3d65aaa4.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/6588-ba380869b67c4fa7.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/{7758-0b018a9e4fc56200.js → 7758-85c2b53f731da024.js} +1 -1
  9. package/apps/pwa/out/_next/static/chunks/{8605-0259994816604c49.js → 8605-9da4678f8a310d18.js} +1 -1
  10. package/apps/pwa/out/_next/static/chunks/9906-e7b8b5310a169dfe.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/app/approvals/{page-cb169620945d1952.js → page-e5b4e1b256f41076.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-cefe8169e36cf62a.js → page-e49b9b76c565a0b1.js} +1 -1
  13. package/apps/pwa/out/_next/static/chunks/app/board/page-b4f032c893b21cc9.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/app/botlab/page-f14987d5850a31e0.js +1 -0
  15. package/apps/pwa/out/_next/static/chunks/app/bots/page-b433308aad13ceb6.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/app/chat/{page-813c4a52c9d05ca8.js → page-4c1dbb21861beab2.js} +1 -1
  17. package/apps/pwa/out/_next/static/chunks/app/consult/{page-4731f2c215358937.js → page-c85b816e3b269dbb.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/app/control/{page-a022b257950f39e6.js → page-f6bc66b919b2ea7d.js} +1 -1
  19. package/apps/pwa/out/_next/static/chunks/app/design-check/{page-a2ffc717e04b8b0a.js → page-60603c1e056c9b25.js} +1 -1
  20. package/apps/pwa/out/_next/static/chunks/app/editor/{page-b59ee4e70fc18fcf.js → page-a0ea8f5a2341ee6b.js} +1 -1
  21. package/apps/pwa/out/_next/static/chunks/app/exec/page-45c5bf04b4a605e6.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/app/field/{page-c172dabd796eb7a3.js → page-36c6c4183353ac9e.js} +1 -1
  23. package/apps/pwa/out/_next/static/chunks/app/inside/{page-1efd0cb9e0ed9d13.js → page-cb2eb0fd809980da.js} +1 -1
  24. package/apps/pwa/out/_next/static/chunks/app/intake/{page-d5dc7ff69a37b4cf.js → page-31012264da8a341f.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/app/layout-50309aeb0bdd554a.js +1 -0
  26. package/apps/pwa/out/_next/static/chunks/app/live/page-bc00e964e855f4df.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/app/market/{page-dfca9b7d2de0b135.js → page-0696ee3fac9fe56c.js} +1 -1
  28. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-793fa536b3a6ef37.js → page-66c27608f651b866.js} +1 -1
  29. package/apps/pwa/out/_next/static/chunks/app/morning/{page-6dd3bfbbde2a5c2c.js → page-6ddd2109b7fc3a80.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/app/not-found-4e50b7298c1f69a5.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/app/observatory/{page-77447356baad75d2.js → page-7a2bf830038a2264.js} +1 -1
  32. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-1f327f18694fabca.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-e5cef2fe6e4028df.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-cf596128d2b420ba.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/app/outputs/{page-6d604227e1664b71.js → page-f672536f14f0969f.js} +1 -1
  36. package/apps/pwa/out/_next/static/chunks/app/page-b52365662232db89.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/app/reflection/{page-4048543b4b7ad5e0.js → page-e7a6c80f288b1948.js} +1 -1
  38. package/apps/pwa/out/_next/static/chunks/app/scheduler/{page-4c3a3126abed551a.js → page-29a709616df9b050.js} +1 -1
  39. package/apps/pwa/out/_next/static/chunks/app/sessions/{page-64b0aecb1ca75e75.js → page-fee842d7c2151129.js} +1 -1
  40. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-78b40a344ed22f24.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/app/settings/page-75d199f448171014.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-a011dd5b0bff29c5.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/app/setup/{page-9547b5cec7cf76bf.js → page-d92e32d51ab5157e.js} +1 -1
  44. package/apps/pwa/out/_next/static/chunks/app/share/page-5f21aed6932ef375.js +1 -0
  45. package/apps/pwa/out/_next/static/chunks/app/showroom/page-1e1a53946804debf.js +1 -0
  46. package/apps/pwa/out/_next/static/chunks/app/tasks/{page-2cddeb9e2aeedc55.js → page-a1833cd43d832601.js} +1 -1
  47. package/apps/pwa/out/_next/static/chunks/app/term/{page-e297866051595d81.js → page-63d14a4d8fe1e1c1.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/app/today/{page-baba2e047872fb0f.js → page-2a511d320f762e06.js} +1 -1
  49. package/apps/pwa/out/_next/static/chunks/app/trace/{page-e895da4ec9cac345.js → page-1c3e03f88dac1e21.js} +1 -1
  50. package/apps/pwa/out/_next/static/chunks/app/vault/page-c4d5289c2ea97a89.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b91f8952deaeaf27.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/app/workflows/page-71b43a2588489987.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/app/workspace/{page-2e9e2fb01c9da1c9.js → page-2b256feed331546f.js} +1 -1
  54. package/apps/pwa/out/_next/static/chunks/app/worktrees/{page-d62ceb13411ebba4.js → page-505bb96d69a8622c.js} +1 -1
  55. package/apps/pwa/out/approvals/index.html +1 -1
  56. package/apps/pwa/out/approvals/index.txt +13 -13
  57. package/apps/pwa/out/autopilot/index.html +1 -1
  58. package/apps/pwa/out/autopilot/index.txt +13 -13
  59. package/apps/pwa/out/board/index.html +1 -1
  60. package/apps/pwa/out/board/index.txt +13 -13
  61. package/apps/pwa/out/botlab/index.html +1 -1
  62. package/apps/pwa/out/botlab/index.txt +13 -13
  63. package/apps/pwa/out/bots/index.html +1 -1
  64. package/apps/pwa/out/bots/index.txt +13 -13
  65. package/apps/pwa/out/chat/index.html +1 -1
  66. package/apps/pwa/out/chat/index.txt +13 -13
  67. package/apps/pwa/out/consult/index.html +1 -1
  68. package/apps/pwa/out/consult/index.txt +13 -13
  69. package/apps/pwa/out/control/index.html +1 -1
  70. package/apps/pwa/out/control/index.txt +13 -13
  71. package/apps/pwa/out/design-check/index.html +1 -1
  72. package/apps/pwa/out/design-check/index.txt +13 -13
  73. package/apps/pwa/out/editor/index.html +1 -1
  74. package/apps/pwa/out/editor/index.txt +13 -13
  75. package/apps/pwa/out/exec/index.html +1 -1
  76. package/apps/pwa/out/exec/index.txt +13 -13
  77. package/apps/pwa/out/field/index.html +1 -1
  78. package/apps/pwa/out/field/index.txt +13 -13
  79. package/apps/pwa/out/healthz +1 -1
  80. package/apps/pwa/out/index.html +1 -1
  81. package/apps/pwa/out/index.txt +13 -13
  82. package/apps/pwa/out/inside/index.html +1 -1
  83. package/apps/pwa/out/inside/index.txt +13 -13
  84. package/apps/pwa/out/intake/index.html +1 -1
  85. package/apps/pwa/out/intake/index.txt +13 -13
  86. package/apps/pwa/out/live/index.html +1 -1
  87. package/apps/pwa/out/live/index.txt +13 -13
  88. package/apps/pwa/out/market/index.html +1 -1
  89. package/apps/pwa/out/market/index.txt +13 -13
  90. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  91. package/apps/pwa/out/missions/placeholder/index.txt +13 -13
  92. package/apps/pwa/out/morning/index.html +1 -1
  93. package/apps/pwa/out/morning/index.txt +13 -13
  94. package/apps/pwa/out/observatory/index.html +1 -1
  95. package/apps/pwa/out/observatory/index.txt +13 -13
  96. package/apps/pwa/out/ops/checklist/index.html +1 -1
  97. package/apps/pwa/out/ops/checklist/index.txt +13 -13
  98. package/apps/pwa/out/ops/release/index.html +1 -1
  99. package/apps/pwa/out/ops/release/index.txt +13 -13
  100. package/apps/pwa/out/ops/seats/index.html +1 -1
  101. package/apps/pwa/out/ops/seats/index.txt +13 -13
  102. package/apps/pwa/out/outputs/index.html +1 -1
  103. package/apps/pwa/out/outputs/index.txt +13 -13
  104. package/apps/pwa/out/reflection/index.html +1 -1
  105. package/apps/pwa/out/reflection/index.txt +14 -14
  106. package/apps/pwa/out/scheduler/index.html +1 -1
  107. package/apps/pwa/out/scheduler/index.txt +13 -13
  108. package/apps/pwa/out/sessions/index.html +1 -1
  109. package/apps/pwa/out/sessions/index.txt +13 -13
  110. package/apps/pwa/out/settings/devices/index.html +1 -1
  111. package/apps/pwa/out/settings/devices/index.txt +13 -13
  112. package/apps/pwa/out/settings/index.html +1 -1
  113. package/apps/pwa/out/settings/index.txt +13 -13
  114. package/apps/pwa/out/setup/done/index.html +1 -1
  115. package/apps/pwa/out/setup/done/index.txt +13 -13
  116. package/apps/pwa/out/setup/index.html +1 -1
  117. package/apps/pwa/out/setup/index.txt +13 -13
  118. package/apps/pwa/out/share/index.html +1 -1
  119. package/apps/pwa/out/share/index.txt +13 -13
  120. package/apps/pwa/out/showroom/index.html +1 -1
  121. package/apps/pwa/out/showroom/index.txt +13 -13
  122. package/apps/pwa/out/tasks/index.html +1 -1
  123. package/apps/pwa/out/tasks/index.txt +13 -13
  124. package/apps/pwa/out/term/index.html +1 -1
  125. package/apps/pwa/out/term/index.txt +13 -13
  126. package/apps/pwa/out/today/index.html +1 -1
  127. package/apps/pwa/out/today/index.txt +13 -13
  128. package/apps/pwa/out/trace/index.html +1 -1
  129. package/apps/pwa/out/trace/index.txt +13 -13
  130. package/apps/pwa/out/vault/index.html +1 -1
  131. package/apps/pwa/out/vault/index.txt +13 -13
  132. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  133. package/apps/pwa/out/workflows/chat-ui/index.txt +13 -13
  134. package/apps/pwa/out/workflows/index.html +1 -1
  135. package/apps/pwa/out/workflows/index.txt +13 -13
  136. package/apps/pwa/out/workspace/index.html +1 -1
  137. package/apps/pwa/out/workspace/index.txt +13 -13
  138. package/apps/pwa/out/worktrees/index.html +1 -1
  139. package/apps/pwa/out/worktrees/index.txt +13 -13
  140. package/examples/teams/personas/backend.yaml +4 -0
  141. package/examples/teams/personas/pm.yaml +4 -0
  142. package/examples/teams/personas/qa.yaml +4 -0
  143. package/examples/teams/small-product.yaml +20 -0
  144. package/graphs/lecture/lecture-note.yaml +28 -0
  145. package/graphs/lecture/recipes.yaml +17 -0
  146. package/package.json +2 -1
  147. package/scripts/context-hooks/emit.ts +36 -14
  148. package/scripts/coord-channel-watch.sh +1 -0
  149. package/scripts/discord-seat-probe.ts +144 -0
  150. package/scripts/hq/hq-standby.sh +65 -0
  151. package/scripts/hq/standby-promote.ts +173 -0
  152. package/scripts/hq/standby-role.ts +59 -0
  153. package/scripts/hq/standby-snapshot.ts +226 -0
  154. package/scripts/hq/standby-verify.ts +219 -0
  155. package/scripts/lecture-note/node.ts +256 -0
  156. package/scripts/release-loop/gate-node.ts +53 -15
  157. package/scripts/release-loop/ops-upgrade-node.ts +17 -5
  158. package/scripts/test-deterministic.ts +53 -3
  159. package/skills/omni-crawl/SKILL.md +16 -16
  160. package/skills/omni-crawl/package-lock.json +1 -544
  161. package/skills/omni-crawl/package.json +3 -4
  162. package/skills/omni-crawl/scripts/main.ts +13 -13
  163. package/skills/omni-crawl/scripts/monitor.ts +8 -8
  164. package/skills/omni-crawl/src/apify.ts +13 -2
  165. package/skills/omni-crawl/src/capture.ts +6 -0
  166. package/skills/omni-crawl/src/registry.ts +2 -2
  167. package/skills/omni-crawl/src/stdout-json.ts +4 -0
  168. package/skills/omni-digest/SKILL.md +10 -11
  169. package/skills/omni-digest/package-lock.json +0 -545
  170. package/skills/omni-digest/package.json +2 -5
  171. package/skills/omni-digest/scripts/main.ts +3 -3
  172. package/skills/omni-digest/src/delegate.ts +5 -5
  173. package/skills/omni-digest/src/fetch.ts +2 -2
  174. package/skills/omni-digest/src/media.ts +25 -11
  175. package/skills/omni-digest/src/visual.ts +3 -2
  176. package/skills/omni-market/scripts/main.ts +1 -1
  177. package/skills/omni-market/scripts/stdout-json.ts +4 -0
  178. package/src/agent/identity-env.ts +11 -0
  179. package/src/agent-mission/driver.ts +12 -7
  180. package/src/agent-mission/duo.ts +94 -0
  181. package/src/agent-mission/pty-decision.ts +1 -1
  182. package/src/autopilot/track-agent-shadow.ts +2 -1
  183. package/src/autopilot/track-agent.ts +4 -1
  184. package/src/boot/daemon-prompt-request.ts +3 -0
  185. package/src/boot/daemon-prompt-turn.ts +6 -2
  186. package/src/boot/daemon-runtime.ts +48 -16
  187. package/src/cli/decisions-cli.ts +51 -19
  188. package/src/cli/outputs-cli.ts +92 -0
  189. package/src/cli/persona-cli.ts +29 -0
  190. package/src/cli/pod-cli.ts +10 -3
  191. package/src/cli/pr-cli.ts +15 -1
  192. package/src/cli/release-cli.ts +108 -28
  193. package/src/context-bus/condense.ts +194 -0
  194. package/src/context-bus/context-day.ts +82 -0
  195. package/src/context-bus/context-now-surfaces.ts +15 -2
  196. package/src/context-bus/long-term-memory.ts +118 -22
  197. package/src/context-bus/nightly-condense.ts +1 -1
  198. package/src/decisions/decision-cards.ts +13 -7
  199. package/src/decisions/decision-ledger.ts +43 -17
  200. package/src/graph-kinds/registry.ts +2 -2
  201. package/src/graph-runner/graph-approval-card.ts +2 -2
  202. package/src/graph-runner/graph-grow.ts +64 -11
  203. package/src/graph-runner/graph-tick.ts +9 -2
  204. package/src/graph-runner/runner.ts +81 -17
  205. package/src/harness/harness-cli-command.ts +27 -1
  206. package/src/harness/harness-queue-child.ts +37 -0
  207. package/src/harness/harness-queue.ts +306 -0
  208. package/src/hooks/github-shadow.ts +72 -2
  209. package/src/hooks/receiver.ts +4 -2
  210. package/src/hq/hq.ts +318 -0
  211. package/src/hq/lease.ts +210 -0
  212. package/src/hq/ledger-write-target.ts +41 -0
  213. package/src/index.ts +199 -7
  214. package/src/intake-plane/discord-seat-work.ts +13 -6
  215. package/src/intake-plane/linear-wish.ts +44 -0
  216. package/src/intake-plane/persona-answer.ts +5 -0
  217. package/src/intake-plane/telegram-seat-work.ts +13 -6
  218. package/src/intake-plane/wish-card.ts +1 -1
  219. package/src/loops/checker.ts +178 -0
  220. package/src/loops/loop-cli.ts +37 -3
  221. package/src/loops/observe.ts +49 -0
  222. package/src/loops/orchestrator/overlap.ts +141 -0
  223. package/src/loops/orchestrator/traffic.ts +150 -0
  224. package/src/loops/package/verify.ts +125 -0
  225. package/src/loops/verdict.ts +22 -0
  226. package/src/maturity/feature-maturity.ts +3 -3
  227. package/src/memory.ts +37 -4
  228. package/src/nexus/api/card-followup-route.ts +118 -0
  229. package/src/nexus/api/decisions-route.ts +68 -0
  230. package/src/nexus/api/http-server.ts +47 -0
  231. package/src/nexus/api/personas.ts +2 -1
  232. package/src/nexus/api/skill-exec-route.ts +97 -0
  233. package/src/persona/loader.ts +18 -0
  234. package/src/persona/persona-todo.ts +14 -9
  235. package/src/persona/presets.ts +2 -1
  236. package/src/persona/team.ts +105 -0
  237. package/src/persona/types.ts +4 -0
  238. package/src/pod-lease/host-lease.ts +130 -20
  239. package/src/release-loop/landed-but-yellow.ts +12 -0
  240. package/src/seat-dispatch/seat-ask.ts +57 -12
  241. package/src/seat-loop/seat-loop.ts +90 -16
  242. package/src/seat-loop/seat-pack.ts +127 -0
  243. package/src/self-dev/ask-launch-flow.ts +3 -0
  244. package/src/self-implement/l8-merge-queue.ts +157 -1
  245. package/src/steward/launch.ts +5 -1
  246. package/src/steward/readiness.ts +125 -0
  247. package/src/steward/rescue.ts +75 -0
  248. package/src/steward/triage.ts +48 -9
  249. package/src/task-cards/card-cli.ts +78 -0
  250. package/src/task-orchestrator/surfaces/pod-lease.ts +18 -6
  251. package/src/task-orchestrator/surfaces/pod-pool.ts +27 -10
  252. package/src/task-orchestrator/surfaces/self-implement-pod.ts +38 -8
  253. package/src/telegram-dispatch-forward.ts +1 -1
  254. package/src/telegram-fabric-plan.ts +90 -0
  255. package/src/telegram-project-command.ts +10 -4
  256. package/src/telegram.ts +5 -0
  257. package/src/tool-runtime/elanous-control-runtimes.ts +2 -1
  258. package/src/user-config.ts +94 -10
  259. package/src/version/packed-revision.json +1 -1
  260. package/src/workflow-runtime/executor.ts +4 -0
  261. package/src/workflow-runtime/node-catalog.ts +13 -0
  262. package/src/workflow-runtime/nodes/knowledge.ts +38 -0
  263. package/src/workflow-runtime/schema.ts +17 -1
  264. package/src/workflow-runtime/types.ts +13 -1
  265. package/apps/pwa/out/_next/static/chunks/1147-466ec15afacc1a65.js +0 -1
  266. package/apps/pwa/out/_next/static/chunks/7277-0b2fc7c16ba2d64b.js +0 -1
  267. package/apps/pwa/out/_next/static/chunks/9906-482c6619b3fdda20.js +0 -1
  268. package/apps/pwa/out/_next/static/chunks/9920-5cfdc5e8fd209825.js +0 -1
  269. package/apps/pwa/out/_next/static/chunks/app/board/page-d2e35228bc497119.js +0 -1
  270. package/apps/pwa/out/_next/static/chunks/app/botlab/page-5c05b0da4bc1392c.js +0 -1
  271. package/apps/pwa/out/_next/static/chunks/app/bots/page-e0ccdb576812b523.js +0 -1
  272. package/apps/pwa/out/_next/static/chunks/app/exec/page-a67e11ba962337b5.js +0 -1
  273. package/apps/pwa/out/_next/static/chunks/app/layout-e71c84189e8c683e.js +0 -1
  274. package/apps/pwa/out/_next/static/chunks/app/live/page-1d6a533ce5a6efcb.js +0 -1
  275. package/apps/pwa/out/_next/static/chunks/app/not-found-490653e8d4cc8852.js +0 -1
  276. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-29e961191f6057df.js +0 -1
  277. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-c822f55b884d9104.js +0 -1
  278. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fa4ccfc432424e52.js +0 -1
  279. package/apps/pwa/out/_next/static/chunks/app/page-9c7e8f744a765daf.js +0 -1
  280. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-4292d0149020e8a7.js +0 -1
  281. package/apps/pwa/out/_next/static/chunks/app/settings/page-db14d0be7f1c460c.js +0 -1
  282. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-e5d8072cd7cfef73.js +0 -1
  283. package/apps/pwa/out/_next/static/chunks/app/share/page-e6dcb83265530636.js +0 -1
  284. package/apps/pwa/out/_next/static/chunks/app/showroom/page-45248f08d6aecae5.js +0 -1
  285. package/apps/pwa/out/_next/static/chunks/app/vault/page-4344faf20216233b.js +0 -1
  286. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-698bb29f11864b89.js +0 -1
  287. package/apps/pwa/out/_next/static/chunks/app/workflows/page-bd6a6dc1ddc273f2.js +0 -1
  288. /package/apps/pwa/out/_next/static/{-6XrAoD3eU7NyMHAE4xPS → D51l8jUBplJrIpWvENsDK}/_buildManifest.js +0 -0
  289. /package/apps/pwa/out/_next/static/{-6XrAoD3eU7NyMHAE4xPS → D51l8jUBplJrIpWvENsDK}/_ssgManifest.js +0 -0
@@ -1,8 +1,8 @@
1
- #!/usr/bin/env -S npx tsx
1
+ #!/usr/bin/env bun
2
2
  // omni-crawl — 통합 검색/크롤링 (2026-07-06 재편: tavily+firecrawl REST+grok 역할분담)
3
3
  //
4
4
  // CLI 계약 (asset-attractiveness·research-bridge가 의존 — 절대 유지):
5
- // npx tsx main.ts "<query>" [--engine e1,e2] [--print] → exit 0 + 마크다운 마커
5
+ // bun main.ts "<query>" [--engine e1,e2] [--print] → exit 0 + 마크다운 마커
6
6
  import { parseArgs } from 'node:util';
7
7
  import { initEnv } from '../src/env.js';
8
8
  import { decideCrawl } from '../src/router.js';
@@ -14,7 +14,7 @@ import { chromeAvailable } from '../src/capture.js';
14
14
  import { runRegisteredEngine, type EngineCtx } from '../src/registry.js';
15
15
  import { renderMarkdown, saveMarkdown, renderSourcesSection } from '../src/render.js';
16
16
  import type { CrawlResult, CrawlItem, SearchEngine } from '../src/types.js';
17
- import { writeStdoutJson } from '../../../src/cli/stdout-json.js';
17
+ import { writeStdoutJson } from '../src/stdout-json.js';
18
18
 
19
19
  initEnv();
20
20
 
@@ -502,8 +502,8 @@ function printHelp() {
502
502
  console.log(`
503
503
  omni-crawl — 통합 검색/크롤링 (tavily + firecrawl REST + grok + apify 역할분담)
504
504
 
505
- 사용법: npx tsx scripts/main.ts "<검색어>" [OPTIONS]
506
- npx tsx scripts/main.ts --health # 전 엔진 라이브 진단
505
+ 사용법: bun scripts/main.ts "<검색어>" [OPTIONS]
506
+ bun scripts/main.ts --health # 전 엔진 라이브 진단
507
507
 
508
508
  역할: 일반 웹=tavily · 뉴스=tavily-news+fc-news · 크롤/스크랩=firecrawl(REST)
509
509
  커뮤니티/X/레딧=grok · 트윗 벌크=apify · 딥리서치=--mode deep
@@ -532,13 +532,13 @@ omni-crawl — 통합 검색/크롤링 (tavily + firecrawl REST + grok + apify
532
532
  --self-test 라우팅 회귀 테스트
533
533
 
534
534
  예시:
535
- npx tsx scripts/main.ts "Samsung HBM4 경쟁력" --print # tavily 기본
536
- npx tsx scripts/main.ts "삼성전자 뉴스" --time-range day --print # 뉴스 (오늘)
537
- npx tsx scripts/main.ts "SK하이닉스 전망" --mode deep --print # 딥리서치+인용
538
- npx tsx scripts/main.ts "AI 트렌드" --free --print # 무료 티어(ddg)
539
- npx tsx scripts/main.ts "https://news.samsung.com" --engine capture # 스크린샷
540
- npx tsx scripts/main.ts "bitcoin outlook" --engine apify --min-favs 50 --print
541
- npx tsx scripts/main.ts "https://news.samsung.com" --engine fc-crawl # 사이트 크롤
542
- npx tsx scripts/main.ts "NVDA earnings" --json # 파이프라인 소비
535
+ bun scripts/main.ts "Samsung HBM4 경쟁력" --print # tavily 기본
536
+ bun scripts/main.ts "삼성전자 뉴스" --time-range day --print # 뉴스 (오늘)
537
+ bun scripts/main.ts "SK하이닉스 전망" --mode deep --print # 딥리서치+인용
538
+ bun scripts/main.ts "AI 트렌드" --free --print # 무료 티어(ddg)
539
+ bun scripts/main.ts "https://news.samsung.com" --engine capture # 스크린샷
540
+ bun scripts/main.ts "bitcoin outlook" --engine apify --min-favs 50 --print
541
+ bun scripts/main.ts "https://news.samsung.com" --engine fc-crawl # 사이트 크롤
542
+ bun scripts/main.ts "NVDA earnings" --json # 파이프라인 소비
543
543
  `);
544
544
  }
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env -S npx tsx
1
+ #!/usr/bin/env bun
2
2
  // omni-crawl monitor — Firecrawl Monitors 관리 CLI (specs/firecrawl/monitor-*.md 기준)
3
3
  //
4
4
  // 페이지 변경감지 모니터(뉴스룸/IR/공시 등)를 생성·조회·삭제한다.
@@ -7,18 +7,18 @@
7
7
  // /v1/outbound(텔레그램)로 발송한다. 여기는 셋업/디버그 표면.
8
8
  //
9
9
  // 사용:
10
- // npx tsx scripts/monitor.ts create --name "삼성 뉴스룸" --urls "https://news.samsung.com/kr" \
10
+ // bun scripts/monitor.ts create --name "삼성 뉴스룸" --urls "https://news.samsung.com/kr" \
11
11
  // --schedule "every 1 hours" --goal "새 기사/공지 등장 시 알림"
12
- // npx tsx scripts/monitor.ts list
13
- // npx tsx scripts/monitor.ts checks <monitorId> [--limit 5]
14
- // npx tsx scripts/monitor.ts check <monitorId> <checkId>
15
- // npx tsx scripts/monitor.ts run <monitorId> # 즉시 1회 체크
16
- // npx tsx scripts/monitor.ts delete <monitorId>
12
+ // bun scripts/monitor.ts list
13
+ // bun scripts/monitor.ts checks <monitorId> [--limit 5]
14
+ // bun scripts/monitor.ts check <monitorId> <checkId>
15
+ // bun scripts/monitor.ts run <monitorId> # 즉시 1회 체크
16
+ // bun scripts/monitor.ts delete <monitorId>
17
17
 
18
18
  import { parseArgs } from 'node:util';
19
19
  import { initEnv, env } from '../src/env.js';
20
20
  import { validatePublicHttpUrl } from '../src/url-safety.js';
21
- import { writeStdoutJson } from '../../../src/cli/stdout-json.ts';
21
+ import { writeStdoutJson } from '../src/stdout-json.js';
22
22
 
23
23
  initEnv();
24
24
 
@@ -1,6 +1,5 @@
1
1
  /** Apify tweet-scraper — absorbed from apify-x-asset-sentiment (Python → TypeScript) */
2
2
 
3
- import { requireEnv } from './env.js';
4
3
  import type { CrawlResult, CrawlItem } from './types.js';
5
4
 
6
5
  const ENDPOINT = 'https://api.apify.com/v2/acts/apidojo~tweet-scraper/run-sync-get-dataset-items';
@@ -21,8 +20,20 @@ function buildSearchTerms(query: string, lang: string, addDefaults: boolean): st
21
20
  return `${query} ${suffix}`.trim();
22
21
  }
23
22
 
23
+ let missingApifyReported = false;
24
+
25
+ export function apifyAvailable(): boolean {
26
+ if (process.env.APIFY_TOKEN) return true;
27
+ if (!missingApifyReported) {
28
+ missingApifyReported = true;
29
+ console.error('Apify 없음 — X 트윗 벌크 수집 빠짐 · APIFY_TOKEN 설정하면 벌크 검색 켜짐');
30
+ }
31
+ return false;
32
+ }
33
+
24
34
  export async function searchApifyTweets(opts: ApifySearchOpts): Promise<CrawlResult> {
25
- const token = requireEnv('APIFY_TOKEN');
35
+ if (!apifyAvailable()) return { engine: 'apify', query: opts.query, items: [], totalItems: 0 };
36
+ const token = process.env.APIFY_TOKEN!;
26
37
  const url = `${ENDPOINT}?token=${token}`;
27
38
 
28
39
  const lang = opts.lang || 'en';
@@ -25,6 +25,8 @@ const CHROME_CANDIDATES = [
25
25
  '/usr/bin/chromium-browser',
26
26
  ];
27
27
 
28
+ let missingChromeReported = false;
29
+
28
30
  function findChrome(): string | null {
29
31
  const override = env('OMNI_CRAWL_CHROME');
30
32
  if (override && existsSync(override)) return override;
@@ -76,6 +78,10 @@ export async function captureScreenshot(url: string, opts?: CaptureOpts): Promis
76
78
 
77
79
  // 1순위: headless Chrome 셸아웃
78
80
  const chrome = findChrome();
81
+ if (!chrome && !missingChromeReported) {
82
+ missingChromeReported = true;
83
+ console.error('Chrome 없음 — 로컬 스크린샷 빠짐 · 설치하면 headless 캡처 켜짐 (CDP 폴백은 계속)');
84
+ }
79
85
  if (chrome) {
80
86
  console.log(` [capture] headless Chrome 렌더: ${url}`);
81
87
  const args = [
@@ -12,7 +12,7 @@
12
12
  import type { CrawlResult, CrawlItem, SearchEngine } from './types.js';
13
13
  import { searchTavily } from './tavily.js';
14
14
  import { searchFirecrawl, searchDeveloperFirecrawl, agentFirecrawl, mapFirecrawl, crawlSiteFirecrawl } from './firecrawl.js';
15
- import { searchApifyTweets } from './apify.js';
15
+ import { searchApifyTweets, apifyAvailable } from './apify.js';
16
16
  import { searchGrok } from './grok-search.js';
17
17
  import { searchDdg } from './free.js';
18
18
  import { captureScreenshot } from './capture.js';
@@ -122,7 +122,7 @@ const DESCRIPTORS: EngineDescriptor[] = [
122
122
  },
123
123
  {
124
124
  id: 'apify', capability: 'tweets', tier: 'paid',
125
- available: () => hasKey('APIFY_TOKEN'),
125
+ available: apifyAvailable,
126
126
  run: (q, c) => searchApifyTweets({ query: q, minFavs: c.minFavs, maxItems: c.maxItems, lang: c.lang }),
127
127
  },
128
128
  { id: 'grok-x', capability: 'community', tier: 'paid', available: () => hasKey('XAI_API_KEY'), run: (q) => searchGrok({ query: q, mode: 'x' }) },
@@ -0,0 +1,4 @@
1
+ /** Write JSON output completely before the process can exit. (Kept inside the skill so the skill runs outside this repository — public pack and lite Pod.) */
2
+ export async function writeStdoutJson(text: string): Promise<void> {
3
+ await new Promise<void>((resolve, reject) => process.stdout.write(text, error => error ? reject(error) : resolve()));
4
+ }
@@ -80,26 +80,26 @@ URL (X, YouTube, 웹, GitHub) 또는 파일 (PDF, DOCX, 이미지) + 요약/정
80
80
  이 스킬 폴더에서 실행합니다.
81
81
 
82
82
  ```bash
83
- npx tsx scripts/main.ts "<INPUT>" --message "<의도>" --print
83
+ bun scripts/main.ts "<INPUT>" --message "<의도>" --print
84
84
  ```
85
85
 
86
86
  ### 예시
87
87
 
88
88
  ```bash
89
89
  # X 포스트 카드형 요약
90
- npx tsx scripts/main.ts "https://x.com/user/status/123" --print
90
+ bun scripts/main.ts "https://x.com/user/status/123" --print
91
91
 
92
92
  # 웹 아티클 상세 + 다이어그램
93
- npx tsx scripts/main.ts "https://example.com" --format rich --diagram --print
93
+ bun scripts/main.ts "https://example.com" --format rich --diagram --print
94
94
 
95
95
  # GitHub PR + Obsidian + 웹 동시
96
- npx tsx scripts/main.ts "https://github.com/o/r/pull/42" --target obsidian,web --print
96
+ bun scripts/main.ts "https://github.com/o/r/pull/42" --target obsidian,web --print
97
97
 
98
98
  # PDF OCR + 요약
99
- npx tsx scripts/main.ts "/path/to/scan.pdf" --print
99
+ bun scripts/main.ts "/path/to/scan.pdf" --print
100
100
 
101
101
  # 이미지 OCR + 요약
102
- npx tsx scripts/main.ts "photo.png" --print
102
+ bun scripts/main.ts "photo.png" --print
103
103
  ```
104
104
 
105
105
  ## 옵션
@@ -236,13 +236,13 @@ X API media.variants → 최저 비트레이트 MP4 → ffmpeg 오디오 추출
236
236
 
237
237
  ```bash
238
238
  # sum 모드: summarize 추출 → Grok 요약
239
- npx tsx scripts/main.ts "https://example.com" -m "sum 요약" --print
239
+ bun scripts/main.ts "https://example.com" -m "sum 요약" --print
240
240
 
241
241
  # sum full 모드: summarize CLI가 추출+요약 모두 (Grok 스킵)
242
- npx tsx scripts/main.ts "https://example.com" -m "sum full" --print
242
+ bun scripts/main.ts "https://example.com" -m "sum full" --print
243
243
 
244
244
  # 기본 모드 (summarize는 firecrawl 폴백으로 동작)
245
- npx tsx scripts/main.ts "https://example.com" --print
245
+ bun scripts/main.ts "https://example.com" --print
246
246
  ```
247
247
 
248
248
  ### summarize CLI 설치
@@ -263,6 +263,5 @@ summarize --help
263
263
 
264
264
  ```bash
265
265
  cd <installed-skill-folder>
266
- npm install
267
- npx tsx scripts/main.ts --self-test
266
+ bun scripts/main.ts --self-test
268
267
  ```