@supen-ai/cli 0.1.6

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 (681) hide show
  1. package/README.md +235 -0
  2. package/daemon/dist/acp-client.d.ts +42 -0
  3. package/daemon/dist/acp-client.d.ts.map +1 -0
  4. package/daemon/dist/acp-client.js +149 -0
  5. package/daemon/dist/acp-client.js.map +1 -0
  6. package/daemon/dist/acp-types.d.ts +98 -0
  7. package/daemon/dist/acp-types.d.ts.map +1 -0
  8. package/daemon/dist/acp-types.js +2 -0
  9. package/daemon/dist/acp-types.js.map +1 -0
  10. package/daemon/dist/agent-sdk/app-server-approvals.d.ts +24 -0
  11. package/daemon/dist/agent-sdk/app-server-approvals.d.ts.map +1 -0
  12. package/daemon/dist/agent-sdk/app-server-approvals.js +99 -0
  13. package/daemon/dist/agent-sdk/app-server-approvals.js.map +1 -0
  14. package/daemon/dist/agent-sdk/app-server-stream.d.ts +8 -0
  15. package/daemon/dist/agent-sdk/app-server-stream.d.ts.map +1 -0
  16. package/daemon/dist/agent-sdk/app-server-stream.js +328 -0
  17. package/daemon/dist/agent-sdk/app-server-stream.js.map +1 -0
  18. package/daemon/dist/agent-sdk/driver-output-ui.d.ts +9 -0
  19. package/daemon/dist/agent-sdk/driver-output-ui.d.ts.map +1 -0
  20. package/daemon/dist/agent-sdk/driver-output-ui.js +290 -0
  21. package/daemon/dist/agent-sdk/driver-output-ui.js.map +1 -0
  22. package/daemon/dist/agent-sdk/drivers/acpx-driver.d.ts +21 -0
  23. package/daemon/dist/agent-sdk/drivers/acpx-driver.d.ts.map +1 -0
  24. package/daemon/dist/agent-sdk/drivers/acpx-driver.js +488 -0
  25. package/daemon/dist/agent-sdk/drivers/acpx-driver.js.map +1 -0
  26. package/daemon/dist/agent-sdk/drivers/claude-acpx-driver.d.ts +5 -0
  27. package/daemon/dist/agent-sdk/drivers/claude-acpx-driver.d.ts.map +1 -0
  28. package/daemon/dist/agent-sdk/drivers/claude-acpx-driver.js +7 -0
  29. package/daemon/dist/agent-sdk/drivers/claude-acpx-driver.js.map +1 -0
  30. package/daemon/dist/agent-sdk/drivers/claude-cli-direct-driver.d.ts +20 -0
  31. package/daemon/dist/agent-sdk/drivers/claude-cli-direct-driver.d.ts.map +1 -0
  32. package/daemon/dist/agent-sdk/drivers/claude-cli-direct-driver.js +264 -0
  33. package/daemon/dist/agent-sdk/drivers/claude-cli-direct-driver.js.map +1 -0
  34. package/daemon/dist/agent-sdk/drivers/claude-code-driver.d.ts +29 -0
  35. package/daemon/dist/agent-sdk/drivers/claude-code-driver.d.ts.map +1 -0
  36. package/daemon/dist/agent-sdk/drivers/claude-code-driver.js +24 -0
  37. package/daemon/dist/agent-sdk/drivers/claude-code-driver.js.map +1 -0
  38. package/daemon/dist/agent-sdk/drivers/claude-code-events.d.ts +25 -0
  39. package/daemon/dist/agent-sdk/drivers/claude-code-events.d.ts.map +1 -0
  40. package/daemon/dist/agent-sdk/drivers/claude-code-events.js +58 -0
  41. package/daemon/dist/agent-sdk/drivers/claude-code-events.js.map +1 -0
  42. package/daemon/dist/agent-sdk/drivers/claude-code-items.d.ts +41 -0
  43. package/daemon/dist/agent-sdk/drivers/claude-code-items.d.ts.map +1 -0
  44. package/daemon/dist/agent-sdk/drivers/claude-code-items.js +77 -0
  45. package/daemon/dist/agent-sdk/drivers/claude-code-items.js.map +1 -0
  46. package/daemon/dist/agent-sdk/drivers/codex-acpx-driver.d.ts +5 -0
  47. package/daemon/dist/agent-sdk/drivers/codex-acpx-driver.d.ts.map +1 -0
  48. package/daemon/dist/agent-sdk/drivers/codex-acpx-driver.js +7 -0
  49. package/daemon/dist/agent-sdk/drivers/codex-acpx-driver.js.map +1 -0
  50. package/daemon/dist/agent-sdk/drivers/codex-app-server-driver.d.ts +12 -0
  51. package/daemon/dist/agent-sdk/drivers/codex-app-server-driver.d.ts.map +1 -0
  52. package/daemon/dist/agent-sdk/drivers/codex-app-server-driver.js +484 -0
  53. package/daemon/dist/agent-sdk/drivers/codex-app-server-driver.js.map +1 -0
  54. package/daemon/dist/agent-sdk/drivers/codex-exec-driver.d.ts +28 -0
  55. package/daemon/dist/agent-sdk/drivers/codex-exec-driver.d.ts.map +1 -0
  56. package/daemon/dist/agent-sdk/drivers/codex-exec-driver.js +219 -0
  57. package/daemon/dist/agent-sdk/drivers/codex-exec-driver.js.map +1 -0
  58. package/daemon/dist/agent-sdk/drivers/codex-exec-events.d.ts +9 -0
  59. package/daemon/dist/agent-sdk/drivers/codex-exec-events.d.ts.map +1 -0
  60. package/daemon/dist/agent-sdk/drivers/codex-exec-events.js +82 -0
  61. package/daemon/dist/agent-sdk/drivers/codex-exec-events.js.map +1 -0
  62. package/daemon/dist/agent-sdk/drivers/codex-exec-items.d.ts +9 -0
  63. package/daemon/dist/agent-sdk/drivers/codex-exec-items.d.ts.map +1 -0
  64. package/daemon/dist/agent-sdk/drivers/codex-exec-items.js +86 -0
  65. package/daemon/dist/agent-sdk/drivers/codex-exec-items.js.map +1 -0
  66. package/daemon/dist/agent-sdk/drivers/driver.d.ts +60 -0
  67. package/daemon/dist/agent-sdk/drivers/driver.d.ts.map +1 -0
  68. package/daemon/dist/agent-sdk/drivers/driver.js +2 -0
  69. package/daemon/dist/agent-sdk/drivers/driver.js.map +1 -0
  70. package/daemon/dist/agent-sdk/drivers/gemini-cli-driver.d.ts +17 -0
  71. package/daemon/dist/agent-sdk/drivers/gemini-cli-driver.d.ts.map +1 -0
  72. package/daemon/dist/agent-sdk/drivers/gemini-cli-driver.js +255 -0
  73. package/daemon/dist/agent-sdk/drivers/gemini-cli-driver.js.map +1 -0
  74. package/daemon/dist/agent-sdk/drivers/registry.d.ts +21 -0
  75. package/daemon/dist/agent-sdk/drivers/registry.d.ts.map +1 -0
  76. package/daemon/dist/agent-sdk/drivers/registry.js +167 -0
  77. package/daemon/dist/agent-sdk/drivers/registry.js.map +1 -0
  78. package/daemon/dist/agent-sdk/index.d.ts +24 -0
  79. package/daemon/dist/agent-sdk/index.d.ts.map +1 -0
  80. package/daemon/dist/agent-sdk/index.js +19 -0
  81. package/daemon/dist/agent-sdk/index.js.map +1 -0
  82. package/daemon/dist/agent-sdk/intelligence/contracts.d.ts +17 -0
  83. package/daemon/dist/agent-sdk/intelligence/contracts.d.ts.map +1 -0
  84. package/daemon/dist/agent-sdk/intelligence/contracts.js +2 -0
  85. package/daemon/dist/agent-sdk/intelligence/contracts.js.map +1 -0
  86. package/daemon/dist/agent-sdk/memory/filesystem.d.ts +7 -0
  87. package/daemon/dist/agent-sdk/memory/filesystem.d.ts.map +1 -0
  88. package/daemon/dist/agent-sdk/memory/filesystem.js +133 -0
  89. package/daemon/dist/agent-sdk/memory/filesystem.js.map +1 -0
  90. package/daemon/dist/agent-sdk/memory/subsystem.d.ts +54 -0
  91. package/daemon/dist/agent-sdk/memory/subsystem.d.ts.map +1 -0
  92. package/daemon/dist/agent-sdk/memory/subsystem.js +106 -0
  93. package/daemon/dist/agent-sdk/memory/subsystem.js.map +1 -0
  94. package/daemon/dist/agent-sdk/session-events.d.ts +59 -0
  95. package/daemon/dist/agent-sdk/session-events.d.ts.map +1 -0
  96. package/daemon/dist/agent-sdk/session-events.js +104 -0
  97. package/daemon/dist/agent-sdk/session-events.js.map +1 -0
  98. package/daemon/dist/agent-sdk/session-manager.d.ts +28 -0
  99. package/daemon/dist/agent-sdk/session-manager.d.ts.map +1 -0
  100. package/daemon/dist/agent-sdk/session-manager.js +54 -0
  101. package/daemon/dist/agent-sdk/session-manager.js.map +1 -0
  102. package/daemon/dist/agent-sdk/types.d.ts +110 -0
  103. package/daemon/dist/agent-sdk/types.d.ts.map +1 -0
  104. package/daemon/dist/agent-sdk/types.js +2 -0
  105. package/daemon/dist/agent-sdk/types.js.map +1 -0
  106. package/daemon/dist/automation-event-listener.d.ts +27 -0
  107. package/daemon/dist/automation-event-listener.d.ts.map +1 -0
  108. package/daemon/dist/automation-event-listener.js +342 -0
  109. package/daemon/dist/automation-event-listener.js.map +1 -0
  110. package/daemon/dist/automation-runner.d.ts +17 -0
  111. package/daemon/dist/automation-runner.d.ts.map +1 -0
  112. package/daemon/dist/automation-runner.js +592 -0
  113. package/daemon/dist/automation-runner.js.map +1 -0
  114. package/daemon/dist/autonomy/feedback-memory.d.ts +8 -0
  115. package/daemon/dist/autonomy/feedback-memory.d.ts.map +1 -0
  116. package/daemon/dist/autonomy/feedback-memory.js +23 -0
  117. package/daemon/dist/autonomy/feedback-memory.js.map +1 -0
  118. package/daemon/dist/autonomy/intent-router.d.ts +10 -0
  119. package/daemon/dist/autonomy/intent-router.d.ts.map +1 -0
  120. package/daemon/dist/autonomy/intent-router.js +72 -0
  121. package/daemon/dist/autonomy/intent-router.js.map +1 -0
  122. package/daemon/dist/autonomy/memory-rules.d.ts +35 -0
  123. package/daemon/dist/autonomy/memory-rules.d.ts.map +1 -0
  124. package/daemon/dist/autonomy/memory-rules.js +117 -0
  125. package/daemon/dist/autonomy/memory-rules.js.map +1 -0
  126. package/daemon/dist/autonomy/proof-packet.d.ts +17 -0
  127. package/daemon/dist/autonomy/proof-packet.d.ts.map +1 -0
  128. package/daemon/dist/autonomy/proof-packet.js +28 -0
  129. package/daemon/dist/autonomy/proof-packet.js.map +1 -0
  130. package/daemon/dist/autonomy/session-autonomy.d.ts +18 -0
  131. package/daemon/dist/autonomy/session-autonomy.d.ts.map +1 -0
  132. package/daemon/dist/autonomy/session-autonomy.js +71 -0
  133. package/daemon/dist/autonomy/session-autonomy.js.map +1 -0
  134. package/daemon/dist/autonomy/source-inventory.d.ts +3 -0
  135. package/daemon/dist/autonomy/source-inventory.d.ts.map +1 -0
  136. package/daemon/dist/autonomy/source-inventory.js +84 -0
  137. package/daemon/dist/autonomy/source-inventory.js.map +1 -0
  138. package/daemon/dist/autonomy/types.d.ts +20 -0
  139. package/daemon/dist/autonomy/types.d.ts.map +1 -0
  140. package/daemon/dist/autonomy/types.js +2 -0
  141. package/daemon/dist/autonomy/types.js.map +1 -0
  142. package/daemon/dist/bin/mcp-os.d.ts +3 -0
  143. package/daemon/dist/bin/mcp-os.d.ts.map +1 -0
  144. package/daemon/dist/bin/mcp-os.js +63 -0
  145. package/daemon/dist/bin/mcp-os.js.map +1 -0
  146. package/daemon/dist/bin/mcp-scheduler.d.ts +3 -0
  147. package/daemon/dist/bin/mcp-scheduler.d.ts.map +1 -0
  148. package/daemon/dist/bin/mcp-scheduler.js +90 -0
  149. package/daemon/dist/bin/mcp-scheduler.js.map +1 -0
  150. package/daemon/dist/bin/supen-sys.d.ts +3 -0
  151. package/daemon/dist/bin/supen-sys.d.ts.map +1 -0
  152. package/daemon/dist/bin/supen-sys.js +38 -0
  153. package/daemon/dist/bin/supen-sys.js.map +1 -0
  154. package/daemon/dist/bootstrap/hub-bootstrap.d.ts +2 -0
  155. package/daemon/dist/bootstrap/hub-bootstrap.d.ts.map +1 -0
  156. package/daemon/dist/bootstrap/hub-bootstrap.js +409 -0
  157. package/daemon/dist/bootstrap/hub-bootstrap.js.map +1 -0
  158. package/daemon/dist/bootstrap/skill-bootstrap.d.ts +2 -0
  159. package/daemon/dist/bootstrap/skill-bootstrap.d.ts.map +1 -0
  160. package/daemon/dist/bootstrap/skill-bootstrap.js +92 -0
  161. package/daemon/dist/bootstrap/skill-bootstrap.js.map +1 -0
  162. package/daemon/dist/channels/acp.d.ts +23 -0
  163. package/daemon/dist/channels/acp.d.ts.map +1 -0
  164. package/daemon/dist/channels/acp.js +916 -0
  165. package/daemon/dist/channels/acp.js.map +1 -0
  166. package/daemon/dist/channels/base.d.ts +38 -0
  167. package/daemon/dist/channels/base.d.ts.map +1 -0
  168. package/daemon/dist/channels/base.js +56 -0
  169. package/daemon/dist/channels/base.js.map +1 -0
  170. package/daemon/dist/channels/http-routes.d.ts +44 -0
  171. package/daemon/dist/channels/http-routes.d.ts.map +1 -0
  172. package/daemon/dist/channels/http-routes.js +688 -0
  173. package/daemon/dist/channels/http-routes.js.map +1 -0
  174. package/daemon/dist/channels/http.d.ts +16 -0
  175. package/daemon/dist/channels/http.d.ts.map +1 -0
  176. package/daemon/dist/channels/http.js +84 -0
  177. package/daemon/dist/channels/http.js.map +1 -0
  178. package/daemon/dist/channels/index.d.ts +3 -0
  179. package/daemon/dist/channels/index.d.ts.map +1 -0
  180. package/daemon/dist/channels/index.js +7 -0
  181. package/daemon/dist/channels/index.js.map +1 -0
  182. package/daemon/dist/channels/registry.d.ts +18 -0
  183. package/daemon/dist/channels/registry.d.ts.map +1 -0
  184. package/daemon/dist/channels/registry.js +11 -0
  185. package/daemon/dist/channels/registry.js.map +1 -0
  186. package/daemon/dist/commands/builtin.d.ts +7 -0
  187. package/daemon/dist/commands/builtin.d.ts.map +1 -0
  188. package/daemon/dist/commands/builtin.js +111 -0
  189. package/daemon/dist/commands/builtin.js.map +1 -0
  190. package/daemon/dist/commands/catalog.d.ts +47 -0
  191. package/daemon/dist/commands/catalog.d.ts.map +1 -0
  192. package/daemon/dist/commands/catalog.js +487 -0
  193. package/daemon/dist/commands/catalog.js.map +1 -0
  194. package/daemon/dist/core/app.d.ts +18 -0
  195. package/daemon/dist/core/app.d.ts.map +1 -0
  196. package/daemon/dist/core/app.js +49 -0
  197. package/daemon/dist/core/app.js.map +1 -0
  198. package/daemon/dist/core/automation-timing.d.ts +10 -0
  199. package/daemon/dist/core/automation-timing.d.ts.map +1 -0
  200. package/daemon/dist/core/automation-timing.js +211 -0
  201. package/daemon/dist/core/automation-timing.js.map +1 -0
  202. package/daemon/dist/core/codex-subscription.d.ts +8 -0
  203. package/daemon/dist/core/codex-subscription.d.ts.map +1 -0
  204. package/daemon/dist/core/codex-subscription.js +150 -0
  205. package/daemon/dist/core/codex-subscription.js.map +1 -0
  206. package/daemon/dist/core/command-hub.d.ts +22 -0
  207. package/daemon/dist/core/command-hub.d.ts.map +1 -0
  208. package/daemon/dist/core/command-hub.js +59 -0
  209. package/daemon/dist/core/command-hub.js.map +1 -0
  210. package/daemon/dist/core/config.d.ts +146 -0
  211. package/daemon/dist/core/config.d.ts.map +1 -0
  212. package/daemon/dist/core/config.js +663 -0
  213. package/daemon/dist/core/config.js.map +1 -0
  214. package/daemon/dist/core/control-commands.d.ts +17 -0
  215. package/daemon/dist/core/control-commands.d.ts.map +1 -0
  216. package/daemon/dist/core/control-commands.js +35 -0
  217. package/daemon/dist/core/control-commands.js.map +1 -0
  218. package/daemon/dist/core/control-log.d.ts +17 -0
  219. package/daemon/dist/core/control-log.d.ts.map +1 -0
  220. package/daemon/dist/core/control-log.js +67 -0
  221. package/daemon/dist/core/control-log.js.map +1 -0
  222. package/daemon/dist/core/cortex.d.ts +53 -0
  223. package/daemon/dist/core/cortex.d.ts.map +1 -0
  224. package/daemon/dist/core/cortex.js +1690 -0
  225. package/daemon/dist/core/cortex.js.map +1 -0
  226. package/daemon/dist/core/daemon-lock.d.ts +16 -0
  227. package/daemon/dist/core/daemon-lock.d.ts.map +1 -0
  228. package/daemon/dist/core/daemon-lock.js +285 -0
  229. package/daemon/dist/core/daemon-lock.js.map +1 -0
  230. package/daemon/dist/core/dispatcher.d.ts +42 -0
  231. package/daemon/dist/core/dispatcher.d.ts.map +1 -0
  232. package/daemon/dist/core/dispatcher.js +173 -0
  233. package/daemon/dist/core/dispatcher.js.map +1 -0
  234. package/daemon/dist/core/enrollment.d.ts +41 -0
  235. package/daemon/dist/core/enrollment.d.ts.map +1 -0
  236. package/daemon/dist/core/enrollment.js +195 -0
  237. package/daemon/dist/core/enrollment.js.map +1 -0
  238. package/daemon/dist/core/env.d.ts +109 -0
  239. package/daemon/dist/core/env.d.ts.map +1 -0
  240. package/daemon/dist/core/env.js +329 -0
  241. package/daemon/dist/core/env.js.map +1 -0
  242. package/daemon/dist/core/gateway-config.d.ts +16 -0
  243. package/daemon/dist/core/gateway-config.d.ts.map +1 -0
  244. package/daemon/dist/core/gateway-config.js +103 -0
  245. package/daemon/dist/core/gateway-config.js.map +1 -0
  246. package/daemon/dist/core/gateway-protocol.d.ts +80 -0
  247. package/daemon/dist/core/gateway-protocol.d.ts.map +1 -0
  248. package/daemon/dist/core/gateway-protocol.js +2 -0
  249. package/daemon/dist/core/gateway-protocol.js.map +1 -0
  250. package/daemon/dist/core/gateway-routing-config.d.ts +21 -0
  251. package/daemon/dist/core/gateway-routing-config.d.ts.map +1 -0
  252. package/daemon/dist/core/gateway-routing-config.js +56 -0
  253. package/daemon/dist/core/gateway-routing-config.js.map +1 -0
  254. package/daemon/dist/core/gateway.d.ts +124 -0
  255. package/daemon/dist/core/gateway.d.ts.map +1 -0
  256. package/daemon/dist/core/gateway.js +887 -0
  257. package/daemon/dist/core/gateway.js.map +1 -0
  258. package/daemon/dist/core/hub-snapshot.d.ts +42 -0
  259. package/daemon/dist/core/hub-snapshot.d.ts.map +1 -0
  260. package/daemon/dist/core/hub-snapshot.js +125 -0
  261. package/daemon/dist/core/hub-snapshot.js.map +1 -0
  262. package/daemon/dist/core/interrupts.d.ts +7 -0
  263. package/daemon/dist/core/interrupts.d.ts.map +1 -0
  264. package/daemon/dist/core/interrupts.js +28 -0
  265. package/daemon/dist/core/interrupts.js.map +1 -0
  266. package/daemon/dist/core/logger.d.ts +3 -0
  267. package/daemon/dist/core/logger.d.ts.map +1 -0
  268. package/daemon/dist/core/logger.js +91 -0
  269. package/daemon/dist/core/logger.js.map +1 -0
  270. package/daemon/dist/core/loop-guard.d.ts +27 -0
  271. package/daemon/dist/core/loop-guard.d.ts.map +1 -0
  272. package/daemon/dist/core/loop-guard.js +47 -0
  273. package/daemon/dist/core/loop-guard.js.map +1 -0
  274. package/daemon/dist/core/observable-logging.d.ts +43 -0
  275. package/daemon/dist/core/observable-logging.d.ts.map +1 -0
  276. package/daemon/dist/core/observable-logging.js +77 -0
  277. package/daemon/dist/core/observable-logging.js.map +1 -0
  278. package/daemon/dist/core/pairing.d.ts +51 -0
  279. package/daemon/dist/core/pairing.d.ts.map +1 -0
  280. package/daemon/dist/core/pairing.js +207 -0
  281. package/daemon/dist/core/pairing.js.map +1 -0
  282. package/daemon/dist/core/progress.d.ts +32 -0
  283. package/daemon/dist/core/progress.d.ts.map +1 -0
  284. package/daemon/dist/core/progress.js +145 -0
  285. package/daemon/dist/core/progress.js.map +1 -0
  286. package/daemon/dist/core/protocol-adapter.d.ts +14 -0
  287. package/daemon/dist/core/protocol-adapter.d.ts.map +1 -0
  288. package/daemon/dist/core/protocol-adapter.js +472 -0
  289. package/daemon/dist/core/protocol-adapter.js.map +1 -0
  290. package/daemon/dist/core/sdk-wrapper.d.ts +36 -0
  291. package/daemon/dist/core/sdk-wrapper.d.ts.map +1 -0
  292. package/daemon/dist/core/sdk-wrapper.js +533 -0
  293. package/daemon/dist/core/sdk-wrapper.js.map +1 -0
  294. package/daemon/dist/core/security.d.ts +10 -0
  295. package/daemon/dist/core/security.d.ts.map +1 -0
  296. package/daemon/dist/core/security.js +95 -0
  297. package/daemon/dist/core/security.js.map +1 -0
  298. package/daemon/dist/core/space-env.d.ts +15 -0
  299. package/daemon/dist/core/space-env.d.ts.map +1 -0
  300. package/daemon/dist/core/space-env.js +182 -0
  301. package/daemon/dist/core/space-env.js.map +1 -0
  302. package/daemon/dist/core/status-inspector.d.ts +31 -0
  303. package/daemon/dist/core/status-inspector.d.ts.map +1 -0
  304. package/daemon/dist/core/status-inspector.js +35 -0
  305. package/daemon/dist/core/status-inspector.js.map +1 -0
  306. package/daemon/dist/core/storage-paths.d.ts +30 -0
  307. package/daemon/dist/core/storage-paths.d.ts.map +1 -0
  308. package/daemon/dist/core/storage-paths.js +84 -0
  309. package/daemon/dist/core/storage-paths.js.map +1 -0
  310. package/daemon/dist/core/store.d.ts +256 -0
  311. package/daemon/dist/core/store.d.ts.map +1 -0
  312. package/daemon/dist/core/store.js +2956 -0
  313. package/daemon/dist/core/store.js.map +1 -0
  314. package/daemon/dist/core/streaming.d.ts +24 -0
  315. package/daemon/dist/core/streaming.d.ts.map +1 -0
  316. package/daemon/dist/core/streaming.js +57 -0
  317. package/daemon/dist/core/streaming.js.map +1 -0
  318. package/daemon/dist/core/task-artifacts.d.ts +17 -0
  319. package/daemon/dist/core/task-artifacts.d.ts.map +1 -0
  320. package/daemon/dist/core/task-artifacts.js +104 -0
  321. package/daemon/dist/core/task-artifacts.js.map +1 -0
  322. package/daemon/dist/core/thread-event-log.d.ts +54 -0
  323. package/daemon/dist/core/thread-event-log.d.ts.map +1 -0
  324. package/daemon/dist/core/thread-event-log.js +218 -0
  325. package/daemon/dist/core/thread-event-log.js.map +1 -0
  326. package/daemon/dist/core/thread-runtime-state.d.ts +53 -0
  327. package/daemon/dist/core/thread-runtime-state.d.ts.map +1 -0
  328. package/daemon/dist/core/thread-runtime-state.js +271 -0
  329. package/daemon/dist/core/thread-runtime-state.js.map +1 -0
  330. package/daemon/dist/core/types.d.ts +552 -0
  331. package/daemon/dist/core/types.d.ts.map +1 -0
  332. package/daemon/dist/core/types.js +2 -0
  333. package/daemon/dist/core/types.js.map +1 -0
  334. package/daemon/dist/core/utils.d.ts +5 -0
  335. package/daemon/dist/core/utils.d.ts.map +1 -0
  336. package/daemon/dist/core/utils.js +35 -0
  337. package/daemon/dist/core/utils.js.map +1 -0
  338. package/daemon/dist/http/command-catalog.d.ts +3 -0
  339. package/daemon/dist/http/command-catalog.d.ts.map +1 -0
  340. package/daemon/dist/http/command-catalog.js +2 -0
  341. package/daemon/dist/http/command-catalog.js.map +1 -0
  342. package/daemon/dist/http/context.d.ts +18 -0
  343. package/daemon/dist/http/context.d.ts.map +1 -0
  344. package/daemon/dist/http/context.js +121 -0
  345. package/daemon/dist/http/context.js.map +1 -0
  346. package/daemon/dist/http/office-preview.d.ts +10 -0
  347. package/daemon/dist/http/office-preview.d.ts.map +1 -0
  348. package/daemon/dist/http/office-preview.js +234 -0
  349. package/daemon/dist/http/office-preview.js.map +1 -0
  350. package/daemon/dist/http/response.d.ts +5 -0
  351. package/daemon/dist/http/response.d.ts.map +1 -0
  352. package/daemon/dist/http/response.js +37 -0
  353. package/daemon/dist/http/response.js.map +1 -0
  354. package/daemon/dist/http/router.d.ts +4 -0
  355. package/daemon/dist/http/router.d.ts.map +1 -0
  356. package/daemon/dist/http/router.js +57 -0
  357. package/daemon/dist/http/router.js.map +1 -0
  358. package/daemon/dist/http/routes/agents.d.ts +4 -0
  359. package/daemon/dist/http/routes/agents.d.ts.map +1 -0
  360. package/daemon/dist/http/routes/agents.js +747 -0
  361. package/daemon/dist/http/routes/agents.js.map +1 -0
  362. package/daemon/dist/http/routes/automations.d.ts +6 -0
  363. package/daemon/dist/http/routes/automations.d.ts.map +1 -0
  364. package/daemon/dist/http/routes/automations.js +530 -0
  365. package/daemon/dist/http/routes/automations.js.map +1 -0
  366. package/daemon/dist/http/routes/autonomy.d.ts +4 -0
  367. package/daemon/dist/http/routes/autonomy.d.ts.map +1 -0
  368. package/daemon/dist/http/routes/autonomy.js +78 -0
  369. package/daemon/dist/http/routes/autonomy.js.map +1 -0
  370. package/daemon/dist/http/routes/chat-input.d.ts +18 -0
  371. package/daemon/dist/http/routes/chat-input.d.ts.map +1 -0
  372. package/daemon/dist/http/routes/chat-input.js +122 -0
  373. package/daemon/dist/http/routes/chat-input.js.map +1 -0
  374. package/daemon/dist/http/routes/plugins.d.ts +5 -0
  375. package/daemon/dist/http/routes/plugins.d.ts.map +1 -0
  376. package/daemon/dist/http/routes/plugins.js +221 -0
  377. package/daemon/dist/http/routes/plugins.js.map +1 -0
  378. package/daemon/dist/http/routes/rpc.d.ts +28 -0
  379. package/daemon/dist/http/routes/rpc.d.ts.map +1 -0
  380. package/daemon/dist/http/routes/rpc.js +790 -0
  381. package/daemon/dist/http/routes/rpc.js.map +1 -0
  382. package/daemon/dist/http/routes/sessions.d.ts +11 -0
  383. package/daemon/dist/http/routes/sessions.d.ts.map +1 -0
  384. package/daemon/dist/http/routes/sessions.js +963 -0
  385. package/daemon/dist/http/routes/sessions.js.map +1 -0
  386. package/daemon/dist/http/routes/skills.d.ts +5 -0
  387. package/daemon/dist/http/routes/skills.d.ts.map +1 -0
  388. package/daemon/dist/http/routes/skills.js +420 -0
  389. package/daemon/dist/http/routes/skills.js.map +1 -0
  390. package/daemon/dist/http/routes/system.d.ts +64 -0
  391. package/daemon/dist/http/routes/system.d.ts.map +1 -0
  392. package/daemon/dist/http/routes/system.js +2676 -0
  393. package/daemon/dist/http/routes/system.js.map +1 -0
  394. package/daemon/dist/http/stream.d.ts +11 -0
  395. package/daemon/dist/http/stream.d.ts.map +1 -0
  396. package/daemon/dist/http/stream.js +100 -0
  397. package/daemon/dist/http/stream.js.map +1 -0
  398. package/daemon/dist/http/thread-stream.d.ts +10 -0
  399. package/daemon/dist/http/thread-stream.d.ts.map +1 -0
  400. package/daemon/dist/http/thread-stream.js +50 -0
  401. package/daemon/dist/http/thread-stream.js.map +1 -0
  402. package/daemon/dist/http/thread-title.d.ts +12 -0
  403. package/daemon/dist/http/thread-title.d.ts.map +1 -0
  404. package/daemon/dist/http/thread-title.js +122 -0
  405. package/daemon/dist/http/thread-title.js.map +1 -0
  406. package/daemon/dist/http/utils.d.ts +2 -0
  407. package/daemon/dist/http/utils.d.ts.map +1 -0
  408. package/daemon/dist/http/utils.js +18 -0
  409. package/daemon/dist/http/utils.js.map +1 -0
  410. package/daemon/dist/http/websocket.d.ts +5 -0
  411. package/daemon/dist/http/websocket.d.ts.map +1 -0
  412. package/daemon/dist/http/websocket.js +100 -0
  413. package/daemon/dist/http/websocket.js.map +1 -0
  414. package/daemon/dist/index.d.ts +35 -0
  415. package/daemon/dist/index.d.ts.map +1 -0
  416. package/daemon/dist/index.js +1582 -0
  417. package/daemon/dist/index.js.map +1 -0
  418. package/daemon/dist/mcp/aggregate-config.d.ts +16 -0
  419. package/daemon/dist/mcp/aggregate-config.d.ts.map +1 -0
  420. package/daemon/dist/mcp/aggregate-config.js +97 -0
  421. package/daemon/dist/mcp/aggregate-config.js.map +1 -0
  422. package/daemon/dist/mcp/client.d.ts +94 -0
  423. package/daemon/dist/mcp/client.d.ts.map +1 -0
  424. package/daemon/dist/mcp/client.js +207 -0
  425. package/daemon/dist/mcp/client.js.map +1 -0
  426. package/daemon/dist/mcp/default-servers.d.ts +35 -0
  427. package/daemon/dist/mcp/default-servers.d.ts.map +1 -0
  428. package/daemon/dist/mcp/default-servers.js +209 -0
  429. package/daemon/dist/mcp/default-servers.js.map +1 -0
  430. package/daemon/dist/mcp/gateway-client.d.ts +58 -0
  431. package/daemon/dist/mcp/gateway-client.d.ts.map +1 -0
  432. package/daemon/dist/mcp/gateway-client.js +181 -0
  433. package/daemon/dist/mcp/gateway-client.js.map +1 -0
  434. package/daemon/dist/mcp/index.d.ts +26 -0
  435. package/daemon/dist/mcp/index.d.ts.map +1 -0
  436. package/daemon/dist/mcp/index.js +50 -0
  437. package/daemon/dist/mcp/index.js.map +1 -0
  438. package/daemon/dist/mcp/settings.d.ts +3 -0
  439. package/daemon/dist/mcp/settings.d.ts.map +1 -0
  440. package/daemon/dist/mcp/settings.js +60 -0
  441. package/daemon/dist/mcp/settings.js.map +1 -0
  442. package/daemon/dist/mcp/tools.d.ts +21 -0
  443. package/daemon/dist/mcp/tools.d.ts.map +1 -0
  444. package/daemon/dist/mcp/tools.js +136 -0
  445. package/daemon/dist/mcp/tools.js.map +1 -0
  446. package/daemon/dist/plugins/catalog.d.ts +10 -0
  447. package/daemon/dist/plugins/catalog.d.ts.map +1 -0
  448. package/daemon/dist/plugins/catalog.js +304 -0
  449. package/daemon/dist/plugins/catalog.js.map +1 -0
  450. package/daemon/dist/plugins/hub.d.ts +42 -0
  451. package/daemon/dist/plugins/hub.d.ts.map +1 -0
  452. package/daemon/dist/plugins/hub.js +812 -0
  453. package/daemon/dist/plugins/hub.js.map +1 -0
  454. package/daemon/dist/plugins/types.d.ts +144 -0
  455. package/daemon/dist/plugins/types.d.ts.map +1 -0
  456. package/daemon/dist/plugins/types.js +2 -0
  457. package/daemon/dist/plugins/types.js.map +1 -0
  458. package/daemon/dist/router.d.ts +13 -0
  459. package/daemon/dist/router.d.ts.map +1 -0
  460. package/daemon/dist/router.js +43 -0
  461. package/daemon/dist/router.js.map +1 -0
  462. package/daemon/dist/skills/adapter.d.ts +4 -0
  463. package/daemon/dist/skills/adapter.d.ts.map +1 -0
  464. package/daemon/dist/skills/adapter.js +141 -0
  465. package/daemon/dist/skills/adapter.js.map +1 -0
  466. package/daemon/dist/skills/allowlist.d.ts +20 -0
  467. package/daemon/dist/skills/allowlist.d.ts.map +1 -0
  468. package/daemon/dist/skills/allowlist.js +52 -0
  469. package/daemon/dist/skills/allowlist.js.map +1 -0
  470. package/daemon/dist/skills/catalog.d.ts +26 -0
  471. package/daemon/dist/skills/catalog.d.ts.map +1 -0
  472. package/daemon/dist/skills/catalog.js +274 -0
  473. package/daemon/dist/skills/catalog.js.map +1 -0
  474. package/daemon/dist/skills/claude_code.d.ts +25 -0
  475. package/daemon/dist/skills/claude_code.d.ts.map +1 -0
  476. package/daemon/dist/skills/claude_code.js +49 -0
  477. package/daemon/dist/skills/claude_code.js.map +1 -0
  478. package/daemon/dist/skills/commands.d.ts +3 -0
  479. package/daemon/dist/skills/commands.d.ts.map +1 -0
  480. package/daemon/dist/skills/commands.js +689 -0
  481. package/daemon/dist/skills/commands.js.map +1 -0
  482. package/daemon/dist/skills/enabled.d.ts +7 -0
  483. package/daemon/dist/skills/enabled.d.ts.map +1 -0
  484. package/daemon/dist/skills/enabled.js +37 -0
  485. package/daemon/dist/skills/enabled.js.map +1 -0
  486. package/daemon/dist/skills/hub.d.ts +35 -0
  487. package/daemon/dist/skills/hub.d.ts.map +1 -0
  488. package/daemon/dist/skills/hub.js +574 -0
  489. package/daemon/dist/skills/hub.js.map +1 -0
  490. package/daemon/dist/skills/loader.d.ts +24 -0
  491. package/daemon/dist/skills/loader.d.ts.map +1 -0
  492. package/daemon/dist/skills/loader.js +693 -0
  493. package/daemon/dist/skills/loader.js.map +1 -0
  494. package/daemon/dist/skills/mcp-config.d.ts +8 -0
  495. package/daemon/dist/skills/mcp-config.d.ts.map +1 -0
  496. package/daemon/dist/skills/mcp-config.js +110 -0
  497. package/daemon/dist/skills/mcp-config.js.map +1 -0
  498. package/daemon/dist/skills/parser.d.ts +3 -0
  499. package/daemon/dist/skills/parser.d.ts.map +1 -0
  500. package/daemon/dist/skills/parser.js +279 -0
  501. package/daemon/dist/skills/parser.js.map +1 -0
  502. package/daemon/dist/skills/registry.d.ts +2 -0
  503. package/daemon/dist/skills/registry.d.ts.map +1 -0
  504. package/daemon/dist/skills/registry.js +2 -0
  505. package/daemon/dist/skills/registry.js.map +1 -0
  506. package/daemon/dist/skills/runtime-contract.d.ts +3 -0
  507. package/daemon/dist/skills/runtime-contract.d.ts.map +1 -0
  508. package/daemon/dist/skills/runtime-contract.js +92 -0
  509. package/daemon/dist/skills/runtime-contract.js.map +1 -0
  510. package/daemon/dist/skills/runtime.d.ts +28 -0
  511. package/daemon/dist/skills/runtime.d.ts.map +1 -0
  512. package/daemon/dist/skills/runtime.js +286 -0
  513. package/daemon/dist/skills/runtime.js.map +1 -0
  514. package/daemon/dist/skills/types.d.ts +228 -0
  515. package/daemon/dist/skills/types.d.ts.map +1 -0
  516. package/daemon/dist/skills/types.js +2 -0
  517. package/daemon/dist/skills/types.js.map +1 -0
  518. package/daemon/dist/start.d.ts +6 -0
  519. package/daemon/dist/start.d.ts.map +1 -0
  520. package/daemon/dist/start.js +19 -0
  521. package/daemon/dist/start.js.map +1 -0
  522. package/daemon/dist/sub-agent.d.ts +46 -0
  523. package/daemon/dist/sub-agent.d.ts.map +1 -0
  524. package/daemon/dist/sub-agent.js +120 -0
  525. package/daemon/dist/sub-agent.js.map +1 -0
  526. package/daemon/dist/sync/supabase-sync.d.ts +16 -0
  527. package/daemon/dist/sync/supabase-sync.d.ts.map +1 -0
  528. package/daemon/dist/sync/supabase-sync.js +240 -0
  529. package/daemon/dist/sync/supabase-sync.js.map +1 -0
  530. package/daemon/dist/task-executor.d.ts +6 -0
  531. package/daemon/dist/task-executor.d.ts.map +1 -0
  532. package/daemon/dist/task-executor.js +31 -0
  533. package/daemon/dist/task-executor.js.map +1 -0
  534. package/daemon/dist/tools/automations.d.ts +57 -0
  535. package/daemon/dist/tools/automations.d.ts.map +1 -0
  536. package/daemon/dist/tools/automations.js +94 -0
  537. package/daemon/dist/tools/automations.js.map +1 -0
  538. package/daemon/dist/tools/built-ins.d.ts +112 -0
  539. package/daemon/dist/tools/built-ins.d.ts.map +1 -0
  540. package/daemon/dist/tools/built-ins.js +251 -0
  541. package/daemon/dist/tools/built-ins.js.map +1 -0
  542. package/daemon/dist/tools/index.d.ts +287 -0
  543. package/daemon/dist/tools/index.d.ts.map +1 -0
  544. package/daemon/dist/tools/index.js +86 -0
  545. package/daemon/dist/tools/index.js.map +1 -0
  546. package/daemon/dist/tools/shell.d.ts +15 -0
  547. package/daemon/dist/tools/shell.d.ts.map +1 -0
  548. package/daemon/dist/tools/shell.js +46 -0
  549. package/daemon/dist/tools/shell.js.map +1 -0
  550. package/daemon/dist/tools/skill-tools.d.ts +23 -0
  551. package/daemon/dist/tools/skill-tools.d.ts.map +1 -0
  552. package/daemon/dist/tools/skill-tools.js +64 -0
  553. package/daemon/dist/tools/skill-tools.js.map +1 -0
  554. package/daemon/dist/tools/system.d.ts +36 -0
  555. package/daemon/dist/tools/system.d.ts.map +1 -0
  556. package/daemon/dist/tools/system.js +54 -0
  557. package/daemon/dist/tools/system.js.map +1 -0
  558. package/daemon/dist/tools/types.d.ts +11 -0
  559. package/daemon/dist/tools/types.d.ts.map +1 -0
  560. package/daemon/dist/tools/types.js +2 -0
  561. package/daemon/dist/tools/types.js.map +1 -0
  562. package/daemon/scripts/browser-smoke.mjs +125 -0
  563. package/daemon/scripts/supen-daemon.js +15 -0
  564. package/dist/agent.d.ts +11 -0
  565. package/dist/agent.js +159 -0
  566. package/dist/agent.js.map +1 -0
  567. package/dist/auth/login.d.ts +20 -0
  568. package/dist/auth/login.js +151 -0
  569. package/dist/auth/login.js.map +1 -0
  570. package/dist/auth/logout.d.ts +5 -0
  571. package/dist/auth/logout.js +19 -0
  572. package/dist/auth/logout.js.map +1 -0
  573. package/dist/auth/store.d.ts +37 -0
  574. package/dist/auth/store.js +80 -0
  575. package/dist/auth/store.js.map +1 -0
  576. package/dist/auth/whoami.d.ts +5 -0
  577. package/dist/auth/whoami.js +24 -0
  578. package/dist/auth/whoami.js.map +1 -0
  579. package/dist/backend.d.ts +8 -0
  580. package/dist/backend.js +148 -0
  581. package/dist/backend.js.map +1 -0
  582. package/dist/bootstrap.d.ts +13 -0
  583. package/dist/bootstrap.js +230 -0
  584. package/dist/bootstrap.js.map +1 -0
  585. package/dist/chat.d.ts +13 -0
  586. package/dist/chat.js +255 -0
  587. package/dist/chat.js.map +1 -0
  588. package/dist/commands.d.ts +48 -0
  589. package/dist/commands.js +273 -0
  590. package/dist/commands.js.map +1 -0
  591. package/dist/computer.d.ts +2 -0
  592. package/dist/computer.js +510 -0
  593. package/dist/computer.js.map +1 -0
  594. package/dist/config.d.ts +11 -0
  595. package/dist/config.js +149 -0
  596. package/dist/config.js.map +1 -0
  597. package/dist/daemon-manage.d.ts +29 -0
  598. package/dist/daemon-manage.js +255 -0
  599. package/dist/daemon-manage.js.map +1 -0
  600. package/dist/daemon.d.ts +15 -0
  601. package/dist/daemon.js +205 -0
  602. package/dist/daemon.js.map +1 -0
  603. package/dist/doctor.d.ts +13 -0
  604. package/dist/doctor.js +323 -0
  605. package/dist/doctor.js.map +1 -0
  606. package/dist/enroll.d.ts +7 -0
  607. package/dist/enroll.js +154 -0
  608. package/dist/enroll.js.map +1 -0
  609. package/dist/env.d.ts +10 -0
  610. package/dist/env.js +363 -0
  611. package/dist/env.js.map +1 -0
  612. package/dist/index.d.ts +54 -0
  613. package/dist/index.js +141 -0
  614. package/dist/index.js.map +1 -0
  615. package/dist/knowledge.d.ts +3 -0
  616. package/dist/knowledge.js +1581 -0
  617. package/dist/knowledge.js.map +1 -0
  618. package/dist/mcp.d.ts +11 -0
  619. package/dist/mcp.js +137 -0
  620. package/dist/mcp.js.map +1 -0
  621. package/dist/model.d.ts +8 -0
  622. package/dist/model.js +192 -0
  623. package/dist/model.js.map +1 -0
  624. package/dist/pairing.d.ts +21 -0
  625. package/dist/pairing.js +376 -0
  626. package/dist/pairing.js.map +1 -0
  627. package/dist/repl-events.d.ts +60 -0
  628. package/dist/repl-events.js +89 -0
  629. package/dist/repl-events.js.map +1 -0
  630. package/dist/repl-renderer.d.ts +37 -0
  631. package/dist/repl-renderer.js +140 -0
  632. package/dist/repl-renderer.js.map +1 -0
  633. package/dist/repl.d.ts +52 -0
  634. package/dist/repl.js +624 -0
  635. package/dist/repl.js.map +1 -0
  636. package/dist/service.d.ts +8 -0
  637. package/dist/service.js +238 -0
  638. package/dist/service.js.map +1 -0
  639. package/dist/skills.d.ts +14 -0
  640. package/dist/skills.js +423 -0
  641. package/dist/skills.js.map +1 -0
  642. package/dist/sse.d.ts +15 -0
  643. package/dist/sse.js +166 -0
  644. package/dist/sse.js.map +1 -0
  645. package/dist/thread.d.ts +9 -0
  646. package/dist/thread.js +152 -0
  647. package/dist/thread.js.map +1 -0
  648. package/dist/transport/computer-api.d.ts +1 -0
  649. package/dist/transport/computer-api.js +20 -0
  650. package/dist/transport/computer-api.js.map +1 -0
  651. package/dist/transport/gateway.d.ts +23 -0
  652. package/dist/transport/gateway.js +161 -0
  653. package/dist/transport/gateway.js.map +1 -0
  654. package/dist/transport/index.d.ts +27 -0
  655. package/dist/transport/index.js +77 -0
  656. package/dist/transport/index.js.map +1 -0
  657. package/dist/transport/local.d.ts +20 -0
  658. package/dist/transport/local.js +138 -0
  659. package/dist/transport/local.js.map +1 -0
  660. package/dist/transport/types.d.ts +42 -0
  661. package/dist/transport/types.js +11 -0
  662. package/dist/transport/types.js.map +1 -0
  663. package/dist/ui/app.d.ts +7 -0
  664. package/dist/ui/app.js +192 -0
  665. package/dist/ui/app.js.map +1 -0
  666. package/dist/ui/history-item.d.ts +9 -0
  667. package/dist/ui/history-item.js +35 -0
  668. package/dist/ui/history-item.js.map +1 -0
  669. package/dist/ui/input-bar.d.ts +17 -0
  670. package/dist/ui/input-bar.js +67 -0
  671. package/dist/ui/input-bar.js.map +1 -0
  672. package/dist/ui/streaming-view.d.ts +6 -0
  673. package/dist/ui/streaming-view.js +6 -0
  674. package/dist/ui/streaming-view.js.map +1 -0
  675. package/dist/ui/thread-input-history.d.ts +18 -0
  676. package/dist/ui/thread-input-history.js +67 -0
  677. package/dist/ui/thread-input-history.js.map +1 -0
  678. package/dist/utils.d.ts +17 -0
  679. package/dist/utils.js +80 -0
  680. package/dist/utils.js.map +1 -0
  681. package/package.json +55 -0
@@ -0,0 +1,663 @@
1
+ import os from 'os';
2
+ import path from 'path';
3
+ import fs from 'fs';
4
+ import yaml from 'js-yaml';
5
+ import { readEnvFile, readModelsConfig } from './env.js';
6
+ import { logger } from './logger.js';
7
+ // Read config values from ~/.supen/config.yaml.
8
+ // Secrets are NOT read here — they stay on disk and are loaded only
9
+ // where needed (container-computer.ts) to avoid leaking to child processes.
10
+ const envConfig = readEnvFile([
11
+ 'TIMEZONE',
12
+ 'ASSISTANT_NAME',
13
+ 'ASSISTANT_HAS_OWN_NUMBER',
14
+ 'SUPEN_CODING_CLI',
15
+ 'SUPEN_CODEX_TRANSPORT',
16
+ 'SKILLS_DIRS',
17
+ 'SKILLS_ADMIN_ONLY',
18
+ 'SKILLS_ALLOW_LEVEL3',
19
+ 'SKILLS_AUTO_ENABLE',
20
+ 'MIND_ADMIN_USERS',
21
+ 'MIND_LOCK_MODE',
22
+ 'HTTP_PORT',
23
+ 'HTTP_ENABLED',
24
+ 'HTTP_API_KEY',
25
+ 'CONTROL_PLANE_URL',
26
+ 'CONTROL_PLANE_ENROLLMENT_MODE',
27
+ 'ACP_ENABLED',
28
+ 'ACP_RELAY_URL',
29
+ 'SECURITY_TRUSTED_REMOTE_HOSTS',
30
+ 'SECURITY_ALLOW_INSECURE_REMOTE_ENDPOINTS',
31
+ 'CODEX_TRUSTED_DATA_HOSTS',
32
+ 'WORKSPACE_ALLOWED_ROOTS',
33
+ 'CHILD_ENV_ALLOWLIST',
34
+ 'CONCURRENCY_LIMIT',
35
+ 'AGENT_CONCURRENCY_LIMIT',
36
+ 'SESSION_CONCURRENCY_LIMIT',
37
+ 'TASK_DEFAULT_TIMEOUT_MS',
38
+ 'TASK_DEFAULT_STEP_TIMEOUT_MS',
39
+ 'TASK_DEFAULT_RETRY_COUNT',
40
+ 'TASK_DEFAULT_RETRY_BACKOFF_MS',
41
+ 'SUPEN_DAEMON_NAME',
42
+ 'SUPEN_PRODUCT_NAME',
43
+ 'SUPEN_AUTH_TOKEN',
44
+ 'WORKSPACE_ROOT',
45
+ 'ALLOWED_ORIGINS',
46
+ 'SPACE_DIR',
47
+ 'SPACES_DIR',
48
+ 'LIBREOFFICE_BINARY',
49
+ 'TIWATER_CONVERT_BINARY',
50
+ 'ONLYOFFICE_DOCUMENT_SERVER_URL',
51
+ 'ONLYOFFICE_JWT_SECRET',
52
+ 'ONLYOFFICE_SOURCE_BASE_URL',
53
+ ], { ensureExists: false });
54
+ export const ASSISTANT_NAME = process.env.ASSISTANT_NAME || envConfig.ASSISTANT_NAME || 'Shaw';
55
+ export const ASSISTANT_HAS_OWN_NUMBER = (process.env.ASSISTANT_HAS_OWN_NUMBER ||
56
+ envConfig.ASSISTANT_HAS_OWN_NUMBER) === 'true';
57
+ /** Workspace skill CLI: gemini, codex, claude, etc. Used only when agent needs to run code. */
58
+ export const SUPEN_CODING_CLI = process.env.SUPEN_CODING_CLI || envConfig.SUPEN_CODING_CLI || 'codex';
59
+ // Comma-separated sender IDs that can perform privileged mind operations.
60
+ // Example: MIND_ADMIN_USERS="ou_xxx,dc:user:12345"
61
+ export const MIND_ADMIN_USERS = (process.env.MIND_ADMIN_USERS ||
62
+ envConfig.MIND_ADMIN_USERS ||
63
+ '')
64
+ .split(',')
65
+ .map((s) => s.trim())
66
+ .filter(Boolean);
67
+ // strict: locked mind rejects all natural persona edits
68
+ // admin_override: locked mind allows natural persona edits from admin users
69
+ export const MIND_LOCK_MODE = process.env.MIND_LOCK_MODE || envConfig.MIND_LOCK_MODE || 'admin_override';
70
+ export const POLL_INTERVAL = 2000;
71
+ export const SCHEDULER_POLL_INTERVAL = 60000;
72
+ // Absolute paths for Supen data management
73
+ const HOME_DIR = process.env.HOME || os.homedir();
74
+ export let SUPEN_HOME = process.env.SUPEN_HOME || path.join(HOME_DIR, '.supen');
75
+ function parseBoolean(value, fallback) {
76
+ if (value == null || value === '')
77
+ return fallback;
78
+ return value === 'true' || value === '1' || value === 'yes';
79
+ }
80
+ function findMonorepoRoot(startDir) {
81
+ let current = path.resolve(startDir);
82
+ while (current !== path.parse(current).root) {
83
+ if (fs.existsSync(path.join(current, 'pnpm-workspace.yaml'))) {
84
+ return current;
85
+ }
86
+ current = path.dirname(current);
87
+ }
88
+ return null;
89
+ }
90
+ // Resolve current file's directory dynamically (compatible with ESM or CJS compiled output)
91
+ const currentFileDir = typeof __dirname !== 'undefined'
92
+ ? __dirname
93
+ : new URL('.', import.meta.url).pathname;
94
+ const monorepoRoot = findMonorepoRoot(currentFileDir);
95
+ export function expandHomePath(inputPath) {
96
+ if (inputPath === '~')
97
+ return HOME_DIR;
98
+ if (inputPath.startsWith('~/')) {
99
+ return path.join(HOME_DIR, inputPath.slice(2));
100
+ }
101
+ if (inputPath.startsWith('@/') && monorepoRoot) {
102
+ return path.join(monorepoRoot, inputPath.slice(2));
103
+ }
104
+ return path.resolve(inputPath);
105
+ }
106
+ export function resolveSpacesDir(homeDir) {
107
+ const explicitSpaceDir = process.env.SPACE_DIR ||
108
+ envConfig.SPACE_DIR ||
109
+ process.env.SPACES_DIR ||
110
+ envConfig.SPACES_DIR;
111
+ return explicitSpaceDir ? expandHomePath(explicitSpaceDir) : homeDir;
112
+ }
113
+ function parsePathList(value, fallback) {
114
+ const rawItems = value
115
+ ? value
116
+ .split(',')
117
+ .map((item) => item.trim())
118
+ .filter(Boolean)
119
+ : fallback;
120
+ return Array.from(new Set(rawItems.map((item) => expandHomePath(item))));
121
+ }
122
+ function parseStringList(value, fallback) {
123
+ const rawItems = value
124
+ ? value
125
+ .split(',')
126
+ .map((item) => item.trim())
127
+ .filter(Boolean)
128
+ : fallback;
129
+ return Array.from(new Set(rawItems));
130
+ }
131
+ export let MOUNT_ALLOWLIST_PATH = path.join(SUPEN_HOME, 'mount-allowlist.json');
132
+ // Single Computer root for this SUPEN_HOME volume.
133
+ export let SPACES_DIR = resolveSpacesDir(SUPEN_HOME);
134
+ export let AGENTS_DIR = path.join(SUPEN_HOME, 'agents');
135
+ export let DATA_DIR = path.join(SUPEN_HOME, 'data');
136
+ export let SKILLS_HOME = path.join(SUPEN_HOME, 'skills');
137
+ export let SKILLS_STATE_DIR = path.join(SKILLS_HOME, '.state');
138
+ export let SKILLS_STATE_PATH = path.join(SKILLS_STATE_DIR, 'lock.json');
139
+ export let SKILLS_AUDIT_LOG_PATH = path.join(SKILLS_STATE_DIR, 'audit.log');
140
+ export function configureSupenDaemon(options) {
141
+ if (options.dataDir) {
142
+ SUPEN_HOME = options.dataDir;
143
+ MOUNT_ALLOWLIST_PATH = path.join(SUPEN_HOME, 'mount-allowlist.json');
144
+ SPACES_DIR = resolveSpacesDir(SUPEN_HOME);
145
+ AGENTS_DIR = path.join(SUPEN_HOME, 'agents');
146
+ DATA_DIR = path.join(SUPEN_HOME, 'data');
147
+ SKILLS_HOME = path.join(SUPEN_HOME, 'skills');
148
+ SKILLS_STATE_DIR = path.join(SKILLS_HOME, '.state');
149
+ SKILLS_STATE_PATH = path.join(SKILLS_STATE_DIR, 'lock.json');
150
+ SKILLS_AUDIT_LOG_PATH = path.join(SKILLS_STATE_DIR, 'audit.log');
151
+ SKILLS_CONFIG.directories = resolveSkillsDirectories();
152
+ SKILLS_CONFIG.statePath = SKILLS_STATE_PATH;
153
+ SKILLS_CONFIG.auditLogPath = SKILLS_AUDIT_LOG_PATH;
154
+ }
155
+ }
156
+ export function initializeDataDirs() {
157
+ if (!fs.existsSync(SUPEN_HOME))
158
+ fs.mkdirSync(SUPEN_HOME, { recursive: true });
159
+ if (!fs.existsSync(SPACES_DIR))
160
+ fs.mkdirSync(SPACES_DIR, { recursive: true });
161
+ if (!fs.existsSync(AGENTS_DIR))
162
+ fs.mkdirSync(AGENTS_DIR, { recursive: true });
163
+ }
164
+ export const SECURITY_TRUSTED_REMOTE_HOSTS = parseStringList(process.env.SECURITY_TRUSTED_REMOTE_HOSTS ||
165
+ envConfig.SECURITY_TRUSTED_REMOTE_HOSTS, []);
166
+ export const SECURITY_ALLOW_INSECURE_REMOTE_ENDPOINTS = parseBoolean(process.env.SECURITY_ALLOW_INSECURE_REMOTE_ENDPOINTS ||
167
+ envConfig.SECURITY_ALLOW_INSECURE_REMOTE_ENDPOINTS, false);
168
+ export const CODEX_TRUSTED_DATA_HOSTS = parseStringList(process.env.CODEX_TRUSTED_DATA_HOSTS || envConfig.CODEX_TRUSTED_DATA_HOSTS, ['gateway.supen.ai']);
169
+ export const WORKSPACE_ALLOWED_ROOTS = parsePathList(process.env.WORKSPACE_ALLOWED_ROOTS || envConfig.WORKSPACE_ALLOWED_ROOTS, [HOME_DIR]);
170
+ function activeSpaceId() {
171
+ return (process.env.SUPEN_SPACE_ID || 'local').trim() || 'local';
172
+ }
173
+ export function defaultSpaceRoot(_spaceId) {
174
+ // Single-Computer runtime: API ids never select sibling filesystem roots
175
+ // inside this local volume.
176
+ return path.resolve(SPACES_DIR);
177
+ }
178
+ function readSpaceConfigFile(spaceId) {
179
+ return readSpaceConfig(spaceId).config;
180
+ }
181
+ function readSpaceConfig(spaceId) {
182
+ const root = defaultSpaceRoot(spaceId);
183
+ const candidates = [
184
+ { configPath: path.join(root, 'space.yaml'), baseRoot: root },
185
+ { configPath: path.join(root, 'space', 'config.yaml'), baseRoot: path.join(root, 'space') },
186
+ ];
187
+ for (const candidate of candidates) {
188
+ const { configPath, baseRoot } = candidate;
189
+ try {
190
+ if (!fs.existsSync(configPath))
191
+ continue;
192
+ const parsed = yaml.load(fs.readFileSync(configPath, 'utf-8'));
193
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
194
+ return { config: {}, baseRoot, configPath };
195
+ }
196
+ return { config: parsed, baseRoot, configPath };
197
+ }
198
+ catch (err) {
199
+ logger.warn({ err, spaceId, configPath }, 'Failed to read space config; using defaults');
200
+ return { config: {}, baseRoot, configPath };
201
+ }
202
+ }
203
+ return { config: {}, baseRoot: root, configPath: null };
204
+ }
205
+ function configuredRootValue(config, key) {
206
+ const section = config[key];
207
+ if (!section || typeof section !== 'object' || Array.isArray(section))
208
+ return null;
209
+ const root = section.root;
210
+ return typeof root === 'string' && root.trim() ? root.trim() : null;
211
+ }
212
+ function configuredRootSectionValue(section) {
213
+ if (!section || typeof section !== 'object' || Array.isArray(section))
214
+ return null;
215
+ const root = section.root;
216
+ return typeof root === 'string' && root.trim() ? root.trim() : null;
217
+ }
218
+ function configuredNestedRootValue(config, sectionKey, childKey) {
219
+ const section = config[sectionKey];
220
+ if (!section || typeof section !== 'object' || Array.isArray(section))
221
+ return null;
222
+ return configuredRootSectionValue(section[childKey]);
223
+ }
224
+ function configuredStringValue(section, key) {
225
+ if (!section || typeof section !== 'object' || Array.isArray(section))
226
+ return null;
227
+ const value = section[key];
228
+ return typeof value === 'string' && value.trim() ? value.trim() : null;
229
+ }
230
+ function isWithinAllowedWorkspaceRoot(candidate) {
231
+ const resolvedPath = path.resolve(candidate);
232
+ return WORKSPACE_ALLOWED_ROOTS.some((root) => {
233
+ const resolvedRoot = path.resolve(root);
234
+ return resolvedPath === resolvedRoot || resolvedPath.startsWith(`${resolvedRoot}${path.sep}`);
235
+ });
236
+ }
237
+ export function resolveSpaceConfiguredRoot(spaceId, key, defaultSegment) {
238
+ const loaded = readSpaceConfig(spaceId);
239
+ const fallback = path.join(defaultSpaceRoot(spaceId), defaultSegment);
240
+ const configured = configuredRootValue(loaded.config, key);
241
+ return resolveSpaceConfigRoot(spaceId, String(key), configured, fallback, loaded.baseRoot);
242
+ }
243
+ export function resolveSpaceFilesRoot(spaceId, key, defaultSegment) {
244
+ const loaded = readSpaceConfig(spaceId);
245
+ const fallback = path.join(defaultSpaceRoot(spaceId), defaultSegment);
246
+ const configured = configuredNestedRootValue(loaded.config, 'files', key);
247
+ return resolveSpaceConfigRoot(spaceId, `files.${key}`, configured, fallback, loaded.baseRoot);
248
+ }
249
+ export function resolveSpaceTasksRoot(spaceId) {
250
+ const loaded = readSpaceConfig(spaceId);
251
+ const fallback = path.join(defaultSpaceRoot(spaceId), 'tasks');
252
+ const configured = configuredNestedRootValue(loaded.config, 'files', 'tasks');
253
+ if (!configured)
254
+ return fallback;
255
+ return resolveSpaceConfigRoot(spaceId, 'files.tasks', configured, fallback, loaded.baseRoot);
256
+ }
257
+ function resolveSpaceConfigRoot(spaceId, key, configured, fallback, baseRoot = defaultSpaceRoot(spaceId)) {
258
+ if (!configured)
259
+ return fallback;
260
+ if (configured.startsWith('~/') || configured === '~' || configured.startsWith('@/') || path.isAbsolute(configured)) {
261
+ const requested = expandHomePath(configured);
262
+ if (isWithinAllowedWorkspaceRoot(requested))
263
+ return requested;
264
+ logger.warn({ spaceId, key, requested, allowedRoots: WORKSPACE_ALLOWED_ROOTS }, 'Configured space root is outside WORKSPACE_ALLOWED_ROOTS; using default');
265
+ return fallback;
266
+ }
267
+ const requested = path.resolve(baseRoot, configured);
268
+ if (requested === baseRoot || requested.startsWith(`${baseRoot}${path.sep}`)) {
269
+ return requested;
270
+ }
271
+ logger.warn({ spaceId, key, requested, baseRoot }, 'Configured relative space root escapes space root; using default');
272
+ return fallback;
273
+ }
274
+ function assertSafeKnowledgeId(input) {
275
+ const normalized = input.trim();
276
+ if (!normalized ||
277
+ normalized === '.' ||
278
+ normalized === '..' ||
279
+ normalized.includes('/') ||
280
+ normalized.includes('\\') ||
281
+ normalized.includes('\0')) {
282
+ return null;
283
+ }
284
+ return normalized;
285
+ }
286
+ export function resolveSpaceKnowledgeRoots(spaceId) {
287
+ const safeSpaceId = 'local';
288
+ const loaded = readSpaceConfig(spaceId);
289
+ const config = loaded.config;
290
+ const knowledgeConfig = config.knowledge;
291
+ const configuredRoots = knowledgeConfig && typeof knowledgeConfig === 'object' && !Array.isArray(knowledgeConfig)
292
+ ? knowledgeConfig.roots
293
+ : null;
294
+ const parsedRoots = [];
295
+ if (Array.isArray(configuredRoots)) {
296
+ for (const rootEntry of configuredRoots) {
297
+ if (!rootEntry || typeof rootEntry !== 'object' || Array.isArray(rootEntry))
298
+ continue;
299
+ const rawId = configuredStringValue(rootEntry, 'id');
300
+ const id = rawId ? assertSafeKnowledgeId(rawId) : null;
301
+ const configured = configuredRootSectionValue(rootEntry);
302
+ if (!id || !configured) {
303
+ logger.warn({ spaceId: safeSpaceId, rootEntry }, 'Skipping invalid space knowledge root');
304
+ continue;
305
+ }
306
+ const name = configuredStringValue(rootEntry, 'name') || id;
307
+ const mode = configuredStringValue(rootEntry, 'mode') || undefined;
308
+ const fallback = path.join(defaultSpaceRoot(safeSpaceId), 'knowledge', id);
309
+ parsedRoots.push({
310
+ id,
311
+ name,
312
+ mode,
313
+ root: resolveSpaceConfigRoot(safeSpaceId, `knowledge.${id}`, configured, fallback, loaded.baseRoot),
314
+ });
315
+ }
316
+ }
317
+ if (parsedRoots.length === 0) {
318
+ return [{
319
+ id: 'default',
320
+ name: 'Knowledge',
321
+ mode: 'default',
322
+ root: path.join(defaultSpaceRoot(safeSpaceId), 'knowledge'),
323
+ isDefault: true,
324
+ }];
325
+ }
326
+ const requestedDefault = knowledgeConfig && typeof knowledgeConfig === 'object' && !Array.isArray(knowledgeConfig)
327
+ ? configuredStringValue(knowledgeConfig, 'default')
328
+ : null;
329
+ const safeDefault = requestedDefault ? assertSafeKnowledgeId(requestedDefault) : null;
330
+ const defaultId = safeDefault && parsedRoots.some((root) => root.id === safeDefault)
331
+ ? safeDefault
332
+ : parsedRoots[0].id;
333
+ return parsedRoots.map((root) => ({
334
+ ...root,
335
+ isDefault: root.id === defaultId,
336
+ }));
337
+ }
338
+ export function resolveSpaceKnowledgeRoot(spaceId, knowledgeId) {
339
+ const roots = resolveSpaceKnowledgeRoots(spaceId);
340
+ const requested = knowledgeId ? assertSafeKnowledgeId(knowledgeId) : null;
341
+ return ((requested ? roots.find((root) => root.id === requested) : null) ||
342
+ roots.find((root) => root.isDefault) ||
343
+ roots[0]);
344
+ }
345
+ export function resolveSpaceDriveRoot(spaceId) {
346
+ return resolveSpaceKnowledgeRoot(spaceId).root;
347
+ }
348
+ export function resolveSpaceSkillMountRoots(spaceId = activeSpaceId()) {
349
+ return Array.from(new Set(resolveSpaceKnowledgeRoots(spaceId).flatMap((root) => [
350
+ path.join(root.root, 'skills'),
351
+ path.join(root.root, 'plugins'),
352
+ root.root,
353
+ ])));
354
+ }
355
+ export function resolveSpacePluginMountRoots(spaceId = activeSpaceId()) {
356
+ return Array.from(new Set(resolveSpaceKnowledgeRoots(spaceId).map((root) => path.join(root.root, 'plugins'))));
357
+ }
358
+ export const CHILD_ENV_ALLOWLIST = parseStringList(process.env.CHILD_ENV_ALLOWLIST || envConfig.CHILD_ENV_ALLOWLIST, []);
359
+ export const AGENT_MIND_FILES = [
360
+ 'SOUL.md',
361
+ 'IDENTITY.md',
362
+ 'USER.md',
363
+ 'MEMORY.md',
364
+ ];
365
+ function defaultSkillDirectories() {
366
+ const defaults = [
367
+ '~/.supen/skills',
368
+ '@/skills',
369
+ './skills',
370
+ ...resolveSpaceSkillMountRoots(),
371
+ ];
372
+ return defaults;
373
+ }
374
+ function resolveSkillsDirectories() {
375
+ return parsePathList(process.env.SKILLS_DIRS || envConfig.SKILLS_DIRS, defaultSkillDirectories());
376
+ }
377
+ export const SKILLS_CONFIG = {
378
+ directories: resolveSkillsDirectories(),
379
+ adminOnly: parseBoolean(process.env.SKILLS_ADMIN_ONLY || envConfig.SKILLS_ADMIN_ONLY, true),
380
+ allowLevel3: parseBoolean(process.env.SKILLS_ALLOW_LEVEL3 || envConfig.SKILLS_ALLOW_LEVEL3, true),
381
+ autoEnableOnInstall: parseBoolean(process.env.SKILLS_AUTO_ENABLE || envConfig.SKILLS_AUTO_ENABLE, false),
382
+ defaultEnabled: process.env.SKILLS_DEFAULT_ENABLED || envConfig.SKILLS_DEFAULT_ENABLED
383
+ ? (process.env.SKILLS_DEFAULT_ENABLED ||
384
+ envConfig.SKILLS_DEFAULT_ENABLED)
385
+ .split(',')
386
+ .map((s) => s.trim())
387
+ .filter(Boolean)
388
+ : [],
389
+ statePath: SKILLS_STATE_PATH,
390
+ auditLogPath: SKILLS_AUDIT_LOG_PATH,
391
+ };
392
+ export const CONTAINER_IMAGE = process.env.CONTAINER_IMAGE || 'supen-agent:latest';
393
+ export const CONTAINER_TIMEOUT = parseInt(process.env.CONTAINER_TIMEOUT || '1800000', 10);
394
+ export const CONTAINER_MAX_OUTPUT_SIZE = parseInt(process.env.CONTAINER_MAX_OUTPUT_SIZE || '10485760', 10); // 10MB default
395
+ export const IPC_POLL_INTERVAL = 1000;
396
+ export const IDLE_TIMEOUT = parseInt(process.env.IDLE_TIMEOUT || '1800000', 10); // 30min default — how long to keep container alive after last result
397
+ export const MAX_CONCURRENT_CONTAINERS = Math.max(1, parseInt(process.env.MAX_CONCURRENT_CONTAINERS || '5', 10) || 5);
398
+ function escapeRegex(str) {
399
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
400
+ }
401
+ export const TRIGGER_PATTERN = new RegExp(`^@${escapeRegex(ASSISTANT_NAME)}\\b`, 'i');
402
+ // Timezone for scheduled tasks (cron expressions, etc.)
403
+ // Uses config.yaml timezone by default, then falls back to host timezone.
404
+ export const TIMEZONE = process.env.TZ || envConfig.TIMEZONE || Intl.DateTimeFormat().resolvedOptions().timeZone;
405
+ // HTTP SSE channel
406
+ export const HTTP_PORT = parseInt(process.env.PORT || process.env.HTTP_PORT || envConfig.HTTP_PORT || '2756', 10);
407
+ export const HTTP_ENABLED = (process.env.HTTP_ENABLED ?? envConfig.HTTP_ENABLED ?? 'true') !== 'false';
408
+ export const HTTP_API_KEY = process.env.HTTP_API_KEY || envConfig.HTTP_API_KEY || '';
409
+ export const SUPEN_AUTH_TOKEN = process.env.SUPEN_AUTH_TOKEN || envConfig.SUPEN_AUTH_TOKEN || '';
410
+ export const WORKSPACE_ROOT = process.env.WORKSPACE_ROOT || envConfig.WORKSPACE_ROOT || '';
411
+ export const ALLOWED_ORIGINS = process.env.ALLOWED_ORIGINS || envConfig.ALLOWED_ORIGINS || '';
412
+ // LLM configuration is now fully provider-driven via config.yaml `providers` array.
413
+ // No more raw env-var exports for api keys / base urls / model names.
414
+ /**
415
+ * Model registry — loaded once at startup from config.yaml `providers` list.
416
+ * Each entry is a (provider, model) pair with a composite ID "provider_id:model_name".
417
+ */
418
+ /** Provider-keyed fallback pricing per 1M tokens in USD. */
419
+ const MODEL_PRICING = {
420
+ _global: {
421
+ 'glm-4': { input: 0.1, output: 0.1 },
422
+ 'glm-4v': { input: 0.1, output: 0.1 },
423
+ 'glm-4-air': { input: 0.01, output: 0.01 },
424
+ 'glm-4-flash': { input: 0.0, output: 0.0 },
425
+ 'claude-3-5-sonnet': { input: 3.0, output: 15.0 },
426
+ 'claude-3-5-haiku': { input: 0.25, output: 1.25 },
427
+ 'claude-3-opus': { input: 15.0, output: 75.0 },
428
+ 'claude-sonnet-4': { input: 3.0, output: 15.0 },
429
+ 'claude-opus-4': { input: 15.0, output: 75.0 },
430
+ 'gemini-1.5-pro': { input: 1.25, output: 5.0 },
431
+ 'gemini-1.5-flash': { input: 0.075, output: 0.3 },
432
+ },
433
+ babelark: {
434
+ 'qwen3.6': { input: 0.29, output: 1.74 },
435
+ 'qwen3.5': { input: 0.12, output: 0.7 },
436
+ 'gpt-5.4': { input: 2.5, output: 15.0 },
437
+ 'claude-sonnet-4.6': { input: 3.0, output: 15.0 },
438
+ },
439
+ };
440
+ /**
441
+ * Get pricing for a model entry.
442
+ * Priority: 1) explicit config.yaml pricing, 2) provider-specific built-in, 3) global fallback.
443
+ */
444
+ export function getModelPricing(entry) {
445
+ // 1. Explicit pricing from config.yaml
446
+ if (entry.pricing && (entry.pricing.input_usd_per_1m > 0 || entry.pricing.output_usd_per_1m > 0)) {
447
+ return { input: entry.pricing.input_usd_per_1m, output: entry.pricing.output_usd_per_1m };
448
+ }
449
+ // 2. Provider-specific built-in pricing (fuzzy match)
450
+ const providerMap = MODEL_PRICING[entry.provider_id];
451
+ if (providerMap) {
452
+ for (const [key, pricing] of Object.entries(providerMap)) {
453
+ if (entry.model.toLowerCase().startsWith(key)) {
454
+ return pricing;
455
+ }
456
+ }
457
+ }
458
+ // 3. Global fallback (fuzzy match)
459
+ const globalMap = MODEL_PRICING._global;
460
+ for (const [key, pricing] of Object.entries(globalMap)) {
461
+ if (entry.model.toLowerCase().startsWith(key)) {
462
+ return pricing;
463
+ }
464
+ }
465
+ return { input: 0, output: 0 };
466
+ }
467
+ function enrichModelsWithPricing(entries) {
468
+ // Enrich with pricing
469
+ for (const entry of entries) {
470
+ if (!entry.pricing) {
471
+ const p = getModelPricing(entry);
472
+ if (p.input > 0 || p.output > 0) {
473
+ entry.pricing = { input_usd_per_1m: p.input, output_usd_per_1m: p.output };
474
+ }
475
+ }
476
+ }
477
+ return entries;
478
+ }
479
+ /** Runtime model registry. Reloadable without daemon restart. */
480
+ export let MODELS_REGISTRY = [];
481
+ /** Runtime default model entry (marked default:true, or first in list). */
482
+ export let DEFAULT_MODEL = undefined;
483
+ /**
484
+ * Reload model providers/models from config.yaml into the runtime registry.
485
+ * Returns a small summary for API/CLI callers.
486
+ */
487
+ export function reloadModelsRegistry(options = {}) {
488
+ MODELS_REGISTRY = enrichModelsWithPricing(readModelsConfig(options));
489
+ DEFAULT_MODEL = MODELS_REGISTRY.find((m) => m.default) ?? MODELS_REGISTRY[0];
490
+ return {
491
+ total_models: MODELS_REGISTRY.length,
492
+ default_model: DEFAULT_MODEL?.id ?? null,
493
+ };
494
+ }
495
+ // Initial load must be side-effect free so importing start.ts does not create
496
+ // config.yaml before the daemon actually starts.
497
+ reloadModelsRegistry({ ensureExists: false });
498
+ // Daemon identity — derived from hostname or manual override via SUPEN_DAEMON_NAME
499
+ const rawHostname = os.hostname() || 'supen-local';
500
+ export const DAEMON_HOSTNAME = process.env.SUPEN_DAEMON_NAME || envConfig.SUPEN_DAEMON_NAME || rawHostname;
501
+ /** Product branding name (e.g. "Supen", "Ticos"). Defaults to "Supen". */
502
+ export const SUPEN_PRODUCT_NAME = process.env.SUPEN_PRODUCT_NAME || envConfig.SUPEN_PRODUCT_NAME || 'Supen';
503
+ function resolveLibreOfficeBinary() {
504
+ const configured = process.env.LIBREOFFICE_BINARY || envConfig.LIBREOFFICE_BINARY;
505
+ if (configured)
506
+ return configured;
507
+ if (process.platform === 'darwin') {
508
+ const macAppBundleBinary = '/Applications/LibreOffice.app/Contents/MacOS/soffice';
509
+ if (fs.existsSync(macAppBundleBinary))
510
+ return macAppBundleBinary;
511
+ }
512
+ return 'libreoffice';
513
+ }
514
+ export const LIBREOFFICE_BINARY = resolveLibreOfficeBinary();
515
+ export const TIWATER_CONVERT_BINARY = process.env.TIWATER_CONVERT_BINARY || envConfig.TIWATER_CONVERT_BINARY || 'tiwater-convert';
516
+ export const ONLYOFFICE_DOCUMENT_SERVER_URL = process.env.ONLYOFFICE_DOCUMENT_SERVER_URL ||
517
+ envConfig.ONLYOFFICE_DOCUMENT_SERVER_URL ||
518
+ 'http://139.224.22.149:7177';
519
+ export const ONLYOFFICE_JWT_SECRET = process.env.ONLYOFFICE_JWT_SECRET ||
520
+ envConfig.ONLYOFFICE_JWT_SECRET ||
521
+ 'change-this-long-random-secret';
522
+ export const ONLYOFFICE_SOURCE_BASE_URL = process.env.ONLYOFFICE_SOURCE_BASE_URL || envConfig.ONLYOFFICE_SOURCE_BASE_URL || '';
523
+ // ACP (Agent Communication Protocol) configuration
524
+ export const ACP_ENABLED = (process.env.ACP_ENABLED ?? envConfig.ACP_ENABLED ?? 'false') === 'true';
525
+ export const ACP_RELAY_URL = process.env.ACP_RELAY_URL || envConfig.ACP_RELAY_URL || '';
526
+ // Concurrency limits
527
+ export const CONCURRENCY_LIMIT = Math.max(1, parseInt(process.env.CONCURRENCY_LIMIT || envConfig.CONCURRENCY_LIMIT || '5', 10) || 5);
528
+ export const AGENT_CONCURRENCY_LIMIT = Math.max(1, parseInt(process.env.AGENT_CONCURRENCY_LIMIT ||
529
+ envConfig.AGENT_CONCURRENCY_LIMIT ||
530
+ '3', 10) || 3);
531
+ export const SESSION_CONCURRENCY_LIMIT = Math.max(1, parseInt(process.env.SESSION_CONCURRENCY_LIMIT ||
532
+ envConfig.SESSION_CONCURRENCY_LIMIT ||
533
+ '1', 10) || 1);
534
+ // Task executor defaults
535
+ export const TASK_DEFAULT_TIMEOUT_MS = parseInt(process.env.TASK_DEFAULT_TIMEOUT_MS ||
536
+ envConfig.TASK_DEFAULT_TIMEOUT_MS ||
537
+ '0', 10);
538
+ export const TASK_DEFAULT_STEP_TIMEOUT_MS = parseInt(process.env.TASK_DEFAULT_STEP_TIMEOUT_MS ||
539
+ envConfig.TASK_DEFAULT_STEP_TIMEOUT_MS ||
540
+ '0', 10);
541
+ export const TASK_DEFAULT_RETRY_COUNT = parseInt(process.env.TASK_DEFAULT_RETRY_COUNT ||
542
+ envConfig.TASK_DEFAULT_RETRY_COUNT ||
543
+ '0', 10);
544
+ export const TASK_DEFAULT_RETRY_BACKOFF_MS = parseInt(process.env.TASK_DEFAULT_RETRY_BACKOFF_MS ||
545
+ envConfig.TASK_DEFAULT_RETRY_BACKOFF_MS ||
546
+ '5000', 10);
547
+ // --- Convention-based agent paths ---
548
+ export function agentPaths(agentId) {
549
+ const normalizedAgentId = (agentId || '').trim();
550
+ if (!normalizedAgentId ||
551
+ normalizedAgentId === '.' ||
552
+ normalizedAgentId === '..' ||
553
+ normalizedAgentId.includes('/') ||
554
+ normalizedAgentId.includes('\\') ||
555
+ normalizedAgentId.includes('\0')) {
556
+ throw new Error(`Invalid agent_id: ${JSON.stringify(agentId)}`);
557
+ }
558
+ function resolveWorkspaceOverride(base, defaultWorkspace) {
559
+ const configPath = path.join(base, 'agent-config.json');
560
+ let workspace = defaultWorkspace;
561
+ if (!fs.existsSync(configPath)) {
562
+ return workspace;
563
+ }
564
+ try {
565
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
566
+ if (config.workspace) {
567
+ const requested = expandHomePath(config.workspace);
568
+ const inAllowedRoot = WORKSPACE_ALLOWED_ROOTS.some((root) => {
569
+ const resolvedRoot = path.resolve(root);
570
+ const resolvedPath = path.resolve(requested);
571
+ return (resolvedPath === resolvedRoot ||
572
+ resolvedPath.startsWith(`${resolvedRoot}${path.sep}`));
573
+ });
574
+ if (inAllowedRoot) {
575
+ workspace = requested;
576
+ }
577
+ else {
578
+ console.warn(`[security] Workspace "${requested}" is outside WORKSPACE_ALLOWED_ROOTS; falling back to default for agent "${normalizedAgentId}".`);
579
+ }
580
+ }
581
+ }
582
+ catch {
583
+ /* ignore */
584
+ }
585
+ return workspace;
586
+ }
587
+ const base = path.resolve(AGENTS_DIR, normalizedAgentId);
588
+ if (base !== AGENTS_DIR && !base.startsWith(`${AGENTS_DIR}${path.sep}`)) {
589
+ throw new Error(`Invalid agent_id path escape attempt: ${normalizedAgentId}`);
590
+ }
591
+ const configPath = path.join(base, 'agent-config.json');
592
+ const recordPath = path.join(base, 'agent.json');
593
+ let assignedSpaceId = (process.env.SUPEN_SPACE_ID || '').trim();
594
+ if (fs.existsSync(recordPath)) {
595
+ try {
596
+ const record = JSON.parse(fs.readFileSync(recordPath, 'utf-8'));
597
+ const recordSpaceId = typeof record?.space_id === 'string' ? record.space_id.trim() : '';
598
+ if (recordSpaceId)
599
+ assignedSpaceId = recordSpaceId;
600
+ }
601
+ catch {
602
+ /* ignore malformed agent metadata */
603
+ }
604
+ }
605
+ const defaultWorkspace = resolveSpaceDriveRoot(assignedSpaceId || 'local');
606
+ const workspace = resolveWorkspaceOverride(base, defaultWorkspace);
607
+ return {
608
+ base,
609
+ config: configPath,
610
+ workspace,
611
+ logs: path.join(base, 'logs'),
612
+ brain: base,
613
+ };
614
+ }
615
+ /**
616
+ * Get the ordered list of models for a specific agent.
617
+ *
618
+ * 1. Checks `agent-config.json` for `model`: "provider_id:model_name" (composite key)
619
+ * 2. If present, puts that model first, followed by the rest of the registry for fallback.
620
+ * 3. If absent or invalid, returns the full registry (which puts the default model first).
621
+ */
622
+ export function getAgentModelConfig(agentId, silent = false) {
623
+ let selectedModelId;
624
+ try {
625
+ const configPath = path.join(AGENTS_DIR, agentId, 'agent-config.json');
626
+ if (fs.existsSync(configPath)) {
627
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
628
+ if (typeof config.model === 'string' && config.model) {
629
+ selectedModelId = config.model;
630
+ }
631
+ }
632
+ }
633
+ catch (e) {
634
+ if (!silent) {
635
+ logger.warn({ err: e.message, agentId }, 'Failed to parse agent-config.json for model selection');
636
+ }
637
+ }
638
+ // If no model explicitly selected, return default-first ordering for fallback behavior.
639
+ if (!selectedModelId || MODELS_REGISTRY.length === 0) {
640
+ if (MODELS_REGISTRY.length <= 1)
641
+ return MODELS_REGISTRY;
642
+ const defaultIdx = MODELS_REGISTRY.findIndex((m) => m.default);
643
+ if (defaultIdx <= 0)
644
+ return MODELS_REGISTRY;
645
+ const ordered = [...MODELS_REGISTRY];
646
+ const [selectedDefault] = ordered.splice(defaultIdx, 1);
647
+ return [selectedDefault, ...ordered];
648
+ }
649
+ // Find by composite key (e.g. "babelark:qwen3.6-plus")
650
+ let selectedIdx = MODELS_REGISTRY.findIndex(m => m.id === selectedModelId);
651
+ // If the agent requested a model that isn't in the registry, fall back to default
652
+ if (selectedIdx === -1) {
653
+ if (!silent) {
654
+ logger.warn({ agentId, requestedModel: selectedModelId }, 'Agent requested model ID not found in config.yaml providers block. Falling back to default.');
655
+ }
656
+ return MODELS_REGISTRY;
657
+ }
658
+ // Build the list: Selected model FIRST, then the rest in their original order for fallback
659
+ const list = [...MODELS_REGISTRY];
660
+ const [selected] = list.splice(selectedIdx, 1);
661
+ return [selected, ...list];
662
+ }
663
+ //# sourceMappingURL=config.js.map