@sema-agent/cli 1.0.32 → 1.0.33

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.32",
3
+ "version": "1.0.33",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sema-agent/cli",
9
- "version": "1.0.32",
9
+ "version": "1.0.33",
10
10
  "license": "BUSL-1.1",
11
11
  "dependencies": {
12
12
  "@sema-agent/sdk": "0.0.58",
@@ -629,9 +629,9 @@
629
629
  }
630
630
  },
631
631
  "node_modules/@sema-agent/core": {
632
- "version": "1.336.0",
633
- "resolved": "https://registry.npmjs.org/@sema-agent/core/-/core-1.336.0.tgz",
634
- "integrity": "sha512-e+lJGX1sIefQrYApLPLYA/aJhaxOx1Th51ONhAcXDCzMQjZSRVlc0AkBS/NyjNXdVR7a4IWeq2HOfcrjVCohUQ==",
632
+ "version": "1.337.0",
633
+ "resolved": "https://registry.npmjs.org/@sema-agent/core/-/core-1.337.0.tgz",
634
+ "integrity": "sha512-dGe8LKvVUCSSJIIFMOuQwbXAxvCFxScNct70FA5KaJXBZMqWHN2Gk1t4QtvbXCjLi/g0AGyogNCQLNf7B8zSrw==",
635
635
  "license": "BUSL-1.1",
636
636
  "dependencies": {
637
637
  "@modelcontextprotocol/sdk": "1.29.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/cli",
3
- "version": "1.0.32",
3
+ "version": "1.0.33",
4
4
  "description": "Sema — your own Claude Code-grade coding agent, in the terminal.",
5
5
  "license": "BUSL-1.1",
6
6
  "bin": {
@@ -25,10 +25,10 @@
25
25
  "@sema-agent/server": "1.230.0"
26
26
  },
27
27
  "overrides": {
28
- "@sema-agent/core": "1.336.0",
28
+ "@sema-agent/core": "1.337.0",
29
29
  "@sema-agent/registry-core": "0.10.19"
30
30
  },
31
- "semaEngineVersion": "server 1.230.0 / core 1.336.0 / registry-core 0.10.19",
31
+ "semaEngineVersion": "server 1.230.0 / core 1.337.0 / registry-core 0.10.19",
32
32
  "engines": {
33
33
  "node": ">=18"
34
34
  }
package/sema.js CHANGED
@@ -63065,8 +63065,8 @@ function normalizeLegacyToolName(name) {
63065
63065
  }
63066
63066
  function getLegacyToolNames(canonicalName) {
63067
63067
  const result = [];
63068
- for (const [legacy, canonical] of Object.entries(LEGACY_TOOL_NAME_ALIASES)) {
63069
- if (canonical === canonicalName) result.push(legacy);
63068
+ for (const [legacy, canonical2] of Object.entries(LEGACY_TOOL_NAME_ALIASES)) {
63069
+ if (canonical2 === canonicalName) result.push(legacy);
63070
63070
  }
63071
63071
  return result;
63072
63072
  }
@@ -104417,7 +104417,7 @@ var require_bidi = __commonJS({
104417
104417
  });
104418
104418
  return { map: map3, reverseMap };
104419
104419
  }
104420
- var openToClose, closeToOpen, canonical;
104420
+ var openToClose, closeToOpen, canonical2;
104421
104421
  function parse$1() {
104422
104422
  if (!openToClose) {
104423
104423
  var ref = parseCharacterMap(data$1.pairs, true);
@@ -104425,7 +104425,7 @@ var require_bidi = __commonJS({
104425
104425
  var reverseMap = ref.reverseMap;
104426
104426
  openToClose = map3;
104427
104427
  closeToOpen = reverseMap;
104428
- canonical = parseCharacterMap(data$1.canonical, false).map;
104428
+ canonical2 = parseCharacterMap(data$1.canonical, false).map;
104429
104429
  }
104430
104430
  }
104431
104431
  function openingToClosingBracket(char) {
@@ -104438,7 +104438,7 @@ var require_bidi = __commonJS({
104438
104438
  }
104439
104439
  function getCanonicalBracket(char) {
104440
104440
  parse$1();
104441
- return canonical.get(char) || null;
104441
+ return canonical2.get(char) || null;
104442
104442
  }
104443
104443
  var TYPE_L = TYPES.L;
104444
104444
  var TYPE_R = TYPES.R;
@@ -142689,38 +142689,38 @@ function getMarketingNameForModel(modelId) {
142689
142689
  return void 0;
142690
142690
  }
142691
142691
  const has1m = modelId.toLowerCase().includes("[1m]");
142692
- const canonical = getCanonicalName(modelId);
142693
- if (canonical.includes("claude-opus-4-6")) {
142692
+ const canonical2 = getCanonicalName(modelId);
142693
+ if (canonical2.includes("claude-opus-4-6")) {
142694
142694
  return has1m ? "Opus 4.6 (with 1M context)" : "Opus 4.6";
142695
142695
  }
142696
- if (canonical.includes("claude-opus-4-5")) {
142696
+ if (canonical2.includes("claude-opus-4-5")) {
142697
142697
  return "Opus 4.5";
142698
142698
  }
142699
- if (canonical.includes("claude-opus-4-1")) {
142699
+ if (canonical2.includes("claude-opus-4-1")) {
142700
142700
  return "Opus 4.1";
142701
142701
  }
142702
- if (canonical.includes("claude-opus-4")) {
142702
+ if (canonical2.includes("claude-opus-4")) {
142703
142703
  return "Opus 4";
142704
142704
  }
142705
- if (canonical.includes("claude-sonnet-4-6")) {
142705
+ if (canonical2.includes("claude-sonnet-4-6")) {
142706
142706
  return has1m ? "Sonnet 4.6 (with 1M context)" : "Sonnet 4.6";
142707
142707
  }
142708
- if (canonical.includes("claude-sonnet-4-5")) {
142708
+ if (canonical2.includes("claude-sonnet-4-5")) {
142709
142709
  return has1m ? "Sonnet 4.5 (with 1M context)" : "Sonnet 4.5";
142710
142710
  }
142711
- if (canonical.includes("claude-sonnet-4")) {
142711
+ if (canonical2.includes("claude-sonnet-4")) {
142712
142712
  return has1m ? "Sonnet 4 (with 1M context)" : "Sonnet 4";
142713
142713
  }
142714
- if (canonical.includes("claude-3-7-sonnet")) {
142714
+ if (canonical2.includes("claude-3-7-sonnet")) {
142715
142715
  return "Claude 3.7 Sonnet";
142716
142716
  }
142717
- if (canonical.includes("claude-3-5-sonnet")) {
142717
+ if (canonical2.includes("claude-3-5-sonnet")) {
142718
142718
  return "Claude 3.5 Sonnet";
142719
142719
  }
142720
- if (canonical.includes("claude-haiku-4-5")) {
142720
+ if (canonical2.includes("claude-haiku-4-5")) {
142721
142721
  return "Haiku 4.5";
142722
142722
  }
142723
- if (canonical.includes("claude-3-5-haiku")) {
142723
+ if (canonical2.includes("claude-3-5-haiku")) {
142724
142724
  return "Claude 3.5 Haiku";
142725
142725
  }
142726
142726
  return void 0;
@@ -144686,8 +144686,8 @@ function modelSupports1M(model) {
144686
144686
  if (is1mContextDisabled()) {
144687
144687
  return false;
144688
144688
  }
144689
- const canonical = getCanonicalName(model);
144690
- return canonical.includes("claude-sonnet-4") || canonical.includes("opus-4-6");
144689
+ const canonical2 = getCanonicalName(model);
144690
+ return canonical2.includes("claude-sonnet-4") || canonical2.includes("opus-4-6");
144691
144691
  }
144692
144692
  function getContextWindowForModel(model, betas) {
144693
144693
  if (process.env.USER_TYPE === "ant" && process.env.SEMA_CODE_MAX_CONTEXT_TOKENS) {
@@ -144899,38 +144899,38 @@ function modelSupportsISP(model) {
144899
144899
  if (supported3P !== void 0) {
144900
144900
  return supported3P;
144901
144901
  }
144902
- const canonical = getCanonicalName(model);
144902
+ const canonical2 = getCanonicalName(model);
144903
144903
  const provider = getAPIProvider();
144904
144904
  if (provider === "foundry") {
144905
144905
  return true;
144906
144906
  }
144907
144907
  if (provider === "firstParty") {
144908
- return !canonical.includes("claude-3-");
144908
+ return !canonical2.includes("claude-3-");
144909
144909
  }
144910
- return canonical.includes("claude-opus-4") || canonical.includes("claude-sonnet-4");
144910
+ return canonical2.includes("claude-opus-4") || canonical2.includes("claude-sonnet-4");
144911
144911
  }
144912
144912
  function vertexModelSupportsWebSearch(model) {
144913
- const canonical = getCanonicalName(model);
144914
- return canonical.includes("claude-opus-4") || canonical.includes("claude-sonnet-4") || canonical.includes("claude-haiku-4");
144913
+ const canonical2 = getCanonicalName(model);
144914
+ return canonical2.includes("claude-opus-4") || canonical2.includes("claude-sonnet-4") || canonical2.includes("claude-haiku-4");
144915
144915
  }
144916
144916
  function modelSupportsContextManagement(model) {
144917
- const canonical = getCanonicalName(model);
144917
+ const canonical2 = getCanonicalName(model);
144918
144918
  const provider = getAPIProvider();
144919
144919
  if (provider === "foundry") {
144920
144920
  return true;
144921
144921
  }
144922
144922
  if (provider === "firstParty") {
144923
- return !canonical.includes("claude-3-");
144923
+ return !canonical2.includes("claude-3-");
144924
144924
  }
144925
- return canonical.includes("claude-opus-4") || canonical.includes("claude-sonnet-4") || canonical.includes("claude-haiku-4");
144925
+ return canonical2.includes("claude-opus-4") || canonical2.includes("claude-sonnet-4") || canonical2.includes("claude-haiku-4");
144926
144926
  }
144927
144927
  function modelSupportsStructuredOutputs(model) {
144928
- const canonical = getCanonicalName(model);
144928
+ const canonical2 = getCanonicalName(model);
144929
144929
  const provider = getAPIProvider();
144930
144930
  if (provider !== "firstParty" && provider !== "foundry") {
144931
144931
  return false;
144932
144932
  }
144933
- return canonical.includes("claude-sonnet-4-6") || canonical.includes("claude-sonnet-4-5") || canonical.includes("claude-opus-4-1") || canonical.includes("claude-opus-4-5") || canonical.includes("claude-opus-4-6") || canonical.includes("claude-haiku-4-5");
144933
+ return canonical2.includes("claude-sonnet-4-6") || canonical2.includes("claude-sonnet-4-5") || canonical2.includes("claude-opus-4-1") || canonical2.includes("claude-opus-4-5") || canonical2.includes("claude-opus-4-6") || canonical2.includes("claude-haiku-4-5");
144934
144934
  }
144935
144935
  function modelSupportsAutoMode(model) {
144936
144936
  if (true) {
@@ -200641,23 +200641,23 @@ function modelSupportsThinking(model) {
200641
200641
  return true;
200642
200642
  }
200643
200643
  }
200644
- const canonical = getCanonicalName(model);
200644
+ const canonical2 = getCanonicalName(model);
200645
200645
  const provider = getAPIProvider();
200646
200646
  if (provider === "foundry" || provider === "firstParty") {
200647
- return !canonical.includes("claude-3-");
200647
+ return !canonical2.includes("claude-3-");
200648
200648
  }
200649
- return canonical.includes("sonnet-4") || canonical.includes("opus-4");
200649
+ return canonical2.includes("sonnet-4") || canonical2.includes("opus-4");
200650
200650
  }
200651
200651
  function modelSupportsAdaptiveThinking(model) {
200652
200652
  const supported3P = get3PModelCapabilityOverride(model, "adaptive_thinking");
200653
200653
  if (supported3P !== void 0) {
200654
200654
  return supported3P;
200655
200655
  }
200656
- const canonical = getCanonicalName(model);
200657
- if (canonical.includes("opus-4-6") || canonical.includes("sonnet-4-6")) {
200656
+ const canonical2 = getCanonicalName(model);
200657
+ if (canonical2.includes("opus-4-6") || canonical2.includes("sonnet-4-6")) {
200658
200658
  return true;
200659
200659
  }
200660
- if (canonical.includes("opus") || canonical.includes("sonnet") || canonical.includes("haiku")) {
200660
+ if (canonical2.includes("opus") || canonical2.includes("sonnet") || canonical2.includes("haiku")) {
200661
200661
  return false;
200662
200662
  }
200663
200663
  const provider = getAPIProvider();
@@ -233928,14 +233928,14 @@ function hasCommandNamed(parsed, name) {
233928
233928
  if (cmdName === lowerName) {
233929
233929
  return true;
233930
233930
  }
233931
- const canonical = COMMON_ALIASES[cmdName]?.toLowerCase();
233932
- if (canonical === lowerName) {
233931
+ const canonical2 = COMMON_ALIASES[cmdName]?.toLowerCase();
233932
+ if (canonical2 === lowerName) {
233933
233933
  return true;
233934
233934
  }
233935
233935
  if (canonicalFromAlias && cmdName === canonicalFromAlias) {
233936
233936
  return true;
233937
233937
  }
233938
- if (canonical && canonicalFromAlias && canonical === canonicalFromAlias) {
233938
+ if (canonical2 && canonicalFromAlias && canonical2 === canonicalFromAlias) {
233939
233939
  return true;
233940
233940
  }
233941
233941
  }
@@ -234633,22 +234633,22 @@ function resolveToCanonical(name) {
234633
234633
  return lower;
234634
234634
  }
234635
234635
  function isCwdChangingCmdlet(name) {
234636
- const canonical = resolveToCanonical(name);
234637
- return canonical === "set-location" || canonical === "push-location" || canonical === "pop-location" || // New-PSDrive creates a drive mapping that redirects <name>:/... paths
234636
+ const canonical2 = resolveToCanonical(name);
234637
+ return canonical2 === "set-location" || canonical2 === "push-location" || canonical2 === "pop-location" || // New-PSDrive creates a drive mapping that redirects <name>:/... paths
234638
234638
  // to an arbitrary filesystem root. Aliases ndr/mount are not in
234639
234639
  // COMMON_ALIASES — check them explicitly (finding #21).
234640
- canonical === "new-psdrive" || // ndr/mount are PS aliases for New-PSDrive on Windows only. On POSIX,
234640
+ canonical2 === "new-psdrive" || // ndr/mount are PS aliases for New-PSDrive on Windows only. On POSIX,
234641
234641
  // 'mount' is the native mount(8) command; treating it as PSDrive-creating
234642
234642
  // would false-positive. (bug #15 / review nit)
234643
- getPlatform() === "windows" && (canonical === "ndr" || canonical === "mount");
234643
+ getPlatform() === "windows" && (canonical2 === "ndr" || canonical2 === "mount");
234644
234644
  }
234645
234645
  function isSafeOutputCommand(name) {
234646
- const canonical = resolveToCanonical(name);
234647
- return SAFE_OUTPUT_CMDLETS.has(canonical);
234646
+ const canonical2 = resolveToCanonical(name);
234647
+ return SAFE_OUTPUT_CMDLETS.has(canonical2);
234648
234648
  }
234649
234649
  function isAllowlistedPipelineTail(cmd, originalCommand) {
234650
- const canonical = resolveToCanonical(cmd.name);
234651
- if (!PIPELINE_TAIL_CMDLETS.has(canonical)) {
234650
+ const canonical2 = resolveToCanonical(cmd.name);
234651
+ if (!PIPELINE_TAIL_CMDLETS.has(canonical2)) {
234652
234652
  return false;
234653
234653
  }
234654
234654
  return isAllowlistedCommand(cmd, originalCommand);
@@ -234667,9 +234667,9 @@ function lookupAllowlist(name) {
234667
234667
  if (direct) {
234668
234668
  return direct;
234669
234669
  }
234670
- const canonical = resolveToCanonical(lower);
234671
- if (canonical !== lower) {
234672
- return CMDLET_ALLOWLIST[canonical];
234670
+ const canonical2 = resolveToCanonical(lower);
234671
+ if (canonical2 !== lower) {
234672
+ return CMDLET_ALLOWLIST[canonical2];
234673
234673
  }
234674
234674
  return void 0;
234675
234675
  }
@@ -234814,11 +234814,11 @@ function isAllowlistedCommand(cmd, originalCommand) {
234814
234814
  }
234815
234815
  }
234816
234816
  }
234817
- const canonical = resolveToCanonical(cmd.name);
234818
- if (canonical === "git" || canonical === "gh" || canonical === "docker" || canonical === "dotnet") {
234819
- return isExternalCommandSafe(canonical, cmd.args);
234817
+ const canonical2 = resolveToCanonical(cmd.name);
234818
+ if (canonical2 === "git" || canonical2 === "gh" || canonical2 === "docker" || canonical2 === "dotnet") {
234819
+ return isExternalCommandSafe(canonical2, cmd.args);
234820
234820
  }
234821
- const isCmdlet = canonical.includes("-");
234821
+ const isCmdlet = canonical2.includes("-");
234822
234822
  if (config4.allowAllFlags) {
234823
234823
  return true;
234824
234824
  }
@@ -235810,15 +235810,15 @@ var init_readOnlyValidation = __esm({
235810
235810
 
235811
235811
  // build-src/src/tools/PowerShellTool/modeValidation.ts
235812
235812
  function isAcceptEditsAllowedCmdlet(name) {
235813
- const canonical = resolveToCanonical(name);
235814
- return ACCEPT_EDITS_ALLOWED_CMDLETS.has(canonical);
235813
+ const canonical2 = resolveToCanonical(name);
235814
+ return ACCEPT_EDITS_ALLOWED_CMDLETS.has(canonical2);
235815
235815
  }
235816
235816
  function isItemTypeParamAbbrev(p) {
235817
235817
  return p.length >= 3 && "-itemtype".startsWith(p) || p.length >= 3 && "-type".startsWith(p);
235818
235818
  }
235819
235819
  function isSymlinkCreatingCommand(cmd) {
235820
- const canonical = resolveToCanonical(cmd.name);
235821
- if (canonical !== "new-item") return false;
235820
+ const canonical2 = resolveToCanonical(cmd.name);
235821
+ if (canonical2 !== "new-item") return false;
235822
235822
  for (let i = 0; i < cmd.args.length; i++) {
235823
235823
  const raw2 = cmd.args[i] ?? "";
235824
235824
  if (raw2.length === 0) continue;
@@ -236314,8 +236314,8 @@ function getGlobBaseDirectory2(filePath) {
236314
236314
  return beforeGlob.substring(0, lastSepIndex + 1) || "/";
236315
236315
  }
236316
236316
  function extractPathsFromCommand(cmd) {
236317
- const canonical = resolveToCanonical(cmd.name);
236318
- const config4 = CMDLET_PATH_CONFIG[canonical];
236317
+ const canonical2 = resolveToCanonical(cmd.name);
236318
+ const config4 = CMDLET_PATH_CONFIG[canonical2];
236319
236319
  if (!config4) {
236320
236320
  return {
236321
236321
  paths: [],
@@ -236484,7 +236484,7 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
236484
236484
  }
236485
236485
  const { paths: paths3, operationType, hasUnvalidatablePathArg, optionalWrite } = extractPathsFromCommand(cmd);
236486
236486
  if (hasExpressionPipelineSource) {
236487
- const canonical = resolveToCanonical(cmd.name);
236487
+ const canonical2 = resolveToCanonical(cmd.name);
236488
236488
  if (pipelineSourceText !== void 0) {
236489
236489
  const stripped = pipelineSourceText.replace(/^['"]|['"]$/g, "");
236490
236490
  const denyHit = checkDenyRuleForGuessedPath(
@@ -236496,28 +236496,28 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
236496
236496
  if (denyHit) {
236497
236497
  return {
236498
236498
  behavior: "deny",
236499
- message: `${canonical} targeting '${denyHit.resolvedPath}' was blocked by a deny rule`,
236499
+ message: `${canonical2} targeting '${denyHit.resolvedPath}' was blocked by a deny rule`,
236500
236500
  decisionReason: { type: "rule", rule: denyHit.rule }
236501
236501
  };
236502
236502
  }
236503
236503
  }
236504
236504
  firstAsk ??= {
236505
236505
  behavior: "ask",
236506
- message: `${canonical} receives its path from a pipeline expression source that cannot be statically validated and requires manual approval`
236506
+ message: `${canonical2} receives its path from a pipeline expression source that cannot be statically validated and requires manual approval`
236507
236507
  };
236508
236508
  }
236509
236509
  if (hasUnvalidatablePathArg) {
236510
- const canonical = resolveToCanonical(cmd.name);
236510
+ const canonical2 = resolveToCanonical(cmd.name);
236511
236511
  firstAsk ??= {
236512
236512
  behavior: "ask",
236513
- message: `${canonical} uses a parameter or complex path expression (array literal, subexpression, unknown parameter, etc.) that cannot be statically validated and requires manual approval`
236513
+ message: `${canonical2} uses a parameter or complex path expression (array literal, subexpression, unknown parameter, etc.) that cannot be statically validated and requires manual approval`
236514
236514
  };
236515
236515
  }
236516
236516
  if (operationType !== "read" && !optionalWrite && paths3.length === 0 && CMDLET_PATH_CONFIG[resolveToCanonical(cmd.name)]) {
236517
- const canonical = resolveToCanonical(cmd.name);
236517
+ const canonical2 = resolveToCanonical(cmd.name);
236518
236518
  firstAsk ??= {
236519
236519
  behavior: "ask",
236520
- message: `${canonical} is a write operation but no target path could be determined; requires manual approval`
236520
+ message: `${canonical2} is a write operation but no target path could be determined; requires manual approval`
236521
236521
  };
236522
236522
  continue;
236523
236523
  }
@@ -236536,12 +236536,12 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
236536
236536
  return dangerousRemovalDeny(resolvedPath);
236537
236537
  }
236538
236538
  if (!allowed) {
236539
- const canonical = resolveToCanonical(cmd.name);
236539
+ const canonical2 = resolveToCanonical(cmd.name);
236540
236540
  const workingDirs = Array.from(
236541
236541
  allWorkingDirectories(toolPermissionContext)
236542
236542
  );
236543
236543
  const dirListStr = formatDirectoryList2(workingDirs);
236544
- const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${canonical} targeting '${resolvedPath}' was blocked. For security, Sema may only access files in the allowed working directories for this session: ${dirListStr}.`;
236544
+ const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${canonical2} targeting '${resolvedPath}' was blocked. For security, Sema may only access files in the allowed working directories for this session: ${dirListStr}.`;
236545
236545
  if (decisionReason?.type === "rule") {
236546
236546
  return {
236547
236547
  behavior: "deny",
@@ -236588,17 +236588,17 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
236588
236588
  for (const cmd of statement.nestedCommands) {
236589
236589
  const { paths: paths3, operationType, hasUnvalidatablePathArg, optionalWrite } = extractPathsFromCommand(cmd);
236590
236590
  if (hasUnvalidatablePathArg) {
236591
- const canonical = resolveToCanonical(cmd.name);
236591
+ const canonical2 = resolveToCanonical(cmd.name);
236592
236592
  firstAsk ??= {
236593
236593
  behavior: "ask",
236594
- message: `${canonical} uses a parameter or complex path expression (array literal, subexpression, unknown parameter, etc.) that cannot be statically validated and requires manual approval`
236594
+ message: `${canonical2} uses a parameter or complex path expression (array literal, subexpression, unknown parameter, etc.) that cannot be statically validated and requires manual approval`
236595
236595
  };
236596
236596
  }
236597
236597
  if (operationType !== "read" && !optionalWrite && paths3.length === 0 && CMDLET_PATH_CONFIG[resolveToCanonical(cmd.name)]) {
236598
- const canonical = resolveToCanonical(cmd.name);
236598
+ const canonical2 = resolveToCanonical(cmd.name);
236599
236599
  firstAsk ??= {
236600
236600
  behavior: "ask",
236601
- message: `${canonical} is a write operation but no target path could be determined; requires manual approval`
236601
+ message: `${canonical2} is a write operation but no target path could be determined; requires manual approval`
236602
236602
  };
236603
236603
  continue;
236604
236604
  }
@@ -236617,12 +236617,12 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
236617
236617
  return dangerousRemovalDeny(resolvedPath);
236618
236618
  }
236619
236619
  if (!allowed) {
236620
- const canonical = resolveToCanonical(cmd.name);
236620
+ const canonical2 = resolveToCanonical(cmd.name);
236621
236621
  const workingDirs = Array.from(
236622
236622
  allWorkingDirectories(toolPermissionContext)
236623
236623
  );
236624
236624
  const dirListStr = formatDirectoryList2(workingDirs);
236625
- const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${canonical} targeting '${resolvedPath}' was blocked. For security, Sema may only access files in the allowed working directories for this session: ${dirListStr}.`;
236625
+ const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${canonical2} targeting '${resolvedPath}' was blocked. For security, Sema may only access files in the allowed working directories for this session: ${dirListStr}.`;
236626
236626
  if (decisionReason?.type === "rule") {
236627
236627
  return {
236628
236628
  behavior: "deny",
@@ -239019,8 +239019,8 @@ async function powershellToolHasPermission(input, context3) {
239019
239019
  for (const r of element.redirections ?? []) {
239020
239020
  if (isGitInternalPathPS(r.target)) return true;
239021
239021
  }
239022
- const canonical = resolveToCanonical(element.name);
239023
- if (!GIT_SAFETY_WRITE_CMDLETS.has(canonical)) return false;
239022
+ const canonical2 = resolveToCanonical(element.name);
239023
+ if (!GIT_SAFETY_WRITE_CMDLETS.has(canonical2)) return false;
239024
239024
  if (element.args.flatMap((a) => a.split(",")).some((a) => isGitInternalPathPS(a))) {
239025
239025
  return true;
239026
239026
  }
@@ -239057,8 +239057,8 @@ async function powershellToolHasPermission(input, context3) {
239057
239057
  for (const r of element.redirections ?? []) {
239058
239058
  if (isDotGitPathPS(r.target)) return true;
239059
239059
  }
239060
- const canonical = resolveToCanonical(element.name);
239061
- if (!GIT_SAFETY_WRITE_CMDLETS.has(canonical)) return false;
239060
+ const canonical2 = resolveToCanonical(element.name);
239061
+ if (!GIT_SAFETY_WRITE_CMDLETS.has(canonical2)) return false;
239062
239062
  return element.args.flatMap((a) => a.split(",")).some(isDotGitPathPS);
239063
239063
  }) || getFileRedirections(parsed).some((r) => isDotGitPathPS(r.target));
239064
239064
  if (found) {
@@ -239123,8 +239123,8 @@ async function powershellToolHasPermission(input, context3) {
239123
239123
  if (element.nameType === "application") {
239124
239124
  return true;
239125
239125
  }
239126
- const canonical = resolveToCanonical(element.name);
239127
- if (canonical === "set-location" && element.args.length > 0) {
239126
+ const canonical2 = resolveToCanonical(element.name);
239127
+ if (canonical2 === "set-location" && element.args.length > 0) {
239128
239128
  const target = element.args.find(
239129
239129
  (a) => a.length === 0 || !PS_TOKENIZER_DASH_CHARS.has(a[0])
239130
239130
  );
@@ -239581,13 +239581,13 @@ function isSearchOrReadPowerShellCommand(command8) {
239581
239581
  if (!baseCommand) {
239582
239582
  continue;
239583
239583
  }
239584
- const canonical = resolveToCanonical(baseCommand);
239585
- if (PS_SEMANTIC_NEUTRAL_COMMANDS.has(canonical)) {
239584
+ const canonical2 = resolveToCanonical(baseCommand);
239585
+ if (PS_SEMANTIC_NEUTRAL_COMMANDS.has(canonical2)) {
239586
239586
  continue;
239587
239587
  }
239588
239588
  hasNonNeutralCommand = true;
239589
- const isPartSearch = PS_SEARCH_COMMANDS.has(canonical);
239590
- const isPartRead = PS_READ_COMMANDS.has(canonical);
239589
+ const isPartSearch = PS_SEARCH_COMMANDS.has(canonical2);
239590
+ const isPartRead = PS_READ_COMMANDS.has(canonical2);
239591
239591
  if (!isPartSearch && !isPartRead) {
239592
239592
  return {
239593
239593
  isSearch: false,
@@ -239611,8 +239611,8 @@ function isSearchOrReadPowerShellCommand(command8) {
239611
239611
  function isAutobackgroundingAllowed(command8) {
239612
239612
  const firstWord2 = command8.trim().split(/\s+/)[0];
239613
239613
  if (!firstWord2) return true;
239614
- const canonical = resolveToCanonical(firstWord2);
239615
- return !DISALLOWED_AUTO_BACKGROUND_COMMANDS.includes(canonical);
239614
+ const canonical2 = resolveToCanonical(firstWord2);
239615
+ return !DISALLOWED_AUTO_BACKGROUND_COMMANDS.includes(canonical2);
239616
239616
  }
239617
239617
  function detectBlockedSleepPattern(command8) {
239618
239618
  const first = command8.trim().split(/[;|&\r\n]/)[0]?.trim() ?? "";
@@ -277390,14 +277390,14 @@ function getAgentModel(agentModel, parentModel, toolSpecifiedModel, permissionMo
277390
277390
  return applyParentRegionPrefix(model, agentModelWithExp);
277391
277391
  }
277392
277392
  function aliasMatchesParentTier(alias2, parentModel) {
277393
- const canonical = getCanonicalName(parentModel);
277393
+ const canonical2 = getCanonicalName(parentModel);
277394
277394
  switch (alias2.toLowerCase()) {
277395
277395
  case "opus":
277396
- return canonical.includes("opus");
277396
+ return canonical2.includes("opus");
277397
277397
  case "sonnet":
277398
- return canonical.includes("sonnet");
277398
+ return canonical2.includes("sonnet");
277399
277399
  case "haiku":
277400
- return canonical.includes("haiku");
277400
+ return canonical2.includes("haiku");
277401
277401
  default:
277402
277402
  return false;
277403
277403
  }
@@ -331934,9 +331934,9 @@ function streamingTailWrap(unstableSuffix) {
331934
331934
  var import_compiler_runtime43, import_react43, import_jsx_runtime53, TOKEN_CACHE_MAX, tokenCache, MD_SYNTAX_RE;
331935
331935
  var init_Markdown = __esm({
331936
331936
  "build-src/src/components/Markdown.tsx"() {
331937
- import_compiler_runtime43 = __toESM(require_compiler_runtime(), 1);
331937
+ import_compiler_runtime43 = __toESM(require_compiler_runtime());
331938
331938
  init_marked_esm();
331939
- import_react43 = __toESM(require_react(), 1);
331939
+ import_react43 = __toESM(require_react());
331940
331940
  init_useSettings();
331941
331941
  init_ink2();
331942
331942
  init_cliHighlight();
@@ -331944,7 +331944,7 @@ var init_Markdown = __esm({
331944
331944
  init_markdown();
331945
331945
  init_messages4();
331946
331946
  init_MarkdownTable();
331947
- import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
331947
+ import_jsx_runtime53 = __toESM(require_jsx_runtime());
331948
331948
  TOKEN_CACHE_MAX = 500;
331949
331949
  tokenCache = /* @__PURE__ */ new Map();
331950
331950
  MD_SYNTAX_RE = /[#*`|[>\-_~]|\n\n|^\d+\. |\n\d+\. /;
@@ -354977,6 +354977,16 @@ function prettifyNotificationSummary(summary) {
354977
354977
  if (!summary) return void 0;
354978
354978
  const MAX = 200;
354979
354979
  const t2 = summary.trim();
354980
+ const wfPush = /^workflow "([^"]+)" (completed|failed)(?: in (\S+))? — agents (\d+)\/(\d+) done(?: \((\d+) failed\))?;/.exec(t2);
354981
+ if (wfPush) {
354982
+ const [, name, status3, dur, done, total, failedN] = wfPush;
354983
+ const parts = [`Dynamic workflow "${name}" ${status3}`];
354984
+ if (dur) parts.push(dur);
354985
+ parts.push(failedN ? `agents ${done}/${total} done (${failedN} failed)` : `${total} agent${total === "1" ? "" : "s"}`);
354986
+ return parts.join(" \xB7 ");
354987
+ }
354988
+ const wf = /^workflow "([^"]+)" (completed|failed) — (\d+) agents?;/.exec(t2);
354989
+ if (wf) return `Dynamic workflow "${wf[1]}" ${wf[2]} \xB7 ${wf[3]} agent${wf[3] === "1" ? "" : "s"}`;
354980
354990
  if (t2.startsWith("{") && t2.endsWith("}") || t2.startsWith("[") && t2.endsWith("]")) {
354981
354991
  try {
354982
354992
  const v2 = JSON.parse(t2);
@@ -479764,8 +479774,8 @@ var init_sema_brand = __esm({
479764
479774
  "Slash-command gating wired to the fleet capability handshake"
479765
479775
  ]
479766
479776
  },
479767
- productVersion: "1.0.32",
479768
- announcement: "sema 1.0.32 \u2014 Workflow result lines now render as a proper indented receipt (no more raw JSON), fixing the second half of the workflow card styling."
479777
+ productVersion: "1.0.33",
479778
+ announcement: "sema 1.0.33 \u2014 workflow sub-agents now inherit the session model (fixes instant agent failures in multi-model setups) and carry diagnosable error text; workflow completion notices read as plain language."
479769
479779
  };
479770
479780
  }
479771
479781
  });
@@ -482699,8 +482709,8 @@ var require_sema_brand = __commonJS({
482699
482709
  "Slash-command gating wired to the fleet capability handshake"
482700
482710
  ]
482701
482711
  },
482702
- productVersion: "1.0.32",
482703
- announcement: "sema 1.0.32 \u2014 Workflow result lines now render as a proper indented receipt (no more raw JSON), fixing the second half of the workflow card styling."
482712
+ productVersion: "1.0.33",
482713
+ announcement: "sema 1.0.33 \u2014 workflow sub-agents now inherit the session model (fixes instant agent failures in multi-model setups) and carry diagnosable error text; workflow completion notices read as plain language."
482704
482714
  };
482705
482715
  }
482706
482716
  });
@@ -528609,16 +528619,16 @@ async function computeSimpleEnvInfo(modelId, additionalWorkingDirectories) {
528609
528619
  `);
528610
528620
  }
528611
528621
  function getKnowledgeCutoff(modelId) {
528612
- const canonical = getCanonicalName(modelId);
528613
- if (canonical.includes("claude-sonnet-4-6")) {
528622
+ const canonical2 = getCanonicalName(modelId);
528623
+ if (canonical2.includes("claude-sonnet-4-6")) {
528614
528624
  return "August 2025";
528615
- } else if (canonical.includes("claude-opus-4-6")) {
528625
+ } else if (canonical2.includes("claude-opus-4-6")) {
528616
528626
  return "May 2025";
528617
- } else if (canonical.includes("claude-opus-4-5")) {
528627
+ } else if (canonical2.includes("claude-opus-4-5")) {
528618
528628
  return "May 2025";
528619
- } else if (canonical.includes("claude-haiku-4")) {
528629
+ } else if (canonical2.includes("claude-haiku-4")) {
528620
528630
  return "February 2025";
528621
- } else if (canonical.includes("claude-opus-4") || canonical.includes("claude-sonnet-4")) {
528631
+ } else if (canonical2.includes("claude-opus-4") || canonical2.includes("claude-sonnet-4")) {
528622
528632
  return "January 2025";
528623
528633
  }
528624
528634
  return null;
@@ -541996,10 +542006,10 @@ var init_idn_email = __esm({
541996
542006
  function IsIdnHostname(value) {
541997
542007
  if (value.length === 0 || value.includes(" "))
541998
542008
  return false;
541999
- const canonical = value.normalize("NFC").replace(/[\u002E\u3002\uFF0E\uFF61]/g, ".");
542000
- if (canonical.length > 253)
542009
+ const canonical2 = value.normalize("NFC").replace(/[\u002E\u3002\uFF0E\uFF61]/g, ".");
542010
+ if (canonical2.length > 253)
542001
542011
  return false;
542002
- for (const label of canonical.split(".")) {
542012
+ for (const label of canonical2.split(".")) {
542003
542013
  if (!IsIdnLabel(label))
542004
542014
  return false;
542005
542015
  }
@@ -556547,6 +556557,13 @@ var init_assemble = __esm({
556547
556557
  }
556548
556558
  });
556549
556559
 
556560
+ // node_modules/@sema-agent/core/dist/prompt-assembly/artifact.js
556561
+ var init_artifact = __esm({
556562
+ "node_modules/@sema-agent/core/dist/prompt-assembly/artifact.js"() {
556563
+ init_epoch();
556564
+ }
556565
+ });
556566
+
556550
556567
  // node_modules/@sema-agent/core/dist/core/tool-result-budget.js
556551
556568
  var init_tool_result_budget = __esm({
556552
556569
  "node_modules/@sema-agent/core/dist/core/tool-result-budget.js"() {
@@ -556852,6 +556869,7 @@ var init_prepare_task = __esm({
556852
556869
  init_assemble();
556853
556870
  init_tool_catalog();
556854
556871
  init_epoch();
556872
+ init_artifact();
556855
556873
  init_sema_default();
556856
556874
  init_context_edit();
556857
556875
  init_tool_result_budget();
@@ -557535,6 +557553,13 @@ var init_memory_engine = __esm({
557535
557553
  }
557536
557554
  });
557537
557555
 
557556
+ // node_modules/@sema-agent/core/dist/prompt-assembly/artifact-store.js
557557
+ var init_artifact_store = __esm({
557558
+ "node_modules/@sema-agent/core/dist/prompt-assembly/artifact-store.js"() {
557559
+ init_artifact();
557560
+ }
557561
+ });
557562
+
557538
557563
  // node_modules/@sema-agent/core/dist/agents/team.js
557539
557564
  var init_team2 = __esm({
557540
557565
  "node_modules/@sema-agent/core/dist/agents/team.js"() {
@@ -557870,6 +557895,8 @@ var init_dist9 = __esm({
557870
557895
  init_sema_default();
557871
557896
  init_tool_catalog();
557872
557897
  init_epoch();
557898
+ init_artifact();
557899
+ init_artifact_store();
557873
557900
  init_llm2();
557874
557901
  init_event_registry();
557875
557902
  init_reasoning();
@@ -608184,8 +608211,8 @@ function _temp161() {
608184
608211
  var import_compiler_runtime316, import_react313, SETTINGS_ERRORS_NOTIFICATION_KEY;
608185
608212
  var init_useSettingsErrors = __esm({
608186
608213
  "build-src/src/hooks/notifs/useSettingsErrors.tsx"() {
608187
- import_compiler_runtime316 = __toESM(require_compiler_runtime());
608188
- import_react313 = __toESM(require_react());
608214
+ import_compiler_runtime316 = __toESM(require_compiler_runtime(), 1);
608215
+ import_react313 = __toESM(require_react(), 1);
608189
608216
  init_notifications();
608190
608217
  init_state();
608191
608218
  init_allErrors();
@@ -628860,9 +628887,9 @@ function ccToolName(engineName) {
628860
628887
  async function* normalizeToolNames(events3) {
628861
628888
  for await (const ev of events3) {
628862
628889
  if (ev && (ev.type === "tool_start" || ev.type === "tool_end") && typeof ev.toolName === "string") {
628863
- const canonical = ccToolName(ev.toolName);
628864
- if (canonical !== ev.toolName) {
628865
- yield { ...ev, toolName: canonical };
628890
+ const canonical2 = ccToolName(ev.toolName);
628891
+ if (canonical2 !== ev.toolName) {
628892
+ yield { ...ev, toolName: canonical2 };
628866
628893
  continue;
628867
628894
  }
628868
628895
  }
@@ -654342,7 +654369,7 @@ Auth: unix socket -R \u2192 local proxy`, "info");
654342
654369
  pendingHookMessages
654343
654370
  }, renderAndRun);
654344
654371
  }
654345
- }).version("sema 1.0.32", "-v, --version", "Output the version number");
654372
+ }).version("sema 1.0.33", "-v, --version", "Output the version number");
654346
654373
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
654347
654374
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
654348
654375
  if (canUserConfigureAdvisor()) {
@@ -658856,14 +658883,14 @@ function canonicalClaudeHome() {
658856
658883
  return `${home}/.claude`;
658857
658884
  }
658858
658885
  async function loadCanonicalSkillCommands(cwd5) {
658859
- const canonical = canonicalClaudeHome();
658886
+ const canonical2 = canonicalClaudeHome();
658860
658887
  const prev = process.env.SEMA_CONFIG_DIR;
658861
658888
  try {
658862
658889
  const skillsMod = await Promise.resolve().then(() => (init_loadSkillsDir(), loadSkillsDir_exports));
658863
658890
  const pluginsMod = await Promise.resolve().then(() => (init_loadPluginCommands(), loadPluginCommands_exports));
658864
658891
  const { getSkillDirCommands: getSkillDirCommands2, clearSkillCaches: clearSkillCaches2 } = skillsMod;
658865
658892
  const { getPluginSkills: getPluginSkills2, clearPluginSkillsCache: clearPluginSkillsCache2 } = pluginsMod;
658866
- process.env.SEMA_CONFIG_DIR = canonical;
658893
+ process.env.SEMA_CONFIG_DIR = canonical2;
658867
658894
  clearSkillCaches2?.();
658868
658895
  clearPluginSkillsCache2?.();
658869
658896
  const [skillDir, pluginSkills] = await Promise.all([