@codemation/core 0.13.2 → 0.15.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 (212) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/dist/{CostCatalogContract-Dxq1BTyi.d.cts → CostCatalogContract-Dwo-ZamG.d.cts} +2 -2
  3. package/dist/EngineRuntimeRegistration.types-BiNasx3G.d.cts +54 -0
  4. package/dist/EngineRuntimeRegistration.types-Dq4ucrdo.d.ts +21 -0
  5. package/dist/{InMemoryRunDataFactory-Csy2evr_.d.cts → InMemoryRunDataFactory-D2U9azmZ.d.cts} +4 -20
  6. package/dist/{InMemoryRunEventBusRegistry-Sa86VxuV.cjs → InMemoryRunEventBusRegistry-DO0WM9Lw.cjs} +1 -1
  7. package/dist/{InMemoryRunEventBusRegistry-Sa86VxuV.cjs.map → InMemoryRunEventBusRegistry-DO0WM9Lw.cjs.map} +1 -1
  8. package/dist/{InMemoryRunEventBusRegistry-Bwunvt1T.js → InMemoryRunEventBusRegistry-Layt2xgm.js} +1 -1
  9. package/dist/{InMemoryRunEventBusRegistry-Bwunvt1T.js.map → InMemoryRunEventBusRegistry-Layt2xgm.js.map} +1 -1
  10. package/dist/{ItemsInputNormalizer-Bi8m-Ijs.d.cts → ItemsInputNormalizer-A5txcOWX.d.cts} +3 -98
  11. package/dist/{ItemsInputNormalizer-BbQTSEkZ.cjs → ItemsInputNormalizer-C1fv3sMW.cjs} +2 -2
  12. package/dist/ItemsInputNormalizer-C1fv3sMW.cjs.map +1 -0
  13. package/dist/{ItemsInputNormalizer-BYljnXU0.d.ts → ItemsInputNormalizer-D2vrMrX1.d.ts} +2 -62
  14. package/dist/{ItemsInputNormalizer-CSZGMgl3.js → ItemsInputNormalizer-fUYo4GLV.js} +2 -2
  15. package/dist/ItemsInputNormalizer-fUYo4GLV.js.map +1 -0
  16. package/dist/{RunIntentService-BitgkKaT.d.cts → RunIntentService-DKxuHTUz.d.cts} +2 -15
  17. package/dist/{RunIntentService-DYpqfu6D.d.ts → RunIntentService-DrpKli2k.d.ts} +2 -22
  18. package/dist/{agentMcpTypes-DGIwk6Ue.d.cts → agentMcpTypes-BHX4RQCC.d.cts} +25 -518
  19. package/dist/bootstrap/index.cjs +9 -5
  20. package/dist/bootstrap/index.d.cts +32 -106
  21. package/dist/bootstrap/index.d.ts +18 -17
  22. package/dist/bootstrap/index.js +6 -5
  23. package/dist/{bootstrap-DIv-vloi.cjs → bootstrap-CTB53rEF.cjs} +9 -60
  24. package/dist/bootstrap-CTB53rEF.cjs.map +1 -0
  25. package/dist/{bootstrap-Bkd-Nfbn.js → bootstrap-DmqKheCI.js} +6 -57
  26. package/dist/bootstrap-DmqKheCI.js.map +1 -0
  27. package/dist/browser.cjs +12 -11
  28. package/dist/browser.d.cts +4 -4
  29. package/dist/browser.d.ts +3 -3
  30. package/dist/browser.js +3 -2
  31. package/dist/contracts-7L1wJHdk.cjs +569 -0
  32. package/dist/contracts-7L1wJHdk.cjs.map +1 -0
  33. package/dist/contracts-CjJ5CZ7N.js +447 -0
  34. package/dist/contracts-CjJ5CZ7N.js.map +1 -0
  35. package/dist/contracts.cjs +9 -2
  36. package/dist/contracts.d.cts +5 -5
  37. package/dist/contracts.d.ts +2 -2
  38. package/dist/contracts.js +3 -2
  39. package/dist/{executionPersistenceContracts-CN9d7AnL.d.cts → deploymentManifestTypes-B8CDmZZK.d.cts} +65 -81
  40. package/dist/di-C6Ubf9o5.cjs +179 -0
  41. package/dist/di-C6Ubf9o5.cjs.map +1 -0
  42. package/dist/di-Cjiil7U-.js +114 -0
  43. package/dist/di-Cjiil7U-.js.map +1 -0
  44. package/dist/{index-rllWL4r-.d.ts → index-CRv3_pY3.d.ts} +112 -808
  45. package/dist/{index-BSQ2LoIh.d.ts → index-mnLS0iQl.d.ts} +39 -372
  46. package/dist/index.cjs +53 -111
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.d.cts +50 -438
  49. package/dist/index.d.ts +5 -5
  50. package/dist/index.js +28 -94
  51. package/dist/index.js.map +1 -1
  52. package/dist/{params-DRUr0F5v.d.cts → params-CrK4iuG1.d.cts} +3 -13
  53. package/dist/{runtime-CWPdvJpC.js → runtime-CBFDpmiz.js} +112 -648
  54. package/dist/runtime-CBFDpmiz.js.map +1 -0
  55. package/dist/{runtime-_VdHwGkJ.cjs → runtime-Due-FOZ2.cjs} +137 -717
  56. package/dist/runtime-Due-FOZ2.cjs.map +1 -0
  57. package/dist/testing.cjs +8 -40
  58. package/dist/testing.cjs.map +1 -1
  59. package/dist/testing.d.cts +3 -32
  60. package/dist/testing.d.ts +3 -32
  61. package/dist/testing.js +6 -38
  62. package/dist/testing.js.map +1 -1
  63. package/dist/{di-LP2qSHkY.cjs → workflowTypes-BW6Hhee7.cjs} +4 -230
  64. package/dist/workflowTypes-BW6Hhee7.cjs.map +1 -0
  65. package/dist/{di-tom0pM2h.js → workflowTypes-DZtBTmKf.js} +3 -163
  66. package/dist/workflowTypes-DZtBTmKf.js.map +1 -0
  67. package/package.json +1 -1
  68. package/src/ai/AgentConnectionNodeCollector.ts +0 -4
  69. package/src/ai/AgentMessageConfigNormalizerFactory.ts +0 -4
  70. package/src/ai/AiHost.ts +0 -38
  71. package/src/ai/CallableToolConfig.ts +0 -9
  72. package/src/ai/CallableToolKindToken.ts +0 -4
  73. package/src/authoring/callableTool.types.ts +0 -3
  74. package/src/authoring/defineCollection.types.ts +0 -11
  75. package/src/authoring/defineHumanApprovalNode.types.ts +0 -116
  76. package/src/authoring/defineNode.types.ts +18 -32
  77. package/src/authoring/definePollingTrigger.types.ts +36 -155
  78. package/src/authoring/definePollingTriggerInternals.ts +0 -4
  79. package/src/authoring/index.ts +1 -0
  80. package/src/authoring/nodeBaseOptions.types.ts +4 -0
  81. package/src/binaries/boundedReadBinary.types.ts +0 -16
  82. package/src/bootstrap/index.ts +8 -2
  83. package/src/bootstrap/runtime/EngineRuntimeRegistrar.ts +0 -5
  84. package/src/bootstrap/runtime/EngineRuntimeRegistration.types.ts +0 -23
  85. package/src/browser.ts +0 -3
  86. package/src/contracts/AgentBindError.ts +0 -5
  87. package/src/contracts/Clock.ts +0 -1
  88. package/src/contracts/CodemationTelemetryAttributeNames.ts +0 -10
  89. package/src/contracts/NoOpAgentMcpIntegration.ts +0 -6
  90. package/src/contracts/NoOpTelemetrySpanScope.ts +0 -7
  91. package/src/contracts/RetryPolicy.ts +0 -2
  92. package/src/contracts/agentMcpTypes.ts +0 -34
  93. package/src/contracts/assertionTypes.ts +0 -33
  94. package/src/contracts/baseTypes.ts +0 -6
  95. package/src/contracts/collectionTypes.ts +0 -25
  96. package/src/contracts/credentialTypes.ts +13 -60
  97. package/src/contracts/deploymentManifestTypes.ts +158 -0
  98. package/src/contracts/dispatchTypes.ts +29 -0
  99. package/src/contracts/executionPersistenceContracts.ts +0 -33
  100. package/src/contracts/hitlSeamTypes.ts +0 -14
  101. package/src/contracts/humanTaskStoreTypes.ts +0 -2
  102. package/src/contracts/inboxChannelTypes.ts +0 -9
  103. package/src/contracts/index.ts +3 -0
  104. package/src/contracts/itemExpr.ts +7 -21
  105. package/src/contracts/itemMeta.ts +0 -3
  106. package/src/contracts/mcpTypes.ts +0 -16
  107. package/src/contracts/retryPolicySpec.types.ts +0 -10
  108. package/src/contracts/runFinishedAtFactory.ts +0 -1
  109. package/src/contracts/runTypes.ts +0 -74
  110. package/src/contracts/runtimeTypes.ts +4 -131
  111. package/src/contracts/telemetryTypes.ts +0 -7
  112. package/src/contracts/testTriggerTypes.ts +0 -43
  113. package/src/contracts/triggerInvokerTypes.ts +6 -0
  114. package/src/contracts/webhookTypes.ts +0 -8
  115. package/src/contracts/workflowActivationPolicy.ts +0 -5
  116. package/src/contracts/workflowTypes.ts +5 -80
  117. package/src/contracts/workspaceFileTypes.ts +10 -42
  118. package/src/contracts.ts +18 -10
  119. package/src/credentials/CredentialMaterialProvider.types.ts +0 -28
  120. package/src/credentials/ManagedCredentialMaterialWriteError.ts +0 -6
  121. package/src/credentials/ManagedMaterialFetchError.ts +0 -6
  122. package/src/credentials/OAuthFlowExecutor.types.ts +0 -15
  123. package/src/di/CoreTokens.ts +2 -6
  124. package/src/events/ConnectionInvocationEventPublisher.ts +0 -7
  125. package/src/events/NodeEventPublisher.ts +0 -1
  126. package/src/events/runEvents.ts +0 -8
  127. package/src/execution/ActivationEnqueueService.ts +0 -10
  128. package/src/execution/ChildExecutionScopeFactory.ts +0 -13
  129. package/src/execution/FanInMergeByOriginMerger.ts +0 -11
  130. package/src/execution/InProcessRetryRunner.ts +0 -1
  131. package/src/execution/ItemExprResolver.ts +0 -3
  132. package/src/execution/NodeActivationRequestComposer.ts +0 -3
  133. package/src/execution/NodeActivationRequestInputPreparer.ts +0 -5
  134. package/src/execution/NodeExecutionSnapshotFactory.ts +0 -1
  135. package/src/execution/NodeExecutor.ts +1 -17
  136. package/src/execution/NodeOutputNormalizer.ts +8 -1
  137. package/src/execution/NodeSuspensionHandler.ts +1 -39
  138. package/src/execution/PersistedRunStateTerminalBuilder.ts +0 -5
  139. package/src/execution/RunSuspendedError.ts +0 -10
  140. package/src/execution/RunnableOutputBehaviorResolver.ts +12 -0
  141. package/src/execution/WorkflowRunExecutionContextFactory.ts +0 -3
  142. package/src/index.ts +10 -2
  143. package/src/orchestration/AbortControllerFactory.ts +0 -4
  144. package/src/orchestration/Engine.ts +0 -9
  145. package/src/orchestration/NodeExecutionRequestHandlerService.ts +3 -4
  146. package/src/orchestration/RunContinuationService.ts +7 -39
  147. package/src/orchestration/RunStartService.ts +0 -7
  148. package/src/orchestration/TestSuiteOrchestrator.ts +0 -18
  149. package/src/orchestration/TestSuiteRunIdFactory.ts +0 -4
  150. package/src/orchestration/TriggerRuntimeService.ts +3 -2
  151. package/src/planning/CurrentStateFrontierPlanner.ts +0 -1
  152. package/src/planning/RunQueuePlanner.ts +0 -6
  153. package/src/policies/executionLimits/EngineExecutionLimitsPolicy.ts +0 -8
  154. package/src/policies/executionLimits/EngineExecutionLimitsPolicyFactory.ts +0 -3
  155. package/src/runStorage/RunSummaryMapper.ts +0 -1
  156. package/src/runtime/EngineFactory.ts +6 -11
  157. package/src/runtime/RunIntentService.ts +0 -4
  158. package/src/runtime/WorkflowRepositoryWebhookTriggerMatcher.ts +0 -4
  159. package/src/runtime-types/InjectableRuntimeDecoratorComposerRegistry.ts +0 -4
  160. package/src/runtime-types/PersistedRuntimeTypeMetadataStoreRegistry.ts +0 -4
  161. package/src/runtime-types/PersistedRuntimeTypeNameResolver.ts +0 -1
  162. package/src/runtime-types/persistedRuntimeTypeModelRegistry.ts +0 -4
  163. package/src/runtime-types/runtimeTypeDecorators.types.ts +0 -12
  164. package/src/scheduler/ConfigDrivenOffloadPolicy.ts +0 -1
  165. package/src/scheduler/DefaultDrivingScheduler.ts +0 -6
  166. package/src/scheduler/InlineDrivingScheduler.ts +0 -13
  167. package/src/serialization/ItemsInputNormalizer.ts +0 -5
  168. package/src/testing/CapturingScheduler.ts +0 -3
  169. package/src/testing/EngineTestKitRunIdFactory.ts +0 -3
  170. package/src/testing/ItemHarnessNode.ts +0 -3
  171. package/src/testing/ItemHarnessNodeConfig.ts +0 -4
  172. package/src/testing/PrefixedSequentialIdGenerator.ts +0 -3
  173. package/src/testing/RegistrarEngineTestKit.types.ts +0 -2
  174. package/src/testing/RejectingCredentialSessionService.ts +0 -4
  175. package/src/testing/SubWorkflowRunnerTestNode.ts +0 -3
  176. package/src/testing/WorkflowTestHarnessManualTrigger.ts +0 -3
  177. package/src/testing/WorkflowTestKitBuilder.ts +0 -4
  178. package/src/testing/WorkflowTestKitRunNodeWorkflowFactory.ts +0 -3
  179. package/src/testing.ts +0 -3
  180. package/src/triggers/polling/PollingTriggerDedupWindow.ts +0 -4
  181. package/src/triggers/polling/PollingTriggerLogger.ts +0 -5
  182. package/src/triggers/polling/PollingTriggerRuntime.ts +0 -5
  183. package/src/types/index.ts +0 -6
  184. package/src/validation/WorkflowEdgePortValidator.ts +0 -5
  185. package/src/workflow/definition/ConnectionInvocationIdFactory.ts +0 -7
  186. package/src/workflow/definition/ConnectionNodeIdFactory.ts +0 -6
  187. package/src/workflow/definition/NodeIterationIdFactory.ts +0 -13
  188. package/src/workflow/definition/WorkflowExecutableNodeClassifier.ts +0 -6
  189. package/src/workflow/dsl/ChainCursorResolver.ts +8 -15
  190. package/src/workflow/dsl/NodeIdSlugifier.ts +0 -9
  191. package/src/workflow/dsl/WhenBuilder.ts +49 -2
  192. package/src/workflow/dsl/WorkflowDefinitionError.ts +0 -9
  193. package/src/workflow/dsl/workflowBuilderTypes.ts +5 -0
  194. package/src/workflowSnapshots/MissingRuntimeParityGuard.ts +24 -0
  195. package/src/workflowSnapshots/PersistedWorkflowTokenRegistry.ts +0 -6
  196. package/src/workflowSnapshots/WorkflowParityMismatchError.ts +18 -0
  197. package/src/workflowSnapshots/WorkflowSnapshotCodec.ts +1 -5
  198. package/src/workflowSnapshots/index.ts +3 -0
  199. package/dist/EngineRuntimeRegistration.types-CqcTWexS.d.cts +0 -81
  200. package/dist/EngineRuntimeRegistration.types-Cr75cSfL.d.ts +0 -44
  201. package/dist/ItemsInputNormalizer-BbQTSEkZ.cjs.map +0 -1
  202. package/dist/ItemsInputNormalizer-CSZGMgl3.js.map +0 -1
  203. package/dist/bootstrap-Bkd-Nfbn.js.map +0 -1
  204. package/dist/bootstrap-DIv-vloi.cjs.map +0 -1
  205. package/dist/contracts-CK0x6w_G.cjs +0 -74
  206. package/dist/contracts-CK0x6w_G.cjs.map +0 -1
  207. package/dist/contracts-DXdfTdpW.js +0 -50
  208. package/dist/contracts-DXdfTdpW.js.map +0 -1
  209. package/dist/di-LP2qSHkY.cjs.map +0 -1
  210. package/dist/di-tom0pM2h.js.map +0 -1
  211. package/dist/runtime-CWPdvJpC.js.map +0 -1
  212. package/dist/runtime-_VdHwGkJ.cjs.map +0 -1
@@ -0,0 +1,569 @@
1
+ const require_di = require('./di-C6Ubf9o5.cjs');
2
+ let node_crypto = require("node:crypto");
3
+ node_crypto = require_di.__toESM(node_crypto);
4
+ let tsyringe = require("tsyringe");
5
+ tsyringe = require_di.__toESM(tsyringe);
6
+
7
+ //#region src/contracts/dispatchTypes.ts
8
+ function serializeDispatch(dispatch) {
9
+ return JSON.stringify(dispatch);
10
+ }
11
+ function deserializeDispatch(raw) {
12
+ return JSON.parse(raw);
13
+ }
14
+
15
+ //#endregion
16
+ //#region src/contracts/AgentBindError.ts
17
+ var AgentBindError = class extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = "AgentBindError";
21
+ }
22
+ };
23
+
24
+ //#endregion
25
+ //#region src/contracts/NoOpAgentMcpIntegration.ts
26
+ var NoOpAgentMcpIntegration = class {
27
+ async prepareMcpTools() {
28
+ return /* @__PURE__ */ new Map();
29
+ }
30
+ };
31
+
32
+ //#endregion
33
+ //#region src/contracts/assertionTypes.ts
34
+ const DEFAULT_ASSERTION_PASS_THRESHOLD = .5;
35
+ function deriveAssertionPassed(result) {
36
+ if (result.errored === true) return false;
37
+ const threshold = result.passThreshold ?? DEFAULT_ASSERTION_PASS_THRESHOLD;
38
+ return result.score >= threshold;
39
+ }
40
+
41
+ //#endregion
42
+ //#region src/runtime-types/persistedRuntimeTypeModelRegistry.ts
43
+ const persistedRuntimeTypeMetadataKey = Symbol.for("codemation.core.persistedRuntimeTypeMetadata");
44
+ var PersistedRuntimeTypeDecoratorDefaults = class {
45
+ static appPackageName = "app";
46
+ static apply(options) {
47
+ return {
48
+ ...options,
49
+ packageName: options.packageName ?? this.appPackageName
50
+ };
51
+ }
52
+ };
53
+
54
+ //#endregion
55
+ //#region src/runtime-types/PersistedRuntimeTypeNameResolver.ts
56
+ var PersistedRuntimeTypeNameResolver = class {
57
+ static resolve(target, override) {
58
+ const resolved = override ?? target.name;
59
+ if (!resolved) throw new Error("Persisted runtime token metadata requires a named class or an explicit decorator name override.");
60
+ return resolved;
61
+ }
62
+ };
63
+
64
+ //#endregion
65
+ //#region src/runtime-types/StackTraceCallSitePathResolver.ts
66
+ var StackTraceCallSitePathResolver = class {
67
+ static resolve(decoratorFileUrl) {
68
+ const stack = (/* @__PURE__ */ new Error()).stack ?? "";
69
+ for (const line of stack.split("\n")) {
70
+ const candidate = this.extractPath(line.trim());
71
+ if (!candidate) continue;
72
+ if (candidate === decoratorFileUrl || candidate.includes("runtimeTypeDecorators")) continue;
73
+ return candidate;
74
+ }
75
+ }
76
+ static extractPath(line) {
77
+ const fileUrlMatch = line.match(/file:\/\/[^\s)]+/);
78
+ if (fileUrlMatch) return fileUrlMatch[0];
79
+ const parenMatch = line.match(/\((\/[^)]+)\)/);
80
+ if (parenMatch) return parenMatch[1];
81
+ return line.match(/at (\/[^\s]+)/)?.[1];
82
+ }
83
+ };
84
+
85
+ //#endregion
86
+ //#region src/runtime-types/PersistedRuntimeTypeMetadataStoreRegistry.ts
87
+ var PersistedRuntimeTypeMetadataStore = class {
88
+ static define(target, kind, options, decoratorFileUrl) {
89
+ const normalizedOptions = PersistedRuntimeTypeDecoratorDefaults.apply(options);
90
+ const metadata = {
91
+ persistedName: PersistedRuntimeTypeNameResolver.resolve(target, normalizedOptions.name),
92
+ kind,
93
+ packageName: normalizedOptions.packageName ?? PersistedRuntimeTypeDecoratorDefaults.appPackageName,
94
+ sourceHint: normalizedOptions.moduleUrl ?? StackTraceCallSitePathResolver.resolve(decoratorFileUrl)
95
+ };
96
+ Object.defineProperty(target, persistedRuntimeTypeMetadataKey, {
97
+ configurable: false,
98
+ enumerable: false,
99
+ writable: false,
100
+ value: metadata
101
+ });
102
+ }
103
+ static get(target) {
104
+ if (!target || typeof target !== "function" && typeof target !== "object") return;
105
+ return target[persistedRuntimeTypeMetadataKey];
106
+ }
107
+ };
108
+
109
+ //#endregion
110
+ //#region src/runtime-types/InjectableRuntimeDecoratorComposerRegistry.ts
111
+ var InjectableRuntimeDecoratorComposer = class {
112
+ static compose(kind, options, decoratorFileUrl) {
113
+ return (target) => {
114
+ (0, tsyringe.injectable)()(target);
115
+ PersistedRuntimeTypeMetadataStore.define(target, kind, options, decoratorFileUrl);
116
+ };
117
+ }
118
+ };
119
+
120
+ //#endregion
121
+ //#region src/runtime-types/runtimeTypeDecorators.types.ts
122
+ function getPersistedRuntimeTypeMetadata(target) {
123
+ return PersistedRuntimeTypeMetadataStore.get(target);
124
+ }
125
+ function node(options = {}) {
126
+ return InjectableRuntimeDecoratorComposer.compose("node", options, require("url").pathToFileURL(__filename).href);
127
+ }
128
+ function tool(options = {}) {
129
+ return InjectableRuntimeDecoratorComposer.compose("tool", options, require("url").pathToFileURL(__filename).href);
130
+ }
131
+ function chatModel(options = {}) {
132
+ return InjectableRuntimeDecoratorComposer.compose("chatModel", options, require("url").pathToFileURL(__filename).href);
133
+ }
134
+
135
+ //#endregion
136
+ //#region src/workflowSnapshots/PersistedRuntimeTypeIdFactory.ts
137
+ var PersistedRuntimeTypeIdFactory = class {
138
+ static fromMetadata(args) {
139
+ const metadata = getPersistedRuntimeTypeMetadata(args.type);
140
+ if (!metadata) return;
141
+ const packageName = metadata.packageName;
142
+ if (!packageName) return;
143
+ return `${packageName}::${metadata.persistedName}`;
144
+ }
145
+ };
146
+
147
+ //#endregion
148
+ //#region src/workflowSnapshots/PersistedWorkflowTokenRegistry.ts
149
+ var PersistedWorkflowTokenRegistry = class {
150
+ tokensById = /* @__PURE__ */ new Map();
151
+ tokenIdsByToken = /* @__PURE__ */ new Map();
152
+ register(type, packageId, persistedNameOverride) {
153
+ const tokenId = `${packageId}::${persistedNameOverride ?? this.displayNameForTypeToken(type)}`;
154
+ this.tokensById.set(tokenId, type);
155
+ this.tokenIdsByToken.set(type, tokenId);
156
+ return tokenId;
157
+ }
158
+ registerFromWorkflows(workflows) {
159
+ for (const workflow of workflows) for (const node$1 of workflow.nodes) {
160
+ this.registerDecoratedType(node$1.type);
161
+ this.registerDecoratedType(node$1.config.type);
162
+ this.registerNestedTypes(node$1.config);
163
+ }
164
+ }
165
+ registerDecoratedType(type) {
166
+ if (this.tokenIdsByToken.has(type)) return;
167
+ const tokenId = PersistedRuntimeTypeIdFactory.fromMetadata({ type });
168
+ if (!tokenId) return;
169
+ this.tokensById.set(tokenId, type);
170
+ this.tokenIdsByToken.set(type, tokenId);
171
+ }
172
+ registerNestedTypes(value) {
173
+ if (Array.isArray(value)) {
174
+ for (const entry of value) this.registerNestedTypes(entry);
175
+ return;
176
+ }
177
+ if (!value || typeof value !== "object") return;
178
+ const record = value;
179
+ const type = this.asTypeToken(record.type);
180
+ if (type) this.registerDecoratedType(type);
181
+ for (const v of Object.values(record)) this.registerNestedTypes(v);
182
+ }
183
+ displayNameForTypeToken(token) {
184
+ if (typeof token === "function" && token.name) return token.name;
185
+ if (typeof token === "string") return token;
186
+ return "";
187
+ }
188
+ asTypeToken(value) {
189
+ if (typeof value === "function" || typeof value === "string" || typeof value === "symbol") return value;
190
+ }
191
+ getTokenId(token) {
192
+ const existing = this.tokenIdsByToken.get(token);
193
+ if (existing) return existing;
194
+ const tokenId = PersistedRuntimeTypeIdFactory.fromMetadata({ type: token });
195
+ if (!tokenId) return;
196
+ this.tokensById.set(tokenId, token);
197
+ this.tokenIdsByToken.set(token, tokenId);
198
+ return tokenId;
199
+ }
200
+ resolve(tokenId) {
201
+ return this.tokensById.get(tokenId);
202
+ }
203
+ };
204
+
205
+ //#endregion
206
+ //#region src/workflowSnapshots/WorkflowSnapshotCodec.ts
207
+ var WorkflowSnapshotCodec = class {
208
+ constructor(tokenRegistry) {
209
+ this.tokenRegistry = tokenRegistry;
210
+ }
211
+ create(workflow) {
212
+ return {
213
+ id: workflow.id,
214
+ name: workflow.name,
215
+ workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== void 0,
216
+ ...workflow.connections !== void 0 && workflow.connections.length > 0 ? { connections: workflow.connections } : {},
217
+ nodes: workflow.nodes.map((node$1) => {
218
+ const inspectorSummaryRows = this.safeInspectorSummary(node$1.config);
219
+ return {
220
+ id: node$1.id,
221
+ kind: node$1.kind,
222
+ name: node$1.name,
223
+ nodeTokenId: this.resolveTokenId(node$1.type),
224
+ configTokenId: this.resolveTokenId(node$1.config.type),
225
+ tokenName: this.resolveTokenName(node$1.type),
226
+ configTokenName: this.resolveTokenName(node$1.config.type),
227
+ config: this.serializeConfig(node$1.config),
228
+ ...inspectorSummaryRows !== void 0 ? { inspectorSummary: inspectorSummaryRows } : {}
229
+ };
230
+ }),
231
+ edges: workflow.edges.map((edge) => ({
232
+ from: {
233
+ nodeId: edge.from.nodeId,
234
+ output: edge.from.output
235
+ },
236
+ to: {
237
+ nodeId: edge.to.nodeId,
238
+ input: edge.to.input
239
+ }
240
+ }))
241
+ };
242
+ }
243
+ hydrate(snapshotNode, liveConfig) {
244
+ const hydrated = this.mergeValue(liveConfig, snapshotNode.config);
245
+ const configToken = this.tokenRegistry.resolve(snapshotNode.configTokenId);
246
+ Object.assign(hydrated, {
247
+ type: configToken ?? liveConfig.type,
248
+ kind: snapshotNode.kind
249
+ });
250
+ if (snapshotNode.name && !("name" in hydrated && hydrated.name)) Object.assign(hydrated, { name: snapshotNode.name });
251
+ return hydrated;
252
+ }
253
+ serializeConfig(config) {
254
+ try {
255
+ const cloned = JSON.parse(JSON.stringify(config));
256
+ this.injectTokenIds(cloned, config);
257
+ return cloned;
258
+ } catch {
259
+ const fallback = {
260
+ kind: config.kind,
261
+ name: config.name,
262
+ id: config.id,
263
+ icon: config.icon,
264
+ description: config.description,
265
+ execution: config.execution
266
+ };
267
+ this.injectTokenIds(fallback, config);
268
+ return fallback;
269
+ }
270
+ }
271
+ safeInspectorSummary(config) {
272
+ const fn = config.inspectorSummary;
273
+ if (typeof fn !== "function") return void 0;
274
+ let raw;
275
+ try {
276
+ raw = fn.call(config);
277
+ } catch {
278
+ return;
279
+ }
280
+ if (!Array.isArray(raw)) return void 0;
281
+ const rows = [];
282
+ for (const entry of raw) {
283
+ if (!entry || typeof entry !== "object") continue;
284
+ const { label, value } = entry;
285
+ if (typeof label !== "string" || typeof value !== "string") continue;
286
+ const trimmedLabel = label.trim();
287
+ if (trimmedLabel.length === 0) continue;
288
+ rows.push({
289
+ label: trimmedLabel,
290
+ value
291
+ });
292
+ }
293
+ return rows.length > 0 ? rows : void 0;
294
+ }
295
+ injectTokenIds(target, source) {
296
+ const type = this.asTypeToken(source.type);
297
+ if (type) target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.resolveTokenName(type) ?? "unknown";
298
+ for (const [key, value] of Object.entries(source)) {
299
+ if (key === "type" || value == null) continue;
300
+ if (Array.isArray(value)) {
301
+ const targetArray = target[key];
302
+ if (Array.isArray(targetArray)) value.forEach((item, index) => {
303
+ if (item && typeof item === "object" && targetArray[index] && typeof targetArray[index] === "object") this.injectTokenIds(targetArray[index], item);
304
+ });
305
+ continue;
306
+ }
307
+ if (typeof value === "object") {
308
+ const targetValue = target[key];
309
+ if (targetValue && typeof targetValue === "object") this.injectTokenIds(targetValue, value);
310
+ }
311
+ }
312
+ }
313
+ mergeValue(liveValue, snapshotValue) {
314
+ const liveRecord = this.asRecord(liveValue);
315
+ const snapshotRecord = this.asRecord(snapshotValue);
316
+ const hydrated = Object.create(liveValue && typeof liveValue === "object" ? Object.getPrototypeOf(liveValue) ?? Object.prototype : Object.prototype);
317
+ for (const [key, value] of Object.entries(snapshotRecord)) hydrated[key] = this.mergeNestedValue(liveRecord[key], value);
318
+ this.restoreNonSerializableProperties(liveRecord, hydrated);
319
+ this.restoreTypeProperty(hydrated);
320
+ return hydrated;
321
+ }
322
+ mergeNestedValue(liveValue, snapshotValue) {
323
+ if (Array.isArray(snapshotValue)) {
324
+ const liveArray = Array.isArray(liveValue) ? liveValue : [];
325
+ return snapshotValue.map((entry, index) => this.mergeNestedValue(liveArray[index], entry));
326
+ }
327
+ if (snapshotValue && typeof snapshotValue === "object") return this.mergeValue(liveValue, snapshotValue);
328
+ return snapshotValue;
329
+ }
330
+ restoreNonSerializableProperties(liveRecord, hydrated) {
331
+ for (const [key, value] of Object.entries(liveRecord)) if (typeof value === "function" || typeof value === "symbol") hydrated[key] = value;
332
+ for (const sym of Object.getOwnPropertySymbols(liveRecord)) hydrated[sym] = liveRecord[sym];
333
+ }
334
+ restoreTypeProperty(record) {
335
+ const tokenId = typeof record.tokenId === "string" ? record.tokenId : void 0;
336
+ if (!tokenId) return;
337
+ const type = this.tokenRegistry.resolve(tokenId);
338
+ if (type) record.type = type;
339
+ }
340
+ resolveTokenId(token) {
341
+ return this.tokenRegistry.getTokenId(token) ?? this.resolveTokenName(token) ?? "unknown";
342
+ }
343
+ resolveTokenName(token) {
344
+ if (typeof token === "function" && token.name) return token.name;
345
+ if (typeof token === "string") return token;
346
+ }
347
+ asTypeToken(value) {
348
+ if (typeof value === "function" || typeof value === "string" || typeof value === "symbol") return value;
349
+ }
350
+ asRecord(value) {
351
+ if (!value || typeof value !== "object" || Array.isArray(value)) return {};
352
+ const record = value;
353
+ const out = { ...record };
354
+ for (const sym of Object.getOwnPropertySymbols(value)) out[sym] = record[sym];
355
+ return out;
356
+ }
357
+ };
358
+
359
+ //#endregion
360
+ //#region src/contracts/deploymentManifestTypes.ts
361
+ const DEPLOYMENT_MANIFEST_SCHEMA_VERSION = 2;
362
+ function serializeManifest(manifest) {
363
+ return JSON.stringify(manifest);
364
+ }
365
+ function deserializeManifest(raw) {
366
+ return JSON.parse(raw);
367
+ }
368
+ function isPollingTriggerConfig(config) {
369
+ return typeof config.getTriggerPollConfig === "function";
370
+ }
371
+ function resolveNodeTypeName(node$1) {
372
+ const configToken = node$1.config?.type;
373
+ if (typeof configToken?.name === "string" && configToken.name) return configToken.name;
374
+ const nodeToken = node$1.type;
375
+ if (typeof nodeToken?.name === "string" && nodeToken.name) return nodeToken.name;
376
+ return "Node";
377
+ }
378
+ function resolveCanvasNode(node$1) {
379
+ const config = node$1.config;
380
+ const type = resolveNodeTypeName(node$1);
381
+ const role = require_di.AgentConfigInspector.isAgentNodeConfig(config) ? "agent" : "workflowNode";
382
+ const triggerKind = node$1.kind === "trigger" ? config.triggerKind ?? "live" : void 0;
383
+ const c = config;
384
+ return {
385
+ id: node$1.id,
386
+ kind: node$1.kind,
387
+ name: node$1.name ?? config?.name,
388
+ type,
389
+ role,
390
+ ...triggerKind !== void 0 && { triggerKind },
391
+ ...c.declaredOutputPorts !== void 0 && { declaredOutputPorts: c.declaredOutputPorts },
392
+ ...c.declaredInputPorts !== void 0 && { declaredInputPorts: c.declaredInputPorts }
393
+ };
394
+ }
395
+ function emitWorkflowManifest(workflow) {
396
+ const registry = new PersistedWorkflowTokenRegistry();
397
+ registry.registerFromWorkflows([workflow]);
398
+ const snapshot = new WorkflowSnapshotCodec(registry).create(workflow);
399
+ const canvas = {
400
+ id: workflow.id,
401
+ name: workflow.name,
402
+ nodes: workflow.nodes.map(resolveCanvasNode),
403
+ edges: workflow.edges
404
+ };
405
+ const triggers = workflow.nodes.filter((n) => n.kind === "trigger").map((n) => {
406
+ const config = n.config;
407
+ const cfg = config;
408
+ const triggerKind = config.triggerKind ?? "live";
409
+ const pollCfg = isPollingTriggerConfig(config) ? config.getTriggerPollConfig() : void 0;
410
+ const endpointKey = typeof cfg["endpointKey"] === "string" ? cfg["endpointKey"] : void 0;
411
+ const methods = Array.isArray(cfg["methods"]) ? cfg["methods"] : void 0;
412
+ const webhookFields = endpointKey !== void 0 && methods !== void 0 ? {
413
+ endpointKey,
414
+ methods
415
+ } : {};
416
+ const nodeTypeId = registry.getTokenId(config.type) ?? void 0;
417
+ const entry = {
418
+ nodeId: n.id,
419
+ triggerKind,
420
+ config: pollCfg !== void 0 ? pollCfg.config : webhookFields,
421
+ nodeTypeId
422
+ };
423
+ if (pollCfg?.pollIntervalMs !== void 0) return {
424
+ ...entry,
425
+ pollIntervalMs: pollCfg.pollIntervalMs
426
+ };
427
+ return entry;
428
+ });
429
+ const credentialShapes = workflow.nodes.map((n) => {
430
+ const requirements = n.config.getCredentialRequirements?.();
431
+ if (!requirements || requirements.length === 0) return null;
432
+ return {
433
+ nodeId: n.id,
434
+ requirements
435
+ };
436
+ }).filter((s) => s !== null);
437
+ return {
438
+ manifestId: (0, node_crypto.randomUUID)(),
439
+ schemaVersion: DEPLOYMENT_MANIFEST_SCHEMA_VERSION,
440
+ workflowId: workflow.id,
441
+ canvas,
442
+ snapshot,
443
+ triggers,
444
+ credentialShapes
445
+ };
446
+ }
447
+
448
+ //#endregion
449
+ Object.defineProperty(exports, 'AgentBindError', {
450
+ enumerable: true,
451
+ get: function () {
452
+ return AgentBindError;
453
+ }
454
+ });
455
+ Object.defineProperty(exports, 'DEFAULT_ASSERTION_PASS_THRESHOLD', {
456
+ enumerable: true,
457
+ get: function () {
458
+ return DEFAULT_ASSERTION_PASS_THRESHOLD;
459
+ }
460
+ });
461
+ Object.defineProperty(exports, 'DEPLOYMENT_MANIFEST_SCHEMA_VERSION', {
462
+ enumerable: true,
463
+ get: function () {
464
+ return DEPLOYMENT_MANIFEST_SCHEMA_VERSION;
465
+ }
466
+ });
467
+ Object.defineProperty(exports, 'InjectableRuntimeDecoratorComposer', {
468
+ enumerable: true,
469
+ get: function () {
470
+ return InjectableRuntimeDecoratorComposer;
471
+ }
472
+ });
473
+ Object.defineProperty(exports, 'NoOpAgentMcpIntegration', {
474
+ enumerable: true,
475
+ get: function () {
476
+ return NoOpAgentMcpIntegration;
477
+ }
478
+ });
479
+ Object.defineProperty(exports, 'PersistedRuntimeTypeMetadataStore', {
480
+ enumerable: true,
481
+ get: function () {
482
+ return PersistedRuntimeTypeMetadataStore;
483
+ }
484
+ });
485
+ Object.defineProperty(exports, 'PersistedRuntimeTypeNameResolver', {
486
+ enumerable: true,
487
+ get: function () {
488
+ return PersistedRuntimeTypeNameResolver;
489
+ }
490
+ });
491
+ Object.defineProperty(exports, 'PersistedWorkflowTokenRegistry', {
492
+ enumerable: true,
493
+ get: function () {
494
+ return PersistedWorkflowTokenRegistry;
495
+ }
496
+ });
497
+ Object.defineProperty(exports, 'StackTraceCallSitePathResolver', {
498
+ enumerable: true,
499
+ get: function () {
500
+ return StackTraceCallSitePathResolver;
501
+ }
502
+ });
503
+ Object.defineProperty(exports, 'WorkflowSnapshotCodec', {
504
+ enumerable: true,
505
+ get: function () {
506
+ return WorkflowSnapshotCodec;
507
+ }
508
+ });
509
+ Object.defineProperty(exports, 'chatModel', {
510
+ enumerable: true,
511
+ get: function () {
512
+ return chatModel;
513
+ }
514
+ });
515
+ Object.defineProperty(exports, 'deriveAssertionPassed', {
516
+ enumerable: true,
517
+ get: function () {
518
+ return deriveAssertionPassed;
519
+ }
520
+ });
521
+ Object.defineProperty(exports, 'deserializeDispatch', {
522
+ enumerable: true,
523
+ get: function () {
524
+ return deserializeDispatch;
525
+ }
526
+ });
527
+ Object.defineProperty(exports, 'deserializeManifest', {
528
+ enumerable: true,
529
+ get: function () {
530
+ return deserializeManifest;
531
+ }
532
+ });
533
+ Object.defineProperty(exports, 'emitWorkflowManifest', {
534
+ enumerable: true,
535
+ get: function () {
536
+ return emitWorkflowManifest;
537
+ }
538
+ });
539
+ Object.defineProperty(exports, 'getPersistedRuntimeTypeMetadata', {
540
+ enumerable: true,
541
+ get: function () {
542
+ return getPersistedRuntimeTypeMetadata;
543
+ }
544
+ });
545
+ Object.defineProperty(exports, 'node', {
546
+ enumerable: true,
547
+ get: function () {
548
+ return node;
549
+ }
550
+ });
551
+ Object.defineProperty(exports, 'serializeDispatch', {
552
+ enumerable: true,
553
+ get: function () {
554
+ return serializeDispatch;
555
+ }
556
+ });
557
+ Object.defineProperty(exports, 'serializeManifest', {
558
+ enumerable: true,
559
+ get: function () {
560
+ return serializeManifest;
561
+ }
562
+ });
563
+ Object.defineProperty(exports, 'tool', {
564
+ enumerable: true,
565
+ get: function () {
566
+ return tool;
567
+ }
568
+ });
569
+ //# sourceMappingURL=contracts-7L1wJHdk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts-7L1wJHdk.cjs","names":["metadata: PersistedRuntimeTypeMetadata","node","tokenRegistry: PersistedWorkflowTokenRegistryLike","node","fallback: Record<string, unknown>","raw: unknown","rows: Array<Readonly<{ label: string; value: string }>>","out: Record<PropertyKey, unknown>","node","AgentConfigInspector","triggers: ManifestTriggerConfig[]","webhookFields: JsonObject","entry: ManifestTriggerConfig","credentialShapes: ManifestNodeCredentialShape[]"],"sources":["../src/contracts/dispatchTypes.ts","../src/contracts/AgentBindError.ts","../src/contracts/NoOpAgentMcpIntegration.ts","../src/contracts/assertionTypes.ts","../src/runtime-types/persistedRuntimeTypeModelRegistry.ts","../src/runtime-types/PersistedRuntimeTypeNameResolver.ts","../src/runtime-types/StackTraceCallSitePathResolver.ts","../src/runtime-types/PersistedRuntimeTypeMetadataStoreRegistry.ts","../src/runtime-types/InjectableRuntimeDecoratorComposerRegistry.ts","../src/runtime-types/runtimeTypeDecorators.types.ts","../src/workflowSnapshots/PersistedRuntimeTypeIdFactory.ts","../src/workflowSnapshots/PersistedWorkflowTokenRegistry.ts","../src/workflowSnapshots/WorkflowSnapshotCodec.ts","../src/contracts/deploymentManifestTypes.ts"],"sourcesContent":["import type { BinaryAttachment, JsonValue, RunId, WorkflowId } from \"./workflowTypes\";\nimport type { NodeId } from \"./baseTypes\";\n\nexport type WorkspaceId = string;\n\nexport type DispatchBinaryRef = BinaryAttachment;\n\nexport interface DispatchItemMeta {\n readonly id: string;\n readonly json?: JsonValue;\n readonly binary?: Readonly<Record<string, DispatchBinaryRef>>;\n}\n\nexport interface WorkflowDispatch {\n readonly runId: RunId;\n readonly workspaceId: WorkspaceId;\n readonly workflowId: WorkflowId;\n readonly triggerNodeId: NodeId;\n readonly items: ReadonlyArray<DispatchItemMeta>;\n readonly triggerContext: JsonValue;\n}\n\nexport function serializeDispatch(dispatch: WorkflowDispatch): string {\n return JSON.stringify(dispatch);\n}\n\nexport function deserializeDispatch(raw: string): WorkflowDispatch {\n return JSON.parse(raw) as WorkflowDispatch;\n}\n","export class AgentBindError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AgentBindError\";\n }\n}\n","import type { AgentMcpIntegration, AgentMcpToolMap } from \"./agentMcpTypes\";\n\nexport class NoOpAgentMcpIntegration implements AgentMcpIntegration {\n async prepareMcpTools(): Promise<AgentMcpToolMap> {\n return new Map();\n }\n}\n","import type { JsonValue, NodeId } from \"./workflowTypes\";\n\nexport interface AssertionResult {\n readonly name: string;\n readonly score: number;\n readonly passThreshold?: number;\n readonly errored?: true;\n readonly expected?: JsonValue;\n readonly actual?: JsonValue;\n readonly message?: string;\n readonly details?: Readonly<Record<string, JsonValue>>;\n}\n\nexport const DEFAULT_ASSERTION_PASS_THRESHOLD = 0.5;\n\nexport function deriveAssertionPassed(result: {\n readonly score: number;\n readonly passThreshold?: number;\n readonly errored?: true;\n}): boolean {\n if (result.errored === true) return false;\n const threshold = result.passThreshold ?? DEFAULT_ASSERTION_PASS_THRESHOLD;\n return result.score >= threshold;\n}\n\nexport interface AssertionResultProvenance {\n readonly nodeId: NodeId;\n readonly iterationId?: string;\n readonly itemIndex?: number;\n}\n","export const persistedRuntimeTypeMetadataKey = Symbol.for(\"codemation.core.persistedRuntimeTypeMetadata\");\n\nexport type DecoratedRuntimeType = Readonly<{ name?: string }> & object;\n\nexport type PersistedRuntimeTypeKind = \"node\" | \"tool\" | \"chatModel\";\n\nexport interface PersistedRuntimeTypeDecoratorOptions {\n readonly name?: string;\n readonly packageName?: string;\n readonly moduleUrl?: string;\n}\n\nexport interface PersistedRuntimeTypeMetadata {\n readonly persistedName: string;\n readonly kind: PersistedRuntimeTypeKind;\n readonly packageName: string;\n readonly sourceHint?: string;\n}\n\nexport class PersistedRuntimeTypeDecoratorDefaults {\n static readonly appPackageName = \"app\";\n\n static apply(options: PersistedRuntimeTypeDecoratorOptions): PersistedRuntimeTypeDecoratorOptions {\n return {\n ...options,\n packageName: options.packageName ?? this.appPackageName,\n };\n }\n}\n","import type { DecoratedRuntimeType } from \"./persistedRuntimeTypeModelRegistry\";\n\nexport class PersistedRuntimeTypeNameResolver {\n static resolve(target: DecoratedRuntimeType, override: string | undefined): string {\n const resolved = override ?? target.name;\n if (!resolved) {\n throw new Error(\n \"Persisted runtime token metadata requires a named class or an explicit decorator name override.\",\n );\n }\n return resolved;\n }\n}\n","export class StackTraceCallSitePathResolver {\n static resolve(decoratorFileUrl: string): string | undefined {\n const stack = new Error().stack ?? \"\";\n for (const line of stack.split(\"\\n\")) {\n const candidate = this.extractPath(line.trim());\n if (!candidate) {\n continue;\n }\n if (candidate === decoratorFileUrl || candidate.includes(\"runtimeTypeDecorators\")) {\n continue;\n }\n return candidate;\n }\n return undefined;\n }\n\n private static extractPath(line: string): string | undefined {\n const fileUrlMatch = line.match(/file:\\/\\/[^\\s)]+/);\n if (fileUrlMatch) return fileUrlMatch[0];\n const parenMatch = line.match(/\\((\\/[^)]+)\\)/);\n if (parenMatch) return parenMatch[1];\n const bareMatch = line.match(/at (\\/[^\\s]+)/);\n return bareMatch?.[1];\n }\n}\n","import {\n PersistedRuntimeTypeDecoratorDefaults,\n persistedRuntimeTypeMetadataKey,\n type DecoratedRuntimeType,\n type PersistedRuntimeTypeDecoratorOptions,\n type PersistedRuntimeTypeKind,\n type PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\nimport { PersistedRuntimeTypeNameResolver } from \"./PersistedRuntimeTypeNameResolver\";\nimport { StackTraceCallSitePathResolver } from \"./StackTraceCallSitePathResolver\";\n\nexport class PersistedRuntimeTypeMetadataStore {\n static define(\n target: DecoratedRuntimeType,\n kind: PersistedRuntimeTypeKind,\n options: PersistedRuntimeTypeDecoratorOptions,\n decoratorFileUrl: string,\n ): void {\n const normalizedOptions = PersistedRuntimeTypeDecoratorDefaults.apply(options);\n const metadata: PersistedRuntimeTypeMetadata = {\n persistedName: PersistedRuntimeTypeNameResolver.resolve(target, normalizedOptions.name),\n kind,\n packageName: normalizedOptions.packageName ?? PersistedRuntimeTypeDecoratorDefaults.appPackageName,\n sourceHint: normalizedOptions.moduleUrl ?? StackTraceCallSitePathResolver.resolve(decoratorFileUrl),\n };\n Object.defineProperty(target, persistedRuntimeTypeMetadataKey, {\n configurable: false,\n enumerable: false,\n writable: false,\n value: metadata,\n });\n }\n\n static get(target: unknown): PersistedRuntimeTypeMetadata | undefined {\n if (!target || (typeof target !== \"function\" && typeof target !== \"object\")) {\n return undefined;\n }\n return (target as Record<PropertyKey, unknown>)[persistedRuntimeTypeMetadataKey] as\n | PersistedRuntimeTypeMetadata\n | undefined;\n }\n}\n","import { injectable } from \"../di\";\n\nimport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\nimport type {\n DecoratedRuntimeType,\n PersistedRuntimeTypeDecoratorOptions,\n PersistedRuntimeTypeKind,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nexport class InjectableRuntimeDecoratorComposer {\n static compose(\n kind: PersistedRuntimeTypeKind,\n options: PersistedRuntimeTypeDecoratorOptions,\n decoratorFileUrl: string,\n ): ClassDecorator {\n return (target) => {\n injectable()(target as never);\n PersistedRuntimeTypeMetadataStore.define(target as DecoratedRuntimeType, kind, options, decoratorFileUrl);\n };\n }\n}\n","import type {\n PersistedRuntimeTypeDecoratorOptions,\n PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nimport { InjectableRuntimeDecoratorComposer } from \"./InjectableRuntimeDecoratorComposerRegistry\";\nimport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\n\nexport type {\n PersistedRuntimeTypeDecoratorOptions,\n PersistedRuntimeTypeKind,\n PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nexport function getPersistedRuntimeTypeMetadata(target: unknown): PersistedRuntimeTypeMetadata | undefined {\n return PersistedRuntimeTypeMetadataStore.get(target);\n}\n\nexport function node(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n return InjectableRuntimeDecoratorComposer.compose(\"node\", options, import.meta.url);\n}\n\nexport function tool(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n return InjectableRuntimeDecoratorComposer.compose(\"tool\", options, import.meta.url);\n}\n\nexport function chatModel(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n return InjectableRuntimeDecoratorComposer.compose(\"chatModel\", options, import.meta.url);\n}\n\nexport { InjectableRuntimeDecoratorComposer } from \"./InjectableRuntimeDecoratorComposerRegistry\";\nexport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\nexport { PersistedRuntimeTypeNameResolver } from \"./PersistedRuntimeTypeNameResolver\";\nexport { StackTraceCallSitePathResolver } from \"./StackTraceCallSitePathResolver\";\n","import type { TypeToken } from \"../di\";\n\nimport { getPersistedRuntimeTypeMetadata } from \"../runtime-types/runtimeTypeDecorators.types\";\n\nimport type { PersistedTokenId } from \"../types\";\n\nexport class PersistedRuntimeTypeIdFactory {\n static fromMetadata(args: Readonly<{ type: TypeToken<unknown> }>): PersistedTokenId | undefined {\n const metadata = getPersistedRuntimeTypeMetadata(args.type);\n if (!metadata) {\n return undefined;\n }\n const packageName = metadata.packageName;\n if (!packageName) {\n return undefined;\n }\n return `${packageName}::${metadata.persistedName}` as PersistedTokenId;\n }\n}\n","import type { TypeToken } from \"../di\";\n\nimport type { PersistedTokenId, WorkflowDefinition } from \"../types\";\n\nimport { PersistedRuntimeTypeIdFactory } from \"./PersistedRuntimeTypeIdFactory\";\n\nexport class PersistedWorkflowTokenRegistry {\n private readonly tokensById = new Map<PersistedTokenId, TypeToken<unknown>>();\n private readonly tokenIdsByToken = new Map<TypeToken<unknown>, PersistedTokenId>();\n\n register(type: TypeToken<unknown>, packageId: string, persistedNameOverride?: string): PersistedTokenId {\n const tokenName = persistedNameOverride ?? this.displayNameForTypeToken(type);\n const tokenId = `${packageId}::${tokenName}` as PersistedTokenId;\n this.tokensById.set(tokenId, type);\n this.tokenIdsByToken.set(type, tokenId);\n return tokenId;\n }\n\n registerFromWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void {\n for (const workflow of workflows) {\n for (const node of workflow.nodes) {\n this.registerDecoratedType(node.type);\n this.registerDecoratedType(node.config.type);\n this.registerNestedTypes(node.config);\n }\n }\n }\n\n private registerDecoratedType(type: TypeToken<unknown>): void {\n if (this.tokenIdsByToken.has(type)) {\n return;\n }\n const tokenId = PersistedRuntimeTypeIdFactory.fromMetadata({ type });\n if (!tokenId) {\n return;\n }\n this.tokensById.set(tokenId, type);\n this.tokenIdsByToken.set(type, tokenId);\n }\n\n private registerNestedTypes(value: unknown): void {\n if (Array.isArray(value)) {\n for (const entry of value) this.registerNestedTypes(entry);\n return;\n }\n if (!value || typeof value !== \"object\") return;\n const record = value as Record<string, unknown>;\n const type = this.asTypeToken(record.type);\n if (type) this.registerDecoratedType(type);\n for (const v of Object.values(record)) this.registerNestedTypes(v);\n }\n\n private displayNameForTypeToken(token: TypeToken<unknown>): string {\n if (typeof token === \"function\" && token.name) return token.name;\n if (typeof token === \"string\") return token;\n return \"\";\n }\n\n private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n return value as TypeToken<unknown>;\n }\n return undefined;\n }\n\n getTokenId(token: TypeToken<unknown>): PersistedTokenId | undefined {\n const existing = this.tokenIdsByToken.get(token);\n if (existing) {\n return existing;\n }\n const tokenId = PersistedRuntimeTypeIdFactory.fromMetadata({ type: token });\n if (!tokenId) {\n return undefined;\n }\n this.tokensById.set(tokenId, token);\n this.tokenIdsByToken.set(token, tokenId);\n return tokenId;\n }\n\n resolve(tokenId: PersistedTokenId): TypeToken<unknown> | undefined {\n return this.tokensById.get(tokenId);\n }\n}\n","import type { TypeToken } from \"../di\";\nimport type {\n NodeConfigBase,\n PersistedTokenId,\n PersistedWorkflowSnapshot,\n PersistedWorkflowSnapshotNode,\n PersistedWorkflowTokenRegistryLike,\n WorkflowDefinition,\n} from \"../types\";\n\nexport class WorkflowSnapshotCodec {\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\n\n create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot {\n return {\n id: workflow.id,\n name: workflow.name,\n workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== undefined,\n ...(workflow.connections !== undefined && workflow.connections.length > 0\n ? { connections: workflow.connections }\n : {}),\n nodes: workflow.nodes.map((node) => {\n const inspectorSummaryRows = this.safeInspectorSummary(node.config);\n return {\n id: node.id,\n kind: node.kind,\n name: node.name,\n nodeTokenId: this.resolveTokenId(node.type),\n configTokenId: this.resolveTokenId(node.config.type),\n tokenName: this.resolveTokenName(node.type),\n configTokenName: this.resolveTokenName(node.config.type),\n config: this.serializeConfig(node.config),\n ...(inspectorSummaryRows !== undefined ? { inspectorSummary: inspectorSummaryRows } : {}),\n };\n }),\n edges: workflow.edges.map((edge) => ({\n from: { nodeId: edge.from.nodeId, output: edge.from.output },\n to: { nodeId: edge.to.nodeId, input: edge.to.input },\n })),\n };\n }\n\n hydrate(snapshotNode: PersistedWorkflowSnapshotNode, liveConfig: NodeConfigBase): NodeConfigBase {\n const hydrated = this.mergeValue(liveConfig, snapshotNode.config);\n const configToken = this.tokenRegistry.resolve(snapshotNode.configTokenId);\n Object.assign(hydrated, {\n type: configToken ?? liveConfig.type,\n kind: snapshotNode.kind,\n });\n if (snapshotNode.name && !(\"name\" in hydrated && hydrated.name)) {\n Object.assign(hydrated, { name: snapshotNode.name });\n }\n return hydrated as unknown as NodeConfigBase;\n }\n\n private serializeConfig(config: NodeConfigBase): unknown {\n try {\n const cloned = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n this.injectTokenIds(cloned, config as unknown as Record<string, unknown>);\n return cloned;\n } catch {\n const fallback: Record<string, unknown> = {\n kind: config.kind,\n name: config.name,\n id: config.id,\n icon: config.icon,\n description: config.description,\n execution: config.execution,\n };\n this.injectTokenIds(fallback, config as unknown as Record<string, unknown>);\n return fallback;\n }\n }\n\n private safeInspectorSummary(\n config: NodeConfigBase,\n ): ReadonlyArray<Readonly<{ label: string; value: string }>> | undefined {\n const fn = (config as { inspectorSummary?: () => unknown }).inspectorSummary;\n if (typeof fn !== \"function\") return undefined;\n let raw: unknown;\n try {\n raw = fn.call(config);\n } catch {\n return undefined;\n }\n if (!Array.isArray(raw)) return undefined;\n const rows: Array<Readonly<{ label: string; value: string }>> = [];\n for (const entry of raw) {\n if (!entry || typeof entry !== \"object\") continue;\n const { label, value } = entry as { label?: unknown; value?: unknown };\n if (typeof label !== \"string\" || typeof value !== \"string\") continue;\n const trimmedLabel = label.trim();\n if (trimmedLabel.length === 0) continue;\n rows.push({ label: trimmedLabel, value });\n }\n return rows.length > 0 ? rows : undefined;\n }\n\n private injectTokenIds(target: Record<string, unknown>, source: Record<string, unknown>): void {\n const type = this.asTypeToken(source.type);\n if (type) {\n target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.resolveTokenName(type) ?? \"unknown\";\n }\n for (const [key, value] of Object.entries(source)) {\n if (key === \"type\" || value == null) {\n continue;\n }\n if (Array.isArray(value)) {\n const targetArray = target[key];\n if (Array.isArray(targetArray)) {\n value.forEach((item, index) => {\n if (item && typeof item === \"object\" && targetArray[index] && typeof targetArray[index] === \"object\") {\n this.injectTokenIds(targetArray[index] as Record<string, unknown>, item as Record<string, unknown>);\n }\n });\n }\n continue;\n }\n if (typeof value === \"object\") {\n const targetValue = target[key];\n if (targetValue && typeof targetValue === \"object\") {\n this.injectTokenIds(targetValue as Record<string, unknown>, value as Record<string, unknown>);\n }\n }\n }\n }\n\n private mergeValue(liveValue: unknown, snapshotValue: unknown): Record<PropertyKey, unknown> {\n const liveRecord = this.asRecord(liveValue);\n const snapshotRecord = this.asRecord(snapshotValue);\n const hydrated = Object.create(\n liveValue && typeof liveValue === \"object\"\n ? (Object.getPrototypeOf(liveValue) ?? Object.prototype)\n : Object.prototype,\n ) as Record<PropertyKey, unknown>;\n\n for (const [key, value] of Object.entries(snapshotRecord)) {\n hydrated[key] = this.mergeNestedValue(liveRecord[key], value);\n }\n\n this.restoreNonSerializableProperties(liveRecord, hydrated);\n this.restoreTypeProperty(hydrated);\n return hydrated;\n }\n\n private mergeNestedValue(liveValue: unknown, snapshotValue: unknown): unknown {\n if (Array.isArray(snapshotValue)) {\n const liveArray = Array.isArray(liveValue) ? liveValue : [];\n return snapshotValue.map((entry, index) => this.mergeNestedValue(liveArray[index], entry));\n }\n if (snapshotValue && typeof snapshotValue === \"object\") {\n return this.mergeValue(liveValue, snapshotValue);\n }\n return snapshotValue;\n }\n\n private restoreNonSerializableProperties(\n liveRecord: Record<PropertyKey, unknown>,\n hydrated: Record<PropertyKey, unknown>,\n ): void {\n for (const [key, value] of Object.entries(liveRecord)) {\n if (typeof value === \"function\" || typeof value === \"symbol\") {\n hydrated[key] = value;\n }\n }\n for (const sym of Object.getOwnPropertySymbols(liveRecord)) {\n hydrated[sym] = liveRecord[sym];\n }\n }\n\n private restoreTypeProperty(record: Record<PropertyKey, unknown>): void {\n const tokenId = typeof record.tokenId === \"string\" ? record.tokenId : undefined;\n if (!tokenId) {\n return;\n }\n const type = this.tokenRegistry.resolve(tokenId as PersistedTokenId);\n if (type) {\n record.type = type;\n }\n }\n\n private resolveTokenId(token: TypeToken<unknown>): PersistedTokenId {\n return (this.tokenRegistry.getTokenId(token) ?? this.resolveTokenName(token) ?? \"unknown\") as PersistedTokenId;\n }\n\n private resolveTokenName(token: TypeToken<unknown>): string | undefined {\n if (typeof token === \"function\" && token.name) {\n return token.name;\n }\n if (typeof token === \"string\") {\n return token;\n }\n return undefined;\n }\n\n private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n return value as TypeToken<unknown>;\n }\n return undefined;\n }\n\n private asRecord(value: unknown): Record<PropertyKey, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return {};\n }\n const record = value as Record<PropertyKey, unknown>;\n const out: Record<PropertyKey, unknown> = { ...(record as Record<string, unknown>) };\n for (const sym of Object.getOwnPropertySymbols(value)) {\n out[sym] = record[sym];\n }\n return out;\n }\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport type { NodeId, WorkflowId } from \"./baseTypes\";\nimport type { CredentialRequirement } from \"./credentialTypes\";\nimport type { PersistedWorkflowSnapshot } from \"./runTypes\";\nimport type { JsonObject, NodeDefinition, PollingTriggerConfig } from \"./workflowTypes\";\nimport type { WorkflowDefinition } from \"../types\";\nimport { AgentConfigInspector } from \"../ai/AgentConfigInspectorFactory\";\nimport { PersistedWorkflowTokenRegistry } from \"../workflowSnapshots/PersistedWorkflowTokenRegistry\";\nimport { WorkflowSnapshotCodec } from \"../workflowSnapshots/WorkflowSnapshotCodec\";\n\nexport const DEPLOYMENT_MANIFEST_SCHEMA_VERSION = 2 as const;\n\nexport type DeploymentManifestSchemaVersion = typeof DEPLOYMENT_MANIFEST_SCHEMA_VERSION;\n\nexport type ManifestTriggerConfig = Readonly<{\n nodeId: NodeId;\n triggerKind: \"live\" | \"test\";\n config: JsonObject;\n pollIntervalMs?: number;\n nodeTypeId?: string;\n}>;\n\nexport type ManifestNodeCredentialShape = Readonly<{\n nodeId: NodeId;\n requirements: ReadonlyArray<CredentialRequirement>;\n}>;\n\nexport type WorkflowDeploymentManifest<TCanvas = JsonObject> = Readonly<{\n manifestId: string;\n schemaVersion: DeploymentManifestSchemaVersion;\n workflowId: WorkflowId;\n canvas: TCanvas;\n snapshot: PersistedWorkflowSnapshot;\n triggers: ReadonlyArray<ManifestTriggerConfig>;\n credentialShapes: ReadonlyArray<ManifestNodeCredentialShape>;\n}>;\n\nexport function serializeManifest<TCanvas>(manifest: WorkflowDeploymentManifest<TCanvas>): string {\n return JSON.stringify(manifest);\n}\n\nexport function deserializeManifest<TCanvas = JsonObject>(raw: string): WorkflowDeploymentManifest<TCanvas> {\n return JSON.parse(raw) as WorkflowDeploymentManifest<TCanvas>;\n}\n\nexport type ManifestCanvasNode = Readonly<{\n id: NodeId;\n kind: string;\n name: string | undefined;\n type?: string;\n role?: string;\n triggerKind?: \"live\" | \"test\";\n declaredOutputPorts?: ReadonlyArray<string>;\n declaredInputPorts?: ReadonlyArray<string>;\n}>;\n\nexport type ManifestCanvas = Readonly<{\n id: WorkflowId;\n name: string;\n nodes: ReadonlyArray<ManifestCanvasNode>;\n edges: WorkflowDefinition[\"edges\"];\n}>;\n\ntype TriggerNodeConfigShape = Readonly<{ triggerKind?: \"live\" | \"test\" }>;\n\nfunction isPollingTriggerConfig(config: unknown): config is PollingTriggerConfig {\n return typeof (config as PollingTriggerConfig).getTriggerPollConfig === \"function\";\n}\n\nfunction resolveNodeTypeName(node: NodeDefinition): string {\n const configToken = node.config?.type as Readonly<{ name?: unknown }> | undefined;\n if (typeof configToken?.name === \"string\" && configToken.name) {\n return configToken.name;\n }\n const nodeToken = node.type as Readonly<{ name?: unknown }> | undefined;\n if (typeof nodeToken?.name === \"string\" && nodeToken.name) {\n return nodeToken.name;\n }\n return \"Node\";\n}\n\nfunction resolveCanvasNode(node: NodeDefinition): ManifestCanvasNode {\n const config = node.config;\n const type = resolveNodeTypeName(node);\n const role = AgentConfigInspector.isAgentNodeConfig(config) ? \"agent\" : \"workflowNode\";\n const triggerKind = node.kind === \"trigger\" ? ((config as TriggerNodeConfigShape).triggerKind ?? \"live\") : undefined;\n const c = config as {\n declaredOutputPorts?: readonly string[];\n declaredInputPorts?: readonly string[];\n };\n return {\n id: node.id,\n kind: node.kind,\n name: node.name ?? config?.name,\n type,\n role,\n ...(triggerKind !== undefined && { triggerKind }),\n ...(c.declaredOutputPorts !== undefined && { declaredOutputPorts: c.declaredOutputPorts }),\n ...(c.declaredInputPorts !== undefined && { declaredInputPorts: c.declaredInputPorts }),\n };\n}\n\nexport function emitWorkflowManifest(workflow: WorkflowDefinition): WorkflowDeploymentManifest<ManifestCanvas> {\n const registry = new PersistedWorkflowTokenRegistry();\n registry.registerFromWorkflows([workflow]);\n const codec = new WorkflowSnapshotCodec(registry);\n const snapshot = codec.create(workflow);\n\n const canvas = {\n id: workflow.id,\n name: workflow.name,\n nodes: workflow.nodes.map(resolveCanvasNode),\n edges: workflow.edges,\n };\n\n const triggers: ManifestTriggerConfig[] = workflow.nodes\n .filter((n) => n.kind === \"trigger\")\n .map((n) => {\n const config = n.config;\n const cfg = config as unknown as Record<string, unknown>;\n const triggerKind = (config as TriggerNodeConfigShape).triggerKind ?? \"live\";\n const pollCfg = isPollingTriggerConfig(config) ? config.getTriggerPollConfig() : undefined;\n const endpointKey = typeof cfg[\"endpointKey\"] === \"string\" ? cfg[\"endpointKey\"] : undefined;\n const methods = Array.isArray(cfg[\"methods\"]) ? (cfg[\"methods\"] as string[]) : undefined;\n const webhookFields: JsonObject =\n endpointKey !== undefined && methods !== undefined ? { endpointKey, methods } : {};\n const nodeTypeId = registry.getTokenId(config.type) ?? undefined;\n const entry: ManifestTriggerConfig = {\n nodeId: n.id,\n triggerKind,\n config: pollCfg !== undefined ? pollCfg.config : webhookFields,\n nodeTypeId,\n };\n if (pollCfg?.pollIntervalMs !== undefined) {\n return { ...entry, pollIntervalMs: pollCfg.pollIntervalMs };\n }\n return entry;\n });\n\n const credentialShapes: ManifestNodeCredentialShape[] = workflow.nodes\n .map((n) => {\n const requirements = n.config.getCredentialRequirements?.();\n if (!requirements || requirements.length === 0) return null;\n return { nodeId: n.id, requirements } satisfies ManifestNodeCredentialShape;\n })\n .filter((s): s is ManifestNodeCredentialShape => s !== null);\n\n return {\n manifestId: randomUUID(),\n schemaVersion: DEPLOYMENT_MANIFEST_SCHEMA_VERSION,\n workflowId: workflow.id,\n canvas,\n snapshot,\n triggers,\n credentialShapes,\n };\n}\n"],"mappings":"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"}