@sema-agent/cli 1.0.80 → 1.0.81

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.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sema-agent/cli",
3
- "version": "1.0.80",
3
+ "version": "1.0.81",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sema-agent/cli",
9
- "version": "1.0.80",
9
+ "version": "1.0.81",
10
10
  "license": "BUSL-1.1",
11
11
  "dependencies": {
12
12
  "@sema-agent/sdk": "7.1.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/cli",
3
- "version": "1.0.80",
3
+ "version": "1.0.81",
4
4
  "description": "Sema — your own Claude Code-grade coding agent, in the terminal.",
5
5
  "license": "BUSL-1.1",
6
6
  "bin": {
package/sema-main.js CHANGED
@@ -61404,12 +61404,17 @@ function createFleetLedger(hooks2 = {}, opts = {}) {
61404
61404
  droppedMalformed++, debug4("[fleet-frame] MALFORMED bg_notification dropped(taskId \u6216 status \u7F3A\u5E2D/\u975E\u4E32)");
61405
61405
  return;
61406
61406
  }
61407
+ if (n2.parentTaskId !== void 0 && typeof n2.parentTaskId != "string") {
61408
+ droppedMalformed++, debug4(`[fleet-frame] MALFORMED bg_notification dropped(parentTaskId \u952E\u5728\u573A\u4F46\u975E\u4E32:${typeof n2.parentTaskId} \u2014\u2014 \u9694\u79BB\u5224\u636E\u7684\u951A\u4E0D\u8BB8\u88AB\u574F\u503C\u65C1\u8DEF;taskId=${n2.taskId})`);
61409
+ return;
61410
+ }
61407
61411
  let serverFailClosed = bgNotifyFailClosedMeta && sessionScopedMeta === !0, ownByRoot = typeof n2.rootSessionId == "string" && n2.rootSessionId.length > 0 && n2.rootSessionId === engineSessionParam();
61408
61412
  if (!serverFailClosed && !ownByRoot && typeof n2.parentTaskId == "string" && n2.parentTaskId.length > 0 && !isOwnEngineRun(n2.parentTaskId)) {
61409
61413
  droppedForeignBgNotification++, debug4(`[fleet-frame] bg_notification DROPPED foreign/unowned parentRun(taskId=${n2.taskId} parentRun=${n2.parentTaskId})`);
61410
61414
  return;
61411
61415
  }
61412
- debug4(`[fleet-frame] bg_notification taskId=${n2.taskId} status=${n2.status} seq=${n2.seq ?? "-"}`);
61416
+ let evidence = serverFailClosed || ownByRoot ? sessionKey === DEFAULT_SESSION_KEY ? serverFailClosed ? "server_fail_closed" : "own_root" : "session_anchor_untrusted" : typeof n2.parentTaskId == "string" && n2.parentTaskId.length > 0 ? "own_parent" : "absent_parent";
61417
+ debug4(`[fleet-frame] bg_notification taskId=${n2.taskId} status=${n2.status} seq=${n2.seq ?? "-"} accept=${evidence}`);
61413
61418
  let rowIds = [];
61414
61419
  for (let id of taskMap.keys())
61415
61420
  (id === n2.taskId || rowIdTail(id) === n2.taskId) && rowIds.push(id);
@@ -61426,7 +61431,11 @@ function createFleetLedger(hooks2 = {}, opts = {}) {
61426
61431
  washBlocked = !0, debug4(`[fleet-frame] bg_notification WASH-GREEN blocked(row=${id} row-status=${rowStatus} notif=${n2.status})`);
61427
61432
  continue;
61428
61433
  }
61429
- rowStatus !== n2.status && retained.set(id, { row: { ...known, status: coerced }, expireAt: nowMs + TERMINAL_RETAIN_MS }), writtenIds.add(id), applied = !0;
61434
+ if (rowStatus !== n2.status) {
61435
+ let upgraded = { ...known, status: coerced };
61436
+ retained.set(id, { row: upgraded, expireAt: nowMs + TERMINAL_RETAIN_MS }), taskMap.set(id, upgraded);
61437
+ }
61438
+ writtenIds.add(id), applied = !0;
61430
61439
  } else {
61431
61440
  let started2 = known.startedAt, meta3 = rowMeta.get(id), frozenElapsed = typeof started2 == "number" && started2 > 0 && started2 <= nowMs ? nowMs - started2 : meta3 !== void 0 ? (known.elapsedMs ?? 0) + Math.max(0, nowMs - meta3.receivedAtMs) : known.elapsedMs;
61432
61441
  taskMap.delete(id), rowMeta.delete(id), retained.set(id, {
@@ -61480,7 +61489,7 @@ function createFleetLedger(hooks2 = {}, opts = {}) {
61480
61489
  }) : debug4(`[fleet-frame] bg_notification state-plane rejected as wash-green echo(taskId=${n2.taskId} notif=${n2.status})\u2014\u2014 \u901A\u77E5\u9762\u7167\u5E38\u5165\u961F`);
61481
61490
  }
61482
61491
  try {
61483
- let out6 = hooks2.onBgNotificationAccepted?.(n2, rowIds);
61492
+ let out6 = hooks2.onBgNotificationAccepted?.(n2, rowIds, evidence);
61484
61493
  out6 && typeof out6.then == "function" && Promise.resolve(out6).catch((e) => {
61485
61494
  hostLog("debug", `[fleet-frame] onBgNotificationAccepted hook rejected: ${String(e).slice(0, 160)}`);
61486
61495
  });
@@ -61686,42 +61695,6 @@ var capByBase, CAP_FALSE_RETRY_TTL_MS, init_engineSubagentOutput = __esm({
61686
61695
  }
61687
61696
  });
61688
61697
 
61689
- // node_modules/@sema-agent/client-core/dist/subagent/engineSubagentSteer.js
61690
- async function steerEngineSubagent(target, text2) {
61691
- let cfg = engineWireTarget();
61692
- if (!cfg)
61693
- return { ok: !1, reason: "no-wire" };
61694
- let runId = activeEngineRunId();
61695
- if (!runId)
61696
- return { ok: !1, reason: "no-run" };
61697
- let client3 = makeEngineWireClient({
61698
- baseUrl: cfg.baseUrl,
61699
- ...cfg.token ? { token: cfg.token } : {},
61700
- principal: cfg.principal
61701
- });
61702
- if (!client3)
61703
- return { ok: !1, reason: "no-wire" };
61704
- try {
61705
- let body = await client3.runs.steerSubagent(runId, target, { content: text2 }, engineSessionParamSpread()), receipt = "Message queued for delivery at the next tool round.", copy2 = body?.note ?? body?.message;
61706
- return typeof copy2 == "string" && copy2.length > 0 && (receipt = copy2), { ok: !0, receipt };
61707
- } catch (e) {
61708
- let status3 = e?.status;
61709
- if (typeof status3 == "number") {
61710
- let detail = e instanceof Error ? e.message : String(e);
61711
- return hostLog("debug", `engineSubagentSteer: ${status3} ${detail.slice(0, 200)}`), status3 === 409 || status3 === 404 ? { ok: !1, reason: "not-running", detail } : { ok: !1, reason: "error", detail: `${status3}` };
61712
- }
61713
- return hostLog("debug", `engineSubagentSteer: fetch failed ${String(e)}`), { ok: !1, reason: "error", detail: String(e) };
61714
- }
61715
- }
61716
- var init_engineSubagentSteer = __esm({
61717
- "node_modules/@sema-agent/client-core/dist/subagent/engineSubagentSteer.js"() {
61718
- init_host();
61719
- init_engineWireSdk();
61720
- init_engineWireTarget();
61721
- init_engineSessionParam();
61722
- }
61723
- });
61724
-
61725
61698
  // node_modules/@sema-agent/client-core/dist/subagent/engineSubagentResume.js
61726
61699
  function subagentResumeAvailable(baseUrl = engineWireTarget()?.baseUrl) {
61727
61700
  return engineCapTrue(baseUrl, SUBAGENT_RESUME_CAP);
@@ -61816,6 +61789,46 @@ var SUBAGENT_RESUME_CAP, RETENTION_LAPSED_CODES, warnedRetainWithoutWake, init_e
61816
61789
  }
61817
61790
  });
61818
61791
 
61792
+ // node_modules/@sema-agent/client-core/dist/subagent/engineSubagentSteer.js
61793
+ async function steerEngineSubagent(target, text2, childTaskId) {
61794
+ let cfg = engineWireTarget();
61795
+ if (!cfg)
61796
+ return { ok: !1, reason: "no-wire" };
61797
+ let named = typeof childTaskId == "string" && childTaskId !== "" ? childTaskId : void 0, runId = resolveOwnerRunId(named);
61798
+ if (!runId)
61799
+ return named !== void 0 && noteBgOwnerAbsence("subagent-steer", named), { ok: !1, reason: "no-run" };
61800
+ let client3 = makeEngineWireClient({
61801
+ baseUrl: cfg.baseUrl,
61802
+ ...cfg.token ? { token: cfg.token } : {},
61803
+ principal: cfg.principal
61804
+ });
61805
+ if (!client3)
61806
+ return { ok: !1, reason: "no-wire" };
61807
+ let rowSession = named !== void 0 ? getBgParentRunOwner(named)?.sessionId : void 0, session2 = rowSession !== void 0 ? { session: rowSession } : engineSessionParamSpread();
61808
+ try {
61809
+ let body = await client3.runs.steerSubagent(runId, target, { content: text2 }, session2), receipt = "Message queued for delivery at the next tool round.", copy2 = body?.note ?? body?.message;
61810
+ return typeof copy2 == "string" && copy2.length > 0 && (receipt = copy2), { ok: !0, receipt };
61811
+ } catch (e) {
61812
+ let status3 = e?.status;
61813
+ if (typeof status3 == "number") {
61814
+ let detail = e instanceof Error ? e.message : String(e);
61815
+ return hostLog("debug", `engineSubagentSteer: ${status3} ${detail.slice(0, 200)}`), status3 === 409 || status3 === 404 ? { ok: !1, reason: "not-running", detail } : { ok: !1, reason: "error", detail: `${status3}` };
61816
+ }
61817
+ return hostLog("debug", `engineSubagentSteer: fetch failed ${String(e)}`), { ok: !1, reason: "error", detail: String(e) };
61818
+ }
61819
+ }
61820
+ var init_engineSubagentSteer = __esm({
61821
+ "node_modules/@sema-agent/client-core/dist/subagent/engineSubagentSteer.js"() {
61822
+ init_host();
61823
+ init_engineWireSdk();
61824
+ init_engineWireTarget();
61825
+ init_engineSessionParam();
61826
+ init_subagentContentStore();
61827
+ init_engineSubagentResume();
61828
+ init_subagentOwnerAbsence();
61829
+ }
61830
+ });
61831
+
61819
61832
  // node_modules/@sema-agent/client-core/dist/subagent/engineTaskHandleWire.js
61820
61833
  import { TaskStopConflictError } from "@sema-agent/sdk";
61821
61834
  function resolveHostRun(handle2) {
@@ -136845,6 +136858,17 @@ var g, gDirs, init_appStateRef = __esm({
136845
136858
  });
136846
136859
 
136847
136860
  // build-src/src/sema/fleetDurableTerminalOverlay.ts
136861
+ function evidenceTier(e) {
136862
+ switch (e) {
136863
+ case "server_fail_closed":
136864
+ case "own_root":
136865
+ return "trusted";
136866
+ case "own_parent":
136867
+ return "process";
136868
+ default:
136869
+ return "unproven";
136870
+ }
136871
+ }
136848
136872
  function trimFifo(map2) {
136849
136873
  for (; map2.size > MAX_FACTS; ) {
136850
136874
  let oldest = map2.keys().next().value;
@@ -136860,20 +136884,24 @@ function normalizeSeq(rawSeq) {
136860
136884
  if (typeof rawSeq == "number" && Number.isFinite(rawSeq)) return rawSeq;
136861
136885
  if (typeof rawSeq == "string" && rawSeq.trim() !== "" && Number.isFinite(Number(rawSeq))) return Number(rawSeq);
136862
136886
  }
136863
- function recordTerminalFact(taskId, rawStatus, rawSeq, src) {
136887
+ function recordTerminalFact(taskId, rawStatus, rawSeq, src, evidence) {
136864
136888
  let status3 = typeof rawStatus == "string" && TERMINAL.has(rawStatus) ? rawStatus : void 0;
136865
136889
  if (taskId === void 0 || taskId.length === 0 || status3 === void 0) return;
136866
136890
  let seq = normalizeSeq(rawSeq), dead = tombstones.get(taskId);
136867
- dead !== void 0 && seq !== void 0 && seq <= dead || (facts.delete(taskId), facts.set(taskId, { status: status3, seq, at: ++tick, wallAt: Date.now(), src }), trimFifo(facts));
136891
+ if (dead !== void 0 && seq !== void 0 && seq <= dead) return;
136892
+ let tier = evidenceTier(evidence);
136893
+ src === "bg_notification" && tier !== "trusted" && logForDebugging(
136894
+ `[fleet-overlay] bg fact for ${taskId} recorded on NON-SESSION evidence (evidence=${evidence ?? "absent"} tier=${tier}) \u2014 presentation-only; not an ownership proof`
136895
+ ), facts.delete(taskId), facts.set(taskId, { status: status3, seq, at: ++tick, wallAt: Date.now(), src, evidence, tier }), trimFifo(facts);
136868
136896
  }
136869
136897
  function recordDurableTerminalNotification(n2) {
136870
136898
  if (n2.task_type === "external") return;
136871
136899
  let taskId = typeof n2.task_id == "string" ? n2.task_id : void 0;
136872
136900
  recordTerminalFact(taskId, n2.status, n2.seq, "task_notification");
136873
136901
  }
136874
- function observeFleetBgNotification(n2) {
136902
+ function observeFleetBgNotification(n2, evidence) {
136875
136903
  let taskId = typeof n2.taskId == "string" ? n2.taskId : void 0;
136876
- recordTerminalFact(taskId, n2.status, n2.seq, "bg_notification");
136904
+ recordTerminalFact(taskId, n2.status, n2.seq, "bg_notification", evidence);
136877
136905
  }
136878
136906
  function observeFleetTaskFrame(rowFrame) {
136879
136907
  let rowId = typeof rowFrame.id == "string" && rowFrame.id.length > 0 ? rowFrame.id : void 0;
@@ -136923,7 +136951,8 @@ var TERMINAL, MAX_FACTS, tick, FACT_GRACE_MS, facts, lastFrameAt, tombstones, ap
136923
136951
  "build-src/src/sema/fleetDurableTerminalOverlay.ts"() {
136924
136952
  init_debug();
136925
136953
  init_appStateRef();
136926
- TERMINAL = /* @__PURE__ */ new Set(["completed", "failed", "killed"]), MAX_FACTS = 200, tick = 0, FACT_GRACE_MS = 3e3, facts = /* @__PURE__ */ new Map(), lastFrameAt = /* @__PURE__ */ new Map(), tombstones = /* @__PURE__ */ new Map(), appliedOverlay = /* @__PURE__ */ new Map(), missLogged = /* @__PURE__ */ new Set();
136954
+ TERMINAL = /* @__PURE__ */ new Set(["completed", "failed", "killed"]), MAX_FACTS = 200, tick = 0, FACT_GRACE_MS = 3e3;
136955
+ facts = /* @__PURE__ */ new Map(), lastFrameAt = /* @__PURE__ */ new Map(), tombstones = /* @__PURE__ */ new Map(), appliedOverlay = /* @__PURE__ */ new Map(), missLogged = /* @__PURE__ */ new Set();
136927
136956
  }
136928
136957
  });
136929
136958
 
@@ -181192,7 +181221,11 @@ function createLiveFleetSource(config4, now2 = Date.now()) {
181192
181221
  // 台账(parentTaskId 缺席=absent-放行);旧壳门是「两位不全一律不记」。⇒ 老 server/偏斜象限上
181193
181222
  // 无 parentTaskId 的通知现在会入 overlay 事实账 —— 与包自己的状态面(retained/bgFacts)对同一
181194
181223
  // 帧的处置**同口径**,不再一边收一边拒。
181195
- onBgNotificationAccepted: (n2) => observeFleetBgNotification(n2)
181224
+ // 🔴 0.32.0 #284:第三参 `evidence` = **凭哪一条臂放行的**(不是归属结论)。本端一律入账、
181225
+ // 按档留痕 —— 处置边界与论证见 fleetDurableTerminalOverlay.ts 的 `evidenceTier` 头注
181226
+ // (要点:本模块是进程内**呈现**面,不落库/不跨会话搬运/翻行另有一道正交归属门,
181227
+ // 故不属包文档划的「有副作用的归属动作」射程)。`rowIds` 本端暂无消费面,显式具名弃用。
181228
+ onBgNotificationAccepted: (n2, _rowIds, evidence) => observeFleetBgNotification(n2, evidence)
181196
181229
  }), lastError = null, disposed4 = !1, client3 = new AgentClient2({
181197
181230
  baseUrl: config4.baseUrl,
181198
181231
  authToken: config4.authToken,
@@ -286906,7 +286939,7 @@ function FileEditToolUseRejectedMessage(t0) {
286906
286939
  }
286907
286940
  var import_compiler_runtime43, import_jsx_runtime52, MAX_LINES_TO_RENDER, init_FileEditToolUseRejectedMessage = __esm({
286908
286941
  "build-src/src/components/FileEditToolUseRejectedMessage.tsx"() {
286909
- import_compiler_runtime43 = __toESM(require_compiler_runtime(), 1);
286942
+ import_compiler_runtime43 = __toESM(require_compiler_runtime());
286910
286943
  init_useTerminalSize();
286911
286944
  init_cwd();
286912
286945
  init_ink2();
@@ -286914,7 +286947,7 @@ var import_compiler_runtime43, import_jsx_runtime52, MAX_LINES_TO_RENDER, init_F
286914
286947
  init_MessageResponse();
286915
286948
  init_StructuredDiffList();
286916
286949
  init_stringUtils();
286917
- import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1), MAX_LINES_TO_RENDER = 10;
286950
+ import_jsx_runtime52 = __toESM(require_jsx_runtime()), MAX_LINES_TO_RENDER = 10;
286918
286951
  }
286919
286952
  });
286920
286953
 
@@ -317742,7 +317775,7 @@ function useClaudeAiLimits() {
317742
317775
  }
317743
317776
  var import_react69, init_claudeAiLimitsHook = __esm({
317744
317777
  "build-src/src/services/claudeAiLimitsHook.ts"() {
317745
- import_react69 = __toESM(require_react(), 1);
317778
+ import_react69 = __toESM(require_react());
317746
317779
  init_claudeAiLimits();
317747
317780
  }
317748
317781
  });
@@ -401287,8 +401320,8 @@ var sema_brand_default, init_sema_brand = __esm({
401287
401320
  "Engine 7.24.0 (from 7.22.0)"
401288
401321
  ]
401289
401322
  },
401290
- productVersion: "1.0.80",
401291
- announcement: "sema 1.0.80 \u2014 Engine 7.26.0 (from 7.24.0). Background-agent bookkeeping overhaul: when a background agent's completion notice arrives, its panel row now truly settles (no more rows stuck at 'running' with a climbing timer), and reading a background task's output fails honestly instead of ever wiring you to the wrong host run (client-core 0.31.0, BREAKING for integrators relying on the old fallback). Engine-side reconciliation retires orphaned rows when their publisher dies. Engine warm-swap no longer waits up to 30min on already-finished tasks, and never sends 'killed by engine restart' notices for tasks that had already completed. Memory write instructions now arm automatically on bare host installs \u2014 the MEMORY_PERSISTENCE_CAPABLE workaround from 1.0.79 is no longer needed (explicit settings still win)."
401323
+ productVersion: "1.0.81",
401324
+ announcement: "sema 1.0.81 \u2014 Steering a specific background agent row now resolves through that row's own recorded run (no more silently steering whichever run happens to be active; a stale row fails honestly with a no-run notice instead). Background-notification trust is now graded per acceptance path and kept with the row, so panel rows never flip state on unproven evidence. Under the hood: the self-test fleet gained a port registry with hard guards, so test tooling can never touch a production engine port."
401292
401325
  };
401293
401326
  }
401294
401327
  });
@@ -405498,8 +405531,8 @@ var require_sema_brand = __commonJS({
405498
405531
  "Engine 7.24.0 (from 7.22.0)"
405499
405532
  ]
405500
405533
  },
405501
- productVersion: "1.0.80",
405502
- announcement: "sema 1.0.80 \u2014 Engine 7.26.0 (from 7.24.0). Background-agent bookkeeping overhaul: when a background agent's completion notice arrives, its panel row now truly settles (no more rows stuck at 'running' with a climbing timer), and reading a background task's output fails honestly instead of ever wiring you to the wrong host run (client-core 0.31.0, BREAKING for integrators relying on the old fallback). Engine-side reconciliation retires orphaned rows when their publisher dies. Engine warm-swap no longer waits up to 30min on already-finished tasks, and never sends 'killed by engine restart' notices for tasks that had already completed. Memory write instructions now arm automatically on bare host installs \u2014 the MEMORY_PERSISTENCE_CAPABLE workaround from 1.0.79 is no longer needed (explicit settings still win)."
405534
+ productVersion: "1.0.81",
405535
+ announcement: "sema 1.0.81 \u2014 Steering a specific background agent row now resolves through that row's own recorded run (no more silently steering whichever run happens to be active; a stale row fails honestly with a no-run notice instead). Background-notification trust is now graded per acceptance path and kept with the row, so panel rows never flip state on unproven evidence. Under the hood: the self-test fleet gained a port registry with hard guards, so test tooling can never touch a production engine port."
405503
405536
  };
405504
405537
  }
405505
405538
  });
@@ -496725,7 +496758,7 @@ function _temp158() {
496725
496758
  }
496726
496759
  var import_compiler_runtime308, import_react313, SETTINGS_ERRORS_NOTIFICATION_KEY, init_useSettingsErrors = __esm({
496727
496760
  "build-src/src/hooks/notifs/useSettingsErrors.tsx"() {
496728
- import_compiler_runtime308 = __toESM(require_compiler_runtime()), import_react313 = __toESM(require_react());
496761
+ import_compiler_runtime308 = __toESM(require_compiler_runtime(), 1), import_react313 = __toESM(require_react(), 1);
496729
496762
  init_notifications2();
496730
496763
  init_state();
496731
496764
  init_allErrors();
@@ -500644,7 +500677,7 @@ Error: sandbox required but unavailable: ${reason}
500644
500677
  if (logForDebugging(`onAgentSubmit: task=${task.id} type=${task.type} status=${task.status} engineRow=${isEngineViewRow(task.id)}`), isLocalAgentTask2(task) && isEngineViewRow(task.id)) {
500645
500678
  if (pushSubagentLocalEcho(task.id, input), task.status === "running") {
500646
500679
  let target = parentToolCallIdOf(task.id) || task.id;
500647
- logForDebugging(`onAgentSubmit: steering engine subagent target=${target}`), steerEngineSubagent(target, input).then((outcome) => {
500680
+ logForDebugging(`onAgentSubmit: steering engine subagent target=${target} row=${task.id}`), steerEngineSubagent(target, input, task.id).then((outcome) => {
500648
500681
  logForDebugging(`onAgentSubmit: steer outcome=${JSON.stringify(outcome)}`);
500649
500682
  let steerReason = "reason" in outcome ? outcome.reason : void 0, steerDetail = "detail" in outcome ? outcome.detail : void 0;
500650
500683
  addNotification({
@@ -530659,7 +530692,7 @@ Usage: sema --remote "your task description"`, () => gracefulShutdown(1));
530659
530692
  pendingHookMessages
530660
530693
  }, renderAndRun);
530661
530694
  }
530662
- }).version("sema 1.0.80", "-v, --version", "Output the version number"), program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)"), program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux."), canUserConfigureAdvisor() && program2.addOption(new Option("--advisor <model>", "Enable the server-side advisor tool with the specified model (alias or full ID).").hideHelp()), program2.addOption(new Option("--bg, --background", "Start the session as a background agent and return immediately (manage with `sema agents`)")), program2.command("ps").description("List background sessions").action(async () => {
530695
+ }).version("sema 1.0.81", "-v, --version", "Output the version number"), program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)"), program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux."), canUserConfigureAdvisor() && program2.addOption(new Option("--advisor <model>", "Enable the server-side advisor tool with the specified model (alias or full ID).").hideHelp()), program2.addOption(new Option("--bg, --background", "Start the session as a background agent and return immediately (manage with `sema agents`)")), program2.command("ps").description("List background sessions").action(async () => {
530663
530696
  await (await Promise.resolve().then(() => (init_bg2(), bg_exports))).psHandler([]), process.exit(process.exitCode ?? 0);
530664
530697
  }), program2.command("logs [id]").description("Print a background session's recent terminal output").action(async (id) => {
530665
530698
  await (await Promise.resolve().then(() => (init_bg2(), bg_exports))).logsHandler(id, []), process.exit(process.exitCode ?? 0);
package/sema.js CHANGED
@@ -71,7 +71,7 @@ function installBootSignalTailFrame(argv2 = process.argv.slice(2)) {
71
71
  installBootSignalTailFrame();
72
72
 
73
73
  // build-src/src/sema/preludeEntry.ts
74
- var versionLine = "sema 1.0.80" ? "sema 1.0.80" : "";
74
+ var versionLine = "sema 1.0.81" ? "sema 1.0.81" : "";
75
75
  var argv = process.argv.slice(2);
76
76
  var wantsVersionFastPath = argv.length === 1 && (argv[0] === "--version" || argv[0] === "-v");
77
77
  if (wantsVersionFastPath && versionLine) {