@assemblyline-agents/core 0.1.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.
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/dist/adapter-metadata.d.ts +7 -0
- package/dist/adapter-metadata.d.ts.map +1 -0
- package/dist/adapter-metadata.js +232 -0
- package/dist/adapter-metadata.js.map +1 -0
- package/dist/artifact-dir.d.ts +21 -0
- package/dist/artifact-dir.d.ts.map +1 -0
- package/dist/artifact-dir.js +35 -0
- package/dist/artifact-dir.js.map +1 -0
- package/dist/brand.d.ts +37 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +42 -0
- package/dist/brand.js.map +1 -0
- package/dist/connection-auth.d.ts +27 -0
- package/dist/connection-auth.d.ts.map +1 -0
- package/dist/connection-auth.js +75 -0
- package/dist/connection-auth.js.map +1 -0
- package/dist/connection-types.d.ts +318 -0
- package/dist/connection-types.d.ts.map +1 -0
- package/dist/connection-types.js +2 -0
- package/dist/connection-types.js.map +1 -0
- package/dist/definitions.d.ts +98 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +193 -0
- package/dist/definitions.js.map +1 -0
- package/dist/deploy.d.ts +151 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +25 -0
- package/dist/deploy.js.map +1 -0
- package/dist/env-alias.d.ts +35 -0
- package/dist/env-alias.d.ts.map +1 -0
- package/dist/env-alias.js +79 -0
- package/dist/env-alias.js.map +1 -0
- package/dist/harness.d.ts +299 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +22 -0
- package/dist/harness.js.map +1 -0
- package/dist/index.d.ts +487 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/json-schema-validate.d.ts +17 -0
- package/dist/json-schema-validate.d.ts.map +1 -0
- package/dist/json-schema-validate.js +79 -0
- package/dist/json-schema-validate.js.map +1 -0
- package/dist/manifest-types.d.ts +248 -0
- package/dist/manifest-types.d.ts.map +1 -0
- package/dist/manifest-types.js +2 -0
- package/dist/manifest-types.js.map +1 -0
- package/dist/plugin.d.ts +134 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +830 -0
- package/dist/plugin.js.map +1 -0
- package/dist/provider.d.ts +43 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +33 -0
- package/dist/provider.js.map +1 -0
- package/dist/resource-types.d.ts +119 -0
- package/dist/resource-types.d.ts.map +1 -0
- package/dist/resource-types.js +2 -0
- package/dist/resource-types.js.map +1 -0
- package/dist/sandbox-filesystem-contract.d.ts +28 -0
- package/dist/sandbox-filesystem-contract.d.ts.map +1 -0
- package/dist/sandbox-filesystem-contract.js +64 -0
- package/dist/sandbox-filesystem-contract.js.map +1 -0
- package/dist/sandbox-paths.d.ts +24 -0
- package/dist/sandbox-paths.d.ts.map +1 -0
- package/dist/sandbox-paths.js +107 -0
- package/dist/sandbox-paths.js.map +1 -0
- package/dist/sandbox-security.d.ts +10 -0
- package/dist/sandbox-security.d.ts.map +1 -0
- package/dist/sandbox-security.js +34 -0
- package/dist/sandbox-security.js.map +1 -0
- package/dist/sandbox-types.d.ts +114 -0
- package/dist/sandbox-types.d.ts.map +1 -0
- package/dist/sandbox-types.js +2 -0
- package/dist/sandbox-types.js.map +1 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenEve contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @assemblyline-agents/core
|
|
2
|
+
|
|
3
|
+
Core contracts and definition primitives for Assembly Line, a vendor-neutral, filesystem-first framework for durable AI agents.
|
|
4
|
+
|
|
5
|
+
This package has no runtime engine of its own. It provides the shared vocabulary the rest of the framework builds on: agent, channel, connection, and adapter definitions; connection plugin metadata and factories (`definePlugin`, `defineMcpPluginConnection`, and related helpers); the `AgentHarness` contract; manifest and resource types; deploy contracts; sandbox path utilities; and JSON Schema validation. Provider, channel, and adapter packages depend on `@assemblyline-agents/core` to stay decoupled from the runtime.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install @assemblyline-agents/core
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Part of Assembly Line
|
|
14
|
+
|
|
15
|
+
This package is part of [Assembly Line](https://github.com/jasonbadeaux/openeve), a vendor-neutral, filesystem-first framework for durable AI agents. See the developer documentation in [docs/developers/](https://github.com/jasonbadeaux/openeve/tree/main/docs/developers) for setup, agent authoring, and deployment guides.
|
|
16
|
+
|
|
17
|
+
## License
|
|
18
|
+
|
|
19
|
+
MIT
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AdapterDefinition, AdapterProviderMetadata, AdapterRole, JsonObject } from "./index.js";
|
|
2
|
+
export declare function adapter(kind: string, options?: JsonObject, extras?: {
|
|
3
|
+
package?: string;
|
|
4
|
+
}): AdapterDefinition;
|
|
5
|
+
export declare function adapterProviderMetadata(kind: string, role?: AdapterRole): AdapterProviderMetadata | undefined;
|
|
6
|
+
export declare function allAdapterProviderMetadata(): AdapterProviderMetadata[];
|
|
7
|
+
//# sourceMappingURL=adapter-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-metadata.d.ts","sourceRoot":"","sources":["../src/adapter-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGtG,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,EAAE,MAAM,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,iBAAiB,CAIpH;AA4ND,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,uBAAuB,GAAG,SAAS,CAG7G;AAED,wBAAgB,0BAA0B,IAAI,uBAAuB,EAAE,CAEtE"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { allConnectionPluginMetadata } from "./plugin.js";
|
|
2
|
+
export function adapter(kind, options = {}, extras = {}) {
|
|
3
|
+
const definition = { kind, options };
|
|
4
|
+
if (extras.package)
|
|
5
|
+
definition.packageName = extras.package;
|
|
6
|
+
return definition;
|
|
7
|
+
}
|
|
8
|
+
const BUILT_IN_ADAPTER_METADATA = [
|
|
9
|
+
{ kind: "local", role: "deploy", capabilities: ["local-server"] },
|
|
10
|
+
{ kind: "local", role: "state", capabilities: ["dev-state"] },
|
|
11
|
+
{ kind: "local", role: "blob", capabilities: ["dev-blob"] },
|
|
12
|
+
{ kind: "local", role: "sandbox", capabilities: ["trusted-local-shell"] },
|
|
13
|
+
{ kind: "local", role: "scheduler", capabilities: ["in-process-scheduler"] },
|
|
14
|
+
{ kind: "gateway", role: "scheduler", optionalEnv: ["OPENEVE_SCHEDULER_SECRET"], capabilities: ["external-cron", "gateway-triggered-scheduler"] },
|
|
15
|
+
{ kind: "postgres", role: "scheduler", capabilities: ["state-backed-polling", "multi-worker-idempotency"] },
|
|
16
|
+
{ kind: "node", role: "runtime", packageName: "@assemblyline-agents/node", capabilities: ["http-runtime", "local-server"] },
|
|
17
|
+
{
|
|
18
|
+
kind: "railway",
|
|
19
|
+
role: "deploy",
|
|
20
|
+
packageName: "@assemblyline-agents/railway",
|
|
21
|
+
requiredEnv: ["RAILWAY_TOKEN"],
|
|
22
|
+
capabilities: ["hosted-node-runtime", "persistent-storage", "remote-exec"],
|
|
23
|
+
setup: [
|
|
24
|
+
{
|
|
25
|
+
kind: "deploy",
|
|
26
|
+
name: "railway-project",
|
|
27
|
+
required: true,
|
|
28
|
+
message: "Configure a Railway project/service before publishing."
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
kind: "docker",
|
|
34
|
+
role: "deploy",
|
|
35
|
+
packageName: "@assemblyline-agents/docker",
|
|
36
|
+
optionalEnv: ["OPENEVE_DOCKER_IMAGE"],
|
|
37
|
+
capabilities: ["container-runtime", "persistent-storage", "remote-exec"],
|
|
38
|
+
setup: [
|
|
39
|
+
{
|
|
40
|
+
kind: "deploy",
|
|
41
|
+
name: "docker-cli",
|
|
42
|
+
required: true,
|
|
43
|
+
message: "Install and start Docker before publishing with the Docker deploy adapter."
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
kind: "docker",
|
|
49
|
+
role: "sandbox",
|
|
50
|
+
packageName: "@assemblyline-agents/docker",
|
|
51
|
+
optionalEnv: ["DOCKER_HOST", "OPENEVE_DOCKER_NETWORK", "OPENEVE_DOCKER_CPUS", "OPENEVE_DOCKER_MEMORY", "OPENEVE_DOCKER_PULL_POLICY", "OPENEVE_DOCKER_COMMAND_TIMEOUT_MS"],
|
|
52
|
+
capabilities: ["sandbox", "shell", "filesystem", "containers", "lifecycle"],
|
|
53
|
+
setup: [
|
|
54
|
+
{
|
|
55
|
+
kind: "sandbox",
|
|
56
|
+
name: "docker-cli",
|
|
57
|
+
required: true,
|
|
58
|
+
message: "Install and start Docker before using the Docker sandbox adapter."
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
kind: "fly",
|
|
64
|
+
role: "deploy",
|
|
65
|
+
packageName: "@assemblyline-agents/fly",
|
|
66
|
+
requiredEnv: ["FLY_API_TOKEN"],
|
|
67
|
+
optionalEnv: ["FLY_APP_NAME", "FLY_ORG", "FLY_REGION"],
|
|
68
|
+
capabilities: ["hosted-container-runtime", "persistent-storage", "remote-exec"],
|
|
69
|
+
setup: [
|
|
70
|
+
{
|
|
71
|
+
kind: "deploy",
|
|
72
|
+
name: "fly-app",
|
|
73
|
+
required: true,
|
|
74
|
+
message: "Configure a Fly app name through gateway options, --fly-app, FLY_APP_NAME, or package config before publishing."
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
kind: "vps",
|
|
80
|
+
role: "deploy",
|
|
81
|
+
stability: "supported",
|
|
82
|
+
packageName: "@assemblyline-agents/vps",
|
|
83
|
+
optionalEnv: ["OPENEVE_VPS_HOSTS_FILE"],
|
|
84
|
+
capabilities: ["hosted-container-runtime", "persistent-storage", "remote-exec", "blue-green"],
|
|
85
|
+
setup: [
|
|
86
|
+
{
|
|
87
|
+
kind: "deploy",
|
|
88
|
+
name: "vps-host-inventory",
|
|
89
|
+
required: true,
|
|
90
|
+
message: "Register an existing supported Linux VPS in openeve.hosts.json before publishing."
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
kind: "postgres",
|
|
96
|
+
role: "state",
|
|
97
|
+
packageName: "@assemblyline-agents/postgres",
|
|
98
|
+
requiredEnv: ["DATABASE_URL"],
|
|
99
|
+
capabilities: ["durable-state", "migrations"],
|
|
100
|
+
setup: [
|
|
101
|
+
{
|
|
102
|
+
kind: "migration",
|
|
103
|
+
name: "postgres-schema",
|
|
104
|
+
required: true,
|
|
105
|
+
message: "Apply OpenEve state migrations to Postgres before production runs."
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
kind: "s3",
|
|
111
|
+
role: "blob",
|
|
112
|
+
packageName: "@assemblyline-agents/s3",
|
|
113
|
+
requiredEnv: ["S3_BUCKET", "S3_REGION", "S3_ACCESS_KEY_ID", "S3_SECRET_ACCESS_KEY"],
|
|
114
|
+
optionalEnv: ["S3_ENDPOINT", "S3_FORCE_PATH_STYLE", "S3_PREFIX", "S3_PUBLIC_BASE_URL"],
|
|
115
|
+
capabilities: ["blob", "attachments", "artifacts"]
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
kind: "r2",
|
|
119
|
+
role: "blob",
|
|
120
|
+
packageName: "@assemblyline-agents/r2",
|
|
121
|
+
requiredEnv: ["R2_ACCOUNT_ID", "R2_ACCESS_KEY_ID", "R2_SECRET_ACCESS_KEY", "R2_BUCKET"],
|
|
122
|
+
optionalEnv: ["R2_PREFIX", "R2_PUBLIC_BASE_URL"],
|
|
123
|
+
capabilities: ["blob", "attachments", "artifacts", "s3-compatible"]
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
kind: "daytona",
|
|
127
|
+
role: "sandbox",
|
|
128
|
+
packageName: "@assemblyline-agents/daytona",
|
|
129
|
+
requiredEnv: ["DAYTONA_API_KEY"],
|
|
130
|
+
optionalEnv: [
|
|
131
|
+
"DAYTONA_API_URL",
|
|
132
|
+
"DAYTONA_TARGET",
|
|
133
|
+
"OPENEVE_DAYTONA_CREATE_TIMEOUT_SECONDS",
|
|
134
|
+
"OPENEVE_DAYTONA_LIFECYCLE_TIMEOUT_SECONDS",
|
|
135
|
+
"OPENEVE_DAYTONA_AUTO_STOP_MINUTES",
|
|
136
|
+
"OPENEVE_DAYTONA_AUTO_ARCHIVE_MINUTES",
|
|
137
|
+
"OPENEVE_DAYTONA_AUTO_DELETE_MINUTES",
|
|
138
|
+
"OPENEVE_DAYTONA_EPHEMERAL",
|
|
139
|
+
"OPENEVE_DAYTONA_NETWORK_BLOCK_ALL",
|
|
140
|
+
"OPENEVE_DAYTONA_NETWORK_ALLOW_LIST",
|
|
141
|
+
"OPENEVE_DAYTONA_DOMAIN_ALLOW_LIST",
|
|
142
|
+
"OPENEVE_ALLOW_LOCAL_SANDBOX_FALLBACK"
|
|
143
|
+
],
|
|
144
|
+
capabilities: ["sandbox", "shell", "filesystem", "lifecycle", "snapshots"]
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
kind: "e2b",
|
|
148
|
+
role: "sandbox",
|
|
149
|
+
packageName: "@assemblyline-agents/e2b",
|
|
150
|
+
requiredEnv: ["E2B_API_KEY"],
|
|
151
|
+
optionalEnv: [
|
|
152
|
+
"E2B_TEMPLATE",
|
|
153
|
+
"OPENEVE_E2B_TIMEOUT_MS",
|
|
154
|
+
"OPENEVE_E2B_RETAIN_TIMEOUT_MS",
|
|
155
|
+
"OPENEVE_E2B_REQUEST_TIMEOUT_MS",
|
|
156
|
+
"OPENEVE_E2B_PAUSE_KEEP_MEMORY",
|
|
157
|
+
"OPENEVE_E2B_ALLOW_INTERNET_ACCESS"
|
|
158
|
+
],
|
|
159
|
+
capabilities: ["sandbox", "shell", "filesystem", "lifecycle", "snapshots"]
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
kind: "modal",
|
|
163
|
+
role: "sandbox",
|
|
164
|
+
packageName: "@assemblyline-agents/modal",
|
|
165
|
+
requiredEnv: ["MODAL_TOKEN_ID", "MODAL_TOKEN_SECRET"],
|
|
166
|
+
optionalEnv: ["MODAL_APP_NAME", "OPENEVE_MODAL_TIMEOUT_MS", "OPENEVE_MODAL_WAIT_READY"],
|
|
167
|
+
capabilities: ["sandbox", "shell", "filesystem", "lifecycle", "snapshots"]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
kind: "slack",
|
|
171
|
+
role: "channel",
|
|
172
|
+
packageName: "@assemblyline-agents/slack",
|
|
173
|
+
requiredEnv: ["SLACK_SIGNING_SECRET", "SLACK_BOT_TOKEN"],
|
|
174
|
+
optionalEnv: ["SLACK_BOT_USER_ID", "SLACK_ASSISTANT_ENABLED"],
|
|
175
|
+
capabilities: ["http-channel", "events-api", "assistant"]
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
kind: "discord",
|
|
179
|
+
role: "channel",
|
|
180
|
+
packageName: "@assemblyline-agents/discord",
|
|
181
|
+
requiredEnv: ["DISCORD_PUBLIC_KEY", "DISCORD_APPLICATION_ID", "DISCORD_BOT_TOKEN"],
|
|
182
|
+
optionalEnv: ["DISCORD_GATEWAY_ENABLED", "DISCORD_GATEWAY_INTENTS", "DISCORD_BOT_USER_ID"],
|
|
183
|
+
capabilities: ["http-channel", "ingress", "gateway", "interactions", "agent-chat"]
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
kind: "telegram",
|
|
187
|
+
role: "channel",
|
|
188
|
+
packageName: "@assemblyline-agents/telegram",
|
|
189
|
+
requiredEnv: ["TELEGRAM_BOT_TOKEN"],
|
|
190
|
+
optionalEnv: ["TELEGRAM_WEBHOOK_SECRET"],
|
|
191
|
+
capabilities: ["http-channel", "bot-api", "agent-chat", "rich-actions"]
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
kind: "github-app",
|
|
195
|
+
role: "connection",
|
|
196
|
+
packageName: "@assemblyline-agents/github",
|
|
197
|
+
requiredEnv: ["GITHUB_APP_ID", "GITHUB_PRIVATE_KEY"],
|
|
198
|
+
optionalEnv: ["GITHUB_CLIENT_ID", "GITHUB_CLIENT_SECRET"],
|
|
199
|
+
capabilities: ["github-app", "installation-token"]
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
kind: "teams",
|
|
203
|
+
role: "channel",
|
|
204
|
+
packageName: "@assemblyline-agents/teams",
|
|
205
|
+
requiredEnv: ["MICROSOFT_APP_ID", "MICROSOFT_APP_PASSWORD"],
|
|
206
|
+
optionalEnv: ["OPENEVE_TEAMS_ALLOWED_TENANTS", "OPENEVE_TEAMS_ALLOWED_SERVICE_URLS"],
|
|
207
|
+
capabilities: ["http-channel", "bot-framework", "agent-chat", "rich-actions"]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
kind: "microsoft-bot",
|
|
211
|
+
role: "connection",
|
|
212
|
+
packageName: "@assemblyline-agents/teams",
|
|
213
|
+
requiredEnv: ["MICROSOFT_APP_ID", "MICROSOFT_APP_PASSWORD"],
|
|
214
|
+
capabilities: ["bot-framework"]
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
kind: "livekit",
|
|
218
|
+
role: "connection",
|
|
219
|
+
packageName: "@assemblyline-agents/livekit",
|
|
220
|
+
requiredEnv: ["LIVEKIT_URL", "LIVEKIT_API_KEY", "LIVEKIT_API_SECRET"],
|
|
221
|
+
optionalEnv: ["LIVEKIT_OUTBOUND_TRUNK_ID", "LIVEKIT_VOICE_AGENT_NAME"],
|
|
222
|
+
capabilities: ["agent-dispatch", "sip-call", "sip-admin", "typed-tools"]
|
|
223
|
+
}
|
|
224
|
+
];
|
|
225
|
+
export function adapterProviderMetadata(kind, role) {
|
|
226
|
+
return [...BUILT_IN_ADAPTER_METADATA, ...allConnectionPluginMetadata()]
|
|
227
|
+
.find((metadata) => metadata.kind === kind && (!role || metadata.role === role));
|
|
228
|
+
}
|
|
229
|
+
export function allAdapterProviderMetadata() {
|
|
230
|
+
return [...BUILT_IN_ADAPTER_METADATA.map((metadata) => ({ ...metadata })), ...allConnectionPluginMetadata()];
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=adapter-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-metadata.js","sourceRoot":"","sources":["../src/adapter-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dual-read resolution for the generated artifact directory (`.assembly-line`
|
|
3
|
+
* with the legacy `.openeve` spelling). Core is platform-neutral, so callers
|
|
4
|
+
* inject an existence probe (typically `existsSync`-based).
|
|
5
|
+
*
|
|
6
|
+
* The two names are never merged: an agent parent directory containing both is
|
|
7
|
+
* a hard error so a stale tree can never be silently mixed with a live one.
|
|
8
|
+
*/
|
|
9
|
+
export declare const KNOWN_ARTIFACT_DIR_NAMES: readonly string[];
|
|
10
|
+
export declare class ArtifactDirConflictError extends Error {
|
|
11
|
+
constructor(parentDir: string);
|
|
12
|
+
}
|
|
13
|
+
export interface ResolveArtifactDirOptions {
|
|
14
|
+
/** Returns true when `parentDir` contains an entry named `name`. */
|
|
15
|
+
exists(parentDir: string, name: string): boolean;
|
|
16
|
+
/** Directory name used when neither spelling exists yet. */
|
|
17
|
+
defaultName?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function resolveArtifactDirName(parentDir: string, options: ResolveArtifactDirOptions): string;
|
|
20
|
+
export declare function isKnownArtifactDirName(name: string): boolean;
|
|
21
|
+
//# sourceMappingURL=artifact-dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-dir.d.ts","sourceRoot":"","sources":["../src/artifact-dir.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAGrD,CAAC;AAEF,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,SAAS,EAAE,MAAM;CAO9B;AAED,MAAM,WAAW,yBAAyB;IACxC,oEAAoE;IACpE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACjD,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,yBAAyB,GACjC,MAAM,CAOR;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ARTIFACT_DIR_NAME, LEGACY_ARTIFACT_DIR_NAME } from "./brand.js";
|
|
2
|
+
/**
|
|
3
|
+
* Dual-read resolution for the generated artifact directory (`.assembly-line`
|
|
4
|
+
* with the legacy `.openeve` spelling). Core is platform-neutral, so callers
|
|
5
|
+
* inject an existence probe (typically `existsSync`-based).
|
|
6
|
+
*
|
|
7
|
+
* The two names are never merged: an agent parent directory containing both is
|
|
8
|
+
* a hard error so a stale tree can never be silently mixed with a live one.
|
|
9
|
+
*/
|
|
10
|
+
export const KNOWN_ARTIFACT_DIR_NAMES = [
|
|
11
|
+
ARTIFACT_DIR_NAME,
|
|
12
|
+
LEGACY_ARTIFACT_DIR_NAME,
|
|
13
|
+
];
|
|
14
|
+
export class ArtifactDirConflictError extends Error {
|
|
15
|
+
constructor(parentDir) {
|
|
16
|
+
super(`Both ${ARTIFACT_DIR_NAME} and ${LEGACY_ARTIFACT_DIR_NAME} exist under ${parentDir}. ` +
|
|
17
|
+
`Remove or rename one of them; they are alternate spellings of the same artifact directory and cannot coexist.`);
|
|
18
|
+
this.name = "ArtifactDirConflictError";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function resolveArtifactDirName(parentDir, options) {
|
|
22
|
+
const hasNew = options.exists(parentDir, ARTIFACT_DIR_NAME);
|
|
23
|
+
const hasLegacy = options.exists(parentDir, LEGACY_ARTIFACT_DIR_NAME);
|
|
24
|
+
if (hasNew && hasLegacy)
|
|
25
|
+
throw new ArtifactDirConflictError(parentDir);
|
|
26
|
+
if (hasNew)
|
|
27
|
+
return ARTIFACT_DIR_NAME;
|
|
28
|
+
if (hasLegacy)
|
|
29
|
+
return LEGACY_ARTIFACT_DIR_NAME;
|
|
30
|
+
return options.defaultName ?? ARTIFACT_DIR_NAME;
|
|
31
|
+
}
|
|
32
|
+
export function isKnownArtifactDirName(name) {
|
|
33
|
+
return KNOWN_ARTIFACT_DIR_NAMES.includes(name);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=artifact-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-dir.js","sourceRoot":"","sources":["../src/artifact-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,iBAAiB;IACjB,wBAAwB;CACzB,CAAC;AAEF,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,SAAiB;QAC3B,KAAK,CACH,QAAQ,iBAAiB,QAAQ,wBAAwB,gBAAgB,SAAS,IAAI;YACpF,+GAA+G,CAClH,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AASD,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,OAAkC;IAElC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;IACtE,IAAI,MAAM,IAAI,SAAS;QAAE,MAAM,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACvE,IAAI,MAAM;QAAE,OAAO,iBAAiB,CAAC;IACrC,IAAI,SAAS;QAAE,OAAO,wBAAwB,CAAC;IAC/C,OAAO,OAAO,CAAC,WAAW,IAAI,iBAAiB,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/brand.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central brand/name constants for the OpenEve → Assembly Line rename.
|
|
3
|
+
*
|
|
4
|
+
* Every module that needs a brand-derived identifier imports it from here
|
|
5
|
+
* instead of spelling a literal. Legacy values remain supported through the
|
|
6
|
+
* compatibility window; identifiers that must never change (crypto contexts,
|
|
7
|
+
* migration IDs, physical database names) are documented in
|
|
8
|
+
* docs/rename/manifest.md and deliberately absent from this module.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PRODUCT_NAME = "Assembly Line";
|
|
11
|
+
export declare const LEGACY_PRODUCT_NAME = "OpenEve";
|
|
12
|
+
export declare const ENV_PREFIX = "ASSEMBLY_LINE_";
|
|
13
|
+
export declare const LEGACY_ENV_PREFIX = "OPENEVE_";
|
|
14
|
+
export declare const ARTIFACT_DIR_NAME = ".assembly-line";
|
|
15
|
+
export declare const LEGACY_ARTIFACT_DIR_NAME = ".openeve";
|
|
16
|
+
export declare const HOSTS_FILE_NAME = "assembly-line.hosts.json";
|
|
17
|
+
export declare const LEGACY_HOSTS_FILE_NAME = "openeve.hosts.json";
|
|
18
|
+
export declare const INTERNAL_ROUTE_PREFIX = "/assembly-line";
|
|
19
|
+
export declare const LEGACY_INTERNAL_ROUTE_PREFIX = "/openeve";
|
|
20
|
+
export declare const SCHEDULER_SECRET_HEADER = "x-assembly-line-scheduler-secret";
|
|
21
|
+
export declare const LEGACY_SCHEDULER_SECRET_HEADER = "x-openeve-scheduler-secret";
|
|
22
|
+
export declare const PLUGIN_EXPORT_NAME = "assemblyLinePlugin";
|
|
23
|
+
export declare const LEGACY_PLUGIN_EXPORT_NAME = "openevePlugin";
|
|
24
|
+
export declare const PROVIDER_EXPORT_NAME = "assemblyLineProvider";
|
|
25
|
+
export declare const LEGACY_PROVIDER_EXPORT_NAME = "openeveProvider";
|
|
26
|
+
export declare const NPM_SCOPE = "@assemblyline-agents";
|
|
27
|
+
export declare const LEGACY_NPM_SCOPE = "@openeve";
|
|
28
|
+
/**
|
|
29
|
+
* Reads a module-surface export that may live under its new or legacy name.
|
|
30
|
+
* The new name wins; defining both with different values is a configuration
|
|
31
|
+
* error surfaced to the caller so it can fail with actionable context.
|
|
32
|
+
*/
|
|
33
|
+
export declare function readAliasedExport(candidate: object, newName: string, legacyName: string): {
|
|
34
|
+
value: unknown;
|
|
35
|
+
conflict: boolean;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=brand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAC5C,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAC3C,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAE3D,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AACtD,eAAO,MAAM,4BAA4B,aAAa,CAAC;AAEvD,eAAO,MAAM,uBAAuB,qCAAqC,CAAC;AAC1E,eAAO,MAAM,8BAA8B,+BAA+B,CAAC;AAE3E,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAE7D,eAAO,MAAM,SAAS,yBAAyB,CAAC;AAChD,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAQvC"}
|
package/dist/brand.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central brand/name constants for the OpenEve → Assembly Line rename.
|
|
3
|
+
*
|
|
4
|
+
* Every module that needs a brand-derived identifier imports it from here
|
|
5
|
+
* instead of spelling a literal. Legacy values remain supported through the
|
|
6
|
+
* compatibility window; identifiers that must never change (crypto contexts,
|
|
7
|
+
* migration IDs, physical database names) are documented in
|
|
8
|
+
* docs/rename/manifest.md and deliberately absent from this module.
|
|
9
|
+
*/
|
|
10
|
+
export const PRODUCT_NAME = "Assembly Line";
|
|
11
|
+
export const LEGACY_PRODUCT_NAME = "OpenEve";
|
|
12
|
+
export const ENV_PREFIX = "ASSEMBLY_LINE_";
|
|
13
|
+
export const LEGACY_ENV_PREFIX = "OPENEVE_";
|
|
14
|
+
export const ARTIFACT_DIR_NAME = ".assembly-line";
|
|
15
|
+
export const LEGACY_ARTIFACT_DIR_NAME = ".openeve";
|
|
16
|
+
export const HOSTS_FILE_NAME = "assembly-line.hosts.json";
|
|
17
|
+
export const LEGACY_HOSTS_FILE_NAME = "openeve.hosts.json";
|
|
18
|
+
export const INTERNAL_ROUTE_PREFIX = "/assembly-line";
|
|
19
|
+
export const LEGACY_INTERNAL_ROUTE_PREFIX = "/openeve";
|
|
20
|
+
export const SCHEDULER_SECRET_HEADER = "x-assembly-line-scheduler-secret";
|
|
21
|
+
export const LEGACY_SCHEDULER_SECRET_HEADER = "x-openeve-scheduler-secret";
|
|
22
|
+
export const PLUGIN_EXPORT_NAME = "assemblyLinePlugin";
|
|
23
|
+
export const LEGACY_PLUGIN_EXPORT_NAME = "openevePlugin";
|
|
24
|
+
export const PROVIDER_EXPORT_NAME = "assemblyLineProvider";
|
|
25
|
+
export const LEGACY_PROVIDER_EXPORT_NAME = "openeveProvider";
|
|
26
|
+
export const NPM_SCOPE = "@assemblyline-agents";
|
|
27
|
+
export const LEGACY_NPM_SCOPE = "@openeve";
|
|
28
|
+
/**
|
|
29
|
+
* Reads a module-surface export that may live under its new or legacy name.
|
|
30
|
+
* The new name wins; defining both with different values is a configuration
|
|
31
|
+
* error surfaced to the caller so it can fail with actionable context.
|
|
32
|
+
*/
|
|
33
|
+
export function readAliasedExport(candidate, newName, legacyName) {
|
|
34
|
+
const record = candidate;
|
|
35
|
+
const next = record[newName];
|
|
36
|
+
const legacy = record[legacyName];
|
|
37
|
+
if (next !== undefined && legacy !== undefined && next !== legacy) {
|
|
38
|
+
return { value: undefined, conflict: true };
|
|
39
|
+
}
|
|
40
|
+
return { value: next !== undefined ? next : legacy, conflict: false };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=brand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAE7C,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAC1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAE3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AAC1E,MAAM,CAAC,MAAM,8BAA8B,GAAG,4BAA4B,CAAC;AAE3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAEzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;AAE7D,MAAM,CAAC,MAAM,SAAS,GAAG,sBAAsB,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,OAAe,EACf,UAAkB;IAElB,MAAM,MAAM,GAAG,SAAoC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ConnectionAccessDefinition, ConnectionAuthDefinition, ConnectionAuthorizationChallenge, ToolFilterDefinition } from "./index.js";
|
|
2
|
+
export declare class ConnectionAuthorizationRequiredError extends Error {
|
|
3
|
+
readonly connectionName: string;
|
|
4
|
+
readonly reason: string;
|
|
5
|
+
readonly challenge?: ConnectionAuthorizationChallenge;
|
|
6
|
+
constructor(connectionName: string, options?: {
|
|
7
|
+
message?: string;
|
|
8
|
+
reason?: string;
|
|
9
|
+
challenge?: ConnectionAuthorizationChallenge;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export declare class ConnectionAuthorizationFailedError extends Error {
|
|
13
|
+
readonly connectionName: string;
|
|
14
|
+
readonly reason: string;
|
|
15
|
+
readonly retryable: boolean;
|
|
16
|
+
constructor(connectionName: string, options?: {
|
|
17
|
+
message?: string;
|
|
18
|
+
reason?: string;
|
|
19
|
+
retryable?: boolean;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export declare function isConnectionAuthorizationRequiredError(error: unknown): error is ConnectionAuthorizationRequiredError;
|
|
23
|
+
export declare function isConnectionAuthorizationFailedError(error: unknown): error is ConnectionAuthorizationFailedError;
|
|
24
|
+
export declare function validateConnectionAuthDefinition(auth: ConnectionAuthDefinition | undefined, prefix: string): void;
|
|
25
|
+
export declare function validateToolFilter(filter: ToolFilterDefinition | undefined, prefix: string): void;
|
|
26
|
+
export declare function validateConnectionAccess(access: ConnectionAccessDefinition | undefined, prefix: string): void;
|
|
27
|
+
//# sourceMappingURL=connection-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-auth.d.ts","sourceRoot":"","sources":["../src/connection-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,gCAAgC,EAChC,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,qBAAa,oCAAqC,SAAQ,KAAK;IAC7D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,gCAAgC,CAAC;gBAE1C,cAAc,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,gCAAgC,CAAA;KAAO;CAOtI;AAED,qBAAa,kCAAmC,SAAQ,KAAK;IAC3D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,cAAc,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO;CAO7G;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oCAAoC,CAEpH;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kCAAkC,CAEhH;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,wBAAwB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgBjH;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAKjG;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,0BAA0B,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAa7G"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export class ConnectionAuthorizationRequiredError extends Error {
|
|
2
|
+
connectionName;
|
|
3
|
+
reason;
|
|
4
|
+
challenge;
|
|
5
|
+
constructor(connectionName, options = {}) {
|
|
6
|
+
super(options.message ?? `Connection ${connectionName} requires authorization.`);
|
|
7
|
+
this.name = "ConnectionAuthorizationRequiredError";
|
|
8
|
+
this.connectionName = connectionName;
|
|
9
|
+
this.reason = options.reason ?? "authorization_required";
|
|
10
|
+
if (options.challenge)
|
|
11
|
+
this.challenge = options.challenge;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class ConnectionAuthorizationFailedError extends Error {
|
|
15
|
+
connectionName;
|
|
16
|
+
reason;
|
|
17
|
+
retryable;
|
|
18
|
+
constructor(connectionName, options = {}) {
|
|
19
|
+
super(options.message ?? `Connection ${connectionName} authorization failed.`);
|
|
20
|
+
this.name = "ConnectionAuthorizationFailedError";
|
|
21
|
+
this.connectionName = connectionName;
|
|
22
|
+
this.reason = options.reason ?? "authorization_failed";
|
|
23
|
+
this.retryable = options.retryable ?? true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function isConnectionAuthorizationRequiredError(error) {
|
|
27
|
+
return isNamedConnectionError(error, "ConnectionAuthorizationRequiredError");
|
|
28
|
+
}
|
|
29
|
+
export function isConnectionAuthorizationFailedError(error) {
|
|
30
|
+
return isNamedConnectionError(error, "ConnectionAuthorizationFailedError");
|
|
31
|
+
}
|
|
32
|
+
export function validateConnectionAuthDefinition(auth, prefix) {
|
|
33
|
+
if (!auth || typeof auth === "function")
|
|
34
|
+
return;
|
|
35
|
+
if ("authorizeUrl" in auth || "tokenUrl" in auth) {
|
|
36
|
+
if (auth.principalType !== "user") {
|
|
37
|
+
throw new Error(`${prefix}: OAuth authorization must use principalType "user".`);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const hasStart = "startAuthorization" in auth && auth.startAuthorization !== undefined;
|
|
42
|
+
const hasComplete = "completeAuthorization" in auth && auth.completeAuthorization !== undefined;
|
|
43
|
+
if (hasStart !== hasComplete) {
|
|
44
|
+
throw new Error(`${prefix}: startAuthorization and completeAuthorization must be provided together.`);
|
|
45
|
+
}
|
|
46
|
+
if (hasStart && auth.principalType && auth.principalType !== "user") {
|
|
47
|
+
throw new Error(`${prefix}: interactive authorization must use principalType "user".`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function validateToolFilter(filter, prefix) {
|
|
51
|
+
if (!filter)
|
|
52
|
+
return;
|
|
53
|
+
if ("allow" in filter && "block" in filter) {
|
|
54
|
+
throw new Error(`${prefix}: specify only one of allow or block.`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function validateConnectionAccess(access, prefix) {
|
|
58
|
+
if (!access)
|
|
59
|
+
throw new Error(`${prefix}: access is required for live connections.`);
|
|
60
|
+
if (!Array.isArray(access.read?.tools) || access.read.tools.length === 0) {
|
|
61
|
+
throw new Error(`${prefix}: access.read.tools must contain at least one tool pattern.`);
|
|
62
|
+
}
|
|
63
|
+
if (access.write !== false) {
|
|
64
|
+
if (!Array.isArray(access.write?.tools) || access.write.tools.length === 0) {
|
|
65
|
+
throw new Error(`${prefix}: access.write.tools must contain at least one tool pattern when writes are enabled.`);
|
|
66
|
+
}
|
|
67
|
+
if (access.write.approval === undefined) {
|
|
68
|
+
throw new Error(`${prefix}: access.write.approval is required when writes are enabled.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function isNamedConnectionError(error, name) {
|
|
73
|
+
return typeof error === "object" && error !== null && "name" in error && error.name === name;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=connection-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-auth.js","sourceRoot":"","sources":["../src/connection-auth.ts"],"names":[],"mappings":"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"}
|