@allin-ai/agent-client 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 +53 -0
- package/bin/allinai-agent +4 -0
- package/dist/capabilities/context.d.ts +16 -0
- package/dist/capabilities/context.d.ts.map +1 -0
- package/dist/capabilities/context.js +98 -0
- package/dist/capabilities/context.js.map +1 -0
- package/dist/capabilities/input.d.ts +7 -0
- package/dist/capabilities/input.d.ts.map +1 -0
- package/dist/capabilities/input.js +224 -0
- package/dist/capabilities/input.js.map +1 -0
- package/dist/capabilities/manifest.d.ts +15 -0
- package/dist/capabilities/manifest.d.ts.map +1 -0
- package/dist/capabilities/manifest.js +292 -0
- package/dist/capabilities/manifest.js.map +1 -0
- package/dist/capabilities/policy.d.ts +17 -0
- package/dist/capabilities/policy.d.ts.map +1 -0
- package/dist/capabilities/policy.js +57 -0
- package/dist/capabilities/policy.js.map +1 -0
- package/dist/capabilities/shell-host.d.ts +32 -0
- package/dist/capabilities/shell-host.d.ts.map +1 -0
- package/dist/capabilities/shell-host.js +378 -0
- package/dist/capabilities/shell-host.js.map +1 -0
- package/dist/capabilities/shell-wire.d.ts +13 -0
- package/dist/capabilities/shell-wire.d.ts.map +1 -0
- package/dist/capabilities/shell-wire.js +60 -0
- package/dist/capabilities/shell-wire.js.map +1 -0
- package/dist/capabilities/types.d.ts +46 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +7 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/cli/commands.d.ts +83 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +638 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +7 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/client/state-store.d.ts +80 -0
- package/dist/client/state-store.d.ts.map +1 -0
- package/dist/client/state-store.js +422 -0
- package/dist/client/state-store.js.map +1 -0
- package/dist/client/supervisor.d.ts +118 -0
- package/dist/client/supervisor.d.ts.map +1 -0
- package/dist/client/supervisor.js +627 -0
- package/dist/client/supervisor.js.map +1 -0
- package/dist/client/transport.d.ts +30 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +2 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/types.d.ts +65 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +13 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/wire.d.ts +32 -0
- package/dist/client/wire.d.ts.map +1 -0
- package/dist/client/wire.js +302 -0
- package/dist/client/wire.js.map +1 -0
- package/dist/client/ws-transport.d.ts +54 -0
- package/dist/client/ws-transport.d.ts.map +1 -0
- package/dist/client/ws-transport.js +229 -0
- package/dist/client/ws-transport.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +125 -0
- package/dist/config.js.map +1 -0
- package/dist/control.d.ts +59 -0
- package/dist/control.d.ts.map +1 -0
- package/dist/control.js +217 -0
- package/dist/control.js.map +1 -0
- package/dist/credentials.d.ts +44 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +229 -0
- package/dist/credentials.js.map +1 -0
- package/dist/hub.d.ts +83 -0
- package/dist/hub.d.ts.map +1 -0
- package/dist/hub.js +412 -0
- package/dist/hub.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +47 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +175 -0
- package/dist/logger.js.map +1 -0
- package/dist/paths.d.ts +29 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +50 -0
- package/dist/paths.js.map +1 -0
- package/dist/plugins/git.d.ts +30 -0
- package/dist/plugins/git.d.ts.map +1 -0
- package/dist/plugins/git.js +80 -0
- package/dist/plugins/git.js.map +1 -0
- package/dist/plugins/manager.d.ts +41 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +328 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +9 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +63 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/types.d.ts +39 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/runtime/claude.d.ts +30 -0
- package/dist/runtime/claude.d.ts.map +1 -0
- package/dist/runtime/claude.js +163 -0
- package/dist/runtime/claude.js.map +1 -0
- package/dist/runtime/codex.d.ts +44 -0
- package/dist/runtime/codex.d.ts.map +1 -0
- package/dist/runtime/codex.js +192 -0
- package/dist/runtime/codex.js.map +1 -0
- package/dist/runtime/events.d.ts +7 -0
- package/dist/runtime/events.d.ts.map +1 -0
- package/dist/runtime/events.js +37 -0
- package/dist/runtime/events.js.map +1 -0
- package/dist/runtime/index.d.ts +10 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +10 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/pi.d.ts +34 -0
- package/dist/runtime/pi.d.ts.map +1 -0
- package/dist/runtime/pi.js +211 -0
- package/dist/runtime/pi.js.map +1 -0
- package/dist/runtime/registry.d.ts +16 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +22 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/runner-child.d.ts +2 -0
- package/dist/runtime/runner-child.d.ts.map +1 -0
- package/dist/runtime/runner-child.js +41 -0
- package/dist/runtime/runner-child.js.map +1 -0
- package/dist/runtime/runner-manager.d.ts +77 -0
- package/dist/runtime/runner-manager.d.ts.map +1 -0
- package/dist/runtime/runner-manager.js +295 -0
- package/dist/runtime/runner-manager.js.map +1 -0
- package/dist/runtime/runner-wire.d.ts +23 -0
- package/dist/runtime/runner-wire.d.ts.map +1 -0
- package/dist/runtime/runner-wire.js +93 -0
- package/dist/runtime/runner-wire.js.map +1 -0
- package/dist/runtime/types.d.ts +43 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +3 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/zcode.d.ts +14 -0
- package/dist/runtime/zcode.d.ts.map +1 -0
- package/dist/runtime/zcode.js +21 -0
- package/dist/runtime/zcode.js.map +1 -0
- package/dist/service/launchd.d.ts +34 -0
- package/dist/service/launchd.d.ts.map +1 -0
- package/dist/service/launchd.js +86 -0
- package/dist/service/launchd.js.map +1 -0
- package/dist/service/systemd.d.ts +16 -0
- package/dist/service/systemd.d.ts.map +1 -0
- package/dist/service/systemd.js +89 -0
- package/dist/service/systemd.js.map +1 -0
- package/dist/wire.d.ts +24 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +7 -0
- package/dist/wire.js.map +1 -0
- package/package.json +140 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { access, mkdir, readFile, rename, rm, writeFile, } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { PLATFORM_IDS } from "../runtime/types.js";
|
|
4
|
+
import { validateCapabilityEntries } from "../capabilities/manifest.js";
|
|
5
|
+
import { createGitClient, isAllowedGitOrigin } from "./git.js";
|
|
6
|
+
import { isValidPluginId, parsePluginManifest } from "./manifest.js";
|
|
7
|
+
function now() {
|
|
8
|
+
return new Date().toISOString();
|
|
9
|
+
}
|
|
10
|
+
function hasRuntime(value) {
|
|
11
|
+
return (typeof value === "string" && PLATFORM_IDS.includes(value));
|
|
12
|
+
}
|
|
13
|
+
function pluginRoot(pluginsRoot, id) {
|
|
14
|
+
return path.join(pluginsRoot, id);
|
|
15
|
+
}
|
|
16
|
+
function activePointerPath(pluginsRoot, id) {
|
|
17
|
+
return path.join(pluginRoot(pluginsRoot, id), "active.json");
|
|
18
|
+
}
|
|
19
|
+
function revisionPath(pluginsRoot, id, commit) {
|
|
20
|
+
return path.join(pluginRoot(pluginsRoot, id), "revisions", commit);
|
|
21
|
+
}
|
|
22
|
+
function errorMessage(error) {
|
|
23
|
+
return error instanceof Error ? error.message : String(error);
|
|
24
|
+
}
|
|
25
|
+
function isKnownCommit(value) {
|
|
26
|
+
return /^[0-9a-f]{40}$/i.test(value);
|
|
27
|
+
}
|
|
28
|
+
function normalizeConfig(config) {
|
|
29
|
+
if (!isValidPluginId(config.id)) {
|
|
30
|
+
throw new TypeError(`Plugin id ${String(config.id)} is invalid`);
|
|
31
|
+
}
|
|
32
|
+
if (typeof config.gitUrl !== "string" || config.gitUrl.length === 0) {
|
|
33
|
+
throw new TypeError(`Plugin ${config.id} must declare a Git URL`);
|
|
34
|
+
}
|
|
35
|
+
if (config.ref !== undefined &&
|
|
36
|
+
(typeof config.ref !== "string" ||
|
|
37
|
+
!config.ref.trim() ||
|
|
38
|
+
config.ref.trim().startsWith("-") ||
|
|
39
|
+
config.ref.includes("\0"))) {
|
|
40
|
+
throw new TypeError(`Plugin ${config.id} ref must be a nonempty non-option string`);
|
|
41
|
+
}
|
|
42
|
+
if (typeof config.enabled !== "boolean") {
|
|
43
|
+
throw new TypeError(`Plugin ${config.id} enabled must be a boolean`);
|
|
44
|
+
}
|
|
45
|
+
if (config.runtimes !== undefined &&
|
|
46
|
+
(!Array.isArray(config.runtimes) ||
|
|
47
|
+
!config.runtimes.every(hasRuntime) ||
|
|
48
|
+
new Set(config.runtimes).size !== config.runtimes.length)) {
|
|
49
|
+
throw new TypeError(`Plugin ${config.id} has invalid runtimes`);
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
...config,
|
|
53
|
+
ref: config.ref?.trim(),
|
|
54
|
+
runtimes: config.runtimes ? [...config.runtimes] : undefined,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function assertManifestCompatibility(config, manifest) {
|
|
58
|
+
if (manifest.id !== config.id) {
|
|
59
|
+
throw new Error(`Plugin manifest id ${manifest.id} does not match configured id ${config.id}`);
|
|
60
|
+
}
|
|
61
|
+
if (config.runtimes &&
|
|
62
|
+
manifest.runtimes &&
|
|
63
|
+
config.runtimes.some((runtime) => !manifest.runtimes?.includes(runtime))) {
|
|
64
|
+
throw new Error(`Plugin ${config.id} requests runtimes not declared by its manifest`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function exists(file) {
|
|
68
|
+
try {
|
|
69
|
+
await access(file);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Reconciles Hub Git desired state into local, immutable plugin revisions.
|
|
78
|
+
* Activation changes a small same-directory pointer only after the complete
|
|
79
|
+
* checkout and its manifest have been validated.
|
|
80
|
+
*/
|
|
81
|
+
export class PluginManager {
|
|
82
|
+
options;
|
|
83
|
+
git;
|
|
84
|
+
validateGitUrl;
|
|
85
|
+
locks = new Map();
|
|
86
|
+
statuses = new Map();
|
|
87
|
+
activePlugins = new Map();
|
|
88
|
+
constructor(options) {
|
|
89
|
+
this.options = options;
|
|
90
|
+
this.git = options.git ?? createGitClient();
|
|
91
|
+
this.validateGitUrl =
|
|
92
|
+
options.validateGitUrl ??
|
|
93
|
+
((gitUrl) => isAllowedGitOrigin(gitUrl, options.allowedGitOrigins ?? []));
|
|
94
|
+
for (const state of options.stateStore?.listPluginStates() ?? []) {
|
|
95
|
+
this.statuses.set(state.plugin.id, state.plugin);
|
|
96
|
+
if (state.active)
|
|
97
|
+
this.activePlugins.set(state.active.id, state.active);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async sync(desired) {
|
|
101
|
+
const ids = new Set();
|
|
102
|
+
for (const config of desired) {
|
|
103
|
+
if (ids.has(config.id)) {
|
|
104
|
+
throw new TypeError(`Duplicate plugin id in desired state: ${config.id}`);
|
|
105
|
+
}
|
|
106
|
+
ids.add(config.id);
|
|
107
|
+
}
|
|
108
|
+
const results = await Promise.all(desired.map((config) => this.withPluginLock(config.id, () => this.syncOne(config))));
|
|
109
|
+
for (const id of [...this.activePlugins.keys()]) {
|
|
110
|
+
if (!ids.has(id))
|
|
111
|
+
await this.withPluginLock(id, () => this.deactivate(id, "removed from desired state"));
|
|
112
|
+
}
|
|
113
|
+
return results;
|
|
114
|
+
}
|
|
115
|
+
active(runtime) {
|
|
116
|
+
return [...this.activePlugins.values()]
|
|
117
|
+
.filter((plugin) => plugin.status === "active" &&
|
|
118
|
+
plugin.enabled &&
|
|
119
|
+
(plugin.runtimes === undefined || plugin.runtimes.includes(runtime)))
|
|
120
|
+
.sort((left, right) => left.id.localeCompare(right.id));
|
|
121
|
+
}
|
|
122
|
+
status(id) {
|
|
123
|
+
return this.statuses.get(id) ?? null;
|
|
124
|
+
}
|
|
125
|
+
snapshotActivePlugins(runtime) {
|
|
126
|
+
const plugins = runtime
|
|
127
|
+
? this.active(runtime)
|
|
128
|
+
: [...this.activePlugins.values()].filter((plugin) => plugin.status === "active" && plugin.enabled);
|
|
129
|
+
return plugins
|
|
130
|
+
.map(({ id, resolvedCommit }) => ({ id, resolvedCommit }))
|
|
131
|
+
.sort((left, right) => left.id.localeCompare(right.id));
|
|
132
|
+
}
|
|
133
|
+
async syncOne(input) {
|
|
134
|
+
let config;
|
|
135
|
+
try {
|
|
136
|
+
config = normalizeConfig(input);
|
|
137
|
+
if (!this.validateGitUrl(config.gitUrl)) {
|
|
138
|
+
throw new TypeError("Plugin Git URL must use HTTPS or SSH and pass local origin policy");
|
|
139
|
+
}
|
|
140
|
+
if (!config.enabled) {
|
|
141
|
+
await this.deactivate(config.id, "disabled by desired state");
|
|
142
|
+
const prior = this.statuses.get(config.id);
|
|
143
|
+
if (prior)
|
|
144
|
+
return prior;
|
|
145
|
+
const blocked = {
|
|
146
|
+
...config,
|
|
147
|
+
resolvedCommit: "unresolved",
|
|
148
|
+
installedAt: now(),
|
|
149
|
+
status: "blocked",
|
|
150
|
+
lastError: "disabled by desired state",
|
|
151
|
+
};
|
|
152
|
+
this.save({ plugin: blocked, active: null });
|
|
153
|
+
return blocked;
|
|
154
|
+
}
|
|
155
|
+
const staging = await this.createStagingDirectory();
|
|
156
|
+
try {
|
|
157
|
+
await this.checkout(staging, config);
|
|
158
|
+
const manifest = await this.readManifest(staging);
|
|
159
|
+
await validateCapabilityEntries(staging, manifest.capabilities ?? []);
|
|
160
|
+
assertManifestCompatibility(config, manifest);
|
|
161
|
+
const resolvedCommit = await this.resolveCommit(staging);
|
|
162
|
+
const active = await this.activate(config, resolvedCommit, staging);
|
|
163
|
+
this.save({ plugin: active, active });
|
|
164
|
+
return active;
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
await rm(staging, { recursive: true, force: true });
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
const configForFailure = config ?? input;
|
|
173
|
+
const failed = this.failed(configForFailure, errorMessage(error));
|
|
174
|
+
this.save({
|
|
175
|
+
plugin: failed,
|
|
176
|
+
active: this.activePlugins.get(configForFailure.id) ?? null,
|
|
177
|
+
});
|
|
178
|
+
return failed;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async checkout(staging, config) {
|
|
182
|
+
await this.git.run([
|
|
183
|
+
"clone",
|
|
184
|
+
"--no-checkout",
|
|
185
|
+
"--",
|
|
186
|
+
config.gitUrl,
|
|
187
|
+
staging,
|
|
188
|
+
]);
|
|
189
|
+
if (config.ref) {
|
|
190
|
+
await this.git.run([
|
|
191
|
+
"-C",
|
|
192
|
+
staging,
|
|
193
|
+
"fetch",
|
|
194
|
+
"--force",
|
|
195
|
+
"origin",
|
|
196
|
+
config.ref,
|
|
197
|
+
]);
|
|
198
|
+
await this.git.run([
|
|
199
|
+
"-C",
|
|
200
|
+
staging,
|
|
201
|
+
"checkout",
|
|
202
|
+
"--detach",
|
|
203
|
+
"--force",
|
|
204
|
+
config.ref,
|
|
205
|
+
]);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
await this.git.run([
|
|
209
|
+
"-C",
|
|
210
|
+
staging,
|
|
211
|
+
"checkout",
|
|
212
|
+
"--detach",
|
|
213
|
+
"--force",
|
|
214
|
+
"HEAD",
|
|
215
|
+
]);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
async resolveCommit(staging) {
|
|
219
|
+
const commit = await this.git.run([
|
|
220
|
+
"-C",
|
|
221
|
+
staging,
|
|
222
|
+
"rev-parse",
|
|
223
|
+
"--verify",
|
|
224
|
+
"--end-of-options",
|
|
225
|
+
"HEAD^{commit}",
|
|
226
|
+
]);
|
|
227
|
+
if (!isKnownCommit(commit)) {
|
|
228
|
+
throw new Error("Git did not resolve the plugin revision to a full commit");
|
|
229
|
+
}
|
|
230
|
+
return commit.toLowerCase();
|
|
231
|
+
}
|
|
232
|
+
async readManifest(staging) {
|
|
233
|
+
let raw;
|
|
234
|
+
try {
|
|
235
|
+
raw = JSON.parse(await readFile(path.join(staging, "allinai-plugin.json"), "utf8"));
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
throw new Error(`Plugin manifest could not be read: ${errorMessage(error)}`);
|
|
239
|
+
}
|
|
240
|
+
const manifest = parsePluginManifest(raw);
|
|
241
|
+
if (!manifest)
|
|
242
|
+
throw new Error("Plugin manifest is invalid");
|
|
243
|
+
return manifest;
|
|
244
|
+
}
|
|
245
|
+
async activate(config, resolvedCommit, staging) {
|
|
246
|
+
const root = pluginRoot(this.options.pluginsRoot, config.id);
|
|
247
|
+
const revision = revisionPath(this.options.pluginsRoot, config.id, resolvedCommit);
|
|
248
|
+
await mkdir(path.dirname(revision), { recursive: true });
|
|
249
|
+
if (await exists(revision)) {
|
|
250
|
+
await rm(staging, { recursive: true, force: true });
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
await rename(staging, revision);
|
|
254
|
+
}
|
|
255
|
+
const plugin = {
|
|
256
|
+
...config,
|
|
257
|
+
resolvedCommit,
|
|
258
|
+
installedAt: now(),
|
|
259
|
+
status: "active",
|
|
260
|
+
};
|
|
261
|
+
const pointer = activePointerPath(this.options.pluginsRoot, config.id);
|
|
262
|
+
const temporaryPointer = path.join(root, `.active-${process.pid}-${Date.now()}.json`);
|
|
263
|
+
await writeFile(temporaryPointer, JSON.stringify({ plugin }), {
|
|
264
|
+
encoding: "utf8",
|
|
265
|
+
mode: 0o600,
|
|
266
|
+
});
|
|
267
|
+
await rename(temporaryPointer, pointer);
|
|
268
|
+
this.activePlugins.set(config.id, plugin);
|
|
269
|
+
return plugin;
|
|
270
|
+
}
|
|
271
|
+
failed(config, lastError) {
|
|
272
|
+
const previous = this.activePlugins.get(config.id) ?? this.statuses.get(config.id);
|
|
273
|
+
return {
|
|
274
|
+
...config,
|
|
275
|
+
resolvedCommit: previous?.resolvedCommit ?? "unresolved",
|
|
276
|
+
installedAt: previous?.installedAt ?? now(),
|
|
277
|
+
status: "failed",
|
|
278
|
+
lastError,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
async deactivate(id, reason) {
|
|
282
|
+
const active = this.activePlugins.get(id);
|
|
283
|
+
if (!active)
|
|
284
|
+
return;
|
|
285
|
+
await rm(activePointerPath(this.options.pluginsRoot, id), { force: true });
|
|
286
|
+
this.activePlugins.delete(id);
|
|
287
|
+
this.save({
|
|
288
|
+
plugin: {
|
|
289
|
+
...active,
|
|
290
|
+
enabled: false,
|
|
291
|
+
status: "blocked",
|
|
292
|
+
lastError: reason,
|
|
293
|
+
},
|
|
294
|
+
active: null,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
save(state) {
|
|
298
|
+
this.statuses.set(state.plugin.id, state.plugin);
|
|
299
|
+
if (state.active)
|
|
300
|
+
this.activePlugins.set(state.active.id, state.active);
|
|
301
|
+
this.options.stateStore?.savePluginState(state);
|
|
302
|
+
}
|
|
303
|
+
async createStagingDirectory() {
|
|
304
|
+
await mkdir(this.options.pluginsRoot, { recursive: true });
|
|
305
|
+
const base = path.join(this.options.pluginsRoot, ".staging-");
|
|
306
|
+
const { mkdtemp } = await import("node:fs/promises");
|
|
307
|
+
return mkdtemp(base);
|
|
308
|
+
}
|
|
309
|
+
async withPluginLock(id, work) {
|
|
310
|
+
const previous = this.locks.get(id) ?? Promise.resolve();
|
|
311
|
+
let release;
|
|
312
|
+
const current = new Promise((resolve) => {
|
|
313
|
+
release = resolve;
|
|
314
|
+
});
|
|
315
|
+
const tail = previous.then(() => current);
|
|
316
|
+
this.locks.set(id, tail);
|
|
317
|
+
await previous;
|
|
318
|
+
try {
|
|
319
|
+
return await work();
|
|
320
|
+
}
|
|
321
|
+
finally {
|
|
322
|
+
release?.();
|
|
323
|
+
if (this.locks.get(id) === tail)
|
|
324
|
+
this.locks.delete(id);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PluginManifest } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse the installation manifest before any revision can become active.
|
|
4
|
+
* Capability schema details become stricter in the capability layer, but an
|
|
5
|
+
* installer still checks that every declaration has a safe fixed entrypoint.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parsePluginManifest(value: unknown): PluginManifest | null;
|
|
8
|
+
export declare function isValidPluginId(value: unknown): value is string;
|
|
9
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/plugins/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,cAAc,EAAE,MAAM,YAAY,CAAC;AAuC9E;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAsBzE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE/D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { PLATFORM_IDS } from "../runtime/types.js";
|
|
2
|
+
import { parseShellCapability } from "../capabilities/manifest.js";
|
|
3
|
+
const PLUGIN_ID = /^[a-z0-9][a-z0-9._-]{0,127}$/;
|
|
4
|
+
function isPlainObject(value) {
|
|
5
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
6
|
+
return false;
|
|
7
|
+
const prototype = Object.getPrototypeOf(value);
|
|
8
|
+
return prototype === Object.prototype || prototype === null;
|
|
9
|
+
}
|
|
10
|
+
function isPluginId(value) {
|
|
11
|
+
return typeof value === "string" && PLUGIN_ID.test(value);
|
|
12
|
+
}
|
|
13
|
+
function isRuntime(value) {
|
|
14
|
+
return (typeof value === "string" && PLATFORM_IDS.includes(value));
|
|
15
|
+
}
|
|
16
|
+
function parseCapabilities(value) {
|
|
17
|
+
if (value === undefined)
|
|
18
|
+
return undefined;
|
|
19
|
+
if (!Array.isArray(value))
|
|
20
|
+
return null;
|
|
21
|
+
const seen = new Set();
|
|
22
|
+
const parsed = [];
|
|
23
|
+
for (const capability of value) {
|
|
24
|
+
const parsedCapability = parseShellCapability(capability);
|
|
25
|
+
if (!parsedCapability || seen.has(parsedCapability.id)) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
seen.add(parsedCapability.id);
|
|
29
|
+
parsed.push(parsedCapability);
|
|
30
|
+
}
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Parse the installation manifest before any revision can become active.
|
|
35
|
+
* Capability schema details become stricter in the capability layer, but an
|
|
36
|
+
* installer still checks that every declaration has a safe fixed entrypoint.
|
|
37
|
+
*/
|
|
38
|
+
export function parsePluginManifest(value) {
|
|
39
|
+
if (!isPlainObject(value) || !isPluginId(value.id))
|
|
40
|
+
return null;
|
|
41
|
+
let runtimes;
|
|
42
|
+
if (value.runtimes !== undefined) {
|
|
43
|
+
if (!Array.isArray(value.runtimes) ||
|
|
44
|
+
!value.runtimes.every(isRuntime) ||
|
|
45
|
+
new Set(value.runtimes).size !== value.runtimes.length) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
runtimes = [...value.runtimes];
|
|
49
|
+
}
|
|
50
|
+
const capabilities = parseCapabilities(value.capabilities);
|
|
51
|
+
if (capabilities === null)
|
|
52
|
+
return null;
|
|
53
|
+
const manifest = { id: value.id };
|
|
54
|
+
if (runtimes)
|
|
55
|
+
manifest.runtimes = runtimes;
|
|
56
|
+
if (value.capabilities !== undefined)
|
|
57
|
+
manifest.capabilities = capabilities;
|
|
58
|
+
return manifest;
|
|
59
|
+
}
|
|
60
|
+
export function isValidPluginId(value) {
|
|
61
|
+
return isPluginId(value);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/plugins/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { PlatformId } from "../runtime/types.js";
|
|
2
|
+
import type { ShellCapability } from "../capabilities/types.js";
|
|
3
|
+
export type PluginConfig = {
|
|
4
|
+
id: string;
|
|
5
|
+
gitUrl: string;
|
|
6
|
+
ref?: string;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
runtimes?: PlatformId[];
|
|
9
|
+
};
|
|
10
|
+
export type PluginCapabilityDeclaration = ShellCapability;
|
|
11
|
+
export type PluginManifest = {
|
|
12
|
+
id: string;
|
|
13
|
+
runtimes?: PlatformId[];
|
|
14
|
+
capabilities?: PluginCapabilityDeclaration[];
|
|
15
|
+
};
|
|
16
|
+
export type InstalledPlugin = PluginConfig & {
|
|
17
|
+
resolvedCommit: string;
|
|
18
|
+
installedAt: string;
|
|
19
|
+
status: "active" | "blocked" | "failed";
|
|
20
|
+
lastError?: string;
|
|
21
|
+
};
|
|
22
|
+
export type ActivePluginSnapshot = {
|
|
23
|
+
id: string;
|
|
24
|
+
resolvedCommit: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Durable plugin records are intentionally separate from an active pointer:
|
|
28
|
+
* a failed update must be visible while the last validated checkout remains
|
|
29
|
+
* runnable.
|
|
30
|
+
*/
|
|
31
|
+
export type StoredPluginState = {
|
|
32
|
+
plugin: InstalledPlugin;
|
|
33
|
+
active: InstalledPlugin | null;
|
|
34
|
+
};
|
|
35
|
+
export type PluginStateStore = {
|
|
36
|
+
listPluginStates(): StoredPluginState[];
|
|
37
|
+
savePluginState(state: StoredPluginState): void;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,eAAe,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,2BAA2B,EAAE,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;IACxC,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACjD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type CanUseTool, type Options, type Query, type SDKMessage, type SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
+
import type { PlatformEvent, PlatformProbe } from "./types.js";
|
|
3
|
+
/** Re-exported so host wrappers can consume the opaque vendor payload safely. */
|
|
4
|
+
export type ClaudeSdkMessage = SDKMessage;
|
|
5
|
+
export type ClaudeAdapterRunInput = {
|
|
6
|
+
prompt: string | AsyncIterable<SDKUserMessage>;
|
|
7
|
+
/** Domain/host prepares provider and plugin settings before crossing this boundary. */
|
|
8
|
+
options: Omit<Options, "abortController" | "canUseTool">;
|
|
9
|
+
/** Host-owned tool decision bridge. The adapter never imports a host package. */
|
|
10
|
+
onAskUser?: CanUseTool;
|
|
11
|
+
};
|
|
12
|
+
export type ClaudeQueryFactory = (parameters: {
|
|
13
|
+
prompt: string | AsyncIterable<SDKUserMessage>;
|
|
14
|
+
options?: Options;
|
|
15
|
+
}) => Query;
|
|
16
|
+
export type ClaudeAdapter = {
|
|
17
|
+
readonly id: "claude";
|
|
18
|
+
probe(): Promise<PlatformProbe>;
|
|
19
|
+
start(input: ClaudeAdapterRunInput, signal: AbortSignal): AsyncIterable<PlatformEvent>;
|
|
20
|
+
};
|
|
21
|
+
export type CreateClaudeAdapterDeps = {
|
|
22
|
+
/** Test seam. Production invokes the installed official Claude Agent SDK. */
|
|
23
|
+
query?: ClaudeQueryFactory;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Official Claude Agent SDK adapter. SDK setup/iteration and process cleanup
|
|
27
|
+
* stay here; provider selection and host callbacks are explicit input.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createClaudeAdapter(deps?: CreateClaudeAdapterDeps): ClaudeAdapter;
|
|
30
|
+
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/runtime/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,iFAAiF;AACjF,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/C,uFAAuF;IACvF,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAAC,CAAC;IACzD,iFAAiF;IACjF,SAAS,CAAC,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE;IAC5C,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,KAAK,KAAK,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,KAAK,CACH,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,WAAW,GAClB,aAAa,CAAC,aAAa,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAuHF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,uBAA4B,GACjC,aAAa,CAkEf"}
|