@tomflow/proflow-agent-gateway 0.1.3 → 0.1.4

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.
@@ -0,0 +1,26 @@
1
+ # agent-gateway configuration
2
+
3
+ Canonical public config: `.proflow/config/agent-gateway.json`
4
+
5
+ This file is Workspace-owned data. `platform uninstall` does not delete it. Values are JSON strings. Raw secrets must not be stored here; `secretRef` fields contain opaque references only.
6
+
7
+ ## Fields
8
+
9
+ | Key | Type | Required | Sensitive | Source | Meaning |
10
+ |---|---|---:|---:|---|---|
11
+ | `localBaseUrl` | `url` | yes | no | User or owning external/runtime Module supplies the reachable endpoint URL. | Loopback HTTP listener URL owned by Agent Gateway and targeted by the public ingress resource |
12
+ | `publicBaseUrl` | `url` | yes | no | User or owning external/runtime Module supplies the reachable endpoint URL. | Public HTTPS URL supplied by the dev-tunnel resource |
13
+ | `downstreamCredentialFile` | `path` | yes | yes | User or owning Module supplies an absolute/local path that exists on this Workspace. | File containing the dedicated Gateway-to-platform-host transport credential |
14
+ | `publicIngressModuleRef` | `moduleRef` | no | no | Another installed ProFlow Module reference selected from `platform docs` / Module topology. | External resource module governing the public ingress |
15
+
16
+ ## Materialize
17
+
18
+ Create or update the canonical JSON object at:
19
+
20
+ `.proflow/config/agent-gateway.json`
21
+
22
+ Use only declared keys and string values. Do not create a second Platform configuration database.
23
+
24
+ ## Base completion check
25
+
26
+ Run `platform modules`. This Module should no longer report required keys in `missingConfig`. `platform start` performs the authoritative Module-owned validation before starting anything.
@@ -13,14 +13,14 @@ type GatewayProcess = {
13
13
  }>;
14
14
  status(): unknown;
15
15
  };
16
- export declare function createBehaviorAdapter(service?: GatewayProcess): {
16
+ export declare function createBehaviorAdapter(service?: GatewayProcess, config?: Record<string, string>, configValid?: boolean): {
17
17
  describe: () => {
18
18
  result: {
19
19
  readonly contract: "deployment.result.v1";
20
20
  readonly ok: true;
21
21
  readonly status: "SUCCEEDED";
22
22
  readonly moduleRef: "agent-gateway";
23
- readonly moduleVersion: "0.1.3";
23
+ readonly moduleVersion: "0.1.4";
24
24
  };
25
25
  observedEffects: never[];
26
26
  };
@@ -30,49 +30,22 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
30
30
  readonly ok: true;
31
31
  readonly status: "SUCCEEDED";
32
32
  readonly moduleRef: "agent-gateway";
33
- readonly moduleVersion: "0.1.3";
33
+ readonly moduleVersion: "0.1.4";
34
34
  };
35
35
  observedEffects: never[];
36
36
  };
37
37
  status: () => Promise<{
38
38
  result: {
39
- readonly contract: "deployment.result.v1";
40
- readonly moduleRef: "agent-gateway";
41
- readonly moduleVersion: "0.1.3";
42
- readonly ok: false;
43
- readonly status: "ACTION_REQUIRED";
44
- readonly actionRequired: {
45
- readonly action: "compose-gateway";
46
- readonly description: "Provide owner ports and process configuration";
47
- };
48
- } | {
49
39
  contract: "deployment.result.v1";
50
40
  ok: true;
51
41
  status: "SUCCEEDED";
52
42
  moduleRef: "agent-gateway";
53
- moduleVersion: "0.1.3";
54
- data: unknown;
55
- checks: {
56
- id: string;
57
- status: "FAIL" | "PASS";
58
- message: string;
59
- }[];
60
- } | {
61
- contract: "deployment.result.v1";
62
- moduleRef: "agent-gateway";
63
- moduleVersion: "0.1.3";
64
- ok: false;
65
- status: "ACTION_REQUIRED";
66
- actionRequired: {
67
- action: string;
68
- description: string;
43
+ moduleVersion: "0.1.4";
44
+ data: {
45
+ configStatus: "INCOMPLETE" | "INVALID" | "READY";
46
+ missingConfig?: string[] | undefined;
47
+ runtimeStatus: "FAILED" | "RUNNING" | "STOPPED" | "UNKNOWN";
69
48
  };
70
- data: unknown;
71
- checks: {
72
- id: string;
73
- status: "FAIL" | "PASS";
74
- message: string;
75
- }[];
76
49
  };
77
50
  observedEffects: never[];
78
51
  }>;
@@ -82,7 +55,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
82
55
  ok: true;
83
56
  status: "SUCCEEDED";
84
57
  moduleRef: "agent-gateway";
85
- moduleVersion: "0.1.3";
58
+ moduleVersion: "0.1.4";
86
59
  checks: {
87
60
  id: string;
88
61
  status: "FAIL" | "PASS";
@@ -91,7 +64,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
91
64
  } | {
92
65
  contract: "deployment.result.v1";
93
66
  moduleRef: "agent-gateway";
94
- moduleVersion: "0.1.3";
67
+ moduleVersion: "0.1.4";
95
68
  ok: false;
96
69
  status: "ACTION_REQUIRED";
97
70
  actionRequired: {
@@ -106,7 +79,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
106
79
  } | {
107
80
  contract: "deployment.result.v1";
108
81
  moduleRef: "agent-gateway";
109
- moduleVersion: "0.1.3";
82
+ moduleVersion: "0.1.4";
110
83
  ok: false;
111
84
  status: "ACTION_REQUIRED";
112
85
  actionRequired: {
@@ -127,7 +100,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
127
100
  readonly ok: true;
128
101
  readonly status: "SUCCEEDED";
129
102
  readonly moduleRef: "agent-gateway";
130
- readonly moduleVersion: "0.1.3";
103
+ readonly moduleVersion: "0.1.4";
131
104
  };
132
105
  observedEffects: never[];
133
106
  };
@@ -137,7 +110,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
137
110
  ok: true;
138
111
  status: "SUCCEEDED";
139
112
  moduleRef: "agent-gateway";
140
- moduleVersion: "0.1.3";
113
+ moduleVersion: "0.1.4";
141
114
  data: {
142
115
  host: string;
143
116
  port: number;
@@ -145,7 +118,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
145
118
  } | {
146
119
  contract: "deployment.result.v1";
147
120
  moduleRef: "agent-gateway";
148
- moduleVersion: "0.1.3";
121
+ moduleVersion: "0.1.4";
149
122
  status: "ACTION_REQUIRED";
150
123
  ok: boolean;
151
124
  actionRequired: {
@@ -161,11 +134,11 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
161
134
  readonly ok: true;
162
135
  readonly status: "SUCCEEDED";
163
136
  readonly moduleRef: "agent-gateway";
164
- readonly moduleVersion: "0.1.3";
137
+ readonly moduleVersion: "0.1.4";
165
138
  } | {
166
139
  readonly contract: "deployment.result.v1";
167
140
  readonly moduleRef: "agent-gateway";
168
- readonly moduleVersion: "0.1.3";
141
+ readonly moduleVersion: "0.1.4";
169
142
  readonly ok: false;
170
143
  readonly status: "ACTION_REQUIRED";
171
144
  readonly actionRequired: {
@@ -181,7 +154,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
181
154
  readonly ok: true;
182
155
  readonly status: "SUCCEEDED";
183
156
  readonly moduleRef: "agent-gateway";
184
- readonly moduleVersion: "0.1.3";
157
+ readonly moduleVersion: "0.1.4";
185
158
  };
186
159
  observedEffects: string[];
187
160
  }>;
@@ -191,7 +164,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
191
164
  ok: true;
192
165
  status: "SUCCEEDED";
193
166
  moduleRef: "agent-gateway";
194
- moduleVersion: "0.1.3";
167
+ moduleVersion: "0.1.4";
195
168
  data: {
196
169
  host: string;
197
170
  port: number;
@@ -199,7 +172,7 @@ export declare function createBehaviorAdapter(service?: GatewayProcess): {
199
172
  } | {
200
173
  contract: "deployment.result.v1";
201
174
  moduleRef: "agent-gateway";
202
- moduleVersion: "0.1.3";
175
+ moduleVersion: "0.1.4";
203
176
  status: "ACTION_REQUIRED";
204
177
  ok: boolean;
205
178
  actionRequired: {
@@ -217,7 +190,7 @@ export declare const behaviorAdapter: {
217
190
  readonly ok: true;
218
191
  readonly status: "SUCCEEDED";
219
192
  readonly moduleRef: "agent-gateway";
220
- readonly moduleVersion: "0.1.3";
193
+ readonly moduleVersion: "0.1.4";
221
194
  };
222
195
  observedEffects: never[];
223
196
  };
@@ -227,49 +200,22 @@ export declare const behaviorAdapter: {
227
200
  readonly ok: true;
228
201
  readonly status: "SUCCEEDED";
229
202
  readonly moduleRef: "agent-gateway";
230
- readonly moduleVersion: "0.1.3";
203
+ readonly moduleVersion: "0.1.4";
231
204
  };
232
205
  observedEffects: never[];
233
206
  };
234
207
  status: () => Promise<{
235
208
  result: {
236
- readonly contract: "deployment.result.v1";
237
- readonly moduleRef: "agent-gateway";
238
- readonly moduleVersion: "0.1.3";
239
- readonly ok: false;
240
- readonly status: "ACTION_REQUIRED";
241
- readonly actionRequired: {
242
- readonly action: "compose-gateway";
243
- readonly description: "Provide owner ports and process configuration";
244
- };
245
- } | {
246
209
  contract: "deployment.result.v1";
247
210
  ok: true;
248
211
  status: "SUCCEEDED";
249
212
  moduleRef: "agent-gateway";
250
- moduleVersion: "0.1.3";
251
- data: unknown;
252
- checks: {
253
- id: string;
254
- status: "FAIL" | "PASS";
255
- message: string;
256
- }[];
257
- } | {
258
- contract: "deployment.result.v1";
259
- moduleRef: "agent-gateway";
260
- moduleVersion: "0.1.3";
261
- ok: false;
262
- status: "ACTION_REQUIRED";
263
- actionRequired: {
264
- action: string;
265
- description: string;
213
+ moduleVersion: "0.1.4";
214
+ data: {
215
+ configStatus: "INCOMPLETE" | "INVALID" | "READY";
216
+ missingConfig?: string[] | undefined;
217
+ runtimeStatus: "FAILED" | "RUNNING" | "STOPPED" | "UNKNOWN";
266
218
  };
267
- data: unknown;
268
- checks: {
269
- id: string;
270
- status: "FAIL" | "PASS";
271
- message: string;
272
- }[];
273
219
  };
274
220
  observedEffects: never[];
275
221
  }>;
@@ -279,7 +225,7 @@ export declare const behaviorAdapter: {
279
225
  ok: true;
280
226
  status: "SUCCEEDED";
281
227
  moduleRef: "agent-gateway";
282
- moduleVersion: "0.1.3";
228
+ moduleVersion: "0.1.4";
283
229
  checks: {
284
230
  id: string;
285
231
  status: "FAIL" | "PASS";
@@ -288,7 +234,7 @@ export declare const behaviorAdapter: {
288
234
  } | {
289
235
  contract: "deployment.result.v1";
290
236
  moduleRef: "agent-gateway";
291
- moduleVersion: "0.1.3";
237
+ moduleVersion: "0.1.4";
292
238
  ok: false;
293
239
  status: "ACTION_REQUIRED";
294
240
  actionRequired: {
@@ -303,7 +249,7 @@ export declare const behaviorAdapter: {
303
249
  } | {
304
250
  contract: "deployment.result.v1";
305
251
  moduleRef: "agent-gateway";
306
- moduleVersion: "0.1.3";
252
+ moduleVersion: "0.1.4";
307
253
  ok: false;
308
254
  status: "ACTION_REQUIRED";
309
255
  actionRequired: {
@@ -324,7 +270,7 @@ export declare const behaviorAdapter: {
324
270
  readonly ok: true;
325
271
  readonly status: "SUCCEEDED";
326
272
  readonly moduleRef: "agent-gateway";
327
- readonly moduleVersion: "0.1.3";
273
+ readonly moduleVersion: "0.1.4";
328
274
  };
329
275
  observedEffects: never[];
330
276
  };
@@ -334,7 +280,7 @@ export declare const behaviorAdapter: {
334
280
  ok: true;
335
281
  status: "SUCCEEDED";
336
282
  moduleRef: "agent-gateway";
337
- moduleVersion: "0.1.3";
283
+ moduleVersion: "0.1.4";
338
284
  data: {
339
285
  host: string;
340
286
  port: number;
@@ -342,7 +288,7 @@ export declare const behaviorAdapter: {
342
288
  } | {
343
289
  contract: "deployment.result.v1";
344
290
  moduleRef: "agent-gateway";
345
- moduleVersion: "0.1.3";
291
+ moduleVersion: "0.1.4";
346
292
  status: "ACTION_REQUIRED";
347
293
  ok: boolean;
348
294
  actionRequired: {
@@ -358,11 +304,11 @@ export declare const behaviorAdapter: {
358
304
  readonly ok: true;
359
305
  readonly status: "SUCCEEDED";
360
306
  readonly moduleRef: "agent-gateway";
361
- readonly moduleVersion: "0.1.3";
307
+ readonly moduleVersion: "0.1.4";
362
308
  } | {
363
309
  readonly contract: "deployment.result.v1";
364
310
  readonly moduleRef: "agent-gateway";
365
- readonly moduleVersion: "0.1.3";
311
+ readonly moduleVersion: "0.1.4";
366
312
  readonly ok: false;
367
313
  readonly status: "ACTION_REQUIRED";
368
314
  readonly actionRequired: {
@@ -378,7 +324,7 @@ export declare const behaviorAdapter: {
378
324
  readonly ok: true;
379
325
  readonly status: "SUCCEEDED";
380
326
  readonly moduleRef: "agent-gateway";
381
- readonly moduleVersion: "0.1.3";
327
+ readonly moduleVersion: "0.1.4";
382
328
  };
383
329
  observedEffects: string[];
384
330
  }>;
@@ -388,7 +334,7 @@ export declare const behaviorAdapter: {
388
334
  ok: true;
389
335
  status: "SUCCEEDED";
390
336
  moduleRef: "agent-gateway";
391
- moduleVersion: "0.1.3";
337
+ moduleVersion: "0.1.4";
392
338
  data: {
393
339
  host: string;
394
340
  port: number;
@@ -396,7 +342,7 @@ export declare const behaviorAdapter: {
396
342
  } | {
397
343
  contract: "deployment.result.v1";
398
344
  moduleRef: "agent-gateway";
399
- moduleVersion: "0.1.3";
345
+ moduleVersion: "0.1.4";
400
346
  status: "ACTION_REQUIRED";
401
347
  ok: boolean;
402
348
  actionRequired: {
@@ -407,20 +353,6 @@ export declare const behaviorAdapter: {
407
353
  observedEffects: string[];
408
354
  }>;
409
355
  };
410
- export declare function createServiceProcessBinding(input: {
411
- moduleRef: string;
412
- config: Record<string, string>;
413
- workspaceRoot: string;
414
- configByModuleRef: ReadonlyMap<string, Record<string, string>>;
415
- }): Promise<{
416
- serviceProcess: {
417
- contract: "deployment.service-process.v1";
418
- bin: "proflow-agent-gateway";
419
- startCommand: "start";
420
- config: Record<string, unknown>;
421
- };
422
- behaviorAdapter: Record<string, unknown>;
423
- } | undefined>;
424
356
  export declare function createProductionBinding(input: {
425
357
  moduleRef: string;
426
358
  config: Record<string, string>;
@@ -428,5 +360,5 @@ export declare function createProductionBinding(input: {
428
360
  configByModuleRef: ReadonlyMap<string, Record<string, string>>;
429
361
  }): Promise<{
430
362
  behaviorAdapter: Record<string, unknown>;
431
- } | undefined>;
363
+ }>;
432
364
  export {};
@@ -1,3 +1,4 @@
1
+ import { observeDeclaredModuleStatus } from "@tomflow/proflow-module-contract";
1
2
  import { descriptor } from "./descriptor.js";
2
3
  const base = {
3
4
  contract: "deployment.result.v1",
@@ -15,38 +16,16 @@ const unbound = {
15
16
  description: "Provide owner ports and process configuration",
16
17
  },
17
18
  };
18
- export function createBehaviorAdapter(service) {
19
+ export function createBehaviorAdapter(service, config, configValid = true) {
19
20
  return {
20
21
  describe: () => ({ result: base, observedEffects: [] }),
21
22
  preflight: () => ({ result: base, observedEffects: [] }),
22
23
  status: async () => {
23
- const processStatus = service?.status();
24
24
  const readiness = service ? await service.readiness() : undefined;
25
25
  const ready = readiness?.status === "READY";
26
+ const data = observeDeclaredModuleStatus(descriptor, config, ready ? "RUNNING" : service ? "FAILED" : "UNKNOWN", configValid);
26
27
  return {
27
- result: service
28
- ? {
29
- ...(ready
30
- ? base
31
- : {
32
- ...base,
33
- ok: false,
34
- status: "ACTION_REQUIRED",
35
- actionRequired: {
36
- action: "repair-gateway",
37
- description: "Gateway is not READY",
38
- },
39
- }),
40
- data: processStatus,
41
- checks: [
42
- {
43
- id: "gateway-readiness",
44
- status: ready ? "PASS" : "FAIL",
45
- message: `Gateway readiness is ${readiness?.status ?? "NOT_READY"}`,
46
- },
47
- ],
48
- }
49
- : unbound,
28
+ result: { ...base, data },
50
29
  observedEffects: [],
51
30
  };
52
31
  },
@@ -136,108 +115,62 @@ export function createBehaviorAdapter(service) {
136
115
  };
137
116
  }
138
117
  export const behaviorAdapter = createBehaviorAdapter();
139
- export async function createServiceProcessBinding(input) {
118
+ export async function createProductionBinding(input) {
119
+ const unboundBinding = (configValid = true) => ({
120
+ behaviorAdapter: createBehaviorAdapter(undefined, input.config, configValid),
121
+ });
140
122
  const localBaseUrl = input.config.localBaseUrl;
141
123
  const publicBaseUrl = input.config.publicBaseUrl;
142
124
  const downstreamCredentialFile = input.config.downstreamCredentialFile;
143
- const platformHost = input.configByModuleRef.get("platform-host");
144
- const executionRuntime = input.configByModuleRef.get("execution-runtime");
145
- const stateRoot = platformHost?.stateRoot;
146
- const downstreamBaseUrl = executionRuntime?.["identity.endpoint"];
147
- if (!localBaseUrl ||
148
- !publicBaseUrl ||
149
- !downstreamCredentialFile ||
150
- !stateRoot ||
151
- !downstreamBaseUrl) {
152
- return undefined;
125
+ if (!localBaseUrl || !publicBaseUrl || !downstreamCredentialFile)
126
+ return unboundBinding();
127
+ let listener;
128
+ let publicUrl;
129
+ try {
130
+ listener = new URL(localBaseUrl);
131
+ publicUrl = new URL(publicBaseUrl);
132
+ }
133
+ catch {
134
+ return unboundBinding(false);
153
135
  }
154
- const listener = new URL(localBaseUrl);
155
136
  if (listener.protocol !== "http:" ||
156
137
  !new Set(["127.0.0.1", "localhost", "::1", "[::1]"]).has(listener.hostname) ||
157
- listener.pathname !== "/")
158
- return undefined;
138
+ listener.pathname !== "/" ||
139
+ publicUrl.protocol !== "https:")
140
+ return unboundBinding(false);
159
141
  const port = listener.port === "" ? 80 : Number(listener.port);
160
142
  if (!Number.isInteger(port) || port <= 0 || port > 65_535)
161
- return undefined;
162
- const [{ join }, { parseAgentGatewayProcessConfig }] = await Promise.all([
163
- import("node:path"),
164
- import("../src/process.js"),
165
- ]);
166
- const processConfig = parseAgentGatewayProcessConfig({
167
- host: listener.hostname,
168
- port,
169
- publicBaseUrl,
170
- downstreamBaseUrl,
171
- credentialFile: join(stateRoot, "agent", "secrets", "role-credentials.json"),
172
- downstreamCredentialFile,
173
- });
174
- const probeService = {
175
- async start() {
176
- throw new Error("managed by Platform CLI service supervisor");
177
- },
178
- async stop() { },
179
- async restart() {
180
- throw new Error("managed by Platform CLI service supervisor");
181
- },
182
- async readiness() {
183
- try {
184
- const response = await fetch(new URL("/ready", listener));
185
- return {
186
- status: response.ok ? "READY" : "NOT_READY",
187
- };
188
- }
189
- catch {
190
- return { status: "NOT_READY" };
191
- }
192
- },
193
- status: () => ({
194
- endpoint: listener.href.replace(/\/$/, ""),
195
- managed: true,
196
- }),
197
- };
198
- return {
199
- serviceProcess: {
200
- contract: "deployment.service-process.v1",
201
- bin: "proflow-agent-gateway",
202
- startCommand: "start",
203
- config: processConfig,
204
- },
205
- behaviorAdapter: createBehaviorAdapter(probeService),
206
- };
207
- }
208
- export async function createProductionBinding(input) {
209
- const localBaseUrl = input.config.localBaseUrl;
210
- const publicBaseUrl = input.config.publicBaseUrl;
211
- const downstreamCredentialFile = input.config.downstreamCredentialFile;
143
+ return unboundBinding(false);
212
144
  const platformHost = input.configByModuleRef.get("platform-host");
213
145
  const executionRuntime = input.configByModuleRef.get("execution-runtime");
214
146
  const stateRoot = platformHost?.stateRoot;
215
147
  const downstreamBaseUrl = executionRuntime?.["identity.endpoint"];
216
- if (!localBaseUrl ||
217
- !publicBaseUrl ||
218
- !downstreamCredentialFile ||
219
- !stateRoot ||
220
- !downstreamBaseUrl) {
221
- return undefined;
148
+ if (!stateRoot || !downstreamBaseUrl)
149
+ return unboundBinding();
150
+ try {
151
+ const downstream = new URL(downstreamBaseUrl);
152
+ if (downstream.protocol !== "http:" ||
153
+ !["localhost", "127.0.0.1", "::1"].includes(downstream.hostname))
154
+ return unboundBinding();
155
+ }
156
+ catch {
157
+ return unboundBinding();
222
158
  }
223
- const listener = new URL(localBaseUrl);
224
- if (listener.protocol !== "http:" ||
225
- !new Set(["127.0.0.1", "localhost", "::1", "[::1]"]).has(listener.hostname) ||
226
- listener.pathname !== "/")
227
- return undefined;
228
- const port = listener.port === "" ? 80 : Number(listener.port);
229
- if (!Number.isInteger(port) || port <= 0 || port > 65_535)
230
- return undefined;
231
159
  const [{ join }, { createAgentGatewayProcess, parseAgentGatewayProcessConfig },] = await Promise.all([import("node:path"), import("../src/process.js")]);
232
- const service = await createAgentGatewayProcess({
233
- config: parseAgentGatewayProcessConfig({
160
+ let processConfig;
161
+ try {
162
+ processConfig = parseAgentGatewayProcessConfig({
234
163
  host: listener.hostname,
235
164
  port,
236
165
  publicBaseUrl,
237
166
  downstreamBaseUrl,
238
167
  credentialFile: join(stateRoot, "agent", "secrets", "role-credentials.json"),
239
168
  downstreamCredentialFile,
240
- }),
241
- });
242
- return { behaviorAdapter: createBehaviorAdapter(service) };
169
+ });
170
+ }
171
+ catch {
172
+ return unboundBinding(false);
173
+ }
174
+ const service = await createAgentGatewayProcess({ config: processConfig });
175
+ return { behaviorAdapter: createBehaviorAdapter(service, input.config) };
243
176
  }
@@ -3,11 +3,10 @@ export declare const descriptor: {
3
3
  readonly contractVersion: "1.0.0";
4
4
  readonly moduleRef: "agent-gateway";
5
5
  readonly packageName: "@tomflow/proflow-agent-gateway";
6
- readonly moduleVersion: "0.1.3";
6
+ readonly moduleVersion: "0.1.4";
7
7
  readonly kind: "service";
8
8
  readonly templateVersion: "1.0.0";
9
9
  readonly platformCompatibility: ">=1.0.0 <2.0.0";
10
- readonly installClass: "core";
11
10
  readonly identity: {
12
11
  readonly domain: "agent-runtime-collaboration";
13
12
  readonly summary: "The sole Custom GPT Actions HTTP ingress and OpenAI transport anti-corruption layer.";
@@ -73,5 +72,9 @@ export declare const descriptor: {
73
72
  readonly id: "overview";
74
73
  readonly path: "./README.md";
75
74
  readonly description: "Agent Gateway package overview";
75
+ }, {
76
+ readonly id: "configuration";
77
+ readonly path: "./CONFIGURATION.md";
78
+ readonly description: "Module configuration fields, sources and materialization instructions";
76
79
  }];
77
80
  };
@@ -3,23 +3,40 @@ export const descriptor = {
3
3
  contractVersion: "1.0.0",
4
4
  moduleRef: "agent-gateway",
5
5
  packageName: "@tomflow/proflow-agent-gateway",
6
- moduleVersion: "0.1.3",
6
+ moduleVersion: "0.1.4",
7
7
  kind: "service",
8
8
  templateVersion: "1.0.0",
9
9
  platformCompatibility: ">=1.0.0 <2.0.0",
10
- installClass: "core",
11
10
  identity: {
12
11
  domain: "agent-runtime-collaboration",
13
12
  summary: "The sole Custom GPT Actions HTTP ingress and OpenAI transport anti-corruption layer.",
14
13
  },
15
- provides: [{ contractRef: "custom-gpt-actions-gateway", version: "1.0.0" }],
14
+ provides: [
15
+ {
16
+ contractRef: "custom-gpt-actions-gateway",
17
+ version: "1.0.0",
18
+ },
19
+ ],
16
20
  requires: [
17
- { contractRef: "agent-runtime", versionRange: ">=1.0.0 <2.0.0" },
18
- { contractRef: "task-orchestration", versionRange: ">=1.0.0 <2.0.0" },
19
- { contractRef: "execution", versionRange: ">=1.0.0 <2.0.0" },
21
+ {
22
+ contractRef: "agent-runtime",
23
+ versionRange: ">=1.0.0 <2.0.0",
24
+ },
25
+ {
26
+ contractRef: "task-orchestration",
27
+ versionRange: ">=1.0.0 <2.0.0",
28
+ },
29
+ {
30
+ contractRef: "execution",
31
+ versionRange: ">=1.0.0 <2.0.0",
32
+ },
20
33
  ],
21
34
  requirements: [
22
- { kind: "runtime", runtime: "node", versionRange: ">=24.19.0" },
35
+ {
36
+ kind: "runtime",
37
+ runtime: "node",
38
+ versionRange: ">=24.19.0",
39
+ },
23
40
  ],
24
41
  configSlots: [
25
42
  {
@@ -84,5 +101,10 @@ export const descriptor = {
84
101
  path: "./README.md",
85
102
  description: "Agent Gateway package overview",
86
103
  },
104
+ {
105
+ id: "configuration",
106
+ path: "./CONFIGURATION.md",
107
+ description: "Module configuration fields, sources and materialization instructions",
108
+ },
87
109
  ],
88
110
  };
package/dist/src/cli.js CHANGED
@@ -1,29 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { spawnSync } from "node:child_process";
3
2
  import { createAgentGatewayProcess, loadAgentGatewayProcessConfig, } from "./process.js";
4
- function installSelf() {
5
- const executable = process.platform === "win32" ? "platform.cmd" : "platform";
6
- const result = spawnSync(executable, ["install", "@tomflow/proflow-agent-gateway", "--workspace", process.cwd()], { cwd: process.cwd(), env: process.env, stdio: "inherit" });
7
- if (result.error) {
8
- if (result.error.code === "ENOENT") {
9
- process.stderr.write("GLOBAL_PLATFORM_CLI_REQUIRED: install @tomflow/proflow-platform-cli globally before package-owned install\n");
10
- process.exit(127);
11
- }
12
- throw result.error;
13
- }
14
- process.exit(result.status ?? 1);
15
- }
16
3
  async function main() {
17
4
  const [command, configPath] = process.argv.slice(2);
18
5
  if (command === "--help" || command === "-h") {
19
- process.stdout.write("Usage: proflow-agent-gateway install | start /absolute/config.json\\n");
6
+ process.stdout.write("Usage: proflow-agent-gateway start /absolute/config.json\\n");
20
7
  process.exit(0);
21
8
  }
22
- if (command === "install") {
23
- if (configPath)
24
- throw new Error("Usage: proflow-agent-gateway install");
25
- installSelf();
26
- }
27
9
  if (command !== "start" || !configPath)
28
10
  throw new Error("Usage: proflow-agent-gateway start /absolute/config.json");
29
11
  const config = await loadAgentGatewayProcessConfig(configPath);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomflow/proflow-agent-gateway",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -19,22 +19,23 @@
19
19
  "dist",
20
20
  "proflow.module.json",
21
21
  "conformance.json",
22
- "README.md"
22
+ "README.md",
23
+ "CONFIGURATION.md"
23
24
  ],
24
25
  "dependencies": {
25
- "zod": "4.1.12"
26
+ "zod": "4.1.12",
27
+ "@tomflow/proflow-module-contract": "^0.1.1"
26
28
  },
27
29
  "devDependencies": {
28
- "@tomflow/proflow-agent-runtime": "^0.1.1",
29
- "@tomflow/proflow-task-store-sqlite": "^0.1.2",
30
+ "@tomflow/proflow-agent-runtime": "^0.1.2",
31
+ "@tomflow/proflow-execution-local": "^0.1.3",
30
32
  "@tomflow/proflow-deployment-conformance": "^0.1.2",
31
- "@tomflow/proflow-execution-browser-extension": "^0.1.3",
32
- "@tomflow/proflow-module-contract": "^0.1.1",
33
+ "@tomflow/proflow-task-store-sqlite": "^0.1.2",
33
34
  "@tomflow/proflow-task-migration-runner": "^0.1.2",
34
- "@tomflow/proflow-execution-runtime": "^0.1.2",
35
35
  "@tomflow/proflow-task-orchestration": "^0.1.1",
36
- "@tomflow/proflow-platform-host": "^0.1.3",
37
- "@tomflow/proflow-execution-local": "^0.1.3"
36
+ "@tomflow/proflow-execution-browser-extension": "^0.1.3",
37
+ "@tomflow/proflow-platform-host": "^0.1.4",
38
+ "@tomflow/proflow-execution-runtime": "^0.1.5"
38
39
  },
39
40
  "description": "The sole Custom GPT Actions HTTP ingress and OpenAI transport anti-corruption layer.",
40
41
  "keywords": [
@@ -44,15 +45,7 @@
44
45
  ],
45
46
  "proflow": {
46
47
  "module": true,
47
- "installClass": "core",
48
48
  "descriptor": "./dist/deployment/descriptor.js",
49
- "installRequires": [
50
- "@tomflow/proflow-agent-runtime",
51
- "@tomflow/proflow-dev-tunnel",
52
- "@tomflow/proflow-execution-runtime",
53
- "@tomflow/proflow-platform-host",
54
- "@tomflow/proflow-task-orchestration"
55
- ],
56
49
  "manifest": "./proflow.module.json"
57
50
  },
58
51
  "scripts": {
@@ -3,11 +3,10 @@
3
3
  "contractVersion": "1.0.0",
4
4
  "moduleRef": "agent-gateway",
5
5
  "packageName": "@tomflow/proflow-agent-gateway",
6
- "moduleVersion": "0.1.3",
6
+ "moduleVersion": "0.1.4",
7
7
  "kind": "service",
8
8
  "templateVersion": "1.0.0",
9
9
  "platformCompatibility": ">=1.0.0 <2.0.0",
10
- "installClass": "core",
11
10
  "identity": {
12
11
  "domain": "agent-runtime-collaboration",
13
12
  "summary": "The sole Custom GPT Actions HTTP ingress and OpenAI transport anti-corruption layer."
@@ -101,6 +100,11 @@
101
100
  "id": "overview",
102
101
  "path": "./README.md",
103
102
  "description": "Agent Gateway package overview"
103
+ },
104
+ {
105
+ "id": "configuration",
106
+ "path": "./CONFIGURATION.md",
107
+ "description": "Module configuration fields, sources and materialization instructions"
104
108
  }
105
109
  ]
106
110
  }
package/CHANGELOG.md DELETED
@@ -1,19 +0,0 @@
1
- # @tomflow/proflow-agent-gateway
2
-
3
- ## 0.1.3
4
-
5
- ### Patch Changes
6
-
7
- - Real-1 final remediation and black-box release closure
8
-
9
- ## 0.1.2
10
-
11
- ### Patch Changes
12
-
13
- - Close the Real-1 global Platform control-plane contract across every published ProFlow package. Platform CLI now owns one durable global Workspace binding with canonical identity, cross-process operation locking, cwd/`--workspace` install targeting, cross-directory instance commands, whole-instance uninstall/rebind, and deterministic npm/yarn/pnpm Workspace package-manager selection. Every package-owned install entry, including newly generated Module Template packages, delegates to the Shell-global `platform` command and fails closed when that global CLI is unavailable; Deployment Conformance and the formal test plans mechanically enforce the same rule across all 24 packages.
14
-
15
- ## 0.1.1
16
-
17
- ### Patch Changes
18
-
19
- - Close Real-1 deployment graph and Fresh Workspace bootstrap gaps: remove Contract-library runtime-provider aliases, correct Execution/Model dependency direction, materialize logical/moduleRef providers through `installRequires`, enforce repository graph validation, and keep self-install executables stable without package-manager worktree mutation.