@your-world/cli 0.1.5 → 0.1.7
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/dist/adapters/claude-code-adapter.d.ts +16 -0
- package/dist/adapters/claude-code-adapter.js +106 -0
- package/dist/adapters/claude-code-adapter.js.map +1 -0
- package/dist/adapters/codex-adapter.d.ts +1 -0
- package/dist/adapters/codex-adapter.js +26 -12
- package/dist/adapters/codex-adapter.js.map +1 -1
- package/dist/adapters/external-agent-adapter.d.ts +4 -0
- package/dist/adapters/external-agent-adapter.js +13 -0
- package/dist/adapters/external-agent-adapter.js.map +1 -1
- package/dist/cli/action-submit.js +47 -14
- package/dist/cli/action-submit.js.map +1 -1
- package/dist/cli/agent-adapter-discovery.d.ts +10 -0
- package/dist/cli/agent-adapter-discovery.js +116 -0
- package/dist/cli/agent-adapter-discovery.js.map +1 -0
- package/dist/cli/bin.js +51 -14
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/catalog.js +11 -6
- package/dist/cli/catalog.js.map +1 -1
- package/dist/cli/observe.js +14 -1
- package/dist/cli/observe.js.map +1 -1
- package/dist/cli/play-goal.d.ts +2 -0
- package/dist/cli/play-goal.js +34 -0
- package/dist/cli/play-goal.js.map +1 -0
- package/dist/cli/play-init.d.ts +7 -0
- package/dist/cli/play-init.js +45 -9
- package/dist/cli/play-init.js.map +1 -1
- package/dist/cli/play-run.js +8 -3
- package/dist/cli/play-run.js.map +1 -1
- package/dist/cli/player-init.js +1 -1
- package/dist/cli/player-init.js.map +1 -1
- package/dist/cli/rules.js +16 -6
- package/dist/cli/rules.js.map +1 -1
- package/dist/cli/shared.js +31 -16
- package/dist/cli/shared.js.map +1 -1
- package/dist/config/credential-store.js +6 -3
- package/dist/config/credential-store.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/optional-prop.d.ts +1 -0
- package/dist/optional-prop.js +12 -0
- package/dist/optional-prop.js.map +1 -0
- package/dist/prompting/agents-template.d.ts +1 -0
- package/dist/prompting/agents-template.js +40 -2
- package/dist/prompting/agents-template.js.map +1 -1
- package/dist/prompting/turn-summary.js +55 -3
- package/dist/prompting/turn-summary.js.map +1 -1
- package/dist/runtime/player-runtime.d.ts +2 -2
- package/dist/runtime/player-runtime.js +96 -39
- package/dist/runtime/player-runtime.js.map +1 -1
- package/dist/runtime/session-store.d.ts +3 -0
- package/dist/runtime/session-store.js +12 -2
- package/dist/runtime/session-store.js.map +1 -1
- package/dist/runtime/settlement-sync.js +80 -18
- package/dist/runtime/settlement-sync.js.map +1 -1
- package/dist/runtime/turn-orchestrator.js +3 -2
- package/dist/runtime/turn-orchestrator.js.map +1 -1
- package/dist/runtime/workspace-manager.d.ts +6 -0
- package/dist/runtime/workspace-manager.js +58 -5
- package/dist/runtime/workspace-manager.js.map +1 -1
- package/dist/types.d.ts +137 -40
- package/dist/world-client.d.ts +6 -6
- package/dist/world-client.js +24 -14
- package/dist/world-client.js.map +1 -1
- package/package.json +4 -2
- package/dist/adapters/generic-command-adapter.d.ts +0 -12
- package/dist/adapters/generic-command-adapter.js +0 -58
- package/dist/adapters/generic-command-adapter.js.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ExternalAgentAdapter, PreparedSession, PrepareSessionInput, RunningTurn, RunTurnInput } from './external-agent-adapter';
|
|
2
|
+
export interface ClaudeCodeAdapterOptions {
|
|
3
|
+
command?: string[];
|
|
4
|
+
execArgsTemplate?: string[];
|
|
5
|
+
resumeArgsTemplate?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class ClaudeCodeAdapter implements ExternalAgentAdapter {
|
|
8
|
+
readonly name = "claude-code";
|
|
9
|
+
readonly instructionFileName = "CLAUDE.md";
|
|
10
|
+
private readonly command;
|
|
11
|
+
private readonly execArgsTemplate;
|
|
12
|
+
private readonly resumeArgsTemplate;
|
|
13
|
+
constructor(options?: ClaudeCodeAdapterOptions);
|
|
14
|
+
prepareSession(_input: PrepareSessionInput): Promise<PreparedSession>;
|
|
15
|
+
runTurn(input: RunTurnInput): Promise<RunningTurn>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClaudeCodeAdapter = void 0;
|
|
4
|
+
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const optional_prop_1 = require("../optional-prop");
|
|
6
|
+
const DEFAULT_COMMAND = ['claude'];
|
|
7
|
+
const DEFAULT_EXEC_ARGS_TEMPLATE = ['-p', '--output-format', 'json', '--permission-mode', 'bypassPermissions'];
|
|
8
|
+
const DEFAULT_RESUME_ARGS_TEMPLATE = ['-p', '--output-format', 'json', '--permission-mode', 'bypassPermissions', '--resume', '{sessionId}'];
|
|
9
|
+
class ClaudeCodeAdapter {
|
|
10
|
+
name = 'claude-code';
|
|
11
|
+
instructionFileName = 'CLAUDE.md';
|
|
12
|
+
command;
|
|
13
|
+
execArgsTemplate;
|
|
14
|
+
resumeArgsTemplate;
|
|
15
|
+
constructor(options = {}) {
|
|
16
|
+
this.command = options.command && options.command.length > 0 ? [...options.command] : [...DEFAULT_COMMAND];
|
|
17
|
+
this.execArgsTemplate = options.execArgsTemplate && options.execArgsTemplate.length > 0 ? [...options.execArgsTemplate] : [...DEFAULT_EXEC_ARGS_TEMPLATE];
|
|
18
|
+
this.resumeArgsTemplate = options.resumeArgsTemplate && options.resumeArgsTemplate.length > 0 ? [...options.resumeArgsTemplate] : [...DEFAULT_RESUME_ARGS_TEMPLATE];
|
|
19
|
+
}
|
|
20
|
+
prepareSession(_input) {
|
|
21
|
+
return Promise.resolve({});
|
|
22
|
+
}
|
|
23
|
+
runTurn(input) {
|
|
24
|
+
const argsTemplate = input.session.adapterSessionId ? this.resumeArgsTemplate : this.execArgsTemplate;
|
|
25
|
+
const args = argsTemplate.map((part) => substitute(part, input.session.adapterSessionId, input)).concat(input.prompt);
|
|
26
|
+
const executable = this.command[0];
|
|
27
|
+
if (!executable) {
|
|
28
|
+
throw new Error('ClaudeCodeAdapter command is empty.');
|
|
29
|
+
}
|
|
30
|
+
const child = (0, node_child_process_1.spawn)(executable, [...this.command.slice(1), ...args], {
|
|
31
|
+
cwd: input.workDir,
|
|
32
|
+
env: buildAdapterProcessEnv(input),
|
|
33
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
34
|
+
});
|
|
35
|
+
let stdoutBuffer = '';
|
|
36
|
+
let stderrBuffer = '';
|
|
37
|
+
child.stdout.on('data', (chunk) => {
|
|
38
|
+
const text = String(chunk);
|
|
39
|
+
stdoutBuffer += text;
|
|
40
|
+
void input.onOutput?.(text);
|
|
41
|
+
});
|
|
42
|
+
child.stderr.on('data', (chunk) => {
|
|
43
|
+
const text = String(chunk);
|
|
44
|
+
stderrBuffer += text;
|
|
45
|
+
void input.onOutput?.(text);
|
|
46
|
+
});
|
|
47
|
+
return Promise.resolve({
|
|
48
|
+
completion: new Promise((resolve, reject) => {
|
|
49
|
+
child.once('error', reject);
|
|
50
|
+
child.once('exit', (exitCode, signal) => {
|
|
51
|
+
const adapterSessionId = extractClaudeSessionId(stdoutBuffer) ?? extractClaudeSessionId(stderrBuffer) ?? input.session.adapterSessionId;
|
|
52
|
+
resolve({
|
|
53
|
+
exitCode,
|
|
54
|
+
signal,
|
|
55
|
+
...(0, optional_prop_1.optionalProp)('adapterSessionId', adapterSessionId),
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}),
|
|
59
|
+
cancel: () => {
|
|
60
|
+
child.kill('SIGTERM');
|
|
61
|
+
return Promise.resolve();
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.ClaudeCodeAdapter = ClaudeCodeAdapter;
|
|
67
|
+
function buildAdapterProcessEnv(input) {
|
|
68
|
+
return {
|
|
69
|
+
...process.env,
|
|
70
|
+
YW_RUNTIME_LOG_SUBMISSIONS: '1',
|
|
71
|
+
YW_RUN_ID: input.runId,
|
|
72
|
+
YW_WORK_DIR: input.workDir,
|
|
73
|
+
YW_PROMPT_FILE: input.promptFilePath,
|
|
74
|
+
YW_SESSION_FILE: `${input.workDir}/session.json`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function extractClaudeSessionId(output) {
|
|
78
|
+
for (const line of output.split(/\r?\n/u).reverse()) {
|
|
79
|
+
const trimmed = line.trim();
|
|
80
|
+
if (trimmed.length === 0) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const parsed = JSON.parse(trimmed);
|
|
85
|
+
if (typeof parsed.session_id === 'string' && parsed.session_id.length > 0) {
|
|
86
|
+
return parsed.session_id;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
const matched = trimmed.match(/"session_id"\s*:\s*"([^"]+)"/u);
|
|
91
|
+
if (matched?.[1]) {
|
|
92
|
+
return matched[1];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
function substitute(template, sessionId, input) {
|
|
99
|
+
return template
|
|
100
|
+
.replaceAll('{sessionId}', sessionId ?? '')
|
|
101
|
+
.replaceAll('{workDir}', input.workDir)
|
|
102
|
+
.replaceAll('{runId}', input.runId)
|
|
103
|
+
.replaceAll('{runDir}', input.runDir)
|
|
104
|
+
.replaceAll('{promptFile}', input.promptFilePath);
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=claude-code-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-adapter.js","sourceRoot":"","sources":["../../src/adapters/claude-code-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export interface CodexAdapterOptions {
|
|
|
6
6
|
}
|
|
7
7
|
export declare class CodexAdapter implements ExternalAgentAdapter {
|
|
8
8
|
readonly name = "codex";
|
|
9
|
+
readonly instructionFileName = "AGENTS.md";
|
|
9
10
|
private readonly command;
|
|
10
11
|
private readonly execArgsTemplate;
|
|
11
12
|
private readonly resumeArgsTemplate;
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CodexAdapter = void 0;
|
|
4
4
|
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const optional_prop_1 = require("../optional-prop");
|
|
5
6
|
const DEFAULT_COMMAND = ['codex'];
|
|
6
7
|
const DEFAULT_EXEC_ARGS_TEMPLATE = ['exec', '--dangerously-bypass-approvals-and-sandbox', '--skip-git-repo-check', '-C', '{workDir}'];
|
|
7
8
|
const DEFAULT_RESUME_ARGS_TEMPLATE = ['exec', 'resume', '--dangerously-bypass-approvals-and-sandbox', '--skip-git-repo-check', '{sessionId}'];
|
|
8
9
|
class CodexAdapter {
|
|
9
10
|
name = 'codex';
|
|
11
|
+
instructionFileName = 'AGENTS.md';
|
|
10
12
|
command;
|
|
11
13
|
execArgsTemplate;
|
|
12
14
|
resumeArgsTemplate;
|
|
@@ -15,18 +17,19 @@ class CodexAdapter {
|
|
|
15
17
|
this.execArgsTemplate = options.execArgsTemplate && options.execArgsTemplate.length > 0 ? [...options.execArgsTemplate] : [...DEFAULT_EXEC_ARGS_TEMPLATE];
|
|
16
18
|
this.resumeArgsTemplate = options.resumeArgsTemplate && options.resumeArgsTemplate.length > 0 ? [...options.resumeArgsTemplate] : [...DEFAULT_RESUME_ARGS_TEMPLATE];
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
return {};
|
|
20
|
+
prepareSession(_input) {
|
|
21
|
+
return Promise.resolve({});
|
|
20
22
|
}
|
|
21
|
-
|
|
23
|
+
runTurn(input) {
|
|
22
24
|
const argsTemplate = input.session.adapterSessionId ? this.resumeArgsTemplate : this.execArgsTemplate;
|
|
23
25
|
const args = argsTemplate.map((part) => substitute(part, input.session.adapterSessionId, input)).concat(input.prompt);
|
|
24
|
-
const
|
|
26
|
+
const executable = this.command[0];
|
|
27
|
+
if (!executable) {
|
|
28
|
+
throw new Error('CodexAdapter command is empty.');
|
|
29
|
+
}
|
|
30
|
+
const child = (0, node_child_process_1.spawn)(executable, [...this.command.slice(1), ...args], {
|
|
25
31
|
cwd: input.workDir,
|
|
26
|
-
env:
|
|
27
|
-
...process.env,
|
|
28
|
-
YW_RUNTIME_LOG_SUBMISSIONS: '1',
|
|
29
|
-
},
|
|
32
|
+
env: buildAdapterProcessEnv(input),
|
|
30
33
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
31
34
|
});
|
|
32
35
|
let adapterSessionId = input.session.adapterSessionId;
|
|
@@ -44,24 +47,35 @@ class CodexAdapter {
|
|
|
44
47
|
child.stderr.on('data', (chunk) => {
|
|
45
48
|
void capture(chunk);
|
|
46
49
|
});
|
|
47
|
-
return {
|
|
50
|
+
return Promise.resolve({
|
|
48
51
|
completion: new Promise((resolve, reject) => {
|
|
49
52
|
child.once('error', reject);
|
|
50
53
|
child.once('exit', (exitCode, signal) => {
|
|
51
54
|
resolve({
|
|
52
55
|
exitCode,
|
|
53
56
|
signal,
|
|
54
|
-
adapterSessionId,
|
|
57
|
+
...(0, optional_prop_1.optionalProp)('adapterSessionId', adapterSessionId),
|
|
55
58
|
});
|
|
56
59
|
});
|
|
57
60
|
}),
|
|
58
|
-
cancel:
|
|
61
|
+
cancel: () => {
|
|
59
62
|
child.kill('SIGTERM');
|
|
63
|
+
return Promise.resolve();
|
|
60
64
|
},
|
|
61
|
-
};
|
|
65
|
+
});
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
exports.CodexAdapter = CodexAdapter;
|
|
69
|
+
function buildAdapterProcessEnv(input) {
|
|
70
|
+
return {
|
|
71
|
+
...process.env,
|
|
72
|
+
YW_RUNTIME_LOG_SUBMISSIONS: '1',
|
|
73
|
+
YW_RUN_ID: input.runId,
|
|
74
|
+
YW_WORK_DIR: input.workDir,
|
|
75
|
+
YW_PROMPT_FILE: input.promptFilePath,
|
|
76
|
+
YW_SESSION_FILE: `${input.workDir}/session.json`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
65
79
|
function substitute(template, sessionId, input) {
|
|
66
80
|
return template
|
|
67
81
|
.replaceAll('{sessionId}', sessionId ?? '')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../src/adapters/codex-adapter.ts"],"names":[],"mappings":";;;AAAA,2DAA2C;
|
|
1
|
+
{"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../src/adapters/codex-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { PlayerRuntimeSession } from '../runtime/runtime-types';
|
|
2
2
|
import { Logger } from '../types';
|
|
3
|
+
export declare const SUPPORTED_AGENT_ADAPTERS: readonly ["codex", "claude-code"];
|
|
4
|
+
export type SupportedAgentAdapterName = (typeof SUPPORTED_AGENT_ADAPTERS)[number];
|
|
3
5
|
export interface PrepareSessionInput {
|
|
4
6
|
session: PlayerRuntimeSession;
|
|
5
7
|
workDir: string;
|
|
@@ -28,6 +30,8 @@ export interface RunningTurn {
|
|
|
28
30
|
}
|
|
29
31
|
export interface ExternalAgentAdapter {
|
|
30
32
|
readonly name: string;
|
|
33
|
+
readonly instructionFileName: string;
|
|
31
34
|
prepareSession(input: PrepareSessionInput): Promise<PreparedSession>;
|
|
32
35
|
runTurn(input: RunTurnInput): Promise<RunningTurn>;
|
|
33
36
|
}
|
|
37
|
+
export declare function resolveInstructionFileNameForAdapter(adapter: string): 'AGENTS.md' | 'CLAUDE.md';
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SUPPORTED_AGENT_ADAPTERS = void 0;
|
|
4
|
+
exports.resolveInstructionFileNameForAdapter = resolveInstructionFileNameForAdapter;
|
|
5
|
+
exports.SUPPORTED_AGENT_ADAPTERS = ['codex', 'claude-code'];
|
|
6
|
+
function resolveInstructionFileNameForAdapter(adapter) {
|
|
7
|
+
switch (adapter) {
|
|
8
|
+
case 'codex':
|
|
9
|
+
return 'AGENTS.md';
|
|
10
|
+
case 'claude-code':
|
|
11
|
+
return 'CLAUDE.md';
|
|
12
|
+
default:
|
|
13
|
+
throw new Error(`Unsupported adapter for instruction file resolution: ${adapter}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
3
16
|
//# sourceMappingURL=external-agent-adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-agent-adapter.js","sourceRoot":"","sources":["../../src/adapters/external-agent-adapter.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"external-agent-adapter.js","sourceRoot":"","sources":["../../src/adapters/external-agent-adapter.ts"],"names":[],"mappings":";;;AA6CA,oFASC;AAnDY,QAAA,wBAAwB,GAAG,CAAC,OAAO,EAAE,aAAa,CAAU,CAAC;AA0C1E,SAAgB,oCAAoC,CAAC,OAAe;IAChE,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,OAAO;YACR,OAAO,WAAW,CAAC;QACvB,KAAK,aAAa;YACd,OAAO,WAAW,CAAC;QACvB;YACI,MAAM,IAAI,KAAK,CAAC,wDAAwD,OAAO,EAAE,CAAC,CAAC;IAC3F,CAAC;AACL,CAAC"}
|
|
@@ -5,8 +5,22 @@ exports.runActionSubmit = runActionSubmit;
|
|
|
5
5
|
exports.submitActionForCurrentRun = submitActionForCurrentRun;
|
|
6
6
|
const node_crypto_1 = require("node:crypto");
|
|
7
7
|
const promises_1 = require("node:fs/promises");
|
|
8
|
+
const common_1 = require("@your-world/common");
|
|
9
|
+
const optional_prop_1 = require("../optional-prop");
|
|
8
10
|
const session_store_1 = require("../runtime/session-store");
|
|
9
11
|
const shared_1 = require("./shared");
|
|
12
|
+
function normalizeAction(action) {
|
|
13
|
+
if (!(0, common_1.isWorldVerb)(action.verb)) {
|
|
14
|
+
throw new shared_1.CliError('INVALID_ACTION', `Unsupported verb: ${action.verb}`);
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
verb: action.verb,
|
|
18
|
+
...(0, optional_prop_1.optionalProp)('actionId', action.actionId),
|
|
19
|
+
...(0, optional_prop_1.optionalProp)('target', action.target),
|
|
20
|
+
...(0, optional_prop_1.optionalProp)('params', action.params),
|
|
21
|
+
...(0, optional_prop_1.optionalProp)('reason', action.reason),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
10
24
|
async function runAction(args) {
|
|
11
25
|
const subcommand = args.positionals[0];
|
|
12
26
|
if (subcommand === 'submit') {
|
|
@@ -61,12 +75,12 @@ async function submitActionForCurrentRun(options) {
|
|
|
61
75
|
}
|
|
62
76
|
const expectedStartTick = session.latestObservedTick + 1;
|
|
63
77
|
if (session.lastSubmittedStartTick !== undefined && session.lastSubmittedStartTick === expectedStartTick) {
|
|
64
|
-
throw new shared_1.CliError('START_TICK_ALREADY_SUBMITTED', `An action for startTick ${expectedStartTick} was already submitted locally.`);
|
|
78
|
+
throw new shared_1.CliError('START_TICK_ALREADY_SUBMITTED', `An action for startTick ${String(expectedStartTick)} was already submitted locally.`);
|
|
65
79
|
}
|
|
66
|
-
const action = {
|
|
80
|
+
const action = normalizeAction({
|
|
67
81
|
...options.action,
|
|
68
82
|
actionId: options.action.actionId ?? `run-${options.runId}-${(0, node_crypto_1.randomUUID)()}`,
|
|
69
|
-
};
|
|
83
|
+
});
|
|
70
84
|
const actImpl = options.actImpl;
|
|
71
85
|
if (!actImpl) {
|
|
72
86
|
throw new shared_1.CliError('INVALID_STATE', 'Missing act implementation.');
|
|
@@ -96,8 +110,8 @@ async function submitActionForCurrentRun(options) {
|
|
|
96
110
|
...session,
|
|
97
111
|
runState: 'submitted',
|
|
98
112
|
lastSubmittedContextTick: session.activeContextTick,
|
|
99
|
-
lastSubmittedStartTick
|
|
100
|
-
lastActionId
|
|
113
|
+
...(0, optional_prop_1.optionalProp)('lastSubmittedStartTick', response.startTick),
|
|
114
|
+
...(0, optional_prop_1.optionalProp)('lastActionId', action.actionId),
|
|
101
115
|
});
|
|
102
116
|
return {
|
|
103
117
|
sessionAgentId: session.agentId,
|
|
@@ -127,38 +141,57 @@ async function runActionLast(args) {
|
|
|
127
141
|
async function parseActionInput(args) {
|
|
128
142
|
const jsonValue = (0, shared_1.getOption)(args, 'json');
|
|
129
143
|
if (jsonValue) {
|
|
130
|
-
return
|
|
144
|
+
return parseStructuredActionInput(parseCliJson(jsonValue, '--json'), '--json');
|
|
131
145
|
}
|
|
132
146
|
const filePath = (0, shared_1.getOption)(args, 'file');
|
|
133
147
|
if (filePath) {
|
|
134
148
|
const raw = await (0, promises_1.readFile)(filePath, 'utf8');
|
|
135
|
-
return
|
|
149
|
+
return parseStructuredActionInput(parseCliJson(raw, '--file'), '--file');
|
|
136
150
|
}
|
|
137
151
|
const verb = (0, shared_1.getOption)(args, 'verb');
|
|
138
152
|
if (!verb) {
|
|
139
153
|
throw new shared_1.CliError('MISSING_ACTION', 'Provide --json, --file, or --verb.');
|
|
140
154
|
}
|
|
141
|
-
return {
|
|
155
|
+
return normalizeAction({
|
|
142
156
|
verb,
|
|
143
157
|
...((0, shared_1.getOption)(args, 'target-json')
|
|
144
158
|
? {
|
|
145
159
|
target: parseTargetJson((0, shared_1.getOption)(args, 'target-json')),
|
|
146
160
|
}
|
|
147
161
|
: {}),
|
|
148
|
-
...((0, shared_1.getOption)(args, 'params-json')
|
|
162
|
+
...((0, shared_1.getOption)(args, 'params-json')
|
|
163
|
+
? {
|
|
164
|
+
params: parseParamsJson((0, shared_1.getOption)(args, 'params-json')),
|
|
165
|
+
}
|
|
166
|
+
: {}),
|
|
149
167
|
...((0, shared_1.getOption)(args, 'reason') ? { reason: (0, shared_1.getOption)(args, 'reason') } : {}),
|
|
150
|
-
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function parseStructuredActionInput(value, label) {
|
|
171
|
+
try {
|
|
172
|
+
return normalizeAction((0, common_1.parseActionInputValue)(value, label));
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
throw new shared_1.CliError('INVALID_ACTION', error instanceof Error ? error.message : String(error));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function parseParamsJson(raw) {
|
|
179
|
+
const parsed = parseCliJson(raw, '--params-json');
|
|
180
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
181
|
+
throw new shared_1.CliError('INVALID_ACTION', '--params-json must decode to a JSON object.');
|
|
182
|
+
}
|
|
183
|
+
return parsed;
|
|
151
184
|
}
|
|
152
|
-
function
|
|
185
|
+
function parseCliJson(raw, label) {
|
|
153
186
|
try {
|
|
154
|
-
return
|
|
187
|
+
return (0, common_1.parseJsonValue)(raw, label);
|
|
155
188
|
}
|
|
156
189
|
catch (error) {
|
|
157
|
-
throw new shared_1.CliError('INVALID_JSON',
|
|
190
|
+
throw new shared_1.CliError('INVALID_JSON', error instanceof Error ? error.message : String(error));
|
|
158
191
|
}
|
|
159
192
|
}
|
|
160
193
|
function parseTargetJson(raw) {
|
|
161
|
-
const parsed =
|
|
194
|
+
const parsed = parseCliJson(raw, '--target-json');
|
|
162
195
|
if (typeof parsed === 'string' || typeof parsed === 'number') {
|
|
163
196
|
return parsed;
|
|
164
197
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-submit.js","sourceRoot":"","sources":["../../src/cli/action-submit.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"action-submit.js","sourceRoot":"","sources":["../../src/cli/action-submit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SupportedAgentAdapterName } from '../adapters/external-agent-adapter';
|
|
2
|
+
export interface DetectedAgentAdapter {
|
|
3
|
+
adapter: SupportedAgentAdapterName;
|
|
4
|
+
command: string;
|
|
5
|
+
version?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function detectInstalledAgentAdapters(): Promise<DetectedAgentAdapter[]>;
|
|
8
|
+
export declare function chooseAgentAdapterInteractively(candidates: readonly DetectedAgentAdapter[]): Promise<SupportedAgentAdapterName>;
|
|
9
|
+
export declare function validateAdapterExecutable(adapter: SupportedAgentAdapterName, command: string[]): Promise<void>;
|
|
10
|
+
export declare function isInteractiveTerminal(): boolean;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.detectInstalledAgentAdapters = detectInstalledAgentAdapters;
|
|
7
|
+
exports.chooseAgentAdapterInteractively = chooseAgentAdapterInteractively;
|
|
8
|
+
exports.validateAdapterExecutable = validateAdapterExecutable;
|
|
9
|
+
exports.isInteractiveTerminal = isInteractiveTerminal;
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
12
|
+
const promises_1 = require("node:readline/promises");
|
|
13
|
+
const node_util_1 = require("node:util");
|
|
14
|
+
const shared_1 = require("./shared");
|
|
15
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
16
|
+
async function detectInstalledAgentAdapters() {
|
|
17
|
+
const detected = [];
|
|
18
|
+
const codexVersion = await readVersionOutput(['codex']);
|
|
19
|
+
if (codexVersion !== null) {
|
|
20
|
+
detected.push({
|
|
21
|
+
adapter: 'codex',
|
|
22
|
+
command: 'codex',
|
|
23
|
+
...optionalVersion(codexVersion),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const claudeVersion = await readVersionOutput(['claude']);
|
|
27
|
+
if (claudeVersion !== null && /Claude Code/u.test(claudeVersion)) {
|
|
28
|
+
detected.push({
|
|
29
|
+
adapter: 'claude-code',
|
|
30
|
+
command: 'claude',
|
|
31
|
+
...optionalVersion(claudeVersion),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return detected;
|
|
35
|
+
}
|
|
36
|
+
async function chooseAgentAdapterInteractively(candidates) {
|
|
37
|
+
if (candidates.length === 0) {
|
|
38
|
+
throw new shared_1.CliError('NO_SUPPORTED_ADAPTER', 'No supported agent CLI was detected.');
|
|
39
|
+
}
|
|
40
|
+
if (!isInteractiveTerminal()) {
|
|
41
|
+
throw new shared_1.CliError('AMBIGUOUS_ADAPTER', 'Multiple supported agent CLIs were detected. Run this command in a TTY or pass --adapter explicitly.');
|
|
42
|
+
}
|
|
43
|
+
node_process_1.default.stderr.write(['Multiple supported agent CLIs were detected:', '', ...candidates.map((candidate, index) => `${String(index + 1)}. ${candidate.adapter}`), '', `Choose an adapter [1-${String(candidates.length)}]: `].join('\n'));
|
|
44
|
+
const rl = (0, promises_1.createInterface)({
|
|
45
|
+
input: node_process_1.default.stdin,
|
|
46
|
+
output: node_process_1.default.stderr,
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
for (;;) {
|
|
50
|
+
const answer = (await rl.question('')).trim();
|
|
51
|
+
if (answer.length === 0) {
|
|
52
|
+
return candidates[0]?.adapter ?? 'codex';
|
|
53
|
+
}
|
|
54
|
+
const selectedIndex = Number(answer);
|
|
55
|
+
if (Number.isInteger(selectedIndex) && selectedIndex >= 1 && selectedIndex <= candidates.length) {
|
|
56
|
+
const selected = candidates[selectedIndex - 1];
|
|
57
|
+
if (selected) {
|
|
58
|
+
return selected.adapter;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
node_process_1.default.stderr.write(`Invalid selection. Choose a number between 1 and ${String(candidates.length)}: `);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
rl.close();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function validateAdapterExecutable(adapter, command) {
|
|
69
|
+
const versionOutput = await readVersionOutput(command);
|
|
70
|
+
if (versionOutput === null) {
|
|
71
|
+
throw new shared_1.CliError('ADAPTER_NOT_INSTALLED', `Adapter "${adapter}" is not available on this machine.`);
|
|
72
|
+
}
|
|
73
|
+
if (adapter === 'claude-code' && command.length === 1 && !/Claude Code/u.test(versionOutput)) {
|
|
74
|
+
throw new shared_1.CliError('ADAPTER_NOT_INSTALLED', 'The detected "claude" command is not Claude Code.');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function isInteractiveTerminal() {
|
|
78
|
+
return node_process_1.default.stdin.isTTY && node_process_1.default.stderr.isTTY;
|
|
79
|
+
}
|
|
80
|
+
async function readVersionOutput(command) {
|
|
81
|
+
const executable = command[0];
|
|
82
|
+
if (!executable) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
const result = await execFileAsync(executable, [...command.slice(1), '--version'], {
|
|
87
|
+
env: node_process_1.default.env,
|
|
88
|
+
timeout: 5_000,
|
|
89
|
+
maxBuffer: 1024 * 1024,
|
|
90
|
+
windowsHide: true,
|
|
91
|
+
});
|
|
92
|
+
return `${result.stdout}${result.stderr}`.trim();
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (isMissingExecutableError(error)) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const stdout = isExecFileResult(error) ? error.stdout : '';
|
|
99
|
+
const stderr = isExecFileResult(error) ? error.stderr : '';
|
|
100
|
+
const output = [stdout ?? '', stderr ?? ''].join('').trim();
|
|
101
|
+
return output.length > 0 ? output : null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function isMissingExecutableError(error) {
|
|
105
|
+
return isRecord(error) && error.code === 'ENOENT';
|
|
106
|
+
}
|
|
107
|
+
function isExecFileResult(error) {
|
|
108
|
+
return isRecord(error);
|
|
109
|
+
}
|
|
110
|
+
function isRecord(value) {
|
|
111
|
+
return typeof value === 'object' && value !== null;
|
|
112
|
+
}
|
|
113
|
+
function optionalVersion(version) {
|
|
114
|
+
return version.length > 0 ? { version } : {};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=agent-adapter-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-adapter-discovery.js","sourceRoot":"","sources":["../../src/cli/agent-adapter-discovery.ts"],"names":[],"mappings":"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"}
|