nolo-cli 0.33.0-alpha.9 → 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 (164) hide show
  1. package/{_executeModel-2WR4RTZZ.js → _executeModel-TMUXL7J5.js} +64 -65
  2. package/{action-OQWPNKAH.js → action-KMBZ3LCZ.js} +12 -12
  3. package/{addContentAction-YVINZQTF.js → addContentAction-KQ44UT2U.js} +10 -10
  4. package/{addDialogAgentAction-6IOCIEPI.js → addDialogAgentAction-ILSDCMYL.js} +9 -9
  5. package/{agentDeleteCommand-H22WRYC6.js → agentDeleteCommand-KA2IQAPG.js} +40 -39
  6. package/{agentEmailCommands-DGJVCMCG.js → agentEmailCommands-UIYBGCZW.js} +74 -75
  7. package/{agentListCommands-6NWMLIMQ.js → agentListCommands-L6JNUOLH.js} +47 -37
  8. package/{agentMachineCommands-5MUO6RDI.js → agentMachineCommands-5CQW5NZR.js} +37 -36
  9. package/agentProviderCommands-65ZC2WB4.js +122 -0
  10. package/{agentPullCommand-YH5GEBK4.js → agentPullCommand-TSWAJPS2.js} +1 -1
  11. package/agentRecordCommands-VUDJQIZH.js +112 -0
  12. package/agentRunCommand-EJWYF3BL.js +132 -0
  13. package/{agentRunControl-SCIVRZWX.js → agentRunControl-7MUPSYDQ.js} +7 -1
  14. package/{agentRuntimeLocal-PRAR3NCW.js → agentRuntimeLocal-XXBMDMBU.js} +33 -33
  15. package/{agentSlice-AMDSTXP5.js → agentSlice-HTIEYKIU.js} +12 -12
  16. package/agentSuperviseCommands-MKWW3ICX.js +640 -0
  17. package/{appDeleteCommands-L5PKC42V.js → appDeleteCommands-OUBL6VHB.js} +35 -34
  18. package/{appDeployCommands-3J7Z4XWV.js → appDeployCommands-BZSS2MX4.js} +35 -34
  19. package/{appDeployStatusCommands-YTRPXE72.js → appDeployStatusCommands-P2ZQOY5X.js} +35 -34
  20. package/{appGetCommands-JVXV5WXD.js → appGetCommands-WCFWQZZM.js} +35 -34
  21. package/{appListCommands-7KDEOJSO.js → appListCommands-FVJ3QNL7.js} +35 -34
  22. package/{authCommand-6Y5LTMZB.js → authCommand-B2XRHNJH.js} +19 -19
  23. package/{authCommands-EAPFGNHN.js → authCommands-GWABTFMR.js} +6 -6
  24. package/{chatQueueReduxAdapter-ZKSS6XRV.js → chatQueueReduxAdapter-ZP2ZS63U.js} +28 -28
  25. package/{chunk-UM4H3URE.js → chunk-23KKIMD5.js} +7 -7
  26. package/chunk-2BWU4ORW.js +2574 -0
  27. package/{chunk-2UECQ7RE.js → chunk-3AOLVADY.js} +1 -1
  28. package/{chunk-M2YMQOLC.js → chunk-4APLX2RT.js} +75 -10
  29. package/{chunk-ZHYK3N56.js → chunk-4AWH4LQA.js} +3 -1
  30. package/{chunk-3GZXL6FM.js → chunk-4DMPISV6.js} +7 -3
  31. package/{chunk-BQ3OHLR5.js → chunk-5GQ6XCJY.js} +1217 -691
  32. package/{chunk-GOIDVXK5.js → chunk-5LDKQUOT.js} +21 -8
  33. package/{chunk-OIQPORYI.js → chunk-64KIQZA2.js} +175 -2
  34. package/{chunk-6XIE5ZGI.js → chunk-6HIGYUBQ.js} +1 -1
  35. package/chunk-6XG52ZQ6.js +146 -0
  36. package/{chunk-FMEVI5TG.js → chunk-7CH6U3FL.js} +1 -1
  37. package/chunk-AA2YUJNV.js +54 -0
  38. package/{chunk-7INB7NXF.js → chunk-AE5GVFMG.js} +294 -54
  39. package/{chunk-UNOTBWZZ.js → chunk-B6H5XCT2.js} +8 -8
  40. package/{chunk-NNWHHCVP.js → chunk-BMB563Y6.js} +10 -4
  41. package/{chunk-DFUPZE6V.js → chunk-C6ELZQ7H.js} +249 -34
  42. package/{chunk-7KNERA53.js → chunk-E2OQ5N2F.js} +87 -13
  43. package/{chunk-6HYVJV7B.js → chunk-ESHYE7WU.js} +2 -1
  44. package/{chunk-KHCLMKZZ.js → chunk-EY7V7REW.js} +280 -6
  45. package/{chunk-JZPBVBIY.js → chunk-FD36SCCD.js} +19 -8
  46. package/{chunk-DKMOY3QI.js → chunk-FGLKRJDI.js} +54 -3
  47. package/{chunk-MQWVAOIU.js → chunk-FT4XBCK4.js} +33 -158
  48. package/{chunk-2QTEYCR7.js → chunk-FTM4KUOZ.js} +17 -17
  49. package/{chunk-U4TRT5V4.js → chunk-GEPHJJW4.js} +1 -1
  50. package/{chunk-7YYHKBJP.js → chunk-GKHV4UH5.js} +1 -1
  51. package/{chunk-2IVEXF7P.js → chunk-GUYMR3JL.js} +6 -33
  52. package/{chunk-YDTYDA5W.js → chunk-GZRMWK5R.js} +6 -4
  53. package/{chunk-X664KVEV.js → chunk-HHBXCRJS.js} +204 -123
  54. package/{chunk-AN7DGYMW.js → chunk-I7VDDN45.js} +4579 -3131
  55. package/{chunk-DSBGWT2C.js → chunk-IEEEWIVO.js} +10 -10
  56. package/{chunk-75U775RZ.js → chunk-IFS5CUEH.js} +1 -1
  57. package/{chunk-WLH5BAKX.js → chunk-IIOHYLIG.js} +9 -4
  58. package/{chunk-UEAUAXYS.js → chunk-ILZY5B4U.js} +2063 -214
  59. package/chunk-IMHO5LC6.js +370 -0
  60. package/{chunk-ADLYMQB6.js → chunk-IZCHPD7T.js} +52 -3
  61. package/{chunk-ITIA6OAQ.js → chunk-IZNJDUJ4.js} +5 -5
  62. package/{chunk-X2DAEZ3X.js → chunk-J5NMOM35.js} +1 -1
  63. package/{chunk-RPRRIFXV.js → chunk-JI2TIPLP.js} +1 -1
  64. package/{chunk-EGRJC4ZN.js → chunk-JIADXJYU.js} +1 -1
  65. package/{chunk-IHEC7VBF.js → chunk-K4KIFRIN.js} +1 -1
  66. package/{chunk-WJSW43QZ.js → chunk-L3JWI7WX.js} +0 -1
  67. package/{chunk-3RUW3ONU.js → chunk-LD6Y6RJY.js} +4 -4
  68. package/chunk-M3JQWYBC.js +387 -0
  69. package/{chunk-GM6PU7B6.js → chunk-MEYIRKDN.js} +0 -1
  70. package/{chunk-6YXDOOSH.js → chunk-MGIHZ5CJ.js} +4 -4
  71. package/{chunk-4F5M2MW5.js → chunk-MJWX4JQO.js} +2 -2
  72. package/{chunk-Q5ITEGIN.js → chunk-N4XRDM26.js} +1 -1
  73. package/{chunk-5CS33IBL.js → chunk-NQ4N4IGO.js} +11 -12
  74. package/{chunk-ZZ2MH7LE.js → chunk-O6OSWFZQ.js} +0 -1
  75. package/{chunk-RJKIB55Y.js → chunk-OSCSEJJR.js} +15 -8
  76. package/{chunk-HUCT7HID.js → chunk-P2I7ELDC.js} +3 -3
  77. package/{chunk-BXPBZVRE.js → chunk-PILJX4DH.js} +285 -251
  78. package/{chunk-SCUETSRP.js → chunk-PV734VZX.js} +1 -1
  79. package/{chunk-XLLTJXAD.js → chunk-QI3CHZUT.js} +39 -2672
  80. package/{chunk-WNHST4IE.js → chunk-RKRXAL3V.js} +5451 -5013
  81. package/{chunk-7E72JMBB.js → chunk-SMPAUSX5.js} +46 -5
  82. package/{chunk-5X4GQ53C.js → chunk-TLBZMLLJ.js} +7 -7
  83. package/{chunk-ASDXPOJH.js → chunk-U6QQLXWI.js} +1 -1
  84. package/{chunk-NUO3QFWD.js → chunk-UNHKVD2N.js} +1 -1
  85. package/{chunk-GE6IWA5N.js → chunk-UNZDCI3O.js} +126 -1
  86. package/{chunk-CPYYM4RJ.js → chunk-V5GA74HI.js} +19 -5
  87. package/{chunk-FXFGNOT2.js → chunk-VFVCYIRQ.js} +1 -1
  88. package/{chunk-G7E4NWFE.js → chunk-W445DPVT.js} +1 -1
  89. package/{chunk-EMW55KKX.js → chunk-WBZE7C6S.js} +1 -1
  90. package/{chunk-3UG2IIZ3.js → chunk-WN5AJG5I.js} +1 -1
  91. package/{chunk-KSRFVP36.js → chunk-WRN7L5CS.js} +1 -1
  92. package/{chunk-GJXRIOLS.js → chunk-WRP5TTM6.js} +4 -84
  93. package/chunk-X2K2JSO4.js +163 -0
  94. package/{chunk-OR2HNLVO.js → chunk-X6EN3KJX.js} +279 -477
  95. package/{chunk-VWY2CZD2.js → chunk-XMFDQYWA.js} +3 -3
  96. package/{chunk-IKWTTKWG.js → chunk-XQES6LXQ.js} +2 -2
  97. package/{chunk-IR6W62Q6.js → chunk-XT73C4VH.js} +18 -21
  98. package/{chunk-7L5CQQIT.js → chunk-Y5W623XU.js} +15 -15
  99. package/{chunk-RY57GLGW.js → chunk-YPREESF4.js} +42 -5
  100. package/{chunk-BQXOGBFN.js → chunk-YZ2WE6CW.js} +2 -2
  101. package/{chunk-DNQK7M7K.js → chunk-Z7COG62J.js} +4 -4
  102. package/{chunk-3WXRAHCG.js → chunk-ZBB3MZR3.js} +3 -3
  103. package/{cliExecutor-DW3PHGEL.js → cliExecutor-BBUVQU4L.js} +2 -2
  104. package/{clipboardy-MMBYVRLF.js → clipboardy-PRUHGPGC.js} +4 -3
  105. package/{codingSkills-DY5MINPG.js → codingSkills-6F4EQFCM.js} +4 -5
  106. package/cooldownCommands-C2SZLEEO.js +90 -0
  107. package/{createAgentAutomationAction-GVSJL2CI.js → createAgentAutomationAction-TGUXUZCY.js} +28 -30
  108. package/createDialogAction-FD5AEOUF.js +58 -0
  109. package/{createPageAction-M2VDKBYS.js → createPageAction-NPC3LYNK.js} +31 -34
  110. package/{dbSlice-UI2VCBLG.js → dbSlice-PIQGICNM.js} +9 -9
  111. package/{deleteFile-XQXPBFFB.js → deleteFile-NPZ64DFN.js} +4 -4
  112. package/{dialogCommands-26DBYNBT.js → dialogCommands-ZF2RSNCG.js} +37 -36
  113. package/{dialogSlice-FFGLRCBL.js → dialogSlice-6BINHWQT.js} +27 -27
  114. package/dist-VODFSGNG.js +7442 -0
  115. package/{docCreateCommands-F2ASWG6B.js → docCreateCommands-4VQ5MOHP.js} +36 -36
  116. package/{docDeleteCommands-A4URDZPI.js → docDeleteCommands-M7WLNVPB.js} +37 -37
  117. package/{docReadCommands-DO6VHDZD.js → docReadCommands-6LU6P2WT.js} +36 -36
  118. package/{docStore-EDAE7RNT.js → docStore-SIUFLABN.js} +29 -31
  119. package/{docUpdateCommands-ZTXZ3RTP.js → docUpdateCommands-S2LX4ENL.js} +39 -39
  120. package/{fetchMessages-7QRCCRYK.js → fetchMessages-CUEFN4GQ.js} +4 -4
  121. package/{getPricing-L2ENXWHV.js → getPricing-P3E2WRIH.js} +5 -5
  122. package/{handleSendMessageAction-CIRLGHOC.js → handleSendMessageAction-QVG5YNZY.js} +29 -29
  123. package/index.js +92 -77
  124. package/{localDialogRead-SLMPV5SK.js → localDialogRead-P7CHFMIC.js} +1 -1
  125. package/{localRuntimeAuthority-E3R24J4T.js → localRuntimeAuthority-S77B5QVB.js} +6 -2
  126. package/{localRuntimeDb-DDZCJFQZ.js → localRuntimeDb-N3H3HQ7G.js} +1 -1
  127. package/{machineCommands-NIQNCYJV.js → machineCommands-OSEBN7BZ.js} +76 -77
  128. package/{machineInfo-M6KB6HZN.js → machineInfo-66ZFUMLE.js} +1 -1
  129. package/{machineWsRunDispatch-EMTSQGAR.js → machineWsRunDispatch-NTJQCIIF.js} +68 -69
  130. package/{models-OX2S5C6Q.js → models-L7S2EKPM.js} +2 -2
  131. package/package.json +1 -1
  132. package/{read-2VHEHCAN.js → read-6C2XD3YZ.js} +5 -5
  133. package/{readDocTool-CSWD6NPC.js → readDocTool-Y7AB365O.js} +1 -1
  134. package/{readlineWorkspace-A2JBJWLI.js → readlineWorkspace-JPME5S7A.js} +4860 -3476
  135. package/{removeDialogAgentAction-2T7BPM3T.js → removeDialogAgentAction-KG5WMJRZ.js} +13 -13
  136. package/{runAgentClientLoop-BV4736ED.js → runAgentClientLoop-SOKEXCUF.js} +61 -61
  137. package/{runtimeDoctorCommands-KIKM6BIO.js → runtimeDoctorCommands-HT4O2PXL.js} +6 -6
  138. package/{setDialogExtraReferencesAction-GPT37HTW.js → setDialogExtraReferencesAction-O2NLXMSM.js} +10 -10
  139. package/{setPrimaryDialogAgentAction-3746P7IW.js → setPrimaryDialogAgentAction-FYYUY7PB.js} +13 -13
  140. package/{settingSlice-FIFOQ6OR.js → settingSlice-GPLI6E3M.js} +11 -11
  141. package/{skillDiscovery-KLLKXPUO.js → skillDiscovery-GPUDHDTZ.js} +3 -4
  142. package/{slateUtils-VO2FU36K.js → slateUtils-RIZES3PV.js} +1 -1
  143. package/{spaceCommands-AYZQHDB3.js → spaceCommands-Z5JLMFFJ.js} +223 -37
  144. package/{spaceSlice-43BNF22B.js → spaceSlice-Z3BGCLGX.js} +28 -30
  145. package/{streamAgentChatTurn-OLLRSITV.js → streamAgentChatTurn-INF5RGK4.js} +115 -129
  146. package/{switchDialogAgentAction-MQTUTQHL.js → switchDialogAgentAction-GH5P6Q3Z.js} +9 -9
  147. package/{chunk-IDAU4UFS.js → syncMapping-N6RGXGBW.js} +11 -11
  148. package/{tableCommands-QE47K72R.js → tableCommands-PQUJ55AS.js} +3 -3
  149. package/{tools-2SI3FXLL.js → tools-ZELMSJZ3.js} +45 -47
  150. package/{tuiSummaryLlmCaller-EAWQ3IZX.js → tuiSummaryLlmCaller-LH7F2SP7.js} +18 -18
  151. package/{updateCommands-AK2RDOFR.js → updateCommands-MNDUIKN7.js} +2 -2
  152. package/{updateDialogTitleAction-YJEQFYOA.js → updateDialogTitleAction-EDUCIB7G.js} +31 -33
  153. package/agentRecordCommands-YMGKT2WF.js +0 -113
  154. package/agentRunCommand-LYEMVQJH.js +0 -131
  155. package/chunk-AETZ7AD6.js +0 -274
  156. package/chunk-D5JI6VDM.js +0 -1800
  157. package/chunk-M3JEW6N6.js +0 -193
  158. package/chunk-ZURFOV5J.js +0 -105
  159. package/chunk-ZWS6DUHX.js +0 -480
  160. package/createDialogAction-VVR46Q2A.js +0 -61
  161. package/syncMapping-RK2MANUX.js +0 -43
  162. package/{chunk-KMSZPTM6.js → chunk-2WKUUY2E.js} +3 -3
  163. package/{chunk-CWMSB67P.js → chunk-AGGIDPCZ.js} +0 -0
  164. package/{chunk-SAQQLJZ5.js → chunk-JDSUTNYY.js} +3 -3
@@ -0,0 +1,370 @@
1
+ import {
2
+ resolveRunLogPath,
3
+ resolveRunReportJsonPath,
4
+ resolveRunReportPath,
5
+ resolveRunsDir
6
+ } from "./chunk-E2OQ5N2F.js";
7
+
8
+ // packages/cli/agentRunReport.ts
9
+ import { homedir as nodeHomedir } from "node:os";
10
+ import { join } from "node:path";
11
+ import * as nodeFs from "node:fs";
12
+ import {
13
+ execFileSync as nodeExecFileSync,
14
+ spawnSync as nodeSpawnSync
15
+ } from "node:child_process";
16
+ function formatDuration(startedAt, endedAt, now) {
17
+ const start = new Date(startedAt).getTime();
18
+ const end = endedAt ? new Date(endedAt).getTime() : (now ?? /* @__PURE__ */ new Date()).getTime();
19
+ if (isNaN(start)) return "-";
20
+ const elapsedMs = Math.max(0, (isNaN(end) ? Date.now() : end) - start);
21
+ const seconds = Math.floor(elapsedMs / 1e3) % 60;
22
+ const minutes = Math.floor(elapsedMs / 6e4) % 60;
23
+ const hours = Math.floor(elapsedMs / 36e5);
24
+ if (hours > 0) return `${hours}h ${minutes}m ${seconds}s`;
25
+ if (minutes > 0) return `${minutes}m ${seconds}s`;
26
+ return `${seconds}s`;
27
+ }
28
+ function extractTailLines(text, count) {
29
+ if (!text) return [];
30
+ const lines = String(text).split(/\r?\n/);
31
+ if (lines.length > 0 && lines[lines.length - 1] === "") lines.pop();
32
+ return lines.slice(Math.max(0, lines.length - count));
33
+ }
34
+ function formatCodeBlockCell(lines) {
35
+ if (lines.length === 0) return "-";
36
+ const escaped = lines.map((line) => line.replace(/\|/g, "\\|")).join("<br>");
37
+ return `<pre>${escaped}</pre>`;
38
+ }
39
+ function executeDoDCommand(cmd, cwd, deps = {}) {
40
+ const spawnSync = deps.spawnSync ?? nodeSpawnSync;
41
+ try {
42
+ const res = spawnSync(cmd, {
43
+ shell: true,
44
+ cwd: cwd || process.cwd(),
45
+ timeout: 12e4,
46
+ maxBuffer: 10 * 1024 * 1024,
47
+ encoding: "utf8"
48
+ });
49
+ if (res.error) {
50
+ const errCode = res.error.code;
51
+ if (errCode === "ETIMEDOUT" || res.signal === "SIGTERM" || res.signal === "SIGKILL") {
52
+ return {
53
+ command: cmd,
54
+ exitCode: "timeout",
55
+ stdoutTail: extractTailLines(res.stdout, 20),
56
+ stderrTail: extractTailLines(res.stderr || res.error.message, 10)
57
+ };
58
+ }
59
+ return {
60
+ command: cmd,
61
+ exitCode: "error",
62
+ stdoutTail: extractTailLines(res.stdout, 20),
63
+ stderrTail: extractTailLines(res.stderr || res.error.message, 10)
64
+ };
65
+ }
66
+ if (res.status === null && (res.signal === "SIGTERM" || res.signal === "SIGKILL")) {
67
+ return {
68
+ command: cmd,
69
+ exitCode: "timeout",
70
+ stdoutTail: extractTailLines(res.stdout, 20),
71
+ stderrTail: extractTailLines(res.stderr, 10)
72
+ };
73
+ }
74
+ const exitCode = typeof res.status === "number" ? res.status : "error";
75
+ return {
76
+ command: cmd,
77
+ exitCode,
78
+ stdoutTail: extractTailLines(res.stdout, 20),
79
+ stderrTail: extractTailLines(res.stderr, 10)
80
+ };
81
+ } catch (err) {
82
+ return {
83
+ command: cmd,
84
+ exitCode: "error",
85
+ stdoutTail: [],
86
+ stderrTail: extractTailLines(err instanceof Error ? err.message : String(err), 10)
87
+ };
88
+ }
89
+ }
90
+ function collectGitSummary(cwd, spawnHead, deps = {}) {
91
+ const targetCwd = cwd || process.cwd();
92
+ const execFile = deps.execFileSync ?? nodeExecFileSync;
93
+ try {
94
+ const isRepo = execFile("git", ["rev-parse", "--is-inside-work-tree"], {
95
+ cwd: targetCwd,
96
+ encoding: "utf8",
97
+ stdio: ["ignore", "pipe", "ignore"],
98
+ timeout: 5e3
99
+ }).trim();
100
+ if (isRepo !== "true") {
101
+ return { isGitRepo: false };
102
+ }
103
+ let modifiedCount = 0;
104
+ let untrackedCount = 0;
105
+ try {
106
+ const statusOut = execFile("git", ["status", "--porcelain"], {
107
+ cwd: targetCwd,
108
+ encoding: "utf8",
109
+ stdio: ["ignore", "pipe", "ignore"],
110
+ timeout: 1e4
111
+ });
112
+ const statusLines = statusOut.split(/\r?\n/).filter((l) => l.trim().length > 0);
113
+ for (const line of statusLines) {
114
+ if (line.startsWith("??")) {
115
+ untrackedCount += 1;
116
+ } else {
117
+ modifiedCount += 1;
118
+ }
119
+ }
120
+ } catch (err) {
121
+ return {
122
+ isGitRepo: true,
123
+ error: `git status \u5931\u8D25: ${err instanceof Error ? err.message : String(err)}`
124
+ };
125
+ }
126
+ let commits;
127
+ if (spawnHead) {
128
+ try {
129
+ const logOut = execFile(
130
+ "git",
131
+ ["log", `${spawnHead}..HEAD`, "--oneline", "-n", "20"],
132
+ {
133
+ cwd: targetCwd,
134
+ encoding: "utf8",
135
+ stdio: ["ignore", "pipe", "ignore"],
136
+ timeout: 1e4
137
+ }
138
+ );
139
+ commits = logOut.split(/\r?\n/).filter((l) => l.trim().length > 0).slice(0, 20);
140
+ } catch (logErr) {
141
+ commits = [`(git log \u5931\u8D25: ${logErr instanceof Error ? logErr.message : String(logErr)})`];
142
+ }
143
+ }
144
+ return {
145
+ isGitRepo: true,
146
+ modifiedCount,
147
+ untrackedCount,
148
+ spawnHead,
149
+ commits
150
+ };
151
+ } catch (err) {
152
+ return {
153
+ isGitRepo: false,
154
+ error: err instanceof Error ? err.message : String(err)
155
+ };
156
+ }
157
+ }
158
+ function parseDoDResultsFromMarkdown(markdown) {
159
+ const dodResults = [];
160
+ const lines = markdown.split(/\r?\n/);
161
+ let inDoDSection = false;
162
+ for (const line of lines) {
163
+ if (line.startsWith("## DoD \u9A8C\u6536\u7ED3\u679C")) {
164
+ inDoDSection = true;
165
+ continue;
166
+ }
167
+ if (inDoDSection && line.startsWith("## ")) {
168
+ inDoDSection = false;
169
+ break;
170
+ }
171
+ if (inDoDSection && line.startsWith("|")) {
172
+ const cells = line.split("|").map((c) => c.trim()).filter((c) => c.length > 0);
173
+ if (cells.length >= 2) {
174
+ if (cells[0] === "\u547D\u4EE4" || cells[0].startsWith("---")) continue;
175
+ const cmd = cells[0].replace(/^`|`$/g, "").trim();
176
+ const codeRaw = cells[1].trim();
177
+ let exitCode;
178
+ if (codeRaw === "timeout") exitCode = "timeout";
179
+ else if (codeRaw === "error") exitCode = "error";
180
+ else {
181
+ const parsedNum = parseInt(codeRaw, 10);
182
+ exitCode = isNaN(parsedNum) ? "error" : parsedNum;
183
+ }
184
+ dodResults.push({ command: cmd, exitCode });
185
+ }
186
+ }
187
+ }
188
+ const passed = dodResults.length > 0 && dodResults.every((r) => r.exitCode === 0);
189
+ return { passed, dodResults };
190
+ }
191
+ function extractChildAgentOutput(logPath, deps = {}) {
192
+ if (!logPath) return void 0;
193
+ const fs = deps.fs ?? nodeFs;
194
+ let raw;
195
+ try {
196
+ raw = fs.readFileSync(logPath, "utf8");
197
+ } catch {
198
+ return void 0;
199
+ }
200
+ const stripped = raw.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, "").replace(/\x1b\[[\x30-\x3f]*[\x20-\x2f]*[\x40-\x7e]/g, "").replace(/\x1b\[[0-9;]*[a-zA-Z]/g, "");
201
+ const lines = stripped.split(/\r?\n/);
202
+ let lastMarkerLineIdx = -1;
203
+ for (let i = lines.length - 1; i >= 0; i--) {
204
+ const line = lines[i];
205
+ if (/^(?:agent-[^\s>]+|[a-zA-Z0-9_@/.-]+)\s*>\s*/.test(line)) {
206
+ lastMarkerLineIdx = i;
207
+ break;
208
+ }
209
+ }
210
+ if (lastMarkerLineIdx === -1) return void 0;
211
+ const collectedLines = [];
212
+ const firstLine = lines[lastMarkerLineIdx];
213
+ const firstMarkerIdx = firstLine.indexOf(" > ");
214
+ collectedLines.push(firstLine.slice(firstMarkerIdx + 3));
215
+ for (let j = lastMarkerLineIdx + 1; j < lines.length; j++) {
216
+ const line = lines[j];
217
+ if (line.startsWith("[nolo] dialog") || line.startsWith("[nolo] background dialog")) {
218
+ break;
219
+ }
220
+ collectedLines.push(line);
221
+ }
222
+ const joined = collectedLines.join("\n").trim();
223
+ if (!joined) return void 0;
224
+ const MAX_CHARS = 2e3;
225
+ const chars = Array.from(joined);
226
+ if (chars.length > MAX_CHARS) {
227
+ return `${chars.slice(0, MAX_CHARS).join("")}
228
+
229
+ ...(\u622A\u65AD\uFF0C\u5B8C\u6574\u65E5\u5FD7\u8BF7\u67E5\u770B log)...`;
230
+ }
231
+ return joined;
232
+ }
233
+ async function buildRunReportData(record, deps = {}) {
234
+ const now = (deps.now ?? (() => /* @__PURE__ */ new Date()))();
235
+ const duration = formatDuration(record.startedAt, record.endedAt, now);
236
+ const edits = record.activity?.counters?.fileEdits ?? 0;
237
+ const tools = record.activity?.counters?.toolCalls ?? 0;
238
+ const llmCalls = record.activity?.counters?.llmCalls ?? 0;
239
+ const activityStr = `${edits} edits, ${tools} tools`;
240
+ const exitCodeStr = typeof record.exitCode === "number" ? String(record.exitCode) : "-";
241
+ const agentDisplay = record.agentName ? `${record.agentName} (${record.agentKey})` : record.agentKey;
242
+ const dialogIdStr = record.dialogId || "-";
243
+ const resolvedLogPath = record.logPath || resolveRunLogPath(record.runId, deps.env, deps.homedir);
244
+ const runsDir = resolveRunsDir(deps.env, deps.homedir);
245
+ const reportPath = resolveRunReportPath(record.runId, deps.env, deps.homedir);
246
+ const reportJsonPath = resolveRunReportJsonPath(record.runId, deps.env, deps.homedir);
247
+ const msgPath = record.msgFile ?? join(runsDir, `${record.runId}.msg.md`);
248
+ const fs = deps.fs ?? nodeFs;
249
+ const msgPathExists = fs.existsSync(msgPath);
250
+ const childOutput = extractChildAgentOutput(resolvedLogPath, deps);
251
+ const lines = [];
252
+ lines.push(`# Run \u9A8C\u6536\u62A5\u544A: ${record.runId}`);
253
+ lines.push("");
254
+ lines.push("## \u6982\u8981");
255
+ lines.push("");
256
+ lines.push("| \u5B57\u6BB5 | \u503C |");
257
+ lines.push("| --- | --- |");
258
+ lines.push(`| runId | ${record.runId} |`);
259
+ lines.push(`| agent | ${agentDisplay} |`);
260
+ lines.push(`| status | ${record.status} |`);
261
+ lines.push(`| exitCode | ${exitCodeStr} |`);
262
+ lines.push(`| \u5F00\u59CB\u65F6\u95F4 | ${record.startedAt} |`);
263
+ lines.push(`| \u7ED3\u675F\u65F6\u95F4 | ${record.endedAt ?? "-"} |`);
264
+ lines.push(`| \u8017\u65F6 | ${duration} |`);
265
+ lines.push(`| activity | ${activityStr} |`);
266
+ lines.push(`| dialogId | ${dialogIdStr} |`);
267
+ lines.push("");
268
+ lines.push("## \u5B50 Agent \u4EA7\u51FA");
269
+ lines.push("");
270
+ if (childOutput) {
271
+ lines.push(childOutput);
272
+ } else {
273
+ lines.push(`\uFF08\u65E0\u6CD5\u4ECE log \u63D0\u53D6\u6700\u7EC8\u7B54\u590D\uFF0C\u5B8C\u6574\u65E5\u5FD7\uFF1A${resolvedLogPath}\uFF09`);
274
+ }
275
+ lines.push("");
276
+ lines.push("## \u7ED3\u679C\u53BB\u54EA\u53D6");
277
+ lines.push("");
278
+ if (record.dialogId) {
279
+ lines.push(
280
+ `- \u5BF9\u8BDD\u8BB0\u5F55: ${record.dialogId}\uFF08\u53EF\u7528 controlAgentRun(action:"status", runId:"${record.runId}") \u67E5\u770B\uFF0C\u6216\u7EC8\u7AEF\u8FD0\u884C nolo dialog read ${record.dialogId}\uFF09`
281
+ );
282
+ } else {
283
+ lines.push("- \u5BF9\u8BDD\u8BB0\u5F55: \u65E0\uFF08\u672A\u6301\u4E45\u5316\u6216 ephemeral run\uFF09");
284
+ }
285
+ lines.push(`- \u5B8C\u6574\u65E5\u5FD7: ${resolvedLogPath}`);
286
+ if (msgPathExists) {
287
+ lines.push(`- \u4EFB\u52A1\u8F93\u5165: ${msgPath}`);
288
+ }
289
+ lines.push(`- \u9A8C\u6536\u62A5\u544A (Markdown): ${reportPath}`);
290
+ lines.push(`- \u9A8C\u6536\u62A5\u544A (JSON): ${reportJsonPath}`);
291
+ lines.push("");
292
+ let dodResults;
293
+ if (record.dodCommands && record.dodCommands.length > 0) {
294
+ dodResults = [];
295
+ lines.push("## DoD \u9A8C\u6536\u7ED3\u679C");
296
+ lines.push("");
297
+ lines.push("| \u547D\u4EE4 | exit code | stdout (\u5C3E\u90E8 20 \u884C) | stderr (\u5C3E\u90E8 10 \u884C) |");
298
+ lines.push("| --- | --- | --- | --- |");
299
+ for (const cmd of record.dodCommands) {
300
+ const result = executeDoDCommand(cmd, record.cwd, deps);
301
+ dodResults.push(result);
302
+ const codeStr = typeof result.exitCode === "number" ? String(result.exitCode) : result.exitCode;
303
+ const stdoutCell = formatCodeBlockCell(result.stdoutTail);
304
+ const stderrCell = formatCodeBlockCell(result.stderrTail);
305
+ const cmdCell = `\`${cmd.replace(/\|/g, "\\|")}\``;
306
+ lines.push(`| ${cmdCell} | ${codeStr} | ${stdoutCell} | ${stderrCell} |`);
307
+ }
308
+ lines.push("");
309
+ }
310
+ let gitSummary;
311
+ if (record.spawnHead) {
312
+ const summary = collectGitSummary(record.cwd, record.spawnHead, deps);
313
+ if (summary.isGitRepo && summary.commits && summary.commits.length > 0 && !summary.error && !summary.commits[0]?.startsWith("(")) {
314
+ gitSummary = summary;
315
+ lines.push("## Git \u6458\u8981");
316
+ lines.push("");
317
+ lines.push(`- \u65B0\u589E Commit (${record.spawnHead}..HEAD):`);
318
+ for (const c of summary.commits) {
319
+ lines.push(` - ${c}`);
320
+ }
321
+ lines.push("");
322
+ }
323
+ }
324
+ lines.push("---");
325
+ lines.push(`_\u751F\u6210\u65F6\u95F4: ${now.toISOString()}_`);
326
+ lines.push("");
327
+ const markdown = lines.join("\n");
328
+ const report = {
329
+ runId: record.runId,
330
+ agentKey: record.agentKey,
331
+ ...record.agentName ? { agentName: record.agentName } : {},
332
+ status: record.status,
333
+ ...typeof record.exitCode === "number" ? { exitCode: record.exitCode } : {},
334
+ startedAt: record.startedAt,
335
+ ...record.endedAt ? { endedAt: record.endedAt } : {},
336
+ duration,
337
+ activity: { fileEdits: edits, toolCalls: tools, llmCalls },
338
+ ...record.dialogId ? { dialogId: record.dialogId } : {},
339
+ ...childOutput ? { childOutputTail: childOutput } : {},
340
+ ...dodResults ? { dodResults } : {},
341
+ ...gitSummary ? { gitSummary } : {},
342
+ generatedAt: now.toISOString()
343
+ };
344
+ return { markdown, report };
345
+ }
346
+ async function generateRunReport(record, deps = {}) {
347
+ const fs = deps.fs ?? nodeFs;
348
+ const env = deps.env ?? process.env;
349
+ const homedir = deps.homedir ?? nodeHomedir;
350
+ const runsDir = resolveRunsDir(env, homedir);
351
+ const reportPath = resolveRunReportPath(record.runId, env, homedir);
352
+ const reportJsonPath = resolveRunReportJsonPath(record.runId, env, homedir);
353
+ const { markdown, report } = await buildRunReportData(record, deps);
354
+ const shouldWrite = deps.forceReport === true || env.NOLO_RUN_REPORT === "1";
355
+ if (shouldWrite) {
356
+ try {
357
+ fs.mkdirSync(runsDir, { recursive: true });
358
+ fs.writeFileSync(reportPath, markdown, "utf8");
359
+ fs.writeFileSync(reportJsonPath, JSON.stringify(report, null, 2), "utf8");
360
+ } catch (err) {
361
+ console.warn(`[nolo] failed to write run report file to ${reportPath}:`, err);
362
+ }
363
+ }
364
+ return { reportPath, reportJsonPath, markdown, report };
365
+ }
366
+
367
+ export {
368
+ parseDoDResultsFromMarkdown,
369
+ generateRunReport
370
+ };
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  asRecordOrEmpty
3
3
  } from "./chunk-KX6YBIHG.js";
4
- import {
5
- asOptionalFiniteNumber
6
- } from "./chunk-WWC7I6TA.js";
7
4
  import {
8
5
  asNonEmptyStringArray,
9
6
  asTrimmedNonEmptyStringArray
10
7
  } from "./chunk-I42VC5KR.js";
8
+ import {
9
+ asOptionalFiniteNumber
10
+ } from "./chunk-WWC7I6TA.js";
11
11
  import {
12
12
  isOwnedAgentKey,
13
13
  ownedAgentKey,
@@ -146,6 +146,53 @@ function redactAgentRecordForWorkspaceTool(record) {
146
146
  return redacted;
147
147
  }
148
148
 
149
+ // packages/ai/agent/agentSelectionPriority.ts
150
+ function parseAgentTimestamp(value) {
151
+ if (typeof value === "number" && Number.isFinite(value)) return value;
152
+ if (typeof value === "string") {
153
+ const parsed = Date.parse(value);
154
+ if (Number.isFinite(parsed)) return parsed;
155
+ }
156
+ return 0;
157
+ }
158
+ function isUserConfiguredAgent(agent) {
159
+ return agent.isOAuth === true || agent.isOwned === true && agent.apiSource === "custom";
160
+ }
161
+ function resolveAgentSelectionPriority(agent) {
162
+ const favorite = agent.isFavorite === true;
163
+ const configured = isUserConfiguredAgent(agent);
164
+ if (favorite && configured) return 0;
165
+ if (favorite) return 1;
166
+ if (configured) return 2;
167
+ if (agent.isOwned === true) return 3;
168
+ return 4;
169
+ }
170
+ function compareAgentSelection(left, right) {
171
+ const priorityDiff = resolveAgentSelectionPriority(left) - resolveAgentSelectionPriority(right);
172
+ if (priorityDiff !== 0) return priorityDiff;
173
+ const leftFav = left.isFavorite === true;
174
+ const rightFav = right.isFavorite === true;
175
+ if (leftFav && rightFav) {
176
+ const leftFavAt = parseAgentTimestamp(left.favoritedAt);
177
+ const rightFavAt = parseAgentTimestamp(right.favoritedAt);
178
+ if (leftFavAt !== rightFavAt) return rightFavAt - leftFavAt;
179
+ }
180
+ const leftUpdated = parseAgentTimestamp(left.updatedAt ?? left.createdAt);
181
+ const rightUpdated = parseAgentTimestamp(right.updatedAt ?? right.createdAt);
182
+ return rightUpdated - leftUpdated;
183
+ }
184
+ var AGENT_SELECTION_PRIORITY_INSTRUCTIONS = ` - \u4F18\u5148\u7EA7\u5951\u7EA6\uFF08\u4E0E\u5217\u8868\u6392\u5E8F\u771F\u503C\u4E25\u683C\u4E00\u81F4\uFF09\uFF1A
185
+ 1. \u6536\u85CF\u7684 OAuth / \u81EA\u5B9A\u4E49 Agent\uFF08isFavorite=true \u4E14 isOAuth=true \u6216 apiSource="custom"\uFF0C\u7528\u6237\u79C1\u6709\u8BA2\u9605/\u51ED\u636E\u4F18\u5148\uFF0C\u4E0D\u70E7\u5E73\u53F0 credits\uFF09
186
+ 2. \u5176\u4ED6\u6536\u85CF Agent\uFF08isFavorite=true\uFF09
187
+ 3. \u672A\u6536\u85CF\u7684 OAuth / \u81EA\u5B9A\u4E49 Agent\uFF08isOAuth=true \u6216 apiSource="custom"\uFF09
188
+ 4. \u5176\u4ED6\u81EA\u5EFA Agent\uFF08isOwned=true\uFF09
189
+ 5. \u516C\u5F00 / \u5E73\u53F0 Agent\uFF08apiSource="platform" \u6216\u793E\u533A\u516C\u5F00\uFF09
190
+ \u540C\u6863\u4F4D\u4E0B\u6536\u85CF\u9879\u6309\u6700\u8FD1\u6536\u85CF\uFF08favoritedAt\uFF09\u4F18\u5148\uFF0C\u5176\u4F59\u6309\u6700\u8FD1\u66F4\u65B0\uFF08updatedAt\uFF09\u4F18\u5148\u3002
191
+ - \u9009\u4EBA\u4E0E\u4EFB\u52A1\u5339\u914D\u53C2\u8003\uFF1A
192
+ * **\u80FD\u529B\u5339\u914D**\uFF1A\u82E5\u4EFB\u52A1\u660E\u786E\u9700\u8981\u7279\u5B9A\u989D\u5916\u80FD\u529B\uFF08\u6D4F\u89C8\u5668/\u56FE\u7247/\u8868\u683C/\u90AE\u4EF6/\u6570\u636E\u5E93\uFF09\uFF0C\u4F18\u5148\u7B5B\u9009 tools \u5B57\u6BB5\u8986\u76D6\u5BF9\u5E94\u80FD\u529B\u7684\u5019\u9009\uFF1B
193
+ * **\u6210\u672C\u4E0E\u914D\u989D**\uFF1A\u5728\u6EE1\u8DB3\u80FD\u529B\u7684\u540C\u6863\u5019\u9009\u4E2D\uFF0C\u4F18\u5148\u9009\u62E9\u6210\u672C\u4F4E\uFF08\u4F4E inputPrice\uFF09\u6216\u8D70\u7528\u6237\u81EA\u5EFA/\u79C1\u6709\u51ED\u636E\u7684\u901A\u9053\uFF1B
194
+ * **tools \u5B57\u6BB5\u53EA\u53CD\u6620\u989D\u5916\u80FD\u529B\uFF0C\u4E0D\u53CD\u6620 coding \u80FD\u529B**\uFF1AwriteFile/editFile/execBash/applyEdit/gitCommit \u7B49\u4EE3\u7801\u5DE5\u5177\u7531 host \u81EA\u52A8\u6CE8\u5165\uFF0Ctools=[] \u4E0D\u4EE3\u8868\u4E0D\u80FD\u5199\u4EE3\u7801\uFF0C\u4E0D\u8981\u636E\u6B64\u6392\u9664\u5019\u9009\u3002`;
195
+
149
196
  // packages/agent-runtime/noloWorkspaceTools.ts
150
197
  var NOLO_WORKSPACE_TOOL_NAMES = [
151
198
  "listDialogs",
@@ -619,6 +666,8 @@ function buildNoloWorkspaceCommandArgs(call) {
619
666
  }
620
667
 
621
668
  export {
669
+ compareAgentSelection,
670
+ AGENT_SELECTION_PRIORITY_INSTRUCTIONS,
622
671
  buildAgentRuntimeAgentLookupKeys,
623
672
  shouldFetchAgentRuntimeRecordRemotely,
624
673
  resolveRuntimeToolSurfaceForAgent,
@@ -11,22 +11,22 @@ import {
11
11
  getAntigravityUserAgent,
12
12
  normalizeAntigravityTokenPayload,
13
13
  refreshAntigravityToken
14
- } from "./chunk-SCUETSRP.js";
14
+ } from "./chunk-PV734VZX.js";
15
15
  import {
16
16
  writeOAuthCredential
17
- } from "./chunk-JZPBVBIY.js";
17
+ } from "./chunk-FD36SCCD.js";
18
18
  import {
19
19
  toErrorMessage
20
20
  } from "./chunk-HNMXYYJR.js";
21
21
  import {
22
22
  asOptionalFiniteNumber
23
23
  } from "./chunk-WWC7I6TA.js";
24
- import {
25
- asTrimmedString
26
- } from "./chunk-3EUW3WEO.js";
27
24
  import {
28
25
  isRecord
29
26
  } from "./chunk-KUG52IAP.js";
27
+ import {
28
+ asTrimmedString
29
+ } from "./chunk-3EUW3WEO.js";
30
30
 
31
31
  // packages/cli/oauth/callback-server.ts
32
32
  import { createServer } from "node:http";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  buildAgentRuntimeAgentLookupKeys,
3
3
  shouldFetchAgentRuntimeRecordRemotely
4
- } from "./chunk-ADLYMQB6.js";
4
+ } from "./chunk-IZCHPD7T.js";
5
5
 
6
6
  // packages/cli/client/localAgentRecords.ts
7
7
  var buildLocalAgentLookupKeys = buildAgentRuntimeAgentLookupKeys;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DEFAULT_AGENT_BASE_POLICY,
3
3
  DEFAULT_USER_PREFERENCE_PROFILE
4
- } from "./chunk-UNOTBWZZ.js";
4
+ } from "./chunk-B6H5XCT2.js";
5
5
 
6
6
  // packages/ai/policy/runtimePolicy.ts
7
7
  var clampLevel = (value, fallback) => {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  dialogMessageKey
3
- } from "./chunk-KMSZPTM6.js";
3
+ } from "./chunk-2WKUUY2E.js";
4
4
  import {
5
5
  asOptionalFiniteNumber
6
6
  } from "./chunk-WWC7I6TA.js";
@@ -2,7 +2,7 @@ import {
2
2
  deleteDbRecord,
3
3
  queryUserRecords,
4
4
  readDbRecord
5
- } from "./chunk-YDTYDA5W.js";
5
+ } from "./chunk-GZRMWK5R.js";
6
6
  import {
7
7
  mergeAndDedupUserData
8
8
  } from "./chunk-KQHGZWSV.js";
@@ -259,7 +259,6 @@ export {
259
259
  getIsDesktopApp,
260
260
  createClientLogger,
261
261
  isAbortError,
262
- fetchWithTransientReadRetry,
263
262
  logger,
264
263
  getAllServers,
265
264
  fetchFromClientDb,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  selectCurrentServer,
3
3
  selectRemoteServers
4
- } from "./chunk-UNOTBWZZ.js";
4
+ } from "./chunk-B6H5XCT2.js";
5
5
  import {
6
6
  createUserKey,
7
7
  extractAgentInfo,
@@ -10,16 +10,16 @@ import {
10
10
  sanitizeShareData,
11
11
  shareKey,
12
12
  toNonEmptyString
13
- } from "./chunk-KMSZPTM6.js";
13
+ } from "./chunk-2WKUUY2E.js";
14
14
  import {
15
15
  noloDeleteRequest,
16
16
  noloWriteRequest,
17
17
  selectIdentityUser,
18
18
  selectIdentityUserId
19
- } from "./chunk-X664KVEV.js";
19
+ } from "./chunk-HHBXCRJS.js";
20
20
  import {
21
21
  normalizeTimeFields
22
- } from "./chunk-WJSW43QZ.js";
22
+ } from "./chunk-L3JWI7WX.js";
23
23
 
24
24
  // packages/share/action.ts
25
25
  var generateToken = () => {