@sequenceholdings/managed-functions 0.4.1 → 0.4.2

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 (87) hide show
  1. package/README.md +374 -2
  2. package/dist/abrigo-contract.d.ts +92 -0
  3. package/dist/abrigo-contract.js +55 -0
  4. package/dist/abrigo-response.d.ts +6 -0
  5. package/dist/abrigo-response.js +27 -0
  6. package/dist/abrigo.d.ts +14 -0
  7. package/dist/abrigo.js +150 -0
  8. package/dist/agent-evidence.d.ts +9 -0
  9. package/dist/agent-evidence.js +84 -0
  10. package/dist/agent-source-evidence-contract.d.ts +1197 -0
  11. package/dist/agent-source-evidence-contract.js +96 -0
  12. package/dist/agents-contract.d.ts +99 -0
  13. package/dist/agents-contract.js +69 -0
  14. package/dist/agents.d.ts +15 -0
  15. package/dist/agents.js +121 -0
  16. package/dist/capabilities.d.ts +150 -0
  17. package/dist/capabilities.js +58 -5
  18. package/dist/config.d.ts +17 -2
  19. package/dist/config.js +55 -1
  20. package/dist/deployed-policy.js +90 -2
  21. package/dist/directory-config.js +1 -1
  22. package/dist/directory-contract.d.ts +68 -0
  23. package/dist/directory-contract.js +57 -0
  24. package/dist/directory-manifest.d.ts +5 -0
  25. package/dist/directory-manifest.js +10 -0
  26. package/dist/http-tracing.js +3 -0
  27. package/dist/immutable-release-contract.d.ts +3 -0
  28. package/dist/immutable-release-contract.js +12 -0
  29. package/dist/index.d.ts +37 -1
  30. package/dist/index.js +72 -1
  31. package/dist/invocation-client.d.ts +8 -1
  32. package/dist/invocation-client.js +8 -3
  33. package/dist/invocation-contract.d.ts +36 -0
  34. package/dist/invocation-contract.js +48 -0
  35. package/dist/invocation.d.ts +8 -0
  36. package/dist/invocation.js +134 -0
  37. package/dist/lattice-capability.d.ts +5 -0
  38. package/dist/lattice-capability.js +16 -0
  39. package/dist/lattice-provenance-contract.d.ts +519 -0
  40. package/dist/lattice-provenance-contract.js +148 -0
  41. package/dist/lattice-provenance.d.ts +16 -0
  42. package/dist/lattice-provenance.js +167 -0
  43. package/dist/monitoring-annotations.d.ts +53 -0
  44. package/dist/monitoring-annotations.js +54 -0
  45. package/dist/monitoring-contract.d.ts +463 -0
  46. package/dist/monitoring-contract.js +89 -0
  47. package/dist/monitoring-events.d.ts +257 -0
  48. package/dist/monitoring-events.js +136 -0
  49. package/dist/monitoring.d.ts +14 -0
  50. package/dist/monitoring.js +78 -0
  51. package/dist/orm-contract.d.ts +1 -0
  52. package/dist/orm-contract.js +4 -0
  53. package/dist/orm.d.ts +19 -3
  54. package/dist/orm.js +93 -13
  55. package/dist/preflight-abrigo.d.ts +10 -0
  56. package/dist/preflight-abrigo.js +26 -0
  57. package/dist/preflight-agents.d.ts +10 -0
  58. package/dist/preflight-agents.js +51 -0
  59. package/dist/preflight-immutable-release.d.ts +10 -0
  60. package/dist/preflight-immutable-release.js +34 -0
  61. package/dist/preflight-invocation.d.ts +10 -0
  62. package/dist/preflight-invocation.js +40 -0
  63. package/dist/preflight-lattice.d.ts +10 -0
  64. package/dist/preflight-lattice.js +40 -0
  65. package/dist/preflight-monitoring.d.ts +10 -0
  66. package/dist/preflight-monitoring.js +46 -0
  67. package/dist/preflight-service-directory.d.ts +10 -0
  68. package/dist/preflight-service-directory.js +26 -0
  69. package/dist/preflight-workflows.d.ts +10 -0
  70. package/dist/preflight-workflows.js +38 -0
  71. package/dist/preflight.js +49 -5
  72. package/dist/processes-contract.d.ts +20 -0
  73. package/dist/processes-contract.js +8 -1
  74. package/dist/processes.d.ts +2 -1
  75. package/dist/processes.js +34 -0
  76. package/dist/runtime.cjs +3111 -214
  77. package/dist/sdk-range.d.ts +1 -0
  78. package/dist/sdk-range.js +25 -0
  79. package/dist/service-directory.d.ts +12 -0
  80. package/dist/service-directory.js +72 -0
  81. package/dist/workflow-scopes-contract.d.ts +8 -0
  82. package/dist/workflow-scopes-contract.js +29 -0
  83. package/dist/workflow-source-contract.d.ts +524 -0
  84. package/dist/workflow-source-contract.js +59 -0
  85. package/dist/workflow-source.d.ts +12 -0
  86. package/dist/workflow-source.js +93 -0
  87. package/package.json +2 -2
package/dist/preflight.js CHANGED
@@ -5,8 +5,22 @@ const capabilities_1 = require("./capabilities");
5
5
  const sdk_range_1 = require("./sdk-range");
6
6
  const preflight_issue_1 = require("./preflight-issue");
7
7
  const preflight_processes_1 = require("./preflight-processes");
8
+ const preflight_lattice_1 = require("./preflight-lattice");
9
+ const lattice_capability_1 = require("./lattice-capability");
10
+ const preflight_invocation_1 = require("./preflight-invocation");
11
+ const preflight_immutable_release_1 = require("./preflight-immutable-release");
12
+ const invocation_contract_1 = require("./invocation-contract");
13
+ const preflight_agents_1 = require("./preflight-agents");
14
+ const agents_contract_1 = require("./agents-contract");
15
+ const preflight_workflows_1 = require("./preflight-workflows");
16
+ const workflow_scopes_contract_1 = require("./workflow-scopes-contract");
17
+ const preflight_monitoring_1 = require("./preflight-monitoring");
18
+ const preflight_service_directory_1 = require("./preflight-service-directory");
8
19
  const preflight_directory_1 = require("./preflight-directory");
9
- const directory_config_1 = require("./directory-config");
20
+ const directory_manifest_1 = require("./directory-manifest");
21
+ const preflight_abrigo_1 = require("./preflight-abrigo");
22
+ const abrigo_contract_1 = require("./abrigo-contract");
23
+ const monitoring_contract_1 = require("./monitoring-contract");
10
24
  const processes_contract_1 = require("./processes-contract");
11
25
  const WORKLOAD_FIELDS = [
12
26
  'memory_mb',
@@ -21,9 +35,16 @@ function preflightManagedFunction({ manifest, limits, capabilities, cliVersion,
21
35
  const tooling = capabilities?.tooling ?? capabilities_1.MANAGED_FUNCTION_CAPABILITIES.tooling;
22
36
  const issues = [];
23
37
  checkWorkload({ manifest, limits, tooling, cliVersion, sdkVersion, issues });
38
+ (0, preflight_immutable_release_1.checkImmutableRelease)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
24
39
  checkPostgres({ manifest, capabilities, tooling, cliVersion, sdkVersion, issues });
25
40
  (0, preflight_processes_1.checkProcesses)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
26
- (0, preflight_directory_1.checkDirectory)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
41
+ (0, preflight_lattice_1.checkLatticeContext)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
42
+ (0, preflight_invocation_1.checkInvocationIdentity)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
43
+ (0, preflight_agents_1.checkAgents)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
44
+ (0, preflight_workflows_1.checkWorkflows)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
45
+ (0, preflight_monitoring_1.checkMonitoring)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
46
+ checkDirectoryDeclarations({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
47
+ (0, preflight_abrigo_1.checkAbrigo)({ manifest, capabilities, tooling, cliVersion, sdkVersion, checkDeployment, issues });
27
48
  checkHeaders({ manifest, capabilities, tooling, cliVersion, sdkVersion, issues });
28
49
  checkSdkTimeout({ manifest, limits, capabilities, tooling, cliVersion, sdkVersion, issues });
29
50
  return issues;
@@ -125,8 +146,14 @@ function needsWideHeaders(manifest) {
125
146
  const hasData = !!data && Object.keys(data).length > 0;
126
147
  const hasStorage = !!storage && typeof storage === 'object' && Object.keys(storage).length > 0;
127
148
  const hasProcesses = processes_contract_1.functionProcessReadScopesSchema.safeParse(manifest.capabilities?.processes).success;
128
- const hasDirectory = directory_config_1.directoryScopesSchema.safeParse(manifest.capabilities?.directory).success;
129
- return hasData || hasStorage || hasProcesses || hasDirectory;
149
+ const hasAgents = agents_contract_1.functionAgentReadScopesSchema.safeParse(manifest.capabilities?.agents).success;
150
+ const hasWorkflows = workflow_scopes_contract_1.functionWorkflowScopesSchema.safeParse(manifest.capabilities?.workflows).success;
151
+ const hasMonitoring = monitoring_contract_1.functionMonitoringScopesSchema.safeParse(manifest.capabilities?.monitoring).success;
152
+ const hasLattice = (0, lattice_capability_1.readFunctionLatticeContextCapability)(manifest);
153
+ const hasInvocation = (0, invocation_contract_1.readFunctionInvocationIdentityCapability)(manifest);
154
+ const hasDirectory = directory_manifest_1.functionDirectoryManifestSchema.safeParse(manifest.capabilities?.directory).success;
155
+ const hasAbrigo = abrigo_contract_1.functionAbrigoReadScopesSchema.safeParse(manifest.capabilities?.abrigo).success;
156
+ return hasData || hasStorage || hasProcesses || hasMonitoring || hasAgents || hasWorkflows || hasLattice || hasInvocation || hasDirectory || hasAbrigo;
130
157
  }
131
158
  function checkHeaders({ manifest, capabilities, tooling, cliVersion, sdkVersion, issues, }) {
132
159
  const feature = capabilities?.features.http_headers;
@@ -137,7 +164,7 @@ function checkHeaders({ manifest, capabilities, tooling, cliVersion, sdkVersion,
137
164
  return;
138
165
  issues.push((0, preflight_issue_1.createPreflightIssue)({
139
166
  field: feature.field,
140
- problem: `invocation headers for capabilities.data, capabilities.storage, capabilities.processes, or capabilities.directory exceed ${feature.max_bytes} bytes and will fail with HTTP 431`,
167
+ problem: `invocation headers for capability credentials, including capabilities.data, capabilities.storage, capabilities.processes, capabilities.lattice, capabilities.invocation and capabilities.directory, exceed ${feature.max_bytes} bytes and will fail with HTTP 431`,
141
168
  limit: feature.limit,
142
169
  tooling,
143
170
  requiredCli: feature.min_cli,
@@ -167,3 +194,20 @@ function checkSdkTimeout({ manifest, limits, capabilities, tooling, cliVersion,
167
194
  sdkVersion,
168
195
  }));
169
196
  }
197
+ function checkDirectoryDeclarations(args) {
198
+ const directory = args.manifest.capabilities?.directory;
199
+ if (directory === undefined)
200
+ return;
201
+ const parsed = directory_manifest_1.functionDirectoryManifestSchema.safeParse(directory);
202
+ if (!parsed.success) {
203
+ args.issues.push((0, preflight_issue_1.createPreflightIssue)({ field: 'capabilities.directory', problem: (0, capabilities_1.formatValidationDetail)(parsed.error.issues),
204
+ limit: 'concrete groups and/or exact tenant resolution scopes', tooling: args.tooling,
205
+ requiredCli: args.tooling.cli.min, requiredSdk: args.tooling.sdk.min, cliVersion: args.cliVersion, sdkVersion: args.sdkVersion }));
206
+ return;
207
+ }
208
+ const scoped = (directory) => ({ ...args, manifest: { ...args.manifest, capabilities: { ...args.manifest.capabilities, directory } } });
209
+ if (parsed.data.groups)
210
+ (0, preflight_directory_1.checkDirectory)(scoped({ groups: parsed.data.groups }));
211
+ if (parsed.data.resolve)
212
+ (0, preflight_service_directory_1.checkDirectory)(scoped({ resolve: parsed.data.resolve }));
213
+ }
@@ -55,6 +55,21 @@ export declare const functionProcessRunsPageQuerySchema: z.ZodObject<{
55
55
  archived: z.ZodOptional<z.ZodBoolean>;
56
56
  }, z.core.$strict>;
57
57
  export type FunctionProcessRunQuery = z.infer<typeof functionProcessRunQuerySchema>;
58
+ export declare const functionProcessCompletedAgentReferenceQuerySchema: z.ZodObject<{
59
+ process: z.ZodString;
60
+ runId: z.ZodString;
61
+ nodeId: z.ZodString;
62
+ }, z.core.$strict>;
63
+ export type FunctionProcessCompletedAgentReferenceQuery = z.infer<typeof functionProcessCompletedAgentReferenceQuerySchema>;
64
+ export declare const functionProcessCompletedAgentReferenceSchema: z.ZodObject<{
65
+ stepId: z.ZodString;
66
+ attempt: z.ZodNumber;
67
+ agentId: z.ZodString;
68
+ agentRunId: z.ZodString;
69
+ threadId: z.ZodString;
70
+ recoveryProof: z.ZodString;
71
+ }, z.core.$strict>;
72
+ export type FunctionProcessCompletedAgentReference = z.infer<typeof functionProcessCompletedAgentReferenceSchema>;
58
73
  export type FunctionProcessRunsPageQuery = z.infer<typeof functionProcessRunsPageQuerySchema>;
59
74
  export declare const functionProcessRunsPageSchema: z.ZodObject<{
60
75
  runs: z.ZodArray<z.ZodObject<{
@@ -80,6 +95,11 @@ export declare const functionProcessReadRequestSchema: z.ZodDiscriminatedUnion<[
80
95
  process: z.ZodString;
81
96
  runId: z.ZodString;
82
97
  operation: z.ZodLiteral<"getRun">;
98
+ }, z.core.$strict>, z.ZodObject<{
99
+ process: z.ZodString;
100
+ runId: z.ZodString;
101
+ nodeId: z.ZodString;
102
+ operation: z.ZodLiteral<"getCompletedAgentReference">;
83
103
  }, z.core.$strict>, z.ZodObject<{
84
104
  process: z.ZodString;
85
105
  statuses: z.ZodOptional<z.ZodArray<z.ZodEnum<{
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FunctionProcessReadError = exports.functionProcessReadRequestSchema = exports.functionProcessRunsPageSchema = exports.functionProcessRunsPageQuerySchema = exports.functionProcessRunQuerySchema = exports.functionProcessRunSummarySchema = exports.functionProcessRunStatusSchema = exports.functionProcessReadScopesSchema = exports.FUNCTION_PROCESS_READ_PATH = exports.FUNCTION_PROCESS_TOKEN_HEADER = void 0;
3
+ exports.FunctionProcessReadError = exports.functionProcessReadRequestSchema = exports.functionProcessRunsPageSchema = exports.functionProcessCompletedAgentReferenceSchema = exports.functionProcessCompletedAgentReferenceQuerySchema = exports.functionProcessRunsPageQuerySchema = exports.functionProcessRunQuerySchema = exports.functionProcessRunSummarySchema = exports.functionProcessRunStatusSchema = exports.functionProcessReadScopesSchema = exports.FUNCTION_PROCESS_READ_PATH = exports.FUNCTION_PROCESS_TOKEN_HEADER = void 0;
4
4
  exports.readFunctionProcessScopes = readFunctionProcessScopes;
5
5
  const zod_1 = require("zod");
6
6
  exports.FUNCTION_PROCESS_TOKEN_HEADER = 'x-sequence-process-service-token';
@@ -66,12 +66,19 @@ exports.functionProcessRunsPageQuerySchema = zod_1.z.strictObject({
66
66
  cursor: zod_1.z.string().min(1).max(8192).optional(),
67
67
  archived: zod_1.z.boolean().optional(),
68
68
  });
69
+ exports.functionProcessCompletedAgentReferenceQuerySchema = exports.functionProcessRunQuerySchema.extend({ nodeId: entityId });
70
+ exports.functionProcessCompletedAgentReferenceSchema = zod_1.z.strictObject({
71
+ stepId: entityId, attempt: zod_1.z.number().int().positive().max(Number.MAX_SAFE_INTEGER),
72
+ agentId: entityId, agentRunId: entityId, threadId: entityId,
73
+ recoveryProof: zod_1.z.string().min(1).max(16_384),
74
+ });
69
75
  exports.functionProcessRunsPageSchema = zod_1.z.object({
70
76
  runs: zod_1.z.array(exports.functionProcessRunSummarySchema).max(500),
71
77
  nextCursor: zod_1.z.string().nullable(),
72
78
  });
73
79
  exports.functionProcessReadRequestSchema = zod_1.z.discriminatedUnion('operation', [
74
80
  exports.functionProcessRunQuerySchema.extend({ operation: zod_1.z.literal('getRun') }),
81
+ exports.functionProcessCompletedAgentReferenceQuerySchema.extend({ operation: zod_1.z.literal('getCompletedAgentReference') }),
75
82
  exports.functionProcessRunsPageQuerySchema.extend({
76
83
  operation: zod_1.z.literal('listRunsPage'),
77
84
  }),
@@ -1,8 +1,9 @@
1
- import { type FunctionProcessRunQuery, type FunctionProcessRunSummary, type FunctionProcessRunsPage, type FunctionProcessRunsPageQuery } from './processes-contract';
1
+ import { type FunctionProcessCompletedAgentReference, type FunctionProcessCompletedAgentReferenceQuery, type FunctionProcessRunQuery, type FunctionProcessRunSummary, type FunctionProcessRunsPage, type FunctionProcessRunsPageQuery } from './processes-contract';
2
2
  import { type FunctionInvocationClientOptions } from './invocation-client';
3
3
  export * from './processes-contract';
4
4
  export type FunctionServiceProcessesOptions = FunctionInvocationClientOptions;
5
5
  export interface FunctionServiceProcessesClient {
6
+ getCompletedAgentReference(query: FunctionProcessCompletedAgentReferenceQuery): Promise<FunctionProcessCompletedAgentReference>;
6
7
  getRun(query: FunctionProcessRunQuery): Promise<FunctionProcessRunSummary>;
7
8
  listRunsPage(query: FunctionProcessRunsPageQuery): Promise<FunctionProcessRunsPage>;
8
9
  }
package/dist/processes.js CHANGED
@@ -18,7 +18,31 @@ exports.createFunctionServiceProcessesClient = createFunctionServiceProcessesCli
18
18
  const zod_1 = require("zod");
19
19
  const processes_contract_1 = require("./processes-contract");
20
20
  const invocation_client_1 = require("./invocation-client");
21
+ const agents_contract_1 = require("./agents-contract");
21
22
  __exportStar(require("./processes-contract"), exports);
23
+ function readAgentCredential({ request }) {
24
+ const { headers } = request;
25
+ const matches = typeof headers.get === 'function' ? [headers.get(agents_contract_1.FUNCTION_AGENT_TOKEN_HEADER)]
26
+ : Object.entries(headers).filter(([name]) => name.toLowerCase() === agents_contract_1.FUNCTION_AGENT_TOKEN_HEADER).map(([, value]) => value);
27
+ const token = matches[0];
28
+ const denied = () => new processes_contract_1.FunctionProcessReadError(401, 'invalid_context', 'Completed-agent reference lookup requires an agent-read credential');
29
+ if (matches.length !== 1 || typeof token !== 'string' || token.length > 16_384)
30
+ throw denied();
31
+ const body = /^([A-Za-z0-9_-]+)\.[A-Za-z0-9_-]{43}$/.exec(token)?.[1];
32
+ if (!body)
33
+ throw denied();
34
+ let value;
35
+ try {
36
+ value = JSON.parse(Buffer.from(body, 'base64url').toString('utf8'));
37
+ }
38
+ catch {
39
+ throw denied();
40
+ }
41
+ const claims = zod_1.z.object({ audience: zod_1.z.literal('atlas-managed-function-agent-read'), sub: zod_1.z.string().startsWith('service-account|'), functionId: zod_1.z.string().min(1), invocationId: zod_1.z.string().min(1), exp: zod_1.z.number().int() }).safeParse(value);
42
+ if (!claims.success)
43
+ throw denied();
44
+ return { token, expiresAt: claims.data.exp };
45
+ }
22
46
  const invalidContext = () => new processes_contract_1.FunctionProcessReadError(401, 'invalid_context', 'This invocation has no valid process-read credential');
23
47
  function createFunctionServiceProcessesClient({ request, baseUrl, fetchImpl = globalThis.fetch, }) {
24
48
  const credential = (0, invocation_client_1.readInvocationCredential)({
@@ -46,6 +70,16 @@ function createFunctionServiceProcessesClient({ request, baseUrl, fetchImpl = gl
46
70
  });
47
71
  const read = ({ body, schema }) => transport({ body: processes_contract_1.functionProcessReadRequestSchema.parse(body), schema });
48
72
  return {
73
+ async getCompletedAgentReference(query) {
74
+ const agent = readAgentCredential({ request });
75
+ const readReference = (0, invocation_client_1.createInvocationReadTransport)({
76
+ baseUrl, fetchImpl, path: processes_contract_1.FUNCTION_PROCESS_READ_PATH, header: processes_contract_1.FUNCTION_PROCESS_TOKEN_HEADER,
77
+ credential, additionalCredentials: [{ header: agents_contract_1.FUNCTION_AGENT_TOKEN_HEADER, credential: agent }],
78
+ timeoutMs: 30_000, error: (status, code, message) => new processes_contract_1.FunctionProcessReadError(status, code, message),
79
+ failure: { code: 'process_read_failed', message: 'Process read failed' },
80
+ });
81
+ return readReference({ body: processes_contract_1.functionProcessReadRequestSchema.parse({ ...query, operation: 'getCompletedAgentReference' }), schema: processes_contract_1.functionProcessCompletedAgentReferenceSchema });
82
+ },
49
83
  async getRun(query) {
50
84
  const run = await read({
51
85
  body: { ...query, operation: 'getRun' },