@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.
- package/npm-shrinkwrap.json +5 -5
- package/package.json +3 -3
- package/sema.js +141 -114
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/cli",
|
|
3
|
-
"version": "1.0.
|
|
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.
|
|
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.
|
|
633
|
-
"resolved": "https://registry.npmjs.org/@sema-agent/core/-/core-1.
|
|
634
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
63069
|
-
if (
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
142693
|
-
if (
|
|
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 (
|
|
142696
|
+
if (canonical2.includes("claude-opus-4-5")) {
|
|
142697
142697
|
return "Opus 4.5";
|
|
142698
142698
|
}
|
|
142699
|
-
if (
|
|
142699
|
+
if (canonical2.includes("claude-opus-4-1")) {
|
|
142700
142700
|
return "Opus 4.1";
|
|
142701
142701
|
}
|
|
142702
|
-
if (
|
|
142702
|
+
if (canonical2.includes("claude-opus-4")) {
|
|
142703
142703
|
return "Opus 4";
|
|
142704
142704
|
}
|
|
142705
|
-
if (
|
|
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 (
|
|
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 (
|
|
142711
|
+
if (canonical2.includes("claude-sonnet-4")) {
|
|
142712
142712
|
return has1m ? "Sonnet 4 (with 1M context)" : "Sonnet 4";
|
|
142713
142713
|
}
|
|
142714
|
-
if (
|
|
142714
|
+
if (canonical2.includes("claude-3-7-sonnet")) {
|
|
142715
142715
|
return "Claude 3.7 Sonnet";
|
|
142716
142716
|
}
|
|
142717
|
-
if (
|
|
142717
|
+
if (canonical2.includes("claude-3-5-sonnet")) {
|
|
142718
142718
|
return "Claude 3.5 Sonnet";
|
|
142719
142719
|
}
|
|
142720
|
-
if (
|
|
142720
|
+
if (canonical2.includes("claude-haiku-4-5")) {
|
|
142721
142721
|
return "Haiku 4.5";
|
|
142722
142722
|
}
|
|
142723
|
-
if (
|
|
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
|
|
144690
|
-
return
|
|
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
|
|
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 !
|
|
144908
|
+
return !canonical2.includes("claude-3-");
|
|
144909
144909
|
}
|
|
144910
|
-
return
|
|
144910
|
+
return canonical2.includes("claude-opus-4") || canonical2.includes("claude-sonnet-4");
|
|
144911
144911
|
}
|
|
144912
144912
|
function vertexModelSupportsWebSearch(model) {
|
|
144913
|
-
const
|
|
144914
|
-
return
|
|
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
|
|
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 !
|
|
144923
|
+
return !canonical2.includes("claude-3-");
|
|
144924
144924
|
}
|
|
144925
|
-
return
|
|
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
|
|
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
|
|
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
|
|
200644
|
+
const canonical2 = getCanonicalName(model);
|
|
200645
200645
|
const provider = getAPIProvider();
|
|
200646
200646
|
if (provider === "foundry" || provider === "firstParty") {
|
|
200647
|
-
return !
|
|
200647
|
+
return !canonical2.includes("claude-3-");
|
|
200648
200648
|
}
|
|
200649
|
-
return
|
|
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
|
|
200657
|
-
if (
|
|
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 (
|
|
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
|
|
233932
|
-
if (
|
|
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 (
|
|
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
|
|
234637
|
-
return
|
|
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
|
-
|
|
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" && (
|
|
234643
|
+
getPlatform() === "windows" && (canonical2 === "ndr" || canonical2 === "mount");
|
|
234644
234644
|
}
|
|
234645
234645
|
function isSafeOutputCommand(name) {
|
|
234646
|
-
const
|
|
234647
|
-
return SAFE_OUTPUT_CMDLETS.has(
|
|
234646
|
+
const canonical2 = resolveToCanonical(name);
|
|
234647
|
+
return SAFE_OUTPUT_CMDLETS.has(canonical2);
|
|
234648
234648
|
}
|
|
234649
234649
|
function isAllowlistedPipelineTail(cmd, originalCommand) {
|
|
234650
|
-
const
|
|
234651
|
-
if (!PIPELINE_TAIL_CMDLETS.has(
|
|
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
|
|
234671
|
-
if (
|
|
234672
|
-
return CMDLET_ALLOWLIST[
|
|
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
|
|
234818
|
-
if (
|
|
234819
|
-
return isExternalCommandSafe(
|
|
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 =
|
|
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
|
|
235814
|
-
return ACCEPT_EDITS_ALLOWED_CMDLETS.has(
|
|
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
|
|
235821
|
-
if (
|
|
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
|
|
236318
|
-
const config4 = CMDLET_PATH_CONFIG[
|
|
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
|
|
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: `${
|
|
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: `${
|
|
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
|
|
236510
|
+
const canonical2 = resolveToCanonical(cmd.name);
|
|
236511
236511
|
firstAsk ??= {
|
|
236512
236512
|
behavior: "ask",
|
|
236513
|
-
message: `${
|
|
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
|
|
236517
|
+
const canonical2 = resolveToCanonical(cmd.name);
|
|
236518
236518
|
firstAsk ??= {
|
|
236519
236519
|
behavior: "ask",
|
|
236520
|
-
message: `${
|
|
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
|
|
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 : `${
|
|
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
|
|
236591
|
+
const canonical2 = resolveToCanonical(cmd.name);
|
|
236592
236592
|
firstAsk ??= {
|
|
236593
236593
|
behavior: "ask",
|
|
236594
|
-
message: `${
|
|
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
|
|
236598
|
+
const canonical2 = resolveToCanonical(cmd.name);
|
|
236599
236599
|
firstAsk ??= {
|
|
236600
236600
|
behavior: "ask",
|
|
236601
|
-
message: `${
|
|
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
|
|
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 : `${
|
|
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
|
|
239023
|
-
if (!GIT_SAFETY_WRITE_CMDLETS.has(
|
|
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
|
|
239061
|
-
if (!GIT_SAFETY_WRITE_CMDLETS.has(
|
|
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
|
|
239127
|
-
if (
|
|
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
|
|
239585
|
-
if (PS_SEMANTIC_NEUTRAL_COMMANDS.has(
|
|
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(
|
|
239590
|
-
const isPartRead = PS_READ_COMMANDS.has(
|
|
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
|
|
239615
|
-
return !DISALLOWED_AUTO_BACKGROUND_COMMANDS.includes(
|
|
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
|
|
277393
|
+
const canonical2 = getCanonicalName(parentModel);
|
|
277394
277394
|
switch (alias2.toLowerCase()) {
|
|
277395
277395
|
case "opus":
|
|
277396
|
-
return
|
|
277396
|
+
return canonical2.includes("opus");
|
|
277397
277397
|
case "sonnet":
|
|
277398
|
-
return
|
|
277398
|
+
return canonical2.includes("sonnet");
|
|
277399
277399
|
case "haiku":
|
|
277400
|
-
return
|
|
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()
|
|
331937
|
+
import_compiler_runtime43 = __toESM(require_compiler_runtime());
|
|
331938
331938
|
init_marked_esm();
|
|
331939
|
-
import_react43 = __toESM(require_react()
|
|
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()
|
|
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.
|
|
479768
|
-
announcement: "sema 1.0.
|
|
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.
|
|
482703
|
-
announcement: "sema 1.0.
|
|
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
|
|
528613
|
-
if (
|
|
528622
|
+
const canonical2 = getCanonicalName(modelId);
|
|
528623
|
+
if (canonical2.includes("claude-sonnet-4-6")) {
|
|
528614
528624
|
return "August 2025";
|
|
528615
|
-
} else if (
|
|
528625
|
+
} else if (canonical2.includes("claude-opus-4-6")) {
|
|
528616
528626
|
return "May 2025";
|
|
528617
|
-
} else if (
|
|
528627
|
+
} else if (canonical2.includes("claude-opus-4-5")) {
|
|
528618
528628
|
return "May 2025";
|
|
528619
|
-
} else if (
|
|
528629
|
+
} else if (canonical2.includes("claude-haiku-4")) {
|
|
528620
528630
|
return "February 2025";
|
|
528621
|
-
} else if (
|
|
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
|
|
542000
|
-
if (
|
|
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
|
|
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
|
|
628864
|
-
if (
|
|
628865
|
-
yield { ...ev, toolName:
|
|
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.
|
|
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
|
|
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 =
|
|
658893
|
+
process.env.SEMA_CONFIG_DIR = canonical2;
|
|
658867
658894
|
clearSkillCaches2?.();
|
|
658868
658895
|
clearPluginSkillsCache2?.();
|
|
658869
658896
|
const [skillDir, pluginSkills] = await Promise.all([
|