volute 0.33.0 → 0.34.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/dist/{accept-D5VBM7JW.js → accept-TW6V4WI4.js} +6 -6
- package/dist/{activity-events-XJO3P4RR.js → activity-events-BN7V6KCC.js} +4 -4
- package/dist/{ai-service-SBY2WG7O.js → ai-service-PSILB5WD.js} +5 -5
- package/dist/{api-client-YPKOZP2O.js → api-client-XUXOB7LI.js} +1 -1
- package/dist/api.d.ts +426 -3
- package/dist/{archive-INXYFVCW.js → archive-C2VEMQOR.js} +4 -4
- package/dist/{auth-GKCDSO4T.js → auth-ZFZXJZDQ.js} +5 -5
- package/dist/{bridge-TXWWPPOJ.js → bridge-O753D5F4.js} +6 -6
- package/dist/{chat-U5ZOME3O.js → chat-BHYX7DJ4.js} +9 -9
- package/dist/{chunk-M7UL5S3Q.js → chunk-2IOP6PHB.js} +1 -1
- package/dist/{chunk-NPKSDYA2.js → chunk-47XDEWWV.js} +5 -5
- package/dist/{chunk-RSX4OPZY.js → chunk-47ZPNLF4.js} +7 -7
- package/dist/{chunk-RPZZSXV3.js → chunk-4JSR7YO7.js} +20 -1
- package/dist/{chunk-N432I7QH.js → chunk-6OWJXUAR.js} +1 -1
- package/dist/{chunk-I5KY25PQ.js → chunk-6WAWMWR5.js} +1 -1
- package/dist/{chunk-NNB4WIG7.js → chunk-7F2SW2KD.js} +2 -2
- package/dist/chunk-7KJOFUNN.js +22 -0
- package/dist/{chunk-7J3HEVR7.js → chunk-B2BVAIZ4.js} +15 -9
- package/dist/{chunk-VH33ZWMW.js → chunk-BDK73LK6.js} +1 -1
- package/dist/{chunk-QTUVYI7W.js → chunk-BFWHBQK4.js} +1 -1
- package/dist/{chunk-JYVGHWEJ.js → chunk-BM474GX6.js} +3 -3
- package/dist/{chunk-LOEJ4HPQ.js → chunk-BTWAGDV5.js} +1 -1
- package/dist/{chunk-A2A4KLFE.js → chunk-CVL5IGIR.js} +596 -40
- package/dist/{chunk-RVGLDGMI.js → chunk-E5C7OWZ2.js} +20 -22
- package/dist/chunk-FYCALD4Q.js +23 -0
- package/dist/{chunk-SKLSMHXO.js → chunk-IS7WJ56Q.js} +1 -1
- package/dist/{chunk-2NGTS5UU.js → chunk-M3K5AARV.js} +1 -1
- package/dist/{chunk-ALEF47VT.js → chunk-MLOQKQNB.js} +1 -1
- package/dist/{chunk-C7I35G4R.js → chunk-N3DNFPVA.js} +41 -5
- package/dist/{chunk-LRCG2JLP.js → chunk-N7BLAHNE.js} +5 -1
- package/dist/{chunk-UKVWJRKN.js → chunk-PLDWHR4D.js} +1 -1
- package/dist/{chunk-3Z2DPESO.js → chunk-TAHX36HZ.js} +126 -81
- package/dist/{chunk-KIEPMIM5.js → chunk-U5BTYSAL.js} +1 -1
- package/dist/{chunk-GY5HBI7A.js → chunk-V45JXOWY.js} +2 -2
- package/dist/{chunk-JUKK7FPS.js → chunk-V6ZCNULL.js} +2 -2
- package/dist/{chunk-KVK2DLWI.js → chunk-XWXBJQBE.js} +2 -2
- package/dist/cli.js +23 -23
- package/dist/{clock-BVH3V6E3.js → clock-3X4DSC2N.js} +40 -25
- package/dist/{cloud-sync-4NWLMFVH.js → cloud-sync-TG3TIX5H.js} +21 -21
- package/dist/{config-H2H4UIF7.js → config-OROA5DUA.js} +4 -4
- package/dist/connectors/discord-bridge.js +1 -1
- package/dist/connectors/slack-bridge.js +1 -1
- package/dist/connectors/telegram-bridge.js +1 -1
- package/dist/{conversations-AWI5SZW2.js → conversations-HL2JP5GI.js} +5 -5
- package/dist/{create-YWD2TIP4.js → create-3SEKKI6P.js} +6 -6
- package/dist/{create-2FK7Z46Y.js → create-UOSOQ2HN.js} +4 -4
- package/dist/daemon-client-WOAQXXBM.js +12 -0
- package/dist/{daemon-restart-GOBUKLX7.js → daemon-restart-5ABHNXJZ.js} +9 -9
- package/dist/daemon.js +1747 -688
- package/dist/{db-RA45JBFG.js → db-PLEDCBHZ.js} +1 -1
- package/dist/db-RYX3SS2W.js +9 -0
- package/dist/{delete-QTGWEDBI.js → delete-KYOVWR23.js} +3 -3
- package/dist/delivery-manager-2BR5NZKF.js +32 -0
- package/dist/{delivery-router-FL45JL7N.js → delivery-router-D5ELDMS2.js} +4 -4
- package/dist/down-QVFN4UPK.js +15 -0
- package/dist/{env-JCOF2222.js → env-R34DT7XL.js} +12 -8
- package/dist/exec-DVLXKRIO.js +17 -0
- package/dist/{export-SUYRLI5Q.js → export-6ZXAXATG.js} +6 -6
- package/dist/extension-PM42QCID.js +97 -0
- package/dist/extensions-BBGVL5JC.js +38 -0
- package/dist/{files-65PMW5IK.js → files-VQV2VZQO.js} +7 -7
- package/dist/{import-DDUFE7AY.js → import-MK2I2T6F.js} +5 -5
- package/dist/{isolation-LLAYQYDY.js → isolation-62MKDZN3.js} +4 -4
- package/dist/{join-I5QEE3LG.js → join-DGYHTJUH.js} +3 -3
- package/dist/lib-DYEZMGW7.js +6588 -0
- package/dist/{list-JQ463EDA.js → list-C644WTHV.js} +18 -10
- package/dist/{login-D7ETSU4R.js → login-IIGEQPHL.js} +6 -6
- package/dist/{login-RIJF2F4G.js → login-KZQLMAWE.js} +4 -4
- package/dist/{logout-5MLHZALK.js → logout-AGTZVRGP.js} +4 -4
- package/dist/{logout-UZJRGY4Z.js → logout-KD6GXIJJ.js} +4 -4
- package/dist/message-delivery-V3R6NXJP.js +42 -0
- package/dist/{mind-IOJFLEM5.js → mind-BI4EPBVZ.js} +19 -19
- package/dist/{mind-activity-tracker-F6O4Q2SL.js → mind-activity-tracker-2ACNHA7B.js} +5 -5
- package/dist/mind-history-WOYFLQAI.js +264 -0
- package/dist/{mind-list-WUPMQDYQ.js → mind-list-6VPM7GUQ.js} +4 -4
- package/dist/mind-manager-MWW3BTS4.js +32 -0
- package/dist/{mind-profile-P67FEHOY.js → mind-profile-WPG42U5Y.js} +2 -2
- package/dist/mind-service-VIKZJK2M.js +38 -0
- package/dist/{mind-sleep-WW2IX7JT.js → mind-sleep-XDISJY74.js} +6 -6
- package/dist/{mind-status-L3EFFRPR.js → mind-status-7FTZWPZF.js} +4 -4
- package/dist/{mind-wake-VSSGW465.js → mind-wake-KIIKEI3A.js} +6 -6
- package/dist/{package-U3VFO273.js → package-V2WHWVG6.js} +8 -5
- package/dist/{read-EBY56C33.js → read-H5C26YO7.js} +20 -10
- package/dist/{read-stdin-HQJ7774D.js → read-stdin-PIRM6A2Y.js} +1 -1
- package/dist/{register-HD74C4TT.js → register-J27WP33N.js} +6 -6
- package/dist/{registry-PJ4S5PHQ.js → registry-UYV5S6QT.js} +3 -3
- package/dist/{reject-UJKFBHRO.js → reject-OEANJYIA.js} +6 -6
- package/dist/{restart-3UCMRUVC.js → restart-V5EGYBJG.js} +4 -4
- package/dist/{sandbox-GJOK4QLQ.js → sandbox-SI5HMBP3.js} +5 -5
- package/dist/scheduler-AGG3L2FO.js +32 -0
- package/dist/{schema-PA3M5ZKH.js → schema-ETMABTW4.js} +4 -2
- package/dist/{seed-QDYVLG74.js → seed-WNGI6PNW.js} +2 -2
- package/dist/{seed-check-S2IX25RL.js → seed-check-PXTH7YXS.js} +2 -2
- package/dist/{seed-cmd-DKOUFEAU.js → seed-cmd-VENFTGS3.js} +4 -4
- package/dist/{seed-create-4XBBOLRH.js → seed-create-663ALOKH.js} +6 -6
- package/dist/{seed-sprout-GQEIIQRT.js → seed-sprout-EH3AGKAI.js} +12 -12
- package/dist/{send-QIV2INHB.js → send-7FUUUZZH.js} +23 -10
- package/dist/{setup-TISPCO22.js → setup-GGMKENLN.js} +4 -4
- package/dist/{setup-XMCBE3LF.js → setup-Z3DEVWV7.js} +11 -11
- package/dist/{skill-PSQGRRJX.js → skill-DKNYJS4P.js} +14 -10
- package/dist/skills/plan-coordinator/SKILL.md +60 -0
- package/dist/skills/volute-mind/SKILL.md +7 -221
- package/dist/skills/volute-mind/references/extensions.md +37 -0
- package/dist/skills/volute-mind/references/integrations.md +48 -0
- package/dist/skills/volute-mind/references/routing.md +86 -0
- package/dist/skills/volute-mind/references/sleep.md +33 -0
- package/dist/skills/volute-mind/references/variants.md +31 -0
- package/dist/{skills-7FV7EJTE.js → skills-Q6VZ2UGD.js} +11 -7
- package/dist/sleep-manager-BJK2ROPX.js +36 -0
- package/dist/spirit-4JP4TY4C.js +23 -0
- package/dist/{split-STOROBYJ.js → split-3YPMS2CL.js} +3 -3
- package/dist/{sprout-WKLZXUIQ.js → sprout-E3HJIV2Z.js} +2 -2
- package/dist/{start-K2NCUUCG.js → start-W3TPKX4D.js} +4 -4
- package/dist/{status-3JBTFSMI.js → status-4OVFXFEJ.js} +7 -7
- package/dist/{stop-H26JZDXF.js → stop-GTT6YWYO.js} +4 -4
- package/dist/system-channel-DXD2JBOU.js +36 -0
- package/dist/system-chat-TYLOL7SX.js +36 -0
- package/dist/{systems-XRI52VCH.js → systems-AYLO727G.js} +7 -7
- package/dist/{tailscale-XHQBZROW.js → tailscale-ZEUK7GKZ.js} +3 -3
- package/dist/{template-hash-A6VVKOXJ.js → template-hash-EJRTKE36.js} +1 -1
- package/dist/up-PA7F2CXE.js +18 -0
- package/dist/{update-UD543CXX.js → update-HG4LCUSG.js} +7 -7
- package/dist/{update-check-ZD6OOIYQ.js → update-check-X3YG4WVP.js} +4 -4
- package/dist/{upgrade-O4Q7WJM3.js → upgrade-YGNIDICG.js} +3 -3
- package/dist/{variant-7TGZHOU3.js → variant-MZUMRTQO.js} +1 -1
- package/dist/{version-notify-NBI2MTJO.js → version-notify-YCH4UVQ2.js} +19 -19
- package/dist/{volute-config-HD7WWUQC.js → volute-config-WBKYJGYQ.js} +1 -1
- package/dist/web-assets/assets/index-DiiwC-CZ.css +1 -0
- package/dist/web-assets/assets/index-d6y5b9Ij.js +75 -0
- package/dist/web-assets/ext-theme.css +48 -9
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0005_meta_summaries.sql +15 -0
- package/drizzle/meta/0005_snapshot.json +7 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +7 -4
- package/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +1 -0
- package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +61 -0
- package/packages/extensions/plan/dist/ui/index.html +14 -0
- package/packages/extensions/plan/skills/plan/SKILL.md +43 -0
- package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +37 -0
- package/templates/_base/home/VOLUTE.md +12 -19
- package/templates/_base/src/lib/context-breakdown.ts +450 -0
- package/templates/_base/src/lib/format-prefix.ts +17 -0
- package/templates/_base/src/lib/hook-loader.ts +8 -2
- package/templates/_base/src/lib/router.ts +75 -33
- package/templates/_base/src/lib/routing.ts +4 -1
- package/templates/_base/src/lib/startup.ts +16 -8
- package/templates/_base/src/lib/types.ts +2 -1
- package/templates/_base/src/lib/volute-server.ts +69 -8
- package/templates/claude/.init/CLAUDE.md +4 -10
- package/templates/claude/package.json.tmpl +1 -0
- package/templates/claude/src/agent.ts +100 -32
- package/templates/claude/src/lib/hooks/reply-instructions.ts +27 -7
- package/templates/claude/src/lib/stream-consumer.ts +2 -2
- package/templates/claude/src/server.ts +1 -0
- package/templates/codex/package.json.tmpl +1 -0
- package/templates/codex/src/agent.ts +80 -8
- package/templates/codex/src/server.ts +1 -4
- package/templates/pi/package.json.tmpl +1 -0
- package/templates/pi/src/agent.ts +115 -36
- package/templates/pi/src/lib/event-handler.ts +22 -7
- package/templates/pi/src/lib/reply-instructions-extension.ts +23 -4
- package/templates/pi/src/lib/subagents.ts +20 -17
- package/templates/pi/src/server.ts +2 -5
- package/dist/chunk-K3NQKI34.js +0 -10
- package/dist/daemon-client-6QXHZ7US.js +0 -12
- package/dist/db-F34YLV7D.js +0 -9
- package/dist/delivery-manager-PFAKEJTC.js +0 -32
- package/dist/down-FWWTEKXM.js +0 -15
- package/dist/extension-OBTGKQQD.js +0 -175
- package/dist/extensions-KYNTVTMO.js +0 -30
- package/dist/history-DKCDI3JO.js +0 -128
- package/dist/message-delivery-DFF5SJRM.js +0 -42
- package/dist/mind-manager-NBJF5D26.js +0 -32
- package/dist/mind-service-2MQ6UK5N.js +0 -38
- package/dist/scheduler-ZZ7XGQG6.js +0 -32
- package/dist/sleep-manager-JTXSN7NV.js +0 -36
- package/dist/spirit-VRONKFMF.js +0 -23
- package/dist/system-chat-JAPOJ3KE.js +0 -36
- package/dist/up-M5AS6SBV.js +0 -18
- package/dist/web-assets/assets/index-CWJrVveV.css +0 -1
- package/dist/web-assets/assets/index-DJt14FRI.js +0 -75
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
exec
|
|
4
|
-
} from "./chunk-KIEPMIM5.js";
|
|
5
|
-
import "./chunk-VH33ZWMW.js";
|
|
6
|
-
import {
|
|
7
|
-
daemonFetch
|
|
8
|
-
} from "./chunk-UKVWJRKN.js";
|
|
9
|
-
import "./chunk-LRCG2JLP.js";
|
|
10
|
-
import "./chunk-RPZZSXV3.js";
|
|
11
|
-
import "./chunk-K3NQKI34.js";
|
|
12
|
-
|
|
13
|
-
// src/commands/extension.ts
|
|
14
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "fs";
|
|
15
|
-
import { resolve } from "path";
|
|
16
|
-
function extensionsNpmDir() {
|
|
17
|
-
const home = process.env.VOLUTE_HOME ?? resolve(process.env.HOME ?? "", ".volute");
|
|
18
|
-
return resolve(home, "extensions", "_npm");
|
|
19
|
-
}
|
|
20
|
-
function ensureExtensionsNpmDir() {
|
|
21
|
-
const dir = extensionsNpmDir();
|
|
22
|
-
mkdirSync(dir, { recursive: true });
|
|
23
|
-
const pkgPath = resolve(dir, "package.json");
|
|
24
|
-
if (!existsSync(pkgPath)) {
|
|
25
|
-
writeFileSync(pkgPath, '{"private":true,"dependencies":{}}\n');
|
|
26
|
-
}
|
|
27
|
-
return dir;
|
|
28
|
-
}
|
|
29
|
-
async function run(args) {
|
|
30
|
-
const subcommand = args[0];
|
|
31
|
-
switch (subcommand) {
|
|
32
|
-
case "list":
|
|
33
|
-
await listExtensions();
|
|
34
|
-
break;
|
|
35
|
-
case "install":
|
|
36
|
-
await installExtension(args.slice(1));
|
|
37
|
-
break;
|
|
38
|
-
case "uninstall":
|
|
39
|
-
await uninstallExtension(args.slice(1));
|
|
40
|
-
break;
|
|
41
|
-
case "--help":
|
|
42
|
-
case "-h":
|
|
43
|
-
case void 0:
|
|
44
|
-
printUsage();
|
|
45
|
-
break;
|
|
46
|
-
default:
|
|
47
|
-
console.error(`Unknown subcommand: ${subcommand}`);
|
|
48
|
-
printUsage();
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function printUsage() {
|
|
53
|
-
console.log(`Usage:
|
|
54
|
-
volute extension list List installed extensions
|
|
55
|
-
volute extension install <package> Install a third-party extension
|
|
56
|
-
volute extension uninstall <package> Uninstall a third-party extension`);
|
|
57
|
-
}
|
|
58
|
-
async function listExtensions() {
|
|
59
|
-
const res = await daemonFetch("/api/extensions");
|
|
60
|
-
if (!res.ok) {
|
|
61
|
-
const body = await res.json().catch(() => ({ error: "Unknown error" }));
|
|
62
|
-
console.error(`Error: ${body.error}`);
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
const extensions = await res.json();
|
|
66
|
-
if (extensions.length === 0) {
|
|
67
|
-
console.log("No extensions installed.");
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
console.log("Extensions:\n");
|
|
71
|
-
for (const ext of extensions) {
|
|
72
|
-
console.log(` ${ext.id} \u2014 ${ext.name} v${ext.version}`);
|
|
73
|
-
if (ext.description) console.log(` ${ext.description}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function extensionsConfigPath() {
|
|
77
|
-
const home = process.env.VOLUTE_HOME ?? resolve(process.env.HOME ?? "", ".volute");
|
|
78
|
-
return resolve(home, "system", "extensions.json");
|
|
79
|
-
}
|
|
80
|
-
function readConfig() {
|
|
81
|
-
const configPath = extensionsConfigPath();
|
|
82
|
-
if (!existsSync(configPath)) return [];
|
|
83
|
-
try {
|
|
84
|
-
const data = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
85
|
-
return Array.isArray(data) ? data : [];
|
|
86
|
-
} catch (err) {
|
|
87
|
-
console.error(
|
|
88
|
-
`Warning: failed to read extensions config at ${configPath}: ${err.message}`
|
|
89
|
-
);
|
|
90
|
-
return [];
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
function writeConfig(packages) {
|
|
94
|
-
const configPath = extensionsConfigPath();
|
|
95
|
-
mkdirSync(resolve(configPath, ".."), { recursive: true });
|
|
96
|
-
writeFileSync(configPath, `${JSON.stringify(packages, null, 2)}
|
|
97
|
-
`);
|
|
98
|
-
}
|
|
99
|
-
async function installExtension(args) {
|
|
100
|
-
const pkg = args[0];
|
|
101
|
-
if (!pkg) {
|
|
102
|
-
console.error("Usage: volute extension install <package>");
|
|
103
|
-
process.exit(1);
|
|
104
|
-
}
|
|
105
|
-
const packages = readConfig();
|
|
106
|
-
if (packages.includes(pkg)) {
|
|
107
|
-
console.log(`Extension "${pkg}" is already installed.`);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
const dir = ensureExtensionsNpmDir();
|
|
111
|
-
console.log(`Installing "${pkg}"...`);
|
|
112
|
-
try {
|
|
113
|
-
await exec("npm", ["install", pkg], { cwd: dir });
|
|
114
|
-
} catch (err) {
|
|
115
|
-
console.error(`Failed to install "${pkg}": ${err.message}`);
|
|
116
|
-
process.exit(1);
|
|
117
|
-
}
|
|
118
|
-
packages.push(pkg);
|
|
119
|
-
writeConfig(packages);
|
|
120
|
-
console.log(`Installed "${pkg}".`);
|
|
121
|
-
console.log("Restart the daemon (`volute restart`) to load the extension.");
|
|
122
|
-
}
|
|
123
|
-
async function uninstallExtension(args) {
|
|
124
|
-
const pkg = args[0];
|
|
125
|
-
if (!pkg) {
|
|
126
|
-
console.error("Usage: volute extension uninstall <package>");
|
|
127
|
-
process.exit(1);
|
|
128
|
-
}
|
|
129
|
-
const packages = readConfig();
|
|
130
|
-
const idx = packages.indexOf(pkg);
|
|
131
|
-
if (idx === -1) {
|
|
132
|
-
console.error(`Extension "${pkg}" is not installed.`);
|
|
133
|
-
process.exit(1);
|
|
134
|
-
}
|
|
135
|
-
await cleanupExtensionSkills(pkg);
|
|
136
|
-
packages.splice(idx, 1);
|
|
137
|
-
writeConfig(packages);
|
|
138
|
-
try {
|
|
139
|
-
await exec("npm", ["uninstall", pkg], { cwd: extensionsNpmDir() });
|
|
140
|
-
} catch (err) {
|
|
141
|
-
console.warn(
|
|
142
|
-
` Warning: npm uninstall failed (package may have been manually removed): ${err.message}`
|
|
143
|
-
);
|
|
144
|
-
}
|
|
145
|
-
console.log(`Removed "${pkg}".`);
|
|
146
|
-
console.log("Restart the daemon (`volute restart`) to unload the extension.");
|
|
147
|
-
}
|
|
148
|
-
async function cleanupExtensionSkills(pkg) {
|
|
149
|
-
try {
|
|
150
|
-
const pkgDir = resolve(extensionsNpmDir(), "node_modules", pkg);
|
|
151
|
-
if (!existsSync(pkgDir)) return;
|
|
152
|
-
const { createRequire } = await import("module");
|
|
153
|
-
const require2 = createRequire(resolve(extensionsNpmDir(), "noop.js"));
|
|
154
|
-
const mod = require2(pkg);
|
|
155
|
-
const manifest = mod.default ?? mod.extension ?? mod;
|
|
156
|
-
if (!manifest?.skillsDir || !existsSync(manifest.skillsDir)) return;
|
|
157
|
-
const skillDirs = readdirSync(manifest.skillsDir, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => d.name);
|
|
158
|
-
for (const skillId of skillDirs) {
|
|
159
|
-
await daemonFetch(`/api/skills/defaults/list/${encodeURIComponent(skillId)}`, {
|
|
160
|
-
method: "DELETE"
|
|
161
|
-
}).catch(() => {
|
|
162
|
-
});
|
|
163
|
-
await daemonFetch(`/api/skills/${encodeURIComponent(skillId)}`, {
|
|
164
|
-
method: "DELETE"
|
|
165
|
-
}).catch(() => {
|
|
166
|
-
});
|
|
167
|
-
console.log(` Removed skill: ${skillId}`);
|
|
168
|
-
}
|
|
169
|
-
} catch (err) {
|
|
170
|
-
console.warn(` Warning: could not clean up skills for "${pkg}": ${err.message}`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
export {
|
|
174
|
-
run
|
|
175
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
getExtensionStandardSkills,
|
|
4
|
-
getLoadedExtensions,
|
|
5
|
-
loadAllExtensions,
|
|
6
|
-
notifyExtensionsDaemonStart,
|
|
7
|
-
notifyExtensionsDaemonStop,
|
|
8
|
-
notifyExtensionsMindStart,
|
|
9
|
-
notifyExtensionsMindStop
|
|
10
|
-
} from "./chunk-A2A4KLFE.js";
|
|
11
|
-
import "./chunk-PB65JZK2.js";
|
|
12
|
-
import "./chunk-JYVGHWEJ.js";
|
|
13
|
-
import "./chunk-KVK2DLWI.js";
|
|
14
|
-
import "./chunk-C7I35G4R.js";
|
|
15
|
-
import "./chunk-YUIHSKR6.js";
|
|
16
|
-
import "./chunk-KIEPMIM5.js";
|
|
17
|
-
import "./chunk-VH33ZWMW.js";
|
|
18
|
-
import "./chunk-N432I7QH.js";
|
|
19
|
-
import "./chunk-LRCG2JLP.js";
|
|
20
|
-
import "./chunk-RPZZSXV3.js";
|
|
21
|
-
import "./chunk-K3NQKI34.js";
|
|
22
|
-
export {
|
|
23
|
-
getExtensionStandardSkills,
|
|
24
|
-
getLoadedExtensions,
|
|
25
|
-
loadAllExtensions,
|
|
26
|
-
notifyExtensionsDaemonStart,
|
|
27
|
-
notifyExtensionsDaemonStop,
|
|
28
|
-
notifyExtensionsMindStart,
|
|
29
|
-
notifyExtensionsMindStop
|
|
30
|
-
};
|
package/dist/history-DKCDI3JO.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
resolveMindName
|
|
4
|
-
} from "./chunk-NAOW2CLO.js";
|
|
5
|
-
import {
|
|
6
|
-
getClient,
|
|
7
|
-
urlOf
|
|
8
|
-
} from "./chunk-4RQBJWQX.js";
|
|
9
|
-
import {
|
|
10
|
-
daemonFetch
|
|
11
|
-
} from "./chunk-UKVWJRKN.js";
|
|
12
|
-
import {
|
|
13
|
-
parseArgs
|
|
14
|
-
} from "./chunk-D424ZQGI.js";
|
|
15
|
-
import "./chunk-LRCG2JLP.js";
|
|
16
|
-
import "./chunk-RPZZSXV3.js";
|
|
17
|
-
import "./chunk-K3NQKI34.js";
|
|
18
|
-
|
|
19
|
-
// src/commands/history.ts
|
|
20
|
-
function normalizeTimestamp(dateStr) {
|
|
21
|
-
return dateStr.endsWith("Z") ? dateStr : `${dateStr}Z`;
|
|
22
|
-
}
|
|
23
|
-
function formatRow(row) {
|
|
24
|
-
const time = new Date(normalizeTimestamp(row.created_at)).toLocaleString();
|
|
25
|
-
const channel = row.channel ?? "";
|
|
26
|
-
switch (row.type) {
|
|
27
|
-
case "inbound":
|
|
28
|
-
case "outbound": {
|
|
29
|
-
const sender = row.sender ?? (row.type === "outbound" ? "mind" : "unknown");
|
|
30
|
-
return `[${time}] [${channel}] ${sender}: ${row.content ?? ""}`;
|
|
31
|
-
}
|
|
32
|
-
case "text":
|
|
33
|
-
return `[${time}] [text] ${row.content ?? ""}`;
|
|
34
|
-
case "thinking":
|
|
35
|
-
return `[${time}] [thinking] ${(row.content ?? "").slice(0, 200)}${(row.content?.length ?? 0) > 200 ? "..." : ""}`;
|
|
36
|
-
case "tool_use": {
|
|
37
|
-
let toolName = "unknown";
|
|
38
|
-
if (row.metadata) {
|
|
39
|
-
try {
|
|
40
|
-
const meta = JSON.parse(row.metadata);
|
|
41
|
-
toolName = meta.name ?? toolName;
|
|
42
|
-
} catch {
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return `[${time}] [tool] ${toolName}${row.content ? `: ${row.content.slice(0, 100)}` : ""}`;
|
|
46
|
-
}
|
|
47
|
-
case "tool_result":
|
|
48
|
-
return `[${time}] [result] ${(row.content ?? "").slice(0, 200)}${(row.content?.length ?? 0) > 200 ? "..." : ""}`;
|
|
49
|
-
case "usage": {
|
|
50
|
-
if (row.metadata) {
|
|
51
|
-
try {
|
|
52
|
-
const meta = JSON.parse(row.metadata);
|
|
53
|
-
return `[${time}] [usage] in=${meta.input_tokens ?? 0} out=${meta.output_tokens ?? 0}`;
|
|
54
|
-
} catch {
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return `[${time}] [usage]`;
|
|
58
|
-
}
|
|
59
|
-
case "done":
|
|
60
|
-
return `[${time}] [done]`;
|
|
61
|
-
case "log": {
|
|
62
|
-
let category = "";
|
|
63
|
-
if (row.metadata) {
|
|
64
|
-
try {
|
|
65
|
-
const meta = JSON.parse(row.metadata);
|
|
66
|
-
category = meta.category ? `${meta.category}: ` : "";
|
|
67
|
-
} catch {
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return `[${time}] [log] ${category}${row.content ?? ""}`;
|
|
71
|
-
}
|
|
72
|
-
case "summary": {
|
|
73
|
-
let range = "";
|
|
74
|
-
if (row.metadata) {
|
|
75
|
-
try {
|
|
76
|
-
const meta = JSON.parse(row.metadata);
|
|
77
|
-
if (meta.from_time && meta.to_time) {
|
|
78
|
-
const from = new Date(normalizeTimestamp(meta.from_time)).toLocaleTimeString();
|
|
79
|
-
const to = new Date(normalizeTimestamp(meta.to_time)).toLocaleTimeString();
|
|
80
|
-
range = ` (${from}\u2013${to})`;
|
|
81
|
-
}
|
|
82
|
-
} catch {
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return `[${time}] [summary${range}] ${row.content ?? ""}`;
|
|
86
|
-
}
|
|
87
|
-
case "session_start":
|
|
88
|
-
return `[${time}] [session_start] ${row.session ?? ""}`;
|
|
89
|
-
default:
|
|
90
|
-
return `[${time}] [${row.type}] ${row.content ?? ""}`;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
async function run(args) {
|
|
94
|
-
const { flags } = parseArgs(args, {
|
|
95
|
-
mind: { type: "string" },
|
|
96
|
-
channel: { type: "string" },
|
|
97
|
-
session: { type: "string" },
|
|
98
|
-
preset: { type: "string" },
|
|
99
|
-
limit: { type: "string" },
|
|
100
|
-
full: { type: "boolean" }
|
|
101
|
-
});
|
|
102
|
-
const name = resolveMindName(flags);
|
|
103
|
-
const client = getClient();
|
|
104
|
-
const url = client.api.minds[":name"].history.$url({ param: { name } });
|
|
105
|
-
if (flags.channel) url.searchParams.set("channel", flags.channel);
|
|
106
|
-
if (flags.session) url.searchParams.set("session", flags.session);
|
|
107
|
-
if (flags.preset) url.searchParams.set("preset", flags.preset);
|
|
108
|
-
if (flags.limit) url.searchParams.set("limit", flags.limit);
|
|
109
|
-
if (flags.full) url.searchParams.set("full", "true");
|
|
110
|
-
const res = await daemonFetch(urlOf(url));
|
|
111
|
-
if (!res.ok) {
|
|
112
|
-
let errorMsg = `Failed to get history: ${res.status}`;
|
|
113
|
-
try {
|
|
114
|
-
const data = await res.json();
|
|
115
|
-
if (data.error) errorMsg = data.error;
|
|
116
|
-
} catch {
|
|
117
|
-
}
|
|
118
|
-
console.error(errorMsg);
|
|
119
|
-
process.exit(1);
|
|
120
|
-
}
|
|
121
|
-
const rows = await res.json();
|
|
122
|
-
for (const row of rows.reverse()) {
|
|
123
|
-
console.log(formatRow(row));
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
export {
|
|
127
|
-
run
|
|
128
|
-
};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
deliverMessage,
|
|
4
|
-
linkToolResultToTurn,
|
|
5
|
-
recordInbound,
|
|
6
|
-
recordOutbound,
|
|
7
|
-
resolveSleepAction,
|
|
8
|
-
tagRecentInbound,
|
|
9
|
-
tagUntaggedInbound,
|
|
10
|
-
tagUntaggedOutbound
|
|
11
|
-
} from "./chunk-3Z2DPESO.js";
|
|
12
|
-
import "./chunk-SKLSMHXO.js";
|
|
13
|
-
import "./chunk-LOEJ4HPQ.js";
|
|
14
|
-
import "./chunk-RVGLDGMI.js";
|
|
15
|
-
import "./chunk-GY5HBI7A.js";
|
|
16
|
-
import "./chunk-7J3HEVR7.js";
|
|
17
|
-
import "./chunk-G53F3JA4.js";
|
|
18
|
-
import "./chunk-OYAKCAVY.js";
|
|
19
|
-
import "./chunk-2NGTS5UU.js";
|
|
20
|
-
import "./chunk-A2A4KLFE.js";
|
|
21
|
-
import "./chunk-PB65JZK2.js";
|
|
22
|
-
import "./chunk-JYVGHWEJ.js";
|
|
23
|
-
import "./chunk-KVK2DLWI.js";
|
|
24
|
-
import "./chunk-C7I35G4R.js";
|
|
25
|
-
import "./chunk-QTUVYI7W.js";
|
|
26
|
-
import "./chunk-YUIHSKR6.js";
|
|
27
|
-
import "./chunk-KIEPMIM5.js";
|
|
28
|
-
import "./chunk-VH33ZWMW.js";
|
|
29
|
-
import "./chunk-N432I7QH.js";
|
|
30
|
-
import "./chunk-LRCG2JLP.js";
|
|
31
|
-
import "./chunk-RPZZSXV3.js";
|
|
32
|
-
import "./chunk-K3NQKI34.js";
|
|
33
|
-
export {
|
|
34
|
-
deliverMessage,
|
|
35
|
-
linkToolResultToTurn,
|
|
36
|
-
recordInbound,
|
|
37
|
-
recordOutbound,
|
|
38
|
-
resolveSleepAction,
|
|
39
|
-
tagRecentInbound,
|
|
40
|
-
tagUntaggedInbound,
|
|
41
|
-
tagUntaggedOutbound
|
|
42
|
-
};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
MindManager,
|
|
4
|
-
getMindManager,
|
|
5
|
-
initMindManager
|
|
6
|
-
} from "./chunk-3Z2DPESO.js";
|
|
7
|
-
import "./chunk-SKLSMHXO.js";
|
|
8
|
-
import "./chunk-LOEJ4HPQ.js";
|
|
9
|
-
import "./chunk-RVGLDGMI.js";
|
|
10
|
-
import "./chunk-GY5HBI7A.js";
|
|
11
|
-
import "./chunk-7J3HEVR7.js";
|
|
12
|
-
import "./chunk-G53F3JA4.js";
|
|
13
|
-
import "./chunk-OYAKCAVY.js";
|
|
14
|
-
import "./chunk-2NGTS5UU.js";
|
|
15
|
-
import "./chunk-A2A4KLFE.js";
|
|
16
|
-
import "./chunk-PB65JZK2.js";
|
|
17
|
-
import "./chunk-JYVGHWEJ.js";
|
|
18
|
-
import "./chunk-KVK2DLWI.js";
|
|
19
|
-
import "./chunk-C7I35G4R.js";
|
|
20
|
-
import "./chunk-QTUVYI7W.js";
|
|
21
|
-
import "./chunk-YUIHSKR6.js";
|
|
22
|
-
import "./chunk-KIEPMIM5.js";
|
|
23
|
-
import "./chunk-VH33ZWMW.js";
|
|
24
|
-
import "./chunk-N432I7QH.js";
|
|
25
|
-
import "./chunk-LRCG2JLP.js";
|
|
26
|
-
import "./chunk-RPZZSXV3.js";
|
|
27
|
-
import "./chunk-K3NQKI34.js";
|
|
28
|
-
export {
|
|
29
|
-
MindManager,
|
|
30
|
-
getMindManager,
|
|
31
|
-
initMindManager
|
|
32
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
sleepMind,
|
|
4
|
-
startMindFull,
|
|
5
|
-
startSpiritFull,
|
|
6
|
-
stopMindFull,
|
|
7
|
-
stopSpiritFull,
|
|
8
|
-
wakeMind
|
|
9
|
-
} from "./chunk-3Z2DPESO.js";
|
|
10
|
-
import "./chunk-SKLSMHXO.js";
|
|
11
|
-
import "./chunk-LOEJ4HPQ.js";
|
|
12
|
-
import "./chunk-RVGLDGMI.js";
|
|
13
|
-
import "./chunk-GY5HBI7A.js";
|
|
14
|
-
import "./chunk-7J3HEVR7.js";
|
|
15
|
-
import "./chunk-G53F3JA4.js";
|
|
16
|
-
import "./chunk-OYAKCAVY.js";
|
|
17
|
-
import "./chunk-2NGTS5UU.js";
|
|
18
|
-
import "./chunk-A2A4KLFE.js";
|
|
19
|
-
import "./chunk-PB65JZK2.js";
|
|
20
|
-
import "./chunk-JYVGHWEJ.js";
|
|
21
|
-
import "./chunk-KVK2DLWI.js";
|
|
22
|
-
import "./chunk-C7I35G4R.js";
|
|
23
|
-
import "./chunk-QTUVYI7W.js";
|
|
24
|
-
import "./chunk-YUIHSKR6.js";
|
|
25
|
-
import "./chunk-KIEPMIM5.js";
|
|
26
|
-
import "./chunk-VH33ZWMW.js";
|
|
27
|
-
import "./chunk-N432I7QH.js";
|
|
28
|
-
import "./chunk-LRCG2JLP.js";
|
|
29
|
-
import "./chunk-RPZZSXV3.js";
|
|
30
|
-
import "./chunk-K3NQKI34.js";
|
|
31
|
-
export {
|
|
32
|
-
sleepMind,
|
|
33
|
-
startMindFull,
|
|
34
|
-
startSpiritFull,
|
|
35
|
-
stopMindFull,
|
|
36
|
-
stopSpiritFull,
|
|
37
|
-
wakeMind
|
|
38
|
-
};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
Scheduler,
|
|
4
|
-
getScheduler,
|
|
5
|
-
initScheduler
|
|
6
|
-
} from "./chunk-3Z2DPESO.js";
|
|
7
|
-
import "./chunk-SKLSMHXO.js";
|
|
8
|
-
import "./chunk-LOEJ4HPQ.js";
|
|
9
|
-
import "./chunk-RVGLDGMI.js";
|
|
10
|
-
import "./chunk-GY5HBI7A.js";
|
|
11
|
-
import "./chunk-7J3HEVR7.js";
|
|
12
|
-
import "./chunk-G53F3JA4.js";
|
|
13
|
-
import "./chunk-OYAKCAVY.js";
|
|
14
|
-
import "./chunk-2NGTS5UU.js";
|
|
15
|
-
import "./chunk-A2A4KLFE.js";
|
|
16
|
-
import "./chunk-PB65JZK2.js";
|
|
17
|
-
import "./chunk-JYVGHWEJ.js";
|
|
18
|
-
import "./chunk-KVK2DLWI.js";
|
|
19
|
-
import "./chunk-C7I35G4R.js";
|
|
20
|
-
import "./chunk-QTUVYI7W.js";
|
|
21
|
-
import "./chunk-YUIHSKR6.js";
|
|
22
|
-
import "./chunk-KIEPMIM5.js";
|
|
23
|
-
import "./chunk-VH33ZWMW.js";
|
|
24
|
-
import "./chunk-N432I7QH.js";
|
|
25
|
-
import "./chunk-LRCG2JLP.js";
|
|
26
|
-
import "./chunk-RPZZSXV3.js";
|
|
27
|
-
import "./chunk-K3NQKI34.js";
|
|
28
|
-
export {
|
|
29
|
-
Scheduler,
|
|
30
|
-
getScheduler,
|
|
31
|
-
initScheduler
|
|
32
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
SleepManager,
|
|
4
|
-
getSleepManager,
|
|
5
|
-
getSleepManagerIfReady,
|
|
6
|
-
initSleepManager,
|
|
7
|
-
matchesGlob
|
|
8
|
-
} from "./chunk-3Z2DPESO.js";
|
|
9
|
-
import "./chunk-SKLSMHXO.js";
|
|
10
|
-
import "./chunk-LOEJ4HPQ.js";
|
|
11
|
-
import "./chunk-RVGLDGMI.js";
|
|
12
|
-
import "./chunk-GY5HBI7A.js";
|
|
13
|
-
import "./chunk-7J3HEVR7.js";
|
|
14
|
-
import "./chunk-G53F3JA4.js";
|
|
15
|
-
import "./chunk-OYAKCAVY.js";
|
|
16
|
-
import "./chunk-2NGTS5UU.js";
|
|
17
|
-
import "./chunk-A2A4KLFE.js";
|
|
18
|
-
import "./chunk-PB65JZK2.js";
|
|
19
|
-
import "./chunk-JYVGHWEJ.js";
|
|
20
|
-
import "./chunk-KVK2DLWI.js";
|
|
21
|
-
import "./chunk-C7I35G4R.js";
|
|
22
|
-
import "./chunk-QTUVYI7W.js";
|
|
23
|
-
import "./chunk-YUIHSKR6.js";
|
|
24
|
-
import "./chunk-KIEPMIM5.js";
|
|
25
|
-
import "./chunk-VH33ZWMW.js";
|
|
26
|
-
import "./chunk-N432I7QH.js";
|
|
27
|
-
import "./chunk-LRCG2JLP.js";
|
|
28
|
-
import "./chunk-RPZZSXV3.js";
|
|
29
|
-
import "./chunk-K3NQKI34.js";
|
|
30
|
-
export {
|
|
31
|
-
SleepManager,
|
|
32
|
-
getSleepManager,
|
|
33
|
-
getSleepManagerIfReady,
|
|
34
|
-
initSleepManager,
|
|
35
|
-
matchesGlob
|
|
36
|
-
};
|
package/dist/spirit-VRONKFMF.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
ensureSpiritProject,
|
|
4
|
-
getSpiritModel,
|
|
5
|
-
spiritDir,
|
|
6
|
-
syncSpiritTemplate
|
|
7
|
-
} from "./chunk-7J3HEVR7.js";
|
|
8
|
-
import "./chunk-G53F3JA4.js";
|
|
9
|
-
import "./chunk-C7I35G4R.js";
|
|
10
|
-
import "./chunk-QTUVYI7W.js";
|
|
11
|
-
import "./chunk-YUIHSKR6.js";
|
|
12
|
-
import "./chunk-KIEPMIM5.js";
|
|
13
|
-
import "./chunk-VH33ZWMW.js";
|
|
14
|
-
import "./chunk-N432I7QH.js";
|
|
15
|
-
import "./chunk-LRCG2JLP.js";
|
|
16
|
-
import "./chunk-RPZZSXV3.js";
|
|
17
|
-
import "./chunk-K3NQKI34.js";
|
|
18
|
-
export {
|
|
19
|
-
ensureSpiritProject,
|
|
20
|
-
getSpiritModel,
|
|
21
|
-
spiritDir,
|
|
22
|
-
syncSpiritTemplate
|
|
23
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
ensureSystemDM,
|
|
4
|
-
generateSystemReply,
|
|
5
|
-
resetSystemDMCache,
|
|
6
|
-
sendSystemMessage,
|
|
7
|
-
sendSystemMessageDirect
|
|
8
|
-
} from "./chunk-3Z2DPESO.js";
|
|
9
|
-
import "./chunk-SKLSMHXO.js";
|
|
10
|
-
import "./chunk-LOEJ4HPQ.js";
|
|
11
|
-
import "./chunk-RVGLDGMI.js";
|
|
12
|
-
import "./chunk-GY5HBI7A.js";
|
|
13
|
-
import "./chunk-7J3HEVR7.js";
|
|
14
|
-
import "./chunk-G53F3JA4.js";
|
|
15
|
-
import "./chunk-OYAKCAVY.js";
|
|
16
|
-
import "./chunk-2NGTS5UU.js";
|
|
17
|
-
import "./chunk-A2A4KLFE.js";
|
|
18
|
-
import "./chunk-PB65JZK2.js";
|
|
19
|
-
import "./chunk-JYVGHWEJ.js";
|
|
20
|
-
import "./chunk-KVK2DLWI.js";
|
|
21
|
-
import "./chunk-C7I35G4R.js";
|
|
22
|
-
import "./chunk-QTUVYI7W.js";
|
|
23
|
-
import "./chunk-YUIHSKR6.js";
|
|
24
|
-
import "./chunk-KIEPMIM5.js";
|
|
25
|
-
import "./chunk-VH33ZWMW.js";
|
|
26
|
-
import "./chunk-N432I7QH.js";
|
|
27
|
-
import "./chunk-LRCG2JLP.js";
|
|
28
|
-
import "./chunk-RPZZSXV3.js";
|
|
29
|
-
import "./chunk-K3NQKI34.js";
|
|
30
|
-
export {
|
|
31
|
-
ensureSystemDM,
|
|
32
|
-
generateSystemReply,
|
|
33
|
-
resetSystemDMCache,
|
|
34
|
-
sendSystemMessage,
|
|
35
|
-
sendSystemMessageDirect
|
|
36
|
-
};
|
package/dist/up-M5AS6SBV.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
run
|
|
4
|
-
} from "./chunk-NPKSDYA2.js";
|
|
5
|
-
import "./chunk-NNB4WIG7.js";
|
|
6
|
-
import "./chunk-KIEPMIM5.js";
|
|
7
|
-
import "./chunk-VH33ZWMW.js";
|
|
8
|
-
import {
|
|
9
|
-
readGlobalConfig
|
|
10
|
-
} from "./chunk-N432I7QH.js";
|
|
11
|
-
import "./chunk-D424ZQGI.js";
|
|
12
|
-
import "./chunk-LRCG2JLP.js";
|
|
13
|
-
import "./chunk-RPZZSXV3.js";
|
|
14
|
-
import "./chunk-K3NQKI34.js";
|
|
15
|
-
export {
|
|
16
|
-
readGlobalConfig,
|
|
17
|
-
run
|
|
18
|
-
};
|