@plumbus/core 0.4.2 → 0.6.0

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 (324) hide show
  1. package/README.md +2 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/ai/ai/cost-tracker.d.ts +93 -0
  4. package/dist/ai/ai/derive-ledger-usage.d.ts +10 -0
  5. package/dist/ai/ai/model-pricing.d.ts +51 -0
  6. package/dist/ai/ai/provider.d.ts +214 -0
  7. package/dist/ai/ai/refusal.d.ts +27 -0
  8. package/dist/ai/ai/usage-client.d.ts +30 -0
  9. package/dist/ai/ai-service.d.ts +1 -1
  10. package/dist/ai/ai-service.d.ts.map +1 -1
  11. package/dist/ai/ai-service.js +21 -16
  12. package/dist/ai/ai-service.js.map +1 -1
  13. package/dist/ai/cost-tracker.d.ts +17 -1
  14. package/dist/ai/cost-tracker.d.ts.map +1 -1
  15. package/dist/ai/cost-tracker.js +8 -6
  16. package/dist/ai/cost-tracker.js.map +1 -1
  17. package/dist/ai/derive-ledger-usage.d.ts +11 -0
  18. package/dist/ai/derive-ledger-usage.d.ts.map +1 -0
  19. package/dist/ai/derive-ledger-usage.js +36 -0
  20. package/dist/ai/derive-ledger-usage.js.map +1 -0
  21. package/dist/ai/index.d.ts +1 -0
  22. package/dist/ai/index.d.ts.map +1 -1
  23. package/dist/ai/index.js +1 -0
  24. package/dist/ai/index.js.map +1 -1
  25. package/dist/ai/types/config.d.ts +72 -0
  26. package/dist/ai/types/enums.d.ts +73 -0
  27. package/dist/api/route-generator.d.ts.map +1 -1
  28. package/dist/api/route-generator.js +27 -14
  29. package/dist/api/route-generator.js.map +1 -1
  30. package/dist/cli/cli.d.ts.map +1 -1
  31. package/dist/cli/cli.js +3 -1
  32. package/dist/cli/cli.js.map +1 -1
  33. package/dist/cli/commands/dev.d.ts.map +1 -1
  34. package/dist/cli/commands/dev.js +38 -149
  35. package/dist/cli/commands/dev.js.map +1 -1
  36. package/dist/cli/commands/doctor.d.ts +6 -0
  37. package/dist/cli/commands/doctor.d.ts.map +1 -1
  38. package/dist/cli/commands/doctor.js +92 -4
  39. package/dist/cli/commands/doctor.js.map +1 -1
  40. package/dist/cli/commands/event.d.ts.map +1 -1
  41. package/dist/cli/commands/event.js +3 -0
  42. package/dist/cli/commands/event.js.map +1 -1
  43. package/dist/cli/commands/events-ops.d.ts +4 -0
  44. package/dist/cli/commands/events-ops.d.ts.map +1 -0
  45. package/dist/cli/commands/events-ops.js +203 -0
  46. package/dist/cli/commands/events-ops.js.map +1 -0
  47. package/dist/cli/commands/flow-schedule-list.d.ts +31 -0
  48. package/dist/cli/commands/flow-schedule-list.d.ts.map +1 -0
  49. package/dist/cli/commands/flow-schedule-list.js +93 -0
  50. package/dist/cli/commands/flow-schedule-list.js.map +1 -0
  51. package/dist/cli/commands/flow.d.ts.map +1 -1
  52. package/dist/cli/commands/flow.js +75 -1
  53. package/dist/cli/commands/flow.js.map +1 -1
  54. package/dist/cli/commands/generate.d.ts +4 -0
  55. package/dist/cli/commands/generate.d.ts.map +1 -1
  56. package/dist/cli/commands/generate.js +94 -3
  57. package/dist/cli/commands/generate.js.map +1 -1
  58. package/dist/cli/commands/index.d.ts +2 -0
  59. package/dist/cli/commands/index.d.ts.map +1 -1
  60. package/dist/cli/commands/index.js +2 -0
  61. package/dist/cli/commands/index.js.map +1 -1
  62. package/dist/cli/commands/init.d.ts +1 -1
  63. package/dist/cli/commands/init.d.ts.map +1 -1
  64. package/dist/cli/commands/init.js +55 -4
  65. package/dist/cli/commands/init.js.map +1 -1
  66. package/dist/cli/commands/mcp.d.ts.map +1 -1
  67. package/dist/cli/commands/mcp.js +2 -0
  68. package/dist/cli/commands/mcp.js.map +1 -1
  69. package/dist/cli/commands/start.d.ts +3 -6
  70. package/dist/cli/commands/start.d.ts.map +1 -1
  71. package/dist/cli/commands/start.js +71 -180
  72. package/dist/cli/commands/start.js.map +1 -1
  73. package/dist/cli/commands/verify.d.ts +3 -1
  74. package/dist/cli/commands/verify.d.ts.map +1 -1
  75. package/dist/cli/commands/verify.js +17 -9
  76. package/dist/cli/commands/verify.js.map +1 -1
  77. package/dist/cli/commands/voice.d.ts +12 -0
  78. package/dist/cli/commands/voice.d.ts.map +1 -0
  79. package/dist/cli/commands/voice.js +109 -0
  80. package/dist/cli/commands/voice.js.map +1 -0
  81. package/dist/cli/commands/worker.d.ts +19 -0
  82. package/dist/cli/commands/worker.d.ts.map +1 -0
  83. package/dist/cli/commands/worker.js +234 -0
  84. package/dist/cli/commands/worker.js.map +1 -0
  85. package/dist/cli/mcp-serve-context.d.ts +3 -0
  86. package/dist/cli/mcp-serve-context.d.ts.map +1 -1
  87. package/dist/cli/mcp-serve-context.js +133 -111
  88. package/dist/cli/mcp-serve-context.js.map +1 -1
  89. package/dist/cli/templates/resources.d.ts.map +1 -1
  90. package/dist/cli/templates/resources.js +7 -2
  91. package/dist/cli/templates/resources.js.map +1 -1
  92. package/dist/cli/utils.d.ts +4 -0
  93. package/dist/cli/utils.d.ts.map +1 -1
  94. package/dist/cli/utils.js +9 -0
  95. package/dist/cli/utils.js.map +1 -1
  96. package/dist/cli/voice-agent-bootstrap.d.ts +22 -0
  97. package/dist/cli/voice-agent-bootstrap.d.ts.map +1 -0
  98. package/dist/cli/voice-agent-bootstrap.js +12 -0
  99. package/dist/cli/voice-agent-bootstrap.js.map +1 -0
  100. package/dist/cli/voice-serve-context.d.ts +7 -0
  101. package/dist/cli/voice-serve-context.d.ts.map +1 -0
  102. package/dist/cli/voice-serve-context.js +26 -0
  103. package/dist/cli/voice-serve-context.js.map +1 -0
  104. package/dist/data/drift-inspector.d.ts +2 -2
  105. package/dist/data/drift-inspector.d.ts.map +1 -1
  106. package/dist/data/drift-inspector.js +2 -1
  107. package/dist/data/drift-inspector.js.map +1 -1
  108. package/dist/data/migration.d.ts.map +1 -1
  109. package/dist/data/migration.js +2 -0
  110. package/dist/data/migration.js.map +1 -1
  111. package/dist/define/defineCapability.d.ts +5 -0
  112. package/dist/define/defineCapability.d.ts.map +1 -1
  113. package/dist/define/defineCapability.js +23 -0
  114. package/dist/define/defineCapability.js.map +1 -1
  115. package/dist/errors/http.d.ts.map +1 -1
  116. package/dist/errors/http.js +1 -0
  117. package/dist/errors/http.js.map +1 -1
  118. package/dist/errors/index.d.ts.map +1 -1
  119. package/dist/errors/index.js +1 -0
  120. package/dist/errors/index.js.map +1 -1
  121. package/dist/events/dispatcher.d.ts +4 -0
  122. package/dist/events/dispatcher.d.ts.map +1 -1
  123. package/dist/events/dispatcher.js +24 -1
  124. package/dist/events/dispatcher.js.map +1 -1
  125. package/dist/events/emitter.d.ts +2 -0
  126. package/dist/events/emitter.d.ts.map +1 -1
  127. package/dist/events/emitter.js +6 -3
  128. package/dist/events/emitter.js.map +1 -1
  129. package/dist/events/queue-adapter.d.ts +7 -0
  130. package/dist/events/queue-adapter.d.ts.map +1 -0
  131. package/dist/events/queue-adapter.js +4 -0
  132. package/dist/events/queue-adapter.js.map +1 -0
  133. package/dist/events/queue.d.ts +16 -13
  134. package/dist/events/queue.d.ts.map +1 -1
  135. package/dist/events/queue.js +79 -22
  136. package/dist/events/queue.js.map +1 -1
  137. package/dist/events/worker.d.ts +4 -0
  138. package/dist/events/worker.d.ts.map +1 -1
  139. package/dist/events/worker.js +47 -1
  140. package/dist/events/worker.js.map +1 -1
  141. package/dist/execution/canonical-name.d.ts +13 -0
  142. package/dist/execution/canonical-name.d.ts.map +1 -0
  143. package/dist/execution/canonical-name.js +17 -0
  144. package/dist/execution/canonical-name.js.map +1 -0
  145. package/dist/execution/capability-executor.d.ts +1 -1
  146. package/dist/execution/capability-executor.d.ts.map +1 -1
  147. package/dist/execution/capability-executor.js +52 -24
  148. package/dist/execution/capability-executor.js.map +1 -1
  149. package/dist/execution/capability-invocation.d.ts +34 -0
  150. package/dist/execution/capability-invocation.d.ts.map +1 -0
  151. package/dist/execution/capability-invocation.js +138 -0
  152. package/dist/execution/capability-invocation.js.map +1 -0
  153. package/dist/execution/capability-registry.d.ts +6 -4
  154. package/dist/execution/capability-registry.d.ts.map +1 -1
  155. package/dist/execution/capability-registry.js +13 -7
  156. package/dist/execution/capability-registry.js.map +1 -1
  157. package/dist/execution/context-factory.d.ts.map +1 -1
  158. package/dist/execution/context-factory.js +18 -1
  159. package/dist/execution/context-factory.js.map +1 -1
  160. package/dist/execution/index.d.ts +4 -0
  161. package/dist/execution/index.d.ts.map +1 -1
  162. package/dist/execution/index.js +2 -0
  163. package/dist/execution/index.js.map +1 -1
  164. package/dist/execution/invocation-emit-scope.d.ts +11 -0
  165. package/dist/execution/invocation-emit-scope.d.ts.map +1 -0
  166. package/dist/execution/invocation-emit-scope.js +8 -0
  167. package/dist/execution/invocation-emit-scope.js.map +1 -0
  168. package/dist/flows/engine.d.ts +7 -1
  169. package/dist/flows/engine.d.ts.map +1 -1
  170. package/dist/flows/engine.js +75 -10
  171. package/dist/flows/engine.js.map +1 -1
  172. package/dist/flows/flow-delayed.d.ts +34 -0
  173. package/dist/flows/flow-delayed.d.ts.map +1 -0
  174. package/dist/flows/flow-delayed.js +60 -0
  175. package/dist/flows/flow-delayed.js.map +1 -0
  176. package/dist/flows/flow-queue.d.ts +10 -0
  177. package/dist/flows/flow-queue.d.ts.map +1 -0
  178. package/dist/flows/flow-queue.js +25 -0
  179. package/dist/flows/flow-queue.js.map +1 -0
  180. package/dist/flows/scheduler.d.ts +0 -12
  181. package/dist/flows/scheduler.d.ts.map +1 -1
  182. package/dist/flows/scheduler.js +15 -0
  183. package/dist/flows/scheduler.js.map +1 -1
  184. package/dist/flows/schema.d.ts +17 -0
  185. package/dist/flows/schema.d.ts.map +1 -1
  186. package/dist/flows/schema.js +2 -0
  187. package/dist/flows/schema.js.map +1 -1
  188. package/dist/flows/step-consumer.d.ts +24 -0
  189. package/dist/flows/step-consumer.d.ts.map +1 -0
  190. package/dist/flows/step-consumer.js +72 -0
  191. package/dist/flows/step-consumer.js.map +1 -0
  192. package/dist/flows/triggers.d.ts +1 -1
  193. package/dist/flows/triggers.d.ts.map +1 -1
  194. package/dist/flows/triggers.js +5 -7
  195. package/dist/flows/triggers.js.map +1 -1
  196. package/dist/governance/capability-source-scan.d.ts +7 -0
  197. package/dist/governance/capability-source-scan.d.ts.map +1 -0
  198. package/dist/governance/capability-source-scan.js +80 -0
  199. package/dist/governance/capability-source-scan.js.map +1 -0
  200. package/dist/governance/rules/architecture.d.ts.map +1 -1
  201. package/dist/governance/rules/architecture.js +2 -0
  202. package/dist/governance/rules/architecture.js.map +1 -1
  203. package/dist/governance/rules/capability-dependencies.d.ts +8 -0
  204. package/dist/governance/rules/capability-dependencies.d.ts.map +1 -0
  205. package/dist/governance/rules/capability-dependencies.js +195 -0
  206. package/dist/governance/rules/capability-dependencies.js.map +1 -0
  207. package/dist/governance/rules/index.d.ts +2 -0
  208. package/dist/governance/rules/index.d.ts.map +1 -1
  209. package/dist/governance/rules/index.js +2 -0
  210. package/dist/governance/rules/index.js.map +1 -1
  211. package/dist/governance/rules/worker.d.ts +9 -0
  212. package/dist/governance/rules/worker.d.ts.map +1 -0
  213. package/dist/governance/rules/worker.js +89 -0
  214. package/dist/governance/rules/worker.js.map +1 -0
  215. package/dist/index.d.ts +8 -3
  216. package/dist/index.d.ts.map +1 -1
  217. package/dist/index.js +4 -2
  218. package/dist/index.js.map +1 -1
  219. package/dist/jobs/dispatch.d.ts +18 -0
  220. package/dist/jobs/dispatch.d.ts.map +1 -0
  221. package/dist/jobs/dispatch.js +50 -0
  222. package/dist/jobs/dispatch.js.map +1 -0
  223. package/dist/jobs/index.d.ts +9 -0
  224. package/dist/jobs/index.d.ts.map +1 -0
  225. package/dist/jobs/index.js +8 -0
  226. package/dist/jobs/index.js.map +1 -0
  227. package/dist/jobs/routes.d.ts +10 -0
  228. package/dist/jobs/routes.d.ts.map +1 -0
  229. package/dist/jobs/routes.js +44 -0
  230. package/dist/jobs/routes.js.map +1 -0
  231. package/dist/jobs/schema.d.ts +264 -0
  232. package/dist/jobs/schema.d.ts.map +1 -0
  233. package/dist/jobs/schema.js +34 -0
  234. package/dist/jobs/schema.js.map +1 -0
  235. package/dist/jobs/service.d.ts +52 -0
  236. package/dist/jobs/service.d.ts.map +1 -0
  237. package/dist/jobs/service.js +168 -0
  238. package/dist/jobs/service.js.map +1 -0
  239. package/dist/jobs/types.d.ts +30 -0
  240. package/dist/jobs/types.d.ts.map +1 -0
  241. package/dist/jobs/types.js +4 -0
  242. package/dist/jobs/types.js.map +1 -0
  243. package/dist/mcp/manifest-generator.d.ts.map +1 -1
  244. package/dist/mcp/manifest-generator.js +3 -2
  245. package/dist/mcp/manifest-generator.js.map +1 -1
  246. package/dist/observability/metrics.d.ts +9 -1
  247. package/dist/observability/metrics.d.ts.map +1 -1
  248. package/dist/observability/metrics.js +28 -1
  249. package/dist/observability/metrics.js.map +1 -1
  250. package/dist/runtime/bootstrap.d.ts +51 -0
  251. package/dist/runtime/bootstrap.d.ts.map +1 -0
  252. package/dist/runtime/bootstrap.js +140 -0
  253. package/dist/runtime/bootstrap.js.map +1 -0
  254. package/dist/runtime/index.d.ts +7 -0
  255. package/dist/runtime/index.d.ts.map +1 -0
  256. package/dist/runtime/index.js +6 -0
  257. package/dist/runtime/index.js.map +1 -0
  258. package/dist/runtime/load-extensions.d.ts +4 -0
  259. package/dist/runtime/load-extensions.d.ts.map +1 -0
  260. package/dist/runtime/load-extensions.js +41 -0
  261. package/dist/runtime/load-extensions.js.map +1 -0
  262. package/dist/runtime/queue-factory.d.ts +44 -0
  263. package/dist/runtime/queue-factory.d.ts.map +1 -0
  264. package/dist/runtime/queue-factory.js +156 -0
  265. package/dist/runtime/queue-factory.js.map +1 -0
  266. package/dist/runtime/register-consumers.d.ts +29 -0
  267. package/dist/runtime/register-consumers.d.ts.map +1 -0
  268. package/dist/runtime/register-consumers.js +233 -0
  269. package/dist/runtime/register-consumers.js.map +1 -0
  270. package/dist/runtime/start-worker-pool.d.ts +32 -0
  271. package/dist/runtime/start-worker-pool.d.ts.map +1 -0
  272. package/dist/runtime/start-worker-pool.js +91 -0
  273. package/dist/runtime/start-worker-pool.js.map +1 -0
  274. package/dist/runtime/worker-health.d.ts +19 -0
  275. package/dist/runtime/worker-health.d.ts.map +1 -0
  276. package/dist/runtime/worker-health.js +41 -0
  277. package/dist/runtime/worker-health.js.map +1 -0
  278. package/dist/server/bootstrap.d.ts +6 -0
  279. package/dist/server/bootstrap.d.ts.map +1 -1
  280. package/dist/server/bootstrap.js +24 -1
  281. package/dist/server/bootstrap.js.map +1 -1
  282. package/dist/testing/context.d.ts +3 -0
  283. package/dist/testing/context.d.ts.map +1 -1
  284. package/dist/testing/context.js +12 -0
  285. package/dist/testing/context.js.map +1 -1
  286. package/dist/testing/e2e.d.ts +6 -0
  287. package/dist/testing/e2e.d.ts.map +1 -1
  288. package/dist/testing/e2e.js +2 -0
  289. package/dist/testing/e2e.js.map +1 -1
  290. package/dist/testing/simulate-flow.d.ts.map +1 -1
  291. package/dist/testing/simulate-flow.js +10 -0
  292. package/dist/testing/simulate-flow.js.map +1 -1
  293. package/dist/types/capability.d.ts +8 -0
  294. package/dist/types/capability.d.ts.map +1 -1
  295. package/dist/types/capability.js.map +1 -1
  296. package/dist/types/config.d.ts +2 -0
  297. package/dist/types/config.d.ts.map +1 -1
  298. package/dist/types/context.d.ts +49 -1
  299. package/dist/types/context.d.ts.map +1 -1
  300. package/dist/types/enums.d.ts +1 -0
  301. package/dist/types/enums.d.ts.map +1 -1
  302. package/dist/types/enums.js +1 -0
  303. package/dist/types/enums.js.map +1 -1
  304. package/dist/types/errors.d.ts +1 -0
  305. package/dist/types/errors.d.ts.map +1 -1
  306. package/dist/types/event.d.ts +10 -0
  307. package/dist/types/event.d.ts.map +1 -1
  308. package/dist/types/event.js +5 -1
  309. package/dist/types/event.js.map +1 -1
  310. package/dist/worker/bootstrap.d.ts +32 -1
  311. package/dist/worker/bootstrap.d.ts.map +1 -1
  312. package/dist/worker/bootstrap.js +166 -2
  313. package/dist/worker/bootstrap.js.map +1 -1
  314. package/instructions/capabilities.md +36 -1
  315. package/instructions/deployment.md +96 -11
  316. package/instructions/events.md +11 -0
  317. package/instructions/flows.md +12 -4
  318. package/instructions/governance.md +6 -0
  319. package/instructions/mcp.md +1 -1
  320. package/instructions/patterns.md +1 -0
  321. package/instructions/security.md +9 -0
  322. package/instructions/testing.md +12 -1
  323. package/instructions/upgrading-0.5-capabilities.md +181 -0
  324. package/package.json +16 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/worker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAuBlC,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,GAAG;IAAE,EAAE,CAAC,EAAE,kBAAkB,CAAC;IAAC,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAE,GACzF,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAqH5C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoH5D"}
@@ -0,0 +1,234 @@
1
+ // ── plumbus worker ──
2
+ // Dedicated worker process for background queues, flows, and jobs.
3
+ import { eq, sql } from 'drizzle-orm';
4
+ import { closeDatabaseConnection, resolveDatabaseConnection, } from '../../data/connection.js';
5
+ import { deadLetterTable, outboxTable } from '../../events/outbox.js';
6
+ import { PromptRegistry } from '../../ai/prompt-registry.js';
7
+ import { loadConfig, validateConfig } from '../../config/loader.js';
8
+ import { EntityRegistry } from '../../data/registry.js';
9
+ import { ConsumerRegistry } from '../../events/consumer-registry.js';
10
+ import { EventRegistry } from '../../events/registry.js';
11
+ import { CapabilityRegistry } from '../../execution/capability-registry.js';
12
+ import { FlowRegistry } from '../../flows/registry.js';
13
+ import { discoverRuntimeResources, needsWorkerPool, resolveRuntimeRole, } from '../../runtime/bootstrap.js';
14
+ import { loadServerExtensions } from '../../runtime/load-extensions.js';
15
+ import { resolveRuntimeQueues, shouldUseRedisBackend } from '../../runtime/queue-factory.js';
16
+ import { startWorkerPool } from '../../runtime/start-worker-pool.js';
17
+ import { createWorkerHealthServer } from '../../runtime/worker-health.js';
18
+ import { createPlumbusMetrics } from '../../observability/metrics.js';
19
+ import { logHookError } from '../../errors/hook-log.js';
20
+ import { info, error as logError } from '../utils.js';
21
+ /**
22
+ * Start a worker-only process (no HTTP API).
23
+ * Used with PLUMBUS_RUNTIME_ROLE=worker or `plumbus worker`.
24
+ */
25
+ export async function startWorkerProcess(options) {
26
+ const config = loadConfig();
27
+ const validation = validateConfig(config);
28
+ if (!validation.valid) {
29
+ throw new Error(`Config validation failed: ${validation.errors.join(', ')}`);
30
+ }
31
+ const runtimeRole = resolveRuntimeRole('worker');
32
+ if (runtimeRole !== 'worker') {
33
+ info(`Runtime role resolved to "${runtimeRole}" (expected worker)`);
34
+ }
35
+ info('Plumbus Worker');
36
+ const resources = await discoverRuntimeResources();
37
+ if (!needsWorkerPool(resources)) {
38
+ info('No background work detected — worker will still drain outbox if events exist');
39
+ }
40
+ const capabilities = new CapabilityRegistry();
41
+ capabilities.registerAll(resources.capabilities);
42
+ const entities = new EntityRegistry();
43
+ entities.registerAll(resources.entities);
44
+ const events = new EventRegistry();
45
+ events.registerAll(resources.events);
46
+ const flows = new FlowRegistry();
47
+ flows.registerAll(resources.flows);
48
+ const consumers = new ConsumerRegistry();
49
+ const promptRegistry = new PromptRegistry();
50
+ for (const prompt of resources.prompts) {
51
+ promptRegistry.register(prompt);
52
+ }
53
+ const dbConnection = await resolveDatabaseConnection(config.database, options);
54
+ const db = dbConnection.db;
55
+ info('Database connected');
56
+ const extensions = await loadServerExtensions();
57
+ const queues = await resolveRuntimeQueues(config, {
58
+ onWarning: (message) => info(`Queue: ${message}`),
59
+ });
60
+ const metrics = createPlumbusMetrics();
61
+ const healthPort = parseInt(options.healthPort ?? '3001', 10);
62
+ const healthHost = options.host ?? '0.0.0.0';
63
+ const workerPool = await startWorkerPool({
64
+ config,
65
+ db,
66
+ queues,
67
+ capabilities,
68
+ entities,
69
+ events,
70
+ flows,
71
+ consumers,
72
+ promptRegistry,
73
+ extensions,
74
+ metrics,
75
+ });
76
+ info('Worker pool started');
77
+ const health = createWorkerHealthServer({
78
+ port: healthPort,
79
+ host: healthHost,
80
+ db,
81
+ queues,
82
+ workerPool,
83
+ metrics,
84
+ });
85
+ const healthAddress = await health.start();
86
+ info(`Worker health: ${healthAddress}/health`);
87
+ info(`Worker metrics: ${healthAddress}/metrics`);
88
+ let shuttingDown = false;
89
+ const shutdown = async () => {
90
+ if (shuttingDown)
91
+ return;
92
+ shuttingDown = true;
93
+ info('Graceful shutdown initiated...');
94
+ await health.stop();
95
+ await workerPool.stop();
96
+ await closeDatabaseConnection(dbConnection);
97
+ info('Worker stopped');
98
+ };
99
+ const onSignal = () => {
100
+ void shutdown();
101
+ };
102
+ process.on('SIGINT', onSignal);
103
+ process.on('SIGTERM', onSignal);
104
+ if (extensions.onProcessError) {
105
+ const errorHook = extensions.onProcessError;
106
+ process.on('uncaughtException', (err) => {
107
+ logError(`Uncaught exception: ${err.message}`);
108
+ Promise.resolve(errorHook({ source: 'uncaughtException', message: err.message, stack: err.stack })).catch((hookErr) => {
109
+ logHookError('onProcessError', hookErr);
110
+ });
111
+ });
112
+ process.on('unhandledRejection', (reason) => {
113
+ const message = reason instanceof Error ? reason.message : String(reason ?? 'Unknown rejection');
114
+ logError(`Unhandled rejection: ${message}`);
115
+ Promise.resolve(errorHook({
116
+ source: 'unhandledRejection',
117
+ message,
118
+ stack: reason instanceof Error ? reason.stack : undefined,
119
+ })).catch((hookErr) => {
120
+ logHookError('onProcessError', hookErr);
121
+ });
122
+ });
123
+ }
124
+ return { shutdown };
125
+ }
126
+ export function registerWorkerCommand(program) {
127
+ const worker = program.command('worker').description('Background worker process');
128
+ worker
129
+ .command('start', { isDefault: true })
130
+ .description('Start the worker pool (default)')
131
+ .option('--health-port <port>', 'Health/metrics HTTP port', '3001')
132
+ .option('-H, --host <host>', 'Health server host', '0.0.0.0')
133
+ .action(async (opts) => {
134
+ try {
135
+ await startWorkerProcess({
136
+ healthPort: opts.healthPort,
137
+ host: opts.host,
138
+ });
139
+ }
140
+ catch (err) {
141
+ logError(`Failed to start worker: ${err instanceof Error ? err.message : String(err)}`);
142
+ process.exit(1);
143
+ }
144
+ });
145
+ worker
146
+ .command('status')
147
+ .description('Summarize worker-related configuration (static check)')
148
+ .option('--json', 'Output JSON')
149
+ .action(async (opts) => {
150
+ const config = loadConfig();
151
+ const resources = await discoverRuntimeResources();
152
+ const role = resolveRuntimeRole('worker');
153
+ const queues = await resolveRuntimeQueues(config, { preferInMemory: true });
154
+ const configuredDurable = shouldUseRedisBackend(config);
155
+ let dbProbes = { dbAvailable: false };
156
+ try {
157
+ const connection = await resolveDatabaseConnection(config.database, {});
158
+ try {
159
+ const pending = await connection.db
160
+ .select({ count: sql `count(*)::int` })
161
+ .from(outboxTable)
162
+ .where(eq(outboxTable.status, 'pending'));
163
+ const dlq = await connection.db
164
+ .select({ count: sql `count(*)::int` })
165
+ .from(deadLetterTable);
166
+ let queueDepths = null;
167
+ if (configuredDurable) {
168
+ const liveQueues = await resolveRuntimeQueues(config);
169
+ try {
170
+ queueDepths = liveQueues.getDepths ? await liveQueues.getDepths() : null;
171
+ }
172
+ finally {
173
+ await liveQueues.close();
174
+ }
175
+ }
176
+ dbProbes = {
177
+ dbAvailable: true,
178
+ outboxPending: pending[0]?.count ?? 0,
179
+ deadLetterCount: dlq[0]?.count ?? 0,
180
+ queueDepths,
181
+ };
182
+ }
183
+ finally {
184
+ await closeDatabaseConnection(connection);
185
+ }
186
+ }
187
+ catch {
188
+ dbProbes = { dbAvailable: false };
189
+ }
190
+ const summary = {
191
+ runtimeRole: role,
192
+ needsWorkerPool: needsWorkerPool(resources),
193
+ queueBackend: queues.backend,
194
+ queueDurable: configuredDurable,
195
+ components: {
196
+ outboxDispatcher: true,
197
+ eventWorker: true,
198
+ jobWorker: resources.capabilities.some((c) => c.kind === 'job'),
199
+ flowRunner: resources.flows.length > 0,
200
+ flowScheduler: resources.flows.some((f) => f.schedule),
201
+ flowStepConsumer: configuredDurable && resources.flows.length > 0,
202
+ flowDelayedPromoter: configuredDurable && resources.flows.length > 0,
203
+ },
204
+ capabilities: resources.capabilities.length,
205
+ eventHandlers: resources.capabilities.filter((c) => c.kind === 'eventHandler').length,
206
+ jobs: resources.capabilities.filter((c) => c.kind === 'job').length,
207
+ flows: resources.flows.length,
208
+ events: resources.events.length,
209
+ probes: dbProbes,
210
+ };
211
+ await queues.close();
212
+ if (opts.json) {
213
+ console.log(JSON.stringify(summary, null, 2));
214
+ return;
215
+ }
216
+ info(`Runtime role: ${summary.runtimeRole}`);
217
+ info(`Needs worker pool: ${summary.needsWorkerPool}`);
218
+ info(`Queue backend: ${summary.queueBackend} (durable: ${summary.queueDurable})`);
219
+ info(`Worker components: dispatcher, eventWorker${summary.components.jobWorker ? ', jobWorker' : ''}${summary.components.flowRunner ? ', flowRunner' : ''}${summary.components.flowScheduler ? ', scheduler' : ''}${summary.components.flowStepConsumer ? ', flowStepConsumer' : ''}${summary.components.flowDelayedPromoter ? ', delayedPromoter' : ''}`);
220
+ info(`Resources: ${summary.capabilities} capabilities, ${summary.flows} flows, ${summary.events} events`);
221
+ if (dbProbes.dbAvailable) {
222
+ info(`Outbox pending: ${dbProbes.outboxPending ?? 0}`);
223
+ info(`Dead letter: ${dbProbes.deadLetterCount ?? 0}`);
224
+ if (dbProbes.queueDepths) {
225
+ const d = dbProbes.queueDepths;
226
+ info(`Queue depths — events: ${d.events}, flows: ${d.flows}, jobs: ${d.jobs}`);
227
+ }
228
+ }
229
+ else {
230
+ info('Database probes unavailable (connection failed)');
231
+ }
232
+ });
233
+ }
234
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/cli/commands/worker.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,14 @@ import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
2
2
  import type { RouteGeneratorConfig } from '../api/route-generator.js';
3
3
  import { CapabilityRegistry } from '../execution/capability-registry.js';
4
4
  import type { PlumbusConfig } from '../types/config.js';
5
+ import type { EventQueue } from '../events/queue.js';
5
6
  export interface McpServeContext {
6
7
  config: PlumbusConfig;
7
8
  db: PostgresJsDatabase;
8
9
  capabilities: CapabilityRegistry;
9
10
  routeConfig: RouteGeneratorConfig;
11
+ jobQueue?: EventQueue;
12
+ closeQueues: () => Promise<void>;
10
13
  closeDb: () => Promise<void>;
11
14
  }
12
15
  export declare function buildMcpServeContext(): Promise<McpServeContext>;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-serve-context.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-serve-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAKlE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAQtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAKzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,EAAE,kBAAkB,CAAC;IACvB,YAAY,EAAE,kBAAkB,CAAC;IACjC,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAoBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC,CAiGrE"}
1
+ {"version":3,"file":"mcp-serve-context.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-serve-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAQtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAUzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,EAAE,kBAAkB,CAAC;IACvB,YAAY,EAAE,kBAAkB,CAAC;IACjC,WAAW,EAAE,oBAAoB,CAAC;IAClC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAoBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC,CA+GrE"}
@@ -1,119 +1,141 @@
1
- // ── Shared wiring for plumbus mcp serve ──
2
- // Builds registries, DB, auth, and RouteGeneratorConfig-compatible deps for MCP runtime.
3
- import { createAIService, singleProviderConfig } from '../ai/ai-service.js';
4
- import { createCostTracker } from '../ai/cost-tracker.js';
5
- import { createProviderAdapter } from '../ai/provider.js';
6
- import { createAuditService } from '../audit/service.js';
7
- import { createJwtAdapter } from '../auth/adapter.js';
8
- import { loadConfig } from '../config/loader.js';
9
- import { closeDatabaseConnection, resolveDatabaseConnection } from '../data/connection.js';
10
- import { EntityRegistry } from '../data/registry.js';
11
- import { createEventEmitter } from '../events/emitter.js';
12
- import { EventRegistry } from '../events/registry.js';
13
- import { CapabilityRegistry } from '../execution/capability-registry.js';
14
- import { createFlowEngine } from '../flows/engine.js';
15
- import { createFlowService } from '../flows/flow-service.js';
16
- import { FlowRegistry } from '../flows/registry.js';
17
- import { createTranslationService, TranslationRegistry } from '../translations/index.js';
18
- import { warn } from './utils.js';
19
- import { discoverResources } from './discover.js';
1
+ import { PromptRegistry } from "../ai/prompt-registry.js";
2
+ import { createAuditService } from "../audit/service.js";
3
+ import { createJwtAdapter } from "../auth/adapter.js";
4
+ import { loadConfig } from "../config/loader.js";
5
+ import { closeDatabaseConnection, resolveDatabaseConnection } from "../data/connection.js";
6
+ import { EntityRegistry } from "../data/registry.js";
7
+ import { createEventEmitter } from "../events/emitter.js";
8
+ import { EventRegistry } from "../events/registry.js";
9
+ import { CapabilityRegistry } from "../execution/capability-registry.js";
10
+ import { buildCapabilityRuntimeDeps } from "../execution/capability-invocation.js";
11
+ import {
12
+ createInvocationEmitScope,
13
+ resolveInvocationCausationId
14
+ } from "../execution/invocation-emit-scope.js";
15
+ import { createFlowEngine } from "../flows/engine.js";
16
+ import { createFlowService } from "../flows/flow-service.js";
17
+ import { FlowRegistry } from "../flows/registry.js";
18
+ import { createTranslationService, TranslationRegistry } from "../translations/index.js";
19
+ import { buildWorkerAiService } from "../runtime/bootstrap.js";
20
+ import { loadServerExtensions } from "../runtime/load-extensions.js";
21
+ import { resolveRuntimeQueues } from "../runtime/queue-factory.js";
22
+ import { warn } from "./utils.js";
23
+ import { discoverResources } from "./discover.js";
20
24
  async function resolveMcpServeAuthAdapter(config) {
21
- if (config.mcp?.agents && Object.keys(config.mcp.agents).length > 0) {
22
- const { createMcpAuthAdapter } = await import('@plumbus/mcp');
23
- return createMcpAuthAdapter({
24
- agents: config.mcp.agents,
25
- envToken: process.env.PLUMBUS_MCP_TOKEN,
26
- });
27
- }
28
- warn('plumbus.config.mcp.agents is not configured — MCP requests will be anonymous and only `access.public: true` capabilities will be callable. See docs/mcp/agent-authentication.md.');
29
- return createJwtAdapter({
30
- secret: config.auth.secret ?? 'development-secret-placeholder-32chars-min',
31
- issuer: config.auth.issuer,
32
- audience: config.auth.audience,
25
+ if (config.mcp?.agents && Object.keys(config.mcp.agents).length > 0) {
26
+ const { createMcpAuthAdapter } = await import("@plumbus/mcp");
27
+ return createMcpAuthAdapter({
28
+ agents: config.mcp.agents,
29
+ envToken: process.env.PLUMBUS_MCP_TOKEN
33
30
  });
31
+ }
32
+ warn(
33
+ "plumbus.config.mcp.agents is not configured \u2014 MCP requests will be anonymous and only `access.public: true` capabilities will be callable. See docs/mcp/agent-authentication.md."
34
+ );
35
+ return createJwtAdapter({
36
+ secret: config.auth.secret ?? "development-secret-placeholder-32chars-min",
37
+ issuer: config.auth.issuer,
38
+ audience: config.auth.audience
39
+ });
34
40
  }
35
- export async function buildMcpServeContext() {
36
- const config = loadConfig({ environment: 'development' });
37
- const resources = await discoverResources();
38
- const capabilities = new CapabilityRegistry();
39
- capabilities.registerAll(resources.capabilities);
40
- const entities = new EntityRegistry();
41
- entities.registerAll(resources.entities);
42
- const events = new EventRegistry();
43
- events.registerAll(resources.events);
44
- const flows = new FlowRegistry();
45
- flows.registerAll(resources.flows);
46
- const dbConnection = await resolveDatabaseConnection(config.database, {});
47
- const db = dbConnection.db;
48
- const logger = {
49
- info: (msg) => console.log(msg),
50
- warn: (msg) => console.warn(msg),
51
- error: (msg) => console.error(msg),
52
- debug: (msg) => console.debug(msg),
53
- };
54
- const translationRegistry = new TranslationRegistry();
55
- translationRegistry.registerAll(resources.translations ?? []);
56
- const defaultLocale = resources.translations?.[0]?.defaultLocale ?? 'en';
57
- const authAdapter = await resolveMcpServeAuthAdapter(config);
58
- let aiService;
59
- if (config.ai) {
60
- const adapter = createProviderAdapter(config.ai.provider, config.ai);
61
- const costTracker = createCostTracker({
62
- maxTokensPerRequest: config.ai.maxTokensPerRequest,
63
- dailyCostLimit: config.ai.dailyCostLimit,
64
- });
65
- aiService = createAIService(singleProviderConfig(adapter, {
66
- costTracker,
67
- }));
41
+ async function buildMcpServeContext() {
42
+ const config = loadConfig({ environment: "development" });
43
+ const resources = await discoverResources();
44
+ const capabilities = new CapabilityRegistry();
45
+ capabilities.registerAll(resources.capabilities);
46
+ const promptRegistry = new PromptRegistry();
47
+ for (const prompt of resources.prompts) {
48
+ promptRegistry.register(prompt);
49
+ }
50
+ const entities = new EntityRegistry();
51
+ entities.registerAll(resources.entities);
52
+ const events = new EventRegistry();
53
+ events.registerAll(resources.events);
54
+ const flows = new FlowRegistry();
55
+ flows.registerAll(resources.flows);
56
+ const dbConnection = await resolveDatabaseConnection(config.database, {});
57
+ const db = dbConnection.db;
58
+ const queues = await resolveRuntimeQueues(config);
59
+ const logger = {
60
+ info: (msg) => console.log(msg),
61
+ warn: (msg) => console.warn(msg),
62
+ error: (msg) => console.error(msg),
63
+ debug: (msg) => console.debug(msg)
64
+ };
65
+ const translationRegistry = new TranslationRegistry();
66
+ translationRegistry.registerAll(resources.translations ?? []);
67
+ const defaultLocale = resources.translations?.[0]?.defaultLocale ?? "en";
68
+ const authAdapter = await resolveMcpServeAuthAdapter(config);
69
+ const extensions = await loadServerExtensions();
70
+ const aiService = buildWorkerAiService({
71
+ config,
72
+ db,
73
+ promptRegistry,
74
+ onAICostRecorded: extensions.onAICostRecorded,
75
+ resolveAiOverrides: extensions.resolveAiOverrides,
76
+ enableStrictStructuredOutputs: extensions.enableStrictStructuredOutputs
77
+ });
78
+ const requestFlowEngine = createFlowEngine({
79
+ db,
80
+ registry: flows,
81
+ stepDeps: {
82
+ async executeCapability() {
83
+ return {
84
+ success: false,
85
+ error: "Flow execution is worker-owned in MCP serve bootstrap"
86
+ };
87
+ },
88
+ evaluateCondition() {
89
+ return false;
90
+ }
68
91
  }
69
- const requestFlowEngine = createFlowEngine({
92
+ });
93
+ const routeConfig = {
94
+ db,
95
+ authAdapter,
96
+ createDependencies: (auth, options) => {
97
+ const audit = createAuditService({ db, auth });
98
+ const data = entities.createDataService({
70
99
  db,
71
- registry: flows,
72
- stepDeps: {
73
- async executeCapability() {
74
- return {
75
- success: false,
76
- error: 'Flow execution is worker-owned in MCP serve bootstrap',
77
- };
78
- },
79
- evaluateCondition() {
80
- return false;
81
- },
82
- },
83
- });
84
- const routeConfig = {
100
+ auth,
101
+ audit,
102
+ bypassTenantScope: options?.bypassTenantScope
103
+ });
104
+ const invocationEmitScope = createInvocationEmitScope();
105
+ const eventService = createEventEmitter({
85
106
  db,
86
- authAdapter,
87
- createDependencies: (auth, options) => {
88
- const audit = createAuditService({ db, auth });
89
- const data = entities.createDataService({
90
- db,
91
- auth,
92
- audit,
93
- bypassTenantScope: options?.bypassTenantScope,
94
- });
95
- const eventService = createEventEmitter({ db, auth, registry: events, audit });
96
- return {
97
- auth,
98
- data,
99
- events: eventService,
100
- flows: createFlowService(requestFlowEngine, auth),
101
- ai: aiService,
102
- audit,
103
- logger,
104
- config: config,
105
- translations: createTranslationService(translationRegistry, defaultLocale),
106
- };
107
- },
108
- };
109
- return {
107
+ auth,
108
+ registry: events,
109
+ audit,
110
+ getCausationId: () => resolveInvocationCausationId(invocationEmitScope)
111
+ });
112
+ return {
113
+ auth,
114
+ data,
115
+ events: eventService,
116
+ flows: createFlowService(requestFlowEngine, auth),
117
+ ai: aiService,
118
+ audit,
119
+ logger,
110
120
  config,
111
- db,
112
- capabilities,
113
- routeConfig,
114
- closeDb: async () => {
115
- await closeDatabaseConnection(dbConnection);
116
- },
117
- };
121
+ translations: createTranslationService(translationRegistry, defaultLocale),
122
+ invocationEmitScope,
123
+ ...buildCapabilityRuntimeDeps(capabilities)
124
+ };
125
+ }
126
+ };
127
+ return {
128
+ config,
129
+ db,
130
+ capabilities,
131
+ routeConfig,
132
+ ...queues.isDurable ? { jobQueue: queues.jobs } : {},
133
+ closeQueues: () => queues.close(),
134
+ closeDb: async () => {
135
+ await closeDatabaseConnection(dbConnection);
136
+ }
137
+ };
118
138
  }
119
- //# sourceMappingURL=mcp-serve-context.js.map
139
+ export {
140
+ buildMcpServeContext
141
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-serve-context.js","sourceRoot":"","sources":["../../src/cli/mcp-serve-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-serve-context.js","sourceRoot":"","sources":["../../src/cli/mcp-serve-context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/resources.ts"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgDrF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAW5E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAqBjE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0BtE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBnD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAexD"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/resources.ts"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuDrF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAW5E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAqBjE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0BtE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBnD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAexD"}
@@ -46,7 +46,12 @@ export const ${toCamelCase(name)} = defineCapability({
46
46
  handler: async (ctx, input) => {
47
47
  // TODO: implement ${pascal}
48
48
  return {};
49
- },
49
+ },${kind === 'eventHandler'
50
+ ? `
51
+
52
+ // Optional: auto-register this handler on the events queue when workers run.
53
+ // trigger: { event: "your.domain.event" },`
54
+ : ''}
50
55
  });
51
56
  `;
52
57
  }
@@ -97,7 +102,7 @@ export const ${toCamelCase(name)}Flow = defineFlow({
97
102
  {
98
103
  name: "step1",
99
104
  type: "capability",
100
- capability: "TODO",
105
+ capability: "${domain}.stepName",
101
106
  },
102
107
  ],
103
108
  });
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/cli/templates/resources.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,+CAA+C;AAE/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAAY,EAAE,MAAc;IAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;;;eAGM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;WACJ,IAAI;aACF,MAAM;;;;;;wDAMqC,IAAI;;;;;;yBAMnC,MAAM,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;yBAuBd,MAAM;;;;CAI9B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,OAAe;IAClE,OAAO;cACK,WAAW,CAAC,IAAI,CAAC;;YAEnB,YAAY,CAAC,IAAI,CAAC;;;;;;CAM7B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;;eAEM,WAAW,CAAC,IAAI,CAAC;WACrB,MAAM;;;;;;;;;;;;CAYhB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAc;IACvD,OAAO;;;eAGM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;aACF,MAAM;;;;;;;;;;;;;;CAclB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAe;IAC5D,OAAO;;WAEE,WAAW,CAAC,IAAI,CAAC;;YAEhB,YAAY,CAAC,IAAI,CAAC;;wCAEU,WAAW,CAAC,IAAI,CAAC;;;;;;;;wCAQjB,WAAW,CAAC,IAAI,CAAC;;;;;;;;;;CAUxD,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO;;;eAGM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;;;;;;CAMd,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO;;;eAGM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;;;;;;;;;;;;;;;;CAgBd,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO;;eAEM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;;;;;;;;;;CAUd,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/cli/templates/resources.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,+CAA+C;AAE/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAAY,EAAE,MAAc;IAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;;;eAGM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;WACJ,IAAI;aACF,MAAM;;;;;;wDAMqC,IAAI;;;;;;yBAMnC,MAAM,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;yBAuBd,MAAM;;MAG3B,IAAI,KAAK,cAAc;QACrB,CAAC,CAAC;;;8CAGsC;QACxC,CAAC,CAAC,EACN;;CAED,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,OAAe;IAClE,OAAO;cACK,WAAW,CAAC,IAAI,CAAC;;YAEnB,YAAY,CAAC,IAAI,CAAC;;;;;;CAM7B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO;;eAEM,WAAW,CAAC,IAAI,CAAC;WACrB,MAAM;;;;;;;;;;;;CAYhB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAc;IACvD,OAAO;;;eAGM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;aACF,MAAM;;;;;;;;;;qBAUE,MAAM;;;;CAI1B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAe;IAC5D,OAAO;;WAEE,WAAW,CAAC,IAAI,CAAC;;YAEhB,YAAY,CAAC,IAAI,CAAC;;wCAEU,WAAW,CAAC,IAAI,CAAC;;;;;;;;wCAQjB,WAAW,CAAC,IAAI,CAAC;;;;;;;;;;CAUxD,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO;;;eAGM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;;;;;;CAMd,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO;;;eAGM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;;;;;;;;;;;;;;;;CAgBd,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO;;eAEM,WAAW,CAAC,IAAI,CAAC;WACrB,IAAI;;;;;;;;;;CAUd,CAAC;AACF,CAAC"}
@@ -8,6 +8,10 @@ export declare function readJson<T = unknown>(filePath: string): T;
8
8
  export declare function writeFile(filePath: string, content: string): void;
9
9
  /** Convert a string to kebab-case */
10
10
  export declare function toKebabCase(str: string): string;
11
+ /** Skill file basename for a capability (short name or canonical `domain.name`). */
12
+ export declare function capabilitySkillBasename(ref: {
13
+ name: string;
14
+ } | string): string;
11
15
  /** Convert a string to PascalCase */
12
16
  export declare function toPascalCase(str: string): string;
13
17
  /** Convert a string to camelCase */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"AAMA,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD;AAED,0CAA0C;AAC1C,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGzD;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMjE;AAED,qCAAqC;AACrC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAM/E;AAED,4BAA4B;AAC5B,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,4BAA4B;AAC5B,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,0BAA0B;AAC1B,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,yBAAyB;AACzB,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,MAAsB,GAAG,MAAM,GAAG,SAAS,CAuBvF;AAKD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,GAAE,MAAsB,GAAG,cAAc,CAqBxF;AAID,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CA6D7E;AA2BD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY3D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"AAMA,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzD;AAED,0CAA0C;AAC1C,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGzD;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMjE;AAED,qCAAqC;AACrC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,MAAM,CAO9E;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAM/E;AAED,4BAA4B;AAC5B,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,4BAA4B;AAC5B,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,0BAA0B;AAC1B,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,yBAAyB;AACzB,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,MAAsB,GAAG,MAAM,GAAG,SAAS,CAuBvF;AAKD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,GAAE,MAAsB,GAAG,cAAc,CAqBxF;AAID,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CA6D7E;AA2BD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY3D"}
package/dist/cli/utils.js CHANGED
@@ -30,6 +30,15 @@ export function toKebabCase(str) {
30
30
  .replace(/[\s_]+/g, '-')
31
31
  .toLowerCase();
32
32
  }
33
+ /** Skill file basename for a capability (short name or canonical `domain.name`). */
34
+ export function capabilitySkillBasename(ref) {
35
+ if (typeof ref === 'string') {
36
+ const dot = ref.indexOf('.');
37
+ const shortName = dot > 0 ? ref.slice(dot + 1) : ref;
38
+ return toKebabCase(shortName);
39
+ }
40
+ return toKebabCase(ref.name);
41
+ }
33
42
  /** Convert a string to PascalCase */
34
43
  export function toPascalCase(str) {
35
44
  return str