nolo-cli 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{_executeModel-AVCA2NAV.js → _executeModel-WPNX5DH4.js} +49 -43
- package/{action-F5JACQBG.js → action-LT7BRFLK.js} +10 -9
- package/{addContentAction-AQXEYRBE.js → addContentAction-PL3KKBDH.js} +9 -8
- package/{addDialogAgentAction-EJHHJZWW.js → addDialogAgentAction-FCMSKYAF.js} +8 -7
- package/{agentDeleteCommand-QW5PUMDQ.js → agentDeleteCommand-L3357EFL.js} +31 -28
- package/{agentEmailCommands-4ORVLGVQ.js → agentEmailCommands-N65AVLEI.js} +61 -55
- package/{agentListCommands-YWBYRTYC.js → agentListCommands-CH27FTI2.js} +30 -27
- package/{agentMachineCommands-JSQW4FOA.js → agentMachineCommands-PPK5HJZB.js} +29 -26
- package/{agentPullCommand-6HWUT3SW.js → agentPullCommand-ZZGU5KOY.js} +4 -4
- package/{agentRecordCommands-AASIWOBT.js → agentRecordCommands-HTVXD4TT.js} +56 -50
- package/{agentRunCommand-TB5BHXUH.js → agentRunCommand-MGLVJUA5.js} +62 -53
- package/{agentRunControl-6ADXVYMR.js → agentRunControl-P75VPTGS.js} +24 -1
- package/{agentRuntimeLocal-QNPNJRVH.js → agentRuntimeLocal-QUTBSY3I.js} +24 -21
- package/{agentSlice-RUNXC62Y.js → agentSlice-DOGRCMWK.js} +9 -8
- package/appDeleteCommands-FEEVXUBG.js +127 -0
- package/appDeployCommands-C4HCGC4B.js +166 -0
- package/appDeployStatusCommands-IR5ZUZBQ.js +147 -0
- package/appGetCommands-6RJGZ66Z.js +122 -0
- package/appListCommands-VMTF5YZF.js +125 -0
- package/{authCommand-YFTR3347.js → authCommand-WJZPOLSS.js} +16 -9
- package/{authCommands-YXGOXNBZ.js → authCommands-XTBV7OFZ.js} +6 -5
- package/{chunk-XPC5C7BK.js → chunk-3ND52WIL.js} +2 -2
- package/{chunk-SOTZ6RDN.js → chunk-3Q7WHGCB.js} +1 -1
- package/{chunk-M43KDE25.js → chunk-45BY7RLP.js} +2 -8
- package/{chunk-KKY4B2Q2.js → chunk-4PWB7JRR.js} +4 -1
- package/{chunk-6N4KODMN.js → chunk-4T5F7YZQ.js} +1 -1
- package/chunk-7BUYEZ6U.js +671 -0
- package/{chunk-AS3ZQ3O2.js → chunk-7OBMZCRD.js} +1 -1
- package/{chunk-AVVZUXXC.js → chunk-AAODAAUQ.js} +34 -13
- package/{chunk-QLUFR47U.js → chunk-AL2V7U3E.js} +1 -1
- package/{chunk-MTU75CZ2.js → chunk-B5TOXZAK.js} +1 -1
- package/{chunk-AUURUT6L.js → chunk-BT6K76S7.js} +238 -424
- package/chunk-CEFXYF66.js +107 -0
- package/{chunk-RLCXU7A5.js → chunk-D3HVJJIA.js} +1 -1
- package/{chunk-JTMNCCWF.js → chunk-DKZFOK24.js} +16 -87
- package/chunk-DL6EPNIK.js +50 -0
- package/{chunk-4L2OJPCU.js → chunk-EGPCU42M.js} +58 -8
- package/{chunk-IWLUTMYX.js → chunk-ELT65PZW.js} +2 -2
- package/chunk-FKXFCYVO.js +221 -0
- package/{chunk-4FX6NVDW.js → chunk-FPKLD4KB.js} +3 -136
- package/{chunk-PCTUYVUM.js → chunk-FVIPEIVX.js} +10 -3
- package/chunk-GFUIQ4RY.js +136 -0
- package/{chunk-66X4VSRC.js → chunk-HQPG2PIV.js} +41 -1
- package/{chunk-IGXREZW2.js → chunk-HV2A3B4W.js} +1 -1
- package/{chunk-LPEUV5RE.js → chunk-IOOMJJ4Z.js} +2 -2
- package/{setDialogExtraReferencesAction-LR6MSIXO.js → chunk-JLA4FXYC.js} +2 -17
- package/{chunk-3OIRVWXA.js → chunk-JP7REMYP.js} +10 -1
- package/chunk-KFEVY3ST.js +255 -0
- package/{chunk-P3RIAYGG.js → chunk-L2MLZQXU.js} +3 -3
- package/{chunk-55NSNCFM.js → chunk-L6NVTGI7.js} +1 -1
- package/{chunk-3WGLLTK4.js → chunk-LSFAWXKC.js} +100 -3
- package/{chunk-S2LXHNHG.js → chunk-MD3V54DA.js} +6 -6
- package/{chunk-6EVITP2G.js → chunk-MUCU6ATG.js} +2 -251
- package/{chunk-KFHN5NGJ.js → chunk-MVQ4TBSD.js} +1 -1
- package/{chunk-ZQBL7LIC.js → chunk-NEKFSXOP.js} +310 -211
- package/{chunk-NSCHQQPU.js → chunk-NVB267BZ.js} +397 -324
- package/{chunk-Z5JQNBNY.js → chunk-NYUXSXLY.js} +33 -14
- package/{chunk-FRV6A633.js → chunk-PZCBZO4J.js} +2 -2
- package/{chunk-GSINCD4P.js → chunk-QCJITMYO.js} +21 -11
- package/{chunk-OOSFSFMA.js → chunk-R5V5G73M.js} +2 -0
- package/{chunk-4IJYA27C.js → chunk-RG2U2MTJ.js} +1 -1
- package/{chunk-BEBNFWDU.js → chunk-RRGVDPH3.js} +3 -3
- package/{chunk-EABWT43X.js → chunk-RVOUXDFU.js} +5 -5
- package/{chunk-JTINRTBT.js → chunk-SKDNBYZK.js} +2 -2
- package/{chunk-3663CXZN.js → chunk-SNZV4QCE.js} +65 -22
- package/{chunk-KMQPSTMJ.js → chunk-TRT4I4UD.js} +2 -2
- package/{chunk-MYMMNKYL.js → chunk-TSIYZBTH.js} +156 -6
- package/{chunk-EHLHSX7R.js → chunk-UB4RYYNQ.js} +9 -2
- package/{chunk-YJKXGHJ6.js → chunk-UGUW3FHG.js} +4 -4
- package/{chunk-DPAB4FQ7.js → chunk-UZY4BEBR.js} +1579 -212
- package/chunk-V5R4NZP2.js +78 -0
- package/{chunk-MR6ISAGB.js → chunk-VDNQF5VI.js} +6 -6
- package/{chunk-33BJUVK4.js → chunk-VGMJ6PDJ.js} +5 -5
- package/{chunk-W4NVOSFF.js → chunk-WFHXMLHZ.js} +1 -1
- package/{chunk-H33743XH.js → chunk-WJRJDX2W.js} +1 -1
- package/chunk-X4Q4UZEY.js +26 -0
- package/{chunk-RPDGJO4D.js → chunk-XHG22OEX.js} +4 -4
- package/{chunk-DVRHHFEA.js → chunk-XMLRJUU5.js} +1 -1
- package/{chunk-3S2VOMIF.js → chunk-XRZJGPFI.js} +7 -7
- package/{chunk-7UKFVQ5W.js → chunk-YLRTBX4Y.js} +105 -36
- package/{chunk-DGEYDWEZ.js → chunk-YXTRNO5W.js} +3 -3
- package/{chunk-FY233ZFU.js → chunk-ZJZCMKOR.js} +107 -177
- package/{chunk-NVEWUJVX.js → chunk-ZVOZH2HW.js} +1 -1
- package/chunk-ZZ2MH7LE.js +84 -0
- package/{cliExecutor-K3F7DMRO.js → cliExecutor-DNE7TCC4.js} +2 -2
- package/codingSkills-36KN5NQT.js +48 -0
- package/{createAgentAutomationAction-FNHPSKKO.js → createAgentAutomationAction-PMOLEPGJ.js} +19 -18
- package/{createDialogAction-TZCVQ3NU.js → createDialogAction-DPRTYNAK.js} +21 -20
- package/{createPageAction-EIGZ3BKT.js → createPageAction-JGZK3WAM.js} +25 -24
- package/{dbSlice-7KQH6GOU.js → dbSlice-CGSRFJN3.js} +8 -7
- package/{deleteFile-WPWVZE4B.js → deleteFile-WDZ3VM7B.js} +3 -3
- package/{dialogCommands-FO77J5DQ.js → dialogCommands-XED6DKLV.js} +29 -26
- package/{dialogSlice-MM5U4KE2.js → dialogSlice-KO4NRNKC.js} +19 -18
- package/{docCreateCommands-I3BS3AZI.js → docCreateCommands-P6DYWHH3.js} +32 -27
- package/{docDeleteCommands-Q2OPV52P.js → docDeleteCommands-KUWXAMSN.js} +31 -26
- package/{docReadCommands-YOOFACYZ.js → docReadCommands-ECW55TKB.js} +30 -25
- package/{docStore-NGYQ2JTR.js → docStore-6KMERNUY.js} +20 -19
- package/{docUpdateCommands-2B32ITHN.js → docUpdateCommands-5J4BTJQN.js} +31 -26
- package/{fetchMessages-KTNM7QAR.js → fetchMessages-BMGVZVSE.js} +4 -3
- package/{getPricing-P4XRJRZB.js → getPricing-RYY6OBA4.js} +2 -2
- package/{handleSendMessageAction-JRZWWBKP.js → handleSendMessageAction-R3ZHTVU4.js} +20 -19
- package/index.js +95 -64
- package/{localDialogRead-2VRI24F4.js → localDialogRead-HQZPVIE3.js} +1 -1
- package/{localRuntimeDb-LGDF6FQP.js → localRuntimeDb-THJZGAOJ.js} +1 -1
- package/{machineCommands-WRWF2ICZ.js → machineCommands-JF2YL34J.js} +62 -56
- package/{machineWsRunDispatch-ZX7Q3TWZ.js → machineWsRunDispatch-ON4AEOJL.js} +54 -48
- package/{models-WQ5N4OJM.js → models-5K5G2CZI.js} +1 -1
- package/package.json +1 -1
- package/queryRunOverlay-O4LOMMPO.js +161 -0
- package/{read-CN3TNXIP.js → read-3FMPZPER.js} +3 -3
- package/{readDocTool-WF3675ED.js → readDocTool-VSYHKK3V.js} +1 -1
- package/{readlineWorkspace-ZTGRGW46.js → readlineWorkspace-SUCINTL7.js} +354 -185
- package/{removeDialogAgentAction-YDHBFEGI.js → removeDialogAgentAction-OAGA2G3U.js} +10 -9
- package/{runAgentClientLoop-JZCOP7LG.js → runAgentClientLoop-OBD2AVEL.js} +43 -37
- package/runOverlayPresentation-ZO4VCWEU.js +11 -0
- package/{runtimeDoctorCommands-THIHX2SY.js → runtimeDoctorCommands-E2OUORHK.js} +6 -6
- package/setDialogExtraReferencesAction-JZEXA5SL.js +27 -0
- package/{setPrimaryDialogAgentAction-IIVDCY5C.js → setPrimaryDialogAgentAction-4ZUQQKDG.js} +26 -17
- package/{settingSlice-O23YDK2O.js → settingSlice-7MNKHZ6R.js} +9 -8
- package/{skillDiscovery-6M2BZUFN.js → skillDiscovery-KJWT7JBU.js} +3 -3
- package/{spaceCommands-VV4GTPQK.js → spaceCommands-32NTNLHS.js} +30 -27
- package/{spaceSlice-DRWWZJP7.js → spaceSlice-P7VOXLY6.js} +19 -18
- package/{streamAgentChatTurn-Y6WGATQR.js → streamAgentChatTurn-UHEMNI3X.js} +97 -56
- package/{tableCommands-3P7MJ3PF.js → tableCommands-BEQAGE4I.js} +1 -1
- package/{tools-PUNBY3AH.js → tools-BMXIXHMB.js} +32 -27
- package/{tuiSummaryLlmCaller-F64WLSAF.js → tuiSummaryLlmCaller-VUNVBRX3.js} +5 -4
- package/types-ZSTJ7MPR.js +7 -0
- package/{updateDialogTitleAction-YSR4TCMB.js → updateDialogTitleAction-LJBDYZLH.js} +22 -21
- package/{chunk-O4BU24WZ.js → chunk-6Y7A3OQQ.js} +3 -3
- package/{chunk-XBS2WYJ2.js → chunk-RK5NYQEL.js} +0 -0
- package/{chunk-CMKUBIGW.js → chunk-X7W4TNB4.js} +3 -3
- package/{localRuntimeAuthority-TEGCOWX4.js → localRuntimeAuthority-4IXJCHZ7.js} +3 -3
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import {
|
|
2
|
+
requireTokenUser
|
|
3
|
+
} from "./chunk-FPKLD4KB.js";
|
|
4
|
+
import {
|
|
5
|
+
resolveServerUrl
|
|
6
|
+
} from "./chunk-A7GB5UGH.js";
|
|
7
|
+
|
|
8
|
+
// packages/cli/cliApiClient.ts
|
|
9
|
+
var CliApiError = class extends Error {
|
|
10
|
+
code;
|
|
11
|
+
status;
|
|
12
|
+
constructor(message, code, status) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.status = status;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
async function cliApiRequest(args) {
|
|
19
|
+
const method = args.method ?? "POST";
|
|
20
|
+
let url = `${args.serverUrl.replace(/\/$/, "")}${args.path}`;
|
|
21
|
+
if (args.query) {
|
|
22
|
+
const params = new URLSearchParams(args.query);
|
|
23
|
+
url += `?${params.toString()}`;
|
|
24
|
+
}
|
|
25
|
+
const headers = {
|
|
26
|
+
"Content-Type": "application/json",
|
|
27
|
+
Authorization: `Bearer ${args.authToken}`
|
|
28
|
+
};
|
|
29
|
+
const init = { method, headers };
|
|
30
|
+
if (args.body !== void 0 && args.body !== null && method !== "GET") {
|
|
31
|
+
init.body = JSON.stringify(args.body);
|
|
32
|
+
}
|
|
33
|
+
let response;
|
|
34
|
+
try {
|
|
35
|
+
response = await fetch(url, init);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
throw new CliApiError(`\u8BF7\u6C42\u5931\u8D25: ${error.message}`, "NETWORK_ERROR", 0);
|
|
38
|
+
}
|
|
39
|
+
let data;
|
|
40
|
+
try {
|
|
41
|
+
data = await response.json();
|
|
42
|
+
} catch {
|
|
43
|
+
throw new CliApiError(
|
|
44
|
+
`\u670D\u52A1\u7AEF\u8FD4\u56DE\u975E JSON \u54CD\u5E94 (HTTP ${response.status})`,
|
|
45
|
+
"INVALID_RESPONSE",
|
|
46
|
+
response.status
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
if (!response.ok || data.success !== true) {
|
|
50
|
+
const errorObj = data.error ?? {};
|
|
51
|
+
const message = errorObj.message || data.message || `\u8BF7\u6C42\u5931\u8D25 (HTTP ${response.status})`;
|
|
52
|
+
const code = errorObj.code || `HTTP_${response.status}`;
|
|
53
|
+
throw new CliApiError(message, code, response.status);
|
|
54
|
+
}
|
|
55
|
+
return data;
|
|
56
|
+
}
|
|
57
|
+
function printCliError(error) {
|
|
58
|
+
if (error instanceof CliApiError) {
|
|
59
|
+
process.stderr.write(`\u9519\u8BEF [${error.code}]: ${error.message}
|
|
60
|
+
`);
|
|
61
|
+
} else if (error instanceof Error) {
|
|
62
|
+
process.stderr.write(`\u9519\u8BEF: ${error.message}
|
|
63
|
+
`);
|
|
64
|
+
} else {
|
|
65
|
+
process.stderr.write(`\u9519\u8BEF: ${String(error)}
|
|
66
|
+
`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function resolveCliContext(args, env) {
|
|
70
|
+
const serverUrl = resolveServerUrl(args, env);
|
|
71
|
+
const { authToken, userId } = requireTokenUser(args, env, false);
|
|
72
|
+
return { serverUrl, authToken, userId };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// packages/cli/cliOutputHelpers.ts
|
|
76
|
+
function pickDefined(obj) {
|
|
77
|
+
const result = {};
|
|
78
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
79
|
+
if (value !== void 0 && value !== null) result[key] = value;
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
function formatFields(fields, indent = "") {
|
|
84
|
+
const maxKeyLen = fields.reduce((max, [k]) => Math.max(max, k.length), 0);
|
|
85
|
+
const lines = fields.map(([key, value]) => {
|
|
86
|
+
const display = value === void 0 || value === null ? "-" : String(value);
|
|
87
|
+
return `${indent}${key.padEnd(maxKeyLen)}: ${display}`;
|
|
88
|
+
});
|
|
89
|
+
return lines.join("\n");
|
|
90
|
+
}
|
|
91
|
+
function outputResult(data, shouldOutputJson, formatter, output = process.stdout) {
|
|
92
|
+
if (shouldOutputJson) {
|
|
93
|
+
output.write(`${JSON.stringify(data, null, 2)}
|
|
94
|
+
`);
|
|
95
|
+
} else {
|
|
96
|
+
formatter();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export {
|
|
101
|
+
cliApiRequest,
|
|
102
|
+
printCliError,
|
|
103
|
+
resolveCliContext,
|
|
104
|
+
pickDefined,
|
|
105
|
+
formatFields,
|
|
106
|
+
outputResult
|
|
107
|
+
};
|
|
@@ -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";
|
|
4
7
|
import {
|
|
5
8
|
asNonEmptyStringArray,
|
|
6
9
|
asTrimmedNonEmptyStringArray
|
|
7
10
|
} from "./chunk-I42VC5KR.js";
|
|
8
|
-
import {
|
|
9
|
-
asOptionalFiniteNumber
|
|
10
|
-
} from "./chunk-WWC7I6TA.js";
|
|
11
11
|
import {
|
|
12
12
|
isRecord
|
|
13
13
|
} from "./chunk-KUG52IAP.js";
|
|
@@ -15,85 +15,6 @@ import {
|
|
|
15
15
|
asOptionalTrimmedString
|
|
16
16
|
} from "./chunk-G3SUCT4W.js";
|
|
17
17
|
|
|
18
|
-
// packages/agent-runtime/toolNameAliases.ts
|
|
19
|
-
var LEGACY_TOOL_NAME_ALIASES = {
|
|
20
|
-
createPage: "createDoc",
|
|
21
|
-
updatePage: "updateDoc",
|
|
22
|
-
update_page: "updateDoc",
|
|
23
|
-
create_page: "createDoc",
|
|
24
|
-
fetchwebpage: "fetchWebpage",
|
|
25
|
-
fetch_webpage: "fetchWebpage",
|
|
26
|
-
"fetch-page": "fetchWebpage",
|
|
27
|
-
exasearch: "exa_search",
|
|
28
|
-
"exa-search": "exa_search",
|
|
29
|
-
exa_search: "exa_search",
|
|
30
|
-
firecrawlscrape: "firecrawl_scrape",
|
|
31
|
-
"firecrawl-scrape": "firecrawl_scrape",
|
|
32
|
-
firecrawl_scrape: "firecrawl_scrape",
|
|
33
|
-
firecrawlsearch: "firecrawl_search",
|
|
34
|
-
"firecrawl-search": "firecrawl_search",
|
|
35
|
-
firecrawl_search: "firecrawl_search",
|
|
36
|
-
readDoc: "readDoc",
|
|
37
|
-
readpage: "readDoc",
|
|
38
|
-
read_page: "readDoc",
|
|
39
|
-
read_doc: "readDoc",
|
|
40
|
-
createdoc: "createDoc",
|
|
41
|
-
updateDocTool: "updateDoc",
|
|
42
|
-
terminalCommand: "execShell",
|
|
43
|
-
terminal_command: "execShell",
|
|
44
|
-
runCommand: "execShell",
|
|
45
|
-
run_command: "execShell",
|
|
46
|
-
runInBash: "execShell",
|
|
47
|
-
run_in_bash: "execShell",
|
|
48
|
-
executeCommand: "execShell",
|
|
49
|
-
execute_command: "execShell",
|
|
50
|
-
// Codex CLI 风格工具名 → nolo 原生工具名
|
|
51
|
-
bash: "execShell",
|
|
52
|
-
shell: "execShell",
|
|
53
|
-
read: "readFile",
|
|
54
|
-
edit: "editFile",
|
|
55
|
-
write: "writeFile",
|
|
56
|
-
glob: "globFiles",
|
|
57
|
-
grep: "searchFiles",
|
|
58
|
-
// 联网搜索别名
|
|
59
|
-
web_search: "exa_search",
|
|
60
|
-
websearch: "exa_search",
|
|
61
|
-
search_web: "exa_search",
|
|
62
|
-
searchweb: "exa_search",
|
|
63
|
-
webfetch: "fetchWebpage",
|
|
64
|
-
web_fetch: "fetchWebpage",
|
|
65
|
-
fetchweb: "fetchWebpage",
|
|
66
|
-
fetch_web: "fetchWebpage",
|
|
67
|
-
// 模型偶尔会把 loadSkill 幻觉成 readSkill(参数风格 name= 一致),
|
|
68
|
-
// 规范化到 loadSkill,避免 localToolPolicy 把这种调用直接拦死。
|
|
69
|
-
readSkill: "loadSkill"
|
|
70
|
-
};
|
|
71
|
-
var normalizeToolName = (name) => name.replace(/[-_]/g, "").toLowerCase();
|
|
72
|
-
var canonicalizeToolName = (rawName) => {
|
|
73
|
-
const trimmedName = rawName.trim();
|
|
74
|
-
if (!trimmedName) return rawName;
|
|
75
|
-
if (LEGACY_TOOL_NAME_ALIASES[trimmedName]) {
|
|
76
|
-
return LEGACY_TOOL_NAME_ALIASES[trimmedName];
|
|
77
|
-
}
|
|
78
|
-
const normalizedRawName = normalizeToolName(trimmedName);
|
|
79
|
-
const matchedAlias = Object.entries(LEGACY_TOOL_NAME_ALIASES).find(
|
|
80
|
-
([alias]) => normalizeToolName(alias) === normalizedRawName
|
|
81
|
-
);
|
|
82
|
-
return matchedAlias?.[1] ?? trimmedName;
|
|
83
|
-
};
|
|
84
|
-
var canonicalizeToolNames = (toolNames) => Array.from(
|
|
85
|
-
new Set(
|
|
86
|
-
toolNames.filter((toolName) => typeof toolName === "string").map(canonicalizeToolName)
|
|
87
|
-
)
|
|
88
|
-
);
|
|
89
|
-
var prioritizeToolNames = (toolNames, preferredToolNames) => {
|
|
90
|
-
const canonicalTools = canonicalizeToolNames(toolNames);
|
|
91
|
-
const preferred = new Set(canonicalizeToolNames(preferredToolNames));
|
|
92
|
-
const prioritized = canonicalTools.filter((toolName) => preferred.has(toolName));
|
|
93
|
-
const remaining = canonicalTools.filter((toolName) => !preferred.has(toolName));
|
|
94
|
-
return [...prioritized, ...remaining];
|
|
95
|
-
};
|
|
96
|
-
|
|
97
18
|
// packages/agent-runtime/runtimeToolSurface.ts
|
|
98
19
|
var DEFAULT_PRIVATE_NOLO_WORKSPACE_TOOLS = [
|
|
99
20
|
"listDialogs",
|
|
@@ -892,9 +813,20 @@ function buildLoadSkillExecutor(args) {
|
|
|
892
813
|
metadata: { loadSkill: true, resolved: false }
|
|
893
814
|
};
|
|
894
815
|
}
|
|
895
|
-
const { resolveSkillByName } = await import("./skillDiscovery-
|
|
816
|
+
const { resolveSkillByName } = await import("./skillDiscovery-KJWT7JBU.js");
|
|
896
817
|
const resolved = resolveSkillByName(args.cwd, name);
|
|
897
818
|
if (!resolved) {
|
|
819
|
+
const { resolveCodingBuiltinSlug, buildCodingSkillContentBySlug } = await import("./codingSkills-36KN5NQT.js");
|
|
820
|
+
const builtinSlug = resolveCodingBuiltinSlug(name);
|
|
821
|
+
if (builtinSlug) {
|
|
822
|
+
const body = buildCodingSkillContentBySlug(builtinSlug);
|
|
823
|
+
return {
|
|
824
|
+
content: `Skill "${name}" loaded inline. Follow its instructions.
|
|
825
|
+
|
|
826
|
+
${body}`,
|
|
827
|
+
metadata: { loadSkill: true, resolved: true, name, requestedName: name, builtin: true }
|
|
828
|
+
};
|
|
829
|
+
}
|
|
898
830
|
return {
|
|
899
831
|
content: await formatUnknownSkillMessage(args.cwd, name),
|
|
900
832
|
metadata: { loadSkill: true, resolved: false, name, requestedName: name }
|
|
@@ -919,7 +851,7 @@ ${body}`,
|
|
|
919
851
|
};
|
|
920
852
|
}
|
|
921
853
|
async function formatUnknownSkillMessage(cwd, requestedName) {
|
|
922
|
-
const { discoverSkills } = await import("./skillDiscovery-
|
|
854
|
+
const { discoverSkills } = await import("./skillDiscovery-KJWT7JBU.js");
|
|
923
855
|
let available = [];
|
|
924
856
|
try {
|
|
925
857
|
available = discoverSkills(cwd).map((s) => s.name);
|
|
@@ -938,9 +870,6 @@ var nodeSpawnFallback = (options) => {
|
|
|
938
870
|
};
|
|
939
871
|
|
|
940
872
|
export {
|
|
941
|
-
canonicalizeToolName,
|
|
942
|
-
canonicalizeToolNames,
|
|
943
|
-
prioritizeToolNames,
|
|
944
873
|
resolveRuntimeToolSurfaceForAgent,
|
|
945
874
|
redactAgentRecordForWorkspaceTool,
|
|
946
875
|
resolveExecutableOnPath,
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// packages/core/chat/runOverlayMachine.ts
|
|
2
|
+
var initialRunOverlayState = {
|
|
3
|
+
runs: /* @__PURE__ */ new Map()
|
|
4
|
+
};
|
|
5
|
+
function reduceRunOverlay(state, event) {
|
|
6
|
+
switch (event.type) {
|
|
7
|
+
case "run-state-chg": {
|
|
8
|
+
const prev = state.runs.get(event.runId);
|
|
9
|
+
const now = Date.now();
|
|
10
|
+
const merged = prev ? { ...prev, ...event.info, runId: event.runId, updatedAt: now } : {
|
|
11
|
+
runId: event.runId,
|
|
12
|
+
name: event.info.name ?? "",
|
|
13
|
+
status: event.info.status ?? "running",
|
|
14
|
+
summary: event.info.summary,
|
|
15
|
+
batchId: event.info.batchId,
|
|
16
|
+
parentDialogId: event.info.parentDialogId,
|
|
17
|
+
errorMessage: event.info.errorMessage,
|
|
18
|
+
updatedAt: now
|
|
19
|
+
};
|
|
20
|
+
if (prev && shallowEqualRun(prev, merged)) {
|
|
21
|
+
return state;
|
|
22
|
+
}
|
|
23
|
+
const runs = new Map(state.runs);
|
|
24
|
+
runs.set(event.runId, merged);
|
|
25
|
+
return { runs };
|
|
26
|
+
}
|
|
27
|
+
case "run-removed": {
|
|
28
|
+
if (!state.runs.has(event.runId)) return state;
|
|
29
|
+
const runs = new Map(state.runs);
|
|
30
|
+
runs.delete(event.runId);
|
|
31
|
+
return { runs };
|
|
32
|
+
}
|
|
33
|
+
case "clear-all": {
|
|
34
|
+
if (state.runs.size === 0) return state;
|
|
35
|
+
return { runs: /* @__PURE__ */ new Map() };
|
|
36
|
+
}
|
|
37
|
+
default: {
|
|
38
|
+
const _exhaustive = event;
|
|
39
|
+
return state;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function shallowEqualRun(a, b) {
|
|
44
|
+
return a.runId === b.runId && a.name === b.name && a.status === b.status && a.summary === b.summary && a.batchId === b.batchId && a.parentDialogId === b.parentDialogId && a.errorMessage === b.errorMessage;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
initialRunOverlayState,
|
|
49
|
+
reduceRunOverlay
|
|
50
|
+
};
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MODEL_LOOKUP_MAP
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import {
|
|
5
|
-
ALL_MODELS
|
|
6
|
-
} from "./chunk-XBS2WYJ2.js";
|
|
3
|
+
} from "./chunk-HQPG2PIV.js";
|
|
7
4
|
import {
|
|
8
5
|
addContentAction
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ELT65PZW.js";
|
|
7
|
+
import {
|
|
8
|
+
ALL_MODELS
|
|
9
|
+
} from "./chunk-RK5NYQEL.js";
|
|
10
10
|
import {
|
|
11
11
|
upload
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XRZJGPFI.js";
|
|
13
|
+
import {
|
|
14
|
+
PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY,
|
|
15
|
+
PUBLIC_KIMI_K26_IMAGE_AGENT_KEY
|
|
16
|
+
} from "./chunk-3ND52WIL.js";
|
|
13
17
|
import {
|
|
14
18
|
getRuntimeServerContext
|
|
15
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-XMLRJUU5.js";
|
|
16
20
|
import {
|
|
17
21
|
API_ENDPOINTS
|
|
18
22
|
} from "./chunk-LCBAMY2M.js";
|
|
@@ -539,6 +543,50 @@ function planCompression(input) {
|
|
|
539
543
|
};
|
|
540
544
|
}
|
|
541
545
|
|
|
546
|
+
// packages/agent-runtime/autoExecutionProfiles.ts
|
|
547
|
+
var createProfile = (input) => ({
|
|
548
|
+
id: input.id,
|
|
549
|
+
tier: input.tier,
|
|
550
|
+
legacyAgentKey: input.legacyAgentKey,
|
|
551
|
+
key: input.legacyAgentKey,
|
|
552
|
+
name: input.name,
|
|
553
|
+
provider: "nolo",
|
|
554
|
+
model: input.model,
|
|
555
|
+
apiSource: "platform",
|
|
556
|
+
useServerProxy: true,
|
|
557
|
+
rawRecord: {
|
|
558
|
+
dbKey: input.legacyAgentKey,
|
|
559
|
+
isPublic: true,
|
|
560
|
+
provider: "nolo",
|
|
561
|
+
model: input.model,
|
|
562
|
+
apiSource: "platform",
|
|
563
|
+
useServerProxy: true
|
|
564
|
+
}
|
|
565
|
+
});
|
|
566
|
+
var FLASH_PROFILE = createProfile({
|
|
567
|
+
id: "builtin:auto:deepseek-v4-flash",
|
|
568
|
+
tier: "flash",
|
|
569
|
+
legacyAgentKey: PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY,
|
|
570
|
+
name: "DeepSeek V4 Flash",
|
|
571
|
+
model: "deepseek-v4-flash"
|
|
572
|
+
});
|
|
573
|
+
var IMAGE_PROFILE = createProfile({
|
|
574
|
+
id: "builtin:auto:kimi-k2.6",
|
|
575
|
+
tier: "image",
|
|
576
|
+
legacyAgentKey: PUBLIC_KIMI_K26_IMAGE_AGENT_KEY,
|
|
577
|
+
name: "Kimi K2.6",
|
|
578
|
+
model: "kimi-k2.6"
|
|
579
|
+
});
|
|
580
|
+
var AUTO_EXECUTION_PROFILES = {
|
|
581
|
+
flash: FLASH_PROFILE,
|
|
582
|
+
balanced: { ...FLASH_PROFILE, tier: "balanced" },
|
|
583
|
+
quality: { ...FLASH_PROFILE, tier: "quality" },
|
|
584
|
+
image: IMAGE_PROFILE
|
|
585
|
+
};
|
|
586
|
+
var DEFAULT_AUTO_EXECUTION_TIER = "flash";
|
|
587
|
+
var DEFAULT_AUTO_EXECUTION_PROFILE = AUTO_EXECUTION_PROFILES[DEFAULT_AUTO_EXECUTION_TIER];
|
|
588
|
+
var resolveAutoExecutionProfile = (tier) => AUTO_EXECUTION_PROFILES[tier ?? DEFAULT_AUTO_EXECUTION_TIER] ?? DEFAULT_AUTO_EXECUTION_PROFILE;
|
|
589
|
+
|
|
542
590
|
export {
|
|
543
591
|
planContextUsage,
|
|
544
592
|
estimateTokenCount,
|
|
@@ -548,5 +596,7 @@ export {
|
|
|
548
596
|
buildDatabaseFileContentUrl,
|
|
549
597
|
serializeMessageContent,
|
|
550
598
|
normalizeAssistantContentBuffer,
|
|
551
|
-
planCompression
|
|
599
|
+
planCompression,
|
|
600
|
+
DEFAULT_AUTO_EXECUTION_PROFILE,
|
|
601
|
+
resolveAutoExecutionProfile
|
|
552
602
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
patch,
|
|
3
3
|
read
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-XRZJGPFI.js";
|
|
5
5
|
import {
|
|
6
6
|
DEVICE_LOCAL_OWNER_ID,
|
|
7
7
|
isDeviceLocalSpaceBody,
|
|
8
8
|
selectIdentityUserId
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XMLRJUU5.js";
|
|
10
10
|
|
|
11
11
|
// packages/create/space/spaceKeys.ts
|
|
12
12
|
var SEPARATOR = "-";
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// packages/ai/tools/agent/agentRunDisplayHelpers.ts
|
|
2
|
+
function getAgentRunStatusIcon(status) {
|
|
3
|
+
switch (status) {
|
|
4
|
+
case "running":
|
|
5
|
+
case "pending":
|
|
6
|
+
return "\u23F3";
|
|
7
|
+
case "done":
|
|
8
|
+
return "\u2713";
|
|
9
|
+
case "failed":
|
|
10
|
+
case "timeout":
|
|
11
|
+
return "\u2717";
|
|
12
|
+
case "killed":
|
|
13
|
+
case "cancelled":
|
|
14
|
+
case "cancelling":
|
|
15
|
+
return "\u{1F6D1}";
|
|
16
|
+
case "orphaned":
|
|
17
|
+
return "\u{1F47B}";
|
|
18
|
+
case "not_found":
|
|
19
|
+
default:
|
|
20
|
+
return "?";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
var DEFAULT_LABELS = {
|
|
24
|
+
runStatus: "Run status",
|
|
25
|
+
runStarted: "Run started",
|
|
26
|
+
runStopped: "Run stopped",
|
|
27
|
+
runFinished: "Run finished",
|
|
28
|
+
logTail: "Log tail:",
|
|
29
|
+
runs: (count) => `Runs (${count})`
|
|
30
|
+
};
|
|
31
|
+
function resolveLabels(labels) {
|
|
32
|
+
return {
|
|
33
|
+
runStatus: labels?.runStatus ?? DEFAULT_LABELS.runStatus,
|
|
34
|
+
runStarted: labels?.runStarted ?? DEFAULT_LABELS.runStarted,
|
|
35
|
+
runStopped: labels?.runStopped ?? DEFAULT_LABELS.runStopped,
|
|
36
|
+
runFinished: labels?.runFinished ?? DEFAULT_LABELS.runFinished,
|
|
37
|
+
logTail: labels?.logTail ?? DEFAULT_LABELS.logTail,
|
|
38
|
+
runs: labels?.runs ?? DEFAULT_LABELS.runs
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function shortRunId(runId) {
|
|
42
|
+
const trimmed = typeof runId === "string" ? runId.trim() : "";
|
|
43
|
+
if (!trimmed) return "";
|
|
44
|
+
const segments = trimmed.split("-").filter(Boolean);
|
|
45
|
+
let pick = segments[segments.length - 1] ?? trimmed;
|
|
46
|
+
if (pick.length < 4 && segments.length >= 2) pick = segments.slice(-2).join("-");
|
|
47
|
+
if (!pick) pick = trimmed;
|
|
48
|
+
return pick.length > 8 ? pick.slice(-8) : pick;
|
|
49
|
+
}
|
|
50
|
+
function clipText(text, max) {
|
|
51
|
+
const collapsed = text.replace(/\s+/g, " ").trim();
|
|
52
|
+
return collapsed.length > max ? `${collapsed.slice(0, max - 1)}\u2026` : collapsed;
|
|
53
|
+
}
|
|
54
|
+
function formatDuration(ms) {
|
|
55
|
+
const totalSec = Math.max(0, Math.floor(ms / 1e3));
|
|
56
|
+
if (totalSec < 60) return `${totalSec}s`;
|
|
57
|
+
const totalMin = Math.floor(totalSec / 60);
|
|
58
|
+
if (totalMin < 60) return `${totalMin}m${String(totalSec % 60).padStart(2, "0")}s`;
|
|
59
|
+
return `${Math.floor(totalMin / 60)}h${String(totalMin % 60).padStart(2, "0")}m`;
|
|
60
|
+
}
|
|
61
|
+
function formatRunAge(timing, now = Date.now()) {
|
|
62
|
+
const startedAt = timing?.startedAt;
|
|
63
|
+
if (typeof startedAt !== "number" || !Number.isFinite(startedAt) || startedAt <= 0) {
|
|
64
|
+
return "";
|
|
65
|
+
}
|
|
66
|
+
const end = typeof timing?.finishedAt === "number" && Number.isFinite(timing.finishedAt) && timing.finishedAt > 0 ? timing.finishedAt : now;
|
|
67
|
+
return formatDuration(end - startedAt);
|
|
68
|
+
}
|
|
69
|
+
function formatIdentityRow(agentName, runId) {
|
|
70
|
+
const parts = [];
|
|
71
|
+
if (!isAgentNameFallback(agentName)) parts.push(agentName);
|
|
72
|
+
const short = shortRunId(runId);
|
|
73
|
+
if (short) parts.push(`#${short}`);
|
|
74
|
+
return parts.join(" ");
|
|
75
|
+
}
|
|
76
|
+
function isAgentNameFallback(agentName) {
|
|
77
|
+
const trimmed = typeof agentName === "string" ? agentName.trim() : "";
|
|
78
|
+
return !trimmed || trimmed === "agent";
|
|
79
|
+
}
|
|
80
|
+
function resolveRunLabel(run) {
|
|
81
|
+
for (const candidate of [run.agentName, run.name, run.agentKey, run.runId]) {
|
|
82
|
+
if (typeof candidate === "string" && !isAgentNameFallback(candidate)) {
|
|
83
|
+
return candidate.trim();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return "agent";
|
|
87
|
+
}
|
|
88
|
+
function formatStartRunCard(agentName, status = "running", opts) {
|
|
89
|
+
const L = resolveLabels(opts?.labels);
|
|
90
|
+
const icon = getAgentRunStatusIcon(status);
|
|
91
|
+
const lines = [L.runStarted];
|
|
92
|
+
const identity = formatIdentityRow(agentName, opts?.runId);
|
|
93
|
+
if (identity) {
|
|
94
|
+
lines.push(` agent ${identity}`);
|
|
95
|
+
}
|
|
96
|
+
lines.push(` status ${icon} ${status}`);
|
|
97
|
+
const task = opts?.task?.trim();
|
|
98
|
+
if (task) {
|
|
99
|
+
lines.push(` task ${clipText(task, TASK_PREVIEW_MAX)}`);
|
|
100
|
+
}
|
|
101
|
+
return lines.join("\n");
|
|
102
|
+
}
|
|
103
|
+
var TASK_PREVIEW_MAX = 72;
|
|
104
|
+
var NOTE_PREVIEW_MAX = 72;
|
|
105
|
+
function formatProgressRow(toolCallCount, lastToolNames) {
|
|
106
|
+
const parts = [];
|
|
107
|
+
if (typeof toolCallCount === "number" && Number.isFinite(toolCallCount)) {
|
|
108
|
+
parts.push(`${toolCallCount} tools`);
|
|
109
|
+
}
|
|
110
|
+
if (lastToolNames && lastToolNames.length > 0) {
|
|
111
|
+
parts.push(lastToolNames.join(", "));
|
|
112
|
+
}
|
|
113
|
+
return parts.join(" \xB7 ");
|
|
114
|
+
}
|
|
115
|
+
function formatStatusRunCard(agentName, status = "running", opts) {
|
|
116
|
+
const L = resolveLabels(opts?.labels);
|
|
117
|
+
const icon = getAgentRunStatusIcon(status);
|
|
118
|
+
const age = formatRunAge(opts?.timing, opts?.now);
|
|
119
|
+
const lines = [L.runStatus, ` ${icon} ${status}${age ? ` ${age}` : ""}`];
|
|
120
|
+
const identity = formatIdentityRow(agentName, opts?.runId);
|
|
121
|
+
if (identity) {
|
|
122
|
+
lines.push(` agent ${identity}`);
|
|
123
|
+
}
|
|
124
|
+
const progress = formatProgressRow(opts?.toolCallCount, opts?.lastToolNames);
|
|
125
|
+
if (progress) {
|
|
126
|
+
lines.push(` tools ${progress}`);
|
|
127
|
+
}
|
|
128
|
+
const note = opts?.lastAssistantText?.trim();
|
|
129
|
+
if (note) {
|
|
130
|
+
lines.push(` note ${clipText(note, NOTE_PREVIEW_MAX)}`);
|
|
131
|
+
}
|
|
132
|
+
if (opts?.errorMessage?.trim()) {
|
|
133
|
+
lines.push(` error ${opts.errorMessage.trim()}`);
|
|
134
|
+
}
|
|
135
|
+
if (shouldShowLogTail(status, opts?.includeLogTail, opts?.logLines)) {
|
|
136
|
+
lines.push("", L.logTail, ...opts.logLines.map((l) => ` ${l}`));
|
|
137
|
+
}
|
|
138
|
+
return lines.join("\n");
|
|
139
|
+
}
|
|
140
|
+
function runShowsLogTail(status) {
|
|
141
|
+
return status === "failed" || status === "timeout";
|
|
142
|
+
}
|
|
143
|
+
function shouldShowLogTail(status, includeLogTail, logLines) {
|
|
144
|
+
if (includeLogTail === false) return false;
|
|
145
|
+
if (!logLines || logLines.length === 0) return false;
|
|
146
|
+
return runShowsLogTail(status);
|
|
147
|
+
}
|
|
148
|
+
function formatFinishedRunCard(agentName, status, opts) {
|
|
149
|
+
const L = resolveLabels(opts?.labels);
|
|
150
|
+
const icon = getAgentRunStatusIcon(status);
|
|
151
|
+
const age = formatRunAge(opts?.timing, opts?.now);
|
|
152
|
+
const summary = [status, age, formatProgressRow(opts?.toolCallCount, opts?.lastToolNames)].filter(Boolean).join(" \xB7 ");
|
|
153
|
+
const lines = [L.runFinished, ` ${icon} ${summary}`];
|
|
154
|
+
const identity = formatIdentityRow(agentName, opts?.runId);
|
|
155
|
+
if (identity) {
|
|
156
|
+
lines.push(` agent ${identity}`);
|
|
157
|
+
}
|
|
158
|
+
const note = opts?.lastAssistantText?.trim();
|
|
159
|
+
if (note) {
|
|
160
|
+
lines.push(` note ${clipText(note, NOTE_PREVIEW_MAX)}`);
|
|
161
|
+
}
|
|
162
|
+
if (opts?.errorMessage?.trim()) {
|
|
163
|
+
lines.push(` error ${opts.errorMessage.trim()}`);
|
|
164
|
+
}
|
|
165
|
+
if (shouldShowLogTail(status, opts?.includeLogTail, opts?.logLines)) {
|
|
166
|
+
lines.push("", L.logTail, ...opts.logLines.map((l) => ` ${l}`));
|
|
167
|
+
}
|
|
168
|
+
return lines.join("\n");
|
|
169
|
+
}
|
|
170
|
+
function formatStopRunCard(status = "killed", labels) {
|
|
171
|
+
const L = resolveLabels(labels);
|
|
172
|
+
const icon = getAgentRunStatusIcon(status);
|
|
173
|
+
return `${L.runStopped}
|
|
174
|
+
${icon} ${status}`;
|
|
175
|
+
}
|
|
176
|
+
function formatListRunsCard(runs, labels) {
|
|
177
|
+
const L = resolveLabels(labels);
|
|
178
|
+
const lines = [L.runs(runs.length)];
|
|
179
|
+
for (const run of runs) {
|
|
180
|
+
const status = run.status ?? "\u2014";
|
|
181
|
+
const icon = getAgentRunStatusIcon(status);
|
|
182
|
+
lines.push(` ${icon} ${resolveRunLabel(run)}`);
|
|
183
|
+
}
|
|
184
|
+
return lines.join("\n");
|
|
185
|
+
}
|
|
186
|
+
function formatNotFoundRunCard(labels) {
|
|
187
|
+
const L = resolveLabels(labels);
|
|
188
|
+
return `${L.runStatus}
|
|
189
|
+
? not_found`;
|
|
190
|
+
}
|
|
191
|
+
var AGENT_RUN_TERMINAL_STATUSES = /* @__PURE__ */ new Set([
|
|
192
|
+
"done",
|
|
193
|
+
"failed",
|
|
194
|
+
"timeout",
|
|
195
|
+
"killed",
|
|
196
|
+
"cancelled",
|
|
197
|
+
// orphaned: pid gone but the run record was still "running" — the process
|
|
198
|
+
// died (killed/OOM/crashed) before writing its own terminal status. Treated
|
|
199
|
+
// as terminal by all display/filter/GC consumers.
|
|
200
|
+
"orphaned"
|
|
201
|
+
]);
|
|
202
|
+
function isAgentRunTerminalStatus(status) {
|
|
203
|
+
return typeof status === "string" && AGENT_RUN_TERMINAL_STATUSES.has(status);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export {
|
|
207
|
+
getAgentRunStatusIcon,
|
|
208
|
+
shortRunId,
|
|
209
|
+
formatRunAge,
|
|
210
|
+
isAgentNameFallback,
|
|
211
|
+
resolveRunLabel,
|
|
212
|
+
formatStartRunCard,
|
|
213
|
+
TASK_PREVIEW_MAX,
|
|
214
|
+
formatStatusRunCard,
|
|
215
|
+
runShowsLogTail,
|
|
216
|
+
formatFinishedRunCard,
|
|
217
|
+
formatStopRunCard,
|
|
218
|
+
formatListRunsCard,
|
|
219
|
+
formatNotFoundRunCard,
|
|
220
|
+
isAgentRunTerminalStatus
|
|
221
|
+
};
|