@super-one/cli 0.50.1-alpha → 0.50.2-alpha
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/MANIFEST.json +2 -2
- package/lib/cli.mjs +208 -17
- package/package.json +1 -1
package/MANIFEST.json
CHANGED
package/lib/cli.mjs
CHANGED
|
@@ -9945,6 +9945,40 @@ var init_resolve_sdk_binary = __esm({
|
|
|
9945
9945
|
}
|
|
9946
9946
|
});
|
|
9947
9947
|
|
|
9948
|
+
// ../../packages/claude/src/root-permission-guard.ts
|
|
9949
|
+
function isRootWithoutSandboxOptIn(opts) {
|
|
9950
|
+
if (opts.uid !== 0) return false;
|
|
9951
|
+
const env = opts.env ?? {};
|
|
9952
|
+
if (env.IS_SANDBOX === "1") return false;
|
|
9953
|
+
if (env.CLAUDE_CODE_BUBBLEWRAP) return false;
|
|
9954
|
+
return true;
|
|
9955
|
+
}
|
|
9956
|
+
function applyRootPermissionGuard(input) {
|
|
9957
|
+
const mode = input.permissionMode?.trim() ? input.permissionMode.trim() : void 0;
|
|
9958
|
+
if (!isRootWithoutSandboxOptIn(input)) {
|
|
9959
|
+
return {
|
|
9960
|
+
permissionMode: mode,
|
|
9961
|
+
allowDangerouslySkipPermissions: true,
|
|
9962
|
+
applied: false,
|
|
9963
|
+
downgradedFrom: null
|
|
9964
|
+
};
|
|
9965
|
+
}
|
|
9966
|
+
const downgrade = mode === "bypassPermissions";
|
|
9967
|
+
return {
|
|
9968
|
+
permissionMode: downgrade ? ROOT_SAFE_PERMISSION_MODE : mode,
|
|
9969
|
+
allowDangerouslySkipPermissions: false,
|
|
9970
|
+
applied: true,
|
|
9971
|
+
downgradedFrom: downgrade ? mode : null
|
|
9972
|
+
};
|
|
9973
|
+
}
|
|
9974
|
+
var ROOT_SAFE_PERMISSION_MODE;
|
|
9975
|
+
var init_root_permission_guard = __esm({
|
|
9976
|
+
"../../packages/claude/src/root-permission-guard.ts"() {
|
|
9977
|
+
"use strict";
|
|
9978
|
+
ROOT_SAFE_PERMISSION_MODE = "acceptEdits";
|
|
9979
|
+
}
|
|
9980
|
+
});
|
|
9981
|
+
|
|
9948
9982
|
// ../../packages/claude/src/run-sdk-turn.ts
|
|
9949
9983
|
import { query as sdkQuery } from "@anthropic-ai/claude-agent-sdk";
|
|
9950
9984
|
var init_run_sdk_turn = __esm({
|
|
@@ -9955,6 +9989,7 @@ var init_run_sdk_turn = __esm({
|
|
|
9955
9989
|
init_map_sdk_message();
|
|
9956
9990
|
init_agent_event_mapper2();
|
|
9957
9991
|
init_resolve_sdk_binary();
|
|
9992
|
+
init_root_permission_guard();
|
|
9958
9993
|
}
|
|
9959
9994
|
});
|
|
9960
9995
|
|
|
@@ -10103,6 +10138,11 @@ function buildLiveOptions(opts, onPermission, onQuestion, onPlan, signal, timing
|
|
|
10103
10138
|
autoAllowBashIfSandboxed: opts.sandboxMode === "auto",
|
|
10104
10139
|
failIfUnavailable: false
|
|
10105
10140
|
} : void 0;
|
|
10141
|
+
const permissions = applyRootPermissionGuard({
|
|
10142
|
+
permissionMode: opts.permissionMode,
|
|
10143
|
+
uid: opts.uid === void 0 ? process.getuid?.() : opts.uid,
|
|
10144
|
+
env: env ?? process.env
|
|
10145
|
+
});
|
|
10106
10146
|
const base = {
|
|
10107
10147
|
cwd: opts.cwd,
|
|
10108
10148
|
...binaryPath ? { pathToClaudeCodeExecutable: binaryPath } : {},
|
|
@@ -10115,8 +10155,8 @@ function buildLiveOptions(opts, onPermission, onQuestion, onPlan, signal, timing
|
|
|
10115
10155
|
enableFileCheckpointing: true,
|
|
10116
10156
|
agentProgressSummaries: true,
|
|
10117
10157
|
extraArgs: { "replay-user-messages": null },
|
|
10118
|
-
permissionMode:
|
|
10119
|
-
allowDangerouslySkipPermissions:
|
|
10158
|
+
permissionMode: permissions.permissionMode || "default",
|
|
10159
|
+
allowDangerouslySkipPermissions: permissions.allowDangerouslySkipPermissions,
|
|
10120
10160
|
canUseTool,
|
|
10121
10161
|
abortController,
|
|
10122
10162
|
settingSources: ["user", "project", "local"],
|
|
@@ -10156,6 +10196,7 @@ var init_claude_live_session = __esm({
|
|
|
10156
10196
|
init_agent_event_mapper2();
|
|
10157
10197
|
init_map_sdk_message();
|
|
10158
10198
|
init_resolve_sdk_binary();
|
|
10199
|
+
init_root_permission_guard();
|
|
10159
10200
|
init_superone_system_prompt();
|
|
10160
10201
|
init_superone_host_owned_tools();
|
|
10161
10202
|
ClaudeLiveSession = class _ClaudeLiveSession {
|
|
@@ -10393,6 +10434,90 @@ var init_claude_live_session = __esm({
|
|
|
10393
10434
|
}
|
|
10394
10435
|
});
|
|
10395
10436
|
|
|
10437
|
+
// ../../packages/claude/src/fetch-models.ts
|
|
10438
|
+
import { query as sdkQuery3 } from "@anthropic-ai/claude-agent-sdk";
|
|
10439
|
+
function extractModelName(descPrefix) {
|
|
10440
|
+
const match = descPrefix.match(MODEL_NAME_RE);
|
|
10441
|
+
if (!match) return null;
|
|
10442
|
+
return match[2] ? `${match[1]} ${match[2]}` : match[1];
|
|
10443
|
+
}
|
|
10444
|
+
function mapClaudeModelInfo(m2) {
|
|
10445
|
+
const raw = m2.description ?? "";
|
|
10446
|
+
const sepIdx = raw.indexOf("\xB7");
|
|
10447
|
+
const descPrefix = sepIdx !== -1 ? raw.slice(0, sepIdx).trim() : "";
|
|
10448
|
+
const name = extractModelName(descPrefix) ?? m2.displayName;
|
|
10449
|
+
const base = { id: m2.value, name, description: raw };
|
|
10450
|
+
if (m2.resolvedModel) base.resolvedModel = m2.resolvedModel;
|
|
10451
|
+
if (m2.supportsEffort) base.supportsEffort = true;
|
|
10452
|
+
if (m2.supportedEffortLevels?.length) {
|
|
10453
|
+
base.supportedEffortLevels = m2.supportedEffortLevels;
|
|
10454
|
+
}
|
|
10455
|
+
if (m2.supportsAdaptiveThinking) base.supportsAdaptiveThinking = true;
|
|
10456
|
+
if (m2.supportsFastMode) base.supportsFastMode = true;
|
|
10457
|
+
if (m2.supportsAutoMode) base.supportsAutoMode = true;
|
|
10458
|
+
return base;
|
|
10459
|
+
}
|
|
10460
|
+
async function fetchClaudeModels(opts) {
|
|
10461
|
+
const binaryPath = opts.binaryPath ?? resolveSdkClaudeBinary();
|
|
10462
|
+
const permissions = applyRootPermissionGuard({
|
|
10463
|
+
permissionMode: "default",
|
|
10464
|
+
uid: opts.uid === void 0 ? process.getuid?.() : opts.uid,
|
|
10465
|
+
env: opts.env ?? process.env
|
|
10466
|
+
});
|
|
10467
|
+
const options = {
|
|
10468
|
+
cwd: opts.cwd,
|
|
10469
|
+
...binaryPath ? { pathToClaudeCodeExecutable: binaryPath } : {},
|
|
10470
|
+
maxTurns: 0,
|
|
10471
|
+
permissionMode: permissions.permissionMode,
|
|
10472
|
+
persistSession: false,
|
|
10473
|
+
...opts.env ? { env: opts.env } : {}
|
|
10474
|
+
};
|
|
10475
|
+
let q;
|
|
10476
|
+
try {
|
|
10477
|
+
q = (opts.queryFn ?? sdkQuery3)({ prompt: "hi", options });
|
|
10478
|
+
const models = await withTimeout(
|
|
10479
|
+
(async () => {
|
|
10480
|
+
await q.initializationResult();
|
|
10481
|
+
return await q.supportedModels();
|
|
10482
|
+
})(),
|
|
10483
|
+
opts.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS
|
|
10484
|
+
);
|
|
10485
|
+
return models.map(mapClaudeModelInfo);
|
|
10486
|
+
} catch {
|
|
10487
|
+
return [];
|
|
10488
|
+
} finally {
|
|
10489
|
+
try {
|
|
10490
|
+
q?.close();
|
|
10491
|
+
} catch {
|
|
10492
|
+
}
|
|
10493
|
+
}
|
|
10494
|
+
}
|
|
10495
|
+
function withTimeout(promise2, ms) {
|
|
10496
|
+
return new Promise((resolve13, reject) => {
|
|
10497
|
+
const timer = setTimeout(() => reject(new Error(`claude model probe timed out after ${ms}ms`)), ms);
|
|
10498
|
+
promise2.then(
|
|
10499
|
+
(v2) => {
|
|
10500
|
+
clearTimeout(timer);
|
|
10501
|
+
resolve13(v2);
|
|
10502
|
+
},
|
|
10503
|
+
(e) => {
|
|
10504
|
+
clearTimeout(timer);
|
|
10505
|
+
reject(e);
|
|
10506
|
+
}
|
|
10507
|
+
);
|
|
10508
|
+
});
|
|
10509
|
+
}
|
|
10510
|
+
var MODEL_NAME_RE, DEFAULT_PROBE_TIMEOUT_MS;
|
|
10511
|
+
var init_fetch_models = __esm({
|
|
10512
|
+
"../../packages/claude/src/fetch-models.ts"() {
|
|
10513
|
+
"use strict";
|
|
10514
|
+
init_resolve_sdk_binary();
|
|
10515
|
+
init_root_permission_guard();
|
|
10516
|
+
MODEL_NAME_RE = /^(\w+ [\d.]+)(?:\s+with\s+(\w+)\s+context)?/;
|
|
10517
|
+
DEFAULT_PROBE_TIMEOUT_MS = 2e4;
|
|
10518
|
+
}
|
|
10519
|
+
});
|
|
10520
|
+
|
|
10396
10521
|
// ../../packages/claude/src/fork-session.ts
|
|
10397
10522
|
import { existsSync as existsSync7, mkdirSync as mkdirSync4, readdirSync, realpathSync, renameSync } from "node:fs";
|
|
10398
10523
|
import { homedir as homedir2 } from "node:os";
|
|
@@ -10460,6 +10585,8 @@ var init_src2 = __esm({
|
|
|
10460
10585
|
init_claude_live_session();
|
|
10461
10586
|
init_agent_event_mapper2();
|
|
10462
10587
|
init_resolve_sdk_binary();
|
|
10588
|
+
init_fetch_models();
|
|
10589
|
+
init_root_permission_guard();
|
|
10463
10590
|
init_map_sdk_message();
|
|
10464
10591
|
init_fork_session();
|
|
10465
10592
|
}
|
|
@@ -14019,8 +14146,19 @@ async function collectHarnessResources(input) {
|
|
|
14019
14146
|
opencode: emptyOpenCode(),
|
|
14020
14147
|
acp: emptyAcp()
|
|
14021
14148
|
};
|
|
14149
|
+
const resolveModels = async (harnessId) => {
|
|
14150
|
+
const listed = input.listModels(harnessId, input.apiProviderId);
|
|
14151
|
+
if (Array.isArray(listed) && listed.length > 0) return listed;
|
|
14152
|
+
if (!input.probeModels) return [];
|
|
14153
|
+
try {
|
|
14154
|
+
const probed = await input.probeModels(harnessId);
|
|
14155
|
+
return Array.isArray(probed) ? probed : [];
|
|
14156
|
+
} catch {
|
|
14157
|
+
return [];
|
|
14158
|
+
}
|
|
14159
|
+
};
|
|
14022
14160
|
if (want("claude")) {
|
|
14023
|
-
const models =
|
|
14161
|
+
const models = await resolveModels("claude");
|
|
14024
14162
|
let account = {};
|
|
14025
14163
|
if (input.probeAccount) {
|
|
14026
14164
|
try {
|
|
@@ -14056,14 +14194,14 @@ async function collectHarnessResources(input) {
|
|
|
14056
14194
|
};
|
|
14057
14195
|
}
|
|
14058
14196
|
if (want("codex")) {
|
|
14059
|
-
const models =
|
|
14197
|
+
const models = await resolveModels("codex");
|
|
14060
14198
|
bundle.codex = {
|
|
14061
14199
|
models: Array.isArray(models) ? models : [],
|
|
14062
14200
|
prompts: discoverCodexUserPrompts({ homeDir })
|
|
14063
14201
|
};
|
|
14064
14202
|
}
|
|
14065
14203
|
if (want("opencode")) {
|
|
14066
|
-
const models =
|
|
14204
|
+
const models = await resolveModels("opencode");
|
|
14067
14205
|
bundle.opencode = {
|
|
14068
14206
|
models: Array.isArray(models) ? models : [],
|
|
14069
14207
|
agents: [],
|
|
@@ -18178,7 +18316,7 @@ function resolveHarnessService(store, harness, apiProviderId) {
|
|
|
18178
18316
|
binding && binding.credentialId === cred.id ? { endpointId: binding.endpointId, config: binding.config } : null
|
|
18179
18317
|
);
|
|
18180
18318
|
}
|
|
18181
|
-
function
|
|
18319
|
+
function listHarnessProviderModels(store, harness, apiProviderId) {
|
|
18182
18320
|
const resolved = resolveHarnessService(store, harness, apiProviderId);
|
|
18183
18321
|
if (resolved) {
|
|
18184
18322
|
const mapped = /* @__PURE__ */ new Map();
|
|
@@ -18208,6 +18346,11 @@ function listHarnessModels(store, harness, apiProviderId) {
|
|
|
18208
18346
|
const list = [...mapped.values()];
|
|
18209
18347
|
if (list.length > 0) return list;
|
|
18210
18348
|
}
|
|
18349
|
+
return [];
|
|
18350
|
+
}
|
|
18351
|
+
function listHarnessModels(store, harness, apiProviderId) {
|
|
18352
|
+
const fromProvider = listHarnessProviderModels(store, harness, apiProviderId);
|
|
18353
|
+
if (fromProvider.length > 0) return fromProvider;
|
|
18211
18354
|
if (harness === "claude") return DEFAULT_CLAUDE_MODELS;
|
|
18212
18355
|
if (harness === "codex") return DEFAULT_CODEX_MODELS;
|
|
18213
18356
|
return [];
|
|
@@ -21088,6 +21231,18 @@ function createNodeClaudeTurnRunner(opts) {
|
|
|
21088
21231
|
...opts.env,
|
|
21089
21232
|
...providerEnv
|
|
21090
21233
|
};
|
|
21234
|
+
const uid = opts.getuid ? opts.getuid() : process.getuid?.();
|
|
21235
|
+
const permissions = applyRootPermissionGuard({
|
|
21236
|
+
permissionMode: input.permissionMode,
|
|
21237
|
+
uid,
|
|
21238
|
+
env: authEnv
|
|
21239
|
+
});
|
|
21240
|
+
if (permissions.downgradedFrom) {
|
|
21241
|
+
input.onAgentEvent?.({
|
|
21242
|
+
type: "agent_setting_change",
|
|
21243
|
+
patch: { permissionMode: permissions.permissionMode }
|
|
21244
|
+
});
|
|
21245
|
+
}
|
|
21091
21246
|
const priorSession = parseClaudeSessionResume(input.session.providerResume);
|
|
21092
21247
|
const sessionKey = input.session.sessionId;
|
|
21093
21248
|
const mergedProbe = ensureMcpMerge({
|
|
@@ -21125,7 +21280,8 @@ function createNodeClaudeTurnRunner(opts) {
|
|
|
21125
21280
|
sessionId: priorSession,
|
|
21126
21281
|
model: input.model && input.model.trim() ? input.model.trim() : void 0,
|
|
21127
21282
|
effort: input.effort && input.effort.trim() ? input.effort.trim() : void 0,
|
|
21128
|
-
permissionMode:
|
|
21283
|
+
permissionMode: permissions.permissionMode,
|
|
21284
|
+
uid,
|
|
21129
21285
|
sandboxMode: input.sandboxMode && input.sandboxMode.trim() ? input.sandboxMode.trim() : void 0,
|
|
21130
21286
|
additionalDirectories: input.additionalDirectories?.filter(Boolean),
|
|
21131
21287
|
enabledSkills: resolveEnabledSkills(cwd, input.enabledSkills, input.disabledSkills),
|
|
@@ -56999,8 +57155,8 @@ import { fileURLToPath } from "node:url";
|
|
|
56999
57155
|
function resolveCliReleaseVersion() {
|
|
57000
57156
|
const fromEnv = process.env.SUPERONE_CLI_VERSION?.trim();
|
|
57001
57157
|
if (fromEnv) return fromEnv;
|
|
57002
|
-
if ("0.50.
|
|
57003
|
-
return "0.50.
|
|
57158
|
+
if ("0.50.2-alpha".trim()) {
|
|
57159
|
+
return "0.50.2-alpha".trim();
|
|
57004
57160
|
}
|
|
57005
57161
|
const fromDist = readDistManifestVersion();
|
|
57006
57162
|
if (fromDist) return fromDist;
|
|
@@ -60983,6 +61139,25 @@ function handleDelete(payload, ctx) {
|
|
|
60983
61139
|
init_environment();
|
|
60984
61140
|
init_session();
|
|
60985
61141
|
init_resolve_service();
|
|
61142
|
+
init_claude_turn_runner();
|
|
61143
|
+
|
|
61144
|
+
// src/session/claude-model-catalog.ts
|
|
61145
|
+
init_src2();
|
|
61146
|
+
var CATALOG_TTL_MS = 5 * 6e4;
|
|
61147
|
+
var cache = /* @__PURE__ */ new Map();
|
|
61148
|
+
async function getNodeClaudeModelCatalog(opts) {
|
|
61149
|
+
const now = opts.now ?? Date.now;
|
|
61150
|
+
const key = opts.binaryPath ?? "sdk-bundled";
|
|
61151
|
+
const hit = cache.get(key);
|
|
61152
|
+
if (hit && now() - hit.fetchedAt < CATALOG_TTL_MS) return hit.models;
|
|
61153
|
+
const fetchModels = opts.fetchModels ?? fetchClaudeModels;
|
|
61154
|
+
const models = await fetchModels({ cwd: opts.cwd, binaryPath: opts.binaryPath });
|
|
61155
|
+
if (models.length > 0) cache.set(key, { fetchedAt: now(), models });
|
|
61156
|
+
else cache.delete(key);
|
|
61157
|
+
return models;
|
|
61158
|
+
}
|
|
61159
|
+
|
|
61160
|
+
// src/rpc/harness-resources-handlers.ts
|
|
60986
61161
|
function requireScopes5(client3, scopes) {
|
|
60987
61162
|
if (!hasAllScopes(client3.scopes, scopes)) {
|
|
60988
61163
|
return { error: { code: "forbidden", message: `missing scopes: ${scopes.join(", ")}` } };
|
|
@@ -60992,6 +61167,14 @@ function requireScopes5(client3, scopes) {
|
|
|
60992
61167
|
function asRecord13(payload) {
|
|
60993
61168
|
return payload && typeof payload === "object" ? payload : {};
|
|
60994
61169
|
}
|
|
61170
|
+
function defaultProbeModels(ctx) {
|
|
61171
|
+
return async (harnessId, cwd) => {
|
|
61172
|
+
if (harnessId !== "claude") return [];
|
|
61173
|
+
const binaryPath = resolveClaudeBinaryPath({ harnesses: ctx.harnesses });
|
|
61174
|
+
if (!binaryPath) return [];
|
|
61175
|
+
return getNodeClaudeModelCatalog({ cwd, binaryPath });
|
|
61176
|
+
};
|
|
61177
|
+
}
|
|
60995
61178
|
function mapThrown5(err) {
|
|
60996
61179
|
const e = err;
|
|
60997
61180
|
const code = e.code ?? "internal";
|
|
@@ -61020,12 +61203,19 @@ async function handleHarnessResources(payload, ctx) {
|
|
|
61020
61203
|
const harnessId = typeof p2.harnessId === "string" && p2.harnessId.trim() ? p2.harnessId.trim() : null;
|
|
61021
61204
|
const apiProviderId = typeof p2.apiProviderId === "string" && p2.apiProviderId.trim() ? p2.apiProviderId.trim() : p2.apiProviderId === null ? null : void 0;
|
|
61022
61205
|
const listModels = (hid, apiId) => {
|
|
61023
|
-
return
|
|
61206
|
+
return listHarnessProviderModels(ctx.providers, hid, apiId ?? null);
|
|
61207
|
+
};
|
|
61208
|
+
const probeModels = async (hid) => {
|
|
61209
|
+
const probe = ctx.probeModels ?? defaultProbeModels(ctx);
|
|
61210
|
+
const probed = await probe(hid, project.path);
|
|
61211
|
+
if (probed.length > 0) return probed;
|
|
61212
|
+
return listHarnessModels(ctx.providers, hid, apiProviderId ?? null);
|
|
61024
61213
|
};
|
|
61025
61214
|
const bundle = await collectHarnessResources({
|
|
61026
61215
|
projectPath: project.path,
|
|
61027
61216
|
homeDir: ctx.homeDir,
|
|
61028
61217
|
listModels,
|
|
61218
|
+
probeModels,
|
|
61029
61219
|
apiProviderId: apiProviderId ?? null,
|
|
61030
61220
|
harnessId
|
|
61031
61221
|
});
|
|
@@ -61201,7 +61391,8 @@ async function dispatchRpcInner(method, payload, ctx) {
|
|
|
61201
61391
|
const harnessResources = await dispatchHarnessResourcesRpc(method, payload, {
|
|
61202
61392
|
client: ctx.client,
|
|
61203
61393
|
projects: ctx.projects,
|
|
61204
|
-
providers: ctx.providers
|
|
61394
|
+
providers: ctx.providers,
|
|
61395
|
+
harnesses: ctx.harnesses
|
|
61205
61396
|
});
|
|
61206
61397
|
if (harnessResources) return harnessResources;
|
|
61207
61398
|
const codex = await dispatchCodexRpc(method, payload, {
|
|
@@ -66992,14 +67183,14 @@ var Response2 = class _Response {
|
|
|
66992
67183
|
}
|
|
66993
67184
|
}
|
|
66994
67185
|
get headers() {
|
|
66995
|
-
const
|
|
66996
|
-
if (
|
|
66997
|
-
if (!(
|
|
66998
|
-
|
|
66999
|
-
|
|
67186
|
+
const cache2 = this[cacheKey];
|
|
67187
|
+
if (cache2) {
|
|
67188
|
+
if (!(cache2[2] instanceof Headers)) {
|
|
67189
|
+
cache2[2] = new Headers(
|
|
67190
|
+
cache2[2] || { "content-type": "text/plain; charset=UTF-8" }
|
|
67000
67191
|
);
|
|
67001
67192
|
}
|
|
67002
|
-
return
|
|
67193
|
+
return cache2[2];
|
|
67003
67194
|
}
|
|
67004
67195
|
return this[getResponseCache]().headers;
|
|
67005
67196
|
}
|
package/package.json
CHANGED