nolo-cli 0.104.0-alpha.1 → 0.104.0-alpha.2

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.
Files changed (28) hide show
  1. package/{agentDeleteCommand-2YAHAZFJ.js → agentDeleteCommand-YB3S2LPY.js} +1 -1
  2. package/{agentEmailCommands-O2KH4G7U.js → agentEmailCommands-AQZVMNLR.js} +3 -3
  3. package/{agentListCommands-GUDMBDHZ.js → agentListCommands-3GWH4E4G.js} +1 -1
  4. package/{agentMachineCommands-5I5CCUBM.js → agentMachineCommands-R5AVYYN3.js} +2 -2
  5. package/{agentRecordCommands-RSS44XHC.js → agentRecordCommands-JY4IWSSQ.js} +3 -3
  6. package/{agentRunCommand-P7VHL4ZR.js → agentRunCommand-7VTYZY3Q.js} +3 -3
  7. package/{agentRuntimeLocal-VXZSDIGT.js → agentRuntimeLocal-FRUE5P2V.js} +5 -1
  8. package/{appDeleteCommands-32MHLR4L.js → appDeleteCommands-JPWTSFID.js} +1 -1
  9. package/{appDeployCommands-WCQOUSOB.js → appDeployCommands-YCVY2UYO.js} +1 -1
  10. package/{appDeployStatusCommands-6QKB7DYN.js → appDeployStatusCommands-JMCEIKTI.js} +1 -1
  11. package/{appGetCommands-SFAPP5PB.js → appGetCommands-EXWT3QAE.js} +1 -1
  12. package/{appListCommands-EKUBDRUO.js → appListCommands-PKRLSWRE.js} +1 -1
  13. package/{chunk-6VFARHZW.js → chunk-LC43IGO4.js} +291 -130
  14. package/{chunk-4J4QNKTW.js → chunk-O7EBSHZR.js} +3 -3
  15. package/{chunk-ITBLTYQB.js → chunk-RJ4QOQDA.js} +9 -1
  16. package/{chunk-7SOWRCQQ.js → chunk-S6JLBH6Z.js} +1 -1
  17. package/{chunk-B6P4QKEN.js → chunk-VLI5LVL5.js} +2 -2
  18. package/{dialogCommands-5J56DFWN.js → dialogCommands-YVMHDEOX.js} +1 -1
  19. package/{docCreateCommands-KYI2DC2U.js → docCreateCommands-7UTWDYJU.js} +1 -1
  20. package/{docDeleteCommands-67REUSRY.js → docDeleteCommands-GG6BJ4PS.js} +1 -1
  21. package/{docReadCommands-HOSVSBDJ.js → docReadCommands-QHMQVSLP.js} +1 -1
  22. package/{docUpdateCommands-EMGCSMXY.js → docUpdateCommands-QPL6IVUK.js} +1 -1
  23. package/index.js +41 -41
  24. package/{machineCommands-G5J754EH.js → machineCommands-7DEUPY32.js} +3 -3
  25. package/{machineWsRunDispatch-VXYBYYKM.js → machineWsRunDispatch-D2NHL3P7.js} +3 -3
  26. package/package.json +1 -1
  27. package/{readlineWorkspace-TGCYJFEB.js → readlineWorkspace-JP2AOALW.js} +3 -3
  28. package/{spaceCommands-NKJVJCQQ.js → spaceCommands-BMXKR7H6.js} +1 -1
@@ -15,7 +15,7 @@ import "./chunk-KQHGZWSV.js";
15
15
  import {
16
16
  Level
17
17
  } from "./chunk-UV6VISQJ.js";
18
- import "./chunk-6VFARHZW.js";
18
+ import "./chunk-LC43IGO4.js";
19
19
  import "./chunk-ZCYXJSTU.js";
20
20
  import "./chunk-Q5FJJ6XI.js";
21
21
  import "./chunk-ZNFJWEN4.js";
@@ -8,8 +8,8 @@ import {
8
8
  } from "./chunk-V7E4PXQD.js";
9
9
  import {
10
10
  runAgentCreateCommand
11
- } from "./chunk-7SOWRCQQ.js";
12
- import "./chunk-ITBLTYQB.js";
11
+ } from "./chunk-S6JLBH6Z.js";
12
+ import "./chunk-RJ4QOQDA.js";
13
13
  import "./chunk-53HEEOTT.js";
14
14
  import "./chunk-EADNWBAZ.js";
15
15
  import "./chunk-SH43IESU.js";
@@ -71,7 +71,7 @@ import "./chunk-JRQFUXY7.js";
71
71
  import "./chunk-DHDMC6FO.js";
72
72
  import "./chunk-Q554LLSI.js";
73
73
  import "./chunk-KHCLMKZZ.js";
74
- import "./chunk-6VFARHZW.js";
74
+ import "./chunk-LC43IGO4.js";
75
75
  import "./chunk-ZCYXJSTU.js";
76
76
  import "./chunk-Q5FJJ6XI.js";
77
77
  import "./chunk-ZNFJWEN4.js";
@@ -40,7 +40,7 @@ import {
40
40
  } from "./chunk-PQFHGD77.js";
41
41
  import "./chunk-KQHGZWSV.js";
42
42
  import "./chunk-YYLHWIW6.js";
43
- import "./chunk-6VFARHZW.js";
43
+ import "./chunk-LC43IGO4.js";
44
44
  import "./chunk-ZCYXJSTU.js";
45
45
  import "./chunk-Q5FJJ6XI.js";
46
46
  import "./chunk-ZNFJWEN4.js";
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-SV5IJK6K.js";
16
16
  import "./chunk-NF64D32W.js";
17
17
  import "./chunk-3L2WKC3W.js";
18
- import "./chunk-6VFARHZW.js";
18
+ import "./chunk-LC43IGO4.js";
19
19
  import "./chunk-ZCYXJSTU.js";
20
20
  import "./chunk-Q5FJJ6XI.js";
21
21
  import "./chunk-ZNFJWEN4.js";
@@ -91,7 +91,7 @@ async function defaultExecuteCli(provider, prompt, options) {
91
91
  return executeCli(provider, prompt, options);
92
92
  }
93
93
  async function forwardConnectorRunMessage(machine, message, pushMessage, executeCli, env, fetchImpl) {
94
- const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-VXYBYYKM.js");
94
+ const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-D2NHL3P7.js");
95
95
  return handleConnectorRunMessage(message, pushMessage, executeCli, env, fetchImpl);
96
96
  }
97
97
  async function detectLaunchableMachineInfo() {
@@ -2,8 +2,8 @@ import {
2
2
  runAgentCreateCommand,
3
3
  runAgentReadCommand,
4
4
  runAgentUpdateCommand
5
- } from "./chunk-7SOWRCQQ.js";
6
- import "./chunk-ITBLTYQB.js";
5
+ } from "./chunk-S6JLBH6Z.js";
6
+ import "./chunk-RJ4QOQDA.js";
7
7
  import "./chunk-53HEEOTT.js";
8
8
  import "./chunk-EADNWBAZ.js";
9
9
  import "./chunk-SH43IESU.js";
@@ -58,7 +58,7 @@ import "./chunk-JRQFUXY7.js";
58
58
  import "./chunk-DHDMC6FO.js";
59
59
  import "./chunk-Q554LLSI.js";
60
60
  import "./chunk-KHCLMKZZ.js";
61
- import "./chunk-6VFARHZW.js";
61
+ import "./chunk-LC43IGO4.js";
62
62
  import "./chunk-ZCYXJSTU.js";
63
63
  import "./chunk-Q5FJJ6XI.js";
64
64
  import "./chunk-ZNFJWEN4.js";
@@ -8,12 +8,12 @@ import {
8
8
  resolveRunSettlementNote,
9
9
  resolveWorkflowReference,
10
10
  runAgentRunCommand
11
- } from "./chunk-4J4QNKTW.js";
11
+ } from "./chunk-O7EBSHZR.js";
12
12
  import "./chunk-S7Z2HMCN.js";
13
13
  import {
14
14
  parseAgentRunArgs
15
15
  } from "./chunk-V7E4PXQD.js";
16
- import "./chunk-ITBLTYQB.js";
16
+ import "./chunk-RJ4QOQDA.js";
17
17
  import "./chunk-53HEEOTT.js";
18
18
  import "./chunk-EADNWBAZ.js";
19
19
  import "./chunk-SH43IESU.js";
@@ -74,7 +74,7 @@ import "./chunk-JRQFUXY7.js";
74
74
  import "./chunk-DHDMC6FO.js";
75
75
  import "./chunk-Q554LLSI.js";
76
76
  import "./chunk-KHCLMKZZ.js";
77
- import "./chunk-6VFARHZW.js";
77
+ import "./chunk-LC43IGO4.js";
78
78
  import "./chunk-ZCYXJSTU.js";
79
79
  import "./chunk-Q5FJJ6XI.js";
80
80
  import "./chunk-ZNFJWEN4.js";
@@ -5,12 +5,14 @@ import {
5
5
  buildLocalWorkspacePolicyToolNames,
6
6
  buildLocalWorkspaceToolset,
7
7
  buildOpenAiCompatibleChatCompletionRequest,
8
+ buildToolParametersIndex,
8
9
  createHybridRecordStore,
9
10
  createLocalWorkspaceToolExecutors,
10
11
  dialogMessageRecordToAgentRuntimeMessage,
11
12
  evaluateShellCommandPolicy,
12
13
  executeLocalToolWithPolicy,
13
14
  executeOpenAiCompatibleChatCompletion,
15
+ getAgentRuntimeToolParametersIndex,
14
16
  isDestructiveShellCommand,
15
17
  parseOpenAiCompatibleChatCompletionResponse,
16
18
  parseSyncServersEnv,
@@ -19,7 +21,7 @@ import {
19
21
  resolveOpenAiCompatibleProviderConfig,
20
22
  runLocalAgentTurn,
21
23
  shouldCacheHybridRemoteRecord
22
- } from "./chunk-6VFARHZW.js";
24
+ } from "./chunk-LC43IGO4.js";
23
25
  import {
24
26
  buildPlatformChatCompletionRequest,
25
27
  canUsePlatformChatProvider,
@@ -105,6 +107,7 @@ export {
105
107
  buildLocalWorkspaceToolset,
106
108
  buildOpenAiCompatibleChatCompletionRequest,
107
109
  buildPlatformChatCompletionRequest,
110
+ buildToolParametersIndex,
108
111
  canUsePlatformChatProvider,
109
112
  createHybridRecordStore,
110
113
  createLocalWorkspaceToolExecutors,
@@ -112,6 +115,7 @@ export {
112
115
  evaluateShellCommandPolicy,
113
116
  executeLocalToolWithPolicy,
114
117
  executeOpenAiCompatibleChatCompletion,
118
+ getAgentRuntimeToolParametersIndex,
115
119
  hasDirectOpenAiCompatibleProvider,
116
120
  isDestructiveShellCommand,
117
121
  parseOpenAiCompatibleChatCompletionResponse,
@@ -13,7 +13,7 @@ import "./chunk-AEOE4Z6Q.js";
13
13
  import "./chunk-Z77CRGTW.js";
14
14
  import "./chunk-SV5IJK6K.js";
15
15
  import "./chunk-VF4K2QE6.js";
16
- import "./chunk-6VFARHZW.js";
16
+ import "./chunk-LC43IGO4.js";
17
17
  import "./chunk-ZCYXJSTU.js";
18
18
  import "./chunk-Q5FJJ6XI.js";
19
19
  import "./chunk-ZNFJWEN4.js";
@@ -14,7 +14,7 @@ import "./chunk-AEOE4Z6Q.js";
14
14
  import "./chunk-Z77CRGTW.js";
15
15
  import "./chunk-SV5IJK6K.js";
16
16
  import "./chunk-VF4K2QE6.js";
17
- import "./chunk-6VFARHZW.js";
17
+ import "./chunk-LC43IGO4.js";
18
18
  import "./chunk-ZCYXJSTU.js";
19
19
  import "./chunk-Q5FJJ6XI.js";
20
20
  import "./chunk-ZNFJWEN4.js";
@@ -13,7 +13,7 @@ import "./chunk-AEOE4Z6Q.js";
13
13
  import "./chunk-Z77CRGTW.js";
14
14
  import "./chunk-SV5IJK6K.js";
15
15
  import "./chunk-VF4K2QE6.js";
16
- import "./chunk-6VFARHZW.js";
16
+ import "./chunk-LC43IGO4.js";
17
17
  import "./chunk-ZCYXJSTU.js";
18
18
  import "./chunk-Q5FJJ6XI.js";
19
19
  import "./chunk-ZNFJWEN4.js";
@@ -14,7 +14,7 @@ import "./chunk-AEOE4Z6Q.js";
14
14
  import "./chunk-Z77CRGTW.js";
15
15
  import "./chunk-SV5IJK6K.js";
16
16
  import "./chunk-VF4K2QE6.js";
17
- import "./chunk-6VFARHZW.js";
17
+ import "./chunk-LC43IGO4.js";
18
18
  import "./chunk-ZCYXJSTU.js";
19
19
  import "./chunk-Q5FJJ6XI.js";
20
20
  import "./chunk-ZNFJWEN4.js";
@@ -14,7 +14,7 @@ import "./chunk-AEOE4Z6Q.js";
14
14
  import "./chunk-Z77CRGTW.js";
15
15
  import "./chunk-SV5IJK6K.js";
16
16
  import "./chunk-VF4K2QE6.js";
17
- import "./chunk-6VFARHZW.js";
17
+ import "./chunk-LC43IGO4.js";
18
18
  import "./chunk-ZCYXJSTU.js";
19
19
  import "./chunk-Q5FJJ6XI.js";
20
20
  import "./chunk-ZNFJWEN4.js";
@@ -64,6 +64,7 @@ import {
64
64
  applyToolSurfaceConstraints,
65
65
  buildDialogReadEnvelope,
66
66
  buildNoloWorkspaceCommandArgs,
67
+ buildNoloWorkspaceOpenAiTools,
67
68
  createStreamingDialogReadProjector,
68
69
  noloPositiveIntegerString,
69
70
  noloStringArg,
@@ -15652,132 +15653,6 @@ async function evaluateCapabilityPolicy(capability, normalizedInput, ctx) {
15652
15653
  }
15653
15654
  }
15654
15655
 
15655
- // packages/agent-runtime/localToolPolicy.ts
15656
- var NEVER_LOCAL_TOOLS = /* @__PURE__ */ new Set([
15657
- "deleteSpaces",
15658
- "updateAgent",
15659
- "updateSelf",
15660
- "createAgent"
15661
- ]);
15662
- var DEFAULT_LOCAL_TOOLS = /* @__PURE__ */ new Set([
15663
- "readFile",
15664
- "writeFile",
15665
- "editFile",
15666
- "globFiles",
15667
- "execShell",
15668
- "launchProcess",
15669
- "listProcesses",
15670
- // ProcessTask follow-up tools. Same tier as listProcesses: they observe/stop
15671
- // tasks the agent itself already spawned, so their blast radius is strictly
15672
- // narrower than launchProcess (which is default-enabled). Model-facing
15673
- // follow-ups are taskWait/taskStop only — lifecycle history (taskLogs) stays
15674
- // runtime-internal.
15675
- "taskWait",
15676
- "taskStop",
15677
- // Scheduling tools: forking/observing sub-agents is a declared capability
15678
- // of capable agents, and the blast radius is strictly narrower than
15679
- // execShell (already default-enabled). Requiring an env allowlist for these
15680
- // while execShell is open by default inverted the risk model and forced every
15681
- // new local user to hand-edit .env files before sub-agent tasks worked.
15682
- "startAgentRun",
15683
- "controlAgentRun"
15684
- ]);
15685
- function parseToolAllowlist(value) {
15686
- return (value ?? "").split(",").flatMap((item) => {
15687
- const trimmed = item.trim();
15688
- return trimmed ? [trimmed] : [];
15689
- });
15690
- }
15691
- function normalizeLocalToolName(toolName) {
15692
- return canonicalizeToolName(
15693
- String(toolName ?? "").replace(/^functions\./, "").trim()
15694
- );
15695
- }
15696
- function isRestrictedLocalToolMode(env) {
15697
- return env.NOLO_LOCAL_TOOL_MODE === "restricted";
15698
- }
15699
- function resolveLocalToolPolicy(args2) {
15700
- const toolName = normalizeLocalToolName(args2.toolName);
15701
- const restrictedMode = isRestrictedLocalToolMode(args2.env);
15702
- if (!toolName) {
15703
- return {
15704
- allowed: false,
15705
- toolName,
15706
- reason: "Tool name is required."
15707
- };
15708
- }
15709
- if (NEVER_LOCAL_TOOLS.has(toolName)) {
15710
- return {
15711
- allowed: false,
15712
- toolName,
15713
- reason: `${toolName} is blocked by the local runtime safety policy.`
15714
- };
15715
- }
15716
- const allowedByEnv = new Set(parseToolAllowlist(args2.env.NOLO_LOCAL_ALLOWED_TOOLS));
15717
- const agentTools = new Set(
15718
- (args2.agentToolNames ?? []).flatMap((item) => {
15719
- const normalized = normalizeLocalToolName(item);
15720
- return normalized ? [normalized] : [];
15721
- })
15722
- );
15723
- if (!restrictedMode && agentTools.has(toolName)) {
15724
- return { allowed: true, toolName };
15725
- }
15726
- if (DEFAULT_LOCAL_TOOLS.has(toolName) && agentTools.has(toolName)) {
15727
- return { allowed: true, toolName };
15728
- }
15729
- if (allowedByEnv.has(toolName) && agentTools.has(toolName)) {
15730
- return { allowed: true, toolName };
15731
- }
15732
- return {
15733
- allowed: false,
15734
- toolName,
15735
- reason: `${toolName} is not enabled for local runtime runs. The agent must declare the tool in its manifest; in restricted mode (NOLO_LOCAL_TOOL_MODE=restricted) non-default tools also require adding to NOLO_LOCAL_ALLOWED_TOOLS (e.g. NOLO_LOCAL_ALLOWED_TOOLS=someCustomTool) and restarting the session so the env var loads.`
15736
- };
15737
- }
15738
- async function executeLocalToolWithPolicy(args2) {
15739
- if (args2.runToolNames !== void 0 && !args2.runToolNames.includes(normalizeLocalToolName(args2.call.name))) {
15740
- throw new Error(`${args2.call.name} is outside the final run tool surface.`);
15741
- }
15742
- const decision = resolveLocalToolPolicy({
15743
- env: args2.env,
15744
- agentToolNames: args2.agentToolNames,
15745
- toolName: args2.call.name
15746
- });
15747
- if (!decision.allowed) throw new Error(decision.reason);
15748
- const executor = args2.executors?.[decision.toolName];
15749
- if (!executor) {
15750
- throw new Error(`${decision.toolName} is allowed by policy but no local executor is registered.`);
15751
- }
15752
- const opts = {
15753
- ...args2.abortSignal ? { abortSignal: args2.abortSignal } : {},
15754
- ...args2.detachMs !== void 0 ? { detachMs: args2.detachMs } : {},
15755
- ...args2.confirmed !== void 0 ? { confirmed: args2.confirmed } : {},
15756
- ...args2.enableDestructiveShellGuard !== void 0 ? { enableDestructiveShellGuard: args2.enableDestructiveShellGuard } : {},
15757
- ...args2.confirmDestructiveAction ? { confirmDestructiveAction: args2.confirmDestructiveAction } : {},
15758
- ...args2.blockDestructiveWithoutConfirmation !== void 0 ? { blockDestructiveWithoutConfirmation: args2.blockDestructiveWithoutConfirmation } : {}
15759
- };
15760
- if (decision.toolName === "execShell") {
15761
- let parsedInput = args2.call.arguments;
15762
- if (typeof parsedInput === "string") {
15763
- try {
15764
- parsedInput = JSON.parse(parsedInput);
15765
- } catch {
15766
- parsedInput = { command: parsedInput };
15767
- }
15768
- }
15769
- await evaluateExecShellDestructiveGuard(parsedInput, opts);
15770
- opts.confirmed = true;
15771
- }
15772
- return executor(
15773
- {
15774
- ...args2.call,
15775
- name: decision.toolName
15776
- },
15777
- opts
15778
- );
15779
- }
15780
-
15781
15656
  // packages/agent-runtime/localWorkspaceTools.ts
15782
15657
  import { existsSync as existsSync3 } from "node:fs";
15783
15658
  import { createHash as createHash3 } from "node:crypto";
@@ -19312,6 +19187,290 @@ function createLocalWorkspaceToolExecutors(args2) {
19312
19187
  };
19313
19188
  }
19314
19189
 
19190
+ // packages/agent-runtime/toolArgumentGate.ts
19191
+ var FIELD_ALIAS_GROUPS = [
19192
+ // localWorkspaceTools.ts:336 导出常量(readFile/writeFile/editFile/globFiles)
19193
+ PATH_FIELD_ALIASES,
19194
+ // localWorkspaceTools.ts:339-340 导出常量(editFile)
19195
+ OLD_TEXT_FIELD_ALIASES,
19196
+ NEW_TEXT_FIELD_ALIASES,
19197
+ // localWorkspaceTools.ts:733 `args.cmd || args.command`(launchProcess);
19198
+ // launchProcess 的 required ["command"] 见 localWorkspaceToolDefs.ts:283。
19199
+ // 注:execShell 的 schema 无 required(command 在 executor 层强制,
19200
+ // capabilities/execShellCapability.ts:42 声明 cmd 兼容字段),本组对它不产生拦截。
19201
+ ["command", "cmd"],
19202
+ // localWorkspaceTools.ts:698-699 `args.pattern ?? args.glob`(globFiles)
19203
+ ["pattern", "glob"],
19204
+ // noloWorkspaceTools.ts:492 `args.dialog ?? args.dialogId ?? args.id`(readDialog)
19205
+ ["dialog", "dialogId", "id"],
19206
+ // noloWorkspaceTools.ts:545 `args.agent ?? args.agentKey ?? args.id`(readAgent)
19207
+ ["agent", "agentKey", "id"],
19208
+ // noloWorkspaceTools.ts:552 `args.space ?? args.spaceId ?? args.id`(readSpace)
19209
+ ["space", "spaceId", "id"],
19210
+ // noloWorkspaceTools.ts:561/567 `args.doc ?? args.docKey ?? args.pageKey ?? args.key`
19211
+ // (readDoc / readSkillDoc)
19212
+ ["doc", "docKey", "pageKey", "key"],
19213
+ // noloWorkspaceTools.node.ts:238 `parsed.name ?? parsed.skillName ?? parsed.skill`(loadSkill)
19214
+ ["name", "skillName", "skill"],
19215
+ // noloWorkspaceTools.ts:593 `args.table ?? args.tableId ?? args.metaKey`(queryTableRows)
19216
+ ["table", "tableId", "metaKey"]
19217
+ ];
19218
+ var TYPE_MATCHERS = {
19219
+ string: (value) => typeof value === "string",
19220
+ // 数字字符串视为可接受:executor 普遍 Number()/clamp 宽松处理,拦截会误报。
19221
+ number: (value) => typeof value === "number" || typeof value === "string" && value.trim() !== "" && Number.isFinite(Number(value)),
19222
+ integer: (value) => typeof value === "number" || typeof value === "string" && value.trim() !== "" && Number.isFinite(Number(value)),
19223
+ boolean: (value) => typeof value === "boolean" || value === "true" || value === "false",
19224
+ object: (value) => typeof value === "object" && value !== null && !Array.isArray(value),
19225
+ array: (value) => Array.isArray(value)
19226
+ };
19227
+ function describeValueType(value) {
19228
+ if (value === null) return "null";
19229
+ if (Array.isArray(value)) return "array";
19230
+ return typeof value;
19231
+ }
19232
+ function isAliasSatisfied(args2, field) {
19233
+ for (const group of FIELD_ALIAS_GROUPS) {
19234
+ if (!group.includes(field)) continue;
19235
+ if (group.some((alias) => args2[alias] !== void 0)) return true;
19236
+ }
19237
+ return false;
19238
+ }
19239
+ function readRequiredFields(parameters) {
19240
+ const required = parameters.required;
19241
+ if (!Array.isArray(required)) return [];
19242
+ return required.filter((field) => typeof field === "string");
19243
+ }
19244
+ function readProperties(parameters) {
19245
+ const properties = parameters.properties;
19246
+ if (!properties || typeof properties !== "object" || Array.isArray(properties)) {
19247
+ return {};
19248
+ }
19249
+ return properties;
19250
+ }
19251
+ function validateToolArguments(args2) {
19252
+ const { toolName, rawArguments, parameters } = args2;
19253
+ if (!parameters || typeof parameters !== "object" || Array.isArray(parameters)) {
19254
+ return { ok: true, args: {} };
19255
+ }
19256
+ const schema = parameters;
19257
+ const requiredFields = readRequiredFields(schema);
19258
+ const properties = readProperties(schema);
19259
+ if (requiredFields.length === 0 && Object.keys(properties).length === 0) {
19260
+ return { ok: true, args: {} };
19261
+ }
19262
+ const raw = typeof rawArguments === "string" ? rawArguments.trim() : "";
19263
+ let record = {};
19264
+ if (raw !== "") {
19265
+ let parsed;
19266
+ try {
19267
+ parsed = JSON.parse(raw);
19268
+ } catch {
19269
+ return { ok: true, args: {} };
19270
+ }
19271
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
19272
+ return { ok: true, args: {} };
19273
+ }
19274
+ record = parsed;
19275
+ }
19276
+ for (const field of requiredFields) {
19277
+ if (record[field] !== void 0) continue;
19278
+ if (isAliasSatisfied(record, field)) continue;
19279
+ return {
19280
+ ok: false,
19281
+ message: `${toolName} \u53C2\u6570\u6821\u9A8C\u5931\u8D25\uFF1A\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 "${field}"\u3002\u8BF7\u8865\u4E0A\u540E\u91CD\u65B0\u8C03\u7528 ${toolName}\u3002`
19282
+ };
19283
+ }
19284
+ for (const [field, spec] of Object.entries(properties)) {
19285
+ const value = record[field];
19286
+ if (value === void 0 || value === null) continue;
19287
+ if (!spec || typeof spec !== "object" || Array.isArray(spec)) continue;
19288
+ const declared = spec.type;
19289
+ if (typeof declared !== "string") continue;
19290
+ const matcher = TYPE_MATCHERS[declared];
19291
+ if (!matcher) continue;
19292
+ if (!matcher(value)) {
19293
+ return {
19294
+ ok: false,
19295
+ message: `${toolName} \u53C2\u6570\u6821\u9A8C\u5931\u8D25\uFF1A\u53C2\u6570 "${field}" \u5E94\u4E3A ${declared}\uFF0C\u5B9E\u9645\u6536\u5230 ${describeValueType(value)}\u3002\u8BF7\u4FEE\u6B63\u540E\u91CD\u65B0\u8C03\u7528 ${toolName}\u3002`
19296
+ };
19297
+ }
19298
+ }
19299
+ return { ok: true, args: record };
19300
+ }
19301
+ function buildToolParametersIndex(tools) {
19302
+ const index = /* @__PURE__ */ new Map();
19303
+ for (const tool of tools) {
19304
+ if (!tool || typeof tool !== "object") continue;
19305
+ const fn3 = tool.function;
19306
+ if (!fn3 || typeof fn3 !== "object") continue;
19307
+ const name = fn3.name;
19308
+ const parameters = fn3.parameters;
19309
+ if (typeof name === "string" && name && parameters !== void 0) {
19310
+ index.set(name, parameters);
19311
+ }
19312
+ }
19313
+ return index;
19314
+ }
19315
+ var cachedAgentRuntimeIndex = null;
19316
+ function getAgentRuntimeToolParametersIndex() {
19317
+ if (cachedAgentRuntimeIndex) return cachedAgentRuntimeIndex;
19318
+ const index = /* @__PURE__ */ new Map();
19319
+ try {
19320
+ const workspaceTools = buildLocalWorkspaceOpenAiTools({
19321
+ toolNames: [...WORKSPACE_TOOL_NAMES],
19322
+ exposeShellTools: true
19323
+ });
19324
+ for (const [name, parameters] of buildToolParametersIndex(workspaceTools)) {
19325
+ index.set(name, parameters);
19326
+ }
19327
+ const noloTools = buildNoloWorkspaceOpenAiTools({
19328
+ toolNames: [...NOLO_WORKSPACE_TOOL_NAMES]
19329
+ });
19330
+ for (const [name, parameters] of buildToolParametersIndex(noloTools)) {
19331
+ index.set(name, parameters);
19332
+ }
19333
+ } catch {
19334
+ }
19335
+ cachedAgentRuntimeIndex = index;
19336
+ return index;
19337
+ }
19338
+
19339
+ // packages/agent-runtime/localToolPolicy.ts
19340
+ var NEVER_LOCAL_TOOLS = /* @__PURE__ */ new Set([
19341
+ "deleteSpaces",
19342
+ "updateAgent",
19343
+ "updateSelf",
19344
+ "createAgent"
19345
+ ]);
19346
+ var DEFAULT_LOCAL_TOOLS = /* @__PURE__ */ new Set([
19347
+ "readFile",
19348
+ "writeFile",
19349
+ "editFile",
19350
+ "globFiles",
19351
+ "execShell",
19352
+ "launchProcess",
19353
+ "listProcesses",
19354
+ // ProcessTask follow-up tools. Same tier as listProcesses: they observe/stop
19355
+ // tasks the agent itself already spawned, so their blast radius is strictly
19356
+ // narrower than launchProcess (which is default-enabled). Model-facing
19357
+ // follow-ups are taskWait/taskStop only — lifecycle history (taskLogs) stays
19358
+ // runtime-internal.
19359
+ "taskWait",
19360
+ "taskStop",
19361
+ // Scheduling tools: forking/observing sub-agents is a declared capability
19362
+ // of capable agents, and the blast radius is strictly narrower than
19363
+ // execShell (already default-enabled). Requiring an env allowlist for these
19364
+ // while execShell is open by default inverted the risk model and forced every
19365
+ // new local user to hand-edit .env files before sub-agent tasks worked.
19366
+ "startAgentRun",
19367
+ "controlAgentRun"
19368
+ ]);
19369
+ function parseToolAllowlist(value) {
19370
+ return (value ?? "").split(",").flatMap((item) => {
19371
+ const trimmed = item.trim();
19372
+ return trimmed ? [trimmed] : [];
19373
+ });
19374
+ }
19375
+ function normalizeLocalToolName(toolName) {
19376
+ return canonicalizeToolName(
19377
+ String(toolName ?? "").replace(/^functions\./, "").trim()
19378
+ );
19379
+ }
19380
+ function isRestrictedLocalToolMode(env) {
19381
+ return env.NOLO_LOCAL_TOOL_MODE === "restricted";
19382
+ }
19383
+ function resolveLocalToolPolicy(args2) {
19384
+ const toolName = normalizeLocalToolName(args2.toolName);
19385
+ const restrictedMode = isRestrictedLocalToolMode(args2.env);
19386
+ if (!toolName) {
19387
+ return {
19388
+ allowed: false,
19389
+ toolName,
19390
+ reason: "Tool name is required."
19391
+ };
19392
+ }
19393
+ if (NEVER_LOCAL_TOOLS.has(toolName)) {
19394
+ return {
19395
+ allowed: false,
19396
+ toolName,
19397
+ reason: `${toolName} is blocked by the local runtime safety policy.`
19398
+ };
19399
+ }
19400
+ const allowedByEnv = new Set(parseToolAllowlist(args2.env.NOLO_LOCAL_ALLOWED_TOOLS));
19401
+ const agentTools = new Set(
19402
+ (args2.agentToolNames ?? []).flatMap((item) => {
19403
+ const normalized = normalizeLocalToolName(item);
19404
+ return normalized ? [normalized] : [];
19405
+ })
19406
+ );
19407
+ if (!restrictedMode && agentTools.has(toolName)) {
19408
+ return { allowed: true, toolName };
19409
+ }
19410
+ if (DEFAULT_LOCAL_TOOLS.has(toolName) && agentTools.has(toolName)) {
19411
+ return { allowed: true, toolName };
19412
+ }
19413
+ if (allowedByEnv.has(toolName) && agentTools.has(toolName)) {
19414
+ return { allowed: true, toolName };
19415
+ }
19416
+ return {
19417
+ allowed: false,
19418
+ toolName,
19419
+ reason: `${toolName} is not enabled for local runtime runs. The agent must declare the tool in its manifest; in restricted mode (NOLO_LOCAL_TOOL_MODE=restricted) non-default tools also require adding to NOLO_LOCAL_ALLOWED_TOOLS (e.g. NOLO_LOCAL_ALLOWED_TOOLS=someCustomTool) and restarting the session so the env var loads.`
19420
+ };
19421
+ }
19422
+ async function executeLocalToolWithPolicy(args2) {
19423
+ if (args2.runToolNames !== void 0 && !args2.runToolNames.includes(normalizeLocalToolName(args2.call.name))) {
19424
+ throw new Error(`${args2.call.name} is outside the final run tool surface.`);
19425
+ }
19426
+ const decision = resolveLocalToolPolicy({
19427
+ env: args2.env,
19428
+ agentToolNames: args2.agentToolNames,
19429
+ toolName: args2.call.name
19430
+ });
19431
+ if (!decision.allowed) throw new Error(decision.reason);
19432
+ const executor = args2.executors?.[decision.toolName];
19433
+ if (!executor) {
19434
+ throw new Error(`${decision.toolName} is allowed by policy but no local executor is registered.`);
19435
+ }
19436
+ const parametersSchema = args2.toolParametersIndex?.get(decision.toolName);
19437
+ if (parametersSchema !== void 0) {
19438
+ const gate = validateToolArguments({
19439
+ toolName: decision.toolName,
19440
+ rawArguments: args2.call.arguments,
19441
+ parameters: parametersSchema
19442
+ });
19443
+ if (!gate.ok) throw new Error(gate.message);
19444
+ }
19445
+ const opts = {
19446
+ ...args2.abortSignal ? { abortSignal: args2.abortSignal } : {},
19447
+ ...args2.detachMs !== void 0 ? { detachMs: args2.detachMs } : {},
19448
+ ...args2.confirmed !== void 0 ? { confirmed: args2.confirmed } : {},
19449
+ ...args2.enableDestructiveShellGuard !== void 0 ? { enableDestructiveShellGuard: args2.enableDestructiveShellGuard } : {},
19450
+ ...args2.confirmDestructiveAction ? { confirmDestructiveAction: args2.confirmDestructiveAction } : {},
19451
+ ...args2.blockDestructiveWithoutConfirmation !== void 0 ? { blockDestructiveWithoutConfirmation: args2.blockDestructiveWithoutConfirmation } : {}
19452
+ };
19453
+ if (decision.toolName === "execShell") {
19454
+ let parsedInput = args2.call.arguments;
19455
+ if (typeof parsedInput === "string") {
19456
+ try {
19457
+ parsedInput = JSON.parse(parsedInput);
19458
+ } catch {
19459
+ parsedInput = { command: parsedInput };
19460
+ }
19461
+ }
19462
+ await evaluateExecShellDestructiveGuard(parsedInput, opts);
19463
+ opts.confirmed = true;
19464
+ }
19465
+ return executor(
19466
+ {
19467
+ ...args2.call,
19468
+ name: decision.toolName
19469
+ },
19470
+ opts
19471
+ );
19472
+ }
19473
+
19315
19474
  // packages/cli/client/localDialogRecords.ts
19316
19475
  var localDialogMessageRecordToRuntimeMessage = dialogMessageRecordToAgentRuntimeMessage;
19317
19476
  function buildLocalDialogWritePlan(args2) {
@@ -20016,7 +20175,7 @@ function buildGeminiGenerateContentRequest(args2) {
20016
20175
  const toolsResult = convertOpenAiToolsToGemini(args2.tools);
20017
20176
  if (toolsResult) {
20018
20177
  request3.tools = toolsResult;
20019
- request3.toolConfig = { functionCallingConfig: { mode: "VALIDATED" } };
20178
+ request3.toolConfig = { functionCallingConfig: { mode: "AUTO" } };
20020
20179
  }
20021
20180
  const generationConfig = {};
20022
20181
  if (typeof args2.maxTokens === "number" && args2.maxTokens > 0) {
@@ -20065,7 +20224,7 @@ function buildCloudCodeAssistPayload(args2) {
20065
20224
  );
20066
20225
  if (tools) {
20067
20226
  request3.tools = tools;
20068
- request3.toolConfig = { functionCallingConfig: { mode: "VALIDATED" } };
20227
+ request3.toolConfig = { functionCallingConfig: { mode: "AUTO" } };
20069
20228
  }
20070
20229
  const generationConfig = {};
20071
20230
  if (profile?.maxOutputTokens) {
@@ -20792,8 +20951,6 @@ export {
20792
20951
  createHybridRecordStore,
20793
20952
  isDestructiveShellCommand,
20794
20953
  evaluateShellCommandPolicy,
20795
- resolveLocalToolPolicy,
20796
- executeLocalToolWithPolicy,
20797
20954
  filterRetainedLedgerRecords,
20798
20955
  isLineRangeCovered,
20799
20956
  getProcessRegistry,
@@ -20804,6 +20961,10 @@ export {
20804
20961
  internalSearchWorkspace,
20805
20962
  internalListWorkspaceEntries,
20806
20963
  createLocalWorkspaceToolExecutors,
20964
+ buildToolParametersIndex,
20965
+ getAgentRuntimeToolParametersIndex,
20966
+ resolveLocalToolPolicy,
20967
+ executeLocalToolWithPolicy,
20807
20968
  localDialogMessageRecordToRuntimeMessage,
20808
20969
  buildLocalDialogWritePlan,
20809
20970
  buildNoloWorkspaceCliToolExecutors,
@@ -27,7 +27,7 @@ import {
27
27
  resolveLocalUserId,
28
28
  t,
29
29
  toolLabel
30
- } from "./chunk-ITBLTYQB.js";
30
+ } from "./chunk-RJ4QOQDA.js";
31
31
  import {
32
32
  createRunActivityTracker,
33
33
  popSingleQueueMessage,
@@ -115,7 +115,7 @@ import {
115
115
  LOCAL_AGENT_CONFIG_MISSING_CODE,
116
116
  LOCAL_TURN_ABORTED_CODE,
117
117
  readActionGate
118
- } from "./chunk-6VFARHZW.js";
118
+ } from "./chunk-LC43IGO4.js";
119
119
  import {
120
120
  resolveAgentRuntimeConfigFromRecord
121
121
  } from "./chunk-5H7KJX7J.js";
@@ -10459,7 +10459,7 @@ function findCollapsedPasteSpanAt(buffer, pos, opts = {}) {
10459
10459
  // packages/cli/client/agentRun.ts
10460
10460
  import { ulid as ulid2 } from "ulid";
10461
10461
  async function loadRunLocalAgentTurn() {
10462
- const { runLocalAgentTurn } = await import("./agentRuntimeLocal-VXZSDIGT.js");
10462
+ const { runLocalAgentTurn } = await import("./agentRuntimeLocal-FRUE5P2V.js");
10463
10463
  return runLocalAgentTurn;
10464
10464
  }
10465
10465
  var stripDebugNoise = (s) => s.replace(/\s*raw="[\s\S]*"/g, "").replace(/\s*raw=\S+/g, "").replace(/\s*headers=\[[^\]]*\]/g, "").replace(/\s*headers=\S+/g, "").trim();
@@ -156,6 +156,7 @@ import {
156
156
  executeOpenAiCompatibleChatCompletion,
157
157
  fetchAntigravityCloudCodeCompletion,
158
158
  filterRetainedLedgerRecords,
159
+ getAgentRuntimeToolParametersIndex,
159
160
  internalListWorkspaceEntries,
160
161
  internalSearchWorkspace,
161
162
  isGemini3Model,
@@ -170,7 +171,7 @@ import {
170
171
  resolveOpenAiCompatibleProviderConfig,
171
172
  shouldUseGeminiNativeToolRoute,
172
173
  summarizeToolArguments
173
- } from "./chunk-6VFARHZW.js";
174
+ } from "./chunk-LC43IGO4.js";
174
175
  import {
175
176
  PlatformStreamInterruptedError,
176
177
  buildPlatformChatCompletionRequest,
@@ -9313,6 +9314,8 @@ var resolveCursorTransport = async (ctx) => {
9313
9314
  agentToolNames: activeAgentToolNames,
9314
9315
  call,
9315
9316
  executors: localToolExecutors,
9317
+ // 分发前参数闸门:与 host adapter 的 executeTool 同口径。
9318
+ toolParametersIndex: getAgentRuntimeToolParametersIndex(),
9316
9319
  detachMs: resolveExecShellDetachMs(deps.env),
9317
9320
  ...deps.confirmDestructiveAction ? { confirmDestructiveAction: deps.confirmDestructiveAction } : {}
9318
9321
  });
@@ -13448,6 +13451,11 @@ function createCliLocalRuntimeAdapter(deps) {
13448
13451
  runToolNames: activeAgentToolNames,
13449
13452
  call: injectedCall,
13450
13453
  executors: localToolExecutors,
13454
+ // 分发前参数闸门:只覆盖 agent-runtime 工具族(workspace + nolo
13455
+ // workspace)。ai/tools registry 的工具不接——它们有各自的前置 policy
13456
+ // guard 与结构化结果契约(例:createTable 的 capture 确认守卫),
13457
+ // 闸门抢先拦截会覆盖这些语义(见 toolArgumentGate.ts 的范围说明)。
13458
+ toolParametersIndex: getAgentRuntimeToolParametersIndex(),
13451
13459
  abortSignal: opts?.abortSignal,
13452
13460
  detachMs: resolveExecShellDetachMs(deps.env),
13453
13461
  ...deps.confirmDestructiveAction ? { confirmDestructiveAction: deps.confirmDestructiveAction } : {}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearCliLocalRuntimePreparedAgentCache
3
- } from "./chunk-ITBLTYQB.js";
3
+ } from "./chunk-RJ4QOQDA.js";
4
4
  import {
5
5
  getReadableCliDb
6
6
  } from "./chunk-LS2ZANRJ.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createCliLocalRuntimeAdapter,
3
3
  summarizeEndpoint
4
- } from "./chunk-ITBLTYQB.js";
4
+ } from "./chunk-RJ4QOQDA.js";
5
5
  import {
6
6
  clipMultilineText
7
7
  } from "./chunk-H66KLASO.js";
8
8
  import {
9
9
  runLocalAgentTurn
10
- } from "./chunk-6VFARHZW.js";
10
+ } from "./chunk-LC43IGO4.js";
11
11
  import {
12
12
  applyToolSurfaceConstraints
13
13
  } from "./chunk-IIVGDG4I.js";
@@ -24,7 +24,7 @@ import "./chunk-KQHGZWSV.js";
24
24
  import "./chunk-3BMYXEUW.js";
25
25
  import "./chunk-URMS4XY2.js";
26
26
  import "./chunk-GLKOYSRU.js";
27
- import "./chunk-6VFARHZW.js";
27
+ import "./chunk-LC43IGO4.js";
28
28
  import "./chunk-ZCYXJSTU.js";
29
29
  import "./chunk-Q5FJJ6XI.js";
30
30
  import "./chunk-ZNFJWEN4.js";
@@ -28,7 +28,7 @@ import "./chunk-SV5IJK6K.js";
28
28
  import "./chunk-VF4K2QE6.js";
29
29
  import "./chunk-Q554LLSI.js";
30
30
  import "./chunk-KHCLMKZZ.js";
31
- import "./chunk-6VFARHZW.js";
31
+ import "./chunk-LC43IGO4.js";
32
32
  import "./chunk-ZCYXJSTU.js";
33
33
  import "./chunk-Q5FJJ6XI.js";
34
34
  import "./chunk-ZNFJWEN4.js";
@@ -21,7 +21,7 @@ import "./chunk-KQHGZWSV.js";
21
21
  import "./chunk-VF4K2QE6.js";
22
22
  import "./chunk-Q554LLSI.js";
23
23
  import "./chunk-KHCLMKZZ.js";
24
- import "./chunk-6VFARHZW.js";
24
+ import "./chunk-LC43IGO4.js";
25
25
  import "./chunk-ZCYXJSTU.js";
26
26
  import "./chunk-Q5FJJ6XI.js";
27
27
  import "./chunk-ZNFJWEN4.js";
@@ -16,7 +16,7 @@ import "./chunk-SV5IJK6K.js";
16
16
  import "./chunk-VF4K2QE6.js";
17
17
  import "./chunk-Q554LLSI.js";
18
18
  import "./chunk-KHCLMKZZ.js";
19
- import "./chunk-6VFARHZW.js";
19
+ import "./chunk-LC43IGO4.js";
20
20
  import "./chunk-ZCYXJSTU.js";
21
21
  import "./chunk-Q5FJJ6XI.js";
22
22
  import "./chunk-ZNFJWEN4.js";
@@ -30,7 +30,7 @@ import {
30
30
  resolvePageSkillMetadata
31
31
  } from "./chunk-Q554LLSI.js";
32
32
  import "./chunk-KHCLMKZZ.js";
33
- import "./chunk-6VFARHZW.js";
33
+ import "./chunk-LC43IGO4.js";
34
34
  import "./chunk-ZCYXJSTU.js";
35
35
  import "./chunk-Q5FJJ6XI.js";
36
36
  import "./chunk-ZNFJWEN4.js";
package/index.js CHANGED
@@ -127,7 +127,7 @@ function createDaemonShortcutCommand(path, description, command2) {
127
127
  // packages/cli/agentInternalCommandEntries.ts
128
128
  function getAgentInternalCommandEntries() {
129
129
  const createAgentRunCommand = (path, description) => createContextCommand(path, description, async (args2, ctx) => {
130
- const { runAgentRunCommand } = await import("./agentRunCommand-P7VHL4ZR.js");
130
+ const { runAgentRunCommand } = await import("./agentRunCommand-7VTYZY3Q.js");
131
131
  return runAgentRunCommand(args2, {
132
132
  env: ctx.env,
133
133
  scriptDir: ctx.scriptDir,
@@ -139,11 +139,11 @@ function getAgentInternalCommandEntries() {
139
139
  createAgentRunCommand(["run"], "Run a no-login local agent in this workspace"),
140
140
  createAgentRunCommand(["chat"], "Chat with an agent"),
141
141
  createEnvCommand(["agent", "list"], "List owned agents", async (args2, deps) => {
142
- const { runAgentListCommand } = await import("./agentListCommands-GUDMBDHZ.js");
142
+ const { runAgentListCommand } = await import("./agentListCommands-3GWH4E4G.js");
143
143
  return runAgentListCommand(args2, deps);
144
144
  }),
145
145
  createEnvCommand(["agent", "create"], "Create a new agent", async (args2, deps) => {
146
- const { runAgentCreateCommand } = await import("./agentRecordCommands-RSS44XHC.js");
146
+ const { runAgentCreateCommand } = await import("./agentRecordCommands-JY4IWSSQ.js");
147
147
  return runAgentCreateCommand(args2, deps);
148
148
  }),
149
149
  createEnvCommand(["agent", "models"], "List models available on an OpenAI-compatible provider", async (args2, deps) => {
@@ -159,7 +159,7 @@ function getAgentInternalCommandEntries() {
159
159
  return runAgentPullCommand(args2, deps);
160
160
  }),
161
161
  createEnvCommand(["agent", "read"], "Read a single agent", async (args2, deps) => {
162
- const { runAgentReadCommand } = await import("./agentRecordCommands-RSS44XHC.js");
162
+ const { runAgentReadCommand } = await import("./agentRecordCommands-JY4IWSSQ.js");
163
163
  return runAgentReadCommand(args2, deps);
164
164
  }),
165
165
  createAgentRunCommand(["agent", "run"], "Run an agent"),
@@ -188,31 +188,31 @@ function getAgentInternalCommandEntries() {
188
188
  return runSetupOfflineMarxistsAgentCommand(args2, deps);
189
189
  }),
190
190
  createEnvCommand(["agent", "update"], "Update agent fields", async (args2, deps) => {
191
- const { runAgentUpdateCommand } = await import("./agentRecordCommands-RSS44XHC.js");
191
+ const { runAgentUpdateCommand } = await import("./agentRecordCommands-JY4IWSSQ.js");
192
192
  return runAgentUpdateCommand(args2, deps);
193
193
  }),
194
194
  createEnvCommand(["agent", "email", "provision"], "Provision a controlled inbox for an agent", async (args2, deps) => {
195
- const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-O2KH4G7U.js");
195
+ const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-AQZVMNLR.js");
196
196
  return runAgentEmailProvisionCommand(args2, deps);
197
197
  }),
198
198
  createEnvCommand(["agent", "email", "bind"], "Bind an existing email address to an agent", async (args2, deps) => {
199
- const { runAgentEmailBindCommand } = await import("./agentEmailCommands-O2KH4G7U.js");
199
+ const { runAgentEmailBindCommand } = await import("./agentEmailCommands-AQZVMNLR.js");
200
200
  return runAgentEmailBindCommand(args2, deps);
201
201
  }),
202
202
  createEnvCommand(["agent", "email", "transfer"], "Transfer an email identity from one agent to another (cross-account)", async (args2, deps) => {
203
- const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-O2KH4G7U.js");
203
+ const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-AQZVMNLR.js");
204
204
  return runAgentEmailTransferCommand(args2, deps);
205
205
  }),
206
206
  createEnvCommand(
207
207
  ["agent", "email", "create-and-provision"],
208
208
  "Create an agent and provision its controlled inbox",
209
209
  async (args2, deps) => {
210
- const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-O2KH4G7U.js");
210
+ const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-AQZVMNLR.js");
211
211
  return runAgentEmailCreateAndProvisionCommand(args2, deps);
212
212
  }
213
213
  ),
214
214
  createEnvCommand(["agent", "delete"], "Hard-delete an agent's private and public records", async (args2, deps) => {
215
- const { runAgentDeleteCommand } = await import("./agentDeleteCommand-2YAHAZFJ.js");
215
+ const { runAgentDeleteCommand } = await import("./agentDeleteCommand-YB3S2LPY.js");
216
216
  return runAgentDeleteCommand(args2, deps);
217
217
  }),
218
218
  createEnvCommand(["agent", "grant"], "Grant another user access to this agent's owner credentials", async (args2, deps) => {
@@ -228,15 +228,15 @@ function getAgentInternalCommandEntries() {
228
228
  return runAgentRevokeGrantCommand(args2, deps);
229
229
  }),
230
230
  createEnvCommand(["agent", "bind-current"], "Bind an agent to this machine", async (args2, deps) => {
231
- const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-5I5CCUBM.js");
231
+ const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-R5AVYYN3.js");
232
232
  return runAgentBindCurrentCommand(args2, deps);
233
233
  }),
234
234
  createEnvCommand(["agent", "smoke-current"], "Smoke test a bound agent through this machine", async (args2, deps) => {
235
- const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-5I5CCUBM.js");
235
+ const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-R5AVYYN3.js");
236
236
  return runAgentSmokeCurrentCommand(args2, deps);
237
237
  }),
238
238
  createEnvCommand(["agent", "runtime-doctor"], "Diagnose current machine runtime compatibility", async (args2, deps) => {
239
- const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-5I5CCUBM.js");
239
+ const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-R5AVYYN3.js");
240
240
  return runAgentRuntimeDoctorCommand(args2, deps);
241
241
  }),
242
242
  createAgentRunCommand(["agent", "chat"], "Chat with an agent")
@@ -247,23 +247,23 @@ function getAgentInternalCommandEntries() {
247
247
  function getAppInternalCommandEntries() {
248
248
  return [
249
249
  createEnvCommand(["app", "list"], "List your apps", async (args2, deps) => {
250
- const { runAppListCommand } = await import("./appListCommands-EKUBDRUO.js");
250
+ const { runAppListCommand } = await import("./appListCommands-PKRLSWRE.js");
251
251
  return runAppListCommand(args2, deps);
252
252
  }),
253
253
  createEnvCommand(["app", "get"], "Get app details", async (args2, deps) => {
254
- const { runAppGetCommand } = await import("./appGetCommands-SFAPP5PB.js");
254
+ const { runAppGetCommand } = await import("./appGetCommands-EXWT3QAE.js");
255
255
  return runAppGetCommand(args2, deps);
256
256
  }),
257
257
  createEnvCommand(["app", "deploy"], "Deploy an app", async (args2, deps) => {
258
- const { runAppDeployCommand } = await import("./appDeployCommands-WCQOUSOB.js");
258
+ const { runAppDeployCommand } = await import("./appDeployCommands-YCVY2UYO.js");
259
259
  return runAppDeployCommand(args2, deps);
260
260
  }),
261
261
  createEnvCommand(["app", "deploy", "status"], "Check app deploy status", async (args2, deps) => {
262
- const { runAppDeployStatusCommand } = await import("./appDeployStatusCommands-6QKB7DYN.js");
262
+ const { runAppDeployStatusCommand } = await import("./appDeployStatusCommands-JMCEIKTI.js");
263
263
  return runAppDeployStatusCommand(args2, deps);
264
264
  }),
265
265
  createEnvCommand(["app", "delete"], "Delete an app", async (args2, deps) => {
266
- const { runAppDeleteCommand } = await import("./appDeleteCommands-32MHLR4L.js");
266
+ const { runAppDeleteCommand } = await import("./appDeleteCommands-JPWTSFID.js");
267
267
  return runAppDeleteCommand(args2, deps);
268
268
  })
269
269
  ];
@@ -332,27 +332,27 @@ function getChromeInternalCommandEntries() {
332
332
  function getDialogInternalCommandEntries() {
333
333
  return [
334
334
  createEnvCommand(["dialog", "search"], "Search dialog messages across dialogs", async (args2, deps) => {
335
- const { runDialogSearchCommand } = await import("./dialogCommands-5J56DFWN.js");
335
+ const { runDialogSearchCommand } = await import("./dialogCommands-YVMHDEOX.js");
336
336
  return runDialogSearchCommand(args2, deps);
337
337
  }),
338
338
  createEnvCommand(["dialog", "list"], "List dialogs (default --limit 50; --all/--limit 0 full; --jsonl streams)", async (args2, deps) => {
339
- const { runDialogListCommand } = await import("./dialogCommands-5J56DFWN.js");
339
+ const { runDialogListCommand } = await import("./dialogCommands-YVMHDEOX.js");
340
340
  return runDialogListCommand(args2, deps);
341
341
  }),
342
342
  createEnvCommand(["dialog", "delete"], "Delete one or more dialogs", async (args2, deps) => {
343
- const { runDialogDeleteCommand } = await import("./dialogCommands-5J56DFWN.js");
343
+ const { runDialogDeleteCommand } = await import("./dialogCommands-YVMHDEOX.js");
344
344
  return runDialogDeleteCommand(args2, deps);
345
345
  }),
346
346
  createEnvCommand(["dialog", "query"], "Query dialogs by subject refs (default --limit 50; --all full; --jsonl streams)", async (args2, deps) => {
347
- const { runDialogQueryCommand } = await import("./dialogCommands-5J56DFWN.js");
347
+ const { runDialogQueryCommand } = await import("./dialogCommands-YVMHDEOX.js");
348
348
  return runDialogQueryCommand(args2, deps);
349
349
  }),
350
350
  createEnvCommand(["dialog", "read"], "Read a dialog", async (args2, deps) => {
351
- const { runDialogReadCommand } = await import("./dialogCommands-5J56DFWN.js");
351
+ const { runDialogReadCommand } = await import("./dialogCommands-YVMHDEOX.js");
352
352
  return runDialogReadCommand(args2, deps);
353
353
  }),
354
354
  createEnvCommand(["dialog", "status"], "Read compact dialog status", async (args2, deps) => {
355
- const { runDialogStatusCommand } = await import("./dialogCommands-5J56DFWN.js");
355
+ const { runDialogStatusCommand } = await import("./dialogCommands-YVMHDEOX.js");
356
356
  return runDialogStatusCommand(args2, deps);
357
357
  })
358
358
  ];
@@ -362,39 +362,39 @@ function getDialogInternalCommandEntries() {
362
362
  function getDocInternalCommandEntries() {
363
363
  return [
364
364
  createEnvCommand(["doc", "create"], "Create a normal doc", async (args2, deps) => {
365
- const { runDocCreateCommand } = await import("./docCreateCommands-KYI2DC2U.js");
365
+ const { runDocCreateCommand } = await import("./docCreateCommands-7UTWDYJU.js");
366
366
  return runDocCreateCommand(args2, deps);
367
367
  }),
368
368
  createEnvCommand(["doc", "read"], "Read a normal doc", async (args2, deps) => {
369
- const { runDocReadCommand } = await import("./docReadCommands-HOSVSBDJ.js");
369
+ const { runDocReadCommand } = await import("./docReadCommands-QHMQVSLP.js");
370
370
  return runDocReadCommand(args2, deps);
371
371
  }),
372
372
  createEnvCommand(["doc", "update"], "Update a normal doc", async (args2, deps) => {
373
- const { runDocUpdateCommand } = await import("./docUpdateCommands-EMGCSMXY.js");
373
+ const { runDocUpdateCommand } = await import("./docUpdateCommands-QPL6IVUK.js");
374
374
  return runDocUpdateCommand(args2, deps);
375
375
  }),
376
376
  createEnvCommand(["doc", "delete"], "Delete a normal doc", async (args2, deps) => {
377
- const { runDocDeleteCommand } = await import("./docDeleteCommands-67REUSRY.js");
377
+ const { runDocDeleteCommand } = await import("./docDeleteCommands-GG6BJ4PS.js");
378
378
  return runDocDeleteCommand(args2, deps);
379
379
  }),
380
380
  createEnvCommand(["skill-doc", "create"], "Create a skill-backed doc", async (args2, deps) => {
381
- const { runSkillDocCreateCommand } = await import("./docCreateCommands-KYI2DC2U.js");
381
+ const { runSkillDocCreateCommand } = await import("./docCreateCommands-7UTWDYJU.js");
382
382
  return runSkillDocCreateCommand(args2, deps);
383
383
  }),
384
384
  createEnvCommand(["skill", "create-doc"], "Create a skill-backed doc", async (args2, deps) => {
385
- const { runSkillDocCreateCommand } = await import("./docCreateCommands-KYI2DC2U.js");
385
+ const { runSkillDocCreateCommand } = await import("./docCreateCommands-7UTWDYJU.js");
386
386
  return runSkillDocCreateCommand(args2, deps);
387
387
  }),
388
388
  createEnvCommand(["skill-doc", "read"], "Read a skill doc", async (args2, deps) => {
389
- const { runSkillDocReadCommand } = await import("./docReadCommands-HOSVSBDJ.js");
389
+ const { runSkillDocReadCommand } = await import("./docReadCommands-QHMQVSLP.js");
390
390
  return runSkillDocReadCommand(args2, deps);
391
391
  }),
392
392
  createEnvCommand(["skill-doc", "update"], "Update a skill doc", async (args2, deps) => {
393
- const { runSkillDocUpdateCommand } = await import("./docUpdateCommands-EMGCSMXY.js");
393
+ const { runSkillDocUpdateCommand } = await import("./docUpdateCommands-QPL6IVUK.js");
394
394
  return runSkillDocUpdateCommand(args2, deps);
395
395
  }),
396
396
  createEnvCommand(["skill-doc", "delete"], "Delete a skill doc", async (args2, deps) => {
397
- const { runSkillDocDeleteCommand } = await import("./docDeleteCommands-67REUSRY.js");
397
+ const { runSkillDocDeleteCommand } = await import("./docDeleteCommands-GG6BJ4PS.js");
398
398
  return runSkillDocDeleteCommand(args2, deps);
399
399
  })
400
400
  ];
@@ -422,19 +422,19 @@ function getMemoryInternalCommandEntries() {
422
422
  function getSpaceInternalCommandEntries() {
423
423
  return [
424
424
  createEnvCommand(["space", "create"], "Create a space", async (args2, deps) => {
425
- const { runSpaceCreateCommand } = await import("./spaceCommands-NKJVJCQQ.js");
425
+ const { runSpaceCreateCommand } = await import("./spaceCommands-BMXKR7H6.js");
426
426
  return runSpaceCreateCommand(args2, deps);
427
427
  }),
428
428
  createEnvCommand(["space", "invite"], "Invite an existing user to a space", async (args2, deps) => {
429
- const { runSpaceInviteCommand } = await import("./spaceCommands-NKJVJCQQ.js");
429
+ const { runSpaceInviteCommand } = await import("./spaceCommands-BMXKR7H6.js");
430
430
  return runSpaceInviteCommand(args2, deps);
431
431
  }),
432
432
  createEnvCommand(["space", "accept-invite"], "Accept a space invite", async (args2, deps) => {
433
- const { runSpaceAcceptInviteCommand } = await import("./spaceCommands-NKJVJCQQ.js");
433
+ const { runSpaceAcceptInviteCommand } = await import("./spaceCommands-BMXKR7H6.js");
434
434
  return runSpaceAcceptInviteCommand(args2, deps);
435
435
  }),
436
436
  createEnvCommand(["space", "upload"], "Upload a file to a space", async (args2, deps) => {
437
- const { runSpaceUploadCommand } = await import("./spaceCommands-NKJVJCQQ.js");
437
+ const { runSpaceUploadCommand } = await import("./spaceCommands-BMXKR7H6.js");
438
438
  return runSpaceUploadCommand(args2, deps);
439
439
  })
440
440
  ];
@@ -488,15 +488,15 @@ function getSystemInternalCommandEntries(renderHelpText2) {
488
488
  return runWhoamiCommand({ args: args2, env: ctx.env });
489
489
  }),
490
490
  createEntrypointEnvCommand(["connect"], "Send machine heartbeats or hold a connector websocket", async (args2, deps) => {
491
- const { runMachineConnectCommand } = await import("./machineCommands-G5J754EH.js");
491
+ const { runMachineConnectCommand } = await import("./machineCommands-7DEUPY32.js");
492
492
  return runMachineConnectCommand(args2, deps);
493
493
  }),
494
494
  createDaemonShortcutCommand(["daemon"], "Run the connector daemon shortcut", async (args2, deps) => {
495
- const { runMachineConnectCommand } = await import("./machineCommands-G5J754EH.js");
495
+ const { runMachineConnectCommand } = await import("./machineCommands-7DEUPY32.js");
496
496
  return runMachineConnectCommand(args2, deps);
497
497
  }),
498
498
  createEnvCommand(["machine", "status"], "List machines registered to the current profile", async (args2, deps) => {
499
- const { runMachineStatusCommand } = await import("./machineCommands-G5J754EH.js");
499
+ const { runMachineStatusCommand } = await import("./machineCommands-7DEUPY32.js");
500
500
  return runMachineStatusCommand(args2, deps);
501
501
  }),
502
502
  createEnvCommand(["doctor", "runtime"], "Diagnose local-first agent runtime selection", async (args2, deps) => {
@@ -892,7 +892,7 @@ async function runScript(script, forwardedArgs, env) {
892
892
  return proc.exited;
893
893
  }
894
894
  async function launchTuiWorkspace(args2) {
895
- const { startTuiWorkspace } = await import("./readlineWorkspace-TGCYJFEB.js");
895
+ const { startTuiWorkspace } = await import("./readlineWorkspace-JP2AOALW.js");
896
896
  const { createTuiSummaryLlmCaller } = await import("./tuiSummaryLlmCaller-WFRWERGK.js");
897
897
  return startTuiWorkspace({
898
898
  ...args2,
@@ -2,13 +2,13 @@ import {
2
2
  buildMachinePermissionPromptBlock,
3
3
  handleConnectorRunMessage,
4
4
  resolveMachineRunPermissionPolicy
5
- } from "./chunk-B6P4QKEN.js";
5
+ } from "./chunk-VLI5LVL5.js";
6
6
  import {
7
7
  isConnectorWebSocketAuthError,
8
8
  isConnectorWebSocketRetryableError,
9
9
  resolveConnectorWebSocketTarget
10
10
  } from "./chunk-ALXHV7NK.js";
11
- import "./chunk-ITBLTYQB.js";
11
+ import "./chunk-RJ4QOQDA.js";
12
12
  import "./chunk-53HEEOTT.js";
13
13
  import "./chunk-EADNWBAZ.js";
14
14
  import "./chunk-SH43IESU.js";
@@ -69,7 +69,7 @@ import "./chunk-KHCLMKZZ.js";
69
69
  import {
70
70
  PATH_FIELD_ALIASES,
71
71
  createLocalWorkspaceToolExecutors
72
- } from "./chunk-6VFARHZW.js";
72
+ } from "./chunk-LC43IGO4.js";
73
73
  import "./chunk-ZCYXJSTU.js";
74
74
  import "./chunk-Q5FJJ6XI.js";
75
75
  import "./chunk-ZNFJWEN4.js";
@@ -11,8 +11,8 @@ import {
11
11
  runtimeWorkspacePermissionPolicy,
12
12
  scopePermissionPolicyToRuntimeWorkspace,
13
13
  summarizeAgentConfigForLogs
14
- } from "./chunk-B6P4QKEN.js";
15
- import "./chunk-ITBLTYQB.js";
14
+ } from "./chunk-VLI5LVL5.js";
15
+ import "./chunk-RJ4QOQDA.js";
16
16
  import "./chunk-53HEEOTT.js";
17
17
  import "./chunk-EADNWBAZ.js";
18
18
  import "./chunk-SH43IESU.js";
@@ -65,7 +65,7 @@ import "./chunk-JRQFUXY7.js";
65
65
  import "./chunk-DHDMC6FO.js";
66
66
  import "./chunk-Q554LLSI.js";
67
67
  import "./chunk-KHCLMKZZ.js";
68
- import "./chunk-6VFARHZW.js";
68
+ import "./chunk-LC43IGO4.js";
69
69
  import "./chunk-ZCYXJSTU.js";
70
70
  import "./chunk-Q5FJJ6XI.js";
71
71
  import "./chunk-ZNFJWEN4.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolo-cli",
3
- "version": "0.104.0-alpha.1",
3
+ "version": "0.104.0-alpha.2",
4
4
  "type": "module",
5
5
  "description": "Agent-first terminal workspace for Nolo",
6
6
  "bin": {
@@ -72,7 +72,7 @@ import {
72
72
  wrapTextToLines,
73
73
  wrapTranscriptLine,
74
74
  wrapTranscriptLineWithLayout
75
- } from "./chunk-4J4QNKTW.js";
75
+ } from "./chunk-O7EBSHZR.js";
76
76
  import "./chunk-S7Z2HMCN.js";
77
77
  import "./chunk-V7E4PXQD.js";
78
78
  import {
@@ -97,7 +97,7 @@ import {
97
97
  readTimestamp,
98
98
  setCliLocale,
99
99
  t
100
- } from "./chunk-ITBLTYQB.js";
100
+ } from "./chunk-RJ4QOQDA.js";
101
101
  import "./chunk-53HEEOTT.js";
102
102
  import "./chunk-EADNWBAZ.js";
103
103
  import "./chunk-SH43IESU.js";
@@ -207,7 +207,7 @@ import {
207
207
  formatToolOverflowMarker,
208
208
  getProcessRegistry,
209
209
  readCommandActionGatePayload
210
- } from "./chunk-6VFARHZW.js";
210
+ } from "./chunk-LC43IGO4.js";
211
211
  import "./chunk-ZCYXJSTU.js";
212
212
  import "./chunk-Q5FJJ6XI.js";
213
213
  import "./chunk-ZNFJWEN4.js";
@@ -11,7 +11,7 @@ import {
11
11
  import "./chunk-Z77CRGTW.js";
12
12
  import "./chunk-SV5IJK6K.js";
13
13
  import "./chunk-KQHGZWSV.js";
14
- import "./chunk-6VFARHZW.js";
14
+ import "./chunk-LC43IGO4.js";
15
15
  import "./chunk-ZCYXJSTU.js";
16
16
  import "./chunk-Q5FJJ6XI.js";
17
17
  import "./chunk-ZNFJWEN4.js";