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.
Files changed (74) hide show
  1. package/bundle/{_registry.generated-RC6PEH6Z.js → _registry.generated-NTYSLLKQ.js} +5 -5
  2. package/bundle/abmind-lazy-7Z44NODV.js +23 -0
  3. package/bundle/abtars-cli.js +5 -5
  4. package/bundle/abtars.js +25 -25
  5. package/bundle/{agent-registry-GU7ABOK5.js → agent-registry-GVPWTW77.js} +3 -3
  6. package/bundle/{bootstrap-POWWTU6I.js → bootstrap-IXSBJZHN.js} +2 -2
  7. package/bundle/{chunk-3CACHBDI.js → chunk-4JXC3WTP.js} +4 -4
  8. package/bundle/{chunk-5HDSQFT6.js → chunk-5WCURRN3.js} +16 -18
  9. package/bundle/chunk-5WCURRN3.js.map +7 -0
  10. package/bundle/{chunk-B6ZN6COK.js → chunk-AW2FTHQO.js} +4 -4
  11. package/bundle/{chunk-Q32H6VPU.js → chunk-DM22Z3EJ.js} +8 -8
  12. package/bundle/{chunk-BFDBGESM.js → chunk-DO3A52JX.js} +7 -7
  13. package/bundle/{chunk-ZKJOFASV.js → chunk-FALOOWB5.js} +3 -3
  14. package/bundle/{chunk-UUIHL65U.js → chunk-IKUZPMVA.js} +7 -2
  15. package/bundle/{chunk-UUIHL65U.js.map → chunk-IKUZPMVA.js.map} +2 -2
  16. package/bundle/{chunk-LME23AA2.js → chunk-JQRHSGEA.js} +3 -3
  17. package/bundle/{chunk-OLAURO5G.js → chunk-LGP6TYFI.js} +2 -2
  18. package/bundle/{chunk-S5GD5EJ5.js → chunk-MTTROAAW.js} +2 -2
  19. package/bundle/{chunk-LUW62WGO.js → chunk-QTNVZ4EW.js} +1 -1
  20. package/bundle/{chunk-HMKVL7AX.js → chunk-YS47BYOJ.js} +13 -13
  21. package/bundle/{chunk-RIHQ37U5.js → chunk-ZXTNCV5J.js} +5 -5
  22. package/bundle/{commands-EWA4HNCM.js → commands-CFJML6XV.js} +4 -4
  23. package/bundle/{context-5P7IYYU2.js → context-2RJHC2LE.js} +2 -2
  24. package/bundle/{delegation-tools-P2SCNL23.js → delegation-tools-O7WLLYVP.js} +3 -3
  25. package/bundle/{deploy-YYUCGGP3.js → deploy-C2EYONHC.js} +2 -2
  26. package/bundle/{direct-api-transport-WQ6HA5OX.js → direct-api-transport-PA3QR37C.js} +5 -5
  27. package/bundle/{discord-adapter-4TTETYDI.js → discord-adapter-AAY6RVVS.js} +4 -4
  28. package/bundle/{doctor-probes-VDWFJKUB.js → doctor-probes-4FAM4PTN.js} +2 -2
  29. package/bundle/{heartbeat-tier3-55T2HUNE.js → heartbeat-tier3-5YOVJT2Z.js} +8 -8
  30. package/bundle/{install-4MXBYIUG.js → install-C2WDC4WT.js} +1 -1
  31. package/bundle/{message-pipeline-KSONH4MT.js → message-pipeline-ACTOBZDO.js} +4 -4
  32. package/bundle/meta.json +1263 -1230
  33. package/bundle/{phase-transport-2BRWACDF.js → phase-transport-2LEJGF2I.js} +4 -4
  34. package/bundle/{sleep-SRCSXY6T.js → sleep-36XS6MHJ.js} +3 -3
  35. package/bundle/{subagent-runtime-3UJB4HUB.js → subagent-runtime-QHFOQFUS.js} +2 -2
  36. package/bundle/{telegram-adapter-7G773NII.js → telegram-adapter-7TZN3BEX.js} +5 -5
  37. package/bundle/{tool-registry-J6TE3I2T.js → tool-registry-Q74FWBEG.js} +5 -5
  38. package/bundle/{update-424ZZQQ6.js → update-JBTTDVDD.js} +3 -3
  39. package/bundle/update-JBTTDVDD.js.map +7 -0
  40. package/package.json +1 -1
  41. package/scripts/abtars-watchdog.service +1 -1
  42. package/templates/skills/twitterX/SKILL.md +9 -0
  43. package/templates/skills/twitterX/scripts/abtars-tweet.js +10 -10
  44. package/bundle/chunk-5HDSQFT6.js.map +0 -7
  45. /package/bundle/{_registry.generated-RC6PEH6Z.js.map → _registry.generated-NTYSLLKQ.js.map} +0 -0
  46. /package/bundle/{agent-registry-GU7ABOK5.js.map → abmind-lazy-7Z44NODV.js.map} +0 -0
  47. /package/bundle/{commands-EWA4HNCM.js.map → agent-registry-GVPWTW77.js.map} +0 -0
  48. /package/bundle/{bootstrap-POWWTU6I.js.map → bootstrap-IXSBJZHN.js.map} +0 -0
  49. /package/bundle/{chunk-3CACHBDI.js.map → chunk-4JXC3WTP.js.map} +0 -0
  50. /package/bundle/{chunk-B6ZN6COK.js.map → chunk-AW2FTHQO.js.map} +0 -0
  51. /package/bundle/{chunk-Q32H6VPU.js.map → chunk-DM22Z3EJ.js.map} +0 -0
  52. /package/bundle/{chunk-BFDBGESM.js.map → chunk-DO3A52JX.js.map} +0 -0
  53. /package/bundle/{chunk-ZKJOFASV.js.map → chunk-FALOOWB5.js.map} +0 -0
  54. /package/bundle/{chunk-LME23AA2.js.map → chunk-JQRHSGEA.js.map} +0 -0
  55. /package/bundle/{chunk-OLAURO5G.js.map → chunk-LGP6TYFI.js.map} +0 -0
  56. /package/bundle/{chunk-S5GD5EJ5.js.map → chunk-MTTROAAW.js.map} +0 -0
  57. /package/bundle/{chunk-LUW62WGO.js.map → chunk-QTNVZ4EW.js.map} +0 -0
  58. /package/bundle/{chunk-HMKVL7AX.js.map → chunk-YS47BYOJ.js.map} +0 -0
  59. /package/bundle/{chunk-RIHQ37U5.js.map → chunk-ZXTNCV5J.js.map} +0 -0
  60. /package/bundle/{delegation-tools-P2SCNL23.js.map → commands-CFJML6XV.js.map} +0 -0
  61. /package/bundle/{context-5P7IYYU2.js.map → context-2RJHC2LE.js.map} +0 -0
  62. /package/bundle/{deploy-YYUCGGP3.js.map → delegation-tools-O7WLLYVP.js.map} +0 -0
  63. /package/bundle/{doctor-probes-VDWFJKUB.js.map → deploy-C2EYONHC.js.map} +0 -0
  64. /package/bundle/{direct-api-transport-WQ6HA5OX.js.map → direct-api-transport-PA3QR37C.js.map} +0 -0
  65. /package/bundle/{discord-adapter-4TTETYDI.js.map → discord-adapter-AAY6RVVS.js.map} +0 -0
  66. /package/bundle/{message-pipeline-KSONH4MT.js.map → doctor-probes-4FAM4PTN.js.map} +0 -0
  67. /package/bundle/{heartbeat-tier3-55T2HUNE.js.map → heartbeat-tier3-5YOVJT2Z.js.map} +0 -0
  68. /package/bundle/{install-4MXBYIUG.js.map → install-C2WDC4WT.js.map} +0 -0
  69. /package/bundle/{phase-transport-2BRWACDF.js.map → message-pipeline-ACTOBZDO.js.map} +0 -0
  70. /package/bundle/{sleep-SRCSXY6T.js.map → phase-transport-2LEJGF2I.js.map} +0 -0
  71. /package/bundle/{subagent-runtime-3UJB4HUB.js.map → sleep-36XS6MHJ.js.map} +0 -0
  72. /package/bundle/{tool-registry-J6TE3I2T.js.map → subagent-runtime-QHFOQFUS.js.map} +0 -0
  73. /package/bundle/{telegram-adapter-7G773NII.js.map → telegram-adapter-7TZN3BEX.js.map} +0 -0
  74. /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-UUIHL65U.js";
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-RC6PEH6Z.js.map
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
@@ -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-LME23AA2.js";
6
- import "./chunk-S5GD5EJ5.js";
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-5HDSQFT6.js";
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-424ZZQQ6.js");
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-YYUCGGP3.js");
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-HMKVL7AX.js";
22
+ } from "./chunk-YS47BYOJ.js";
23
23
  import {
24
24
  loadNLMConfig
25
- } from "./chunk-BFDBGESM.js";
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-Q32H6VPU.js";
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-ZKJOFASV.js";
44
- import "./chunk-LUW62WGO.js";
46
+ import "./chunk-FALOOWB5.js";
47
+ import "./chunk-QTNVZ4EW.js";
45
48
  import {
46
49
  SubagentRuntime
47
- } from "./chunk-3CACHBDI.js";
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-RIHQ37U5.js";
61
- import {
62
- abmind,
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-7G773NII.js");
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-4TTETYDI.js");
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-RC6PEH6Z.js"));
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-SRCSXY6T.js");
1476
- const { killWakeInhibit } = await import("./commands-EWA4HNCM.js");
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-VDWFJKUB.js");
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-ZKJOFASV.js";
7
- import "./chunk-LUW62WGO.js";
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-GU7ABOK5.js.map
20
+ //# sourceMappingURL=agent-registry-GVPWTW77.js.map
@@ -4,7 +4,7 @@ import {
4
4
  makeLocalBuildSource,
5
5
  makeNpmSource,
6
6
  syncSrcRepos
7
- } from "./chunk-S5GD5EJ5.js";
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-POWWTU6I.js.map
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-J6TE3I2T.js")).resetStoreCounter();
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-GU7ABOK5.js");
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-J6TE3I2T.js")).resetStoreCounter();
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-3CACHBDI.js.map
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
- const Db = _require(sharedNm);
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 cards").get();
143
- const stuck = db.prepare("SELECT COUNT(*) as cnt FROM cards WHERE status='running' AND updated_at < datetime('now', '-10 minutes')").get();
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: "better-sqlite3 not available" };
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 { spawnSync } = await import("node:child_process");
246
- const r = spawnSync("abmind", ["doctor", "--json"], { encoding: "utf-8", timeout: 1e4 });
247
- if (r.status === null || r.error) return { name: "mind", status: "skipped", detail: "abmind not on PATH" };
248
- const data = JSON.parse(r.stdout);
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 doctor failed" };
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-5HDSQFT6.js.map
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-B6ZN6COK.js.map
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-ZKJOFASV.js";
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-WQ6HA5OX.js");
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-P2SCNL23.js");
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-J6TE3I2T.js");
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-J6TE3I2T.js");
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-J6TE3I2T.js");
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-5P7IYYU2.js");
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-Q32H6VPU.js.map
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-LUW62WGO.js";
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-VDWFJKUB.js");
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-VDWFJKUB.js");
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-BFDBGESM.js.map
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-LUW62WGO.js";
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-WQ6HA5OX.js");
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-ZKJOFASV.js.map
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
- mod = await import("abmind");
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-UUIHL65U.js.map
82
+ //# sourceMappingURL=chunk-IKUZPMVA.js.map