abtars 0.3.4-alpha.2 → 0.3.4-alpha.4
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/bundle/{_registry.generated-RC6PEH6Z.js → _registry.generated-NTYSLLKQ.js} +5 -5
- package/bundle/abmind-lazy-7Z44NODV.js +23 -0
- package/bundle/abtars-cli.js +5 -5
- package/bundle/abtars.js +25 -25
- package/bundle/{agent-registry-GU7ABOK5.js → agent-registry-GVPWTW77.js} +3 -3
- package/bundle/{bootstrap-POWWTU6I.js → bootstrap-IXSBJZHN.js} +2 -2
- package/bundle/{chunk-3CACHBDI.js → chunk-4JXC3WTP.js} +4 -4
- package/bundle/{chunk-5HDSQFT6.js → chunk-5WCURRN3.js} +16 -18
- package/bundle/chunk-5WCURRN3.js.map +7 -0
- package/bundle/{chunk-B6ZN6COK.js → chunk-AW2FTHQO.js} +4 -4
- package/bundle/{chunk-Q32H6VPU.js → chunk-DM22Z3EJ.js} +8 -8
- package/bundle/{chunk-BFDBGESM.js → chunk-DO3A52JX.js} +7 -7
- package/bundle/{chunk-ZKJOFASV.js → chunk-FALOOWB5.js} +3 -3
- package/bundle/{chunk-UUIHL65U.js → chunk-IKUZPMVA.js} +7 -2
- package/bundle/{chunk-UUIHL65U.js.map → chunk-IKUZPMVA.js.map} +2 -2
- package/bundle/{chunk-LME23AA2.js → chunk-JQRHSGEA.js} +3 -3
- package/bundle/{chunk-OLAURO5G.js → chunk-LGP6TYFI.js} +2 -2
- package/bundle/{chunk-S5GD5EJ5.js → chunk-MTTROAAW.js} +2 -2
- package/bundle/{chunk-LUW62WGO.js → chunk-QTNVZ4EW.js} +1 -1
- package/bundle/{chunk-HMKVL7AX.js → chunk-YS47BYOJ.js} +13 -13
- package/bundle/{chunk-RIHQ37U5.js → chunk-ZXTNCV5J.js} +5 -5
- package/bundle/{commands-EWA4HNCM.js → commands-CFJML6XV.js} +4 -4
- package/bundle/{context-5P7IYYU2.js → context-2RJHC2LE.js} +2 -2
- package/bundle/{delegation-tools-P2SCNL23.js → delegation-tools-O7WLLYVP.js} +3 -3
- package/bundle/{deploy-YYUCGGP3.js → deploy-C2EYONHC.js} +2 -2
- package/bundle/{direct-api-transport-WQ6HA5OX.js → direct-api-transport-PA3QR37C.js} +5 -5
- package/bundle/{discord-adapter-4TTETYDI.js → discord-adapter-AAY6RVVS.js} +4 -4
- package/bundle/{doctor-probes-VDWFJKUB.js → doctor-probes-4FAM4PTN.js} +2 -2
- package/bundle/{heartbeat-tier3-55T2HUNE.js → heartbeat-tier3-5YOVJT2Z.js} +8 -8
- package/bundle/{install-4MXBYIUG.js → install-C2WDC4WT.js} +1 -1
- package/bundle/{message-pipeline-KSONH4MT.js → message-pipeline-ACTOBZDO.js} +4 -4
- package/bundle/meta.json +1263 -1230
- package/bundle/{phase-transport-2BRWACDF.js → phase-transport-2LEJGF2I.js} +4 -4
- package/bundle/{sleep-SRCSXY6T.js → sleep-36XS6MHJ.js} +3 -3
- package/bundle/{subagent-runtime-3UJB4HUB.js → subagent-runtime-QHFOQFUS.js} +2 -2
- package/bundle/{telegram-adapter-7G773NII.js → telegram-adapter-7TZN3BEX.js} +5 -5
- package/bundle/{tool-registry-J6TE3I2T.js → tool-registry-Q74FWBEG.js} +5 -5
- package/bundle/{update-424ZZQQ6.js → update-JBTTDVDD.js} +3 -3
- package/bundle/update-JBTTDVDD.js.map +7 -0
- package/package.json +1 -1
- package/scripts/abtars-watchdog.service +1 -1
- package/templates/skills/twitterX/SKILL.md +9 -0
- package/templates/skills/twitterX/scripts/abtars-tweet.js +10 -10
- package/bundle/chunk-5HDSQFT6.js.map +0 -7
- /package/bundle/{_registry.generated-RC6PEH6Z.js.map → _registry.generated-NTYSLLKQ.js.map} +0 -0
- /package/bundle/{agent-registry-GU7ABOK5.js.map → abmind-lazy-7Z44NODV.js.map} +0 -0
- /package/bundle/{commands-EWA4HNCM.js.map → agent-registry-GVPWTW77.js.map} +0 -0
- /package/bundle/{bootstrap-POWWTU6I.js.map → bootstrap-IXSBJZHN.js.map} +0 -0
- /package/bundle/{chunk-3CACHBDI.js.map → chunk-4JXC3WTP.js.map} +0 -0
- /package/bundle/{chunk-B6ZN6COK.js.map → chunk-AW2FTHQO.js.map} +0 -0
- /package/bundle/{chunk-Q32H6VPU.js.map → chunk-DM22Z3EJ.js.map} +0 -0
- /package/bundle/{chunk-BFDBGESM.js.map → chunk-DO3A52JX.js.map} +0 -0
- /package/bundle/{chunk-ZKJOFASV.js.map → chunk-FALOOWB5.js.map} +0 -0
- /package/bundle/{chunk-LME23AA2.js.map → chunk-JQRHSGEA.js.map} +0 -0
- /package/bundle/{chunk-OLAURO5G.js.map → chunk-LGP6TYFI.js.map} +0 -0
- /package/bundle/{chunk-S5GD5EJ5.js.map → chunk-MTTROAAW.js.map} +0 -0
- /package/bundle/{chunk-LUW62WGO.js.map → chunk-QTNVZ4EW.js.map} +0 -0
- /package/bundle/{chunk-HMKVL7AX.js.map → chunk-YS47BYOJ.js.map} +0 -0
- /package/bundle/{chunk-RIHQ37U5.js.map → chunk-ZXTNCV5J.js.map} +0 -0
- /package/bundle/{delegation-tools-P2SCNL23.js.map → commands-CFJML6XV.js.map} +0 -0
- /package/bundle/{context-5P7IYYU2.js.map → context-2RJHC2LE.js.map} +0 -0
- /package/bundle/{deploy-YYUCGGP3.js.map → delegation-tools-O7WLLYVP.js.map} +0 -0
- /package/bundle/{doctor-probes-VDWFJKUB.js.map → deploy-C2EYONHC.js.map} +0 -0
- /package/bundle/{direct-api-transport-WQ6HA5OX.js.map → direct-api-transport-PA3QR37C.js.map} +0 -0
- /package/bundle/{discord-adapter-4TTETYDI.js.map → discord-adapter-AAY6RVVS.js.map} +0 -0
- /package/bundle/{message-pipeline-KSONH4MT.js.map → doctor-probes-4FAM4PTN.js.map} +0 -0
- /package/bundle/{heartbeat-tier3-55T2HUNE.js.map → heartbeat-tier3-5YOVJT2Z.js.map} +0 -0
- /package/bundle/{install-4MXBYIUG.js.map → install-C2WDC4WT.js.map} +0 -0
- /package/bundle/{phase-transport-2BRWACDF.js.map → message-pipeline-ACTOBZDO.js.map} +0 -0
- /package/bundle/{sleep-SRCSXY6T.js.map → phase-transport-2LEJGF2I.js.map} +0 -0
- /package/bundle/{subagent-runtime-3UJB4HUB.js.map → sleep-36XS6MHJ.js.map} +0 -0
- /package/bundle/{tool-registry-J6TE3I2T.js.map → subagent-runtime-QHFOQFUS.js.map} +0 -0
- /package/bundle/{telegram-adapter-7G773NII.js.map → telegram-adapter-7TZN3BEX.js.map} +0 -0
- /package/bundle/{update-424ZZQQ6.js.map → tool-registry-Q74FWBEG.js.map} +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
+
import {
|
|
4
|
+
sleep_exports
|
|
5
|
+
} from "./chunk-LGP6TYFI.js";
|
|
3
6
|
import {
|
|
4
7
|
browser_exports
|
|
5
8
|
} from "./chunk-7Z3HBPRY.js";
|
|
6
|
-
import {
|
|
7
|
-
sleep_exports
|
|
8
|
-
} from "./chunk-OLAURO5G.js";
|
|
9
9
|
import {
|
|
10
10
|
hotskills_exports,
|
|
11
11
|
init_hotskills
|
|
12
12
|
} from "./chunk-JNIHEDKF.js";
|
|
13
13
|
import "./chunk-EUZDKV3C.js";
|
|
14
14
|
import "./chunk-YRSMGJFP.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-IKUZPMVA.js";
|
|
16
16
|
import "./chunk-GRVWZO4C.js";
|
|
17
17
|
import "./chunk-N5KN3LGD.js";
|
|
18
18
|
import "./chunk-2KC5G3EA.js";
|
|
@@ -33,4 +33,4 @@ var capabilities = [
|
|
|
33
33
|
export {
|
|
34
34
|
capabilities
|
|
35
35
|
};
|
|
36
|
-
//# sourceMappingURL=_registry.generated-
|
|
36
|
+
//# sourceMappingURL=_registry.generated-NTYSLLKQ.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
+
import {
|
|
4
|
+
ABMIND_MIN,
|
|
5
|
+
abmind,
|
|
6
|
+
isSupportedVersion,
|
|
7
|
+
loadAbmind,
|
|
8
|
+
parseSemver,
|
|
9
|
+
resetAbmindCache
|
|
10
|
+
} from "./chunk-IKUZPMVA.js";
|
|
11
|
+
import "./chunk-GWILHZPT.js";
|
|
12
|
+
import "./chunk-GALQBVKO.js";
|
|
13
|
+
import "./chunk-O7KQG6ME.js";
|
|
14
|
+
import "./chunk-7K2YZTLD.js";
|
|
15
|
+
export {
|
|
16
|
+
ABMIND_MIN,
|
|
17
|
+
abmind,
|
|
18
|
+
isSupportedVersion,
|
|
19
|
+
loadAbmind,
|
|
20
|
+
parseSemver,
|
|
21
|
+
resetAbmindCache
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=abmind-lazy-7Z44NODV.js.map
|
package/bundle/abtars-cli.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
3
|
import {
|
|
4
4
|
update
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-JQRHSGEA.js";
|
|
6
|
+
import "./chunk-MTTROAAW.js";
|
|
7
7
|
import {
|
|
8
8
|
rollback
|
|
9
9
|
} from "./chunk-HZDLFLRP.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
renderJson,
|
|
13
13
|
runAllProbes,
|
|
14
14
|
runFixes
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-5WCURRN3.js";
|
|
16
16
|
import {
|
|
17
17
|
deriveFromPassphrase,
|
|
18
18
|
deriveKey,
|
|
@@ -1171,7 +1171,7 @@ async function onboard(opts) {
|
|
|
1171
1171
|
process.stdout.write(`
|
|
1172
1172
|
Running abtars update...
|
|
1173
1173
|
`);
|
|
1174
|
-
const { update: update2 } = await import("./update-
|
|
1174
|
+
const { update: update2 } = await import("./update-JBTTDVDD.js");
|
|
1175
1175
|
return await update2({ source: opts.source ?? "alpha", localDir: opts.localDir, skipFreshness: true, allowAbmindMismatch: false });
|
|
1176
1176
|
}
|
|
1177
1177
|
async function seedDefaultTasks(_chatId, abtarsHome2) {
|
|
@@ -1418,7 +1418,7 @@ async function main(argv) {
|
|
|
1418
1418
|
});
|
|
1419
1419
|
}
|
|
1420
1420
|
case "__deploy": {
|
|
1421
|
-
const { deployActivationCli } = await import("./deploy-
|
|
1421
|
+
const { deployActivationCli } = await import("./deploy-C2EYONHC.js");
|
|
1422
1422
|
return await deployActivationCli(flags);
|
|
1423
1423
|
}
|
|
1424
1424
|
case "rollback":
|
package/bundle/abtars.js
CHANGED
|
@@ -19,54 +19,50 @@ import {
|
|
|
19
19
|
createSkillStatsFlushTask,
|
|
20
20
|
createUpdateCheckTask,
|
|
21
21
|
phasePipelineDeps
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-YS47BYOJ.js";
|
|
23
23
|
import {
|
|
24
24
|
loadNLMConfig
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-DO3A52JX.js";
|
|
26
26
|
import "./chunk-63A7ZRIH.js";
|
|
27
|
+
import "./chunk-OKAQICWY.js";
|
|
27
28
|
import {
|
|
28
29
|
HeartbeatSystem,
|
|
29
30
|
init_heartbeat_system,
|
|
30
31
|
setHeartbeatInstance
|
|
31
32
|
} from "./chunk-GP4XUKI5.js";
|
|
33
|
+
import {
|
|
34
|
+
sendNotification
|
|
35
|
+
} from "./chunk-7BSQ5UQO.js";
|
|
32
36
|
import {
|
|
33
37
|
phaseTransport
|
|
34
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-DM22Z3EJ.js";
|
|
35
39
|
import {
|
|
36
40
|
resetAllCtxStarts
|
|
37
41
|
} from "./chunk-JQDJPUHM.js";
|
|
38
42
|
import "./chunk-ZAA7B5BN.js";
|
|
39
|
-
import "./chunk-OKAQICWY.js";
|
|
40
43
|
import {
|
|
41
44
|
loadAndValidateConfig
|
|
42
45
|
} from "./chunk-NDCRWEEJ.js";
|
|
43
|
-
import "./chunk-
|
|
44
|
-
import "./chunk-
|
|
46
|
+
import "./chunk-FALOOWB5.js";
|
|
47
|
+
import "./chunk-QTNVZ4EW.js";
|
|
45
48
|
import {
|
|
46
49
|
SubagentRuntime
|
|
47
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-4JXC3WTP.js";
|
|
48
51
|
import {
|
|
49
52
|
createCapabilityRegistry
|
|
50
53
|
} from "./chunk-XX6BGTPO.js";
|
|
51
|
-
import
|
|
52
|
-
sendNotification
|
|
53
|
-
} from "./chunk-7BSQ5UQO.js";
|
|
54
|
+
import "./chunk-NRUSRJXR.js";
|
|
54
55
|
import "./chunk-WYHGNI56.js";
|
|
55
56
|
import {
|
|
56
57
|
readEnvWithDefault
|
|
57
58
|
} from "./chunk-YRSMGJFP.js";
|
|
58
59
|
import {
|
|
59
60
|
setPeerActivityCallback
|
|
60
|
-
} from "./chunk-
|
|
61
|
-
import
|
|
62
|
-
|
|
63
|
-
loadAbmind,
|
|
64
|
-
resetAbmindCache
|
|
65
|
-
} from "./chunk-UUIHL65U.js";
|
|
66
|
-
import "./chunk-B6ZN6COK.js";
|
|
61
|
+
} from "./chunk-ZXTNCV5J.js";
|
|
62
|
+
import "./chunk-AW2FTHQO.js";
|
|
63
|
+
import "./chunk-MV6CJFWR.js";
|
|
67
64
|
import "./chunk-URQPDCK5.js";
|
|
68
65
|
import "./chunk-VOLAZHA2.js";
|
|
69
|
-
import "./chunk-NRUSRJXR.js";
|
|
70
66
|
import "./chunk-PROPYS3P.js";
|
|
71
67
|
import {
|
|
72
68
|
init_spin,
|
|
@@ -77,8 +73,12 @@ import "./chunk-YWZPKBO6.js";
|
|
|
77
73
|
import {
|
|
78
74
|
buildPolicy
|
|
79
75
|
} from "./chunk-WBTJ2E62.js";
|
|
76
|
+
import {
|
|
77
|
+
abmind,
|
|
78
|
+
loadAbmind,
|
|
79
|
+
resetAbmindCache
|
|
80
|
+
} from "./chunk-IKUZPMVA.js";
|
|
80
81
|
import "./chunk-TEFZ4JA4.js";
|
|
81
|
-
import "./chunk-MV6CJFWR.js";
|
|
82
82
|
import {
|
|
83
83
|
init_kanban_channel,
|
|
84
84
|
kanban_channel_exports
|
|
@@ -1145,7 +1145,7 @@ async function phasePlatformsConnect(ctx) {
|
|
|
1145
1145
|
registry.register("telegram", {
|
|
1146
1146
|
configured: Boolean(config.telegram.botToken && config.telegram.allowedUserIds.size > 0),
|
|
1147
1147
|
async create() {
|
|
1148
|
-
const { TelegramAdapter } = await import("./telegram-adapter-
|
|
1148
|
+
const { TelegramAdapter } = await import("./telegram-adapter-7TZN3BEX.js");
|
|
1149
1149
|
const adapter = new TelegramAdapter(
|
|
1150
1150
|
{ botToken: config.telegram.botToken, allowedUserIds: config.telegram.allowedUserIds, pollTimeoutS: config.telegram.pollTimeoutS },
|
|
1151
1151
|
{ pipeline: { handleInbound: (msg) => recovery.handle(msg, adapter) }, conversationBuffer: ctx.conversationBuffer, transport: null, memory: null, sessionManager: ctx.sessionManager, actionGate: ctx.actionGate }
|
|
@@ -1177,7 +1177,7 @@ async function phasePlatformsConnect(ctx) {
|
|
|
1177
1177
|
if (!config.discord.appId || !isValidSnowflake(config.discord.appId)) {
|
|
1178
1178
|
throw new Error("DISCORD_APP_ID missing or invalid \u2014 Discord disabled");
|
|
1179
1179
|
}
|
|
1180
|
-
const { DiscordAdapter } = await import("./discord-adapter-
|
|
1180
|
+
const { DiscordAdapter } = await import("./discord-adapter-AAY6RVVS.js");
|
|
1181
1181
|
const adapter = new DiscordAdapter(
|
|
1182
1182
|
{ botToken: config.discord.botToken, appId: config.discord.appId, allowedUserIds: config.discord.allowedUserIds },
|
|
1183
1183
|
{ pipeline: { handleInbound: (msg) => recovery.handle(msg, adapter) }, transport: null, memory: null, conversationBuffer: ctx.conversationBuffer }
|
|
@@ -1255,7 +1255,7 @@ async function phaseCapabilities(ctx) {
|
|
|
1255
1255
|
let loaded = [];
|
|
1256
1256
|
let staticCaps;
|
|
1257
1257
|
try {
|
|
1258
|
-
({ capabilities: staticCaps } = await import("./_registry.generated-
|
|
1258
|
+
({ capabilities: staticCaps } = await import("./_registry.generated-NTYSLLKQ.js"));
|
|
1259
1259
|
} catch (err) {
|
|
1260
1260
|
logError("capabilities", `Registry import failed: ${err instanceof Error ? err.message : String(err)}. Loading individually.`);
|
|
1261
1261
|
staticCaps = [];
|
|
@@ -1472,8 +1472,8 @@ async function phaseSleep(ctx) {
|
|
|
1472
1472
|
logWarn("boot", `${phaseSleep.name}: skipping \u2014 heartbeat not available`);
|
|
1473
1473
|
return "skipped";
|
|
1474
1474
|
}
|
|
1475
|
-
const { createSleepHandle } = await import("./sleep-
|
|
1476
|
-
const { killWakeInhibit } = await import("./commands-
|
|
1475
|
+
const { createSleepHandle } = await import("./sleep-36XS6MHJ.js");
|
|
1476
|
+
const { killWakeInhibit } = await import("./commands-CFJML6XV.js");
|
|
1477
1477
|
const SLEEP_HOUR = parseInt(readEnvWithDefault("BED_TIME", "2", "bedtime hour").split(":")[0] ?? "2", 10);
|
|
1478
1478
|
let subagent = null;
|
|
1479
1479
|
const { getEnv: getEnv2 } = await import("./env-schema-4JXQUOH4.js");
|
|
@@ -3512,7 +3512,7 @@ async function startBridge() {
|
|
|
3512
3512
|
}
|
|
3513
3513
|
}
|
|
3514
3514
|
try {
|
|
3515
|
-
const { runFixes } = await import("./doctor-probes-
|
|
3515
|
+
const { runFixes } = await import("./doctor-probes-4FAM4PTN.js");
|
|
3516
3516
|
await runFixes();
|
|
3517
3517
|
} catch {
|
|
3518
3518
|
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import {
|
|
4
4
|
createAgentTransport,
|
|
5
5
|
createSubagentTransport
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-FALOOWB5.js";
|
|
7
|
+
import "./chunk-QTNVZ4EW.js";
|
|
8
8
|
import "./chunk-GRVWZO4C.js";
|
|
9
9
|
import "./chunk-N5KN3LGD.js";
|
|
10
10
|
import "./chunk-65VCEC32.js";
|
|
@@ -17,4 +17,4 @@ export {
|
|
|
17
17
|
createAgentTransport,
|
|
18
18
|
createSubagentTransport
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=agent-registry-
|
|
20
|
+
//# sourceMappingURL=agent-registry-GVPWTW77.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
makeLocalBuildSource,
|
|
5
5
|
makeNpmSource,
|
|
6
6
|
syncSrcRepos
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-MTTROAAW.js";
|
|
8
8
|
import {
|
|
9
9
|
cleanStaleStaging
|
|
10
10
|
} from "./chunk-5NY2YULC.js";
|
|
@@ -60,4 +60,4 @@ async function bootstrap(opts) {
|
|
|
60
60
|
export {
|
|
61
61
|
bootstrap
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=bootstrap-
|
|
63
|
+
//# sourceMappingURL=bootstrap-IXSBJZHN.js.map
|
|
@@ -69,7 +69,7 @@ var SubagentRuntime = class {
|
|
|
69
69
|
const cached = this.cache.get(agent);
|
|
70
70
|
if (cached && sessionStrategy === "fresh") {
|
|
71
71
|
await cached.transport.resetSession?.(cached.sessionKey);
|
|
72
|
-
(await import("./tool-registry-
|
|
72
|
+
(await import("./tool-registry-Q74FWBEG.js")).resetStoreCounter();
|
|
73
73
|
}
|
|
74
74
|
const { transport, model, sessionKey } = cached ?? await this.createAgent(agent, opts?.sessionType);
|
|
75
75
|
if (opts?.timeoutMs && transport.setTimeoutOverride) {
|
|
@@ -176,7 +176,7 @@ var SubagentRuntime = class {
|
|
|
176
176
|
const { logInfo: logInfo2 } = await import("./logger-OWCSNYCA.js");
|
|
177
177
|
logInfo2("subagent", `Sandbox spawn: ${agent} (type=${resolvedType}) \u2192 Docker container`);
|
|
178
178
|
}
|
|
179
|
-
const { createSubagentTransport } = await import("./agent-registry-
|
|
179
|
+
const { createSubagentTransport } = await import("./agent-registry-GVPWTW77.js");
|
|
180
180
|
const role = AGENT_TO_ROLE[agent];
|
|
181
181
|
const mainModel = this._mainTransport && "currentModel" in this._mainTransport ? this._mainTransport.currentModel : void 0;
|
|
182
182
|
const { transport, model } = await createSubagentTransport(role, this._registry ?? void 0, mainModel);
|
|
@@ -192,7 +192,7 @@ var SubagentRuntime = class {
|
|
|
192
192
|
const sessionKey = `system:${cacheKey ?? agent}`;
|
|
193
193
|
const entry = { transport, model, sessionKey };
|
|
194
194
|
this.cache.set(cacheKey ?? agent, entry);
|
|
195
|
-
(await import("./tool-registry-
|
|
195
|
+
(await import("./tool-registry-Q74FWBEG.js")).resetStoreCounter();
|
|
196
196
|
return entry;
|
|
197
197
|
}
|
|
198
198
|
};
|
|
@@ -207,4 +207,4 @@ var AGENT_TO_ROLE = {
|
|
|
207
207
|
export {
|
|
208
208
|
SubagentRuntime
|
|
209
209
|
};
|
|
210
|
-
//# sourceMappingURL=chunk-
|
|
210
|
+
//# sourceMappingURL=chunk-4JXC3WTP.js.map
|
|
@@ -134,18 +134,23 @@ async function probeKanban() {
|
|
|
134
134
|
if (!existsSync(dbPath)) return { name: "kanban", status: "skipped", detail: "kanban.db not found" };
|
|
135
135
|
const sharedNm = join(homedir(), ".local", "lib", "node_modules", "better-sqlite3");
|
|
136
136
|
if (!existsSync(sharedNm)) return { name: "kanban", status: "skipped", detail: "better-sqlite3 not installed (run: abtars deps install)" };
|
|
137
|
+
let Db;
|
|
137
138
|
try {
|
|
138
139
|
const { createRequire } = await import("node:module");
|
|
139
140
|
const _require = createRequire(import.meta.url);
|
|
140
|
-
|
|
141
|
+
Db = _require(sharedNm);
|
|
142
|
+
} catch (err) {
|
|
143
|
+
return { name: "kanban", status: "skipped", detail: `better-sqlite3 not loadable: ${err instanceof Error ? err.message : String(err)}` };
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
141
146
|
const db = new Db(dbPath, { readonly: true });
|
|
142
|
-
const row = db.prepare("SELECT COUNT(*) as cnt FROM
|
|
143
|
-
const stuck = db.prepare("SELECT COUNT(*) as cnt FROM
|
|
147
|
+
const row = db.prepare("SELECT COUNT(*) as cnt FROM kanban_board").get();
|
|
148
|
+
const stuck = db.prepare("SELECT COUNT(*) as cnt FROM kanban_board WHERE status='running' AND updated_at < datetime('now', '-10 minutes')").get();
|
|
144
149
|
db.close();
|
|
145
150
|
const detail = stuck.cnt > 0 ? `${row.cnt} cards, ${stuck.cnt} stuck` : `${row.cnt} cards`;
|
|
146
151
|
return { name: "kanban", status: stuck.cnt > 0 ? "failed" : "ok", detail };
|
|
147
|
-
} catch {
|
|
148
|
-
return { name: "kanban", status: "skipped", detail:
|
|
152
|
+
} catch (err) {
|
|
153
|
+
return { name: "kanban", status: "skipped", detail: `kanban.db query failed: ${err instanceof Error ? err.message : String(err)}` };
|
|
149
154
|
}
|
|
150
155
|
}
|
|
151
156
|
async function probeSkills() {
|
|
@@ -242,19 +247,12 @@ async function probeA2a() {
|
|
|
242
247
|
}
|
|
243
248
|
async function probeMind() {
|
|
244
249
|
try {
|
|
245
|
-
const {
|
|
246
|
-
const
|
|
247
|
-
if (
|
|
248
|
-
|
|
249
|
-
const checks = data.checks ?? [];
|
|
250
|
-
const total = checks.length;
|
|
251
|
-
const ok = checks.filter((c) => c.status === "ok").length;
|
|
252
|
-
const warnings = checks.filter((c) => c.status === "warn" || c.status === "error");
|
|
253
|
-
if (warnings.length === 0) return { name: "mind", status: "ok", detail: `abmind: ${ok}/${total} ok` };
|
|
254
|
-
const names = warnings.slice(0, 3).map((w) => w.name).join(", ");
|
|
255
|
-
return { name: "mind", status: "failed", detail: `abmind: ${ok}/${total} (${warnings.length} issues: ${names})` };
|
|
250
|
+
const { loadAbmind } = await import("./abmind-lazy-7Z44NODV.js");
|
|
251
|
+
const mod = await loadAbmind();
|
|
252
|
+
if (!mod) return { name: "mind", status: "skipped", detail: "abmind not installed" };
|
|
253
|
+
return { name: "mind", status: "ok", detail: "abmind loaded (in-process)" };
|
|
256
254
|
} catch {
|
|
257
|
-
return { name: "mind", status: "skipped", detail: "abmind
|
|
255
|
+
return { name: "mind", status: "skipped", detail: "abmind load failed" };
|
|
258
256
|
}
|
|
259
257
|
}
|
|
260
258
|
async function runAllProbes() {
|
|
@@ -453,4 +451,4 @@ export {
|
|
|
453
451
|
renderHuman,
|
|
454
452
|
renderJson
|
|
455
453
|
};
|
|
456
|
-
//# sourceMappingURL=chunk-
|
|
454
|
+
//# sourceMappingURL=chunk-5WCURRN3.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli/commands/doctor-probes.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * doctor-probes.ts \u2014 structured health probes grouped by subsystem layer.\n * Replaces scripts/doctor.sh entirely.\n */\n\nimport { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { abtarsHome } from \"../../paths.js\";\n\n// \u2500\u2500 Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface ProbeResult {\n name: string;\n status: \"ok\" | \"failed\" | \"skipped\";\n detail?: string;\n ms?: number;\n}\n\nexport interface FixResult {\n probe: string;\n action: string;\n success: boolean;\n}\n\nexport type LayerName = \"body\" | \"heart\" | \"brain\" | \"soul\" | \"tribe\";\n\nexport interface DoctorOutput {\n version: \"1.0\";\n totalMs: number;\n layers: Record<LayerName, ProbeResult[]>;\n fixes?: FixResult[];\n}\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst home = abtarsHome();\nconst configDir = join(home, \"config\");\n\nfunction readJson(path: string): any | null {\n try { return JSON.parse(readFileSync(path, \"utf-8\")); } catch { return null; }\n}\n\nfunction readEnv(): Map<string, string> {\n const envPath = join(configDir, \".env\");\n const map = new Map<string, string>();\n if (!existsSync(envPath)) return map;\n for (const line of readFileSync(envPath, \"utf-8\").split(\"\\n\")) {\n const m = line.match(/^([A-Z_]+)=(.*)$/);\n if (m) map.set(m[1]!, m[2]!.replace(/^[\"']|[\"']$/g, \"\"));\n }\n return map;\n}\n\nfunction pidAlive(pid: number): boolean {\n try { process.kill(pid, 0); return true; } catch { return false; }\n}\n\nfunction ago(ms: number): string {\n const s = Math.round(ms / 1000);\n if (s < 60) return `${s}s ago`;\n return `${Math.round(s / 60)}m ago`;\n}\n\nasync function timedProbe(fn: () => Promise<ProbeResult>): Promise<ProbeResult> {\n const start = Date.now();\n try {\n const r = await fn();\n r.ms = r.ms ?? (Date.now() - start);\n return r;\n } catch (err) {\n return { name: \"unknown\", status: \"failed\", detail: String(err), ms: Date.now() - start };\n }\n}\n\n// \u2500\u2500 Body Probes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function probePlatforms(): Promise<ProbeResult> {\n const env = readEnv();\n const parts: string[] = [];\n if (env.get(\"TELEGRAM_BOT_TOKEN\") || env.get(\"TELEGRAM_TOKEN\")) parts.push(\"telegram\");\n if (env.get(\"DISCORD_TOKEN\") || env.get(\"DISCORD_BOT_TOKEN\")) parts.push(\"discord\");\n if (env.get(\"IRC_SERVER\")) parts.push(\"irc\");\n\n if (parts.length === 0) return { name: \"platforms\", status: \"failed\", detail: \"no platform configured\" };\n\n // Check bridge.lock for running status\n const lock = readJson(join(home, \"bridge.lock\"));\n if (lock?.pid && pidAlive(lock.pid)) {\n return { name: \"platforms\", status: \"ok\", detail: parts.map(p => `${p} \u2713`).join(\", \") };\n }\n return { name: \"platforms\", status: \"ok\", detail: `configured: ${parts.join(\", \")} (bridge not running)` };\n}\n\nasync function probeDashboard(): Promise<ProbeResult> {\n const env = readEnv();\n if (env.get(\"ENABLE_DASHBOARD\") !== \"true\") return { name: \"dashboard\", status: \"skipped\", detail: \"not enabled\" };\n const port = env.get(\"DASHBOARD_PORT\") || env.get(\"WEB_PORT\") || \"3000\";\n try {\n const res = await fetch(`http://127.0.0.1:${port}/`, { signal: AbortSignal.timeout(3000) });\n return { name: \"dashboard\", status: res.ok ? \"ok\" : \"failed\", detail: `:${port}` };\n } catch {\n return { name: \"dashboard\", status: \"failed\", detail: `:${port} unreachable` };\n }\n}\n\nasync function probeSecurity(): Promise<ProbeResult> {\n const env = readEnv();\n const mode = env.get(\"SECURITY_MODE\") || \"off\";\n const validModes = [\"off\", \"guardrails\", \"seatbelt\", \"docker\"];\n if (!validModes.includes(mode)) return { name: \"security\", status: \"failed\", detail: `invalid mode: ${mode}` };\n\n // Check secret file perms\n const secretDir = join(home, \"secret\");\n let permIssues = 0;\n if (existsSync(secretDir)) {\n for (const f of readdirSync(secretDir)) {\n const st = statSync(join(secretDir, f));\n if (st.isFile() && (st.mode & 0o777) !== 0o600) permIssues++;\n }\n }\n\n const parts = [mode];\n if (existsSync(join(home, \"auth\", \"rules.json\"))) parts.push(\"ActionGate\");\n if (permIssues > 0) return { name: \"security\", status: \"failed\", detail: `${mode}, ${permIssues} file(s) not 600` };\n return { name: \"security\", status: \"ok\", detail: parts.join(\", \") };\n}\n\nasync function probeWatchdog(): Promise<ProbeResult> {\n const lock = readJson(join(home, \"bridge.lock\"));\n if (!lock) return { name: \"watchdog\", status: \"failed\", detail: \"bridge.lock missing\" };\n\n const bridgePid = lock.pid ?? 0;\n const wdPid = lock.watchdogPid ?? 0;\n const bridgeAlive = bridgePid > 0 && pidAlive(bridgePid);\n const wdAlive = wdPid > 0 && pidAlive(wdPid);\n\n if (bridgeAlive && wdAlive) return { name: \"watchdog\", status: \"ok\", detail: `bridge:${bridgePid}, wd:${wdPid}` };\n if (!bridgeAlive && !wdAlive) return { name: \"watchdog\", status: \"failed\", detail: `bridge:${bridgePid} dead, wd:${wdPid} dead` };\n if (!wdAlive) return { name: \"watchdog\", status: \"failed\", detail: `bridge:${bridgePid} alive, wd:${wdPid} dead (unprotected)` };\n return { name: \"watchdog\", status: \"failed\", detail: `bridge:${bridgePid} dead, wd:${wdPid} alive (will restart)` };\n}\n\n// \u2500\u2500 Heart Probes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function probeHeartbeat(): Promise<ProbeResult> {\n const lock = readJson(join(home, \"bridge.lock\"));\n if (!lock?.lastHeartbeat) return { name: \"heartbeat\", status: \"skipped\", detail: \"no bridge.lock\" };\n const ageMs = Date.now() - lock.lastHeartbeat;\n if (ageMs > 120_000) return { name: \"heartbeat\", status: \"failed\", detail: `stale (${ago(ageMs)})` };\n return { name: \"heartbeat\", status: \"ok\", detail: ago(ageMs) };\n}\n\n// \u2500\u2500 Brain Probes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function probeTransport(): Promise<ProbeResult> {\n const tPath = join(configDir, \"transport.json\");\n const t = readJson(tPath);\n if (!t) return { name: \"transport\", status: \"failed\", detail: \"transport.json missing or invalid\" };\n const agents = Object.keys(t.agents ?? {});\n if (agents.length === 0) return { name: \"transport\", status: \"failed\", detail: \"no agents configured\" };\n return { name: \"transport\", status: \"ok\", detail: `${agents.length} agent(s): ${agents.join(\", \")}` };\n}\n\nasync function probeSpin(): Promise<ProbeResult> {\n const lock = readJson(join(home, \"bridge.lock\"));\n if (!lock?.pid || !pidAlive(lock.pid)) return { name: \"spin\", status: \"failed\", detail: \"bridge not running\" };\n return { name: \"spin\", status: \"ok\", detail: \"bridge alive\" };\n}\n\nasync function probeKanban(): Promise<ProbeResult> {\n const dbPath = join(home, \"kanban\", \"kanban.db\");\n if (!existsSync(dbPath)) return { name: \"kanban\", status: \"skipped\", detail: \"kanban.db not found\" };\n const sharedNm = join(homedir(), \".local\", \"lib\", \"node_modules\", \"better-sqlite3\");\n if (!existsSync(sharedNm)) return { name: \"kanban\", status: \"skipped\", detail: \"better-sqlite3 not installed (run: abtars deps install)\" };\n let Db: any;\n try {\n const { createRequire } = await import(\"node:module\");\n const _require = createRequire(import.meta.url);\n Db = _require(sharedNm);\n } catch (err) {\n return { name: \"kanban\", status: \"skipped\", detail: `better-sqlite3 not loadable: ${err instanceof Error ? err.message : String(err)}` };\n }\n try {\n const db = new Db(dbPath, { readonly: true });\n const row = db.prepare(\"SELECT COUNT(*) as cnt FROM kanban_board\").get() as { cnt: number };\n const stuck = db.prepare(\"SELECT COUNT(*) as cnt FROM kanban_board WHERE status='running' AND updated_at < datetime('now', '-10 minutes')\").get() as { cnt: number };\n db.close();\n const detail = stuck.cnt > 0 ? `${row.cnt} cards, ${stuck.cnt} stuck` : `${row.cnt} cards`;\n return { name: \"kanban\", status: stuck.cnt > 0 ? \"failed\" : \"ok\", detail };\n } catch (err) {\n return { name: \"kanban\", status: \"skipped\", detail: `kanban.db query failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n}\n\nasync function probeSkills(): Promise<ProbeResult> {\n const catalog = join(home, \"skills\", \"skills_catalog.md\");\n if (!existsSync(catalog)) return { name: \"skills\", status: \"failed\", detail: \"skills_catalog.md missing\" };\n const content = readFileSync(catalog, \"utf-8\");\n const count = (content.match(/^## /gm) || []).length;\n if (count === 0) return { name: \"skills\", status: \"failed\", detail: \"catalog empty\" };\n return { name: \"skills\", status: \"ok\", detail: `${count} loaded` };\n}\n\nasync function probeSha(): Promise<ProbeResult> {\n // Check if healer skill exists in catalog\n const catalog = join(home, \"skills\", \"skills_catalog.md\");\n if (!existsSync(catalog)) return { name: \"sha\", status: \"skipped\", detail: \"no catalog\" };\n const content = readFileSync(catalog, \"utf-8\");\n if (/self.heal|healer|auto.fix/i.test(content)) return { name: \"sha\", status: \"ok\", detail: \"rules loaded\" };\n // Check sha-policy.json\n if (existsSync(join(configDir, \"sha-policy.json\"))) return { name: \"sha\", status: \"ok\", detail: \"rules loaded\" };\n return { name: \"sha\", status: \"skipped\", detail: \"no healer rules configured\" };\n}\n\n// \u2500\u2500 Tribe Probes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function probeAgentApi(): Promise<ProbeResult> {\n const env = readEnv();\n if (env.get(\"ENABLE_AGENT_API\") !== \"true\") return { name: \"agent-api\", status: \"skipped\", detail: \"not enabled\" };\n const port = parseInt(env.get(\"AGENT_API_PORT\") || \"7100\", 10);\n try {\n const { createConnection } = await import(\"node:net\");\n await new Promise<void>((resolve, reject) => {\n const sock = createConnection({ port, host: \"127.0.0.1\" }, () => { sock.destroy(); resolve(); });\n sock.on(\"error\", reject);\n sock.setTimeout(2000, () => { sock.destroy(); reject(new Error(\"timeout\")); });\n });\n return { name: \"agent-api\", status: \"ok\", detail: `:${port}` };\n } catch {\n return { name: \"agent-api\", status: \"failed\", detail: `:${port} not listening` };\n }\n}\n\nasync function probePeers(): Promise<ProbeResult> {\n const peersPath = join(configDir, \"peers.json\");\n const peers = readJson(peersPath);\n if (!peers) return { name: \"peers\", status: \"skipped\", detail: \"peers.json missing\" };\n const peerCount = Object.keys(peers.peers ?? {}).length;\n if (peerCount === 0) return { name: \"peers\", status: \"ok\", detail: \"no peers configured\" };\n\n const lock = readJson(join(home, \"bridge.lock\"));\n const gossipAge = lock?.lastGossipBroadcast ? ago(Date.now() - lock.lastGossipBroadcast) : \"unknown\";\n return { name: \"peers\", status: \"ok\", detail: `${peerCount} configured, gossip: ${gossipAge}` };\n}\n\nasync function probeTls(): Promise<ProbeResult> {\n const env = readEnv();\n if (env.get(\"ENABLE_AGENT_API\") !== \"true\") return { name: \"tls\", status: \"skipped\", detail: \"agent-api disabled\" };\n const certExists = existsSync(join(configDir, \"identity.crt\"));\n const keyExists = existsSync(join(configDir, \"identity.tls.key\"));\n if (certExists && keyExists) return { name: \"tls\", status: \"ok\", detail: \"certs present\" };\n const missing = [!certExists && \"identity.crt\", !keyExists && \"identity.tls.key\"].filter(Boolean);\n return { name: \"tls\", status: \"failed\", detail: `missing: ${missing.join(\", \")}` };\n}\n\nasync function probeA2a(): Promise<ProbeResult> {\n const peersPath = join(configDir, \"peers.json\");\n const peers = readJson(peersPath) as { gossipSecret?: string; peers?: Record<string, { token?: string }>; self?: { udpPort?: number } } | null;\n if (!peers?.self?.udpPort) return { name: \"a2a\", status: \"skipped\", detail: \"no gossip port configured\" };\n\n const port = peers.self.udpPort;\n try {\n const dgram = await import(\"node:dgram\");\n const { createHmac } = await import(\"node:crypto\");\n const key = peers.gossipSecret ?? Object.values(peers.peers ?? {})[0]?.token ?? \"default\";\n const payload = JSON.stringify({ type: \"ping\", name: \"__doctor__\" });\n const sig = createHmac(\"sha256\", key).update(payload).digest(\"base64url\").slice(0, 16);\n const ping = Buffer.from(`${payload}|${sig}`);\n\n const alive = await new Promise<boolean>((resolve) => {\n const sock = dgram.createSocket(\"udp4\");\n const timer = setTimeout(() => { sock.close(); resolve(false); }, 500);\n sock.on(\"message\", () => { clearTimeout(timer); sock.close(); resolve(true); });\n sock.on(\"error\", () => { clearTimeout(timer); sock.close(); resolve(false); });\n sock.send(ping, port, \"127.0.0.1\");\n });\n return { name: \"a2a\", status: alive ? \"ok\" : \"failed\", detail: alive ? `UDP :${port} alive` : `UDP :${port} no response` };\n } catch {\n return { name: \"a2a\", status: \"failed\", detail: \"UDP probe error\" };\n }\n}\n\n// \u2500\u2500 Soul Probes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function probeMind(): Promise<ProbeResult> {\n try {\n const { loadAbmind } = await import(\"../../utils/abmind-lazy.js\");\n const mod = await loadAbmind();\n if (!mod) return { name: \"mind\", status: \"skipped\", detail: \"abmind not installed\" };\n return { name: \"mind\", status: \"ok\", detail: \"abmind loaded (in-process)\" };\n } catch {\n return { name: \"mind\", status: \"skipped\", detail: \"abmind load failed\" };\n }\n}\n\n// \u2500\u2500 Runner \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function runAllProbes(): Promise<DoctorOutput> {\n const start = Date.now();\n\n const [body, heart, brain, soul, tribe] = await Promise.all([\n Promise.all([probePlatforms(), probeDashboard(), probeSecurity(), probeWatchdog()].map(p => timedProbe(() => p))),\n Promise.all([probeHeartbeat()].map(p => timedProbe(() => p))),\n Promise.all([probeTransport(), probeSpin(), probeKanban(), probeSkills(), probeSha()].map(p => timedProbe(() => p))),\n Promise.all([probeMind()].map(p => timedProbe(() => p))),\n Promise.all([probeAgentApi(), probePeers(), probeTls(), probeA2a()].map(p => timedProbe(() => p))),\n ]);\n\n return { version: \"1.0\", totalMs: Date.now() - start, layers: { body, heart, brain, soul, tribe } };\n}\n\n// \u2500\u2500 Fix Logic \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function runFixes(): Promise<FixResult[]> {\n const { chmodSync, unlinkSync, mkdirSync, existsSync: ex, readdirSync: rd, statSync: st, readFileSync: rf, writeFileSync: wf } = await import(\"node:fs\");\n const { spawnSync } = await import(\"node:child_process\");\n const fixes: FixResult[] = [];\n\n function fix(probe: string, action: string, fn: () => void): void {\n try { fn(); fixes.push({ probe, action, success: true }); }\n catch { fixes.push({ probe, action, success: false }); }\n }\n\n // 1. chmod 700 sensitive dirs\n for (const dir of [\"config\", \"secret\", \"auth\", \"hooks\"]) {\n const p = join(home, dir);\n if (ex(p) && (st(p).mode & 0o777) !== 0o700) {\n fix(\"security\", `${dir}/ \u2192 700`, () => chmodSync(p, 0o700));\n }\n }\n\n // 2. chmod 600 secret files\n const secretDir = join(home, \"secret\");\n if (ex(secretDir)) {\n for (const f of rd(secretDir)) {\n const fp = join(secretDir, f);\n if (st(fp).isFile() && (st(fp).mode & 0o777) !== 0o600) {\n fix(\"security\", `${f} \u2192 600`, () => chmodSync(fp, 0o600));\n }\n }\n }\n\n // 3. chmod 600 config files\n if (ex(configDir)) {\n for (const f of rd(configDir)) {\n const fp = join(configDir, f);\n if (st(fp).isFile() && (st(fp).mode & 0o777) !== 0o600) {\n fix(\"security\", `config/${f} \u2192 600`, () => chmodSync(fp, 0o600));\n }\n }\n }\n\n // 4. Stale deploy.lock\n const deployLock = join(home, \"deploy.lock\");\n if (ex(deployLock)) {\n const lock = readJson(deployLock);\n const lockAge = lock?.startedAt ? (Date.now() - new Date(lock.startedAt).getTime()) / 1000 : 9999;\n const lockPid = lock?.pid ?? 0;\n if (lockAge > 300 && (lockPid === 0 || !pidAlive(lockPid))) {\n fix(\"watchdog\", \"removed stale deploy.lock\", () => unlinkSync(deployLock));\n }\n }\n\n // 5. Stale .start-reason\n const startReason = join(home, \".start-reason\");\n if (ex(startReason)) {\n const age = (Date.now() - st(startReason).mtimeMs) / 1000;\n if (age > 300) fix(\"watchdog\", \"removed stale .start-reason\", () => unlinkSync(startReason));\n }\n\n // 6. Create missing dirs\n for (const dir of [\"logs\", \"workspace\", \"overflow\", \"received\"]) {\n const p = join(home, dir);\n if (!ex(p)) fix(\"watchdog\", `created ${dir}/`, () => mkdirSync(p, { recursive: true }));\n }\n\n // 7. Kill orphan CLI processes\n try {\n const lock = readJson(join(home, \"bridge.lock\"));\n const bridgePid = lock?.pid ?? 0;\n const wdPid = lock?.watchdogPid ?? 0;\n\n // Orphan kiro-cli\n const kiro = spawnSync(\"pgrep\", [\"-f\", \"kiro-cli.*acp\"], { encoding: \"utf-8\" });\n if (kiro.stdout) {\n for (const pid of kiro.stdout.trim().split(\"\\n\").filter(Boolean).map(Number)) {\n if (pid > 0 && pid !== bridgePid && pid !== wdPid && pid !== process.pid) {\n fix(\"brain\", `killed orphan kiro-cli ${pid}`, () => process.kill(pid, \"SIGTERM\"));\n }\n }\n }\n\n // Orphan abtars-sleep\n const sleep = spawnSync(\"pgrep\", [\"-f\", \"abtars-sleep\"], { encoding: \"utf-8\" });\n if (sleep.stdout) {\n for (const pid of sleep.stdout.trim().split(\"\\n\").filter(Boolean).map(Number)) {\n if (pid > 0 && pid !== bridgePid) {\n fix(\"brain\", `killed orphan abtars-sleep ${pid}`, () => process.kill(pid, \"SIGTERM\"));\n }\n }\n }\n } catch { /* pgrep not available or no orphans */ }\n\n // 8. Stale locks/sockets\n for (const f of [\"sleep.lock\", \"memory.sock\"]) {\n const p = join(home, f);\n if (ex(p)) {\n const age = (Date.now() - st(p).mtimeMs) / 1000;\n const lock = readJson(join(home, \"bridge.lock\"));\n if (age > 600 && (!lock?.pid || !pidAlive(lock.pid))) {\n fix(\"watchdog\", `removed stale ${f}`, () => unlinkSync(p));\n }\n }\n }\n\n // 9. Retention: delete old logs/overflow/media\n const LOGS_KEEP_DAYS = 7;\n const DATA_KEEP_DAYS = 30;\n try {\n const cutoffLogs = Date.now() - LOGS_KEEP_DAYS * 86400_000;\n const cutoffData = Date.now() - DATA_KEEP_DAYS * 86400_000;\n\n for (const [dir, cutoff] of [[join(home, \"logs\"), cutoffLogs], [join(home, \"overflow\"), cutoffData], [join(home, \"received\", \"media\"), cutoffLogs]] as const) {\n if (!ex(dir)) continue;\n let deleted = 0;\n for (const f of rd(dir)) {\n const fp = join(dir, f);\n if (st(fp).isFile() && st(fp).mtimeMs < cutoff) { unlinkSync(fp); deleted++; }\n }\n if (deleted > 0) fixes.push({ probe: \"retention\", action: `deleted ${deleted} stale file(s) from ${dir.split(\"/\").pop()}`, success: true });\n }\n\n // Truncate audit.jsonl if >10MB\n const auditPath = join(home, \"auth\", \"audit.jsonl\");\n if (ex(auditPath) && st(auditPath).size > 10_000_000) {\n const lines = rf(auditPath, \"utf-8\").split(\"\\n\");\n wf(auditPath, lines.slice(-1000).join(\"\\n\"));\n fixes.push({ probe: \"retention\", action: \"truncated audit.jsonl\", success: true });\n }\n } catch { /* retention errors non-fatal */ }\n\n // 10. Kill duplicate bridges\n try {\n const lock = readJson(join(home, \"bridge.lock\"));\n const expectedPid = lock?.pid ?? 0;\n const pgrep = spawnSync(\"pgrep\", [\"-f\", \"abtars.*main\"], { encoding: \"utf-8\" });\n if (pgrep.stdout) {\n for (const pid of pgrep.stdout.trim().split(\"\\n\").filter(Boolean).map(Number)) {\n if (pid > 0 && pid !== expectedPid && pid !== process.pid) {\n fix(\"watchdog\", `killed duplicate bridge ${pid}`, () => process.kill(pid, \"SIGTERM\"));\n }\n }\n }\n } catch { /* non-fatal */ }\n\n // 11. Hooks dir perms\n const hooksDir = join(home, \"hooks\");\n if (ex(hooksDir) && (st(hooksDir).mode & 0o777) !== 0o700) {\n fix(\"security\", \"hooks/ \u2192 700\", () => chmodSync(hooksDir, 0o700));\n }\n\n // 12. Install watchdog service if missing\n try {\n const manifest = readJson(join(home, \"manifest.json\"));\n if (manifest?.installMode === \"daemon\") {\n const { platform } = await import(\"node:os\");\n if (platform() === \"darwin\") {\n const plist = `${home}/com.abtars.watchdog.plist`;\n const dst = `${process.env[\"HOME\"]}/Library/LaunchAgents/com.abtars.watchdog.plist`;\n if (ex(plist) && !ex(dst)) {\n fix(\"watchdog\", \"installed LaunchAgent\", () => {\n const { copyFileSync } = require(\"node:fs\");\n copyFileSync(plist, dst);\n spawnSync(\"launchctl\", [\"load\", dst]);\n });\n }\n } else {\n const svc = `${home}/abtars-watchdog.service`;\n const dst = `${process.env[\"HOME\"]}/.config/systemd/user/abtars-watchdog.service`;\n if (ex(svc) && !ex(dst)) {\n fix(\"watchdog\", \"installed systemd unit\", () => {\n mkdirSync(join(process.env[\"HOME\"]!, \".config\", \"systemd\", \"user\"), { recursive: true });\n const { copyFileSync } = require(\"node:fs\");\n copyFileSync(svc, dst);\n spawnSync(\"systemctl\", [\"--user\", \"enable\", \"--now\", \"abtars-watchdog.service\"]);\n });\n }\n }\n }\n } catch { /* non-fatal */ }\n\n return fixes;\n}\n\n// \u2500\u2500 Renderer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst ICON = { ok: \"\u2713\", failed: \"\u2717\", skipped: \"~\" } as const;\n\nexport function renderHuman(output: DoctorOutput): string {\n const lines: string[] = [];\n for (const [layer, probes] of Object.entries(output.layers) as [string, ProbeResult[]][]) {\n lines.push(`${layer.charAt(0).toUpperCase() + layer.slice(1)}:`);\n for (const p of probes) {\n const ms = p.ms && p.ms > 500 ? ` (${p.ms}ms)` : \"\";\n const detail = p.detail ? ` \u2014 ${p.detail}` : \"\";\n lines.push(` ${ICON[p.status]} ${p.name}${ms}${detail}`);\n }\n }\n const total = Object.values(output.layers).flat();\n const okCount = total.filter(r => r.status === \"ok\").length;\n lines.push(`\\n${okCount}/${total.length} ok (${(output.totalMs / 1000).toFixed(1)}s)`);\n return lines.join(\"\\n\");\n}\n\nexport function renderJson(output: DoctorOutput): string {\n return JSON.stringify(output, null, 2);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
+
import {
|
|
4
|
+
addCompletion
|
|
5
|
+
} from "./chunk-MV6CJFWR.js";
|
|
3
6
|
import {
|
|
4
7
|
init_spin,
|
|
5
8
|
spin
|
|
6
9
|
} from "./chunk-AO32N2VB.js";
|
|
7
|
-
import {
|
|
8
|
-
addCompletion
|
|
9
|
-
} from "./chunk-MV6CJFWR.js";
|
|
10
10
|
import {
|
|
11
11
|
getEnv,
|
|
12
12
|
init_env_schema
|
|
@@ -216,4 +216,4 @@ export {
|
|
|
216
216
|
consumePendingInstruction,
|
|
217
217
|
getDelegationTools
|
|
218
218
|
};
|
|
219
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-AW2FTHQO.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-JQDJPUHM.js";
|
|
6
6
|
import {
|
|
7
7
|
createAgentTransport
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-FALOOWB5.js";
|
|
9
9
|
import {
|
|
10
10
|
init_spin,
|
|
11
11
|
spin_exports
|
|
@@ -533,7 +533,7 @@ async function buildTransport(ctx) {
|
|
|
533
533
|
defaults?.maxWaitSec ?? config.transport.tmuxMaxWaitSec
|
|
534
534
|
);
|
|
535
535
|
} else if (resolved.provider.transport === "api") {
|
|
536
|
-
const { DirectApiTransport } = await import("./direct-api-transport-
|
|
536
|
+
const { DirectApiTransport } = await import("./direct-api-transport-PA3QR37C.js");
|
|
537
537
|
const { ModelHealthRegistry } = await import("./model-health-registry-MLEIZSTV.js");
|
|
538
538
|
const { FallbackPolicy } = await import("./fallback-policy-SR6ED5I3.js");
|
|
539
539
|
const apiKey = getEnv().getApiKey(resolved.provider.apiKeyEnv ?? "API_KEY");
|
|
@@ -636,20 +636,20 @@ async function buildTransport(ctx) {
|
|
|
636
636
|
ctx.runtime.setSessionManager(ctx.sessionManager);
|
|
637
637
|
if (ctx.sandboxEnabled) ctx.runtime.setSandboxEnabled(true);
|
|
638
638
|
if (getEnv().enableAsyncDelegation) {
|
|
639
|
-
const { setDelegationDeps } = await import("./delegation-tools-
|
|
639
|
+
const { setDelegationDeps } = await import("./delegation-tools-O7WLLYVP.js");
|
|
640
640
|
setDelegationDeps(ctx.runtime);
|
|
641
641
|
}
|
|
642
642
|
logInfo("main", "\u2713 Transport ready");
|
|
643
643
|
const { join: join2 } = await import("node:path");
|
|
644
644
|
const { abtarsHome: abtarsHome2 } = await import("./paths-X4LRYUI6.js");
|
|
645
645
|
const { ActionGate } = await import("./action-gate-G2V47NHW.js");
|
|
646
|
-
const { setActionGate } = await import("./tool-registry-
|
|
646
|
+
const { setActionGate } = await import("./tool-registry-Q74FWBEG.js");
|
|
647
647
|
const authDir = join2(abtarsHome2(), "auth");
|
|
648
648
|
ctx.actionGate = new ActionGate(authDir);
|
|
649
649
|
setActionGate(ctx.actionGate);
|
|
650
650
|
logDebug("main", "\u{1F512} ActionGate wired");
|
|
651
651
|
if (ctx.seatbeltActive) {
|
|
652
|
-
const { setSeatbelt } = await import("./tool-registry-
|
|
652
|
+
const { setSeatbelt } = await import("./tool-registry-Q74FWBEG.js");
|
|
653
653
|
const { getPolicy } = await import("./seatbelt-GFJ3BR2E.js");
|
|
654
654
|
const home = abtarsHome2();
|
|
655
655
|
const policy = getPolicy("A", join2(home, "workspace"), home);
|
|
@@ -657,7 +657,7 @@ async function buildTransport(ctx) {
|
|
|
657
657
|
logDebug("main", "\u{1F6E1}\uFE0F Seatbelt wired to tool-registry");
|
|
658
658
|
}
|
|
659
659
|
if (resolved.provider.transport === "api" && ctx.memory?.available) {
|
|
660
|
-
const { setMemoryBackend } = await import("./tool-registry-
|
|
660
|
+
const { setMemoryBackend } = await import("./tool-registry-Q74FWBEG.js");
|
|
661
661
|
const mm = ctx.memory;
|
|
662
662
|
const backend = {
|
|
663
663
|
initialize: async () => {
|
|
@@ -685,7 +685,7 @@ async function buildTransport(ctx) {
|
|
|
685
685
|
const db = ctx.memory.getDb?.() ?? ctx.memory.getDatabase?.();
|
|
686
686
|
if (db && resolved.contextWindow >= 128e3) {
|
|
687
687
|
const { ContextEngine } = await import("abmind");
|
|
688
|
-
const { createContextOrchestrator } = await import("./context-
|
|
688
|
+
const { createContextOrchestrator } = await import("./context-2RJHC2LE.js");
|
|
689
689
|
const contextEngine = new ContextEngine(db);
|
|
690
690
|
const orchestrator = createContextOrchestrator(
|
|
691
691
|
contextEngine,
|
|
@@ -745,4 +745,4 @@ export {
|
|
|
745
745
|
buildTransport,
|
|
746
746
|
rebuildTransport
|
|
747
747
|
};
|
|
748
|
-
//# sourceMappingURL=chunk-
|
|
748
|
+
//# sourceMappingURL=chunk-DM22Z3EJ.js.map
|
|
@@ -8,10 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-OKAQICWY.js";
|
|
9
9
|
import {
|
|
10
10
|
ModelNotFoundError
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import {
|
|
13
|
-
abmind
|
|
14
|
-
} from "./chunk-UUIHL65U.js";
|
|
11
|
+
} from "./chunk-QTNVZ4EW.js";
|
|
15
12
|
import {
|
|
16
13
|
fire,
|
|
17
14
|
hasHooks
|
|
@@ -19,6 +16,9 @@ import {
|
|
|
19
16
|
import {
|
|
20
17
|
sanitizeOutbound
|
|
21
18
|
} from "./chunk-YWZPKBO6.js";
|
|
19
|
+
import {
|
|
20
|
+
abmind
|
|
21
|
+
} from "./chunk-IKUZPMVA.js";
|
|
22
22
|
import {
|
|
23
23
|
buildSoulBundle,
|
|
24
24
|
init_soul_bundle
|
|
@@ -2342,7 +2342,7 @@ async function handleDoctor(_text, ctx) {
|
|
|
2342
2342
|
const arg = _text.replace(/^\/(doctor|health)\s*/i, "").trim().toLowerCase();
|
|
2343
2343
|
if (arg === "fix" || arg === "fix-full") {
|
|
2344
2344
|
try {
|
|
2345
|
-
const { runFixes, runAllProbes: runAllProbes2, renderHuman: renderHuman2 } = await import("./doctor-probes-
|
|
2345
|
+
const { runFixes, runAllProbes: runAllProbes2, renderHuman: renderHuman2 } = await import("./doctor-probes-4FAM4PTN.js");
|
|
2346
2346
|
const fixes = await runFixes();
|
|
2347
2347
|
const fixLines = fixes.map((f) => ` ${f.success ? "+" : "x"} ${f.action}`).join("\n");
|
|
2348
2348
|
const output2 = await runAllProbes2();
|
|
@@ -2356,7 +2356,7 @@ ${renderHuman2(output2)}`);
|
|
|
2356
2356
|
return true;
|
|
2357
2357
|
}
|
|
2358
2358
|
await ctx.reply("\u{1FA7A} Running diagnostics...");
|
|
2359
|
-
const { runAllProbes, renderHuman } = await import("./doctor-probes-
|
|
2359
|
+
const { runAllProbes, renderHuman } = await import("./doctor-probes-4FAM4PTN.js");
|
|
2360
2360
|
const output = await runAllProbes();
|
|
2361
2361
|
await ctx.reply(renderHuman(output));
|
|
2362
2362
|
return true;
|
|
@@ -4111,4 +4111,4 @@ export {
|
|
|
4111
4111
|
resetAndPrepare,
|
|
4112
4112
|
handleInboundMessage
|
|
4113
4113
|
};
|
|
4114
|
-
//# sourceMappingURL=chunk-
|
|
4114
|
+
//# sourceMappingURL=chunk-DO3A52JX.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
3
|
import {
|
|
4
4
|
AcpTransport
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QTNVZ4EW.js";
|
|
6
6
|
import {
|
|
7
7
|
getEnv,
|
|
8
8
|
init_env_schema
|
|
@@ -70,7 +70,7 @@ async function createSubagentTransport(role, registry, currentModel) {
|
|
|
70
70
|
return { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };
|
|
71
71
|
})();
|
|
72
72
|
if (agent.provider.transport === "api") {
|
|
73
|
-
const { DirectApiTransport } = await import("./direct-api-transport-
|
|
73
|
+
const { DirectApiTransport } = await import("./direct-api-transport-PA3QR37C.js");
|
|
74
74
|
const { FallbackPolicy } = await import("./fallback-policy-SR6ED5I3.js");
|
|
75
75
|
const apiKey = getEnv().getApiKey(agent.provider.apiKeyEnv ?? "API_KEY");
|
|
76
76
|
const startModel = currentModel ?? agent.model;
|
|
@@ -187,4 +187,4 @@ export {
|
|
|
187
187
|
createAgentTransport,
|
|
188
188
|
createSubagentTransport
|
|
189
189
|
};
|
|
190
|
-
//# sourceMappingURL=chunk-
|
|
190
|
+
//# sourceMappingURL=chunk-FALOOWB5.js.map
|
|
@@ -43,7 +43,9 @@ async function loadAbmind() {
|
|
|
43
43
|
_loaded = true;
|
|
44
44
|
let mod = null;
|
|
45
45
|
try {
|
|
46
|
-
|
|
46
|
+
const req = createRequire(import.meta.url);
|
|
47
|
+
const resolvedPath = req.resolve("abmind");
|
|
48
|
+
mod = await import(resolvedPath);
|
|
47
49
|
} catch {
|
|
48
50
|
mod = null;
|
|
49
51
|
}
|
|
@@ -70,8 +72,11 @@ function abmind() {
|
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
export {
|
|
75
|
+
ABMIND_MIN,
|
|
73
76
|
resetAbmindCache,
|
|
77
|
+
parseSemver,
|
|
78
|
+
isSupportedVersion,
|
|
74
79
|
loadAbmind,
|
|
75
80
|
abmind
|
|
76
81
|
};
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
82
|
+
//# sourceMappingURL=chunk-IKUZPMVA.js.map
|