@plumbus/core 0.4.1 → 0.5.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.
- package/README.md +14 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/api/exposure.d.ts +4 -0
- package/dist/api/exposure.d.ts.map +1 -0
- package/dist/api/exposure.js +5 -0
- package/dist/api/exposure.js.map +1 -0
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/route-generator.d.ts.map +1 -1
- package/dist/api/route-generator.js +27 -14
- package/dist/api/route-generator.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +3 -1
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/api-manifest.d.ts +26 -0
- package/dist/cli/commands/api-manifest.d.ts.map +1 -0
- package/dist/cli/commands/api-manifest.js +54 -0
- package/dist/cli/commands/api-manifest.js.map +1 -0
- package/dist/cli/commands/api.d.ts +3 -0
- package/dist/cli/commands/api.d.ts.map +1 -0
- package/dist/cli/commands/api.js +179 -0
- package/dist/cli/commands/api.js.map +1 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +38 -149
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +92 -4
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/event.d.ts.map +1 -1
- package/dist/cli/commands/event.js +3 -0
- package/dist/cli/commands/event.js.map +1 -1
- package/dist/cli/commands/events-ops.d.ts +4 -0
- package/dist/cli/commands/events-ops.d.ts.map +1 -0
- package/dist/cli/commands/events-ops.js +203 -0
- package/dist/cli/commands/events-ops.js.map +1 -0
- package/dist/cli/commands/flow.d.ts.map +1 -1
- package/dist/cli/commands/flow.js +49 -1
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +4 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +94 -3
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +3 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +41 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +2 -0
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/start.d.ts +3 -6
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +71 -180
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/verify.d.ts +3 -1
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +25 -3
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/commands/worker.d.ts +19 -0
- package/dist/cli/commands/worker.d.ts.map +1 -0
- package/dist/cli/commands/worker.js +234 -0
- package/dist/cli/commands/worker.js.map +1 -0
- package/dist/cli/mcp-serve-context.d.ts +3 -0
- package/dist/cli/mcp-serve-context.d.ts.map +1 -1
- package/dist/cli/mcp-serve-context.js +16 -1
- package/dist/cli/mcp-serve-context.js.map +1 -1
- package/dist/cli/templates/resources.d.ts.map +1 -1
- package/dist/cli/templates/resources.js +13 -2
- package/dist/cli/templates/resources.js.map +1 -1
- package/dist/cli/utils.d.ts +4 -0
- package/dist/cli/utils.d.ts.map +1 -1
- package/dist/cli/utils.js +9 -0
- package/dist/cli/utils.js.map +1 -1
- package/dist/data/drift-inspector.d.ts +2 -2
- package/dist/data/drift-inspector.d.ts.map +1 -1
- package/dist/data/drift-inspector.js +2 -1
- package/dist/data/drift-inspector.js.map +1 -1
- package/dist/data/migration.d.ts.map +1 -1
- package/dist/data/migration.js +2 -0
- package/dist/data/migration.js.map +1 -1
- package/dist/define/defineCapability.d.ts +8 -2
- package/dist/define/defineCapability.d.ts.map +1 -1
- package/dist/define/defineCapability.js +104 -1
- package/dist/define/defineCapability.js.map +1 -1
- package/dist/errors/http.d.ts.map +1 -1
- package/dist/errors/http.js +1 -0
- package/dist/errors/http.js.map +1 -1
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +1 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/events/dispatcher.d.ts +4 -0
- package/dist/events/dispatcher.d.ts.map +1 -1
- package/dist/events/dispatcher.js +24 -1
- package/dist/events/dispatcher.js.map +1 -1
- package/dist/events/emitter.d.ts +2 -0
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +6 -3
- package/dist/events/emitter.js.map +1 -1
- package/dist/events/queue-adapter.d.ts +7 -0
- package/dist/events/queue-adapter.d.ts.map +1 -0
- package/dist/events/queue-adapter.js +4 -0
- package/dist/events/queue-adapter.js.map +1 -0
- package/dist/events/queue.d.ts +16 -13
- package/dist/events/queue.d.ts.map +1 -1
- package/dist/events/queue.js +79 -22
- package/dist/events/queue.js.map +1 -1
- package/dist/events/worker.d.ts +4 -0
- package/dist/events/worker.d.ts.map +1 -1
- package/dist/events/worker.js +47 -1
- package/dist/events/worker.js.map +1 -1
- package/dist/execution/canonical-name.d.ts +13 -0
- package/dist/execution/canonical-name.d.ts.map +1 -0
- package/dist/execution/canonical-name.js +17 -0
- package/dist/execution/canonical-name.js.map +1 -0
- package/dist/execution/capability-executor.d.ts +1 -1
- package/dist/execution/capability-executor.d.ts.map +1 -1
- package/dist/execution/capability-executor.js +52 -24
- package/dist/execution/capability-executor.js.map +1 -1
- package/dist/execution/capability-invocation.d.ts +34 -0
- package/dist/execution/capability-invocation.d.ts.map +1 -0
- package/dist/execution/capability-invocation.js +138 -0
- package/dist/execution/capability-invocation.js.map +1 -0
- package/dist/execution/capability-registry.d.ts +6 -4
- package/dist/execution/capability-registry.d.ts.map +1 -1
- package/dist/execution/capability-registry.js +13 -7
- package/dist/execution/capability-registry.js.map +1 -1
- package/dist/execution/context-factory.d.ts.map +1 -1
- package/dist/execution/context-factory.js +12 -1
- package/dist/execution/context-factory.js.map +1 -1
- package/dist/execution/index.d.ts +4 -0
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +2 -0
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/invocation-emit-scope.d.ts +11 -0
- package/dist/execution/invocation-emit-scope.d.ts.map +1 -0
- package/dist/execution/invocation-emit-scope.js +8 -0
- package/dist/execution/invocation-emit-scope.js.map +1 -0
- package/dist/flows/engine.d.ts +7 -1
- package/dist/flows/engine.d.ts.map +1 -1
- package/dist/flows/engine.js +73 -10
- package/dist/flows/engine.js.map +1 -1
- package/dist/flows/flow-delayed.d.ts +34 -0
- package/dist/flows/flow-delayed.d.ts.map +1 -0
- package/dist/flows/flow-delayed.js +60 -0
- package/dist/flows/flow-delayed.js.map +1 -0
- package/dist/flows/flow-queue.d.ts +10 -0
- package/dist/flows/flow-queue.d.ts.map +1 -0
- package/dist/flows/flow-queue.js +25 -0
- package/dist/flows/flow-queue.js.map +1 -0
- package/dist/flows/scheduler.d.ts +0 -12
- package/dist/flows/scheduler.d.ts.map +1 -1
- package/dist/flows/scheduler.js +15 -0
- package/dist/flows/scheduler.js.map +1 -1
- package/dist/flows/schema.d.ts +17 -0
- package/dist/flows/schema.d.ts.map +1 -1
- package/dist/flows/schema.js +2 -0
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/step-consumer.d.ts +24 -0
- package/dist/flows/step-consumer.d.ts.map +1 -0
- package/dist/flows/step-consumer.js +72 -0
- package/dist/flows/step-consumer.js.map +1 -0
- package/dist/flows/triggers.d.ts +1 -1
- package/dist/flows/triggers.d.ts.map +1 -1
- package/dist/flows/triggers.js +5 -7
- package/dist/flows/triggers.js.map +1 -1
- package/dist/governance/capability-source-scan.d.ts +7 -0
- package/dist/governance/capability-source-scan.d.ts.map +1 -0
- package/dist/governance/capability-source-scan.js +80 -0
- package/dist/governance/capability-source-scan.js.map +1 -0
- package/dist/governance/index.d.ts +1 -1
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +1 -1
- package/dist/governance/index.js.map +1 -1
- package/dist/governance/rules/api.d.ts +13 -0
- package/dist/governance/rules/api.d.ts.map +1 -0
- package/dist/governance/rules/api.js +124 -0
- package/dist/governance/rules/api.js.map +1 -0
- package/dist/governance/rules/architecture.d.ts.map +1 -1
- package/dist/governance/rules/architecture.js +2 -0
- package/dist/governance/rules/architecture.js.map +1 -1
- package/dist/governance/rules/capability-dependencies.d.ts +8 -0
- package/dist/governance/rules/capability-dependencies.d.ts.map +1 -0
- package/dist/governance/rules/capability-dependencies.js +195 -0
- package/dist/governance/rules/capability-dependencies.js.map +1 -0
- package/dist/governance/rules/index.d.ts +3 -0
- package/dist/governance/rules/index.d.ts.map +1 -1
- package/dist/governance/rules/index.js +3 -0
- package/dist/governance/rules/index.js.map +1 -1
- package/dist/governance/rules/worker.d.ts +9 -0
- package/dist/governance/rules/worker.d.ts.map +1 -0
- package/dist/governance/rules/worker.js +89 -0
- package/dist/governance/rules/worker.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/jobs/dispatch.d.ts +18 -0
- package/dist/jobs/dispatch.d.ts.map +1 -0
- package/dist/jobs/dispatch.js +50 -0
- package/dist/jobs/dispatch.js.map +1 -0
- package/dist/jobs/index.d.ts +9 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +8 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/routes.d.ts +10 -0
- package/dist/jobs/routes.d.ts.map +1 -0
- package/dist/jobs/routes.js +44 -0
- package/dist/jobs/routes.js.map +1 -0
- package/dist/jobs/schema.d.ts +264 -0
- package/dist/jobs/schema.d.ts.map +1 -0
- package/dist/jobs/schema.js +34 -0
- package/dist/jobs/schema.js.map +1 -0
- package/dist/jobs/service.d.ts +52 -0
- package/dist/jobs/service.d.ts.map +1 -0
- package/dist/jobs/service.js +168 -0
- package/dist/jobs/service.js.map +1 -0
- package/dist/jobs/types.d.ts +30 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +4 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/mcp/manifest-generator.d.ts.map +1 -1
- package/dist/mcp/manifest-generator.js +3 -2
- package/dist/mcp/manifest-generator.js.map +1 -1
- package/dist/observability/metrics.d.ts +9 -1
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +28 -1
- package/dist/observability/metrics.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +51 -0
- package/dist/runtime/bootstrap.d.ts.map +1 -0
- package/dist/runtime/bootstrap.js +140 -0
- package/dist/runtime/bootstrap.js.map +1 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/load-extensions.d.ts +4 -0
- package/dist/runtime/load-extensions.d.ts.map +1 -0
- package/dist/runtime/load-extensions.js +41 -0
- package/dist/runtime/load-extensions.js.map +1 -0
- package/dist/runtime/queue-factory.d.ts +44 -0
- package/dist/runtime/queue-factory.d.ts.map +1 -0
- package/dist/runtime/queue-factory.js +156 -0
- package/dist/runtime/queue-factory.js.map +1 -0
- package/dist/runtime/register-consumers.d.ts +29 -0
- package/dist/runtime/register-consumers.d.ts.map +1 -0
- package/dist/runtime/register-consumers.js +233 -0
- package/dist/runtime/register-consumers.js.map +1 -0
- package/dist/runtime/start-worker-pool.d.ts +32 -0
- package/dist/runtime/start-worker-pool.d.ts.map +1 -0
- package/dist/runtime/start-worker-pool.js +91 -0
- package/dist/runtime/start-worker-pool.js.map +1 -0
- package/dist/runtime/worker-health.d.ts +19 -0
- package/dist/runtime/worker-health.d.ts.map +1 -0
- package/dist/runtime/worker-health.js +41 -0
- package/dist/runtime/worker-health.js.map +1 -0
- package/dist/server/bootstrap.d.ts +6 -0
- package/dist/server/bootstrap.d.ts.map +1 -1
- package/dist/server/bootstrap.js +18 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/testing/context.d.ts +3 -0
- package/dist/testing/context.d.ts.map +1 -1
- package/dist/testing/context.js +10 -0
- package/dist/testing/context.js.map +1 -1
- package/dist/testing/simulate-flow.d.ts.map +1 -1
- package/dist/testing/simulate-flow.js +10 -0
- package/dist/testing/simulate-flow.js.map +1 -1
- package/dist/types/capability.d.ts +67 -1
- package/dist/types/capability.d.ts.map +1 -1
- package/dist/types/capability.js +15 -1
- package/dist/types/capability.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/context.d.ts +34 -1
- package/dist/types/context.d.ts.map +1 -1
- package/dist/types/enums.d.ts +1 -0
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +1 -0
- package/dist/types/enums.js.map +1 -1
- package/dist/types/errors.d.ts +1 -0
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/event.d.ts +10 -0
- package/dist/types/event.d.ts.map +1 -1
- package/dist/types/event.js +5 -1
- package/dist/types/event.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/worker/bootstrap.d.ts +32 -1
- package/dist/worker/bootstrap.d.ts.map +1 -1
- package/dist/worker/bootstrap.js +166 -2
- package/dist/worker/bootstrap.js.map +1 -1
- package/instructions/api.md +19 -0
- package/instructions/capabilities.md +36 -1
- package/instructions/deployment.md +96 -11
- package/instructions/events.md +11 -0
- package/instructions/flows.md +12 -4
- package/instructions/governance.md +6 -0
- package/instructions/mcp.md +1 -1
- package/instructions/patterns.md +1 -0
- package/instructions/security.md +9 -0
- package/instructions/testing.md +12 -1
- package/instructions/upgrading-0.5-capabilities.md +181 -0
- package/package.json +16 -3
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
import type { CapabilityContract } from '../../types/capability.js';
|
|
3
3
|
import type { EntityDefinition } from '../../types/entity.js';
|
|
4
|
+
import type { EventDefinition } from '../../types/event.js';
|
|
5
|
+
import type { FlowDefinition } from '../../types/flow.js';
|
|
4
6
|
import type { GovernanceSignal } from '../../types/governance.js';
|
|
5
7
|
export interface VerifyOptions {
|
|
6
8
|
json?: boolean;
|
|
@@ -16,6 +18,6 @@ export declare function ruleEncryptedSensitiveFields(entities: EntityDefinition[
|
|
|
16
18
|
/** Check entities have tenant isolation */
|
|
17
19
|
export declare function ruleEntityTenantIsolation(entities: EntityDefinition[]): GovernanceSignal[];
|
|
18
20
|
/** Run all governance rules against a system inventory */
|
|
19
|
-
export declare function runGovernanceRules(capabilities: CapabilityContract[], entities: EntityDefinition[]): GovernanceSignal[];
|
|
21
|
+
export declare function runGovernanceRules(capabilities: CapabilityContract[], entities: EntityDefinition[], events?: EventDefinition[], flows?: FlowDefinition[], appRoot?: string): GovernanceSignal[];
|
|
20
22
|
export declare function registerVerifyCommand(program: Command): void;
|
|
21
23
|
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AASlE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,uDAAuD;AACvD,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,EAAE,CAiBjG;AAED,oDAAoD;AACpD,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,EAAE,CAiB5F;AAED,wEAAwE;AACxE,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAmB9F;AAED,gDAAgD;AAChD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAyB7F;AAED,2CAA2C;AAC3C,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAc1F;AAmBD,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,kBAAkB,EAAE,EAClC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,MAAM,GAAE,eAAe,EAAO,EAC9B,KAAK,GAAE,cAAc,EAAO,EAC5B,OAAO,CAAC,EAAE,MAAM,GACf,gBAAgB,EAAE,CAUpB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD5D"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
// ── plumbus verify ──
|
|
2
2
|
// Run all governance checks and report results
|
|
3
3
|
import { FieldClassification, GovernanceSeverity } from '../../types/enums.js';
|
|
4
|
+
import { scanCapabilityDirectImports } from '../../governance/capability-source-scan.js';
|
|
5
|
+
import { architectureRules } from '../../governance/rules/architecture.js';
|
|
6
|
+
import { apiRules } from '../../governance/rules/api.js';
|
|
7
|
+
import { workerRules } from '../../governance/rules/worker.js';
|
|
8
|
+
import { createGovernanceRuleEngine } from '../../governance/rule-engine.js';
|
|
4
9
|
import { discoverResources } from '../discover.js';
|
|
5
10
|
import { info, error as logError, success, warn } from '../utils.js';
|
|
6
11
|
// ── Built-in Governance Rules ──
|
|
@@ -98,14 +103,27 @@ export function ruleEntityTenantIsolation(entities) {
|
|
|
98
103
|
}
|
|
99
104
|
return signals;
|
|
100
105
|
}
|
|
106
|
+
function runPackagedGovernanceRules(capabilities, entities, flows, events) {
|
|
107
|
+
const engine = createGovernanceRuleEngine();
|
|
108
|
+
engine.registerMany([...apiRules, ...workerRules, ...architectureRules]);
|
|
109
|
+
return engine.evaluate({
|
|
110
|
+
capabilities,
|
|
111
|
+
entities,
|
|
112
|
+
flows,
|
|
113
|
+
events,
|
|
114
|
+
prompts: [],
|
|
115
|
+
}).signals;
|
|
116
|
+
}
|
|
101
117
|
/** Run all governance rules against a system inventory */
|
|
102
|
-
export function runGovernanceRules(capabilities, entities) {
|
|
118
|
+
export function runGovernanceRules(capabilities, entities, events = [], flows = [], appRoot) {
|
|
103
119
|
return [
|
|
104
120
|
...ruleCapabilityAccessPolicy(capabilities),
|
|
105
121
|
...ruleCapabilityEffects(capabilities),
|
|
106
122
|
...ruleEntityFieldClassification(entities),
|
|
107
123
|
...ruleEncryptedSensitiveFields(entities),
|
|
108
124
|
...ruleEntityTenantIsolation(entities),
|
|
125
|
+
...runPackagedGovernanceRules(capabilities, entities, flows, events),
|
|
126
|
+
...scanCapabilityDirectImports(appRoot),
|
|
109
127
|
];
|
|
110
128
|
}
|
|
111
129
|
export function registerVerifyCommand(program) {
|
|
@@ -117,16 +135,20 @@ export function registerVerifyCommand(program) {
|
|
|
117
135
|
info('Running governance verification...');
|
|
118
136
|
let capabilities = [];
|
|
119
137
|
let entities = [];
|
|
138
|
+
let events = [];
|
|
139
|
+
let flows = [];
|
|
120
140
|
try {
|
|
121
141
|
const resources = await discoverResources();
|
|
122
142
|
capabilities = resources.capabilities;
|
|
123
143
|
entities = resources.entities;
|
|
124
|
-
|
|
144
|
+
events = resources.events;
|
|
145
|
+
flows = resources.flows;
|
|
146
|
+
info(`Discovered ${capabilities.length} capability(ies), ${entities.length} entity(ies), ${events.length} event(s)`);
|
|
125
147
|
}
|
|
126
148
|
catch {
|
|
127
149
|
warn('Could not auto-discover resources (app/ directory may not exist)');
|
|
128
150
|
}
|
|
129
|
-
const signals = runGovernanceRules(capabilities, entities);
|
|
151
|
+
const signals = runGovernanceRules(capabilities, entities, events, flows, process.cwd());
|
|
130
152
|
if (opts.json) {
|
|
131
153
|
console.log(JSON.stringify({ signals, highCount: 0, warningCount: 0, infoCount: 0 }, null, 2));
|
|
132
154
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,+CAA+C;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
|
|
3
|
+
import { type DatabaseConnection } from '../../data/connection.js';
|
|
4
|
+
export interface WorkerStartOptions {
|
|
5
|
+
healthPort?: string;
|
|
6
|
+
host?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Start a worker-only process (no HTTP API).
|
|
10
|
+
* Used with PLUMBUS_RUNTIME_ROLE=worker or `plumbus worker`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function startWorkerProcess(options: WorkerStartOptions & {
|
|
13
|
+
db?: PostgresJsDatabase;
|
|
14
|
+
connection?: DatabaseConnection;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
shutdown: () => Promise<void>;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function registerWorkerCommand(program: Command): void;
|
|
19
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -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;
|
|
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;AAUzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD,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,CA8GrE"}
|
|
@@ -11,10 +11,13 @@ import { EntityRegistry } from '../data/registry.js';
|
|
|
11
11
|
import { createEventEmitter } from '../events/emitter.js';
|
|
12
12
|
import { EventRegistry } from '../events/registry.js';
|
|
13
13
|
import { CapabilityRegistry } from '../execution/capability-registry.js';
|
|
14
|
+
import { buildCapabilityRuntimeDeps } from '../execution/capability-invocation.js';
|
|
15
|
+
import { createInvocationEmitScope, resolveInvocationCausationId, } from '../execution/invocation-emit-scope.js';
|
|
14
16
|
import { createFlowEngine } from '../flows/engine.js';
|
|
15
17
|
import { createFlowService } from '../flows/flow-service.js';
|
|
16
18
|
import { FlowRegistry } from '../flows/registry.js';
|
|
17
19
|
import { createTranslationService, TranslationRegistry } from '../translations/index.js';
|
|
20
|
+
import { resolveRuntimeQueues } from '../runtime/queue-factory.js';
|
|
18
21
|
import { warn } from './utils.js';
|
|
19
22
|
import { discoverResources } from './discover.js';
|
|
20
23
|
async function resolveMcpServeAuthAdapter(config) {
|
|
@@ -45,6 +48,7 @@ export async function buildMcpServeContext() {
|
|
|
45
48
|
flows.registerAll(resources.flows);
|
|
46
49
|
const dbConnection = await resolveDatabaseConnection(config.database, {});
|
|
47
50
|
const db = dbConnection.db;
|
|
51
|
+
const queues = await resolveRuntimeQueues(config);
|
|
48
52
|
const logger = {
|
|
49
53
|
info: (msg) => console.log(msg),
|
|
50
54
|
warn: (msg) => console.warn(msg),
|
|
@@ -92,7 +96,14 @@ export async function buildMcpServeContext() {
|
|
|
92
96
|
audit,
|
|
93
97
|
bypassTenantScope: options?.bypassTenantScope,
|
|
94
98
|
});
|
|
95
|
-
const
|
|
99
|
+
const invocationEmitScope = createInvocationEmitScope();
|
|
100
|
+
const eventService = createEventEmitter({
|
|
101
|
+
db,
|
|
102
|
+
auth,
|
|
103
|
+
registry: events,
|
|
104
|
+
audit,
|
|
105
|
+
getCausationId: () => resolveInvocationCausationId(invocationEmitScope),
|
|
106
|
+
});
|
|
96
107
|
return {
|
|
97
108
|
auth,
|
|
98
109
|
data,
|
|
@@ -103,6 +114,8 @@ export async function buildMcpServeContext() {
|
|
|
103
114
|
logger,
|
|
104
115
|
config: config,
|
|
105
116
|
translations: createTranslationService(translationRegistry, defaultLocale),
|
|
117
|
+
invocationEmitScope,
|
|
118
|
+
...buildCapabilityRuntimeDeps(capabilities),
|
|
106
119
|
};
|
|
107
120
|
},
|
|
108
121
|
};
|
|
@@ -111,6 +124,8 @@ export async function buildMcpServeContext() {
|
|
|
111
124
|
db,
|
|
112
125
|
capabilities,
|
|
113
126
|
routeConfig,
|
|
127
|
+
...(queues.isDurable ? { jobQueue: queues.jobs } : {}),
|
|
128
|
+
closeQueues: () => queues.close(),
|
|
114
129
|
closeDb: async () => {
|
|
115
130
|
await closeDatabaseConnection(dbConnection);
|
|
116
131
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-serve-context.js","sourceRoot":"","sources":["../../src/cli/mcp-serve-context.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,yFAAyF;AAGzF,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAKzF,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
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,
|
|
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"}
|
|
@@ -17,6 +17,12 @@ export const ${toCamelCase(name)} = defineCapability({
|
|
|
17
17
|
// exposeAs: ["mcp"],
|
|
18
18
|
// mcp: { description: "Agent-facing description of ${name}" },
|
|
19
19
|
|
|
20
|
+
// Uncomment to expose this capability on the partner HTTP API.
|
|
21
|
+
// Requires \`pnpm add @plumbus/api\` and \`registerApiRoutes()\` in app bootstrap.
|
|
22
|
+
// See node_modules/@plumbus/core/instructions/api.md
|
|
23
|
+
// exposeAs: ["api"],
|
|
24
|
+
// api: { path: "/v1/${domain}/${name}", method: "GET" },
|
|
25
|
+
|
|
20
26
|
input: z.object({
|
|
21
27
|
// TODO: define input schema
|
|
22
28
|
}),
|
|
@@ -40,7 +46,12 @@ export const ${toCamelCase(name)} = defineCapability({
|
|
|
40
46
|
handler: async (ctx, input) => {
|
|
41
47
|
// TODO: implement ${pascal}
|
|
42
48
|
return {};
|
|
43
|
-
}
|
|
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
|
+
: ''}
|
|
44
55
|
});
|
|
45
56
|
`;
|
|
46
57
|
}
|
|
@@ -91,7 +102,7 @@ export const ${toCamelCase(name)}Flow = defineFlow({
|
|
|
91
102
|
{
|
|
92
103
|
name: "step1",
|
|
93
104
|
type: "capability",
|
|
94
|
-
capability: "
|
|
105
|
+
capability: "${domain}.stepName",
|
|
95
106
|
},
|
|
96
107
|
],
|
|
97
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;;;;;;;;;;;;;;;;;;;;;;;
|
|
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"}
|
package/dist/cli/utils.d.ts
CHANGED
|
@@ -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 */
|
package/dist/cli/utils.d.ts.map
CHANGED
|
@@ -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
|