nolo-cli 0.34.0-alpha.1 → 0.34.0-alpha.3

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 (65) hide show
  1. package/{_executeModel-BUYCXZCQ.js → _executeModel-TMUXL7J5.js} +13 -14
  2. package/{agentDeleteCommand-WSS2IJVM.js → agentDeleteCommand-KA2IQAPG.js} +2 -2
  3. package/{agentEmailCommands-SHTPJTSX.js → agentEmailCommands-UIYBGCZW.js} +14 -15
  4. package/{agentListCommands-GV6UYVAF.js → agentListCommands-L6JNUOLH.js} +2 -2
  5. package/{agentMachineCommands-FLD7TAFH.js → agentMachineCommands-5CQW5NZR.js} +3 -3
  6. package/{agentRecordCommands-57W6R7QW.js → agentRecordCommands-VUDJQIZH.js} +14 -15
  7. package/{agentRunCommand-HJGXSMDN.js → agentRunCommand-EJWYF3BL.js} +16 -17
  8. package/{agentRunControl-GXOB47YI.js → agentRunControl-7MUPSYDQ.js} +3 -1
  9. package/{agentRuntimeLocal-G7ZV55I6.js → agentRuntimeLocal-XXBMDMBU.js} +2 -2
  10. package/{agentSlice-HFR7SP3B.js → agentSlice-HTIEYKIU.js} +1 -1
  11. package/{agentSuperviseCommands-Q64S5SPG.js → agentSuperviseCommands-MKWW3ICX.js} +3 -3
  12. package/{appDeleteCommands-SHHE56Y2.js → appDeleteCommands-OUBL6VHB.js} +2 -2
  13. package/{appDeployCommands-WUMSO2VS.js → appDeployCommands-BZSS2MX4.js} +2 -2
  14. package/{appDeployStatusCommands-VZSVN6SR.js → appDeployStatusCommands-P2ZQOY5X.js} +2 -2
  15. package/{appGetCommands-ZJ2C3A5Y.js → appGetCommands-WCFWQZZM.js} +2 -2
  16. package/{appListCommands-W33L6U5X.js → appListCommands-FVJ3QNL7.js} +2 -2
  17. package/{chatQueueReduxAdapter-SYIX4ODY.js → chatQueueReduxAdapter-ZP2ZS63U.js} +2 -2
  18. package/chunk-2BWU4ORW.js +2574 -0
  19. package/{chunk-6KYCG5GW.js → chunk-5GQ6XCJY.js} +11 -11
  20. package/{chunk-74IQ5RRO.js → chunk-5LDKQUOT.js} +1 -1
  21. package/{chunk-6XIE5ZGI.js → chunk-6HIGYUBQ.js} +1 -1
  22. package/{chunk-MI2J67UU.js → chunk-AA2YUJNV.js} +12 -1
  23. package/{chunk-KCBK4MDT.js → chunk-AE5GVFMG.js} +4 -4
  24. package/{chunk-VSA6QAGV.js → chunk-E2OQ5N2F.js} +40 -10
  25. package/{chunk-KHCLMKZZ.js → chunk-EY7V7REW.js} +280 -6
  26. package/{chunk-3XZUNRYF.js → chunk-FT4XBCK4.js} +7 -7
  27. package/{chunk-LQ6PUHW6.js → chunk-I7VDDN45.js} +26 -67
  28. package/{chunk-7YDKVLAE.js → chunk-IEEEWIVO.js} +3 -3
  29. package/{chunk-VBD7W4Q6.js → chunk-ILZY5B4U.js} +16 -12
  30. package/{chunk-4HOXB6SY.js → chunk-IMHO5LC6.js} +100 -27
  31. package/{chunk-2KO5QQFV.js → chunk-P2I7ELDC.js} +1 -1
  32. package/{chunk-DX6BP4K7.js → chunk-PILJX4DH.js} +8 -8
  33. package/{chunk-LAUUAYLK.js → chunk-QI3CHZUT.js} +2 -2
  34. package/{chunk-YRP7LG4R.js → chunk-RKRXAL3V.js} +7 -16
  35. package/{chunk-AUH2LTIY.js → chunk-TLBZMLLJ.js} +3 -3
  36. package/{chunk-3LWZNEGQ.js → chunk-WBZE7C6S.js} +1 -1
  37. package/{chunk-HDT2RB7T.js → chunk-XMFDQYWA.js} +1 -1
  38. package/{chunk-FDKEDU7R.js → chunk-Y5W623XU.js} +3 -3
  39. package/{chunk-VD2SO4RG.js → chunk-Z7COG62J.js} +2 -2
  40. package/{codingSkills-H6N5EKSX.js → codingSkills-6F4EQFCM.js} +2 -3
  41. package/{createAgentAutomationAction-BH3D2L2H.js → createAgentAutomationAction-TGUXUZCY.js} +3 -3
  42. package/{createDialogAction-U4LDV2RW.js → createDialogAction-FD5AEOUF.js} +5 -6
  43. package/{createPageAction-Q2ANG535.js → createPageAction-NPC3LYNK.js} +4 -5
  44. package/{dialogCommands-C556D6WD.js → dialogCommands-ZF2RSNCG.js} +2 -2
  45. package/{dialogSlice-P2VSKG2X.js → dialogSlice-6BINHWQT.js} +2 -2
  46. package/{docCreateCommands-AAVGLQWE.js → docCreateCommands-4VQ5MOHP.js} +4 -5
  47. package/{docDeleteCommands-PKMKSQD2.js → docDeleteCommands-M7WLNVPB.js} +4 -5
  48. package/{docReadCommands-2WUH7UXC.js → docReadCommands-6LU6P2WT.js} +4 -5
  49. package/{docStore-J5UWRBB4.js → docStore-SIUFLABN.js} +4 -4
  50. package/{docUpdateCommands-B2N4E5HQ.js → docUpdateCommands-S2LX4ENL.js} +4 -5
  51. package/{handleSendMessageAction-RRZ53YYH.js → handleSendMessageAction-QVG5YNZY.js} +2 -2
  52. package/index.js +46 -46
  53. package/{machineCommands-CWKMJG33.js → machineCommands-OSEBN7BZ.js} +14 -15
  54. package/{machineWsRunDispatch-UYNVNX4A.js → machineWsRunDispatch-NTJQCIIF.js} +14 -15
  55. package/package.json +1 -1
  56. package/{readlineWorkspace-VYELP22P.js → readlineWorkspace-JPME5S7A.js} +130 -82
  57. package/{runAgentClientLoop-35GKZDOZ.js → runAgentClientLoop-SOKEXCUF.js} +10 -11
  58. package/{skillDiscovery-COX56OBO.js → skillDiscovery-GPUDHDTZ.js} +1 -2
  59. package/{spaceCommands-AAKQM2PM.js → spaceCommands-Z5JLMFFJ.js} +2 -2
  60. package/{spaceSlice-NSNGR4Y2.js → spaceSlice-Z3BGCLGX.js} +3 -3
  61. package/{streamAgentChatTurn-D5IDHXMV.js → streamAgentChatTurn-INF5RGK4.js} +12 -13
  62. package/{tools-JQOETZP5.js → tools-ZELMSJZ3.js} +8 -9
  63. package/{updateDialogTitleAction-WOTSDSFQ.js → updateDialogTitleAction-EDUCIB7G.js} +3 -3
  64. package/chunk-AETZ7AD6.js +0 -274
  65. package/chunk-OFZPJ3NT.js +0 -114
@@ -2,29 +2,29 @@ import {
2
2
  buildMachinePermissionPromptBlock,
3
3
  handleConnectorRunMessage,
4
4
  resolveMachineRunPermissionPolicy
5
- } from "./chunk-7YDKVLAE.js";
5
+ } from "./chunk-IEEEWIVO.js";
6
6
  import {
7
7
  isConnectorWebSocketAuthError,
8
8
  isConnectorWebSocketRetryableError,
9
9
  resolveConnectorWebSocketTarget
10
10
  } from "./chunk-MQRZ5QUH.js";
11
- import "./chunk-YRP7LG4R.js";
11
+ import "./chunk-RKRXAL3V.js";
12
12
  import "./chunk-IZNJDUJ4.js";
13
13
  import "./chunk-6XG52ZQ6.js";
14
14
  import "./chunk-J5NMOM35.js";
15
15
  import "./chunk-EKLRRZIN.js";
16
16
  import "./chunk-JDSUTNYY.js";
17
- import "./chunk-VSA6QAGV.js";
17
+ import "./chunk-E2OQ5N2F.js";
18
18
  import {
19
19
  detectMachineInfo
20
20
  } from "./chunk-ESHYE7WU.js";
21
21
  import "./chunk-JBTJAPUF.js";
22
22
  import "./chunk-JI2TIPLP.js";
23
23
  import "./chunk-ATNTHIZI.js";
24
- import "./chunk-HDT2RB7T.js";
24
+ import "./chunk-XMFDQYWA.js";
25
25
  import "./chunk-HS7MLR74.js";
26
26
  import "./chunk-PV734VZX.js";
27
- import "./chunk-6KYCG5GW.js";
27
+ import "./chunk-5GQ6XCJY.js";
28
28
  import {
29
29
  CORE_DRAIN_REASON
30
30
  } from "./chunk-RQSOAMPJ.js";
@@ -32,37 +32,36 @@ import "./chunk-GUYMR3JL.js";
32
32
  import "./chunk-KQHGZWSV.js";
33
33
  import "./chunk-IFS5CUEH.js";
34
34
  import "./chunk-KXKQO4Q6.js";
35
- import "./chunk-VD2SO4RG.js";
35
+ import "./chunk-Z7COG62J.js";
36
36
  import "./chunk-BANYWEYY.js";
37
37
  import "./chunk-U6QQLXWI.js";
38
38
  import "./chunk-INZZJSQF.js";
39
39
  import "./chunk-MEYIRKDN.js";
40
40
  import "./chunk-63W5N6P3.js";
41
41
  import "./chunk-VF4K2QE6.js";
42
- import "./chunk-FDKEDU7R.js";
43
- import "./chunk-LAUUAYLK.js";
44
- import "./chunk-DX6BP4K7.js";
42
+ import "./chunk-Y5W623XU.js";
43
+ import "./chunk-QI3CHZUT.js";
44
+ import "./chunk-PILJX4DH.js";
45
45
  import "./chunk-RCFIB45Q.js";
46
46
  import "./chunk-JIADXJYU.js";
47
47
  import "./chunk-YYLHWIW6.js";
48
48
  import "./chunk-AGGIDPCZ.js";
49
- import "./chunk-AUH2LTIY.js";
49
+ import "./chunk-TLBZMLLJ.js";
50
50
  import "./chunk-MGIHZ5CJ.js";
51
51
  import "./chunk-5RGU3J7P.js";
52
52
  import "./chunk-M76ECQRD.js";
53
53
  import "./chunk-MRWGHF56.js";
54
54
  import "./chunk-N4XRDM26.js";
55
55
  import "./chunk-LM6IYQ3F.js";
56
- import "./chunk-2KO5QQFV.js";
56
+ import "./chunk-P2I7ELDC.js";
57
57
  import "./chunk-IIOHYLIG.js";
58
- import "./chunk-AETZ7AD6.js";
59
- import "./chunk-KHCLMKZZ.js";
60
- import "./chunk-LQ6PUHW6.js";
58
+ import "./chunk-EY7V7REW.js";
59
+ import "./chunk-I7VDDN45.js";
61
60
  import "./chunk-OSCSEJJR.js";
62
61
  import "./chunk-ZNFJWEN4.js";
63
62
  import "./chunk-64KIQZA2.js";
64
63
  import "./chunk-T27IEBNQ.js";
65
- import "./chunk-MI2J67UU.js";
64
+ import "./chunk-AA2YUJNV.js";
66
65
  import "./chunk-N7J63Q6C.js";
67
66
  import "./chunk-M3JQWYBC.js";
68
67
  import "./chunk-BMB563Y6.js";
@@ -11,57 +11,56 @@ import {
11
11
  runtimeWorkspacePermissionPolicy,
12
12
  scopePermissionPolicyToRuntimeWorkspace,
13
13
  summarizeAgentConfigForLogs
14
- } from "./chunk-7YDKVLAE.js";
15
- import "./chunk-YRP7LG4R.js";
14
+ } from "./chunk-IEEEWIVO.js";
15
+ import "./chunk-RKRXAL3V.js";
16
16
  import "./chunk-IZNJDUJ4.js";
17
17
  import "./chunk-6XG52ZQ6.js";
18
18
  import "./chunk-J5NMOM35.js";
19
19
  import "./chunk-EKLRRZIN.js";
20
20
  import "./chunk-JDSUTNYY.js";
21
- import "./chunk-VSA6QAGV.js";
21
+ import "./chunk-E2OQ5N2F.js";
22
22
  import "./chunk-JBTJAPUF.js";
23
23
  import "./chunk-JI2TIPLP.js";
24
24
  import "./chunk-ATNTHIZI.js";
25
- import "./chunk-HDT2RB7T.js";
25
+ import "./chunk-XMFDQYWA.js";
26
26
  import "./chunk-HS7MLR74.js";
27
27
  import "./chunk-PV734VZX.js";
28
- import "./chunk-6KYCG5GW.js";
28
+ import "./chunk-5GQ6XCJY.js";
29
29
  import "./chunk-RQSOAMPJ.js";
30
30
  import "./chunk-GUYMR3JL.js";
31
31
  import "./chunk-KQHGZWSV.js";
32
32
  import "./chunk-IFS5CUEH.js";
33
33
  import "./chunk-KXKQO4Q6.js";
34
- import "./chunk-VD2SO4RG.js";
34
+ import "./chunk-Z7COG62J.js";
35
35
  import "./chunk-BANYWEYY.js";
36
36
  import "./chunk-U6QQLXWI.js";
37
37
  import "./chunk-INZZJSQF.js";
38
38
  import "./chunk-MEYIRKDN.js";
39
39
  import "./chunk-63W5N6P3.js";
40
40
  import "./chunk-VF4K2QE6.js";
41
- import "./chunk-FDKEDU7R.js";
42
- import "./chunk-LAUUAYLK.js";
43
- import "./chunk-DX6BP4K7.js";
41
+ import "./chunk-Y5W623XU.js";
42
+ import "./chunk-QI3CHZUT.js";
43
+ import "./chunk-PILJX4DH.js";
44
44
  import "./chunk-RCFIB45Q.js";
45
45
  import "./chunk-JIADXJYU.js";
46
46
  import "./chunk-YYLHWIW6.js";
47
47
  import "./chunk-AGGIDPCZ.js";
48
- import "./chunk-AUH2LTIY.js";
48
+ import "./chunk-TLBZMLLJ.js";
49
49
  import "./chunk-MGIHZ5CJ.js";
50
50
  import "./chunk-5RGU3J7P.js";
51
51
  import "./chunk-M76ECQRD.js";
52
52
  import "./chunk-MRWGHF56.js";
53
53
  import "./chunk-N4XRDM26.js";
54
54
  import "./chunk-LM6IYQ3F.js";
55
- import "./chunk-2KO5QQFV.js";
55
+ import "./chunk-P2I7ELDC.js";
56
56
  import "./chunk-IIOHYLIG.js";
57
- import "./chunk-AETZ7AD6.js";
58
- import "./chunk-KHCLMKZZ.js";
59
- import "./chunk-LQ6PUHW6.js";
57
+ import "./chunk-EY7V7REW.js";
58
+ import "./chunk-I7VDDN45.js";
60
59
  import "./chunk-OSCSEJJR.js";
61
60
  import "./chunk-ZNFJWEN4.js";
62
61
  import "./chunk-64KIQZA2.js";
63
62
  import "./chunk-T27IEBNQ.js";
64
- import "./chunk-MI2J67UU.js";
63
+ import "./chunk-AA2YUJNV.js";
65
64
  import "./chunk-N7J63Q6C.js";
66
65
  import "./chunk-M3JQWYBC.js";
67
66
  import "./chunk-BMB563Y6.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolo-cli",
3
- "version": "0.34.0-alpha.1",
3
+ "version": "0.34.0-alpha.3",
4
4
  "type": "module",
5
5
  "description": "Agent-first terminal workspace for Nolo",
6
6
  "bin": {
@@ -76,8 +76,8 @@ import {
76
76
  wrapTextToLines,
77
77
  wrapTranscriptLine,
78
78
  wrapTranscriptLineWithLayout
79
- } from "./chunk-VBD7W4Q6.js";
80
- import "./chunk-4HOXB6SY.js";
79
+ } from "./chunk-ILZY5B4U.js";
80
+ import "./chunk-IMHO5LC6.js";
81
81
  import "./chunk-4AWH4LQA.js";
82
82
  import {
83
83
  createCliLocalRuntimeAdapter,
@@ -86,7 +86,7 @@ import {
86
86
  readTimestamp,
87
87
  setCliLocale,
88
88
  t
89
- } from "./chunk-YRP7LG4R.js";
89
+ } from "./chunk-RKRXAL3V.js";
90
90
  import "./chunk-IZNJDUJ4.js";
91
91
  import "./chunk-6XG52ZQ6.js";
92
92
  import {
@@ -107,7 +107,7 @@ import {
107
107
  checkStaleRun,
108
108
  isRunRecordClaimed,
109
109
  readRunRecord
110
- } from "./chunk-VSA6QAGV.js";
110
+ } from "./chunk-E2OQ5N2F.js";
111
111
  import "./chunk-ESHYE7WU.js";
112
112
  import "./chunk-JBTJAPUF.js";
113
113
  import "./chunk-LTRXGFMS.js";
@@ -116,10 +116,10 @@ import "./chunk-ATNTHIZI.js";
116
116
  import "./chunk-JEXVIMYZ.js";
117
117
  import {
118
118
  prepareTools
119
- } from "./chunk-HDT2RB7T.js";
119
+ } from "./chunk-XMFDQYWA.js";
120
120
  import "./chunk-HS7MLR74.js";
121
121
  import "./chunk-PV734VZX.js";
122
- import "./chunk-6KYCG5GW.js";
122
+ import "./chunk-5GQ6XCJY.js";
123
123
  import "./chunk-RQSOAMPJ.js";
124
124
  import "./chunk-GUYMR3JL.js";
125
125
  import "./chunk-KQHGZWSV.js";
@@ -135,7 +135,7 @@ import {
135
135
  runShowsLogTail,
136
136
  shortRunId
137
137
  } from "./chunk-KXKQO4Q6.js";
138
- import "./chunk-VD2SO4RG.js";
138
+ import "./chunk-Z7COG62J.js";
139
139
  import "./chunk-BANYWEYY.js";
140
140
  import "./chunk-U6QQLXWI.js";
141
141
  import "./chunk-INZZJSQF.js";
@@ -147,16 +147,16 @@ import {
147
147
  createTurnRequest,
148
148
  normalizeRunCompletionShape
149
149
  } from "./chunk-YPREESF4.js";
150
- import "./chunk-FDKEDU7R.js";
151
- import "./chunk-LAUUAYLK.js";
150
+ import "./chunk-Y5W623XU.js";
151
+ import "./chunk-QI3CHZUT.js";
152
152
  import {
153
153
  extractReferenceKeysFromMessage
154
- } from "./chunk-DX6BP4K7.js";
154
+ } from "./chunk-PILJX4DH.js";
155
155
  import "./chunk-RCFIB45Q.js";
156
156
  import "./chunk-JIADXJYU.js";
157
157
  import "./chunk-YYLHWIW6.js";
158
158
  import "./chunk-AGGIDPCZ.js";
159
- import "./chunk-AUH2LTIY.js";
159
+ import "./chunk-TLBZMLLJ.js";
160
160
  import "./chunk-MGIHZ5CJ.js";
161
161
  import "./chunk-5RGU3J7P.js";
162
162
  import "./chunk-M76ECQRD.js";
@@ -167,24 +167,23 @@ import "./chunk-LM6IYQ3F.js";
167
167
  import {
168
168
  buildSkillDiscoveryContextBlock,
169
169
  buildSkillDiscoveryContextLayer
170
- } from "./chunk-OFZPJ3NT.js";
171
- import "./chunk-2KO5QQFV.js";
170
+ } from "./chunk-2BWU4ORW.js";
171
+ import "./chunk-P2I7ELDC.js";
172
172
  import {
173
173
  expandEnabledPacks
174
174
  } from "./chunk-IIOHYLIG.js";
175
- import "./chunk-AETZ7AD6.js";
176
- import "./chunk-KHCLMKZZ.js";
175
+ import "./chunk-EY7V7REW.js";
177
176
  import {
178
177
  buildLocalWorkspaceOpenAiTools,
179
178
  buildLocalWorkspaceToolset,
180
179
  getProcessRegistry,
181
180
  readCommandActionGatePayload
182
- } from "./chunk-LQ6PUHW6.js";
181
+ } from "./chunk-I7VDDN45.js";
183
182
  import "./chunk-OSCSEJJR.js";
184
183
  import "./chunk-ZNFJWEN4.js";
185
184
  import "./chunk-64KIQZA2.js";
186
185
  import "./chunk-T27IEBNQ.js";
187
- import "./chunk-MI2J67UU.js";
186
+ import "./chunk-AA2YUJNV.js";
188
187
  import "./chunk-N7J63Q6C.js";
189
188
  import {
190
189
  buildCurrentTimeBlock,
@@ -3252,72 +3251,92 @@ function createRunRegistryPoller(deps) {
3252
3251
 
3253
3252
  // packages/cli/tui/runCompletionWatcher.ts
3254
3253
  var WAKE_NOTE_MAX_CHARS = 300;
3255
- function createRunCompletionWatcher(deps) {
3256
- const now = deps.now ?? (() => Date.now());
3257
- const createdAt = now();
3258
- const lastStatusByRunId = /* @__PURE__ */ new Map();
3259
- const notifiedRunIds = /* @__PURE__ */ new Set();
3260
- const runDuration = (record) => formatRunAge(
3254
+ function runDuration(record, nowMs = Date.now()) {
3255
+ return formatRunAge(
3261
3256
  {
3262
3257
  startedAt: readTimestamp(record.startedAt),
3263
3258
  finishedAt: readTimestamp(record.endedAt ?? record.finishedAt)
3264
3259
  },
3265
- now()
3260
+ nowMs
3266
3261
  ) ?? "";
3267
- const isFailureStatus = (status) => typeof status === "string" && status !== "done";
3268
- const describeRun = (record) => {
3269
- const lines = [
3270
- `runId: ${record.runId}`,
3271
- `agent: ${resolveRunLabel(record)}`,
3272
- `status: ${record.status}`
3273
- ];
3274
- const verbose = isFailureStatus(record.status);
3275
- if (verbose && typeof record.exitCode === "number") {
3276
- lines.push(`exitCode: ${record.exitCode}`);
3277
- }
3278
- if (record.dialogId) {
3279
- lines.push(`childDialogId: ${record.dialogId}`);
3280
- } else if (record.ephemeral) {
3281
- lines.push(`ephemeral: true (no persisted child dialog)`);
3282
- } else {
3283
- lines.push(`childDialogId: missing (result unpersisted or ephemeral)`);
3284
- }
3285
- const duration = runDuration(record);
3286
- if (duration) lines.push(`duration: ${duration}`);
3287
- const recordError = "error" in record && typeof record.error === "string" ? record.error : void 0;
3288
- const note = typeof record.note === "string" ? clipText(record.note, WAKE_NOTE_MAX_CHARS) : typeof recordError === "string" ? clipText(recordError, WAKE_NOTE_MAX_CHARS) : "";
3289
- if (note) lines.push(`note: ${note}`);
3290
- const counters = verbose ? record.activity?.counters : void 0;
3291
- if (counters && typeof counters.toolCalls === "number" && typeof counters.llmCalls === "number" && typeof counters.fileEdits === "number") {
3292
- lines.push(
3293
- `activity: ${counters.toolCalls} tool calls \xB7 ${counters.llmCalls} llm calls \xB7 ${counters.fileEdits} edits`
3294
- );
3295
- }
3296
- return lines;
3297
- };
3298
- const buildWakeMessage = (finished) => {
3299
- const lines = [
3300
- `\u3010\u540E\u53F0 run \u7EC8\u6001\u901A\u77E5\u3011\u4F60\u6D3E\u51FA\u7684 ${finished.length} \u6761\u540E\u53F0 run \u5DF2\u5230\u8FBE\u7EC8\u6001\uFF1A`
3301
- ];
3302
- for (const record of finished) {
3303
- lines.push("", ...describeRun(record));
3304
- }
3262
+ }
3263
+ function isFailureStatus(status) {
3264
+ return typeof status === "string" && status !== "done";
3265
+ }
3266
+ function describeRun(record, nowMs = Date.now()) {
3267
+ const lines = [
3268
+ `runId: ${record.runId}`,
3269
+ `agent: ${resolveRunLabel(record)}`,
3270
+ `status: ${record.status}`
3271
+ ];
3272
+ const verbose = isFailureStatus(record.status);
3273
+ if (verbose && typeof record.exitCode === "number") {
3274
+ lines.push(`exitCode: ${record.exitCode}`);
3275
+ }
3276
+ if (record.dialogId) {
3277
+ lines.push(`childDialogId: ${record.dialogId}`);
3278
+ } else if (record.ephemeral) {
3279
+ lines.push(`ephemeral: true (no persisted child dialog)`);
3280
+ } else {
3281
+ lines.push(`childDialogId: missing (result unpersisted or ephemeral)`);
3282
+ }
3283
+ const duration = runDuration(record, nowMs);
3284
+ if (duration) lines.push(`duration: ${duration}`);
3285
+ const recordError = "error" in record && typeof record.error === "string" ? record.error : void 0;
3286
+ const note = typeof record.note === "string" ? clipText(record.note, WAKE_NOTE_MAX_CHARS) : typeof recordError === "string" ? clipText(recordError, WAKE_NOTE_MAX_CHARS) : "";
3287
+ if (note) lines.push(`note: ${note}`);
3288
+ const counters = verbose ? record.activity?.counters : void 0;
3289
+ if (counters && typeof counters.toolCalls === "number" && typeof counters.llmCalls === "number" && typeof counters.fileEdits === "number") {
3305
3290
  lines.push(
3306
- "",
3307
- '\u4EE5\u4E0A\u662F\u4F60\u901A\u8FC7 startAgentRun \u6D3E\u51FA\u7684\u540E\u53F0 run \u7684\u7EC8\u6001\u901A\u77E5\uFF08\u7CFB\u7EDF\u5185\u90E8\u4E8B\u4EF6\uFF0C\u4E0D\u662F\u7528\u6237\u6D88\u606F\uFF09\u3002\u8BF7\u9605\u8BFB\u4E0A\u9762\u7684\u6458\u8981\u5E76\u81EA\u5DF1\u51B3\u5B9A\u4E0B\u4E00\u6B65\uFF1A\u6C47\u603B\u7ED3\u679C\u3001\u7EE7\u7EED\u540E\u7EED\u5DE5\u4F5C\u3001\u6216\u5411\u7528\u6237\u6C47\u62A5\u7ED3\u8BBA\u3002\u9700\u8981\u5B8C\u6574\u8F93\u51FA\u65F6\u7528 controlAgentRun(action:"status", runId, tailLines:30) \u62C9\u53D6\u5BF9\u5E94 run \u7684\u65E5\u5FD7\u3002'
3291
+ `activity: ${counters.toolCalls} tool calls \xB7 ${counters.llmCalls} llm calls \xB7 ${counters.fileEdits} edits`
3308
3292
  );
3309
- return lines.join("\n");
3310
- };
3311
- const buildWakeDisplayText = (finished) => {
3312
- const parts = finished.map((record) => {
3313
- const mark = isFailureStatus(record.status) ? "\u2717" : "\u2713";
3314
- const duration = runDuration(record);
3315
- const label = resolveRunLabel(record);
3316
- const status = isFailureStatus(record.status) ? ` ${record.status}` : "";
3317
- return `${mark} ${label}${status}${duration ? ` \xB7 ${duration}` : ""}`;
3318
- });
3319
- return `${finished.length} \u6761\u540E\u53F0 run \u5DF2\u5B8C\u6210 \xB7 ${parts.join(" \xB7 ")}`;
3320
- };
3293
+ }
3294
+ return lines;
3295
+ }
3296
+ function buildWakeMessage(finished, nowMs = Date.now()) {
3297
+ const lines = [
3298
+ `\u3010\u540E\u53F0 run \u7EC8\u6001\u901A\u77E5\u3011\u4F60\u6D3E\u51FA\u7684 ${finished.length} \u6761\u540E\u53F0 run \u5DF2\u5230\u8FBE\u7EC8\u6001\uFF1A`
3299
+ ];
3300
+ for (const record of finished) {
3301
+ lines.push("", ...describeRun(record, nowMs));
3302
+ }
3303
+ lines.push(
3304
+ "",
3305
+ '\u4EE5\u4E0A\u662F\u4F60\u901A\u8FC7 startAgentRun \u6D3E\u51FA\u7684\u540E\u53F0 run \u7684\u7EC8\u6001\u901A\u77E5\uFF08\u7CFB\u7EDF\u5185\u90E8\u4E8B\u4EF6\uFF0C\u4E0D\u662F\u7528\u6237\u6D88\u606F\uFF09\u3002\u8BF7\u9605\u8BFB\u4E0A\u9762\u7684\u6458\u8981\u5E76\u81EA\u5DF1\u51B3\u5B9A\u4E0B\u4E00\u6B65\uFF1A\u6C47\u603B\u7ED3\u679C\u3001\u7EE7\u7EED\u540E\u7EED\u5DE5\u4F5C\u3001\u6216\u5411\u7528\u6237\u6C47\u62A5\u7ED3\u8BBA\u3002\u9700\u8981\u5B8C\u6574\u8F93\u51FA\u65F6\u7528 controlAgentRun(action:"status", runId, tailLines:30) \u62C9\u53D6\u5BF9\u5E94 run \u7684\u65E5\u5FD7\u3002'
3306
+ );
3307
+ return lines.join("\n");
3308
+ }
3309
+ function buildWakeDisplayText(finished, nowMs = Date.now()) {
3310
+ const parts = finished.map((record) => {
3311
+ const mark = isFailureStatus(record.status) ? "\u2717" : "\u2713";
3312
+ const duration = runDuration(record, nowMs);
3313
+ const label = resolveRunLabel(record);
3314
+ const status = isFailureStatus(record.status) ? ` ${record.status}` : "";
3315
+ return `${mark} ${label}${status}${duration ? ` \xB7 ${duration}` : ""}`;
3316
+ });
3317
+ return `${finished.length} \u6761\u540E\u53F0 run \u5DF2\u5B8C\u6210 \xB7 ${parts.join(" \xB7 ")}`;
3318
+ }
3319
+ function filterUnclaimedChildRuns(runs, deps = {}) {
3320
+ const rawNow = deps.now ? deps.now() : Date.now();
3321
+ const nowMs = typeof rawNow === "number" ? rawNow : rawNow.getTime();
3322
+ const remainingRuns = [];
3323
+ const claimedRunIds = [];
3324
+ for (const r of runs) {
3325
+ const record = readRunRecord(r.runId, deps);
3326
+ const target = record ?? r;
3327
+ if (isRunRecordClaimed(target, nowMs)) {
3328
+ claimedRunIds.push(r.runId);
3329
+ } else {
3330
+ remainingRuns.push(normalizeRunCompletionShape(r));
3331
+ }
3332
+ }
3333
+ return { remainingRuns, claimedRunIds };
3334
+ }
3335
+ function createRunCompletionWatcher(deps) {
3336
+ const now = deps.now ?? (() => Date.now());
3337
+ const createdAt = now();
3338
+ const lastStatusByRunId = /* @__PURE__ */ new Map();
3339
+ const notifiedRunIds = /* @__PURE__ */ new Set();
3321
3340
  return {
3322
3341
  observe(records) {
3323
3342
  const finished = [];
@@ -3353,12 +3372,12 @@ function createRunCompletionWatcher(deps) {
3353
3372
  }
3354
3373
  if (finished.length === 0) return;
3355
3374
  const shapes = finished.map((r) => normalizeRunCompletionShape(r));
3356
- const summaryText = buildWakeMessage(finished);
3375
+ const summaryText = buildWakeMessage(finished, now());
3357
3376
  const event = {
3358
3377
  kind: "child-run-completed",
3359
3378
  runs: shapes,
3360
3379
  text: summaryText,
3361
- displayText: buildWakeDisplayText(finished)
3380
+ displayText: buildWakeDisplayText(finished, now())
3362
3381
  };
3363
3382
  deps.onWake(event);
3364
3383
  },
@@ -7110,14 +7129,15 @@ async function runTuiWorkspace(options) {
7110
7129
  getCurrentDialogId: () => state.dialogId ?? null,
7111
7130
  onWake: (text) => runWakeHandler?.(text)
7112
7131
  });
7132
+ const effectiveEnv = options.env ? { ...process.env, ...options.env } : process.env;
7113
7133
  const runRegistryPoller = createRunRegistryPoller({
7114
7134
  getDockedRuns: () => activityIndicator.getAgentRuns(),
7115
7135
  update: (snapshot) => activityIndicator.updateAgentRun(snapshot),
7116
7136
  // 显式传 env:resolveNoloHome 只认传入 env 的 NOLO_HOME,不传则永远读
7117
7137
  // ~/.nolo——设了 NOLO_HOME 的环境(dev、测试)会读错目录。run 记录读取
7118
7138
  // 与 reconcile 的调用点也是同样写法。
7119
- readRecord: (runId) => readRunRecord(runId, { env: process.env }),
7120
- reconcile: (runId) => checkStaleRun(runId, { env: process.env }),
7139
+ readRecord: (runId) => readRunRecord(runId, { env: effectiveEnv }),
7140
+ reconcile: (runId) => checkStaleRun(runId, { env: effectiveEnv }),
7121
7141
  onRecordsPolled: (records) => runCompletionWatcher.observe(records)
7122
7142
  });
7123
7143
  const history = createTurnHistory();
@@ -7310,11 +7330,39 @@ ${content}`);
7310
7330
  }).catch(() => {
7311
7331
  });
7312
7332
  };
7313
- const req = createTurnRequest(inputMsg);
7333
+ let req = createTurnRequest(inputMsg);
7314
7334
  if (req.event.kind === "child-run-completed") {
7315
- for (const r of req.event.runs) {
7335
+ const nowMs = Date.now();
7336
+ const { remainingRuns, claimedRunIds } = filterUnclaimedChildRuns(
7337
+ req.event.runs,
7338
+ { env: effectiveEnv, now: () => nowMs }
7339
+ );
7340
+ for (const runId of claimedRunIds) {
7341
+ runCompletionWatcher.markAcknowledged(runId);
7342
+ }
7343
+ if (remainingRuns.length === 0) {
7344
+ for (const r of req.event.runs) {
7345
+ runCompletionWatcher.markAcknowledged(r.runId);
7346
+ }
7347
+ return { ok: true, aborted: false };
7348
+ }
7349
+ for (const r of remainingRuns) {
7316
7350
  runCompletionWatcher.markAcknowledged(r.runId);
7317
7351
  }
7352
+ if (remainingRuns.length !== req.event.runs.length) {
7353
+ const text = buildWakeMessage(remainingRuns, nowMs);
7354
+ const displayText = buildWakeDisplayText(remainingRuns, nowMs);
7355
+ const updatedEvent = {
7356
+ kind: "child-run-completed",
7357
+ runs: remainingRuns,
7358
+ text,
7359
+ displayText
7360
+ };
7361
+ req = {
7362
+ text,
7363
+ event: updatedEvent
7364
+ };
7365
+ }
7318
7366
  }
7319
7367
  const message = req.text;
7320
7368
  forcedStop = false;
@@ -1,48 +1,47 @@
1
1
  import {
2
2
  fetchAgentContexts
3
- } from "./chunk-3LWZNEGQ.js";
3
+ } from "./chunk-WBZE7C6S.js";
4
4
  import {
5
5
  generateRequestBody,
6
6
  mergeReferences,
7
7
  performFetchRequest,
8
8
  sanitizeOutboundBody
9
- } from "./chunk-KCBK4MDT.js";
9
+ } from "./chunk-AE5GVFMG.js";
10
10
  import "./chunk-HS7MLR74.js";
11
11
  import "./chunk-PV734VZX.js";
12
12
  import {
13
13
  findToolExecutor,
14
14
  getToolResultErrorData
15
- } from "./chunk-6KYCG5GW.js";
15
+ } from "./chunk-5GQ6XCJY.js";
16
16
  import "./chunk-RQSOAMPJ.js";
17
17
  import "./chunk-GUYMR3JL.js";
18
18
  import "./chunk-KQHGZWSV.js";
19
19
  import "./chunk-IFS5CUEH.js";
20
20
  import "./chunk-KXKQO4Q6.js";
21
- import "./chunk-VD2SO4RG.js";
21
+ import "./chunk-Z7COG62J.js";
22
22
  import "./chunk-BANYWEYY.js";
23
23
  import "./chunk-U6QQLXWI.js";
24
24
  import "./chunk-INZZJSQF.js";
25
25
  import "./chunk-MEYIRKDN.js";
26
26
  import "./chunk-63W5N6P3.js";
27
27
  import "./chunk-VF4K2QE6.js";
28
- import "./chunk-FDKEDU7R.js";
29
- import "./chunk-LAUUAYLK.js";
28
+ import "./chunk-Y5W623XU.js";
29
+ import "./chunk-QI3CHZUT.js";
30
30
  import {
31
31
  updateTokensAction
32
- } from "./chunk-DX6BP4K7.js";
32
+ } from "./chunk-PILJX4DH.js";
33
33
  import "./chunk-RCFIB45Q.js";
34
34
  import "./chunk-JIADXJYU.js";
35
35
  import "./chunk-YYLHWIW6.js";
36
36
  import "./chunk-AGGIDPCZ.js";
37
- import "./chunk-AUH2LTIY.js";
37
+ import "./chunk-TLBZMLLJ.js";
38
38
  import "./chunk-MGIHZ5CJ.js";
39
39
  import "./chunk-5RGU3J7P.js";
40
40
  import "./chunk-M76ECQRD.js";
41
41
  import "./chunk-MRWGHF56.js";
42
- import "./chunk-2KO5QQFV.js";
42
+ import "./chunk-P2I7ELDC.js";
43
43
  import "./chunk-IIOHYLIG.js";
44
- import "./chunk-AETZ7AD6.js";
45
- import "./chunk-KHCLMKZZ.js";
44
+ import "./chunk-EY7V7REW.js";
46
45
  import "./chunk-M3JQWYBC.js";
47
46
  import "./chunk-BMB563Y6.js";
48
47
  import "./chunk-GKHV4UH5.js";
@@ -4,8 +4,7 @@ import {
4
4
  discoverSkills,
5
5
  parseSkillFrontmatter,
6
6
  resolveSkillByName
7
- } from "./chunk-OFZPJ3NT.js";
8
- import "./chunk-KHCLMKZZ.js";
7
+ } from "./chunk-2BWU4ORW.js";
9
8
  import "./chunk-3AOLVADY.js";
10
9
  import "./chunk-7CH6U3FL.js";
11
10
  import "./chunk-4VNS5WPM.js";
@@ -8,12 +8,12 @@ import {
8
8
  import "./chunk-J5NMOM35.js";
9
9
  import "./chunk-EKLRRZIN.js";
10
10
  import "./chunk-KQHGZWSV.js";
11
- import "./chunk-LQ6PUHW6.js";
11
+ import "./chunk-I7VDDN45.js";
12
12
  import "./chunk-OSCSEJJR.js";
13
13
  import "./chunk-ZNFJWEN4.js";
14
14
  import "./chunk-64KIQZA2.js";
15
15
  import "./chunk-T27IEBNQ.js";
16
- import "./chunk-MI2J67UU.js";
16
+ import "./chunk-AA2YUJNV.js";
17
17
  import "./chunk-N7J63Q6C.js";
18
18
  import "./chunk-M3JQWYBC.js";
19
19
  import "./chunk-BMB563Y6.js";
@@ -37,13 +37,13 @@ import {
37
37
  updateContentTitle,
38
38
  updateSpace,
39
39
  uploadAndAddFileToSpace
40
- } from "./chunk-LAUUAYLK.js";
41
- import "./chunk-DX6BP4K7.js";
40
+ } from "./chunk-QI3CHZUT.js";
41
+ import "./chunk-PILJX4DH.js";
42
42
  import "./chunk-RCFIB45Q.js";
43
43
  import "./chunk-JIADXJYU.js";
44
44
  import "./chunk-YYLHWIW6.js";
45
45
  import "./chunk-AGGIDPCZ.js";
46
- import "./chunk-AUH2LTIY.js";
46
+ import "./chunk-TLBZMLLJ.js";
47
47
  import "./chunk-MGIHZ5CJ.js";
48
48
  import "./chunk-5RGU3J7P.js";
49
49
  import "./chunk-M76ECQRD.js";