@jjlabsio/claude-crew 0.1.47 → 0.1.48
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/data/provider-catalog.json +1 -1
- package/package.json +1 -1
- package/scripts/crew-codex/lib/codex.mjs +12 -2
- package/scripts/crew-codex-companion.mjs +8 -3
- package/scripts/lib/dispatch.mjs +4 -0
- package/scripts/lib/resolve.mjs +2 -0
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"name": "claude-crew",
|
|
12
12
|
"source": "./",
|
|
13
13
|
"description": "오케스트레이터 + PM, 플래너, 개발, QA, 마케팅 에이전트 팀으로 단일 제품의 개발과 마케팅을 통합 관리",
|
|
14
|
-
"version": "0.1.
|
|
14
|
+
"version": "0.1.48",
|
|
15
15
|
"author": {
|
|
16
16
|
"name": "Jaejin Song",
|
|
17
17
|
"email": "wowlxx28@gmail.com"
|
|
@@ -28,5 +28,5 @@
|
|
|
28
28
|
"category": "workflow"
|
|
29
29
|
}
|
|
30
30
|
],
|
|
31
|
-
"version": "0.1.
|
|
31
|
+
"version": "0.1.48"
|
|
32
32
|
}
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"explorer": { "codex_sandbox": "read-only" },
|
|
45
45
|
"researcher": { "codex_sandbox": "read-only" },
|
|
46
46
|
"qa": { "codex_sandbox": "read-only" },
|
|
47
|
-
"dev": { "codex_sandbox": "workspace-write" },
|
|
47
|
+
"dev": { "codex_sandbox": "workspace-write", "codex_network_access": true },
|
|
48
48
|
"code-reviewer": { "codex_sandbox": "read-only" }
|
|
49
49
|
}
|
|
50
50
|
}
|
package/package.json
CHANGED
|
@@ -56,7 +56,7 @@ function cleanCodexStderr(stderr) {
|
|
|
56
56
|
|
|
57
57
|
/** @returns {ThreadStartParams} */
|
|
58
58
|
function buildThreadParams(cwd, options = {}) {
|
|
59
|
-
|
|
59
|
+
const params = {
|
|
60
60
|
cwd,
|
|
61
61
|
model: options.model ?? null,
|
|
62
62
|
approvalPolicy: options.approvalPolicy ?? "never",
|
|
@@ -65,17 +65,25 @@ function buildThreadParams(cwd, options = {}) {
|
|
|
65
65
|
ephemeral: options.ephemeral ?? true,
|
|
66
66
|
experimentalRawEvents: false
|
|
67
67
|
};
|
|
68
|
+
if (options.networkAccess) {
|
|
69
|
+
params.networkAccess = true;
|
|
70
|
+
}
|
|
71
|
+
return params;
|
|
68
72
|
}
|
|
69
73
|
|
|
70
74
|
/** @returns {ThreadResumeParams} */
|
|
71
75
|
function buildResumeParams(threadId, cwd, options = {}) {
|
|
72
|
-
|
|
76
|
+
const params = {
|
|
73
77
|
threadId,
|
|
74
78
|
cwd,
|
|
75
79
|
model: options.model ?? null,
|
|
76
80
|
approvalPolicy: options.approvalPolicy ?? "never",
|
|
77
81
|
sandbox: options.sandbox ?? "read-only"
|
|
78
82
|
};
|
|
83
|
+
if (options.networkAccess) {
|
|
84
|
+
params.networkAccess = true;
|
|
85
|
+
}
|
|
86
|
+
return params;
|
|
79
87
|
}
|
|
80
88
|
|
|
81
89
|
/** @returns {UserInput[]} */
|
|
@@ -977,6 +985,7 @@ export async function runAppServerTurn(cwd, options = {}) {
|
|
|
977
985
|
const response = await resumeThread(client, options.resumeThreadId, cwd, {
|
|
978
986
|
model: options.model,
|
|
979
987
|
sandbox: options.sandbox,
|
|
988
|
+
networkAccess: options.networkAccess,
|
|
980
989
|
ephemeral: false
|
|
981
990
|
});
|
|
982
991
|
threadId = response.thread.id;
|
|
@@ -985,6 +994,7 @@ export async function runAppServerTurn(cwd, options = {}) {
|
|
|
985
994
|
const response = await startThread(client, cwd, {
|
|
986
995
|
model: options.model,
|
|
987
996
|
sandbox: options.sandbox,
|
|
997
|
+
networkAccess: options.networkAccess,
|
|
988
998
|
ephemeral: options.persistThread ? false : true,
|
|
989
999
|
threadName: options.persistThread ? options.threadName : options.threadName ?? null
|
|
990
1000
|
});
|
|
@@ -73,7 +73,7 @@ function printUsage() {
|
|
|
73
73
|
console.log(
|
|
74
74
|
[
|
|
75
75
|
"Usage:",
|
|
76
|
-
" node scripts/crew-codex-companion.mjs task [--background] [--write] [--expect-crew-result] [--resume-last|--resume|--fresh] [--model <model|spark>] [--effort <none|minimal|low|medium|high|xhigh>] [prompt]",
|
|
76
|
+
" node scripts/crew-codex-companion.mjs task [--background] [--write] [--network-access] [--expect-crew-result] [--resume-last|--resume|--fresh] [--model <model|spark>] [--effort <none|minimal|low|medium|high|xhigh>] [prompt]",
|
|
77
77
|
" node scripts/crew-codex-companion.mjs status [job-id] [--all] [--json]",
|
|
78
78
|
" node scripts/crew-codex-companion.mjs result [job-id] [--json]",
|
|
79
79
|
" node scripts/crew-codex-companion.mjs cancel [job-id] [--json]"
|
|
@@ -341,6 +341,7 @@ async function executeTaskRun(request) {
|
|
|
341
341
|
model: request.model,
|
|
342
342
|
effort: request.effort,
|
|
343
343
|
sandbox: request.write ? "workspace-write" : "read-only",
|
|
344
|
+
networkAccess: Boolean(request.networkAccess),
|
|
344
345
|
onProgress: request.onProgress,
|
|
345
346
|
persistThread: true,
|
|
346
347
|
threadName: resumeThreadId ? null : buildPersistentTaskThreadName(request.prompt || DEFAULT_CONTINUE_PROMPT)
|
|
@@ -455,13 +456,14 @@ function buildTaskJob(workspaceRoot, taskMetadata, write) {
|
|
|
455
456
|
});
|
|
456
457
|
}
|
|
457
458
|
|
|
458
|
-
function buildTaskRequest({ cwd, model, effort, prompt, write, resumeLast, expectCrewResult, jobId }) {
|
|
459
|
+
function buildTaskRequest({ cwd, model, effort, prompt, write, networkAccess, resumeLast, expectCrewResult, jobId }) {
|
|
459
460
|
return {
|
|
460
461
|
cwd,
|
|
461
462
|
model,
|
|
462
463
|
effort,
|
|
463
464
|
prompt,
|
|
464
465
|
write,
|
|
466
|
+
networkAccess,
|
|
465
467
|
resumeLast,
|
|
466
468
|
expectCrewResult,
|
|
467
469
|
jobId
|
|
@@ -591,7 +593,7 @@ function enqueueBackgroundTask(cwd, job, request) {
|
|
|
591
593
|
async function handleTask(argv) {
|
|
592
594
|
const { options, positionals } = parseCommandInput(argv, {
|
|
593
595
|
valueOptions: ["model", "effort", "cwd", "prompt-file"],
|
|
594
|
-
booleanOptions: ["json", "write", "expect-crew-result", "resume-last", "resume", "fresh", "background"],
|
|
596
|
+
booleanOptions: ["json", "write", "network-access", "expect-crew-result", "resume-last", "resume", "fresh", "background"],
|
|
595
597
|
aliasMap: {
|
|
596
598
|
m: "model"
|
|
597
599
|
}
|
|
@@ -609,6 +611,7 @@ async function handleTask(argv) {
|
|
|
609
611
|
throw new Error("Choose either --resume/--resume-last or --fresh.");
|
|
610
612
|
}
|
|
611
613
|
const write = Boolean(options.write);
|
|
614
|
+
const networkAccess = Boolean(options["network-access"]);
|
|
612
615
|
const expectCrewResult = Boolean(options["expect-crew-result"]);
|
|
613
616
|
const taskMetadata = buildTaskRunMetadata({
|
|
614
617
|
prompt,
|
|
@@ -626,6 +629,7 @@ async function handleTask(argv) {
|
|
|
626
629
|
effort,
|
|
627
630
|
prompt,
|
|
628
631
|
write,
|
|
632
|
+
networkAccess,
|
|
629
633
|
resumeLast,
|
|
630
634
|
expectCrewResult,
|
|
631
635
|
jobId: job.id
|
|
@@ -645,6 +649,7 @@ async function handleTask(argv) {
|
|
|
645
649
|
effort,
|
|
646
650
|
prompt,
|
|
647
651
|
write,
|
|
652
|
+
networkAccess,
|
|
648
653
|
resumeLast,
|
|
649
654
|
expectCrewResult,
|
|
650
655
|
jobId: job.id,
|
package/scripts/lib/dispatch.mjs
CHANGED
|
@@ -264,6 +264,10 @@ function buildTaskArgs(input, promptFile) {
|
|
|
264
264
|
args.push("--write");
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
if (input.resolved?.codex_network_access) {
|
|
268
|
+
args.push("--network-access");
|
|
269
|
+
}
|
|
270
|
+
|
|
267
271
|
if (input.resolved?.model) {
|
|
268
272
|
args.push("--model", input.resolved.model);
|
|
269
273
|
}
|
package/scripts/lib/resolve.mjs
CHANGED
|
@@ -23,6 +23,7 @@ export function resolveRole(input) {
|
|
|
23
23
|
if (!["read-only", "workspace-write"].includes(codexSandbox)) {
|
|
24
24
|
throw new Error(`Missing codex_sandbox for role ${role}`);
|
|
25
25
|
}
|
|
26
|
+
const codexNetworkAccess = catalog?.agent_runtime?.[role]?.codex_network_access === true;
|
|
26
27
|
|
|
27
28
|
const warnings = [];
|
|
28
29
|
const workspaceAccess = contract?.capabilities?.workspaceAccess;
|
|
@@ -38,6 +39,7 @@ export function resolveRole(input) {
|
|
|
38
39
|
model,
|
|
39
40
|
reasoning: provider === "codex" ? defaults.reasoning ?? null : null,
|
|
40
41
|
codex_sandbox: codexSandbox,
|
|
42
|
+
codex_network_access: codexNetworkAccess,
|
|
41
43
|
contract,
|
|
42
44
|
dispatch: {
|
|
43
45
|
path: provider === "codex" ? "codex" : "claude",
|