@the-open-engine/zeroshot 6.32.1 → 6.33.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -1
- package/lib/agent-cli-provider/adapters/codex.js +6 -4
- package/lib/agent-cli-provider/adapters/codex.js.map +1 -1
- package/lib/detached-startup.js +4 -0
- package/lib/hosted-target/adapter-request.cjs +6 -3
- package/lib/hosted-target/adapter-request.mjs +6 -3
- package/lib/target/discovery-sections.cjs +35 -13
- package/lib/target/discovery-sections.d.cts +5 -1
- package/lib/target/discovery-sections.d.mts +5 -1
- package/lib/target/discovery-sections.d.ts +5 -1
- package/lib/target/discovery-sections.js +35 -13
- package/lib/target/discovery-sections.mjs +35 -13
- package/lib/target/discovery.cjs +49 -38
- package/lib/target/discovery.d.cts +3 -0
- package/lib/target/discovery.d.mts +3 -0
- package/lib/target/discovery.d.ts +3 -0
- package/lib/target/discovery.js +49 -38
- package/lib/target/discovery.mjs +49 -38
- package/lib/target/index.d.ts +1 -1
- package/lib/target/run-intent-discovery.cjs +30 -0
- package/lib/target/run-intent-discovery.d.cts +11 -0
- package/lib/target/run-intent-discovery.d.mts +11 -0
- package/lib/target/run-intent-discovery.d.ts +11 -0
- package/lib/target/run-intent-discovery.js +30 -0
- package/lib/target/run-intent-discovery.mjs +27 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -3
- package/src/agent/agent-config.js +3 -5
- package/src/agent-cli-provider/adapters/codex.ts +7 -4
- package/src/hosted-target/adapter-request.ts +8 -3
- package/src/isolation-manager.js +52 -0
- package/src/orchestrator.js +6 -0
- package/src/target/discovery-sections.ts +59 -41
- package/src/target/discovery.ts +71 -54
- package/src/target/index.ts +1 -0
- package/src/target/run-intent-discovery.ts +39 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/agent-cli-provider/adapters/codex.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,+BAA+B,EAGrC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/agent-cli-provider/adapters/codex.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,+BAA+B,EAGrC,MAAM,UAAU,CAAC;AAkTlB,eAAO,MAAM,YAAY,EAAE,+BAoB1B,CAAC"}
|
|
@@ -29,18 +29,19 @@ function detectCliFeatures(helpText, versionText) {
|
|
|
29
29
|
const help = helpText ?? '';
|
|
30
30
|
const unknown = !help;
|
|
31
31
|
const supportsConfigOverride = supports(help, /--config\b/);
|
|
32
|
+
const supportsSandbox = !unknown && /--sandbox\b/.test(help);
|
|
32
33
|
return {
|
|
33
34
|
provider: 'codex',
|
|
34
35
|
supportsJson: supports(help, /--json\b/),
|
|
35
36
|
supportsOutputSchema: supports(help, /--output-schema\b/),
|
|
36
|
-
supportsAutoApprove:
|
|
37
|
+
supportsAutoApprove: !unknown && supportsConfigOverride && supportsSandbox,
|
|
37
38
|
supportsCwd: supports(help, /\s-C\b/) || supports(help, /--cwd\b/),
|
|
38
39
|
supportsConfigOverride,
|
|
39
40
|
supportsModel: supports(help, /\s-m\b/) || supports(help, /--model\b/),
|
|
40
41
|
supportsSkipGitRepoCheck: supports(help, /--skip-git-repo-check\b/),
|
|
41
42
|
supportsResume: supports(help, /\bresume\b/),
|
|
42
43
|
supportsWebSearch: !unknown && supportsConfigOverride && (0, common_1.isCliVersionAtLeast)(versionText, '0.146.0'),
|
|
43
|
-
supportsSandbox
|
|
44
|
+
supportsSandbox,
|
|
44
45
|
supportsEphemeral: !unknown && /--ephemeral\b/.test(help),
|
|
45
46
|
supportsIgnoreUserConfig: !unknown && /--ignore-user-config\b/.test(help),
|
|
46
47
|
supportsIgnoreRules: !unknown && /--ignore-rules\b/.test(help),
|
|
@@ -80,7 +81,8 @@ function addCwdArgs(args, options) {
|
|
|
80
81
|
function addAutoApproveArgs(args, options) {
|
|
81
82
|
const features = (0, common_1.optionFeatures)(options);
|
|
82
83
|
if (options.autoApprove && features.supportsAutoApprove) {
|
|
83
|
-
|
|
84
|
+
const sandboxMode = options.executionContext === 'docker' ? 'danger-full-access' : 'workspace-write';
|
|
85
|
+
args.push('--sandbox', sandboxMode, '--config', 'approval_policy="never"');
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
function addSkipGitArgs(args, options) {
|
|
@@ -109,7 +111,7 @@ function collectWarnings(options) {
|
|
|
109
111
|
warnings.push((0, common_1.warning)('codex', 'codex-session-resume-unsupported', 'Codex CLI does not support exec resume; starting a fresh session.'));
|
|
110
112
|
}
|
|
111
113
|
if (options.autoApprove && features.supportsAutoApprove === false) {
|
|
112
|
-
warnings.push((0, common_1.warning)('codex', 'codex-auto-approve', 'Codex CLI does not support
|
|
114
|
+
warnings.push((0, common_1.warning)('codex', 'codex-auto-approve', 'Codex CLI does not support unattended workspace-write mode; continuing without it.'));
|
|
113
115
|
}
|
|
114
116
|
if (options.jsonSchema && features.supportsOutputSchema === false) {
|
|
115
117
|
warnings.push((0, common_1.warning)('codex', 'codex-jsonschema', 'Codex CLI does not support --output-schema; skipping schema flag.'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/agent-cli-provider/adapters/codex.ts"],"names":[],"mappings":";;;AAAA,sCAA+D;AAC/D,kCAA4D;AAC5D,sCAAgF;AAchF,qCASkB;AAClB,iDAAiD;AAEjD,MAAM,aAAa,GAAgD;IACjE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACtB,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACtB,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACtB,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IAC1B,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACjC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IAC5B,sBAAsB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACnC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IAC3B,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;CACnC,CAAC;AAEF,MAAM,aAAa,GAAiD;IAClE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE;IAChE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE;IAC9D,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE;CAChE,CAAC;AAEF,SAAS,QAAQ,CAAC,IAAY,EAAE,OAAe;IAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAwB,EACxB,WAA2B;IAE3B,MAAM,IAAI,GAAG,QAAQ,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,sBAAsB,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5D,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QACxC,oBAAoB,EAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACzD,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/agent-cli-provider/adapters/codex.ts"],"names":[],"mappings":"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"}
|
package/lib/detached-startup.js
CHANGED
|
@@ -4,6 +4,7 @@ const path = require('path');
|
|
|
4
4
|
const lockfile = require('proper-lockfile');
|
|
5
5
|
const { resolveRunPlan } = require('./run-plan');
|
|
6
6
|
const { isProcessRunning } = require('./process-liveness');
|
|
7
|
+
const IsolationManager = require('../src/isolation-manager');
|
|
7
8
|
|
|
8
9
|
const DEFAULT_WAIT_TIMEOUT_SECONDS = 180;
|
|
9
10
|
const DEFAULT_WAIT_POLL_MS = 1000;
|
|
@@ -111,6 +112,8 @@ async function registerDetachedSetupCluster({
|
|
|
111
112
|
cwd,
|
|
112
113
|
}) {
|
|
113
114
|
const plan = resolveRunPlan(runOptions);
|
|
115
|
+
const setupResources =
|
|
116
|
+
plan.isolation === 'docker' ? IsolationManager.getDetachedSetupResources(clusterId) : null;
|
|
114
117
|
await updateClustersFile(storageDir, (clusters) => {
|
|
115
118
|
clusters[clusterId] = {
|
|
116
119
|
id: clusterId,
|
|
@@ -136,6 +139,7 @@ async function registerDetachedSetupCluster({
|
|
|
136
139
|
isolation: null,
|
|
137
140
|
agentStates: [],
|
|
138
141
|
failureInfo: null,
|
|
142
|
+
setupResources,
|
|
139
143
|
provisional: true,
|
|
140
144
|
};
|
|
141
145
|
return clusters;
|
|
@@ -3,9 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.requestUrl = requestUrl;
|
|
4
4
|
const errors_js_1 = require("./errors.cjs");
|
|
5
5
|
function requestUrl(path, descriptor) {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const baseUrl = new globalThis.URL(descriptor.capsule.baseUrl);
|
|
7
|
+
const requestPath = `${baseUrl.pathname.replace(/\/$/, '')}${path}`;
|
|
8
|
+
const url = new globalThis.URL(requestPath, baseUrl.origin);
|
|
9
|
+
if (url.origin !== descriptor.origin ||
|
|
10
|
+
url.hash ||
|
|
11
|
+
`${url.pathname}${url.search}` !== requestPath) {
|
|
9
12
|
throw new errors_js_1.TargetProtocolError('Capsule route changed during URL canonicalization');
|
|
10
13
|
}
|
|
11
14
|
return url;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { TargetProtocolError } from './errors.mjs';
|
|
2
2
|
export function requestUrl(path, descriptor) {
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const baseUrl = new globalThis.URL(descriptor.capsule.baseUrl);
|
|
4
|
+
const requestPath = `${baseUrl.pathname.replace(/\/$/, '')}${path}`;
|
|
5
|
+
const url = new globalThis.URL(requestPath, baseUrl.origin);
|
|
6
|
+
if (url.origin !== descriptor.origin ||
|
|
7
|
+
url.hash ||
|
|
8
|
+
`${url.pathname}${url.search}` !== requestPath) {
|
|
6
9
|
throw new TargetProtocolError('Capsule route changed during URL canonicalization');
|
|
7
10
|
}
|
|
8
11
|
return url;
|
|
@@ -12,6 +12,7 @@ exports.parseSession = parseSession;
|
|
|
12
12
|
exports.parseTransport = parseTransport;
|
|
13
13
|
const discovery_errors_js_1 = require("./discovery-errors.cjs");
|
|
14
14
|
const discovery_validation_js_1 = require("./discovery-validation.cjs");
|
|
15
|
+
const run_intent_discovery_js_1 = require("./run-intent-discovery.cjs");
|
|
15
16
|
const route_template_js_1 = require("./route-template.cjs");
|
|
16
17
|
function parseAdapter(discovery) {
|
|
17
18
|
const adapter = (0, discovery_validation_js_1.closedRecord)(discovery.adapter, 'adapter', ['name', 'major_version']);
|
|
@@ -27,14 +28,16 @@ function parseAdapter(discovery) {
|
|
|
27
28
|
function validateCachePolicy(discovery) {
|
|
28
29
|
const cache = (0, discovery_validation_js_1.closedRecord)(discovery.cache_policy, 'cache_policy', ['control', 'discovery']);
|
|
29
30
|
(0, discovery_validation_js_1.exact)(cache.control, 'no-store', 'cache_policy.control');
|
|
30
|
-
if (cache.discovery !== undefined &&
|
|
31
|
+
if (cache.discovery !== undefined &&
|
|
32
|
+
cache.discovery !== null &&
|
|
31
33
|
typeof cache.discovery !== 'string') {
|
|
32
34
|
throw new discovery_errors_js_1.TargetDiscoveryError('cache_policy.discovery must be a string or null');
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
37
|
function parseSizes(discovery) {
|
|
36
38
|
const sizes = (0, discovery_validation_js_1.closedRecord)(discovery.sizes, 'sizes', ['catalog', 'default']);
|
|
37
|
-
if (!Array.isArray(sizes.catalog) ||
|
|
39
|
+
if (!Array.isArray(sizes.catalog) ||
|
|
40
|
+
sizes.catalog.length === 0 ||
|
|
38
41
|
new Set(sizes.catalog).size !== sizes.catalog.length ||
|
|
39
42
|
sizes.catalog.some((size) => !['tiny', 'small', 'standard', 'large'].includes(String(size)))) {
|
|
40
43
|
throw new discovery_errors_js_1.TargetDiscoveryError('sizes.catalog contains an unsupported size');
|
|
@@ -48,26 +51,32 @@ function parseSizes(discovery) {
|
|
|
48
51
|
});
|
|
49
52
|
}
|
|
50
53
|
function parseExtensions(discovery, origin) {
|
|
51
|
-
if (discovery.extensions === undefined || discovery.extensions === null)
|
|
52
|
-
return null;
|
|
54
|
+
if (discovery.extensions === undefined || discovery.extensions === null) {
|
|
55
|
+
return Object.freeze({ credentialInstall: null, runIntent: null });
|
|
56
|
+
}
|
|
53
57
|
const extensions = (0, discovery_validation_js_1.closedRecord)(discovery.extensions, 'extensions', [
|
|
54
|
-
'connections',
|
|
58
|
+
'connections',
|
|
59
|
+
'credential_install',
|
|
60
|
+
'run_intent',
|
|
55
61
|
]);
|
|
56
62
|
if (extensions.connections === undefined) {
|
|
57
63
|
throw new discovery_errors_js_1.TargetDiscoveryError('extensions.connections is required');
|
|
58
64
|
}
|
|
59
65
|
const connections = (0, discovery_validation_js_1.closedRecord)(extensions.connections, 'extensions.connections', [
|
|
60
|
-
'kind',
|
|
66
|
+
'kind',
|
|
67
|
+
'base_url',
|
|
68
|
+
'route_templates',
|
|
61
69
|
]);
|
|
62
70
|
(0, discovery_validation_js_1.exact)(connections.kind, 'zerocloud.connections/v1', 'extensions.connections.kind');
|
|
63
71
|
(0, discovery_validation_js_1.sameOriginUrl)(connections.base_url, 'extensions.connections.base_url', origin);
|
|
64
|
-
const routes = (0, discovery_validation_js_1.closedRecord)(connections.route_templates, 'extensions.connections.route_templates', [
|
|
65
|
-
'list', 'create', 'update',
|
|
66
|
-
]);
|
|
72
|
+
const routes = (0, discovery_validation_js_1.closedRecord)(connections.route_templates, 'extensions.connections.route_templates', ['list', 'create', 'update']);
|
|
67
73
|
(0, route_template_js_1.routeTemplate)(routes.list, 'extensions.connections.route_templates.list', []);
|
|
68
74
|
(0, route_template_js_1.routeTemplate)(routes.create, 'extensions.connections.route_templates.create', []);
|
|
69
75
|
(0, route_template_js_1.routeTemplate)(routes.update, 'extensions.connections.route_templates.update', ['connection_id']);
|
|
70
|
-
return
|
|
76
|
+
return Object.freeze({
|
|
77
|
+
credentialInstall: (0, discovery_validation_js_1.parseCredentialInstall)(extensions.credential_install),
|
|
78
|
+
runIntent: (0, run_intent_discovery_js_1.parseRunIntent)(extensions.run_intent, origin),
|
|
79
|
+
});
|
|
71
80
|
}
|
|
72
81
|
function validateOAuthMetadata(metadata, origin, expected) {
|
|
73
82
|
const device = (0, discovery_validation_js_1.sameOriginUrl)(metadata.device_authorization_endpoint, 'OAuth metadata device_authorization_endpoint', origin);
|
|
@@ -85,7 +94,10 @@ function parseEndpoint(discovery, origin) {
|
|
|
85
94
|
(0, discovery_validation_js_1.exact)(binding.scope, 'organization', 'binding.scope');
|
|
86
95
|
(0, discovery_validation_js_1.exact)(binding.auth_location, 'authorization_header', 'binding.auth_location');
|
|
87
96
|
const endpoint = (0, discovery_validation_js_1.closedRecord)(discovery.endpoint, 'endpoint', ['url', 'capabilities']);
|
|
88
|
-
const capabilities = (0, discovery_validation_js_1.exactStringSet)(endpoint.capabilities, 'endpoint.capabilities', [
|
|
97
|
+
const capabilities = (0, discovery_validation_js_1.exactStringSet)(endpoint.capabilities, 'endpoint.capabilities', [
|
|
98
|
+
'exec',
|
|
99
|
+
'log_stream',
|
|
100
|
+
]);
|
|
89
101
|
const pagination = (0, discovery_validation_js_1.closedRecord)(discovery.pagination, 'pagination', [
|
|
90
102
|
'default_page_size',
|
|
91
103
|
'max_page_size',
|
|
@@ -119,7 +131,14 @@ function parseCapsule(discovery, origin) {
|
|
|
119
131
|
]);
|
|
120
132
|
(0, discovery_validation_js_1.exact)(capsule.name, 'openengine.capsules/v1', 'capsule_protocol.name');
|
|
121
133
|
(0, discovery_validation_js_1.exact)(capsule.major_version, 1, 'capsule_protocol.major_version');
|
|
122
|
-
const routes = (0, discovery_validation_js_1.closedRecord)(capsule.route_templates, 'capsule_protocol.route_templates', [
|
|
134
|
+
const routes = (0, discovery_validation_js_1.closedRecord)(capsule.route_templates, 'capsule_protocol.route_templates', [
|
|
135
|
+
'allocate',
|
|
136
|
+
'list',
|
|
137
|
+
'inspect',
|
|
138
|
+
'terminate',
|
|
139
|
+
'limits',
|
|
140
|
+
'access',
|
|
141
|
+
]);
|
|
123
142
|
const route = (name, variables) => (0, route_template_js_1.routeTemplate)(routes[name], `capsule_protocol.route_templates.${name}`, variables);
|
|
124
143
|
return Object.freeze({
|
|
125
144
|
baseUrl: (0, discovery_validation_js_1.sameOriginUrl)(capsule.base_url, 'capsule_protocol.base_url', origin),
|
|
@@ -145,7 +164,10 @@ function parseOAuth(discovery, origin) {
|
|
|
145
164
|
'audience',
|
|
146
165
|
]);
|
|
147
166
|
(0, discovery_validation_js_1.exact)(oauth.device_grant_type, 'urn:ietf:params:oauth:grant-type:device_code', 'oauth.device_grant_type');
|
|
148
|
-
(0, discovery_validation_js_1.exactStringSet)(oauth.device_exchange_fields, 'oauth.device_exchange_fields', [
|
|
167
|
+
(0, discovery_validation_js_1.exactStringSet)(oauth.device_exchange_fields, 'oauth.device_exchange_fields', [
|
|
168
|
+
'device_token',
|
|
169
|
+
'device_label',
|
|
170
|
+
]);
|
|
149
171
|
(0, discovery_validation_js_1.exact)(oauth.audience, 'capsule', 'oauth.audience');
|
|
150
172
|
return Object.freeze({
|
|
151
173
|
metadataUrl: (0, discovery_validation_js_1.sameOriginUrl)(oauth.metadata_url, 'oauth.metadata_url', origin),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CredentialInstallDescriptor } from './discovery-validation.js';
|
|
2
|
+
import { type RunIntentDescriptor } from './run-intent-discovery.js';
|
|
2
3
|
export declare function parseAdapter(discovery: Record<string, unknown>): {
|
|
3
4
|
readonly name: 'fargate' | 'docker' | 'local';
|
|
4
5
|
readonly majorVersion: 1;
|
|
@@ -8,7 +9,10 @@ export declare function parseSizes(discovery: Record<string, unknown>): {
|
|
|
8
9
|
readonly catalog: readonly ('tiny' | 'small' | 'standard' | 'large')[];
|
|
9
10
|
readonly default: 'tiny' | 'small' | 'standard' | 'large';
|
|
10
11
|
};
|
|
11
|
-
export declare function parseExtensions(discovery: Record<string, unknown>, origin: string):
|
|
12
|
+
export declare function parseExtensions(discovery: Record<string, unknown>, origin: string): {
|
|
13
|
+
readonly credentialInstall: CredentialInstallDescriptor | null;
|
|
14
|
+
readonly runIntent: RunIntentDescriptor | null;
|
|
15
|
+
};
|
|
12
16
|
export declare function validateOAuthMetadata(metadata: Record<string, unknown>, origin: string, expected: readonly [string, string, string]): void;
|
|
13
17
|
export declare function parseEndpoint(discovery: Record<string, unknown>, origin: string): Readonly<{
|
|
14
18
|
url: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CredentialInstallDescriptor } from './discovery-validation.js';
|
|
2
|
+
import { type RunIntentDescriptor } from './run-intent-discovery.js';
|
|
2
3
|
export declare function parseAdapter(discovery: Record<string, unknown>): {
|
|
3
4
|
readonly name: 'fargate' | 'docker' | 'local';
|
|
4
5
|
readonly majorVersion: 1;
|
|
@@ -8,7 +9,10 @@ export declare function parseSizes(discovery: Record<string, unknown>): {
|
|
|
8
9
|
readonly catalog: readonly ('tiny' | 'small' | 'standard' | 'large')[];
|
|
9
10
|
readonly default: 'tiny' | 'small' | 'standard' | 'large';
|
|
10
11
|
};
|
|
11
|
-
export declare function parseExtensions(discovery: Record<string, unknown>, origin: string):
|
|
12
|
+
export declare function parseExtensions(discovery: Record<string, unknown>, origin: string): {
|
|
13
|
+
readonly credentialInstall: CredentialInstallDescriptor | null;
|
|
14
|
+
readonly runIntent: RunIntentDescriptor | null;
|
|
15
|
+
};
|
|
12
16
|
export declare function validateOAuthMetadata(metadata: Record<string, unknown>, origin: string, expected: readonly [string, string, string]): void;
|
|
13
17
|
export declare function parseEndpoint(discovery: Record<string, unknown>, origin: string): Readonly<{
|
|
14
18
|
url: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CredentialInstallDescriptor } from './discovery-validation.js';
|
|
2
|
+
import { type RunIntentDescriptor } from './run-intent-discovery.js';
|
|
2
3
|
export declare function parseAdapter(discovery: Record<string, unknown>): {
|
|
3
4
|
readonly name: 'fargate' | 'docker' | 'local';
|
|
4
5
|
readonly majorVersion: 1;
|
|
@@ -8,7 +9,10 @@ export declare function parseSizes(discovery: Record<string, unknown>): {
|
|
|
8
9
|
readonly catalog: readonly ('tiny' | 'small' | 'standard' | 'large')[];
|
|
9
10
|
readonly default: 'tiny' | 'small' | 'standard' | 'large';
|
|
10
11
|
};
|
|
11
|
-
export declare function parseExtensions(discovery: Record<string, unknown>, origin: string):
|
|
12
|
+
export declare function parseExtensions(discovery: Record<string, unknown>, origin: string): {
|
|
13
|
+
readonly credentialInstall: CredentialInstallDescriptor | null;
|
|
14
|
+
readonly runIntent: RunIntentDescriptor | null;
|
|
15
|
+
};
|
|
12
16
|
export declare function validateOAuthMetadata(metadata: Record<string, unknown>, origin: string, expected: readonly [string, string, string]): void;
|
|
13
17
|
export declare function parseEndpoint(discovery: Record<string, unknown>, origin: string): Readonly<{
|
|
14
18
|
url: string;
|
|
@@ -12,6 +12,7 @@ exports.parseSession = parseSession;
|
|
|
12
12
|
exports.parseTransport = parseTransport;
|
|
13
13
|
const discovery_errors_js_1 = require("./discovery-errors.js");
|
|
14
14
|
const discovery_validation_js_1 = require("./discovery-validation.js");
|
|
15
|
+
const run_intent_discovery_js_1 = require("./run-intent-discovery.js");
|
|
15
16
|
const route_template_js_1 = require("./route-template.js");
|
|
16
17
|
function parseAdapter(discovery) {
|
|
17
18
|
const adapter = (0, discovery_validation_js_1.closedRecord)(discovery.adapter, 'adapter', ['name', 'major_version']);
|
|
@@ -27,14 +28,16 @@ function parseAdapter(discovery) {
|
|
|
27
28
|
function validateCachePolicy(discovery) {
|
|
28
29
|
const cache = (0, discovery_validation_js_1.closedRecord)(discovery.cache_policy, 'cache_policy', ['control', 'discovery']);
|
|
29
30
|
(0, discovery_validation_js_1.exact)(cache.control, 'no-store', 'cache_policy.control');
|
|
30
|
-
if (cache.discovery !== undefined &&
|
|
31
|
+
if (cache.discovery !== undefined &&
|
|
32
|
+
cache.discovery !== null &&
|
|
31
33
|
typeof cache.discovery !== 'string') {
|
|
32
34
|
throw new discovery_errors_js_1.TargetDiscoveryError('cache_policy.discovery must be a string or null');
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
37
|
function parseSizes(discovery) {
|
|
36
38
|
const sizes = (0, discovery_validation_js_1.closedRecord)(discovery.sizes, 'sizes', ['catalog', 'default']);
|
|
37
|
-
if (!Array.isArray(sizes.catalog) ||
|
|
39
|
+
if (!Array.isArray(sizes.catalog) ||
|
|
40
|
+
sizes.catalog.length === 0 ||
|
|
38
41
|
new Set(sizes.catalog).size !== sizes.catalog.length ||
|
|
39
42
|
sizes.catalog.some((size) => !['tiny', 'small', 'standard', 'large'].includes(String(size)))) {
|
|
40
43
|
throw new discovery_errors_js_1.TargetDiscoveryError('sizes.catalog contains an unsupported size');
|
|
@@ -48,26 +51,32 @@ function parseSizes(discovery) {
|
|
|
48
51
|
});
|
|
49
52
|
}
|
|
50
53
|
function parseExtensions(discovery, origin) {
|
|
51
|
-
if (discovery.extensions === undefined || discovery.extensions === null)
|
|
52
|
-
return null;
|
|
54
|
+
if (discovery.extensions === undefined || discovery.extensions === null) {
|
|
55
|
+
return Object.freeze({ credentialInstall: null, runIntent: null });
|
|
56
|
+
}
|
|
53
57
|
const extensions = (0, discovery_validation_js_1.closedRecord)(discovery.extensions, 'extensions', [
|
|
54
|
-
'connections',
|
|
58
|
+
'connections',
|
|
59
|
+
'credential_install',
|
|
60
|
+
'run_intent',
|
|
55
61
|
]);
|
|
56
62
|
if (extensions.connections === undefined) {
|
|
57
63
|
throw new discovery_errors_js_1.TargetDiscoveryError('extensions.connections is required');
|
|
58
64
|
}
|
|
59
65
|
const connections = (0, discovery_validation_js_1.closedRecord)(extensions.connections, 'extensions.connections', [
|
|
60
|
-
'kind',
|
|
66
|
+
'kind',
|
|
67
|
+
'base_url',
|
|
68
|
+
'route_templates',
|
|
61
69
|
]);
|
|
62
70
|
(0, discovery_validation_js_1.exact)(connections.kind, 'zerocloud.connections/v1', 'extensions.connections.kind');
|
|
63
71
|
(0, discovery_validation_js_1.sameOriginUrl)(connections.base_url, 'extensions.connections.base_url', origin);
|
|
64
|
-
const routes = (0, discovery_validation_js_1.closedRecord)(connections.route_templates, 'extensions.connections.route_templates', [
|
|
65
|
-
'list', 'create', 'update',
|
|
66
|
-
]);
|
|
72
|
+
const routes = (0, discovery_validation_js_1.closedRecord)(connections.route_templates, 'extensions.connections.route_templates', ['list', 'create', 'update']);
|
|
67
73
|
(0, route_template_js_1.routeTemplate)(routes.list, 'extensions.connections.route_templates.list', []);
|
|
68
74
|
(0, route_template_js_1.routeTemplate)(routes.create, 'extensions.connections.route_templates.create', []);
|
|
69
75
|
(0, route_template_js_1.routeTemplate)(routes.update, 'extensions.connections.route_templates.update', ['connection_id']);
|
|
70
|
-
return
|
|
76
|
+
return Object.freeze({
|
|
77
|
+
credentialInstall: (0, discovery_validation_js_1.parseCredentialInstall)(extensions.credential_install),
|
|
78
|
+
runIntent: (0, run_intent_discovery_js_1.parseRunIntent)(extensions.run_intent, origin),
|
|
79
|
+
});
|
|
71
80
|
}
|
|
72
81
|
function validateOAuthMetadata(metadata, origin, expected) {
|
|
73
82
|
const device = (0, discovery_validation_js_1.sameOriginUrl)(metadata.device_authorization_endpoint, 'OAuth metadata device_authorization_endpoint', origin);
|
|
@@ -85,7 +94,10 @@ function parseEndpoint(discovery, origin) {
|
|
|
85
94
|
(0, discovery_validation_js_1.exact)(binding.scope, 'organization', 'binding.scope');
|
|
86
95
|
(0, discovery_validation_js_1.exact)(binding.auth_location, 'authorization_header', 'binding.auth_location');
|
|
87
96
|
const endpoint = (0, discovery_validation_js_1.closedRecord)(discovery.endpoint, 'endpoint', ['url', 'capabilities']);
|
|
88
|
-
const capabilities = (0, discovery_validation_js_1.exactStringSet)(endpoint.capabilities, 'endpoint.capabilities', [
|
|
97
|
+
const capabilities = (0, discovery_validation_js_1.exactStringSet)(endpoint.capabilities, 'endpoint.capabilities', [
|
|
98
|
+
'exec',
|
|
99
|
+
'log_stream',
|
|
100
|
+
]);
|
|
89
101
|
const pagination = (0, discovery_validation_js_1.closedRecord)(discovery.pagination, 'pagination', [
|
|
90
102
|
'default_page_size',
|
|
91
103
|
'max_page_size',
|
|
@@ -119,7 +131,14 @@ function parseCapsule(discovery, origin) {
|
|
|
119
131
|
]);
|
|
120
132
|
(0, discovery_validation_js_1.exact)(capsule.name, 'openengine.capsules/v1', 'capsule_protocol.name');
|
|
121
133
|
(0, discovery_validation_js_1.exact)(capsule.major_version, 1, 'capsule_protocol.major_version');
|
|
122
|
-
const routes = (0, discovery_validation_js_1.closedRecord)(capsule.route_templates, 'capsule_protocol.route_templates', [
|
|
134
|
+
const routes = (0, discovery_validation_js_1.closedRecord)(capsule.route_templates, 'capsule_protocol.route_templates', [
|
|
135
|
+
'allocate',
|
|
136
|
+
'list',
|
|
137
|
+
'inspect',
|
|
138
|
+
'terminate',
|
|
139
|
+
'limits',
|
|
140
|
+
'access',
|
|
141
|
+
]);
|
|
123
142
|
const route = (name, variables) => (0, route_template_js_1.routeTemplate)(routes[name], `capsule_protocol.route_templates.${name}`, variables);
|
|
124
143
|
return Object.freeze({
|
|
125
144
|
baseUrl: (0, discovery_validation_js_1.sameOriginUrl)(capsule.base_url, 'capsule_protocol.base_url', origin),
|
|
@@ -145,7 +164,10 @@ function parseOAuth(discovery, origin) {
|
|
|
145
164
|
'audience',
|
|
146
165
|
]);
|
|
147
166
|
(0, discovery_validation_js_1.exact)(oauth.device_grant_type, 'urn:ietf:params:oauth:grant-type:device_code', 'oauth.device_grant_type');
|
|
148
|
-
(0, discovery_validation_js_1.exactStringSet)(oauth.device_exchange_fields, 'oauth.device_exchange_fields', [
|
|
167
|
+
(0, discovery_validation_js_1.exactStringSet)(oauth.device_exchange_fields, 'oauth.device_exchange_fields', [
|
|
168
|
+
'device_token',
|
|
169
|
+
'device_label',
|
|
170
|
+
]);
|
|
149
171
|
(0, discovery_validation_js_1.exact)(oauth.audience, 'capsule', 'oauth.audience');
|
|
150
172
|
return Object.freeze({
|
|
151
173
|
metadataUrl: (0, discovery_validation_js_1.sameOriginUrl)(oauth.metadata_url, 'oauth.metadata_url', origin),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TargetDiscoveryError } from './discovery-errors.mjs';
|
|
2
2
|
import { closedRecord, exact, exactStringSet, integer, parseCredentialInstall, sameOriginUrl, stringField, } from './discovery-validation.mjs';
|
|
3
|
+
import { parseRunIntent } from './run-intent-discovery.mjs';
|
|
3
4
|
import { routeTemplate } from './route-template.mjs';
|
|
4
5
|
export function parseAdapter(discovery) {
|
|
5
6
|
const adapter = closedRecord(discovery.adapter, 'adapter', ['name', 'major_version']);
|
|
@@ -15,14 +16,16 @@ export function parseAdapter(discovery) {
|
|
|
15
16
|
export function validateCachePolicy(discovery) {
|
|
16
17
|
const cache = closedRecord(discovery.cache_policy, 'cache_policy', ['control', 'discovery']);
|
|
17
18
|
exact(cache.control, 'no-store', 'cache_policy.control');
|
|
18
|
-
if (cache.discovery !== undefined &&
|
|
19
|
+
if (cache.discovery !== undefined &&
|
|
20
|
+
cache.discovery !== null &&
|
|
19
21
|
typeof cache.discovery !== 'string') {
|
|
20
22
|
throw new TargetDiscoveryError('cache_policy.discovery must be a string or null');
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
export function parseSizes(discovery) {
|
|
24
26
|
const sizes = closedRecord(discovery.sizes, 'sizes', ['catalog', 'default']);
|
|
25
|
-
if (!Array.isArray(sizes.catalog) ||
|
|
27
|
+
if (!Array.isArray(sizes.catalog) ||
|
|
28
|
+
sizes.catalog.length === 0 ||
|
|
26
29
|
new Set(sizes.catalog).size !== sizes.catalog.length ||
|
|
27
30
|
sizes.catalog.some((size) => !['tiny', 'small', 'standard', 'large'].includes(String(size)))) {
|
|
28
31
|
throw new TargetDiscoveryError('sizes.catalog contains an unsupported size');
|
|
@@ -36,26 +39,32 @@ export function parseSizes(discovery) {
|
|
|
36
39
|
});
|
|
37
40
|
}
|
|
38
41
|
export function parseExtensions(discovery, origin) {
|
|
39
|
-
if (discovery.extensions === undefined || discovery.extensions === null)
|
|
40
|
-
return null;
|
|
42
|
+
if (discovery.extensions === undefined || discovery.extensions === null) {
|
|
43
|
+
return Object.freeze({ credentialInstall: null, runIntent: null });
|
|
44
|
+
}
|
|
41
45
|
const extensions = closedRecord(discovery.extensions, 'extensions', [
|
|
42
|
-
'connections',
|
|
46
|
+
'connections',
|
|
47
|
+
'credential_install',
|
|
48
|
+
'run_intent',
|
|
43
49
|
]);
|
|
44
50
|
if (extensions.connections === undefined) {
|
|
45
51
|
throw new TargetDiscoveryError('extensions.connections is required');
|
|
46
52
|
}
|
|
47
53
|
const connections = closedRecord(extensions.connections, 'extensions.connections', [
|
|
48
|
-
'kind',
|
|
54
|
+
'kind',
|
|
55
|
+
'base_url',
|
|
56
|
+
'route_templates',
|
|
49
57
|
]);
|
|
50
58
|
exact(connections.kind, 'zerocloud.connections/v1', 'extensions.connections.kind');
|
|
51
59
|
sameOriginUrl(connections.base_url, 'extensions.connections.base_url', origin);
|
|
52
|
-
const routes = closedRecord(connections.route_templates, 'extensions.connections.route_templates', [
|
|
53
|
-
'list', 'create', 'update',
|
|
54
|
-
]);
|
|
60
|
+
const routes = closedRecord(connections.route_templates, 'extensions.connections.route_templates', ['list', 'create', 'update']);
|
|
55
61
|
routeTemplate(routes.list, 'extensions.connections.route_templates.list', []);
|
|
56
62
|
routeTemplate(routes.create, 'extensions.connections.route_templates.create', []);
|
|
57
63
|
routeTemplate(routes.update, 'extensions.connections.route_templates.update', ['connection_id']);
|
|
58
|
-
return
|
|
64
|
+
return Object.freeze({
|
|
65
|
+
credentialInstall: parseCredentialInstall(extensions.credential_install),
|
|
66
|
+
runIntent: parseRunIntent(extensions.run_intent, origin),
|
|
67
|
+
});
|
|
59
68
|
}
|
|
60
69
|
export function validateOAuthMetadata(metadata, origin, expected) {
|
|
61
70
|
const device = sameOriginUrl(metadata.device_authorization_endpoint, 'OAuth metadata device_authorization_endpoint', origin);
|
|
@@ -73,7 +82,10 @@ export function parseEndpoint(discovery, origin) {
|
|
|
73
82
|
exact(binding.scope, 'organization', 'binding.scope');
|
|
74
83
|
exact(binding.auth_location, 'authorization_header', 'binding.auth_location');
|
|
75
84
|
const endpoint = closedRecord(discovery.endpoint, 'endpoint', ['url', 'capabilities']);
|
|
76
|
-
const capabilities = exactStringSet(endpoint.capabilities, 'endpoint.capabilities', [
|
|
85
|
+
const capabilities = exactStringSet(endpoint.capabilities, 'endpoint.capabilities', [
|
|
86
|
+
'exec',
|
|
87
|
+
'log_stream',
|
|
88
|
+
]);
|
|
77
89
|
const pagination = closedRecord(discovery.pagination, 'pagination', [
|
|
78
90
|
'default_page_size',
|
|
79
91
|
'max_page_size',
|
|
@@ -107,7 +119,14 @@ export function parseCapsule(discovery, origin) {
|
|
|
107
119
|
]);
|
|
108
120
|
exact(capsule.name, 'openengine.capsules/v1', 'capsule_protocol.name');
|
|
109
121
|
exact(capsule.major_version, 1, 'capsule_protocol.major_version');
|
|
110
|
-
const routes = closedRecord(capsule.route_templates, 'capsule_protocol.route_templates', [
|
|
122
|
+
const routes = closedRecord(capsule.route_templates, 'capsule_protocol.route_templates', [
|
|
123
|
+
'allocate',
|
|
124
|
+
'list',
|
|
125
|
+
'inspect',
|
|
126
|
+
'terminate',
|
|
127
|
+
'limits',
|
|
128
|
+
'access',
|
|
129
|
+
]);
|
|
111
130
|
const route = (name, variables) => routeTemplate(routes[name], `capsule_protocol.route_templates.${name}`, variables);
|
|
112
131
|
return Object.freeze({
|
|
113
132
|
baseUrl: sameOriginUrl(capsule.base_url, 'capsule_protocol.base_url', origin),
|
|
@@ -133,7 +152,10 @@ export function parseOAuth(discovery, origin) {
|
|
|
133
152
|
'audience',
|
|
134
153
|
]);
|
|
135
154
|
exact(oauth.device_grant_type, 'urn:ietf:params:oauth:grant-type:device_code', 'oauth.device_grant_type');
|
|
136
|
-
exactStringSet(oauth.device_exchange_fields, 'oauth.device_exchange_fields', [
|
|
155
|
+
exactStringSet(oauth.device_exchange_fields, 'oauth.device_exchange_fields', [
|
|
156
|
+
'device_token',
|
|
157
|
+
'device_label',
|
|
158
|
+
]);
|
|
137
159
|
exact(oauth.audience, 'capsule', 'oauth.audience');
|
|
138
160
|
return Object.freeze({
|
|
139
161
|
metadataUrl: sameOriginUrl(oauth.metadata_url, 'oauth.metadata_url', origin),
|