@sema-agent/cli 1.0.27 → 1.0.29

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,16 +1,16 @@
1
1
  {
2
2
  "name": "@sema-agent/cli",
3
- "version": "1.0.27",
3
+ "version": "1.0.29",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sema-agent/cli",
9
- "version": "1.0.27",
9
+ "version": "1.0.29",
10
10
  "license": "BUSL-1.1",
11
11
  "dependencies": {
12
- "@sema-agent/sdk": "0.0.57",
13
- "@sema-agent/server": "1.229.0"
12
+ "@sema-agent/sdk": "0.0.58",
13
+ "@sema-agent/server": "1.230.0"
14
14
  },
15
15
  "bin": {
16
16
  "sema": "sema.js"
@@ -629,9 +629,9 @@
629
629
  }
630
630
  },
631
631
  "node_modules/@sema-agent/core": {
632
- "version": "1.332.0",
633
- "resolved": "https://registry.npmjs.org/@sema-agent/core/-/core-1.332.0.tgz",
634
- "integrity": "sha512-qVwRaPmKXnhlechgcLfD7QM/qrO0DYjn3nE/zQfNiT6sobsH4aOthlvtvJaPQN7efkQsw2Yi7lijneiu9k//Gw==",
632
+ "version": "1.333.0",
633
+ "resolved": "https://registry.npmjs.org/@sema-agent/core/-/core-1.333.0.tgz",
634
+ "integrity": "sha512-tZBdXwFo4pLz7NbsOMEGp4ilm+zIX9s4lD/T67aBkEYm8l38vl+fR5Ht2yJbaT6HOMBWyhSZNEU8mVD+N5K/ww==",
635
635
  "license": "BUSL-1.1",
636
636
  "dependencies": {
637
637
  "@modelcontextprotocol/sdk": "1.29.0",
@@ -669,21 +669,21 @@
669
669
  }
670
670
  },
671
671
  "node_modules/@sema-agent/sdk": {
672
- "version": "0.0.57",
673
- "resolved": "https://registry.npmjs.org/@sema-agent/sdk/-/sdk-0.0.57.tgz",
674
- "integrity": "sha512-fHNaPVooeYA5CTDUWbX5kjId09nDxSq7OcelW7OmFH3qJwRssdIFiU9GKhYao037v/KOCwF2ommWxQBllgNm7w==",
672
+ "version": "0.0.58",
673
+ "resolved": "https://registry.npmjs.org/@sema-agent/sdk/-/sdk-0.0.58.tgz",
674
+ "integrity": "sha512-F9y2lgmaNImqHKfYNUd7jIM1TnRrnHcRAOn+aJhP3u3556jL2yVYUepAMExFd9ioq06Eyqg4cZF+aaok94bPLw==",
675
675
  "license": "BUSL-1.1",
676
676
  "engines": {
677
677
  "node": ">=20"
678
678
  }
679
679
  },
680
680
  "node_modules/@sema-agent/server": {
681
- "version": "1.229.0",
682
- "resolved": "https://registry.npmjs.org/@sema-agent/server/-/server-1.229.0.tgz",
683
- "integrity": "sha512-IXBD3PIHyCkcerzEI0cajyD80dll8itTzZ6UMED09Vu+r5L/FSywYNvlI66abut8s0sQKi0QHz4kJGOJ0lwobQ==",
681
+ "version": "1.230.0",
682
+ "resolved": "https://registry.npmjs.org/@sema-agent/server/-/server-1.230.0.tgz",
683
+ "integrity": "sha512-Thg7T8GxxdaNAX4SdhVtK3qPQNyxlROUlboX/tgTFcQGgo67t+EbvXeOYbOqQTart9gwFd4cyCDnm9OohwZi5Q==",
684
684
  "license": "BUSL-1.1",
685
685
  "dependencies": {
686
- "@sema-agent/core": "^1.329.0",
686
+ "@sema-agent/core": "^1.330.0",
687
687
  "@sema-agent/registry-core": "^0.10.16",
688
688
  "e2b": "^2.28.0",
689
689
  "libsodium-wrappers": "^0.8.4",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/cli",
3
- "version": "1.0.27",
3
+ "version": "1.0.29",
4
4
  "description": "Sema — your own Claude Code-grade coding agent, in the terminal.",
5
5
  "license": "BUSL-1.1",
6
6
  "bin": {
@@ -21,14 +21,14 @@
21
21
  "sema"
22
22
  ],
23
23
  "dependencies": {
24
- "@sema-agent/sdk": "0.0.57",
25
- "@sema-agent/server": "1.229.0"
24
+ "@sema-agent/sdk": "0.0.58",
25
+ "@sema-agent/server": "1.230.0"
26
26
  },
27
27
  "overrides": {
28
- "@sema-agent/core": "1.332.0",
28
+ "@sema-agent/core": "1.333.0",
29
29
  "@sema-agent/registry-core": "0.10.19"
30
30
  },
31
- "semaEngineVersion": "server 1.229.0 / core 1.332.0 / registry-core 0.10.19",
31
+ "semaEngineVersion": "server 1.230.0 / core 1.333.0 / registry-core 0.10.19",
32
32
  "engines": {
33
33
  "node": ">=18"
34
34
  }
package/sema.js CHANGED
@@ -157603,16 +157603,22 @@ function extraDeferFromEnv(env5) {
157603
157603
  if (typeof raw2 !== "string" || raw2.trim().length === 0) return [];
157604
157604
  return raw2.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
157605
157605
  }
157606
+ function lowFreqOptedOut(env5) {
157607
+ const raw2 = env5[DEFER_LOWFREQ_ENV];
157608
+ const s = typeof raw2 === "string" ? raw2.trim().toLowerCase() : "";
157609
+ return s === "0" || s === "false" || s === "no" || s === "off";
157610
+ }
157606
157611
  function deferToolsForRequest(humanInput, env5 = process.env) {
157607
157612
  const workflowLane = workflowDeferForRequest(humanInput, env5) ?? [];
157613
+ const lowFreqLane = lowFreqOptedOut(env5) ? [] : DEFAULT_LOWFREQ_DEFER;
157608
157614
  const extra = extraDeferFromEnv(env5).filter(
157609
157615
  (name) => name !== "Workflow" || workflowLane.length > 0
157610
157616
  // activation wins over the env list for Workflow
157611
157617
  );
157612
- const merged = [.../* @__PURE__ */ new Set([...workflowLane, ...extra])];
157618
+ const merged = [.../* @__PURE__ */ new Set([...workflowLane, ...lowFreqLane, ...extra])];
157613
157619
  return merged.length > 0 ? merged : void 0;
157614
157620
  }
157615
- var ultracodePreset, ULTRACODE_KEYWORD, WORKFLOW_KEYWORD, WORKFLOW_DEFER_ENV, DEFER_TOOLS_ENV;
157621
+ var ultracodePreset, ULTRACODE_KEYWORD, WORKFLOW_KEYWORD, WORKFLOW_DEFER_ENV, DEFER_TOOLS_ENV, DEFER_LOWFREQ_ENV, DEFAULT_LOWFREQ_DEFER;
157616
157622
  var init_ultracodeWireCaps = __esm({
157617
157623
  "build-src/src/sema/ultracodeWireCaps.ts"() {
157618
157624
  ultracodePreset = false;
@@ -157620,6 +157626,18 @@ var init_ultracodeWireCaps = __esm({
157620
157626
  WORKFLOW_KEYWORD = /\bworkflows?\b/i;
157621
157627
  WORKFLOW_DEFER_ENV = "SEMA_WORKFLOW_DEFER";
157622
157628
  DEFER_TOOLS_ENV = "SEMA_DEFER_TOOLS";
157629
+ DEFER_LOWFREQ_ENV = "SEMA_DEFER_LOWFREQ";
157630
+ DEFAULT_LOWFREQ_DEFER = [
157631
+ "Glob",
157632
+ "Grep",
157633
+ "LSP",
157634
+ "RepoMap",
157635
+ "Monitor",
157636
+ "Now",
157637
+ "AgentTranscript",
157638
+ "ReadToolResult",
157639
+ "ReportBlocked"
157640
+ ];
157623
157641
  }
157624
157642
  });
157625
157643
 
@@ -331916,9 +331934,9 @@ function streamingTailWrap(unstableSuffix) {
331916
331934
  var import_compiler_runtime43, import_react43, import_jsx_runtime53, TOKEN_CACHE_MAX, tokenCache, MD_SYNTAX_RE;
331917
331935
  var init_Markdown = __esm({
331918
331936
  "build-src/src/components/Markdown.tsx"() {
331919
- import_compiler_runtime43 = __toESM(require_compiler_runtime(), 1);
331937
+ import_compiler_runtime43 = __toESM(require_compiler_runtime());
331920
331938
  init_marked_esm();
331921
- import_react43 = __toESM(require_react(), 1);
331939
+ import_react43 = __toESM(require_react());
331922
331940
  init_useSettings();
331923
331941
  init_ink2();
331924
331942
  init_cliHighlight();
@@ -331926,7 +331944,7 @@ var init_Markdown = __esm({
331926
331944
  init_markdown();
331927
331945
  init_messages4();
331928
331946
  init_MarkdownTable();
331929
- import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
331947
+ import_jsx_runtime53 = __toESM(require_jsx_runtime());
331930
331948
  TOKEN_CACHE_MAX = 500;
331931
331949
  tokenCache = /* @__PURE__ */ new Map();
331932
331950
  MD_SYNTAX_RE = /[#*`|[>\-_~]|\n\n|^\d+\. |\n\d+\. /;
@@ -353795,7 +353813,7 @@ function useClaudeAiLimits() {
353795
353813
  var import_react64;
353796
353814
  var init_claudeAiLimitsHook = __esm({
353797
353815
  "build-src/src/services/claudeAiLimitsHook.ts"() {
353798
- import_react64 = __toESM(require_react());
353816
+ import_react64 = __toESM(require_react(), 1);
353799
353817
  init_claudeAiLimits();
353800
353818
  }
353801
353819
  });
@@ -430185,10 +430203,9 @@ var init_engineLogSweep = __esm({
430185
430203
 
430186
430204
  // build-src/src/sema/cloudProfile.ts
430187
430205
  import { existsSync as existsSync15, mkdirSync as mkdirSync12, readFileSync as readFileSync25, writeFileSync as writeFileSync12, chmodSync as chmodSync4 } from "fs";
430188
- import { homedir as homedir31 } from "os";
430189
430206
  import { join as join119, dirname as dirname55 } from "path";
430190
430207
  function cloudDir() {
430191
- return join119(homedir31(), ".sema", "cloud");
430208
+ return join119(getClaudeConfigHomeDir(), "cloud");
430192
430209
  }
430193
430210
  function profilesPath() {
430194
430211
  return join119(cloudDir(), "profiles.json");
@@ -430272,6 +430289,7 @@ function jwtExpiryMs(token) {
430272
430289
  }
430273
430290
  var init_cloudProfile = __esm({
430274
430291
  "build-src/src/sema/cloudProfile.ts"() {
430292
+ init_envUtils();
430275
430293
  }
430276
430294
  });
430277
430295
 
@@ -435699,7 +435717,7 @@ var init_projectOnboardingState = __esm({
435699
435717
 
435700
435718
  // build-src/src/utils/appleTerminalBackup.ts
435701
435719
  import { stat as stat35 } from "fs/promises";
435702
- import { homedir as homedir32 } from "os";
435720
+ import { homedir as homedir31 } from "os";
435703
435721
  import { join as join123 } from "path";
435704
435722
  function markTerminalSetupInProgress(backupPath) {
435705
435723
  saveGlobalConfig((current3) => ({
@@ -435722,7 +435740,7 @@ function getTerminalRecoveryInfo() {
435722
435740
  };
435723
435741
  }
435724
435742
  function getTerminalPlistPath() {
435725
- return join123(homedir32(), "Library", "Preferences", "com.apple.Terminal.plist");
435743
+ return join123(homedir31(), "Library", "Preferences", "com.apple.Terminal.plist");
435726
435744
  }
435727
435745
  async function backupTerminalPreferences() {
435728
435746
  const terminalPlistPath = getTerminalPlistPath();
@@ -435799,11 +435817,11 @@ var init_appleTerminalBackup = __esm({
435799
435817
  });
435800
435818
 
435801
435819
  // build-src/src/utils/completionCache.ts
435802
- import { homedir as homedir33 } from "os";
435820
+ import { homedir as homedir32 } from "os";
435803
435821
  import { dirname as dirname58, join as join124 } from "path";
435804
435822
  function detectShell() {
435805
435823
  const shell = process.env.SHELL || "";
435806
- const home = homedir33();
435824
+ const home = homedir32();
435807
435825
  const claudeDir = join124(home, ".sema");
435808
435826
  if (shell.endsWith("/zsh") || shell.endsWith("/zsh.exe")) {
435809
435827
  const cacheFile = join124(claudeDir, "completion.zsh");
@@ -435885,7 +435903,7 @@ __export(terminalSetup_exports, {
435885
435903
  });
435886
435904
  import { randomBytes as randomBytes16 } from "crypto";
435887
435905
  import { copyFile as copyFile8, mkdir as mkdir31, readFile as readFile35, writeFile as writeFile31 } from "fs/promises";
435888
- import { homedir as homedir34, platform as platform3 } from "os";
435906
+ import { homedir as homedir33, platform as platform3 } from "os";
435889
435907
  import { dirname as dirname59, join as join125 } from "path";
435890
435908
  import { pathToFileURL as pathToFileURL8 } from "url";
435891
435909
  function isVSCodeRemoteSSH() {
@@ -436019,7 +436037,7 @@ async function installBindingsForVSCodeTerminal(editor = "VSCode", theme2) {
436019
436037
  ]`)}${EOL6}`;
436020
436038
  }
436021
436039
  const editorDir = editor === "VSCode" ? "Code" : editor;
436022
- const userDirPath = join125(homedir34(), platform3() === "win32" ? join125("AppData", "Roaming", editorDir, "User") : platform3() === "darwin" ? join125("Library", "Application Support", editorDir, "User") : join125(".config", editorDir, "User"));
436040
+ const userDirPath = join125(homedir33(), platform3() === "win32" ? join125("AppData", "Roaming", editorDir, "User") : platform3() === "darwin" ? join125("Library", "Application Support", editorDir, "User") : join125(".config", editorDir, "User"));
436023
436041
  const keybindingsPath = join125(userDirPath, "keybindings.json");
436024
436042
  try {
436025
436043
  await mkdir31(userDirPath, {
@@ -436162,7 +436180,7 @@ chars = "\\u001B\\r"`;
436162
436180
  if (xdgConfigHome) {
436163
436181
  configPaths.push(join125(xdgConfigHome, "alacritty", "alacritty.toml"));
436164
436182
  } else {
436165
- configPaths.push(join125(homedir34(), ".config", "alacritty", "alacritty.toml"));
436183
+ configPaths.push(join125(homedir33(), ".config", "alacritty", "alacritty.toml"));
436166
436184
  }
436167
436185
  if (platform3() === "win32") {
436168
436186
  const appData = process.env.APPDATA;
@@ -436223,7 +436241,7 @@ chars = "\\u001B\\r"`;
436223
436241
  }
436224
436242
  }
436225
436243
  async function installBindingsForZed(theme2) {
436226
- const zedDir = join125(homedir34(), ".config", "zed");
436244
+ const zedDir = join125(homedir33(), ".config", "zed");
436227
436245
  const keymapPath = join125(zedDir, "keymap.json");
436228
436246
  try {
436229
436247
  await mkdir31(zedDir, {
@@ -440209,10 +440227,10 @@ var cd_exports = {};
440209
440227
  __export(cd_exports, {
440210
440228
  call: () => call7
440211
440229
  });
440212
- import { homedir as homedir35 } from "os";
440230
+ import { homedir as homedir34 } from "os";
440213
440231
  import { dirname as dirname61, isAbsolute as isAbsolute29, join as join129, resolve as resolve39 } from "path";
440214
440232
  function checkTargetDirectory(input) {
440215
- const expanded = input === "~" ? homedir35() : input.startsWith("~/") ? join129(homedir35(), input.slice(2)) : input;
440233
+ const expanded = input === "~" ? homedir34() : input.startsWith("~/") ? join129(homedir34(), input.slice(2)) : input;
440216
440234
  const resolved = isAbsolute29(expanded) ? expanded : resolve39(getCwd(), expanded);
440217
440235
  const fs15 = getFsImplementation();
440218
440236
  let isDirectory;
@@ -450734,7 +450752,7 @@ function Settings({
450734
450752
  var import_react113, import_jsx_runtime192;
450735
450753
  var init_cmd_config = __esm({
450736
450754
  "build-src/src/sema/overrides/cmd-config.tsx"() {
450737
- import_react113 = __toESM(require_react());
450755
+ import_react113 = __toESM(require_react(), 1);
450738
450756
  init_useKeybinding();
450739
450757
  init_useExitOnCtrlCDWithKeybindings();
450740
450758
  init_useTerminalSize();
@@ -450745,7 +450763,7 @@ var init_cmd_config = __esm({
450745
450763
  init_Config();
450746
450764
  init_settings_usage();
450747
450765
  init_Stats();
450748
- import_jsx_runtime192 = __toESM(require_jsx_runtime());
450766
+ import_jsx_runtime192 = __toESM(require_jsx_runtime(), 1);
450749
450767
  }
450750
450768
  });
450751
450769
 
@@ -453947,10 +453965,10 @@ var init_promptEditor = __esm({
453947
453965
  });
453948
453966
 
453949
453967
  // build-src/src/components/memory/MemoryUpdateNotification.tsx
453950
- import { homedir as homedir36 } from "os";
453968
+ import { homedir as homedir35 } from "os";
453951
453969
  import { relative as relative23 } from "path";
453952
453970
  function getRelativeMemoryPath(path27) {
453953
- const homeDir = homedir36();
453971
+ const homeDir = homedir35();
453954
453972
  const cwd5 = getCwd();
453955
453973
  const relativeToHome = path27.startsWith(homeDir) ? "~" + path27.slice(homeDir.length) : null;
453956
453974
  const relativeToCwd = path27.startsWith(cwd5) ? "./" + relative23(cwd5, path27) : null;
@@ -463061,7 +463079,7 @@ var init_pluginStartupCheck = __esm({
463061
463079
  });
463062
463080
 
463063
463081
  // build-src/src/utils/plugins/parseMarketplaceInput.ts
463064
- import { homedir as homedir37 } from "os";
463082
+ import { homedir as homedir36 } from "os";
463065
463083
  import { resolve as resolve41 } from "path";
463066
463084
  async function parseMarketplaceInput(input) {
463067
463085
  const trimmed = input.trim();
@@ -463100,7 +463118,7 @@ async function parseMarketplaceInput(input) {
463100
463118
  const isWindowsPath = isWindows2 && (trimmed.startsWith(".\\") || trimmed.startsWith("..\\") || /^[a-zA-Z]:[/\\]/.test(trimmed));
463101
463119
  if (trimmed.startsWith("./") || trimmed.startsWith("../") || trimmed.startsWith("/") || trimmed.startsWith("~") || isWindowsPath) {
463102
463120
  const resolvedPath = resolve41(
463103
- trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir37()) : trimmed
463121
+ trimmed.startsWith("~") ? trimmed.replace(/^~/, homedir36()) : trimmed
463104
463122
  );
463105
463123
  let stats3;
463106
463124
  try {
@@ -478208,7 +478226,7 @@ var init_referral = __esm({
478208
478226
  });
478209
478227
 
478210
478228
  // build-src/src/components/LogoV2/feedConfigs.tsx
478211
- import { homedir as homedir38 } from "os";
478229
+ import { homedir as homedir37 } from "os";
478212
478230
  function createSemaGetStartedFeed() {
478213
478231
  return {
478214
478232
  title: "Get started with Sema",
@@ -478255,7 +478273,7 @@ function createProjectOnboardingFeed(steps) {
478255
478273
  text: `${checkmark}${text2}`
478256
478274
  };
478257
478275
  });
478258
- const warningText = getCwd() === homedir38() ? "Note: sema is running in your home directory \u2014 launch it inside a project directory for the best experience." : void 0;
478276
+ const warningText = getCwd() === homedir37() ? "Note: sema is running in your home directory \u2014 launch it inside a project directory for the best experience." : void 0;
478259
478277
  if (warningText) {
478260
478278
  lines.push({
478261
478279
  text: warningText
@@ -479612,8 +479630,8 @@ var init_sema_brand = __esm({
479612
479630
  "Slash-command gating wired to the fleet capability handshake"
479613
479631
  ]
479614
479632
  },
479615
- productVersion: "1.0.27",
479616
- announcement: "sema 1.0.27 \u2014 named sub-agents grow a full lifecycle: messages to a resumed agent now deliver for real (honest queued/parked receipts), stopping one kills the right incarnation, and no stale output leaks across resume cycles."
479633
+ productVersion: "1.0.29",
479634
+ announcement: "sema 1.0.29 \u2014 nine rarely-used tools (Glob, Grep, LSP, RepoMap, Monitor, Now, AgentTranscript, ReadToolResult, ReportBlocked) now load lazily by default: their schemas stay out of your prompt (about 2.5K tokens leaner) and the model fetches any of them on demand via ToolSearch. Opt out with SEMA_DEFER_LOWFREQ=0."
479617
479635
  };
479618
479636
  }
479619
479637
  });
@@ -482547,8 +482565,8 @@ var require_sema_brand = __commonJS({
482547
482565
  "Slash-command gating wired to the fleet capability handshake"
482548
482566
  ]
482549
482567
  },
482550
- productVersion: "1.0.27",
482551
- announcement: "sema 1.0.27 \u2014 named sub-agents grow a full lifecycle: messages to a resumed agent now deliver for real (honest queued/parked receipts), stopping one kills the right incarnation, and no stale output leaks across resume cycles."
482568
+ productVersion: "1.0.29",
482569
+ announcement: "sema 1.0.29 \u2014 nine rarely-used tools (Glob, Grep, LSP, RepoMap, Monitor, Now, AgentTranscript, ReadToolResult, ReportBlocked) now load lazily by default: their schemas stay out of your prompt (about 2.5K tokens leaner) and the model fetches any of them on demand via ToolSearch. Opt out with SEMA_DEFER_LOWFREQ=0."
482552
482570
  };
482553
482571
  }
482554
482572
  });
@@ -483675,7 +483693,7 @@ __export(importSessions_exports, {
483675
483693
  importSessionsHandler: () => importSessionsHandler,
483676
483694
  listImportable: () => listImportable
483677
483695
  });
483678
- import { homedir as homedir39 } from "node:os";
483696
+ import { homedir as homedir38 } from "node:os";
483679
483697
  import {
483680
483698
  copyFileSync as copyFileSync4,
483681
483699
  existsSync as existsSync18,
@@ -483807,7 +483825,7 @@ function copySession(item, destDir) {
483807
483825
  async function importSessionsHandler(opts) {
483808
483826
  const cwd5 = canonicalCwd();
483809
483827
  const slug = sanitizePath(cwd5);
483810
- const srcDir = opts.from ? opts.from : join146(homedir39(), LEGACY_DIR, "projects", slug);
483828
+ const srcDir = opts.from ? opts.from : join146(homedir38(), LEGACY_DIR, "projects", slug);
483811
483829
  const destDir = join146(getProjectsDir(), slug);
483812
483830
  let srcReal = srcDir;
483813
483831
  try {
@@ -483929,7 +483947,7 @@ var init_importSessions = __esm({
483929
483947
 
483930
483948
  // build-src/src/sema/ccImport.ts
483931
483949
  import { existsSync as existsSync19, mkdirSync as mkdirSync16, realpathSync as realpathSync8 } from "node:fs";
483932
- import { homedir as homedir40 } from "node:os";
483950
+ import { homedir as homedir39 } from "node:os";
483933
483951
  import { join as join147 } from "node:path";
483934
483952
  function markCcImportLog(log2) {
483935
483953
  ;
@@ -483950,7 +483968,7 @@ function canonicalize2(p) {
483950
483968
  }
483951
483969
  }
483952
483970
  function ccProjectsDirFor(cwd5) {
483953
- const base = join147(homedir40(), LEGACY_DIR2, "projects");
483971
+ const base = join147(homedir39(), LEGACY_DIR2, "projects");
483954
483972
  for (const candidate of [cwd5, canonicalize2(cwd5)]) {
483955
483973
  const dir = join147(base, sanitizePath(candidate));
483956
483974
  if (existsSync19(dir)) return dir;
@@ -510983,7 +511001,7 @@ var init_setupPortable = __esm({
510983
511001
 
510984
511002
  // build-src/src/utils/claudeInChrome/setup.ts
510985
511003
  import { chmod as chmod12, mkdir as mkdir41, readFile as readFile47, writeFile as writeFile44 } from "fs/promises";
510986
- import { homedir as homedir41 } from "os";
511004
+ import { homedir as homedir40 } from "os";
510987
511005
  import { join as join155 } from "path";
510988
511006
  import { fileURLToPath as fileURLToPath8 } from "url";
510989
511007
  function shouldEnableClaudeInChrome(chromeFlag) {
@@ -511081,7 +511099,7 @@ function setupClaudeInChrome() {
511081
511099
  function getNativeMessagingHostsDirs() {
511082
511100
  const platform4 = getPlatform();
511083
511101
  if (platform4 === "windows") {
511084
- const home = homedir41();
511102
+ const home = homedir40();
511085
511103
  const appData = process.env.APPDATA || join155(home, "AppData", "Local");
511086
511104
  return [join155(appData, "Sema", "ChromeNativeHost")];
511087
511105
  }
@@ -521533,7 +521551,7 @@ var init_agentMemory = __esm({
521533
521551
 
521534
521552
  // build-src/src/utils/permissions/filesystem.ts
521535
521553
  import { randomBytes as randomBytes20 } from "crypto";
521536
- import { homedir as homedir42, tmpdir as tmpdir14 } from "os";
521554
+ import { homedir as homedir41, tmpdir as tmpdir14 } from "os";
521537
521555
  import { join as join163, normalize as normalize17, posix as posix8, sep as sep34 } from "path";
521538
521556
  function normalizeCaseForComparison2(path27) {
521539
521557
  return path27.toLowerCase();
@@ -521547,7 +521565,7 @@ function getClaudeSkillScope(filePath) {
521547
521565
  prefix: "/.sema/skills/"
521548
521566
  },
521549
521567
  {
521550
- dir: expandPath(join163(homedir42(), ".sema", "skills")),
521568
+ dir: expandPath(join163(homedir41(), ".sema", "skills")),
521551
521569
  prefix: "~/.sema/skills/"
521552
521570
  }
521553
521571
  ];
@@ -521877,7 +521895,7 @@ function patternWithRoot(pattern, source) {
521877
521895
  } else if (pattern.startsWith(`~${DIR_SEP}`)) {
521878
521896
  return {
521879
521897
  relativePattern: pattern.slice(1),
521880
- root: homedir42().normalize("NFC")
521898
+ root: homedir41().normalize("NFC")
521881
521899
  };
521882
521900
  } else if (pattern.startsWith(DIR_SEP)) {
521883
521901
  return {
@@ -534386,7 +534404,7 @@ __export(markdownConfigLoader_exports, {
534386
534404
  });
534387
534405
  import { statSync as statSync11 } from "fs";
534388
534406
  import { lstat as lstat6, readdir as readdir31, readFile as readFile51, realpath as realpath12, stat as stat45 } from "fs/promises";
534389
- import { homedir as homedir43 } from "os";
534407
+ import { homedir as homedir42 } from "os";
534390
534408
  import { dirname as dirname73, join as join166, resolve as resolve44, sep as sep35 } from "path";
534391
534409
  function extractDescriptionFromMarkdown(content, defaultDescription = "Custom item") {
534392
534410
  const lines = content.split("\n");
@@ -534470,7 +534488,7 @@ function resolveStopBoundary(cwd5) {
534470
534488
  return cwdGitRoot;
534471
534489
  }
534472
534490
  function getProjectDirsUpToHome(subdir, cwd5) {
534473
- const home = resolve44(homedir43()).normalize("NFC");
534491
+ const home = resolve44(homedir42()).normalize("NFC");
534474
534492
  const gitRoot = resolveStopBoundary(cwd5);
534475
534493
  let current3 = resolve44(cwd5);
534476
534494
  const dirs = [];
@@ -562875,7 +562893,7 @@ __export(upstreamproxy_exports, {
562875
562893
  resetUpstreamProxyForTests: () => resetUpstreamProxyForTests
562876
562894
  });
562877
562895
  import { mkdir as mkdir47, readFile as readFile52, unlink as unlink26, writeFile as writeFile47 } from "fs/promises";
562878
- import { homedir as homedir44 } from "os";
562896
+ import { homedir as homedir43 } from "os";
562879
562897
  import { join as join169 } from "path";
562880
562898
  async function initUpstreamProxy(opts) {
562881
562899
  if (!isEnvTruthy(process.env.SEMA_CODE_REMOTE)) {
@@ -562900,7 +562918,7 @@ async function initUpstreamProxy(opts) {
562900
562918
  }
562901
562919
  setNonDumpable();
562902
562920
  const baseUrl = opts?.ccrBaseUrl ?? process.env.ANTHROPIC_BASE_URL ?? "https://api.anthropic.com";
562903
- const caBundlePath = opts?.caBundlePath ?? join169(homedir44(), ".ccr", "ca-bundle.crt");
562921
+ const caBundlePath = opts?.caBundlePath ?? join169(homedir43(), ".ccr", "ca-bundle.crt");
562904
562922
  const caOk = await downloadCaBundle(
562905
562923
  baseUrl,
562906
562924
  opts?.systemCaPath ?? SYSTEM_CA_BUNDLE,
@@ -574262,7 +574280,7 @@ var init_ShowInIDEPrompt = __esm({
574262
574280
  });
574263
574281
 
574264
574282
  // build-src/src/components/permissions/FilePermissionDialog/permissionOptions.tsx
574265
- import { homedir as homedir45 } from "os";
574283
+ import { homedir as homedir44 } from "os";
574266
574284
  import { basename as basename53, join as join170, sep as sep36 } from "path";
574267
574285
  function isInClaudeFolder(filePath) {
574268
574286
  const absolutePath = expandPath(filePath);
@@ -574274,7 +574292,7 @@ function isInClaudeFolder(filePath) {
574274
574292
  }
574275
574293
  function isInGlobalClaudeFolder(filePath) {
574276
574294
  const absolutePath = expandPath(filePath);
574277
- const globalClaudeFolderPath = join170(homedir45(), ".sema");
574295
+ const globalClaudeFolderPath = join170(homedir44(), ".sema");
574278
574296
  const normalizedAbsolutePath = normalizeCaseForComparison2(absolutePath);
574279
574297
  const normalizedGlobalClaudeFolderPath = normalizeCaseForComparison2(globalClaudeFolderPath);
574280
574298
  return normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + sep36.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalClaudeFolderPath + "/");
@@ -582295,7 +582313,7 @@ var init_chrome_context_window_warning = __esm({
582295
582313
  init_autoCompact();
582296
582314
  init_compactWarningHook();
582297
582315
  init_contextWindowUpgradeCheck();
582298
- import_jsx_runtime411 = __toESM(require_jsx_runtime(), 1);
582316
+ import_jsx_runtime411 = __toESM(require_jsx_runtime());
582299
582317
  }
582300
582318
  });
582301
582319
 
@@ -596943,7 +596961,7 @@ var init_autoDream = __esm({
596943
596961
 
596944
596962
  // build-src/src/utils/cleanup.ts
596945
596963
  import * as fs14 from "fs/promises";
596946
- import { homedir as homedir46 } from "os";
596964
+ import { homedir as homedir45 } from "os";
596947
596965
  import { join as join171 } from "path";
596948
596966
  function getCleanupPeriodDays() {
596949
596967
  const settings2 = getSettings_DEPRECATED() || {};
@@ -597362,7 +597380,7 @@ async function cleanupNpmCacheForAnthropicPackages() {
597362
597380
  return;
597363
597381
  }
597364
597382
  logForDebugging("npm cache cleanup: starting");
597365
- const npmCachePath = join171(homedir46(), ".npm", "_cacache");
597383
+ const npmCachePath = join171(homedir45(), ".npm", "_cacache");
597366
597384
  const NPM_CACHE_RETENTION_COUNT = 5;
597367
597385
  const startTime = Date.now();
597368
597386
  try {
@@ -624152,7 +624170,7 @@ var init_sessionMemory = __esm({
624152
624170
 
624153
624171
  // build-src/src/utils/iTermBackup.ts
624154
624172
  import { copyFile as copyFile11, stat as stat49 } from "fs/promises";
624155
- import { homedir as homedir47 } from "os";
624173
+ import { homedir as homedir46 } from "os";
624156
624174
  import { join as join181 } from "path";
624157
624175
  function markITerm2SetupComplete() {
624158
624176
  saveGlobalConfig((current3) => ({
@@ -624169,7 +624187,7 @@ function getIterm2RecoveryInfo() {
624169
624187
  }
624170
624188
  function getITerm2PlistPath() {
624171
624189
  return join181(
624172
- homedir47(),
624190
+ homedir46(),
624173
624191
  "Library",
624174
624192
  "Preferences",
624175
624193
  "com.googlecode.iterm2.plist"
@@ -638534,7 +638552,7 @@ __export(claudeDesktop_exports, {
638534
638552
  readClaudeDesktopMcpServers: () => readClaudeDesktopMcpServers
638535
638553
  });
638536
638554
  import { readdir as readdir32, readFile as readFile57, stat as stat52 } from "fs/promises";
638537
- import { homedir as homedir48 } from "os";
638555
+ import { homedir as homedir47 } from "os";
638538
638556
  import { join as join186 } from "path";
638539
638557
  async function getClaudeDesktopConfigPath() {
638540
638558
  const platform4 = getPlatform();
@@ -638545,7 +638563,7 @@ async function getClaudeDesktopConfigPath() {
638545
638563
  }
638546
638564
  if (platform4 === "macos") {
638547
638565
  return join186(
638548
- homedir48(),
638566
+ homedir47(),
638549
638567
  "Library",
638550
638568
  "Application Support",
638551
638569
  "Claude",
@@ -640764,7 +640782,7 @@ __export(tlsTrust_exports, {
640764
640782
  import { execFileSync as execFileSync5 } from "node:child_process";
640765
640783
  import { X509Certificate } from "node:crypto";
640766
640784
  import { existsSync as existsSync26, mkdirSync as mkdirSync19, readFileSync as readFileSync39, writeFileSync as writeFileSync18 } from "node:fs";
640767
- import { homedir as homedir49 } from "node:os";
640785
+ import { homedir as homedir48 } from "node:os";
640768
640786
  import { join as join187 } from "node:path";
640769
640787
  function isCertError(detail) {
640770
640788
  return /UNABLE_TO_GET_ISSUER_CERT|SELF_SIGNED_CERT|UNABLE_TO_VERIFY_LEAF|CERT_UNTRUSTED|DEPTH_ZERO_SELF_SIGNED|CERT_HAS_EXPIRED|ERR_TLS_CERT/i.test(
@@ -640859,7 +640877,7 @@ async function applySystemTlsTrust() {
640859
640877
  }
640860
640878
  const kept = filterCaCertificates(pem);
640861
640879
  if (kept.length === 0) return false;
640862
- mkdirSync19(join187(homedir49(), ".sema"), { recursive: true });
640880
+ mkdirSync19(join187(homedir48(), ".sema"), { recursive: true });
640863
640881
  writeFileSync18(CA_PATH, kept.join("\n") + "\n");
640864
640882
  await injectDispatcher(kept);
640865
640883
  return true;
@@ -640870,7 +640888,7 @@ async function applySystemTlsTrust() {
640870
640888
  var CA_PATH, builtinRootBodies;
640871
640889
  var init_tlsTrust = __esm({
640872
640890
  "build-src/src/sema/tlsTrust.ts"() {
640873
- CA_PATH = join187(homedir49(), ".sema", "extra-ca.pem");
640891
+ CA_PATH = join187(homedir48(), ".sema", "extra-ca.pem");
640874
640892
  }
640875
640893
  });
640876
640894
 
@@ -645993,10 +646011,10 @@ var install_exports = {};
645993
646011
  __export(install_exports, {
645994
646012
  install: () => install
645995
646013
  });
645996
- import { homedir as homedir50 } from "node:os";
646014
+ import { homedir as homedir49 } from "node:os";
645997
646015
  function getInstallationPath2(realPath) {
645998
646016
  const isWindows2 = env3.platform === "win32";
645999
- const homeDir = homedir50();
646017
+ const homeDir = homedir49();
646000
646018
  if (isWindows2) {
646001
646019
  return realPath.replace(/\//g, "\\");
646002
646020
  }
@@ -647184,7 +647202,7 @@ var configSync_exports = {};
647184
647202
  __export(configSync_exports, {
647185
647203
  configSyncHandler: () => configSyncHandler
647186
647204
  });
647187
- import { homedir as homedir51 } from "node:os";
647205
+ import { homedir as homedir50 } from "node:os";
647188
647206
  import {
647189
647207
  copyFileSync as copyFileSync6,
647190
647208
  existsSync as existsSync30,
@@ -647195,7 +647213,7 @@ import {
647195
647213
  } from "node:fs";
647196
647214
  import { dirname as dirname85, join as join193, relative as relative36 } from "node:path";
647197
647215
  function display(p) {
647198
- const home = homedir51();
647216
+ const home = homedir50();
647199
647217
  return p.startsWith(home) ? "~" + p.slice(home.length) : p;
647200
647218
  }
647201
647219
  function filesEqual(a, b3) {
@@ -647425,7 +647443,7 @@ async function configSyncHandler(opts) {
647425
647443
  const dryTag = opts.dryRun ? source_default.yellow(" [dry-run]") : "";
647426
647444
  process.stdout.write(source_default.bold(`sema config sync${dryTag}
647427
647445
  `));
647428
- const userSrc = join193(homedir51(), LEGACY_DIR3);
647446
+ const userSrc = join193(homedir50(), LEGACY_DIR3);
647429
647447
  const userDest = getClaudeConfigHomeDir();
647430
647448
  process.stdout.write(
647431
647449
  source_default.bold(`
@@ -647445,7 +647463,7 @@ user: ${display(userSrc)} \u2192 ${display(userDest)}
647445
647463
  opts,
647446
647464
  report
647447
647465
  );
647448
- const globalSrc = join193(homedir51(), LEGACY_GLOBAL_FILE);
647466
+ const globalSrc = join193(homedir50(), LEGACY_GLOBAL_FILE);
647449
647467
  const globalDest = getGlobalClaudeFile();
647450
647468
  if (existsSync30(globalSrc) && globalSrc !== globalDest) {
647451
647469
  syncJsonFile(globalSrc, globalDest, display(globalDest), opts, report);
@@ -647560,7 +647578,7 @@ __export(importCredentials_exports, {
647560
647578
  });
647561
647579
  import { execFileSync as execFileSync7 } from "node:child_process";
647562
647580
  import { readFileSync as readFileSync44 } from "node:fs";
647563
- import { homedir as homedir52, userInfo as userInfo4 } from "node:os";
647581
+ import { homedir as homedir51, userInfo as userInfo4 } from "node:os";
647564
647582
  import { join as join194 } from "node:path";
647565
647583
  function readCcKeychain() {
647566
647584
  if (process.platform !== "darwin") return null;
@@ -647583,7 +647601,7 @@ function readCcFile(ccRoot) {
647583
647601
  }
647584
647602
  }
647585
647603
  async function importCredentialsHandler(opts) {
647586
- const ccRoot = opts.from ?? join194(homedir52(), LEGACY_DIR4);
647604
+ const ccRoot = opts.from ?? join194(homedir51(), LEGACY_DIR4);
647587
647605
  const fromKeychain = readCcKeychain();
647588
647606
  const fromFile = readCcFile(ccRoot);
647589
647607
  if (!fromKeychain && !fromFile) {
@@ -647660,7 +647678,7 @@ var init_importCredentials = __esm({
647660
647678
 
647661
647679
  // build-src/src/sema/config/mcpChannels.ts
647662
647680
  import { readFileSync as readFileSync45 } from "node:fs";
647663
- import { homedir as homedir53 } from "node:os";
647681
+ import { homedir as homedir52 } from "node:os";
647664
647682
  import { join as join195 } from "node:path";
647665
647683
  function mcpTransportOf(config4) {
647666
647684
  const c2 = config4;
@@ -647715,14 +647733,14 @@ function externalEntryToConfig(e) {
647715
647733
  }
647716
647734
  function detectMcpChannels() {
647717
647735
  const out6 = [];
647718
- const ccRoot = process.env.SEMA_CC_ROOT || join195(homedir53(), CC_DIR4);
647736
+ const ccRoot = process.env.SEMA_CC_ROOT || join195(homedir52(), CC_DIR4);
647719
647737
  const merged = {};
647720
647738
  const settings2 = readJsoncSafe(join195(ccRoot, "settings.json"));
647721
647739
  const settingsServers = settings2?.mcpServers;
647722
647740
  if (settingsServers && typeof settingsServers === "object") {
647723
647741
  Object.assign(merged, settingsServers);
647724
647742
  }
647725
- const globalDoc = readJsoncSafe(join195(homedir53(), CC_GLOBAL_FILE2));
647743
+ const globalDoc = readJsoncSafe(join195(homedir52(), CC_GLOBAL_FILE2));
647726
647744
  const globalServers = globalDoc?.mcpServers;
647727
647745
  if (globalServers && typeof globalServers === "object") {
647728
647746
  Object.assign(merged, globalServers);
@@ -649104,7 +649122,7 @@ var init_SkillsHub = __esm({
649104
649122
 
649105
649123
  // build-src/src/sema/config/PluginsHub.tsx
649106
649124
  import { readFileSync as readFileSync48 } from "node:fs";
649107
- import { homedir as homedir54 } from "node:os";
649125
+ import { homedir as homedir53 } from "node:os";
649108
649126
  import { join as join198 } from "node:path";
649109
649127
  function listInstalledPluginRows() {
649110
649128
  let plugins = {};
@@ -649138,7 +649156,7 @@ function readJsonSafe(path27) {
649138
649156
  }
649139
649157
  }
649140
649158
  function detectCcPlugins() {
649141
- const ccRoot = process.env.SEMA_CC_ROOT || join198(homedir54(), CC_DIR5);
649159
+ const ccRoot = process.env.SEMA_CC_ROOT || join198(homedir53(), CC_DIR5);
649142
649160
  const byId = /* @__PURE__ */ new Map();
649143
649161
  const installedDoc = readJsonSafe(join198(ccRoot, "plugins", "installed_plugins.json"));
649144
649162
  const pluginsField = installedDoc?.plugins;
@@ -654189,7 +654207,7 @@ Auth: unix socket -R \u2192 local proxy`, "info");
654189
654207
  pendingHookMessages
654190
654208
  }, renderAndRun);
654191
654209
  }
654192
- }).version("sema 1.0.27", "-v, --version", "Output the version number");
654210
+ }).version("sema 1.0.29", "-v, --version", "Output the version number");
654193
654211
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
654194
654212
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
654195
654213
  if (canUserConfigureAdvisor()) {
@@ -656798,7 +656816,7 @@ var TrustDialog_exports = {};
656798
656816
  __export(TrustDialog_exports, {
656799
656817
  TrustDialog: () => TrustDialog
656800
656818
  });
656801
- import { homedir as homedir55 } from "os";
656819
+ import { homedir as homedir54 } from "os";
656802
656820
  function TrustDialog(t0) {
656803
656821
  const $3 = (0, import_compiler_runtime356.c)(33);
656804
656822
  const {
@@ -656909,7 +656927,7 @@ function TrustDialog(t0) {
656909
656927
  let t13;
656910
656928
  if ($3[13] !== hasAnyBashExecution) {
656911
656929
  t12 = () => {
656912
- const isHomeDir = homedir55() === getCwd();
656930
+ const isHomeDir = homedir54() === getCwd();
656913
656931
  logEvent("tengu_trust_dialog_shown", {
656914
656932
  isHomeDir,
656915
656933
  hasMcpServers,
@@ -656938,7 +656956,7 @@ function TrustDialog(t0) {
656938
656956
  gracefulShutdownSync(1);
656939
656957
  return;
656940
656958
  }
656941
- const isHomeDir_0 = homedir55() === getCwd();
656959
+ const isHomeDir_0 = homedir54() === getCwd();
656942
656960
  logEvent("tengu_trust_dialog_accept", {
656943
656961
  isHomeDir: isHomeDir_0,
656944
656962
  hasMcpServers,
@@ -657692,15 +657710,15 @@ __export(claudeImportHint_exports, {
657692
657710
  shouldShowClaudeImportHint: () => shouldShowClaudeImportHint
657693
657711
  });
657694
657712
  import { existsSync as existsSync32 } from "node:fs";
657695
- import { homedir as homedir56 } from "node:os";
657713
+ import { homedir as homedir55 } from "node:os";
657696
657714
  import { join as join199 } from "node:path";
657697
657715
  function shouldShowClaudeImportHint() {
657698
657716
  try {
657699
657717
  const claudeEnvKey = "CLAUDE_CONFIG_DIR";
657700
657718
  if (process.env.SEMA_CONFIG_DIR || process.env[claudeEnvKey]) return false;
657701
- const legacyDir = join199(homedir56(), ".claude");
657719
+ const legacyDir = join199(homedir55(), ".claude");
657702
657720
  if (!existsSync32(legacyDir)) return false;
657703
- if (existsSync32(join199(homedir56(), ".sema"))) return false;
657721
+ if (existsSync32(join199(homedir55(), ".sema"))) return false;
657704
657722
  if (getGlobalConfig().hasSeenClaudeImportHint) return false;
657705
657723
  return true;
657706
657724
  } catch {
@@ -658138,9 +658156,9 @@ var init_firePrompt = __esm({
658138
658156
 
658139
658157
  // build-src/src/sema/scheduler/schedulerDaemonWire.ts
658140
658158
  import { join as join201 } from "node:path";
658141
- import { homedir as homedir57 } from "node:os";
658159
+ import { homedir as homedir56 } from "node:os";
658142
658160
  function schedulerStorePath() {
658143
- return join201(process.env.SEMA_CONFIG_DIR ?? join201(homedir57(), ".sema"), "scheduled_tasks.json");
658161
+ return join201(process.env.SEMA_CONFIG_DIR ?? join201(homedir56(), ".sema"), "scheduled_tasks.json");
658144
658162
  }
658145
658163
  function fileSchedulerStoreIO(storePath) {
658146
658164
  return {
@@ -659609,7 +659627,7 @@ __export(mcpFill_exports, {
659609
659627
  default: () => mcpFill_default,
659610
659628
  loadCanonicalMcpClients: () => loadCanonicalMcpClients
659611
659629
  });
659612
- import { homedir as homedir58 } from "os";
659630
+ import { homedir as homedir57 } from "os";
659613
659631
  import { readFileSync as readFileSync53 } from "fs";
659614
659632
  function builtinDynamicConfig(command8) {
659615
659633
  return { type: "stdio", command: command8, args: [], scope: "dynamic" };
@@ -659622,7 +659640,7 @@ function builtinDynamicClients() {
659622
659640
  }));
659623
659641
  }
659624
659642
  function canonicalGlobalConfigFile() {
659625
- const home = process.env.HOME ?? process.env.USERPROFILE ?? homedir58();
659643
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? homedir57();
659626
659644
  return `${home}/.claude.json`;
659627
659645
  }
659628
659646
  async function loadCanonicalMcpClients() {