@heddleagent/execution-host-client 6.7.0 → 8.0.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 (116) hide show
  1. package/README.md +54 -35
  2. package/dist/agentcore/agentcore-execution-host.d.ts +1 -1
  3. package/dist/agentcore/agentcore-execution-host.d.ts.map +1 -1
  4. package/dist/agentcore/agentcore-execution-host.js +6 -3
  5. package/dist/agentcore/agentcore-execution-host.js.map +1 -1
  6. package/dist/cli/hostctl.d.ts +11 -0
  7. package/dist/cli/hostctl.d.ts.map +1 -0
  8. package/dist/cli/hostctl.js +49 -0
  9. package/dist/cli/hostctl.js.map +1 -0
  10. package/dist/contracts/index.d.ts +18 -1
  11. package/dist/contracts/index.d.ts.map +1 -1
  12. package/dist/contracts/index.js +28 -1
  13. package/dist/contracts/index.js.map +1 -1
  14. package/dist/conversation/hosted-conversation-turn-service.js +2 -2
  15. package/dist/conversation/hosted-conversation-turn-service.js.map +1 -1
  16. package/dist/conversation/types.d.ts +2 -2
  17. package/dist/conversation/types.d.ts.map +1 -1
  18. package/dist/conversation/types.js.map +1 -1
  19. package/dist/coordinator/contracts.d.ts +148 -5
  20. package/dist/coordinator/contracts.d.ts.map +1 -1
  21. package/dist/coordinator/contracts.js +74 -3
  22. package/dist/coordinator/contracts.js.map +1 -1
  23. package/dist/coordinator/hosted-heartbeat-execution-client.d.ts +30 -0
  24. package/dist/coordinator/hosted-heartbeat-execution-client.d.ts.map +1 -0
  25. package/dist/coordinator/hosted-heartbeat-execution-client.js +240 -0
  26. package/dist/coordinator/hosted-heartbeat-execution-client.js.map +1 -0
  27. package/dist/coordinator/hosted-heartbeat-execution-service.d.ts +14 -0
  28. package/dist/coordinator/hosted-heartbeat-execution-service.d.ts.map +1 -0
  29. package/dist/coordinator/hosted-heartbeat-execution-service.js +100 -0
  30. package/dist/coordinator/hosted-heartbeat-execution-service.js.map +1 -0
  31. package/dist/coordinator/index.d.ts +5 -5
  32. package/dist/coordinator/index.d.ts.map +1 -1
  33. package/dist/coordinator/index.js +3 -3
  34. package/dist/coordinator/index.js.map +1 -1
  35. package/dist/coordinator/node/execution-http-service.d.ts +11 -0
  36. package/dist/coordinator/node/execution-http-service.d.ts.map +1 -0
  37. package/dist/coordinator/node/{delegation-http-service.js → execution-http-service.js} +52 -39
  38. package/dist/coordinator/node/execution-http-service.js.map +1 -0
  39. package/dist/coordinator/node/index.d.ts +2 -2
  40. package/dist/coordinator/node/index.d.ts.map +1 -1
  41. package/dist/coordinator/node/index.js +1 -1
  42. package/dist/coordinator/node/index.js.map +1 -1
  43. package/dist/coordinator/node/types.d.ts +10 -9
  44. package/dist/coordinator/node/types.d.ts.map +1 -1
  45. package/dist/coordinator/node/types.js.map +1 -1
  46. package/dist/coordinator/types.d.ts +51 -13
  47. package/dist/coordinator/types.d.ts.map +1 -1
  48. package/dist/coordinator/types.js.map +1 -1
  49. package/dist/heartbeat/hosted-heartbeat-task-service.js +2 -2
  50. package/dist/heartbeat/hosted-heartbeat-task-service.js.map +1 -1
  51. package/dist/host/jwt-execution-host-mcp-capability-verifier.d.ts.map +1 -1
  52. package/dist/host/jwt-execution-host-mcp-capability-verifier.js +4 -2
  53. package/dist/host/jwt-execution-host-mcp-capability-verifier.js.map +1 -1
  54. package/dist/host/jwt-execution-identity-verifier.d.ts.map +1 -1
  55. package/dist/host/jwt-execution-identity-verifier.js +4 -2
  56. package/dist/host/jwt-execution-identity-verifier.js.map +1 -1
  57. package/dist/host/runtime-session/service.d.ts +2 -2
  58. package/dist/host/runtime-session/service.d.ts.map +1 -1
  59. package/dist/host/runtime-session/service.js +1 -1
  60. package/dist/host/runtime-session/service.js.map +1 -1
  61. package/dist/host/runtime-session/types.d.ts +2 -2
  62. package/dist/host/runtime-session/types.d.ts.map +1 -1
  63. package/dist/host/runtime-session/types.js.map +1 -1
  64. package/dist/host/schemas.d.ts +6 -0
  65. package/dist/host/schemas.d.ts.map +1 -1
  66. package/dist/host/schemas.js +18 -1
  67. package/dist/host/schemas.js.map +1 -1
  68. package/dist/host/types.d.ts +2 -0
  69. package/dist/host/types.d.ts.map +1 -1
  70. package/dist/host/types.js.map +1 -1
  71. package/dist/http-sse/direct-http-execution-host.d.ts.map +1 -1
  72. package/dist/http-sse/direct-http-execution-host.js +8 -7
  73. package/dist/http-sse/direct-http-execution-host.js.map +1 -1
  74. package/dist/http-sse/types.d.ts +5 -3
  75. package/dist/http-sse/types.d.ts.map +1 -1
  76. package/dist/http-sse/types.js.map +1 -1
  77. package/dist/node/authority-key.d.ts.map +1 -1
  78. package/dist/node/authority-key.js +24 -49
  79. package/dist/node/authority-key.js.map +1 -1
  80. package/dist/node/direct-credentials.d.ts +3 -7
  81. package/dist/node/direct-credentials.d.ts.map +1 -1
  82. package/dist/node/direct-credentials.js +3 -15
  83. package/dist/node/direct-credentials.js.map +1 -1
  84. package/dist/node/environment-value.d.ts +17 -0
  85. package/dist/node/environment-value.d.ts.map +1 -0
  86. package/dist/node/environment-value.js +78 -0
  87. package/dist/node/environment-value.js.map +1 -0
  88. package/dist/node/index.d.ts +4 -0
  89. package/dist/node/index.d.ts.map +1 -1
  90. package/dist/node/index.js +2 -0
  91. package/dist/node/index.js.map +1 -1
  92. package/dist/node/local-credential-bundle.d.ts +33 -0
  93. package/dist/node/local-credential-bundle.d.ts.map +1 -0
  94. package/dist/node/local-credential-bundle.js +196 -0
  95. package/dist/node/local-credential-bundle.js.map +1 -0
  96. package/dist/node/owner-only-file.d.ts +17 -0
  97. package/dist/node/owner-only-file.d.ts.map +1 -0
  98. package/dist/node/owner-only-file.js +59 -0
  99. package/dist/node/owner-only-file.js.map +1 -0
  100. package/dist/testing/request.d.ts.map +1 -1
  101. package/dist/testing/request.js +14 -4
  102. package/dist/testing/request.js.map +1 -1
  103. package/package.json +5 -1
  104. package/spec/v1/openapi.json +62 -4
  105. package/spec/v1/schema-bundle.json +58 -0
  106. package/dist/coordinator/hosted-heartbeat-delegation-client.d.ts +0 -21
  107. package/dist/coordinator/hosted-heartbeat-delegation-client.d.ts.map +0 -1
  108. package/dist/coordinator/hosted-heartbeat-delegation-client.js +0 -117
  109. package/dist/coordinator/hosted-heartbeat-delegation-client.js.map +0 -1
  110. package/dist/coordinator/hosted-heartbeat-delegation-service.d.ts +0 -15
  111. package/dist/coordinator/hosted-heartbeat-delegation-service.d.ts.map +0 -1
  112. package/dist/coordinator/hosted-heartbeat-delegation-service.js +0 -81
  113. package/dist/coordinator/hosted-heartbeat-delegation-service.js.map +0 -1
  114. package/dist/coordinator/node/delegation-http-service.d.ts +0 -11
  115. package/dist/coordinator/node/delegation-http-service.d.ts.map +0 -1
  116. package/dist/coordinator/node/delegation-http-service.js.map +0 -1
@@ -0,0 +1,240 @@
1
+ import { z } from 'zod';
2
+ import { HEARTBEAT_TASK_WORKFLOW, OpaqueIdSchema, isDockerLocalWebUrl, isSafeWebUrl, } from '../contracts/index.js';
3
+ import { HostedHeartbeatAgentExecutionTransport, HostedHeartbeatTaskService, } from '../heartbeat/index.js';
4
+ import { HOSTED_HEARTBEAT_EXECUTION_PATHS, HostedHeartbeatExecutionPreparationRequestSchema, HostedHeartbeatExecutionPreparationSchema, HostedHeartbeatExecutionSettlementRequestSchema, HostedHeartbeatExecutionSettlementSchema, } from './contracts.js';
5
+ import { HostedHeartbeatServiceTokenSchema } from './service-token.js';
6
+ const AbsolutePathSchema = z.string().min(1).max(256).regex(/^\/(?:[^?#\s]*)$/, 'must be an absolute path without query, fragment, or whitespace');
7
+ const RequestTimeoutSchema = z.number().int().min(1_000).max(60_000);
8
+ const AgentResultSchema = z.object({
9
+ decision: z.enum(['continue', 'pause', 'complete', 'escalate']),
10
+ summary: z.string(),
11
+ state: z.object({
12
+ runId: OpaqueIdSchema,
13
+ outcome: z.enum(['done', 'max_steps', 'error', 'interrupted']),
14
+ }).passthrough(),
15
+ }).passthrough();
16
+ export class HostedHeartbeatExecutionRequestError extends Error {
17
+ operation;
18
+ status;
19
+ name = 'HostedHeartbeatExecutionRequestError';
20
+ constructor(operation, status) {
21
+ super(`Heartbeat execution ${operation} failed with status ${status}.`);
22
+ this.operation = operation;
23
+ this.status = status;
24
+ }
25
+ }
26
+ /** Authenticated Coordinator client for the product-owned work lifecycle. */
27
+ export class HostedHeartbeatExecutionClient {
28
+ #endpoints;
29
+ #authorization;
30
+ #fetch;
31
+ #requestTimeoutMs;
32
+ constructor(config) {
33
+ const baseUrl = parseSafeBaseUrl(config);
34
+ this.#endpoints = {
35
+ prepare: new URL(AbsolutePathSchema.parse(config.preparePath ?? HOSTED_HEARTBEAT_EXECUTION_PATHS.prepare), baseUrl),
36
+ settle: new URL(AbsolutePathSchema.parse(config.settlePath ?? HOSTED_HEARTBEAT_EXECUTION_PATHS.settle), baseUrl),
37
+ };
38
+ this.#authorization = `Bearer ${HostedHeartbeatServiceTokenSchema.parse(config.apiToken)}`;
39
+ this.#fetch = config.fetch ?? globalThis.fetch;
40
+ this.#requestTimeoutMs = RequestTimeoutSchema.parse(config.requestTimeoutMs ?? 10_000);
41
+ }
42
+ async prepare(rawInput, signal) {
43
+ const input = HostedHeartbeatExecutionPreparationRequestSchema.parse(rawInput);
44
+ const preparation = HostedHeartbeatExecutionPreparationSchema.parse(await this.#post('prepare', input, signal));
45
+ const identity = preparation.kind === 'execute'
46
+ ? preparation.delegation
47
+ : preparation;
48
+ assertMatchingExecution(identity, input, 'preparation');
49
+ return preparation;
50
+ }
51
+ async settle(rawInput, signal) {
52
+ const input = HostedHeartbeatExecutionSettlementRequestSchema.parse(rawInput);
53
+ const settlement = HostedHeartbeatExecutionSettlementSchema.parse(await this.#post('settle', input, signal));
54
+ assertMatchingExecution(settlement, input, 'settlement');
55
+ return settlement;
56
+ }
57
+ async #post(operation, body, signal) {
58
+ const requestSignal = signal
59
+ ? AbortSignal.any([signal, AbortSignal.timeout(this.#requestTimeoutMs)])
60
+ : AbortSignal.timeout(this.#requestTimeoutMs);
61
+ const response = await this.#fetch(this.#endpoints[operation], {
62
+ method: 'POST',
63
+ headers: {
64
+ authorization: this.#authorization,
65
+ 'content-type': 'application/json',
66
+ },
67
+ body: JSON.stringify(body),
68
+ redirect: 'error',
69
+ signal: requestSignal,
70
+ });
71
+ if (!response.ok) {
72
+ throw new HostedHeartbeatExecutionRequestError(operation, response.status);
73
+ }
74
+ return await response.json();
75
+ }
76
+ }
77
+ /**
78
+ * Coordinates product work around Heddle's authoritative task attempt.
79
+ * The paired transport consumes exactly the delegation prepared for that
80
+ * execution, so running the agent can never create a second product claim.
81
+ */
82
+ export class HostedHeartbeatDelegatedExecution {
83
+ #config;
84
+ #prepared = new Map();
85
+ constructor(config) {
86
+ this.#config = config;
87
+ }
88
+ async handle(context) {
89
+ const request = HostedHeartbeatExecutionPreparationRequestSchema.parse({
90
+ schemaVersion: 1,
91
+ taskId: context.task.id,
92
+ executionId: context.executionId,
93
+ ...(context.task.state?.recovery?.interruptedExecutionId
94
+ ? {
95
+ interruptedExecutionId: context.task.state.recovery.interruptedExecutionId,
96
+ }
97
+ : {}),
98
+ });
99
+ const preparation = await this.#config.executions.prepare(request, context.signal);
100
+ if (preparation.kind === 'skip') {
101
+ return context.skip({ summary: preparation.summary });
102
+ }
103
+ this.#remember(preparation.delegation);
104
+ let result;
105
+ try {
106
+ result = await context.runAgent();
107
+ AgentResultSchema.parse(result);
108
+ }
109
+ catch (error) {
110
+ this.#prepared.delete(context.executionId);
111
+ await this.#settleFailure(request, error, context.signal.aborted);
112
+ throw error;
113
+ }
114
+ this.#prepared.delete(context.executionId);
115
+ const parsed = AgentResultSchema.parse(result);
116
+ const settlement = await this.#config.executions.settle({
117
+ schemaVersion: 1,
118
+ kind: 'completed',
119
+ taskId: request.taskId,
120
+ executionId: request.executionId,
121
+ result: {
122
+ decision: parsed.decision,
123
+ summary: parsed.summary,
124
+ runId: parsed.state.runId,
125
+ outcome: parsed.state.outcome,
126
+ },
127
+ });
128
+ if (settlement.disposition.kind === 'retry') {
129
+ return context.retry({
130
+ summary: settlement.disposition.summary,
131
+ ...(settlement.disposition.delayMs !== undefined
132
+ ? { delayMs: settlement.disposition.delayMs }
133
+ : {}),
134
+ });
135
+ }
136
+ if (settlement.disposition.kind === 'blocked') {
137
+ return context.block({ summary: settlement.disposition.summary });
138
+ }
139
+ return result;
140
+ }
141
+ async execute(input) {
142
+ const delegation = this.#prepared.get(input.request.executionId);
143
+ this.#prepared.delete(input.request.executionId);
144
+ if (!delegation
145
+ || delegation.taskId !== input.request.taskId
146
+ || delegation.executionId !== input.request.executionId) {
147
+ throw new Error('Heartbeat execution has no matching prepared product authority.');
148
+ }
149
+ const service = new HostedHeartbeatTaskService({
150
+ authority: new DelegatedExecutionAuthorityIssuer(delegation),
151
+ executionHost: this.#config.executionHost,
152
+ modelCredentials: this.#config.modelCredentials,
153
+ mcp: {
154
+ allowedTools: delegation.authority.metadata.mcp.allowedTools,
155
+ },
156
+ });
157
+ const transport = new HostedHeartbeatAgentExecutionTransport({
158
+ runner: service,
159
+ resolveInvocationContext: () => ({
160
+ scope: delegation.scope,
161
+ runtimeSessionId: delegation.runtimeSessionId,
162
+ deadlineAt: delegation.deadlineAt,
163
+ }),
164
+ });
165
+ return await transport.execute(input);
166
+ }
167
+ #remember(delegation) {
168
+ if (this.#prepared.has(delegation.executionId)) {
169
+ throw new Error('Heartbeat execution was prepared more than once.');
170
+ }
171
+ this.#prepared.set(delegation.executionId, delegation);
172
+ }
173
+ async #settleFailure(request, error, interrupted) {
174
+ const settlement = await this.#config.executions.settle(interrupted
175
+ ? {
176
+ schemaVersion: 1,
177
+ kind: 'interrupted',
178
+ taskId: request.taskId,
179
+ executionId: request.executionId,
180
+ }
181
+ : {
182
+ schemaVersion: 1,
183
+ kind: 'failed',
184
+ taskId: request.taskId,
185
+ executionId: request.executionId,
186
+ errorType: error instanceof Error ? error.name : 'unknown',
187
+ });
188
+ if (settlement.disposition.kind !== 'accepted') {
189
+ throw new Error('Product must accept failed or interrupted heartbeat settlement.');
190
+ }
191
+ }
192
+ }
193
+ function parseSafeBaseUrl(config) {
194
+ return z.custom((value) => value instanceof URL && (isSafeWebUrl(value)
195
+ || (config.allowDockerLocalHost === true
196
+ && isDockerLocalWebUrl(value))), 'baseUrl must use HTTPS or loopback HTTP; Docker local-host HTTP requires an explicit opt-in').parse(config.baseUrl);
197
+ }
198
+ function assertMatchingExecution(response, request, responseName) {
199
+ if (response.taskId !== request.taskId
200
+ || response.executionId !== request.executionId) {
201
+ throw new Error(`Product backend returned a mismatched heartbeat ${responseName}.`);
202
+ }
203
+ }
204
+ /** Ensures downstream execution cannot widen a delegated authority bundle. */
205
+ class DelegatedExecutionAuthorityIssuer {
206
+ delegation;
207
+ constructor(delegation) {
208
+ this.delegation = delegation;
209
+ }
210
+ async issue(input) {
211
+ const metadata = this.delegation.authority.metadata;
212
+ if (input.workflow !== HEARTBEAT_TASK_WORKFLOW
213
+ || input.workflow !== metadata.workflow
214
+ || input.invocationId !== metadata.invocationId
215
+ || input.runtimeSessionId !== metadata.runtimeSessionId
216
+ || !sameScope(input.scope, this.delegation.scope)
217
+ || !sameScope(input.scope, metadata.scope)
218
+ || !sameTools(input.mcp?.allowedTools, metadata.mcp.allowedTools)) {
219
+ throw new Error('Heartbeat delegation does not match Heddle execution.');
220
+ }
221
+ const authority = this.delegation.authority;
222
+ return Object.freeze({
223
+ metadata: metadata,
224
+ executionAssertion: () => authority.executionAssertion,
225
+ mcpCapability: () => authority.mcpCapability,
226
+ toJSON: () => metadata,
227
+ });
228
+ }
229
+ }
230
+ function sameScope(left, right) {
231
+ return left.tenantId === right.tenantId
232
+ && left.subjectId === right.subjectId
233
+ && left.productSessionId === right.productSessionId;
234
+ }
235
+ function sameTools(left, right) {
236
+ return Boolean(left
237
+ && left.length === right.length
238
+ && left.every((tool, index) => tool === right[index]));
239
+ }
240
+ //# sourceMappingURL=hosted-heartbeat-execution-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-heartbeat-execution-client.js","sourceRoot":"","sources":["../../src/coordinator/hosted-heartbeat-execution-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport type {\n ExecutionAuthorityIssueInput,\n ExecutionAuthorityIssuer,\n IssuedExecutionAuthority,\n IssuedExecutionAuthorityMetadata,\n} from '../authority/index.js';\nimport {\n HEARTBEAT_TASK_WORKFLOW,\n OpaqueIdSchema,\n isDockerLocalWebUrl,\n isSafeWebUrl,\n} from '../contracts/index.js';\nimport {\n HostedHeartbeatAgentExecutionTransport,\n HostedHeartbeatTaskService,\n type HostedHeartbeatAgentExecutionTransportInput,\n} from '../heartbeat/index.js';\nimport {\n HOSTED_HEARTBEAT_EXECUTION_PATHS,\n HostedHeartbeatExecutionPreparationRequestSchema,\n HostedHeartbeatExecutionPreparationSchema,\n HostedHeartbeatExecutionSettlementRequestSchema,\n HostedHeartbeatExecutionSettlementSchema,\n type HostedHeartbeatDelegation,\n type HostedHeartbeatExecutionPreparation,\n type HostedHeartbeatExecutionPreparationRequest,\n type HostedHeartbeatExecutionSettlement,\n type HostedHeartbeatExecutionSettlementRequest,\n} from './contracts.js';\nimport { HostedHeartbeatServiceTokenSchema } from './service-token.js';\nimport type {\n HostedHeartbeatCoordinatorExecutionContext,\n HostedHeartbeatDelegatedExecutionConfig,\n HostedHeartbeatExecutionTransportPort,\n HostedHeartbeatExecutionApi,\n HostedHeartbeatExecutionClientConfig,\n} from './types.js';\n\nconst AbsolutePathSchema = z.string().min(1).max(256).regex(\n /^\\/(?:[^?#\\s]*)$/,\n 'must be an absolute path without query, fragment, or whitespace',\n);\nconst RequestTimeoutSchema = z.number().int().min(1_000).max(60_000);\nconst AgentResultSchema = z.object({\n decision: z.enum(['continue', 'pause', 'complete', 'escalate']),\n summary: z.string(),\n state: z.object({\n runId: OpaqueIdSchema,\n outcome: z.enum(['done', 'max_steps', 'error', 'interrupted']),\n }).passthrough(),\n}).passthrough();\n\ntype ExecutionOperation = 'prepare' | 'settle';\n\nexport class HostedHeartbeatExecutionRequestError extends Error {\n readonly name = 'HostedHeartbeatExecutionRequestError';\n\n constructor(\n readonly operation: ExecutionOperation,\n readonly status: number,\n ) {\n super(`Heartbeat execution ${operation} failed with status ${status}.`);\n }\n}\n\n/** Authenticated Coordinator client for the product-owned work lifecycle. */\nexport class HostedHeartbeatExecutionClient\nimplements HostedHeartbeatExecutionApi {\n readonly #endpoints: Record<ExecutionOperation, URL>;\n readonly #authorization: string;\n readonly #fetch: typeof globalThis.fetch;\n readonly #requestTimeoutMs: number;\n\n constructor(config: HostedHeartbeatExecutionClientConfig) {\n const baseUrl = parseSafeBaseUrl(config);\n this.#endpoints = {\n prepare: new URL(\n AbsolutePathSchema.parse(\n config.preparePath ?? HOSTED_HEARTBEAT_EXECUTION_PATHS.prepare,\n ),\n baseUrl,\n ),\n settle: new URL(\n AbsolutePathSchema.parse(\n config.settlePath ?? HOSTED_HEARTBEAT_EXECUTION_PATHS.settle,\n ),\n baseUrl,\n ),\n };\n this.#authorization = `Bearer ${\n HostedHeartbeatServiceTokenSchema.parse(config.apiToken)\n }`;\n this.#fetch = config.fetch ?? globalThis.fetch;\n this.#requestTimeoutMs = RequestTimeoutSchema.parse(\n config.requestTimeoutMs ?? 10_000,\n );\n }\n\n async prepare(\n rawInput: HostedHeartbeatExecutionPreparationRequest,\n signal?: AbortSignal,\n ): Promise<HostedHeartbeatExecutionPreparation> {\n const input = HostedHeartbeatExecutionPreparationRequestSchema.parse(\n rawInput,\n );\n const preparation = HostedHeartbeatExecutionPreparationSchema.parse(\n await this.#post('prepare', input, signal),\n );\n const identity = preparation.kind === 'execute'\n ? preparation.delegation\n : preparation;\n assertMatchingExecution(identity, input, 'preparation');\n return preparation;\n }\n\n async settle(\n rawInput: HostedHeartbeatExecutionSettlementRequest,\n signal?: AbortSignal,\n ): Promise<HostedHeartbeatExecutionSettlement> {\n const input = HostedHeartbeatExecutionSettlementRequestSchema.parse(\n rawInput,\n );\n const settlement = HostedHeartbeatExecutionSettlementSchema.parse(\n await this.#post('settle', input, signal),\n );\n assertMatchingExecution(settlement, input, 'settlement');\n return settlement;\n }\n\n async #post(\n operation: ExecutionOperation,\n body: unknown,\n signal?: AbortSignal,\n ): Promise<unknown> {\n const requestSignal = signal\n ? AbortSignal.any([signal, AbortSignal.timeout(this.#requestTimeoutMs)])\n : AbortSignal.timeout(this.#requestTimeoutMs);\n const response = await this.#fetch(this.#endpoints[operation], {\n method: 'POST',\n headers: {\n authorization: this.#authorization,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n redirect: 'error',\n signal: requestSignal,\n });\n if (!response.ok) {\n throw new HostedHeartbeatExecutionRequestError(\n operation,\n response.status,\n );\n }\n return await response.json();\n }\n}\n\n/**\n * Coordinates product work around Heddle's authoritative task attempt.\n * The paired transport consumes exactly the delegation prepared for that\n * execution, so running the agent can never create a second product claim.\n */\nexport class HostedHeartbeatDelegatedExecution\nimplements HostedHeartbeatExecutionTransportPort {\n readonly #config: HostedHeartbeatDelegatedExecutionConfig;\n readonly #prepared = new Map<string, HostedHeartbeatDelegation>();\n\n constructor(config: HostedHeartbeatDelegatedExecutionConfig) {\n this.#config = config;\n }\n\n async handle<TResult, TOutcome>(\n context: HostedHeartbeatCoordinatorExecutionContext<TResult, TOutcome>,\n ): Promise<TResult | TOutcome> {\n const request = HostedHeartbeatExecutionPreparationRequestSchema.parse({\n schemaVersion: 1,\n taskId: context.task.id,\n executionId: context.executionId,\n ...(context.task.state?.recovery?.interruptedExecutionId\n ? {\n interruptedExecutionId:\n context.task.state.recovery.interruptedExecutionId,\n }\n : {}),\n });\n const preparation = await this.#config.executions.prepare(\n request,\n context.signal,\n );\n if (preparation.kind === 'skip') {\n return context.skip({ summary: preparation.summary });\n }\n\n this.#remember(preparation.delegation);\n let result: TResult;\n try {\n result = await context.runAgent();\n AgentResultSchema.parse(result);\n } catch (error) {\n this.#prepared.delete(context.executionId);\n await this.#settleFailure(request, error, context.signal.aborted);\n throw error;\n }\n this.#prepared.delete(context.executionId);\n\n const parsed = AgentResultSchema.parse(result);\n const settlement = await this.#config.executions.settle({\n schemaVersion: 1,\n kind: 'completed',\n taskId: request.taskId,\n executionId: request.executionId,\n result: {\n decision: parsed.decision,\n summary: parsed.summary,\n runId: parsed.state.runId,\n outcome: parsed.state.outcome,\n },\n });\n if (settlement.disposition.kind === 'retry') {\n return context.retry({\n summary: settlement.disposition.summary,\n ...(settlement.disposition.delayMs !== undefined\n ? { delayMs: settlement.disposition.delayMs }\n : {}),\n });\n }\n if (settlement.disposition.kind === 'blocked') {\n return context.block({ summary: settlement.disposition.summary });\n }\n return result;\n }\n\n async execute(\n input: HostedHeartbeatAgentExecutionTransportInput,\n ): Promise<unknown> {\n const delegation = this.#prepared.get(input.request.executionId);\n this.#prepared.delete(input.request.executionId);\n if (\n !delegation\n || delegation.taskId !== input.request.taskId\n || delegation.executionId !== input.request.executionId\n ) {\n throw new Error(\n 'Heartbeat execution has no matching prepared product authority.',\n );\n }\n const service = new HostedHeartbeatTaskService({\n authority: new DelegatedExecutionAuthorityIssuer(delegation),\n executionHost: this.#config.executionHost,\n modelCredentials: this.#config.modelCredentials,\n mcp: {\n allowedTools: delegation.authority.metadata.mcp.allowedTools,\n },\n });\n const transport = new HostedHeartbeatAgentExecutionTransport({\n runner: service,\n resolveInvocationContext: () => ({\n scope: delegation.scope,\n runtimeSessionId: delegation.runtimeSessionId,\n deadlineAt: delegation.deadlineAt,\n }),\n });\n return await transport.execute(input);\n }\n\n #remember(delegation: HostedHeartbeatDelegation): void {\n if (this.#prepared.has(delegation.executionId)) {\n throw new Error('Heartbeat execution was prepared more than once.');\n }\n this.#prepared.set(delegation.executionId, delegation);\n }\n\n async #settleFailure(\n request: HostedHeartbeatExecutionPreparationRequest,\n error: unknown,\n interrupted: boolean,\n ): Promise<void> {\n const settlement = await this.#config.executions.settle(interrupted\n ? {\n schemaVersion: 1,\n kind: 'interrupted',\n taskId: request.taskId,\n executionId: request.executionId,\n }\n : {\n schemaVersion: 1,\n kind: 'failed',\n taskId: request.taskId,\n executionId: request.executionId,\n errorType: error instanceof Error ? error.name : 'unknown',\n });\n if (settlement.disposition.kind !== 'accepted') {\n throw new Error(\n 'Product must accept failed or interrupted heartbeat settlement.',\n );\n }\n }\n}\n\nfunction parseSafeBaseUrl(\n config: HostedHeartbeatExecutionClientConfig,\n): URL {\n return z.custom<URL>(\n (value) => value instanceof URL && (\n isSafeWebUrl(value)\n || (\n config.allowDockerLocalHost === true\n && isDockerLocalWebUrl(value)\n )\n ),\n 'baseUrl must use HTTPS or loopback HTTP; Docker local-host HTTP requires an explicit opt-in',\n ).parse(config.baseUrl);\n}\n\nfunction assertMatchingExecution(\n response: { taskId: string; executionId: string },\n request: { taskId: string; executionId: string },\n responseName: string,\n): void {\n if (\n response.taskId !== request.taskId\n || response.executionId !== request.executionId\n ) {\n throw new Error(\n `Product backend returned a mismatched heartbeat ${responseName}.`,\n );\n }\n}\n\n/** Ensures downstream execution cannot widen a delegated authority bundle. */\nclass DelegatedExecutionAuthorityIssuer implements ExecutionAuthorityIssuer {\n constructor(private readonly delegation: HostedHeartbeatDelegation) {}\n\n async issue(\n input: ExecutionAuthorityIssueInput,\n ): Promise<IssuedExecutionAuthority> {\n const metadata = this.delegation.authority.metadata;\n if (\n input.workflow !== HEARTBEAT_TASK_WORKFLOW\n || input.workflow !== metadata.workflow\n || input.invocationId !== metadata.invocationId\n || input.runtimeSessionId !== metadata.runtimeSessionId\n || !sameScope(input.scope, this.delegation.scope)\n || !sameScope(input.scope, metadata.scope)\n || !sameTools(input.mcp?.allowedTools, metadata.mcp.allowedTools)\n ) {\n throw new Error('Heartbeat delegation does not match Heddle execution.');\n }\n const authority = this.delegation.authority;\n return Object.freeze({\n metadata: metadata as IssuedExecutionAuthorityMetadata,\n executionAssertion: () => authority.executionAssertion,\n mcpCapability: () => authority.mcpCapability,\n toJSON: () => metadata as IssuedExecutionAuthorityMetadata,\n });\n }\n}\n\nfunction sameScope(\n left: ExecutionAuthorityIssueInput['scope'],\n right: HostedHeartbeatDelegation['scope']\n | HostedHeartbeatDelegation['authority']['metadata']['scope'],\n): boolean {\n return left.tenantId === right.tenantId\n && left.subjectId === right.subjectId\n && left.productSessionId === right.productSessionId;\n}\n\nfunction sameTools(\n left: readonly string[] | undefined,\n right: readonly string[],\n): boolean {\n return Boolean(\n left\n && left.length === right.length\n && left.every((tool, index) => tool === right[index]),\n );\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { type HostedHeartbeatExecutionPreparation, type HostedHeartbeatExecutionPreparationRequest, type HostedHeartbeatExecutionSettlement, type HostedHeartbeatExecutionSettlementRequest } from './contracts.js';
2
+ import type { HostedHeartbeatExecutionApi, HostedHeartbeatExecutionServiceConfig } from './types.js';
3
+ /**
4
+ * Owns the generic product lifecycle edge for one Coordinator execution.
5
+ * Product code decides whether work exists and how it settles; this service
6
+ * alone constructs the Heddle authority bundle used by the Execution Host.
7
+ */
8
+ export declare class HostedHeartbeatExecutionService implements HostedHeartbeatExecutionApi {
9
+ #private;
10
+ constructor(config: HostedHeartbeatExecutionServiceConfig);
11
+ prepare(rawInput: HostedHeartbeatExecutionPreparationRequest, rawSignal?: AbortSignal): Promise<HostedHeartbeatExecutionPreparation>;
12
+ settle(rawInput: HostedHeartbeatExecutionSettlementRequest, rawSignal?: AbortSignal): Promise<HostedHeartbeatExecutionSettlement>;
13
+ }
14
+ //# sourceMappingURL=hosted-heartbeat-execution-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-heartbeat-execution-service.d.ts","sourceRoot":"","sources":["../../src/coordinator/hosted-heartbeat-execution-service.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,mCAAmC,EACxC,KAAK,0CAA0C,EAC/C,KAAK,kCAAkC,EACvC,KAAK,yCAAyC,EAC/C,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EACV,2BAA2B,EAC3B,qCAAqC,EACtC,MAAM,YAAY,CAAC;AAOpB;;;;GAIG;AACH,qBAAa,+BACb,YAAW,2BAA2B;;gBAOxB,MAAM,EAAE,qCAAqC;IAYnD,OAAO,CACX,QAAQ,EAAE,0CAA0C,EACpD,SAAS,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,mCAAmC,CAAC;IA2BzC,MAAM,CACV,QAAQ,EAAE,yCAAyC,EACnD,SAAS,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,kCAAkC,CAAC;CA4D/C"}
@@ -0,0 +1,100 @@
1
+ import dayjs from 'dayjs';
2
+ import { z } from 'zod';
3
+ import { HEARTBEAT_TASK_WORKFLOW, OpaqueIdSchema } from '../contracts/index.js';
4
+ import { HostedHeartbeatDelegationSchema, HostedHeartbeatExecutionDispositionSchema, HostedHeartbeatExecutionPreparationDecisionSchema, HostedHeartbeatExecutionPreparationRequestSchema, HostedHeartbeatExecutionPreparationSchema, HostedHeartbeatExecutionSettlementRequestSchema, HostedHeartbeatExecutionSettlementSchema, } from './contracts.js';
5
+ import { createHostedRuntimeSessionId } from './runtime-session.js';
6
+ const ExecutionServiceConfigSchema = z.object({
7
+ runtimeSessionNamespace: OpaqueIdSchema,
8
+ maxExecutionMs: z.number().int().min(1_000).max(Number.MAX_SAFE_INTEGER),
9
+ }).strict();
10
+ /**
11
+ * Owns the generic product lifecycle edge for one Coordinator execution.
12
+ * Product code decides whether work exists and how it settles; this service
13
+ * alone constructs the Heddle authority bundle used by the Execution Host.
14
+ */
15
+ export class HostedHeartbeatExecutionService {
16
+ #authority;
17
+ #lifecycle;
18
+ #runtimeSessionNamespace;
19
+ #maxExecutionMs;
20
+ #now;
21
+ constructor(config) {
22
+ const parsed = ExecutionServiceConfigSchema.parse({
23
+ runtimeSessionNamespace: config.runtimeSessionNamespace,
24
+ maxExecutionMs: config.maxExecutionMs,
25
+ });
26
+ this.#authority = config.authority;
27
+ this.#lifecycle = config.lifecycle;
28
+ this.#runtimeSessionNamespace = parsed.runtimeSessionNamespace;
29
+ this.#maxExecutionMs = parsed.maxExecutionMs;
30
+ this.#now = config.now ?? (() => new Date());
31
+ }
32
+ async prepare(rawInput, rawSignal) {
33
+ const input = HostedHeartbeatExecutionPreparationRequestSchema.parse(rawInput);
34
+ const signal = rawSignal ?? new AbortController().signal;
35
+ signal.throwIfAborted();
36
+ const decision = HostedHeartbeatExecutionPreparationDecisionSchema.parse(await this.#lifecycle.prepare({ ...input, signal }));
37
+ signal.throwIfAborted();
38
+ if (decision.kind === 'skip') {
39
+ return HostedHeartbeatExecutionPreparationSchema.parse({
40
+ schemaVersion: 1,
41
+ kind: 'skip',
42
+ taskId: input.taskId,
43
+ executionId: input.executionId,
44
+ summary: decision.summary,
45
+ });
46
+ }
47
+ return HostedHeartbeatExecutionPreparationSchema.parse({
48
+ schemaVersion: 1,
49
+ kind: 'execute',
50
+ delegation: await this.#createDelegation(input, decision.authorization),
51
+ });
52
+ }
53
+ async settle(rawInput, rawSignal) {
54
+ const input = HostedHeartbeatExecutionSettlementRequestSchema.parse(rawInput);
55
+ const signal = rawSignal ?? new AbortController().signal;
56
+ signal.throwIfAborted();
57
+ const disposition = HostedHeartbeatExecutionDispositionSchema.parse(await this.#lifecycle.settle({ ...input, signal }));
58
+ signal.throwIfAborted();
59
+ return HostedHeartbeatExecutionSettlementSchema.parse({
60
+ schemaVersion: 1,
61
+ taskId: input.taskId,
62
+ executionId: input.executionId,
63
+ disposition,
64
+ });
65
+ }
66
+ async #createDelegation(input, authorization) {
67
+ const runtimeSessionId = createHostedRuntimeSessionId({
68
+ namespace: this.#runtimeSessionNamespace,
69
+ scope: authorization.scope,
70
+ });
71
+ const deadlineAt = dayjs(this.#now())
72
+ .add(this.#maxExecutionMs, 'millisecond')
73
+ .toISOString();
74
+ const issued = await this.#authority.issue({
75
+ scope: authorization.scope,
76
+ runtimeSessionId,
77
+ invocationId: input.executionId,
78
+ workflow: HEARTBEAT_TASK_WORKFLOW,
79
+ mcp: { allowedTools: authorization.allowedTools },
80
+ });
81
+ const mcpCapability = issued.mcpCapability();
82
+ if (!mcpCapability || !issued.metadata.mcp) {
83
+ throw new Error('Hosted heartbeat execution requires an MCP-capable authority.');
84
+ }
85
+ return HostedHeartbeatDelegationSchema.parse({
86
+ schemaVersion: 1,
87
+ taskId: input.taskId,
88
+ executionId: input.executionId,
89
+ scope: authorization.scope,
90
+ runtimeSessionId,
91
+ deadlineAt,
92
+ authority: {
93
+ metadata: issued.metadata,
94
+ executionAssertion: issued.executionAssertion(),
95
+ mcpCapability,
96
+ },
97
+ });
98
+ }
99
+ }
100
+ //# sourceMappingURL=hosted-heartbeat-execution-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-heartbeat-execution-service.js","sourceRoot":"","sources":["../../src/coordinator/hosted-heartbeat-execution-service.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs';\nimport { z } from 'zod';\nimport { HEARTBEAT_TASK_WORKFLOW, OpaqueIdSchema } from '../contracts/index.js';\nimport {\n HostedHeartbeatDelegationSchema,\n HostedHeartbeatExecutionDispositionSchema,\n HostedHeartbeatExecutionPreparationDecisionSchema,\n HostedHeartbeatExecutionPreparationRequestSchema,\n HostedHeartbeatExecutionPreparationSchema,\n HostedHeartbeatExecutionSettlementRequestSchema,\n HostedHeartbeatExecutionSettlementSchema,\n type HostedHeartbeatDelegation,\n type HostedHeartbeatExecutionPreparation,\n type HostedHeartbeatExecutionPreparationRequest,\n type HostedHeartbeatExecutionSettlement,\n type HostedHeartbeatExecutionSettlementRequest,\n} from './contracts.js';\nimport { createHostedRuntimeSessionId } from './runtime-session.js';\nimport type {\n HostedHeartbeatExecutionApi,\n HostedHeartbeatExecutionServiceConfig,\n} from './types.js';\n\nconst ExecutionServiceConfigSchema = z.object({\n runtimeSessionNamespace: OpaqueIdSchema,\n maxExecutionMs: z.number().int().min(1_000).max(Number.MAX_SAFE_INTEGER),\n}).strict();\n\n/**\n * Owns the generic product lifecycle edge for one Coordinator execution.\n * Product code decides whether work exists and how it settles; this service\n * alone constructs the Heddle authority bundle used by the Execution Host.\n */\nexport class HostedHeartbeatExecutionService\nimplements HostedHeartbeatExecutionApi {\n readonly #authority: HostedHeartbeatExecutionServiceConfig['authority'];\n readonly #lifecycle: HostedHeartbeatExecutionServiceConfig['lifecycle'];\n readonly #runtimeSessionNamespace: string;\n readonly #maxExecutionMs: number;\n readonly #now: () => Date;\n\n constructor(config: HostedHeartbeatExecutionServiceConfig) {\n const parsed = ExecutionServiceConfigSchema.parse({\n runtimeSessionNamespace: config.runtimeSessionNamespace,\n maxExecutionMs: config.maxExecutionMs,\n });\n this.#authority = config.authority;\n this.#lifecycle = config.lifecycle;\n this.#runtimeSessionNamespace = parsed.runtimeSessionNamespace;\n this.#maxExecutionMs = parsed.maxExecutionMs;\n this.#now = config.now ?? (() => new Date());\n }\n\n async prepare(\n rawInput: HostedHeartbeatExecutionPreparationRequest,\n rawSignal?: AbortSignal,\n ): Promise<HostedHeartbeatExecutionPreparation> {\n const input = HostedHeartbeatExecutionPreparationRequestSchema.parse(\n rawInput,\n );\n const signal = rawSignal ?? new AbortController().signal;\n signal.throwIfAborted();\n const decision = HostedHeartbeatExecutionPreparationDecisionSchema.parse(\n await this.#lifecycle.prepare({ ...input, signal }),\n );\n signal.throwIfAborted();\n if (decision.kind === 'skip') {\n return HostedHeartbeatExecutionPreparationSchema.parse({\n schemaVersion: 1,\n kind: 'skip',\n taskId: input.taskId,\n executionId: input.executionId,\n summary: decision.summary,\n });\n }\n\n return HostedHeartbeatExecutionPreparationSchema.parse({\n schemaVersion: 1,\n kind: 'execute',\n delegation: await this.#createDelegation(input, decision.authorization),\n });\n }\n\n async settle(\n rawInput: HostedHeartbeatExecutionSettlementRequest,\n rawSignal?: AbortSignal,\n ): Promise<HostedHeartbeatExecutionSettlement> {\n const input = HostedHeartbeatExecutionSettlementRequestSchema.parse(\n rawInput,\n );\n const signal = rawSignal ?? new AbortController().signal;\n signal.throwIfAborted();\n const disposition = HostedHeartbeatExecutionDispositionSchema.parse(\n await this.#lifecycle.settle({ ...input, signal }),\n );\n signal.throwIfAborted();\n return HostedHeartbeatExecutionSettlementSchema.parse({\n schemaVersion: 1,\n taskId: input.taskId,\n executionId: input.executionId,\n disposition,\n });\n }\n\n async #createDelegation(\n input: HostedHeartbeatExecutionPreparationRequest,\n authorization: Extract<\n z.infer<typeof HostedHeartbeatExecutionPreparationDecisionSchema>,\n { kind: 'execute' }\n >['authorization'],\n ): Promise<HostedHeartbeatDelegation> {\n const runtimeSessionId = createHostedRuntimeSessionId({\n namespace: this.#runtimeSessionNamespace,\n scope: authorization.scope,\n });\n const deadlineAt = dayjs(this.#now())\n .add(this.#maxExecutionMs, 'millisecond')\n .toISOString();\n const issued = await this.#authority.issue({\n scope: authorization.scope,\n runtimeSessionId,\n invocationId: input.executionId,\n workflow: HEARTBEAT_TASK_WORKFLOW,\n mcp: { allowedTools: authorization.allowedTools },\n });\n const mcpCapability = issued.mcpCapability();\n if (!mcpCapability || !issued.metadata.mcp) {\n throw new Error(\n 'Hosted heartbeat execution requires an MCP-capable authority.',\n );\n }\n\n return HostedHeartbeatDelegationSchema.parse({\n schemaVersion: 1,\n taskId: input.taskId,\n executionId: input.executionId,\n scope: authorization.scope,\n runtimeSessionId,\n deadlineAt,\n authority: {\n metadata: issued.metadata,\n executionAssertion: issued.executionAssertion(),\n mcpCapability,\n },\n });\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
- export { HOSTED_HEARTBEAT_COORDINATOR_PATHS, HOSTED_HEARTBEAT_DELEGATIONS_PATH, HostedHeartbeatCoordinatorRunViewSchema, HostedHeartbeatCoordinatorStateResponseSchema, HostedHeartbeatCoordinatorStateSchema, HostedHeartbeatCoordinatorTaskDetailSchema, HostedHeartbeatCoordinatorTaskInputSchema, HostedHeartbeatCoordinatorTaskListSchema, HostedHeartbeatCoordinatorTaskResultSchema, HostedHeartbeatCoordinatorTaskStatusSchema, HostedHeartbeatCoordinatorTaskViewSchema, HostedHeartbeatDelegationAuthorizationSchema, HostedHeartbeatDelegationRequestSchema, HostedHeartbeatDelegationSchema, HostedHeartbeatDesiredTaskCatalogSchema, HostedHeartbeatDesiredTaskSchema, } from './contracts.js';
2
- export type { HostedHeartbeatCoordinatorTaskInput, HostedHeartbeatCoordinatorRunView, HostedHeartbeatCoordinatorState, HostedHeartbeatCoordinatorTaskDetail, HostedHeartbeatCoordinatorTaskView, HostedHeartbeatDelegation, HostedHeartbeatDelegationAuthorization, HostedHeartbeatDelegationRequest, HostedHeartbeatDesiredTask, HostedHeartbeatDesiredTaskCatalog, } from './contracts.js';
1
+ export { HOSTED_HEARTBEAT_COORDINATOR_PATHS, HOSTED_HEARTBEAT_EXECUTION_PATHS, HostedHeartbeatCoordinatorRunViewSchema, HostedHeartbeatCoordinatorStateResponseSchema, HostedHeartbeatCoordinatorStateSchema, HostedHeartbeatCoordinatorTaskDetailSchema, HostedHeartbeatCoordinatorTaskInputSchema, HostedHeartbeatCoordinatorTaskListSchema, HostedHeartbeatCoordinatorTaskResultSchema, HostedHeartbeatCoordinatorTaskStatusSchema, HostedHeartbeatCoordinatorTaskViewSchema, HostedHeartbeatDelegationSchema, HostedHeartbeatExecutionAuthorizationSchema, HostedHeartbeatExecutionDispositionSchema, HostedHeartbeatExecutionPreparationDecisionSchema, HostedHeartbeatExecutionPreparationRequestSchema, HostedHeartbeatExecutionPreparationSchema, HostedHeartbeatExecutionResultSchema, HostedHeartbeatExecutionSettlementRequestSchema, HostedHeartbeatExecutionSettlementSchema, HostedHeartbeatDesiredTaskCatalogSchema, HostedHeartbeatDesiredTaskSchema, } from './contracts.js';
2
+ export type { HostedHeartbeatCoordinatorTaskInput, HostedHeartbeatCoordinatorRunView, HostedHeartbeatCoordinatorState, HostedHeartbeatCoordinatorTaskDetail, HostedHeartbeatCoordinatorTaskView, HostedHeartbeatDelegation, HostedHeartbeatExecutionAuthorization, HostedHeartbeatExecutionDisposition, HostedHeartbeatExecutionPreparation, HostedHeartbeatExecutionPreparationDecision, HostedHeartbeatExecutionPreparationRequest, HostedHeartbeatExecutionResult, HostedHeartbeatExecutionSettlement, HostedHeartbeatExecutionSettlementRequest, HostedHeartbeatDesiredTask, HostedHeartbeatDesiredTaskCatalog, } from './contracts.js';
3
3
  export { HostedHeartbeatCoordinatorClient, HostedHeartbeatCoordinatorRequestError, } from './hosted-heartbeat-coordinator-client.js';
4
- export { HostedHeartbeatDelegatedExecutionTransport, HostedHeartbeatDelegationClient, HostedHeartbeatDelegationRequestError, } from './hosted-heartbeat-delegation-client.js';
5
- export { HostedHeartbeatDelegationRejectedError, HostedHeartbeatDelegationService, } from './hosted-heartbeat-delegation-service.js';
4
+ export { HostedHeartbeatDelegatedExecution, HostedHeartbeatExecutionClient, HostedHeartbeatExecutionRequestError, } from './hosted-heartbeat-execution-client.js';
5
+ export { HostedHeartbeatExecutionService, } from './hosted-heartbeat-execution-service.js';
6
6
  export { HostedHeartbeatTaskReconciler } from './hosted-heartbeat-task-reconciler.js';
7
7
  export { createHostedRuntimeSessionId } from './runtime-session.js';
8
- export type { HostedHeartbeatCoordinatorClientConfig, HostedHeartbeatCoordinatorTaskApi, HostedHeartbeatDelegatedExecutionTransportConfig, HostedHeartbeatDelegatedExecutionTransportPort, HostedHeartbeatDelegationAuthorizationInput, HostedHeartbeatDelegationAuthorizer, HostedHeartbeatDelegationClientConfig, HostedHeartbeatDelegationIssuer, HostedHeartbeatDelegationServiceConfig, HostedHeartbeatTaskReconcilerConfig, HostedHeartbeatTaskReconciliation, HostedHeartbeatTaskReconciliationInput, } from './types.js';
8
+ export type { HostedHeartbeatCoordinatorClientConfig, HostedHeartbeatCoordinatorTaskApi, HostedHeartbeatCoordinatorExecutionContext, HostedHeartbeatDelegatedExecutionConfig, HostedHeartbeatExecutionTransportPort, HostedHeartbeatExecutionApi, HostedHeartbeatExecutionClientConfig, HostedHeartbeatExecutionPreparationInput, HostedHeartbeatExecutionServiceConfig, HostedHeartbeatExecutionSettlementInput, HostedHeartbeatProductExecutionLifecycle, HostedHeartbeatTaskReconcilerConfig, HostedHeartbeatTaskReconciliation, HostedHeartbeatTaskReconciliationInput, } from './types.js';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,iCAAiC,EACjC,uCAAuC,EACvC,6CAA6C,EAC7C,qCAAqC,EACrC,0CAA0C,EAC1C,yCAAyC,EACzC,wCAAwC,EACxC,0CAA0C,EAC1C,0CAA0C,EAC1C,wCAAwC,EACxC,4CAA4C,EAC5C,sCAAsC,EACtC,+BAA+B,EAC/B,uCAAuC,EACvC,gCAAgC,GACjC,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,mCAAmC,EACnC,iCAAiC,EACjC,+BAA+B,EAC/B,oCAAoC,EACpC,kCAAkC,EAClC,yBAAyB,EACzB,sCAAsC,EACtC,gCAAgC,EAChC,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,0CAA0C,EAC1C,+BAA+B,EAC/B,qCAAqC,GACtC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,sCAAsC,EACtC,gCAAgC,GACjC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EACV,sCAAsC,EACtC,iCAAiC,EACjC,gDAAgD,EAChD,8CAA8C,EAC9C,2CAA2C,EAC3C,mCAAmC,EACnC,qCAAqC,EACrC,+BAA+B,EAC/B,sCAAsC,EACtC,mCAAmC,EACnC,iCAAiC,EACjC,sCAAsC,GACvC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,gCAAgC,EAChC,uCAAuC,EACvC,6CAA6C,EAC7C,qCAAqC,EACrC,0CAA0C,EAC1C,yCAAyC,EACzC,wCAAwC,EACxC,0CAA0C,EAC1C,0CAA0C,EAC1C,wCAAwC,EACxC,+BAA+B,EAC/B,2CAA2C,EAC3C,yCAAyC,EACzC,iDAAiD,EACjD,gDAAgD,EAChD,yCAAyC,EACzC,oCAAoC,EACpC,+CAA+C,EAC/C,wCAAwC,EACxC,uCAAuC,EACvC,gCAAgC,GACjC,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,mCAAmC,EACnC,iCAAiC,EACjC,+BAA+B,EAC/B,oCAAoC,EACpC,kCAAkC,EAClC,yBAAyB,EACzB,qCAAqC,EACrC,mCAAmC,EACnC,mCAAmC,EACnC,2CAA2C,EAC3C,0CAA0C,EAC1C,8BAA8B,EAC9B,kCAAkC,EAClC,yCAAyC,EACzC,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,oCAAoC,GACrC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,+BAA+B,GAChC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EACV,sCAAsC,EACtC,iCAAiC,EACjC,0CAA0C,EAC1C,uCAAuC,EACvC,qCAAqC,EACrC,2BAA2B,EAC3B,oCAAoC,EACpC,wCAAwC,EACxC,qCAAqC,EACrC,uCAAuC,EACvC,wCAAwC,EACxC,mCAAmC,EACnC,iCAAiC,EACjC,sCAAsC,GACvC,MAAM,YAAY,CAAC"}
@@ -1,7 +1,7 @@
1
- export { HOSTED_HEARTBEAT_COORDINATOR_PATHS, HOSTED_HEARTBEAT_DELEGATIONS_PATH, HostedHeartbeatCoordinatorRunViewSchema, HostedHeartbeatCoordinatorStateResponseSchema, HostedHeartbeatCoordinatorStateSchema, HostedHeartbeatCoordinatorTaskDetailSchema, HostedHeartbeatCoordinatorTaskInputSchema, HostedHeartbeatCoordinatorTaskListSchema, HostedHeartbeatCoordinatorTaskResultSchema, HostedHeartbeatCoordinatorTaskStatusSchema, HostedHeartbeatCoordinatorTaskViewSchema, HostedHeartbeatDelegationAuthorizationSchema, HostedHeartbeatDelegationRequestSchema, HostedHeartbeatDelegationSchema, HostedHeartbeatDesiredTaskCatalogSchema, HostedHeartbeatDesiredTaskSchema, } from './contracts.js';
1
+ export { HOSTED_HEARTBEAT_COORDINATOR_PATHS, HOSTED_HEARTBEAT_EXECUTION_PATHS, HostedHeartbeatCoordinatorRunViewSchema, HostedHeartbeatCoordinatorStateResponseSchema, HostedHeartbeatCoordinatorStateSchema, HostedHeartbeatCoordinatorTaskDetailSchema, HostedHeartbeatCoordinatorTaskInputSchema, HostedHeartbeatCoordinatorTaskListSchema, HostedHeartbeatCoordinatorTaskResultSchema, HostedHeartbeatCoordinatorTaskStatusSchema, HostedHeartbeatCoordinatorTaskViewSchema, HostedHeartbeatDelegationSchema, HostedHeartbeatExecutionAuthorizationSchema, HostedHeartbeatExecutionDispositionSchema, HostedHeartbeatExecutionPreparationDecisionSchema, HostedHeartbeatExecutionPreparationRequestSchema, HostedHeartbeatExecutionPreparationSchema, HostedHeartbeatExecutionResultSchema, HostedHeartbeatExecutionSettlementRequestSchema, HostedHeartbeatExecutionSettlementSchema, HostedHeartbeatDesiredTaskCatalogSchema, HostedHeartbeatDesiredTaskSchema, } from './contracts.js';
2
2
  export { HostedHeartbeatCoordinatorClient, HostedHeartbeatCoordinatorRequestError, } from './hosted-heartbeat-coordinator-client.js';
3
- export { HostedHeartbeatDelegatedExecutionTransport, HostedHeartbeatDelegationClient, HostedHeartbeatDelegationRequestError, } from './hosted-heartbeat-delegation-client.js';
4
- export { HostedHeartbeatDelegationRejectedError, HostedHeartbeatDelegationService, } from './hosted-heartbeat-delegation-service.js';
3
+ export { HostedHeartbeatDelegatedExecution, HostedHeartbeatExecutionClient, HostedHeartbeatExecutionRequestError, } from './hosted-heartbeat-execution-client.js';
4
+ export { HostedHeartbeatExecutionService, } from './hosted-heartbeat-execution-service.js';
5
5
  export { HostedHeartbeatTaskReconciler } from './hosted-heartbeat-task-reconciler.js';
6
6
  export { createHostedRuntimeSessionId } from './runtime-session.js';
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,iCAAiC,EACjC,uCAAuC,EACvC,6CAA6C,EAC7C,qCAAqC,EACrC,0CAA0C,EAC1C,yCAAyC,EACzC,wCAAwC,EACxC,0CAA0C,EAC1C,0CAA0C,EAC1C,wCAAwC,EACxC,4CAA4C,EAC5C,sCAAsC,EACtC,+BAA+B,EAC/B,uCAAuC,EACvC,gCAAgC,GACjC,MAAM,gBAAgB,CAAC;AAaxB,OAAO,EACL,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,0CAA0C,EAC1C,+BAA+B,EAC/B,qCAAqC,GACtC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,sCAAsC,EACtC,gCAAgC,GACjC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC","sourcesContent":["export {\n HOSTED_HEARTBEAT_COORDINATOR_PATHS,\n HOSTED_HEARTBEAT_DELEGATIONS_PATH,\n HostedHeartbeatCoordinatorRunViewSchema,\n HostedHeartbeatCoordinatorStateResponseSchema,\n HostedHeartbeatCoordinatorStateSchema,\n HostedHeartbeatCoordinatorTaskDetailSchema,\n HostedHeartbeatCoordinatorTaskInputSchema,\n HostedHeartbeatCoordinatorTaskListSchema,\n HostedHeartbeatCoordinatorTaskResultSchema,\n HostedHeartbeatCoordinatorTaskStatusSchema,\n HostedHeartbeatCoordinatorTaskViewSchema,\n HostedHeartbeatDelegationAuthorizationSchema,\n HostedHeartbeatDelegationRequestSchema,\n HostedHeartbeatDelegationSchema,\n HostedHeartbeatDesiredTaskCatalogSchema,\n HostedHeartbeatDesiredTaskSchema,\n} from './contracts.js';\nexport type {\n HostedHeartbeatCoordinatorTaskInput,\n HostedHeartbeatCoordinatorRunView,\n HostedHeartbeatCoordinatorState,\n HostedHeartbeatCoordinatorTaskDetail,\n HostedHeartbeatCoordinatorTaskView,\n HostedHeartbeatDelegation,\n HostedHeartbeatDelegationAuthorization,\n HostedHeartbeatDelegationRequest,\n HostedHeartbeatDesiredTask,\n HostedHeartbeatDesiredTaskCatalog,\n} from './contracts.js';\nexport {\n HostedHeartbeatCoordinatorClient,\n HostedHeartbeatCoordinatorRequestError,\n} from './hosted-heartbeat-coordinator-client.js';\nexport {\n HostedHeartbeatDelegatedExecutionTransport,\n HostedHeartbeatDelegationClient,\n HostedHeartbeatDelegationRequestError,\n} from './hosted-heartbeat-delegation-client.js';\nexport {\n HostedHeartbeatDelegationRejectedError,\n HostedHeartbeatDelegationService,\n} from './hosted-heartbeat-delegation-service.js';\nexport { HostedHeartbeatTaskReconciler } from './hosted-heartbeat-task-reconciler.js';\nexport { createHostedRuntimeSessionId } from './runtime-session.js';\nexport type {\n HostedHeartbeatCoordinatorClientConfig,\n HostedHeartbeatCoordinatorTaskApi,\n HostedHeartbeatDelegatedExecutionTransportConfig,\n HostedHeartbeatDelegatedExecutionTransportPort,\n HostedHeartbeatDelegationAuthorizationInput,\n HostedHeartbeatDelegationAuthorizer,\n HostedHeartbeatDelegationClientConfig,\n HostedHeartbeatDelegationIssuer,\n HostedHeartbeatDelegationServiceConfig,\n HostedHeartbeatTaskReconcilerConfig,\n HostedHeartbeatTaskReconciliation,\n HostedHeartbeatTaskReconciliationInput,\n} from './types.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,gCAAgC,EAChC,uCAAuC,EACvC,6CAA6C,EAC7C,qCAAqC,EACrC,0CAA0C,EAC1C,yCAAyC,EACzC,wCAAwC,EACxC,0CAA0C,EAC1C,0CAA0C,EAC1C,wCAAwC,EACxC,+BAA+B,EAC/B,2CAA2C,EAC3C,yCAAyC,EACzC,iDAAiD,EACjD,gDAAgD,EAChD,yCAAyC,EACzC,oCAAoC,EACpC,+CAA+C,EAC/C,wCAAwC,EACxC,uCAAuC,EACvC,gCAAgC,GACjC,MAAM,gBAAgB,CAAC;AAmBxB,OAAO,EACL,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,oCAAoC,GACrC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,+BAA+B,GAChC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC","sourcesContent":["export {\n HOSTED_HEARTBEAT_COORDINATOR_PATHS,\n HOSTED_HEARTBEAT_EXECUTION_PATHS,\n HostedHeartbeatCoordinatorRunViewSchema,\n HostedHeartbeatCoordinatorStateResponseSchema,\n HostedHeartbeatCoordinatorStateSchema,\n HostedHeartbeatCoordinatorTaskDetailSchema,\n HostedHeartbeatCoordinatorTaskInputSchema,\n HostedHeartbeatCoordinatorTaskListSchema,\n HostedHeartbeatCoordinatorTaskResultSchema,\n HostedHeartbeatCoordinatorTaskStatusSchema,\n HostedHeartbeatCoordinatorTaskViewSchema,\n HostedHeartbeatDelegationSchema,\n HostedHeartbeatExecutionAuthorizationSchema,\n HostedHeartbeatExecutionDispositionSchema,\n HostedHeartbeatExecutionPreparationDecisionSchema,\n HostedHeartbeatExecutionPreparationRequestSchema,\n HostedHeartbeatExecutionPreparationSchema,\n HostedHeartbeatExecutionResultSchema,\n HostedHeartbeatExecutionSettlementRequestSchema,\n HostedHeartbeatExecutionSettlementSchema,\n HostedHeartbeatDesiredTaskCatalogSchema,\n HostedHeartbeatDesiredTaskSchema,\n} from './contracts.js';\nexport type {\n HostedHeartbeatCoordinatorTaskInput,\n HostedHeartbeatCoordinatorRunView,\n HostedHeartbeatCoordinatorState,\n HostedHeartbeatCoordinatorTaskDetail,\n HostedHeartbeatCoordinatorTaskView,\n HostedHeartbeatDelegation,\n HostedHeartbeatExecutionAuthorization,\n HostedHeartbeatExecutionDisposition,\n HostedHeartbeatExecutionPreparation,\n HostedHeartbeatExecutionPreparationDecision,\n HostedHeartbeatExecutionPreparationRequest,\n HostedHeartbeatExecutionResult,\n HostedHeartbeatExecutionSettlement,\n HostedHeartbeatExecutionSettlementRequest,\n HostedHeartbeatDesiredTask,\n HostedHeartbeatDesiredTaskCatalog,\n} from './contracts.js';\nexport {\n HostedHeartbeatCoordinatorClient,\n HostedHeartbeatCoordinatorRequestError,\n} from './hosted-heartbeat-coordinator-client.js';\nexport {\n HostedHeartbeatDelegatedExecution,\n HostedHeartbeatExecutionClient,\n HostedHeartbeatExecutionRequestError,\n} from './hosted-heartbeat-execution-client.js';\nexport {\n HostedHeartbeatExecutionService,\n} from './hosted-heartbeat-execution-service.js';\nexport { HostedHeartbeatTaskReconciler } from './hosted-heartbeat-task-reconciler.js';\nexport { createHostedRuntimeSessionId } from './runtime-session.js';\nexport type {\n HostedHeartbeatCoordinatorClientConfig,\n HostedHeartbeatCoordinatorTaskApi,\n HostedHeartbeatCoordinatorExecutionContext,\n HostedHeartbeatDelegatedExecutionConfig,\n HostedHeartbeatExecutionTransportPort,\n HostedHeartbeatExecutionApi,\n HostedHeartbeatExecutionClientConfig,\n HostedHeartbeatExecutionPreparationInput,\n HostedHeartbeatExecutionServiceConfig,\n HostedHeartbeatExecutionSettlementInput,\n HostedHeartbeatProductExecutionLifecycle,\n HostedHeartbeatTaskReconcilerConfig,\n HostedHeartbeatTaskReconciliation,\n HostedHeartbeatTaskReconciliationInput,\n} from './types.js';\n"]}
@@ -0,0 +1,11 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { NodeHostedHeartbeatExecutionHttpHandler, NodeHostedHeartbeatExecutionHttpServiceConfig } from './types.js';
3
+ /** Standard authenticated Node HTTP edge for product-owned work lifecycle. */
4
+ export declare class NodeHostedHeartbeatExecutionHttpService implements NodeHostedHeartbeatExecutionHttpHandler {
5
+ #private;
6
+ constructor(config: NodeHostedHeartbeatExecutionHttpServiceConfig);
7
+ handle(request: IncomingMessage, response: ServerResponse): boolean;
8
+ handleExecution(request: IncomingMessage, response: ServerResponse): void;
9
+ close(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=execution-http-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-http-service.d.ts","sourceRoot":"","sources":["../../../src/coordinator/node/execution-http-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkBjE,OAAO,KAAK,EAEV,uCAAuC,EACvC,6CAA6C,EAC9C,MAAM,YAAY,CAAC;AAYpB,8EAA8E;AAC9E,qBAAa,uCACb,YAAW,uCAAuC;;gBAcpC,MAAM,EAAE,6CAA6C;IAmBjE,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO;IASnE,eAAe,CACb,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,cAAc,GACvB,IAAI;IAUP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA2IvB"}