@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
package/dist/logger.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { appendFile, mkdir, rename, stat, unlink } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const redactKey = /(?:token|secret|password|authorization|credential|api[-_]?key)$/i;
|
|
4
|
+
const bearerValue = /\b(?:bearer|basic)\s+[^\s,;]+/gi;
|
|
5
|
+
const inlineSecret = /\b((?:(?:access|refresh|id)[_-]?token|(?:client)?[_-]?secret|api[-_]?key|token|password|authorization|credential))\s*([:=])\s*[^\s,;]+/gi;
|
|
6
|
+
function redactString(value) {
|
|
7
|
+
return value
|
|
8
|
+
.replace(bearerValue, (match) => `${match.split(/\s+/, 1)[0]} [REDACTED]`)
|
|
9
|
+
.replace(inlineSecret, (_match, key, separator) => `${key}${separator}[REDACTED]`);
|
|
10
|
+
}
|
|
11
|
+
function redactValue(value, seen = new WeakSet()) {
|
|
12
|
+
if (typeof value === "string")
|
|
13
|
+
return redactString(value);
|
|
14
|
+
if (value === null || typeof value !== "object")
|
|
15
|
+
return value;
|
|
16
|
+
if (seen.has(value))
|
|
17
|
+
return "[Circular]";
|
|
18
|
+
seen.add(value);
|
|
19
|
+
if (Array.isArray(value))
|
|
20
|
+
return value.map((item) => redactValue(item, seen));
|
|
21
|
+
const result = {};
|
|
22
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
23
|
+
result[key] = redactKey.test(key)
|
|
24
|
+
? "[REDACTED]"
|
|
25
|
+
: redactValue(nested, seen);
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
/** Serialize one JSONL record after removing credential-shaped values. */
|
|
30
|
+
export function serializeLog(entry) {
|
|
31
|
+
const redacted = redactValue(entry);
|
|
32
|
+
try {
|
|
33
|
+
return `${JSON.stringify(redacted)}\n`;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return `${JSON.stringify({ message: "[Unserializable log entry]" })}\n`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const loggerFs = { mkdir, stat, appendFile, rename, unlink };
|
|
40
|
+
function absent(error) {
|
|
41
|
+
return (typeof error === "object" &&
|
|
42
|
+
error !== null &&
|
|
43
|
+
"code" in error &&
|
|
44
|
+
error.code === "ENOENT");
|
|
45
|
+
}
|
|
46
|
+
async function sizeOf(fs, file) {
|
|
47
|
+
try {
|
|
48
|
+
return (await fs.stat(file)).size;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (absent(error))
|
|
52
|
+
return 0;
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function removeIfPresent(fs, file) {
|
|
57
|
+
try {
|
|
58
|
+
await fs.unlink(file);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (!absent(error))
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** JSONL file logger with bounded rotation and no unredacted writes. */
|
|
66
|
+
export function createRotatingJsonlLogger(options) {
|
|
67
|
+
const fs = options.fileSystem ?? loggerFs;
|
|
68
|
+
const maxBytes = options.maxBytes ?? 5 * 1024 * 1024;
|
|
69
|
+
const maxFiles = options.maxFiles ?? 5;
|
|
70
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
|
|
71
|
+
throw new RangeError("maxBytes must be a positive integer");
|
|
72
|
+
}
|
|
73
|
+
if (!Number.isSafeInteger(maxFiles) || maxFiles < 1) {
|
|
74
|
+
throw new RangeError("maxFiles must be a positive integer");
|
|
75
|
+
}
|
|
76
|
+
const file = path.join(options.logsRoot, "agent.log");
|
|
77
|
+
let writing = Promise.resolve();
|
|
78
|
+
async function rotate() {
|
|
79
|
+
for (let index = maxFiles - 1; index >= 1; index -= 1) {
|
|
80
|
+
const current = `${file}.${index}`;
|
|
81
|
+
const next = `${file}.${index + 1}`;
|
|
82
|
+
await removeIfPresent(fs, next);
|
|
83
|
+
try {
|
|
84
|
+
await fs.rename(current, next);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (!absent(error))
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
await fs.rename(file, `${file}.1`);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (!absent(error))
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
write(entry) {
|
|
101
|
+
const timestamp = options.now?.().toISOString() ?? new Date().toISOString();
|
|
102
|
+
const line = serializeLog({ timestamp, ...entry });
|
|
103
|
+
writing = writing.then(async () => {
|
|
104
|
+
await fs.mkdir(options.logsRoot, { recursive: true });
|
|
105
|
+
if ((await sizeOf(fs, file)) > 0 &&
|
|
106
|
+
(await sizeOf(fs, file)) + Buffer.byteLength(line) > maxBytes) {
|
|
107
|
+
await rotate();
|
|
108
|
+
}
|
|
109
|
+
await fs.appendFile(file, line, "utf8");
|
|
110
|
+
});
|
|
111
|
+
return writing;
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function format(tag, message, meta) {
|
|
116
|
+
let suffix = "";
|
|
117
|
+
if (meta && Object.keys(meta).length > 0) {
|
|
118
|
+
try {
|
|
119
|
+
suffix = ` ${JSON.stringify(meta)}`;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
suffix = ` ${String(meta)}`;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return `[bridge:${tag}] ${message}${suffix}`;
|
|
126
|
+
}
|
|
127
|
+
export function createConsoleLogger(options) {
|
|
128
|
+
const showDebug = options?.debug ??
|
|
129
|
+
(typeof process !== "undefined" &&
|
|
130
|
+
process.env?.ALLINAI_BRIDGE_DEBUG === "1");
|
|
131
|
+
return {
|
|
132
|
+
debug(tag, message, meta) {
|
|
133
|
+
if (showDebug)
|
|
134
|
+
console.log(format(tag, message, meta));
|
|
135
|
+
},
|
|
136
|
+
info(tag, message, meta) {
|
|
137
|
+
console.log(format(tag, message, meta));
|
|
138
|
+
},
|
|
139
|
+
warn(tag, message, meta) {
|
|
140
|
+
console.error(format(tag, message, meta));
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
let current = null;
|
|
145
|
+
let defaultLogger = null;
|
|
146
|
+
/** Replace the process-wide bridge logger (call before creating hub/bridge). */
|
|
147
|
+
export function setBridgeLogger(logger) {
|
|
148
|
+
current = logger;
|
|
149
|
+
}
|
|
150
|
+
/** Test hook: fall back to the default console logger. */
|
|
151
|
+
export function resetBridgeLogger() {
|
|
152
|
+
current = null;
|
|
153
|
+
}
|
|
154
|
+
/** Internal facade used by SDK modules. */
|
|
155
|
+
export const bridgeLog = {
|
|
156
|
+
debug(tag, message, meta) {
|
|
157
|
+
if (!current) {
|
|
158
|
+
defaultLogger ??= createConsoleLogger();
|
|
159
|
+
}
|
|
160
|
+
(current ?? defaultLogger).debug(tag, message, meta);
|
|
161
|
+
},
|
|
162
|
+
info(tag, message, meta) {
|
|
163
|
+
if (!current) {
|
|
164
|
+
defaultLogger ??= createConsoleLogger();
|
|
165
|
+
}
|
|
166
|
+
(current ?? defaultLogger).info(tag, message, meta);
|
|
167
|
+
},
|
|
168
|
+
warn(tag, message, meta) {
|
|
169
|
+
if (!current) {
|
|
170
|
+
defaultLogger ??= createConsoleLogger();
|
|
171
|
+
}
|
|
172
|
+
(current ?? defaultLogger).warn(tag, message, meta);
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type AgentPaths = Readonly<{
|
|
2
|
+
home: string;
|
|
3
|
+
configFile: string;
|
|
4
|
+
stateDb: string;
|
|
5
|
+
credentialsRoot: string;
|
|
6
|
+
pluginsRoot: string;
|
|
7
|
+
runsRoot: string;
|
|
8
|
+
logsRoot: string;
|
|
9
|
+
controlSocket: string;
|
|
10
|
+
}>;
|
|
11
|
+
/** Resolve the one local root owned by an Agent Client installation. */
|
|
12
|
+
export declare function resolveAgentHome(homeDir?: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Every filesystem path owned by the standalone client derives from one root.
|
|
15
|
+
* Keeping this construction here makes accidental use of a host application's
|
|
16
|
+
* data directory straightforward to spot in review.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveAgentPaths(homeDir?: string): AgentPaths;
|
|
19
|
+
/** Resolve every owned path when a host supplies an explicit Agent home. */
|
|
20
|
+
export declare function resolveAgentPathsAt(home: string): AgentPaths;
|
|
21
|
+
/**
|
|
22
|
+
* Windows named pipes cannot be represented below an ordinary user directory.
|
|
23
|
+
* Derive a stable, opaque name from the Agent home rather than opening TCP.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveAgentControlEndpoint(paths: AgentPaths, platform?: NodeJS.Platform): string;
|
|
26
|
+
export declare function isMemoryHookProxyPath(pathname: string): boolean;
|
|
27
|
+
/** Optional W4+ passthrough; not wired in smoke. */
|
|
28
|
+
export declare function isOptionalAgentProxyPath(pathname: string): boolean;
|
|
29
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEH,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,OAAO,SAAe,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,SAAe,GAAG,UAAU,CAEpE;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAc5D;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,UAAU,EACjB,QAAQ,kBAAmB,GAC1B,MAAM,CAIR;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKlE"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
/** Resolve the one local root owned by an Agent Client installation. */
|
|
5
|
+
export function resolveAgentHome(homeDir = os.homedir()) {
|
|
6
|
+
return path.join(homeDir, ".allinai", "agent");
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Every filesystem path owned by the standalone client derives from one root.
|
|
10
|
+
* Keeping this construction here makes accidental use of a host application's
|
|
11
|
+
* data directory straightforward to spot in review.
|
|
12
|
+
*/
|
|
13
|
+
export function resolveAgentPaths(homeDir = os.homedir()) {
|
|
14
|
+
return resolveAgentPathsAt(resolveAgentHome(homeDir));
|
|
15
|
+
}
|
|
16
|
+
/** Resolve every owned path when a host supplies an explicit Agent home. */
|
|
17
|
+
export function resolveAgentPathsAt(home) {
|
|
18
|
+
if (!path.isAbsolute(home)) {
|
|
19
|
+
throw new TypeError("Agent home must be an absolute path");
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
home,
|
|
23
|
+
configFile: path.join(home, "config.json"),
|
|
24
|
+
stateDb: path.join(home, "state.db"),
|
|
25
|
+
credentialsRoot: path.join(home, "credentials"),
|
|
26
|
+
pluginsRoot: path.join(home, "plugins"),
|
|
27
|
+
runsRoot: path.join(home, "runs"),
|
|
28
|
+
logsRoot: path.join(home, "logs"),
|
|
29
|
+
controlSocket: path.join(home, "control.sock"),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Windows named pipes cannot be represented below an ordinary user directory.
|
|
34
|
+
* Derive a stable, opaque name from the Agent home rather than opening TCP.
|
|
35
|
+
*/
|
|
36
|
+
export function resolveAgentControlEndpoint(paths, platform = process.platform) {
|
|
37
|
+
if (platform !== "win32")
|
|
38
|
+
return paths.controlSocket;
|
|
39
|
+
const id = createHash("sha256").update(paths.home).digest("hex").slice(0, 24);
|
|
40
|
+
return `\\\\.\\pipe\\allinai-agent-${id}`;
|
|
41
|
+
}
|
|
42
|
+
export function isMemoryHookProxyPath(pathname) {
|
|
43
|
+
return pathname.startsWith("/api/memory/hooks/");
|
|
44
|
+
}
|
|
45
|
+
/** Optional W4+ passthrough; not wired in smoke. */
|
|
46
|
+
export function isOptionalAgentProxyPath(pathname) {
|
|
47
|
+
return (pathname.startsWith("/api/automation/") ||
|
|
48
|
+
pathname.startsWith("/api/skills/"));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE;IACrD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE;IACtD,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,IAAI;QACJ,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC1C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QACpC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC/C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QACvC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACjC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAiB,EACjB,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAE3B,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,aAAa,CAAC;IACrD,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,OAAO,8BAA8B,EAAE,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACnD,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,OAAO,CACL,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC;QACvC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
type ExecFileOptions = {
|
|
2
|
+
cwd?: string;
|
|
3
|
+
shell: false;
|
|
4
|
+
};
|
|
5
|
+
type ExecFileResult = {
|
|
6
|
+
stdout: string;
|
|
7
|
+
stderr: string;
|
|
8
|
+
};
|
|
9
|
+
export type GitClient = {
|
|
10
|
+
run(args: string[], options?: {
|
|
11
|
+
cwd?: string;
|
|
12
|
+
}): Promise<string>;
|
|
13
|
+
};
|
|
14
|
+
export type GitClientOptions = {
|
|
15
|
+
execFile?: (file: string, args: string[], options: ExecFileOptions) => Promise<ExecFileResult>;
|
|
16
|
+
};
|
|
17
|
+
/** The production installer never accepts local paths or arbitrary protocols. */
|
|
18
|
+
export declare function isProductionGitUrl(value: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Empty allowlists deny remote activation. Entries may be either a hostname
|
|
21
|
+
* (`github.com`) or an exact Git authority (`ssh://git@github.com`).
|
|
22
|
+
*/
|
|
23
|
+
export declare function isAllowedGitOrigin(value: string, allowedOrigins: readonly string[]): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Git's invocation boundary. All callers supply a fixed argument vector; no
|
|
26
|
+
* Hub value is interpolated into a shell command.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createGitClient(options?: GitClientOptions): GitClient;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/plugins/git.ts"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC9B,CAAC;AAyBF,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAiBzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,SAAS,CAwBzE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { execFile as nodeExecFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFile = promisify(nodeExecFile);
|
|
4
|
+
const SCP_LIKE_SSH = /^[^\s@/:]+@[^\s:/]+:[^\s]+$/;
|
|
5
|
+
function gitOriginForms(value) {
|
|
6
|
+
if (SCP_LIKE_SSH.test(value)) {
|
|
7
|
+
const [userAndHost] = value.split(":", 1);
|
|
8
|
+
const [, host] = userAndHost.split("@", 2);
|
|
9
|
+
return [
|
|
10
|
+
`ssh://${userAndHost}`.toLowerCase(),
|
|
11
|
+
userAndHost.toLowerCase(),
|
|
12
|
+
host.toLowerCase(),
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const url = new URL(value);
|
|
17
|
+
const host = url.host.toLowerCase();
|
|
18
|
+
const authority = `${url.protocol}//${url.username ? `${url.username}@` : ""}${host}`;
|
|
19
|
+
return [authority.toLowerCase(), host];
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** The production installer never accepts local paths or arbitrary protocols. */
|
|
26
|
+
export function isProductionGitUrl(value) {
|
|
27
|
+
if (value.length === 0 || /\s/.test(value))
|
|
28
|
+
return false;
|
|
29
|
+
if (SCP_LIKE_SSH.test(value))
|
|
30
|
+
return true;
|
|
31
|
+
try {
|
|
32
|
+
const url = new URL(value);
|
|
33
|
+
if ((url.protocol !== "https:" && url.protocol !== "ssh:") ||
|
|
34
|
+
url.hostname.length === 0) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return (url.protocol === "ssh:" || (url.username === "" && url.password === ""));
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Empty allowlists deny remote activation. Entries may be either a hostname
|
|
45
|
+
* (`github.com`) or an exact Git authority (`ssh://git@github.com`).
|
|
46
|
+
*/
|
|
47
|
+
export function isAllowedGitOrigin(value, allowedOrigins) {
|
|
48
|
+
if (!isProductionGitUrl(value) || allowedOrigins.length === 0)
|
|
49
|
+
return false;
|
|
50
|
+
const allowed = new Set(allowedOrigins.map((origin) => origin.trim().toLowerCase()));
|
|
51
|
+
return gitOriginForms(value).some((form) => allowed.has(form));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Git's invocation boundary. All callers supply a fixed argument vector; no
|
|
55
|
+
* Hub value is interpolated into a shell command.
|
|
56
|
+
*/
|
|
57
|
+
export function createGitClient(options = {}) {
|
|
58
|
+
const execute = options.execFile ??
|
|
59
|
+
(async (file, args, execOptions) => {
|
|
60
|
+
const result = await execFile(file, args, {
|
|
61
|
+
cwd: execOptions.cwd,
|
|
62
|
+
shell: execOptions.shell,
|
|
63
|
+
encoding: "utf8",
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
stdout: String(result.stdout),
|
|
67
|
+
stderr: String(result.stderr),
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
async run(args, runOptions = {}) {
|
|
72
|
+
const result = await execute("git", [...args], {
|
|
73
|
+
cwd: runOptions.cwd,
|
|
74
|
+
shell: false,
|
|
75
|
+
});
|
|
76
|
+
return result.stdout.trim();
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/plugins/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type PlatformId } from "../runtime/types.js";
|
|
2
|
+
import { type GitClient } from "./git.js";
|
|
3
|
+
import type { ActivePluginSnapshot, InstalledPlugin, PluginConfig, PluginStateStore } from "./types.js";
|
|
4
|
+
export type PluginManagerOptions = {
|
|
5
|
+
pluginsRoot: string;
|
|
6
|
+
git?: GitClient;
|
|
7
|
+
/** Empty means no remote origin is trusted until the local config names one. */
|
|
8
|
+
allowedGitOrigins?: readonly string[];
|
|
9
|
+
/** Tests must inject this to use a local fixture repository. */
|
|
10
|
+
validateGitUrl?: (gitUrl: string) => boolean;
|
|
11
|
+
stateStore?: PluginStateStore;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Reconciles Hub Git desired state into local, immutable plugin revisions.
|
|
15
|
+
* Activation changes a small same-directory pointer only after the complete
|
|
16
|
+
* checkout and its manifest have been validated.
|
|
17
|
+
*/
|
|
18
|
+
export declare class PluginManager {
|
|
19
|
+
private readonly options;
|
|
20
|
+
private readonly git;
|
|
21
|
+
private readonly validateGitUrl;
|
|
22
|
+
private readonly locks;
|
|
23
|
+
private readonly statuses;
|
|
24
|
+
private readonly activePlugins;
|
|
25
|
+
constructor(options: PluginManagerOptions);
|
|
26
|
+
sync(desired: PluginConfig[]): Promise<InstalledPlugin[]>;
|
|
27
|
+
active(runtime: PlatformId): InstalledPlugin[];
|
|
28
|
+
status(id: string): InstalledPlugin | null;
|
|
29
|
+
snapshotActivePlugins(runtime?: PlatformId): ActivePluginSnapshot[];
|
|
30
|
+
private syncOne;
|
|
31
|
+
private checkout;
|
|
32
|
+
private resolveCommit;
|
|
33
|
+
private readManifest;
|
|
34
|
+
private activate;
|
|
35
|
+
private failed;
|
|
36
|
+
private deactivate;
|
|
37
|
+
private save;
|
|
38
|
+
private createStagingDirectory;
|
|
39
|
+
private withPluginLock;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AASA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAE/E,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,YAAY,EAEZ,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAMpB,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,gEAAgE;IAChE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAiGF;;;;GAIG;AACH,qBAAa,aAAa;IAOZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsC;gBAEvC,OAAO,EAAE,oBAAoB;IAWpD,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA0B/D,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,EAAE;IAW9C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAI1C,qBAAqB,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,oBAAoB,EAAE;YAWrD,OAAO;YAiDP,QAAQ;YAqCR,aAAa;YAiBb,YAAY;YAgBZ,QAAQ;IA0CtB,OAAO,CAAC,MAAM;YAYA,UAAU;IAgBxB,OAAO,CAAC,IAAI;YASE,sBAAsB;YAOtB,cAAc;CAmB7B"}
|