@super-one/cli 0.53.10-alpha → 0.54.0-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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@super-one/cli",
3
- "version": "0.53.10-alpha",
3
+ "version": "0.54.0-alpha",
4
4
  "kind": "npm",
5
5
  "minNodeMajor": 20,
6
- "builtAt": "2026-08-17T01:00:29.043Z"
6
+ "builtAt": "2026-08-18T02:21:57.423Z"
7
7
  }
package/lib/cli.mjs CHANGED
@@ -3567,7 +3567,7 @@ If the tool returns an error containing "user_locked", the user has manually nam
3567
3567
  },
3568
3568
  "permissionPreset": {
3569
3569
  "type": "string",
3570
- "enum": ["read-only", "default", "full-access"],
3570
+ "enum": ["read-only", "default", "auto-review", "full-access"],
3571
3571
  "description": "Codex legacy alias for permissionMode (full-access \u2248 bypassPermissions)."
3572
3572
  }
3573
3573
  },
@@ -11638,6 +11638,9 @@ function createCodexAgentEventMapper(options) {
11638
11638
  let lastItemCompletedAt = startedAt;
11639
11639
  let started = false;
11640
11640
  let terminal = false;
11641
+ let activeCompaction = null;
11642
+ const completedCompactionTurns = /* @__PURE__ */ new Set();
11643
+ const compactionTrigger = options.turnKind === "compact" ? "manual" : "auto";
11641
11644
  const upsert = (item) => {
11642
11645
  if (!itemMap.has(item.id)) order.push(item.id);
11643
11646
  itemMap.set(item.id, item);
@@ -11648,9 +11651,54 @@ function createCodexAgentEventMapper(options) {
11648
11651
  options.emit({ type: "codex_item_delta", messageId: options.messageId, phase, item });
11649
11652
  };
11650
11653
  const finishStatus = () => options.emit({ type: "status_change", status: "idle" });
11654
+ const startCompaction = (params) => {
11655
+ const turnId = readString(params.turnId) ?? readString(params.turn_id) ?? currentTurnId;
11656
+ if (turnId && completedCompactionTurns.has(turnId)) return;
11657
+ if (activeCompaction && (!activeCompaction.turnId || !turnId || activeCompaction.turnId === turnId)) {
11658
+ if (!activeCompaction.turnId && turnId) {
11659
+ activeCompaction = {
11660
+ turnId,
11661
+ startedAt: readNumber(params.startedAtMs ?? params.started_at_ms) ?? activeCompaction.startedAt,
11662
+ preTokens: currentUsage?.lastInputTokens ?? activeCompaction.preTokens
11663
+ };
11664
+ }
11665
+ return;
11666
+ }
11667
+ activeCompaction = {
11668
+ turnId,
11669
+ startedAt: readNumber(params.startedAtMs ?? params.started_at_ms) ?? now(),
11670
+ preTokens: currentUsage?.lastInputTokens ?? 0
11671
+ };
11672
+ options.emit({ type: "status_indicator", indicator: "compacting" });
11673
+ };
11674
+ const completeCompaction = (params) => {
11675
+ const turnId = readString(params.turnId) ?? readString(params.turn_id) ?? currentTurnId;
11676
+ if (turnId && completedCompactionTurns.has(turnId)) return;
11677
+ if (!activeCompaction) startCompaction(params);
11678
+ const current = activeCompaction;
11679
+ if (!current) return;
11680
+ const completedAt = readNumber(params.completedAtMs ?? params.completed_at_ms) ?? now();
11681
+ const postTokens = currentUsage?.lastInputTokens;
11682
+ options.emit({
11683
+ type: "compact_boundary",
11684
+ trigger: compactionTrigger,
11685
+ preTokens: current.preTokens,
11686
+ ...postTokens !== void 0 && postTokens > 0 ? { postTokens } : {},
11687
+ ...completedAt >= current.startedAt ? { durationMs: completedAt - current.startedAt } : {},
11688
+ ...compactionTrigger === "manual" ? { messageId: options.messageId } : {}
11689
+ });
11690
+ options.emit({ type: "status_indicator", indicator: null, compactResult: "success" });
11691
+ const completedTurnId = turnId ?? current.turnId;
11692
+ if (completedTurnId) completedCompactionTurns.add(completedTurnId);
11693
+ activeCompaction = null;
11694
+ };
11651
11695
  const fail2 = (error51, interrupted = false) => {
11652
11696
  if (terminal) return;
11653
11697
  terminal = true;
11698
+ if (activeCompaction) {
11699
+ activeCompaction = null;
11700
+ options.emit({ type: "status_indicator", indicator: null, compactResult: "failed", compactError: error51 });
11701
+ }
11654
11702
  options.emit(interrupted ? { type: "message_interrupted", messageId: options.messageId } : { type: "message_error", messageId: options.messageId, error: error51 });
11655
11703
  finishStatus();
11656
11704
  };
@@ -11672,6 +11720,7 @@ function createCodexAgentEventMapper(options) {
11672
11720
  });
11673
11721
  options.emit({ type: "status_change", status: "streaming" });
11674
11722
  if (threadId) options.emit({ type: "codex_thread_started", messageId: options.messageId, threadId });
11723
+ if (options.turnKind === "compact") startCompaction({});
11675
11724
  },
11676
11725
  apply(note) {
11677
11726
  const result = emptyApplyResult();
@@ -11690,6 +11739,11 @@ function createCodexAgentEventMapper(options) {
11690
11739
  case "item/completed": {
11691
11740
  const raw = asRecord(params.item);
11692
11741
  if (!raw) break;
11742
+ if (readString(raw.type) === "contextCompaction") {
11743
+ if (note.method === "item/started") startCompaction(params);
11744
+ else completeCompaction(params);
11745
+ break;
11746
+ }
11693
11747
  const previous = readString(raw.id) ? itemMap.get(readString(raw.id)) : void 0;
11694
11748
  if (previous?.type === "plan" && note.method === "item/completed") {
11695
11749
  emitItem("completed", previous);
@@ -11793,6 +11847,10 @@ function createCodexAgentEventMapper(options) {
11793
11847
  }
11794
11848
  break;
11795
11849
  }
11850
+ case "thread/compacted": {
11851
+ completeCompaction(params);
11852
+ break;
11853
+ }
11796
11854
  case "mcpServer/startupStatus/updated": {
11797
11855
  const name = readString(params.name);
11798
11856
  if (!name) break;
@@ -11829,6 +11887,7 @@ function createCodexAgentEventMapper(options) {
11829
11887
  fail2(result.error, true);
11830
11888
  break;
11831
11889
  }
11890
+ if (activeCompaction) completeCompaction(params);
11832
11891
  for (const id of order) {
11833
11892
  const item = itemMap.get(id);
11834
11893
  if (!item) continue;
@@ -12257,7 +12316,8 @@ async function runCodexAppServerTurn(opts) {
12257
12316
  messageId: opts.messageId ?? `codex_${turnId ?? Date.now()}`,
12258
12317
  emit: opts.onAgentEvent,
12259
12318
  model: opts.model,
12260
- turnId
12319
+ turnId,
12320
+ turnKind
12261
12321
  }) : null;
12262
12322
  agentEventMapper?.start(threadId);
12263
12323
  while (!opts.signal.aborted && Date.now() < deadline) {
@@ -18770,23 +18830,6 @@ var init_types2 = __esm({
18770
18830
  }
18771
18831
  });
18772
18832
 
18773
- // ../../packages/shared/src/platform-registry/relay-identify.ts
18774
- var init_relay_identify = __esm({
18775
- "../../packages/shared/src/platform-registry/relay-identify.ts"() {
18776
- "use strict";
18777
- init_protocols();
18778
- }
18779
- });
18780
-
18781
- // ../../packages/shared/src/platform-registry/capabilities.ts
18782
- var init_capabilities2 = __esm({
18783
- "../../packages/shared/src/platform-registry/capabilities.ts"() {
18784
- "use strict";
18785
- init_protocols();
18786
- init_relay_identify();
18787
- }
18788
- });
18789
-
18790
18833
  // ../../packages/shared/src/agent-types.ts
18791
18834
  function resolveLaunchSummary(task, summary) {
18792
18835
  const explicit = typeof summary === "string" ? summary.trim() : "";
@@ -18802,21 +18845,30 @@ var init_agent_types = __esm({
18802
18845
  CODEX_PERMISSION_PRESETS = {
18803
18846
  "read-only": {
18804
18847
  approvalPolicy: "on-request",
18848
+ approvalsReviewer: "user",
18805
18849
  sandboxMode: "read-only",
18806
18850
  networkAccessEnabled: false
18807
18851
  },
18808
18852
  default: {
18809
18853
  approvalPolicy: "on-request",
18854
+ approvalsReviewer: "user",
18855
+ sandboxMode: "workspace-write",
18856
+ networkAccessEnabled: false
18857
+ },
18858
+ "auto-review": {
18859
+ approvalPolicy: "on-request",
18860
+ approvalsReviewer: "auto_review",
18810
18861
  sandboxMode: "workspace-write",
18811
18862
  networkAccessEnabled: false
18812
18863
  },
18813
18864
  "full-access": {
18814
18865
  approvalPolicy: "never",
18866
+ approvalsReviewer: "user",
18815
18867
  sandboxMode: "danger-full-access",
18816
18868
  networkAccessEnabled: true
18817
18869
  }
18818
18870
  };
18819
- DEFAULT_CODEX_PERMISSION_PRESET = "default";
18871
+ DEFAULT_CODEX_PERMISSION_PRESET = "auto-review";
18820
18872
  DEFAULT_CODEX_PERMISSION_PROFILE = CODEX_PERMISSION_PRESETS[DEFAULT_CODEX_PERMISSION_PRESET];
18821
18873
  MODEL_BUCKETS = ["default", "opus", "sonnet", "haiku", "subagent"];
18822
18874
  }
@@ -18857,43 +18909,6 @@ var init_merge = __esm({
18857
18909
  }
18858
18910
  });
18859
18911
 
18860
- // ../../packages/shared/src/model-tasks.ts
18861
- var init_model_tasks = __esm({
18862
- "../../packages/shared/src/model-tasks.ts"() {
18863
- "use strict";
18864
- }
18865
- });
18866
-
18867
- // ../../packages/shared/src/platform-registry/relay-discovery.ts
18868
- var CANONICAL_CATALOG_PROVIDERS, FIRST_PARTY_CATALOG_PROVIDERS;
18869
- var init_relay_discovery = __esm({
18870
- "../../packages/shared/src/platform-registry/relay-discovery.ts"() {
18871
- "use strict";
18872
- init_model_tasks();
18873
- init_protocols();
18874
- init_relay_identify();
18875
- CANONICAL_CATALOG_PROVIDERS = ["openai", "anthropic", "google"];
18876
- FIRST_PARTY_CATALOG_PROVIDERS = /* @__PURE__ */ new Set([
18877
- ...CANONICAL_CATALOG_PROVIDERS,
18878
- "xai",
18879
- "deepseek",
18880
- "mistral",
18881
- "cohere",
18882
- "meta",
18883
- "moonshotai",
18884
- "moonshotai-cn",
18885
- "zhipuai",
18886
- "zhipuai-coding-plan",
18887
- "alibaba",
18888
- "alibaba-cn",
18889
- "minimax",
18890
- "minimax-cn",
18891
- "bytedance",
18892
- "perplexity"
18893
- ]);
18894
- }
18895
- });
18896
-
18897
18912
  // ../../packages/shared/src/platform-registry/effective-endpoints.ts
18898
18913
  function isCustomPlatformId(platformId) {
18899
18914
  return platformId.startsWith("custom:");
@@ -18901,6 +18916,24 @@ function isCustomPlatformId(platformId) {
18901
18916
  function isCustomPlatform(platform2) {
18902
18917
  return isCustomPlatformId(platform2.id);
18903
18918
  }
18919
+ function withCustomAnthropicDefaults(endpoints) {
18920
+ return endpoints.map((endpoint) => {
18921
+ if (!endpoint.protocols.includes("anthropic-messages")) return endpoint;
18922
+ if (endpoint.defaults?.extraEnv && ENABLE_TOOL_SEARCH_ENV in endpoint.defaults.extraEnv) {
18923
+ return endpoint;
18924
+ }
18925
+ return {
18926
+ ...endpoint,
18927
+ defaults: {
18928
+ ...endpoint.defaults,
18929
+ extraEnv: {
18930
+ [ENABLE_TOOL_SEARCH_ENV]: "true",
18931
+ ...endpoint.defaults?.extraEnv
18932
+ }
18933
+ }
18934
+ };
18935
+ });
18936
+ }
18904
18937
  function foldOverridesIntoEndpoints(endpoints, overrides) {
18905
18938
  if (!overrides || Object.keys(overrides).length === 0) return endpoints;
18906
18939
  return endpoints.map((endpoint) => {
@@ -18926,21 +18959,85 @@ function foldOverridesIntoEndpoints(endpoints, overrides) {
18926
18959
  }
18927
18960
  function effectiveEndpoints(platform2, plan, credential) {
18928
18961
  if (isCustomPlatform(platform2)) {
18929
- if (credential?.endpoints && credential.endpoints.length > 0) return credential.endpoints;
18930
- return foldOverridesIntoEndpoints(plan.endpoints, credential?.overrides);
18962
+ const endpoints = credential?.endpoints && credential.endpoints.length > 0 ? credential.endpoints : foldOverridesIntoEndpoints(plan.endpoints, credential?.overrides);
18963
+ return withCustomAnthropicDefaults(endpoints);
18931
18964
  }
18932
18965
  return plan.endpoints;
18933
18966
  }
18967
+ var ENABLE_TOOL_SEARCH_ENV;
18934
18968
  var init_effective_endpoints = __esm({
18935
18969
  "../../packages/shared/src/platform-registry/effective-endpoints.ts"() {
18936
18970
  "use strict";
18937
18971
  init_merge();
18972
+ ENABLE_TOOL_SEARCH_ENV = "ENABLE_TOOL_SEARCH";
18973
+ }
18974
+ });
18975
+
18976
+ // ../../packages/shared/src/platform-registry/relay-identify.ts
18977
+ var init_relay_identify = __esm({
18978
+ "../../packages/shared/src/platform-registry/relay-identify.ts"() {
18979
+ "use strict";
18980
+ init_protocols();
18981
+ }
18982
+ });
18983
+
18984
+ // ../../packages/shared/src/platform-registry/capabilities.ts
18985
+ var init_capabilities2 = __esm({
18986
+ "../../packages/shared/src/platform-registry/capabilities.ts"() {
18987
+ "use strict";
18988
+ init_protocols();
18989
+ init_effective_endpoints();
18990
+ init_relay_identify();
18991
+ }
18992
+ });
18993
+
18994
+ // ../../packages/shared/src/model-tasks.ts
18995
+ var init_model_tasks = __esm({
18996
+ "../../packages/shared/src/model-tasks.ts"() {
18997
+ "use strict";
18998
+ }
18999
+ });
19000
+
19001
+ // ../../packages/shared/src/platform-registry/relay-discovery.ts
19002
+ var CANONICAL_CATALOG_PROVIDERS, FIRST_PARTY_CATALOG_PROVIDERS;
19003
+ var init_relay_discovery = __esm({
19004
+ "../../packages/shared/src/platform-registry/relay-discovery.ts"() {
19005
+ "use strict";
19006
+ init_model_tasks();
19007
+ init_protocols();
19008
+ init_relay_identify();
19009
+ CANONICAL_CATALOG_PROVIDERS = ["openai", "anthropic", "google"];
19010
+ FIRST_PARTY_CATALOG_PROVIDERS = /* @__PURE__ */ new Set([
19011
+ ...CANONICAL_CATALOG_PROVIDERS,
19012
+ "xai",
19013
+ "deepseek",
19014
+ "mistral",
19015
+ "cohere",
19016
+ "meta",
19017
+ "moonshotai",
19018
+ "moonshotai-cn",
19019
+ "zhipuai",
19020
+ "zhipuai-coding-plan",
19021
+ "alibaba",
19022
+ "alibaba-cn",
19023
+ "minimax",
19024
+ "minimax-cn",
19025
+ "bytedance",
19026
+ "perplexity"
19027
+ ]);
18938
19028
  }
18939
19029
  });
18940
19030
 
18941
19031
  // ../../packages/shared/src/platform-registry/builtin.ts
18942
19032
  function anthropic(baseUrl, opts = {}) {
18943
- const defaults = opts.extraEnv || opts.modelMapping ? { extraEnv: opts.extraEnv, modelMapping: opts.modelMapping } : void 0;
19033
+ const extraEnv = {
19034
+ [ENABLE_TOOL_SEARCH_ENV]: "true",
19035
+ ...opts.extraEnv
19036
+ };
19037
+ const defaults = {
19038
+ extraEnv,
19039
+ ...opts.modelMapping ? { modelMapping: opts.modelMapping } : {}
19040
+ };
18944
19041
  return { id: opts.id ?? "anthropic", baseUrl, protocols: ["anthropic-messages"], defaults, models: opts.models };
18945
19042
  }
18946
19043
  function openaiChat(baseUrl, opts = {}) {
@@ -18951,6 +19048,7 @@ var XIAOMI_MODELS, BAILIAN_CODING_PLAN_MODELS, BAILIAN_TOKEN_PLAN_MODELS, BAILIA
18951
19048
  var init_builtin = __esm({
18952
19049
  "../../packages/shared/src/platform-registry/builtin.ts"() {
18953
19050
  "use strict";
19051
+ init_effective_endpoints();
18954
19052
  init_protocols();
18955
19053
  XIAOMI_MODELS = {
18956
19054
  default: { id: "mimo-v2.5-pro", name: "MiMo V2.5 Pro" },
@@ -61421,8 +61519,8 @@ import { fileURLToPath } from "node:url";
61421
61519
  function resolveCliReleaseVersion() {
61422
61520
  const fromEnv = process.env.SUPERONE_CLI_VERSION?.trim();
61423
61521
  if (fromEnv) return fromEnv;
61424
- if ("0.53.10-alpha".trim()) {
61425
- return "0.53.10-alpha".trim();
61522
+ if ("0.54.0-alpha".trim()) {
61523
+ return "0.54.0-alpha".trim();
61426
61524
  }
61427
61525
  const fromDist = readDistManifestVersion();
61428
61526
  if (fromDist) return fromDist;
@@ -63375,6 +63473,12 @@ function validateCloneRemoteUrl(url2) {
63375
63473
 
63376
63474
  // ../../packages/shared/src/git-clone.ts
63377
63475
  var CLONE_TIMEOUT_MS = 15 * 60 * 1e3;
63476
+ function buildCloneArgs(input, destinationPath) {
63477
+ const args = ["clone"];
63478
+ if (input.shallow) args.push("--depth=1");
63479
+ args.push("--", input.remoteUrl.trim(), destinationPath);
63480
+ return args;
63481
+ }
63378
63482
  function invalid(message) {
63379
63483
  return Object.assign(new Error(message), { code: "invalid_argument" });
63380
63484
  }
@@ -63404,8 +63508,7 @@ async function cloneRepository(input) {
63404
63508
  await new Promise((resolvePromise, reject) => {
63405
63509
  execFile(
63406
63510
  "git",
63407
- // `--` stops git from reading a hostile URL as an option.
63408
- ["clone", "--", input.remoteUrl.trim(), destination.path],
63511
+ buildCloneArgs(input, destination.path),
63409
63512
  {
63410
63513
  cwd: parent,
63411
63514
  timeout: CLONE_TIMEOUT_MS,
@@ -66837,7 +66940,8 @@ async function handleGitClone(payload, ctx) {
66837
66940
  const cloned = await cloneRepository({
66838
66941
  remoteUrl: String(p2.remoteUrl ?? ""),
66839
66942
  parentPath: expandHostPath(String(p2.parentPath ?? "")),
66840
- directoryName: typeof p2.directoryName === "string" ? p2.directoryName : void 0
66943
+ directoryName: typeof p2.directoryName === "string" ? p2.directoryName : void 0,
66944
+ shallow: p2.shallow === true
66841
66945
  });
66842
66946
  return { result: ctx.projects.open(cloned.path, cloned.name) };
66843
66947
  } catch (err) {
@@ -66998,7 +67102,8 @@ function handleSessionList(payload, ctx) {
66998
67102
  isAutomation: s2.isAutomation === true,
66999
67103
  automationId: s2.automationId ?? null,
67000
67104
  providerResume,
67001
- ...providerSessionId ? { providerSessionId } : {}
67105
+ ...providerSessionId ? { providerSessionId } : {},
67106
+ tags: Array.isArray(s2.tags) ? s2.tags : []
67002
67107
  };
67003
67108
  })
67004
67109
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@super-one/cli",
3
- "version": "0.53.10-alpha",
3
+ "version": "0.54.0-alpha",
4
4
  "description": "SuperOne headless node CLI — remote execution environment (RPC, workspaces, sessions).",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",