@sema-agent/cli 1.0.43 → 1.0.44
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 +84 -18
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.44",
|
|
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.44",
|
|
10
10
|
"license": "BUSL-1.1",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@sema-agent/sdk": "0.0.63",
|
|
@@ -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.362.0",
|
|
633
|
+
"resolved": "https://registry.npmjs.org/@sema-agent/core/-/core-1.362.0.tgz",
|
|
634
|
+
"integrity": "sha512-pfr7dIhKdsw7T8WT4QsCYebXbZtcL9ALjCwalSFpjsTYl3Qhlk0walUrB03rwQBGP9TW4COL7mX9tRgM3KYXwA==",
|
|
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.44",
|
|
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.242.0"
|
|
26
26
|
},
|
|
27
27
|
"overrides": {
|
|
28
|
-
"@sema-agent/core": "1.
|
|
28
|
+
"@sema-agent/core": "1.362.0",
|
|
29
29
|
"@sema-agent/registry-core": "0.10.21"
|
|
30
30
|
},
|
|
31
|
-
"semaEngineVersion": "server 1.242.0 / core 1.
|
|
31
|
+
"semaEngineVersion": "server 1.242.0 / core 1.362.0 / registry-core 0.10.21",
|
|
32
32
|
"engines": {
|
|
33
33
|
"node": ">=18"
|
|
34
34
|
}
|
package/sema.js
CHANGED
|
@@ -208481,9 +208481,13 @@ function getSemaGuideBasePrompt() {
|
|
|
208481
208481
|
const localSearchHint = hasEmbeddedSearchTools() ? `${FILE_READ_TOOL_NAME}, \`find\`, and \`grep\`` : `${FILE_READ_TOOL_NAME}, ${GLOB_TOOL_NAME}, and ${GREP_TOOL_NAME}`;
|
|
208482
208482
|
return `You are the sema guide agent. Your primary responsibility is helping users understand and use sema (the CLI tool) effectively.
|
|
208483
208483
|
|
|
208484
|
+
**Product identity (ground truth \u2014 never contradict this):**
|
|
208485
|
+
|
|
208486
|
+
sema is an AI coding CLI that is fully Sema-compatible and a superset of it. The Sema ecosystem works unchanged: CLAUDE.md project memory, .claude/ project config, plugin marketplaces (/plugin), skills (/skills), MCP servers, hooks, and custom subagents. When external docs or tutorials reference the \`claude\` command, the sema equivalent is the same command with \`sema\` substituted (e.g. \`sema mcp add X\` \u2192 \`sema mcp add X\`). Beyond Sema, sema adds: a local engine process the TUI drives, model freedom via the Model Hub (/model in-session or \`sema model\` \u2014 any provider, roles/tiers configurable), cloud switching (\`sema cloud\` for cloud registry profiles and sign-in; service/store/exec axes each local or cloud), \`sema config\`, guided \`sema onboard\`, Sema data import (\`sema import\`), background sessions (\`sema ps\`/\`sema logs\`/\`sema attach\`/\`sema kill\`), and diagnostics (\`sema doctor\`, /doctor).
|
|
208487
|
+
|
|
208484
208488
|
**Your expertise:**
|
|
208485
208489
|
|
|
208486
|
-
sema (the CLI tool): installation, configuration, settings files (~/.sema/settings.json and project .sema/), hooks, custom skills and slash commands, MCP server configuration, custom subagents (.sema/agents/), model and tier-group configuration, workflows, keyboard shortcuts, and everyday usage.
|
|
208490
|
+
sema (the CLI tool): installation, configuration, settings files (~/.sema/settings.json and project .sema/), hooks, custom skills and slash commands, MCP server configuration, custom subagents (.sema/agents/), model and tier-group configuration, cloud registry profiles, workflows, keyboard shortcuts, and everyday usage.
|
|
208487
208491
|
|
|
208488
208492
|
**Approach:**
|
|
208489
208493
|
1. Prefer the user's LOCAL ground truth: the project's memory/config files (CLAUDE.md, the .sema/ directory), the user's ~/.sema settings, and the configuration surfaced to you below.
|
|
@@ -355981,7 +355985,7 @@ function useClaudeAiLimits() {
|
|
|
355981
355985
|
var import_react64;
|
|
355982
355986
|
var init_claudeAiLimitsHook = __esm({
|
|
355983
355987
|
"build-src/src/services/claudeAiLimitsHook.ts"() {
|
|
355984
|
-
import_react64 = __toESM(require_react());
|
|
355988
|
+
import_react64 = __toESM(require_react(), 1);
|
|
355985
355989
|
init_claudeAiLimits();
|
|
355986
355990
|
}
|
|
355987
355991
|
});
|
|
@@ -440705,6 +440709,36 @@ var init_ScrollBox = __esm({
|
|
|
440705
440709
|
}
|
|
440706
440710
|
});
|
|
440707
440711
|
|
|
440712
|
+
// build-src/src/sema/selfKnowledge.ts
|
|
440713
|
+
var selfKnowledge_exports = {};
|
|
440714
|
+
__export(selfKnowledge_exports, {
|
|
440715
|
+
SEMA_IDENTITY_LINE: () => SEMA_IDENTITY_LINE,
|
|
440716
|
+
SEMA_SELF_KNOWLEDGE: () => SEMA_SELF_KNOWLEDGE,
|
|
440717
|
+
withSelfKnowledgeOutputStyle: () => withSelfKnowledgeOutputStyle
|
|
440718
|
+
});
|
|
440719
|
+
function withSelfKnowledgeOutputStyle(existing) {
|
|
440720
|
+
if (!existing || !existing.trim()) return SEMA_SELF_KNOWLEDGE;
|
|
440721
|
+
if (existing.includes("# About sema (product context)")) return existing;
|
|
440722
|
+
return `${SEMA_SELF_KNOWLEDGE}
|
|
440723
|
+
|
|
440724
|
+
${existing}`;
|
|
440725
|
+
}
|
|
440726
|
+
var SEMA_SELF_KNOWLEDGE, SEMA_IDENTITY_LINE;
|
|
440727
|
+
var init_selfKnowledge = __esm({
|
|
440728
|
+
"build-src/src/sema/selfKnowledge.ts"() {
|
|
440729
|
+
SEMA_SELF_KNOWLEDGE = `# About sema (product context)
|
|
440730
|
+
|
|
440731
|
+
You are running inside sema, an AI coding CLI. Facts you must know and act on:
|
|
440732
|
+
|
|
440733
|
+
- sema is a fully Sema-compatible CLI (same UX, tools, and ecosystem). CLAUDE.md project memory, plugin marketplaces, MCP servers, skills, hooks and subagents all work unchanged; project-level config lives in .sema/ (e.g. .sema/commands, .sema/skills \u2014 the .claude/ analogue). Never claim sema cannot use the Sema ecosystem \u2014 it can, by design.
|
|
440734
|
+
- When external docs or tutorials reference the \`claude\` command, the sema equivalent is the SAME command with \`sema\` substituted (e.g. \`sema mcp add X -- npx Y\` \u2192 \`sema mcp add X -- npx Y\`). Slash commands match Sema (/help, /model, /plugin, /doctor, /config, /agents, /resume, \u2026).
|
|
440735
|
+
- Beyond Sema, sema adds: a local engine process the TUI drives (visible in the boot panel), model freedom (any provider via the Model Hub \u2014 \`/model\` in-session or \`sema model\`; roles/tiers configurable), cloud switching (\`sema cloud\` manages cloud registry profiles and sign-in; service/store/exec axes can each run local or cloud), central config (\`sema config\`, guided \`sema onboard\`), Sema data import (\`sema import\`), background sessions (\`sema ps\` / \`sema logs\` / \`sema attach\` / \`sema kill\`), and diagnostics (\`sema doctor\`, or /doctor in-session).
|
|
440736
|
+
- Plugins: /plugin opens the plugin manager (marketplaces, install, enable/disable). Skills: /skills. Both consume the open Sema plugin/skill ecosystem directly.
|
|
440737
|
+
- If asked what sema is: an AI coding CLI, Sema-compatible and a superset of it (engine architecture, model freedom, cloud axes). If unsure whether a capability exists, verify with \`sema --help\` or the sema-guide agent instead of denying it.`;
|
|
440738
|
+
SEMA_IDENTITY_LINE = "You are part of sema, an AI coding CLI that is fully Sema-compatible (claude commands map to sema verbatim) and a superset of it (engine architecture, Model Hub, cloud axes).";
|
|
440739
|
+
}
|
|
440740
|
+
});
|
|
440741
|
+
|
|
440708
440742
|
// build-src/src/utils/sideQuestion.ts
|
|
440709
440743
|
function findBtwTriggerPositions(text2) {
|
|
440710
440744
|
const positions = [];
|
|
@@ -440779,7 +440813,8 @@ ${ctx}
|
|
|
440779
440813
|
// ②maxTokens 2048 封顶回答;③systemPrompt 语义兜底。
|
|
440780
440814
|
excludeTools: side.UTILITY_EXCLUDE_ALL_TOOLS,
|
|
440781
440815
|
maxTokens: 2048,
|
|
440782
|
-
|
|
440816
|
+
// 身份行前缀(任务 #36):侧问无主 system prompt,一句话防「what is sema」答反
|
|
440817
|
+
systemPrompt: `${(await Promise.resolve().then(() => (init_selfKnowledge(), selfKnowledge_exports))).SEMA_IDENTITY_LINE} You are answering a one-off side question. You have NO tools \u2014 do not attempt to read files, run commands, or take any actions. Answer directly from the provided context in a single response.`
|
|
440783
440818
|
});
|
|
440784
440819
|
return { response: r.text, usage: r.usage ?? EMPTY_USAGE };
|
|
440785
440820
|
} catch (e) {
|
|
@@ -480438,13 +480473,13 @@ var init_sema_brand = __esm({
|
|
|
480438
480473
|
_doc: "Rendered as the 'What's new' feed (createWhatsNewFeed). Top version MUST be >= current app version (2.1.187) and newer than config.lastReleaseNotesSeen so the notes display and full-logo mode triggers. Pinned == app version (2.1.187) + lastReleaseNotesSeen (loginState.ts) so getRecentReleaseNotes()===[] \u2192 condensed logo (matches refs/chrome.empty-input.json).",
|
|
480439
480474
|
version: "2.1.187",
|
|
480440
480475
|
notes: [
|
|
480441
|
-
"
|
|
480442
|
-
"
|
|
480443
|
-
"
|
|
480476
|
+
"The model now has built-in product knowledge: Claude Code compatibility (use `sema` wherever docs say `claude`), plugins, cloud, Model Hub, doctor \u2014 ask it anything about sema",
|
|
480477
|
+
"Plugin slash commands (e.g. /claude-hud:setup) now show up in completion and /help Custom commands \u2014 they were loaded but hidden by an over-broad visibility rule",
|
|
480478
|
+
"CC-compatibility flags that aren't wired yet now print an honest warning instead of silently doing nothing"
|
|
480444
480479
|
]
|
|
480445
480480
|
},
|
|
480446
|
-
productVersion: "1.0.
|
|
480447
|
-
announcement: "sema 1.0.
|
|
480481
|
+
productVersion: "1.0.44",
|
|
480482
|
+
announcement: "sema 1.0.44 \u2014 sema now knows itself (Claude Code compatibility, plugins, cloud, Model Hub \u2014 ask it anything), plugin slash commands like /claude-hud:setup now appear in completion and /help, and unwired CC-compat flags warn honestly."
|
|
480448
480483
|
};
|
|
480449
480484
|
}
|
|
480450
480485
|
});
|
|
@@ -483373,13 +483408,13 @@ var require_sema_brand = __commonJS({
|
|
|
483373
483408
|
_doc: "Rendered as the 'What's new' feed (createWhatsNewFeed). Top version MUST be >= current app version (2.1.187) and newer than config.lastReleaseNotesSeen so the notes display and full-logo mode triggers. Pinned == app version (2.1.187) + lastReleaseNotesSeen (loginState.ts) so getRecentReleaseNotes()===[] \u2192 condensed logo (matches refs/chrome.empty-input.json).",
|
|
483374
483409
|
version: "2.1.187",
|
|
483375
483410
|
notes: [
|
|
483376
|
-
"
|
|
483377
|
-
"
|
|
483378
|
-
"
|
|
483411
|
+
"The model now has built-in product knowledge: Claude Code compatibility (use `sema` wherever docs say `claude`), plugins, cloud, Model Hub, doctor \u2014 ask it anything about sema",
|
|
483412
|
+
"Plugin slash commands (e.g. /claude-hud:setup) now show up in completion and /help Custom commands \u2014 they were loaded but hidden by an over-broad visibility rule",
|
|
483413
|
+
"CC-compatibility flags that aren't wired yet now print an honest warning instead of silently doing nothing"
|
|
483379
483414
|
]
|
|
483380
483415
|
},
|
|
483381
|
-
productVersion: "1.0.
|
|
483382
|
-
announcement: "sema 1.0.
|
|
483416
|
+
productVersion: "1.0.44",
|
|
483417
|
+
announcement: "sema 1.0.44 \u2014 sema now knows itself (Claude Code compatibility, plugins, cloud, Model Hub \u2014 ask it anything), plugin slash commands like /claude-hud:setup now appear in completion and /help, and unwired CC-compat flags warn honestly."
|
|
483383
483418
|
};
|
|
483384
483419
|
}
|
|
483385
483420
|
});
|
|
@@ -606982,8 +607017,8 @@ function _temp158() {
|
|
|
606982
607017
|
var import_compiler_runtime312, import_react310, import_jsx_runtime458, DESKTOP_UPSELL_DEFAULT;
|
|
606983
607018
|
var init_DesktopUpsellStartup = __esm({
|
|
606984
607019
|
"build-src/src/components/DesktopUpsell/DesktopUpsellStartup.tsx"() {
|
|
606985
|
-
import_compiler_runtime312 = __toESM(require_compiler_runtime()
|
|
606986
|
-
import_react310 = __toESM(require_react()
|
|
607020
|
+
import_compiler_runtime312 = __toESM(require_compiler_runtime());
|
|
607021
|
+
import_react310 = __toESM(require_react());
|
|
606987
607022
|
init_ink2();
|
|
606988
607023
|
init_growthbook_advisor_flag();
|
|
606989
607024
|
init_analytics_index();
|
|
@@ -606991,7 +607026,7 @@ var init_DesktopUpsellStartup = __esm({
|
|
|
606991
607026
|
init_select();
|
|
606992
607027
|
init_DesktopHandoff();
|
|
606993
607028
|
init_PermissionDialog();
|
|
606994
|
-
import_jsx_runtime458 = __toESM(require_jsx_runtime()
|
|
607029
|
+
import_jsx_runtime458 = __toESM(require_jsx_runtime());
|
|
606995
607030
|
DESKTOP_UPSELL_DEFAULT = {
|
|
606996
607031
|
enable_shortcut_tip: false,
|
|
606997
607032
|
enable_startup_dialog: false
|
|
@@ -630109,6 +630144,10 @@ function toLiveRequest(req, capturedSessionId) {
|
|
|
630109
630144
|
if (typeof out6.scenario === "string" && SEMA_MOCK_SCENARIO_KEYS.has(out6.scenario)) {
|
|
630110
630145
|
delete out6.scenario;
|
|
630111
630146
|
}
|
|
630147
|
+
{
|
|
630148
|
+
const settings2 = out6.settings ?? {};
|
|
630149
|
+
out6.settings = { ...settings2, outputStyle: withSelfKnowledgeOutputStyle(settings2.outputStyle) };
|
|
630150
|
+
}
|
|
630112
630151
|
if (capturedSessionId) {
|
|
630113
630152
|
out6.sessionId = capturedSessionId;
|
|
630114
630153
|
} else if (out6.sessionId === mockClientIds.sessionId) {
|
|
@@ -630363,6 +630402,7 @@ var init_liveClient = __esm({
|
|
|
630363
630402
|
init_agentsWire();
|
|
630364
630403
|
init_detachWire();
|
|
630365
630404
|
init_headlessReconnectWire();
|
|
630405
|
+
init_selfKnowledge();
|
|
630366
630406
|
init_mockClient();
|
|
630367
630407
|
ENGINE_TO_CC_TOOL = {
|
|
630368
630408
|
bash: "Bash",
|
|
@@ -653482,6 +653522,30 @@ async function run() {
|
|
|
653482
653522
|
return value;
|
|
653483
653523
|
})).option("--sandbox <profile>", `Sandbox image profile for submitted runs: a profile name (explicit; k8s-lane workers only \u2014 list with 'sema cloud images list'), or 'auto' to let the model pick via its SelectEnvironment tool (advisory; choice + reason are echoed in the reply). Omit for the worker default image.`).option("--scenario <name>", `Engine scenario for submitted runs (only works with --print): route the run through a deployment-defined scenario (tool roster + system prompt). Unknown names fall back to the default scenario. Omit for the default scenario; a persistent default can be set via SEMA_HEADLESS_SCENARIO in the settings.json env block.`).option("--no-final-verify", `Disable the default final-verification pass for submitted runs (only works with --print). By default, headless -p runs that write files get up to two extra verification turns before finishing; this flag restores the upstream-aligned behaviour (no verification pass). A persistent default can be set via SEMA_HEADLESS_FINAL_VERIFY=false in the settings.json env block. Skipped automatically when a Stop hook is configured.`).option("--deadline <sec>", `Soft wall-clock budget in seconds for submitted runs (only works with --print; sema superset \u2014 no upstream equivalent). The engine paces itself against the deadline (pacing nudges + per-call caps) and finalizes gracefully near it; integer between 30 and 86400. A persistent default can be set via SEMA_HEADLESS_DEADLINE_SEC in the settings.json env block.`).option("--agent <agent>", `Agent for the current session. Overrides the 'agent' setting.`).option("--betas <betas...>", "Beta headers to include in API requests (API key users only)").option("--fallback-model <model>", "Enable automatic fallback to specified model when default model is overloaded (only works with --print)").addOption(new Option("--workload <tag>", "Workload tag for billing-header attribution (cc_workload). Process-scoped; set by SDK daemon callers that spawn subprocesses for cron work. (only works with --print)").hideHelp()).option("--settings <file-or-json>", "Path to a settings JSON file or a JSON string to load additional settings from").option("--add-dir <directories...>", "Additional directories to allow tool access to").option("--ide", "Automatically connect to IDE on startup if exactly one valid IDE is available", () => true).option("--strict-mcp-config", "Only use MCP servers from --mcp-config, ignoring all other MCP configurations", () => true).option("--session-id <uuid>", "Use a specific session ID for the conversation (must be a valid UUID)").option("-n, --name <name>", "Set a display name for this session (shown in /resume and terminal title)").option("--agents <json>", `JSON object defining custom agents (e.g. '{"reviewer": {"description": "Reviews code", "prompt": "You are a code reviewer"}}')`).option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").option("--plugin-dir <path>", "Load plugins from a directory for this session only (repeatable: --plugin-dir A --plugin-dir B)", (val, prev) => [...prev, val], []).addOption(new Option("--plugin-dir-no-mcp <path>", "Like --plugin-dir but the engine will not read this plugin's .mcp.json (caller owns its MCP connections)").argParser((val, prev) => [...prev, val]).default([]).hideHelp()).option("--plugin-url <url>", "Fetch a plugin .zip from a URL for this session only (repeatable: --plugin-url A --plugin-url B)", (val, prev) => [...prev, ...val.split(/\s+/).filter(Boolean)], []).option("--disable-slash-commands", "Disable all skills", () => true).option("--chrome", "Enable Claude in Chrome integration").option("--no-chrome", "Disable Claude in Chrome integration").option("--file <specs...>", "File resources to download at startup. Format: file_id:relative_path (e.g., --file file_abc:doc.txt file_def:img.png)").action(async (prompt, options) => {
|
|
653484
653524
|
profileCheckpoint("action_handler_start");
|
|
653525
|
+
{
|
|
653526
|
+
const UNWIRED_FLAGS = [
|
|
653527
|
+
["thinkingDisplay", "--thinking-display"],
|
|
653528
|
+
["promptSuggestions", "--prompt-suggestions"],
|
|
653529
|
+
["sessionMirror", "--session-mirror"],
|
|
653530
|
+
["excludeDynamicSystemPromptSections", "--exclude-dynamic-system-prompt-sections"],
|
|
653531
|
+
["replyOnResume", "--reply-on-resume"],
|
|
653532
|
+
["pluginDirNoMcp", "--plugin-dir-no-mcp"],
|
|
653533
|
+
["pluginUrl", "--plugin-url"],
|
|
653534
|
+
["background", "--bg/--background"],
|
|
653535
|
+
["bg", "--bg/--background"],
|
|
653536
|
+
["axScreenReader", "--ax-screen-reader"]
|
|
653537
|
+
];
|
|
653538
|
+
const warned2 = /* @__PURE__ */ new Set();
|
|
653539
|
+
for (const [key, flag] of UNWIRED_FLAGS) {
|
|
653540
|
+
const v2 = options[key];
|
|
653541
|
+
const set2 = v2 !== void 0 && v2 !== false && !(Array.isArray(v2) && v2.length === 0);
|
|
653542
|
+
if (set2 && !warned2.has(flag)) {
|
|
653543
|
+
warned2.add(flag);
|
|
653544
|
+
process.stderr.write(source_default.yellow(`${flag} is recognized for CC compatibility but not wired in this sema build yet \u2014 it currently has no effect.
|
|
653545
|
+
`));
|
|
653546
|
+
}
|
|
653547
|
+
}
|
|
653548
|
+
}
|
|
653485
653549
|
if (options.bare) {
|
|
653486
653550
|
process.env.SEMA_CODE_SIMPLE = "1";
|
|
653487
653551
|
}
|
|
@@ -655590,7 +655654,7 @@ Auth: unix socket -R \u2192 local proxy`, "info");
|
|
|
655590
655654
|
pendingHookMessages
|
|
655591
655655
|
}, renderAndRun);
|
|
655592
655656
|
}
|
|
655593
|
-
}).version("sema 1.0.
|
|
655657
|
+
}).version("sema 1.0.44", "-v, --version", "Output the version number");
|
|
655594
655658
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
655595
655659
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
655596
655660
|
if (canUserConfigureAdvisor()) {
|
|
@@ -660760,7 +660824,9 @@ function resolveCommandGate(cmd, caps) {
|
|
|
660760
660824
|
return { state: "denied", visible: false, degraded: false, hidden: false, reason: "config-deny" };
|
|
660761
660825
|
}
|
|
660762
660826
|
const explicitMode = override?.mode;
|
|
660763
|
-
const
|
|
660827
|
+
const source = cmd.source;
|
|
660828
|
+
const isBuiltinFace = source === void 0 || source === "builtin";
|
|
660829
|
+
const isUnbucketedFallthrough = isBuiltinFace && !bucketOf(name) && explicitMode !== "allow" && explicitMode !== "deny";
|
|
660764
660830
|
const hidden = override?.hidden === true || isUnbucketedFallthrough;
|
|
660765
660831
|
const requiredCapability = override?.requiredCapability;
|
|
660766
660832
|
if (requiredCapability) {
|