@agentex/agent 0.0.2 → 0.0.4
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/README.md +405 -87
- package/dist/index.d.ts +18 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/claude/execute.d.ts.map +1 -1
- package/dist/providers/claude/execute.js +51 -18
- package/dist/providers/claude/execute.js.map +1 -1
- package/dist/providers/claude/index.d.ts.map +1 -1
- package/dist/providers/claude/index.js +37 -8
- package/dist/providers/claude/index.js.map +1 -1
- package/dist/providers/claude/parse.d.ts.map +1 -1
- package/dist/providers/claude/parse.js +2 -1
- package/dist/providers/claude/parse.js.map +1 -1
- package/dist/providers/claude/session.d.ts +10 -0
- package/dist/providers/claude/session.d.ts.map +1 -0
- package/dist/providers/claude/session.js +549 -0
- package/dist/providers/claude/session.js.map +1 -0
- package/dist/providers/claude/test.d.ts.map +1 -1
- package/dist/providers/claude/test.js +38 -11
- package/dist/providers/claude/test.js.map +1 -1
- package/dist/providers/codex/execute.d.ts.map +1 -1
- package/dist/providers/codex/execute.js +122 -74
- package/dist/providers/codex/execute.js.map +1 -1
- package/dist/providers/codex/index.d.ts.map +1 -1
- package/dist/providers/codex/index.js +56 -2
- package/dist/providers/codex/index.js.map +1 -1
- package/dist/providers/codex/parse.d.ts.map +1 -1
- package/dist/providers/codex/parse.js +25 -3
- package/dist/providers/codex/parse.js.map +1 -1
- package/dist/providers/codex/session.d.ts +3 -0
- package/dist/providers/codex/session.d.ts.map +1 -0
- package/dist/providers/codex/session.js +553 -0
- package/dist/providers/codex/session.js.map +1 -0
- package/dist/providers/codex/test.d.ts.map +1 -1
- package/dist/providers/codex/test.js +28 -12
- package/dist/providers/codex/test.js.map +1 -1
- package/dist/providers/codex/usage-scanner.d.ts +18 -0
- package/dist/providers/codex/usage-scanner.d.ts.map +1 -0
- package/dist/providers/codex/usage-scanner.js +148 -0
- package/dist/providers/codex/usage-scanner.js.map +1 -0
- package/dist/providers/cursor/codec.d.ts +3 -0
- package/dist/providers/cursor/codec.d.ts.map +1 -0
- package/dist/providers/cursor/codec.js +43 -0
- package/dist/providers/cursor/codec.js.map +1 -0
- package/dist/providers/cursor/execute.d.ts +3 -0
- package/dist/providers/cursor/execute.d.ts.map +1 -0
- package/dist/providers/cursor/execute.js +248 -0
- package/dist/providers/cursor/execute.js.map +1 -0
- package/dist/providers/cursor/index.d.ts +3 -0
- package/dist/providers/cursor/index.d.ts.map +1 -0
- package/dist/providers/cursor/index.js +28 -0
- package/dist/providers/cursor/index.js.map +1 -0
- package/dist/providers/cursor/parse.d.ts +26 -0
- package/dist/providers/cursor/parse.d.ts.map +1 -0
- package/dist/providers/cursor/parse.js +224 -0
- package/dist/providers/cursor/parse.js.map +1 -0
- package/dist/providers/cursor/test.d.ts +3 -0
- package/dist/providers/cursor/test.d.ts.map +1 -0
- package/dist/providers/cursor/test.js +58 -0
- package/dist/providers/cursor/test.js.map +1 -0
- package/dist/providers/gemini/codec.d.ts +3 -0
- package/dist/providers/gemini/codec.d.ts.map +1 -0
- package/dist/providers/gemini/codec.js +47 -0
- package/dist/providers/gemini/codec.js.map +1 -0
- package/dist/providers/gemini/execute.d.ts +3 -0
- package/dist/providers/gemini/execute.d.ts.map +1 -0
- package/dist/providers/gemini/execute.js +236 -0
- package/dist/providers/gemini/execute.js.map +1 -0
- package/dist/providers/gemini/index.d.ts +3 -0
- package/dist/providers/gemini/index.d.ts.map +1 -0
- package/dist/providers/gemini/index.js +62 -0
- package/dist/providers/gemini/index.js.map +1 -0
- package/dist/providers/gemini/parse.d.ts +20 -0
- package/dist/providers/gemini/parse.d.ts.map +1 -0
- package/dist/providers/gemini/parse.js +207 -0
- package/dist/providers/gemini/parse.js.map +1 -0
- package/dist/providers/gemini/test.d.ts +3 -0
- package/dist/providers/gemini/test.d.ts.map +1 -0
- package/dist/providers/gemini/test.js +67 -0
- package/dist/providers/gemini/test.js.map +1 -0
- package/dist/providers/openclaw/execute.d.ts.map +1 -1
- package/dist/providers/openclaw/execute.js +10 -5
- package/dist/providers/openclaw/execute.js.map +1 -1
- package/dist/providers/openclaw/index.d.ts.map +1 -1
- package/dist/providers/openclaw/index.js +15 -2
- package/dist/providers/openclaw/index.js.map +1 -1
- package/dist/providers/openclaw/test.d.ts.map +1 -1
- package/dist/providers/openclaw/test.js +4 -0
- package/dist/providers/openclaw/test.js.map +1 -1
- package/dist/providers/opencode/codec.d.ts +3 -0
- package/dist/providers/opencode/codec.d.ts.map +1 -0
- package/dist/providers/opencode/codec.js +47 -0
- package/dist/providers/opencode/codec.js.map +1 -0
- package/dist/providers/opencode/execute.d.ts +3 -0
- package/dist/providers/opencode/execute.d.ts.map +1 -0
- package/dist/providers/opencode/execute.js +225 -0
- package/dist/providers/opencode/execute.js.map +1 -0
- package/dist/providers/opencode/index.d.ts +3 -0
- package/dist/providers/opencode/index.d.ts.map +1 -0
- package/dist/providers/opencode/index.js +62 -0
- package/dist/providers/opencode/index.js.map +1 -0
- package/dist/providers/opencode/parse.d.ts +19 -0
- package/dist/providers/opencode/parse.d.ts.map +1 -0
- package/dist/providers/opencode/parse.js +145 -0
- package/dist/providers/opencode/parse.js.map +1 -0
- package/dist/providers/opencode/test.d.ts +3 -0
- package/dist/providers/opencode/test.d.ts.map +1 -0
- package/dist/providers/opencode/test.js +60 -0
- package/dist/providers/opencode/test.js.map +1 -0
- package/dist/providers/pi/codec.d.ts +7 -0
- package/dist/providers/pi/codec.d.ts.map +1 -0
- package/dist/providers/pi/codec.js +45 -0
- package/dist/providers/pi/codec.js.map +1 -0
- package/dist/providers/pi/execute.d.ts +3 -0
- package/dist/providers/pi/execute.d.ts.map +1 -0
- package/dist/providers/pi/execute.js +300 -0
- package/dist/providers/pi/execute.js.map +1 -0
- package/dist/providers/pi/index.d.ts +3 -0
- package/dist/providers/pi/index.d.ts.map +1 -0
- package/dist/providers/pi/index.js +64 -0
- package/dist/providers/pi/index.js.map +1 -0
- package/dist/providers/pi/parse.d.ts +18 -0
- package/dist/providers/pi/parse.d.ts.map +1 -0
- package/dist/providers/pi/parse.js +182 -0
- package/dist/providers/pi/parse.js.map +1 -0
- package/dist/providers/pi/test.d.ts +3 -0
- package/dist/providers/pi/test.d.ts.map +1 -0
- package/dist/providers/pi/test.js +60 -0
- package/dist/providers/pi/test.js.map +1 -0
- package/dist/providers/process/execute.d.ts.map +1 -1
- package/dist/providers/process/execute.js +45 -7
- package/dist/providers/process/execute.js.map +1 -1
- package/dist/providers/process/index.d.ts.map +1 -1
- package/dist/providers/process/index.js +27 -30
- package/dist/providers/process/index.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +8 -0
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +379 -22
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +23 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/ask-user-question.d.ts +50 -0
- package/dist/utils/ask-user-question.d.ts.map +1 -0
- package/dist/utils/ask-user-question.js +32 -0
- package/dist/utils/ask-user-question.js.map +1 -0
- package/dist/utils/auth.d.ts +22 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +497 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/binary.d.ts.map +1 -1
- package/dist/utils/binary.js +29 -6
- package/dist/utils/binary.js.map +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +18 -0
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/execute-all.d.ts +20 -0
- package/dist/utils/execute-all.d.ts.map +1 -0
- package/dist/utils/execute-all.js +46 -0
- package/dist/utils/execute-all.js.map +1 -0
- package/dist/utils/instructions.d.ts +7 -0
- package/dist/utils/instructions.d.ts.map +1 -0
- package/dist/utils/instructions.js +21 -0
- package/dist/utils/instructions.js.map +1 -0
- package/dist/utils/model-cache.d.ts +11 -0
- package/dist/utils/model-cache.d.ts.map +1 -0
- package/dist/utils/model-cache.js +17 -0
- package/dist/utils/model-cache.js.map +1 -0
- package/dist/utils/process.d.ts +4 -0
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +46 -5
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/runtime-config.d.ts +34 -0
- package/dist/utils/runtime-config.d.ts.map +1 -0
- package/dist/utils/runtime-config.js +71 -0
- package/dist/utils/runtime-config.js.map +1 -0
- package/dist/utils/runtime-homes.d.ts +13 -0
- package/dist/utils/runtime-homes.d.ts.map +1 -0
- package/dist/utils/runtime-homes.js +41 -0
- package/dist/utils/runtime-homes.js.map +1 -0
- package/dist/utils/skills.d.ts +152 -1
- package/dist/utils/skills.d.ts.map +1 -1
- package/dist/utils/skills.js +352 -0
- package/dist/utils/skills.js.map +1 -1
- package/dist/utils/workspace.d.ts +55 -0
- package/dist/utils/workspace.d.ts.map +1 -0
- package/dist/utils/workspace.js +89 -0
- package/dist/utils/workspace.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ExecutionContext, ExecutionResult, ProviderModule } from "../types.js";
|
|
2
|
+
export interface ExecuteAllOptions {
|
|
3
|
+
/** Abort all remaining executions if any one fails. Default: false. */
|
|
4
|
+
cancelOnFailure?: boolean;
|
|
5
|
+
/** External signal to cancel all executions. */
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
}
|
|
8
|
+
export interface ExecuteAllTask {
|
|
9
|
+
provider: string | ProviderModule;
|
|
10
|
+
ctx: ExecutionContext;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Run multiple agent executions concurrently with shared cancellation.
|
|
14
|
+
*
|
|
15
|
+
* Returns results in the same order as the input tasks. If `cancelOnFailure`
|
|
16
|
+
* is true, remaining tasks are aborted as soon as any task returns a
|
|
17
|
+
* non-completed status.
|
|
18
|
+
*/
|
|
19
|
+
export declare function executeAll(tasks: ExecuteAllTask[], options?: ExecuteAllOptions): Promise<ExecutionResult[]>;
|
|
20
|
+
//# sourceMappingURL=execute-all.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-all.d.ts","sourceRoot":"","sources":["../../src/utils/execute-all.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGrF,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gDAAgD;IAChD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC;IAClC,GAAG,EAAE,gBAAgB,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,eAAe,EAAE,CAAC,CA0C5B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { getProvider } from "../registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* Run multiple agent executions concurrently with shared cancellation.
|
|
4
|
+
*
|
|
5
|
+
* Returns results in the same order as the input tasks. If `cancelOnFailure`
|
|
6
|
+
* is true, remaining tasks are aborted as soon as any task returns a
|
|
7
|
+
* non-completed status.
|
|
8
|
+
*/
|
|
9
|
+
export async function executeAll(tasks, options) {
|
|
10
|
+
if (tasks.length === 0)
|
|
11
|
+
return [];
|
|
12
|
+
const controller = new AbortController();
|
|
13
|
+
// Chain external signal
|
|
14
|
+
if (options?.signal) {
|
|
15
|
+
if (options.signal.aborted) {
|
|
16
|
+
controller.abort(options.signal.reason);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const onAbort = () => controller.abort(options.signal.reason);
|
|
20
|
+
options.signal.addEventListener("abort", onAbort, { once: true });
|
|
21
|
+
// Clean up listener when our controller aborts (avoid leak)
|
|
22
|
+
controller.signal.addEventListener("abort", () => {
|
|
23
|
+
options.signal.removeEventListener("abort", onAbort);
|
|
24
|
+
}, { once: true });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const promises = tasks.map(async (task) => {
|
|
28
|
+
const provider = typeof task.provider === "string"
|
|
29
|
+
? getProvider(task.provider)
|
|
30
|
+
: task.provider;
|
|
31
|
+
// Merge signals: task's own signal + shared controller signal
|
|
32
|
+
const taskSignal = task.ctx.signal
|
|
33
|
+
? AbortSignal.any([task.ctx.signal, controller.signal])
|
|
34
|
+
: controller.signal;
|
|
35
|
+
const result = await provider.execute({
|
|
36
|
+
...task.ctx,
|
|
37
|
+
signal: taskSignal,
|
|
38
|
+
});
|
|
39
|
+
if (options?.cancelOnFailure && result.status !== "completed") {
|
|
40
|
+
controller.abort("cancelOnFailure");
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
});
|
|
44
|
+
return Promise.all(promises);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=execute-all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-all.js","sourceRoot":"","sources":["../../src/utils/execute-all.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAc7C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAuB,EACvB,OAA2B;IAE3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,wBAAwB;IACxB,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC;YAC/D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,4DAA4D;YAC5D,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC/C,OAAO,CAAC,MAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxD,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAA4B,EAAE;QAClE,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAChD,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAElB,8DAA8D;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;YAChC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;YACpC,GAAG,IAAI,CAAC,GAAG;YACX,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC9D,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read an instructions file and return its content.
|
|
3
|
+
* Returns null if no path is provided.
|
|
4
|
+
* Throws a clear error if the file doesn't exist.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveInstructions(filePath?: string): Promise<string | null>;
|
|
7
|
+
//# sourceMappingURL=instructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/utils/instructions.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWnF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
/**
|
|
3
|
+
* Read an instructions file and return its content.
|
|
4
|
+
* Returns null if no path is provided.
|
|
5
|
+
* Throws a clear error if the file doesn't exist.
|
|
6
|
+
*/
|
|
7
|
+
export async function resolveInstructions(filePath) {
|
|
8
|
+
if (!filePath)
|
|
9
|
+
return null;
|
|
10
|
+
try {
|
|
11
|
+
return await fs.readFile(filePath, "utf-8");
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
const code = err.code;
|
|
15
|
+
if (code === "ENOENT") {
|
|
16
|
+
throw new Error(`Instructions file not found: ${filePath}`);
|
|
17
|
+
}
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=instructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/utils/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAiB;IACzD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProviderModel } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Simple in-memory TTL cache for model lists.
|
|
4
|
+
* Each provider creates its own instance.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ModelCache {
|
|
7
|
+
private cache;
|
|
8
|
+
private cachedAt;
|
|
9
|
+
get(ttlMs: number, fetcher: () => Promise<ProviderModel[]>): Promise<ProviderModel[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=model-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-cache.d.ts","sourceRoot":"","sources":["../../src/utils/model-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAK;IAEf,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAQ5F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple in-memory TTL cache for model lists.
|
|
3
|
+
* Each provider creates its own instance.
|
|
4
|
+
*/
|
|
5
|
+
export class ModelCache {
|
|
6
|
+
cache = null;
|
|
7
|
+
cachedAt = 0;
|
|
8
|
+
async get(ttlMs, fetcher) {
|
|
9
|
+
if (ttlMs > 0 && this.cache && Date.now() - this.cachedAt < ttlMs) {
|
|
10
|
+
return this.cache;
|
|
11
|
+
}
|
|
12
|
+
this.cache = await fetcher();
|
|
13
|
+
this.cachedAt = Date.now();
|
|
14
|
+
return this.cache;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=model-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../../src/utils/model-cache.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,GAA2B,IAAI,CAAC;IACrC,QAAQ,GAAG,CAAC,CAAC;IAErB,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,OAAuC;QAC9D,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
package/dist/utils/process.d.ts
CHANGED
|
@@ -9,11 +9,15 @@ export interface RunProcessOptions {
|
|
|
9
9
|
graceSec?: number;
|
|
10
10
|
maxCaptureBytes?: number;
|
|
11
11
|
onOutput?: (stream: "stdout" | "stderr", chunk: string) => void | Promise<void>;
|
|
12
|
+
onStart?: (pid: number) => void;
|
|
13
|
+
/** AbortSignal to cancel the process. */
|
|
14
|
+
signal?: AbortSignal;
|
|
12
15
|
}
|
|
13
16
|
export interface RunProcessResult {
|
|
14
17
|
exitCode: number | null;
|
|
15
18
|
signal: string | null;
|
|
16
19
|
timedOut: boolean;
|
|
20
|
+
aborted: boolean;
|
|
17
21
|
stdout: string;
|
|
18
22
|
stderr: string;
|
|
19
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,yCAAyC;IACzC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAKvE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,OAAmB,GAAG,IAAI,CAqBrF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiKlF"}
|
package/dist/utils/process.js
CHANGED
|
@@ -3,6 +3,8 @@ import process from "node:process";
|
|
|
3
3
|
const DEFAULT_MAX_CAPTURE = 4 * 1024 * 1024; // 4MB
|
|
4
4
|
const DEFAULT_GRACE_SEC = 5;
|
|
5
5
|
export function deriveErrorCode(result) {
|
|
6
|
+
if (result.aborted)
|
|
7
|
+
return "aborted";
|
|
6
8
|
if (result.timedOut)
|
|
7
9
|
return "timeout";
|
|
8
10
|
if (result.signal && !result.timedOut)
|
|
@@ -34,6 +36,17 @@ export function killProcessTree(pid, signal = "SIGTERM") {
|
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
export function runChildProcess(opts) {
|
|
39
|
+
// If already aborted before spawn, return immediately
|
|
40
|
+
if (opts.signal?.aborted) {
|
|
41
|
+
return Promise.resolve({
|
|
42
|
+
exitCode: null,
|
|
43
|
+
signal: null,
|
|
44
|
+
timedOut: false,
|
|
45
|
+
aborted: true,
|
|
46
|
+
stdout: "",
|
|
47
|
+
stderr: "",
|
|
48
|
+
});
|
|
49
|
+
}
|
|
37
50
|
return new Promise((resolve) => {
|
|
38
51
|
const maxCapture = opts.maxCaptureBytes ?? DEFAULT_MAX_CAPTURE;
|
|
39
52
|
const graceSec = opts.graceSec ?? DEFAULT_GRACE_SEC;
|
|
@@ -42,6 +55,7 @@ export function runChildProcess(opts) {
|
|
|
42
55
|
let stdoutBytes = 0;
|
|
43
56
|
let stderrBytes = 0;
|
|
44
57
|
let timedOut = false;
|
|
58
|
+
let aborted = false;
|
|
45
59
|
let timeoutHandle = null;
|
|
46
60
|
let graceHandle = null;
|
|
47
61
|
// Chained promise for ordered callback execution
|
|
@@ -53,6 +67,10 @@ export function runChildProcess(opts) {
|
|
|
53
67
|
shell: false,
|
|
54
68
|
detached: process.platform !== "win32", // Enable process group on Unix
|
|
55
69
|
});
|
|
70
|
+
// Notify caller of the child PID
|
|
71
|
+
if (opts.onStart && child.pid != null) {
|
|
72
|
+
opts.onStart(child.pid);
|
|
73
|
+
}
|
|
56
74
|
// Write stdin and close
|
|
57
75
|
if (opts.stdin != null) {
|
|
58
76
|
child.stdin.write(opts.stdin);
|
|
@@ -102,17 +120,41 @@ export function runChildProcess(opts) {
|
|
|
102
120
|
}
|
|
103
121
|
}, opts.timeoutSec * 1000);
|
|
104
122
|
}
|
|
105
|
-
|
|
123
|
+
// AbortSignal handling
|
|
124
|
+
let abortGraceHandle = null;
|
|
125
|
+
const onAbort = () => {
|
|
126
|
+
aborted = true;
|
|
127
|
+
if (child.pid != null) {
|
|
128
|
+
killProcessTree(child.pid, "SIGTERM");
|
|
129
|
+
abortGraceHandle = setTimeout(() => {
|
|
130
|
+
if (child.pid != null) {
|
|
131
|
+
killProcessTree(child.pid, "SIGKILL");
|
|
132
|
+
}
|
|
133
|
+
}, graceSec * 1000);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
if (opts.signal) {
|
|
137
|
+
opts.signal.addEventListener("abort", onAbort, { once: true });
|
|
138
|
+
}
|
|
139
|
+
const cleanup = () => {
|
|
106
140
|
if (timeoutHandle)
|
|
107
141
|
clearTimeout(timeoutHandle);
|
|
108
142
|
if (graceHandle)
|
|
109
143
|
clearTimeout(graceHandle);
|
|
144
|
+
if (abortGraceHandle)
|
|
145
|
+
clearTimeout(abortGraceHandle);
|
|
146
|
+
if (opts.signal)
|
|
147
|
+
opts.signal.removeEventListener("abort", onAbort);
|
|
148
|
+
};
|
|
149
|
+
child.on("close", (code, signal) => {
|
|
150
|
+
cleanup();
|
|
110
151
|
// Wait for callbacks to complete before resolving
|
|
111
152
|
callbackChain.then(() => {
|
|
112
153
|
resolve({
|
|
113
154
|
exitCode: code,
|
|
114
155
|
signal: signal ?? null,
|
|
115
156
|
timedOut,
|
|
157
|
+
aborted,
|
|
116
158
|
stdout: stdoutBuf,
|
|
117
159
|
stderr: stderrBuf,
|
|
118
160
|
});
|
|
@@ -121,20 +163,19 @@ export function runChildProcess(opts) {
|
|
|
121
163
|
exitCode: code,
|
|
122
164
|
signal: signal ?? null,
|
|
123
165
|
timedOut,
|
|
166
|
+
aborted,
|
|
124
167
|
stdout: stdoutBuf,
|
|
125
168
|
stderr: stderrBuf,
|
|
126
169
|
});
|
|
127
170
|
});
|
|
128
171
|
});
|
|
129
172
|
child.on("error", (err) => {
|
|
130
|
-
|
|
131
|
-
clearTimeout(timeoutHandle);
|
|
132
|
-
if (graceHandle)
|
|
133
|
-
clearTimeout(graceHandle);
|
|
173
|
+
cleanup();
|
|
134
174
|
resolve({
|
|
135
175
|
exitCode: null,
|
|
136
176
|
signal: null,
|
|
137
177
|
timedOut: false,
|
|
178
|
+
aborted: false,
|
|
138
179
|
stdout: stdoutBuf,
|
|
139
180
|
stderr: err.message,
|
|
140
181
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,OAAO,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { SkillRuntime } from "./skills.js";
|
|
2
|
+
export interface TempConfigResult {
|
|
3
|
+
/** Environment variables to pass to the child process (includes the
|
|
4
|
+
* runtime home env var pointing at the temp config dir). */
|
|
5
|
+
env: Record<string, string>;
|
|
6
|
+
/** Path to the temporary config directory. */
|
|
7
|
+
configDir: string;
|
|
8
|
+
/** Remove the temporary config directory. */
|
|
9
|
+
cleanup(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export interface TempConfigOptions {
|
|
12
|
+
/** Which runtime CLI tool to configure. */
|
|
13
|
+
runtime: SkillRuntime;
|
|
14
|
+
/** Base environment to extend. */
|
|
15
|
+
env?: Record<string, string>;
|
|
16
|
+
/** If true, copy the contents of the default home into the temp dir
|
|
17
|
+
* before applying overrides. Defaults to false. */
|
|
18
|
+
seedFromDefault?: boolean;
|
|
19
|
+
/** Files to write into the temp config dir (relative paths → content). */
|
|
20
|
+
overrides?: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a temporary config directory for a CLI runtime, optionally seeded
|
|
24
|
+
* from the user's default home, with arbitrary file overrides applied.
|
|
25
|
+
*
|
|
26
|
+
* Returns an env object with the runtime home env var pointed at the temp dir,
|
|
27
|
+
* and a cleanup function to remove the temp dir when done.
|
|
28
|
+
*
|
|
29
|
+
* This is useful for running a CLI tool with custom configuration (e.g.
|
|
30
|
+
* injecting system prompts, custom settings) without modifying the user's
|
|
31
|
+
* real config directory.
|
|
32
|
+
*/
|
|
33
|
+
export declare function withTempConfig(options: TempConfigOptions): Promise<TempConfigResult>;
|
|
34
|
+
//# sourceMappingURL=runtime-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-config.d.ts","sourceRoot":"","sources":["../../src/utils/runtime-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,WAAW,gBAAgB;IAC/B;iEAC6D;IAC7D,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,OAAO,EAAE,YAAY,CAAC;IACtB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B;wDACoD;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyC1F"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
import { getRuntimeHomeEnvVar, getDefaultRuntimeHome } from "./runtime-homes.js";
|
|
5
|
+
import { uuidv7 } from "./uuid.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create a temporary config directory for a CLI runtime, optionally seeded
|
|
8
|
+
* from the user's default home, with arbitrary file overrides applied.
|
|
9
|
+
*
|
|
10
|
+
* Returns an env object with the runtime home env var pointed at the temp dir,
|
|
11
|
+
* and a cleanup function to remove the temp dir when done.
|
|
12
|
+
*
|
|
13
|
+
* This is useful for running a CLI tool with custom configuration (e.g.
|
|
14
|
+
* injecting system prompts, custom settings) without modifying the user's
|
|
15
|
+
* real config directory.
|
|
16
|
+
*/
|
|
17
|
+
export async function withTempConfig(options) {
|
|
18
|
+
const { runtime, seedFromDefault, overrides } = options;
|
|
19
|
+
const envVarName = getRuntimeHomeEnvVar(runtime);
|
|
20
|
+
const shortId = uuidv7().slice(0, 8);
|
|
21
|
+
const configDir = path.join(os.tmpdir(), `agentex-cfg-${runtime}-${shortId}`);
|
|
22
|
+
await fs.mkdir(configDir, { recursive: true });
|
|
23
|
+
// Seed from the user's default home if requested
|
|
24
|
+
if (seedFromDefault) {
|
|
25
|
+
const defaultHome = getDefaultRuntimeHome(runtime);
|
|
26
|
+
try {
|
|
27
|
+
await copyDir(defaultHome, configDir);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Default home may not exist — non-fatal
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Apply overrides
|
|
34
|
+
if (overrides) {
|
|
35
|
+
for (const [relativePath, content] of Object.entries(overrides)) {
|
|
36
|
+
const target = path.join(configDir, relativePath);
|
|
37
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
38
|
+
await fs.writeFile(target, content, "utf-8");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Build env with the runtime home pointing to our temp dir
|
|
42
|
+
const env = { ...(options.env ?? {}) };
|
|
43
|
+
if (envVarName) {
|
|
44
|
+
env[envVarName] = configDir;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
env,
|
|
48
|
+
configDir,
|
|
49
|
+
async cleanup() {
|
|
50
|
+
await fs.rm(configDir, { recursive: true, force: true });
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Internal helpers
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
async function copyDir(src, dest) {
|
|
58
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
59
|
+
for (const entry of entries) {
|
|
60
|
+
const srcPath = path.join(src, entry.name);
|
|
61
|
+
const destPath = path.join(dest, entry.name);
|
|
62
|
+
if (entry.isDirectory()) {
|
|
63
|
+
await fs.mkdir(destPath, { recursive: true });
|
|
64
|
+
await copyDir(srcPath, destPath);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
await fs.copyFile(srcPath, destPath);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=runtime-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../../src/utils/runtime-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SkillRuntime } from "./skills.js";
|
|
2
|
+
/**
|
|
3
|
+
* Returns the environment variable name that overrides the global home
|
|
4
|
+
* directory for the given runtime CLI tool.
|
|
5
|
+
*
|
|
6
|
+
* Returns null for runtimes that don't support home directory override.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getRuntimeHomeEnvVar(runtime: SkillRuntime): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the default global home directory path for the given runtime.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getDefaultRuntimeHome(runtime: SkillRuntime): string;
|
|
13
|
+
//# sourceMappingURL=runtime-homes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-homes.d.ts","sourceRoot":"","sources":["../../src/utils/runtime-homes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA2BhD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import * as os from "node:os";
|
|
3
|
+
/**
|
|
4
|
+
* Env var that overrides the global home directory for each runtime CLI.
|
|
5
|
+
* Returns null for runtimes that don't support home directory override.
|
|
6
|
+
*/
|
|
7
|
+
const ENV_VAR_MAP = {
|
|
8
|
+
claude: "CLAUDE_CONFIG_DIR",
|
|
9
|
+
codex: "CODEX_HOME",
|
|
10
|
+
gemini: "GEMINI_CONFIG_DIR",
|
|
11
|
+
cursor: "CURSOR_CONFIG_DIR",
|
|
12
|
+
opencode: "XDG_CONFIG_HOME", // affects ~/.config/opencode/
|
|
13
|
+
pi: "PI_HOME",
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Default global home directory path for each runtime.
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_HOME_MAP = {
|
|
19
|
+
claude: path.join(os.homedir(), ".claude"),
|
|
20
|
+
codex: path.join(os.homedir(), ".codex"),
|
|
21
|
+
gemini: path.join(os.homedir(), ".gemini"),
|
|
22
|
+
cursor: path.join(os.homedir(), ".cursor"),
|
|
23
|
+
opencode: path.join(os.homedir(), ".config", "opencode"),
|
|
24
|
+
pi: path.join(os.homedir(), ".pi"),
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Returns the environment variable name that overrides the global home
|
|
28
|
+
* directory for the given runtime CLI tool.
|
|
29
|
+
*
|
|
30
|
+
* Returns null for runtimes that don't support home directory override.
|
|
31
|
+
*/
|
|
32
|
+
export function getRuntimeHomeEnvVar(runtime) {
|
|
33
|
+
return ENV_VAR_MAP[runtime] ?? null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Returns the default global home directory path for the given runtime.
|
|
37
|
+
*/
|
|
38
|
+
export function getDefaultRuntimeHome(runtime) {
|
|
39
|
+
return DEFAULT_HOME_MAP[runtime] ?? path.join(os.homedir(), `.${runtime}`);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=runtime-homes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-homes.js","sourceRoot":"","sources":["../../src/utils/runtime-homes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAG9B;;;GAGG;AACH,MAAM,WAAW,GAAwC;IACvD,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,mBAAmB;IAC3B,QAAQ,EAAE,iBAAiB,EAAG,8BAA8B;IAC5D,EAAE,EAAE,SAAS;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAiC;IACrD,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;IAC1C,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC;IACxC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;IAC1C,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;IACxD,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;CACnC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAqB;IACxD,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAqB;IACzD,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAC7E,CAAC"}
|