@michael-joseph-miller/ant-bot 0.1.0 → 0.1.2

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 (43) hide show
  1. package/CHANGELOG.md +42 -5
  2. package/README.md +69 -24
  3. package/dist/{browser-OHRD7YI3.js → browser-4ZHHBD6J.js} +132 -4
  4. package/dist/browser-4ZHHBD6J.js.map +7 -0
  5. package/dist/{bundled-46DUK5PG.js → bundled-26SJR7EB.js} +5 -5
  6. package/dist/{bundled-46DUK5PG.js.map → bundled-26SJR7EB.js.map} +1 -1
  7. package/dist/{chunk-DYIJTUMY.js → chunk-AON76FHD.js} +113 -83
  8. package/dist/chunk-AON76FHD.js.map +7 -0
  9. package/dist/{chunk-AHAON6J7.js → chunk-CNCHYZVD.js} +2 -2
  10. package/dist/{chunk-AHAON6J7.js.map → chunk-CNCHYZVD.js.map} +1 -1
  11. package/dist/{chunk-Z2YT2PZN.js → chunk-GYWJUW4E.js} +6 -6
  12. package/dist/{chunk-Z2YT2PZN.js.map → chunk-GYWJUW4E.js.map} +3 -3
  13. package/dist/{chunk-7BOHBPB2.js → chunk-JCZBDGBA.js} +3 -3
  14. package/dist/{chunk-7BOHBPB2.js.map → chunk-JCZBDGBA.js.map} +1 -1
  15. package/dist/{chunk-KSQOVWP5.js → chunk-MSSHR6SW.js} +6 -6
  16. package/dist/chunk-MSSHR6SW.js.map +7 -0
  17. package/dist/index.js +28 -28
  18. package/dist/index.js.map +2 -2
  19. package/dist/{install-IY2M3OUQ.js → install-KTEW2CW3.js} +3 -3
  20. package/dist/{plugin-POMHVGD4.js → plugin-WYUCG6F7.js} +2 -2
  21. package/dist/{plugin-POMHVGD4.js.map → plugin-WYUCG6F7.js.map} +1 -1
  22. package/dist/{scheduler-Q7OHNGP6.js → scheduler-VZVHQWGD.js} +3 -3
  23. package/dist/scheduler-VZVHQWGD.js.map +7 -0
  24. package/dist/server.js +58 -41
  25. package/dist/server.js.map +3 -3
  26. package/dist/{skills-66WRX64H.js → skills-JUHWFBD6.js} +2 -2
  27. package/dist/skills-spec.js +2 -2
  28. package/dist/skills-spec.js.map +1 -1
  29. package/dist/{tools-P5537ASX.js → tools-YNE7ZRPR.js} +2 -2
  30. package/dist/{tools-P5537ASX.js.map → tools-YNE7ZRPR.js.map} +1 -1
  31. package/package.json +1 -1
  32. package/skills/README.md +1 -1
  33. package/web/dist/assets/index-BBZbK10k.js +130 -0
  34. package/web/dist/assets/index-BKrFsCQD.css +2 -0
  35. package/web/dist/index.html +2 -2
  36. package/dist/browser-OHRD7YI3.js.map +0 -7
  37. package/dist/chunk-DYIJTUMY.js.map +0 -7
  38. package/dist/chunk-KSQOVWP5.js.map +0 -7
  39. package/dist/scheduler-Q7OHNGP6.js.map +0 -7
  40. package/web/dist/assets/index-BLQ8rPiN.js +0 -130
  41. package/web/dist/assets/index-IEIkG_jd.css +0 -2
  42. /package/dist/{install-IY2M3OUQ.js.map → install-KTEW2CW3.js.map} +0 -0
  43. /package/dist/{skills-66WRX64H.js.map → skills-JUHWFBD6.js.map} +0 -0
package/dist/server.js CHANGED
@@ -11,28 +11,29 @@ import {
11
11
  LIMIT_ERROR,
12
12
  LimitError,
13
13
  PostMessageRequest,
14
+ ScreencastClientFrameSchema,
14
15
  SettingsPatchSchema,
15
16
  SettingsSchema,
16
17
  UpdateBotRequest
17
- } from "./chunk-DYIJTUMY.js";
18
+ } from "./chunk-AON76FHD.js";
18
19
  import {
19
20
  findWebDist,
20
21
  nodeLocateDeps,
21
22
  readPackageVersion
22
- } from "./chunk-Z2YT2PZN.js";
23
+ } from "./chunk-GYWJUW4E.js";
23
24
  import {
24
25
  describeSkillSource
25
- } from "./chunk-7BOHBPB2.js";
26
+ } from "./chunk-JCZBDGBA.js";
26
27
  import {
27
28
  newId,
28
29
  now,
29
30
  slugify
30
- } from "./chunk-KSQOVWP5.js";
31
+ } from "./chunk-MSSHR6SW.js";
31
32
  import {
32
33
  logger
33
- } from "./chunk-AHAON6J7.js";
34
+ } from "./chunk-CNCHYZVD.js";
34
35
 
35
- // packages/server/src/api/server.ts
36
+ // daemon/src/api/server.ts
36
37
  import path11 from "node:path";
37
38
  import { fileURLToPath as fileURLToPath2 } from "node:url";
38
39
  import { createRequire } from "node:module";
@@ -42,19 +43,19 @@ import multipart from "@fastify/multipart";
42
43
  import websocket from "@fastify/websocket";
43
44
  import fastifyStatic from "@fastify/static";
44
45
 
45
- // packages/server/src/app.ts
46
+ // daemon/src/app.ts
46
47
  import path8 from "node:path";
47
48
 
48
- // packages/server/src/db/db.ts
49
+ // daemon/src/db/db.ts
49
50
  import Database from "better-sqlite3";
50
51
  import fs2 from "node:fs";
51
52
  import path2 from "node:path";
52
53
 
53
- // packages/server/src/db/migrations.ts
54
+ // daemon/src/db/migrations.ts
54
55
  import fs from "node:fs";
55
56
  import path from "node:path";
56
57
 
57
- // packages/server/src/db/schema.ts
58
+ // daemon/src/db/schema.ts
58
59
  var SCHEMA_SQL = `
59
60
  CREATE TABLE IF NOT EXISTS bots (
60
61
  id TEXT PRIMARY KEY, slug TEXT UNIQUE NOT NULL, name TEXT NOT NULL,
@@ -149,7 +150,7 @@ CREATE TRIGGER IF NOT EXISTS messages_au AFTER UPDATE ON messages BEGIN
149
150
  END;
150
151
  `;
151
152
 
152
- // packages/server/src/db/migrations.ts
153
+ // daemon/src/db/migrations.ts
153
154
  var MigrationError = class extends Error {
154
155
  constructor(code, message) {
155
156
  super(message);
@@ -244,7 +245,7 @@ function migrate(db, opts = {}) {
244
245
  return { from, to: target, applied, backupPath };
245
246
  }
246
247
 
247
- // packages/server/src/db/db.ts
248
+ // daemon/src/db/db.ts
248
249
  var log = logger("db");
249
250
  function openDb(file, opts = {}) {
250
251
  if (file !== ":memory:") fs2.mkdirSync(path2.dirname(file), { recursive: true });
@@ -262,7 +263,7 @@ function openDb(file, opts = {}) {
262
263
  return db;
263
264
  }
264
265
 
265
- // packages/server/src/db/store.ts
266
+ // daemon/src/db/store.ts
266
267
  var b = (v) => v === 1 || v === true;
267
268
  var i = (v, d = false) => v ?? d ? 1 : 0;
268
269
  var toBot = (r) => ({
@@ -835,7 +836,7 @@ var Store = class {
835
836
  }
836
837
  };
837
838
 
838
- // packages/server/src/util/bus.ts
839
+ // daemon/src/util/bus.ts
839
840
  import { EventEmitter } from "node:events";
840
841
  var EventBus = class {
841
842
  emitter = new EventEmitter();
@@ -865,7 +866,7 @@ var EventBus = class {
865
866
  }
866
867
  };
867
868
 
868
- // packages/server/src/permissions/rules.ts
869
+ // daemon/src/permissions/rules.ts
869
870
  var log2 = logger("rules");
870
871
  function globToRegExp(glob) {
871
872
  const escaped = glob.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
@@ -954,7 +955,7 @@ function seedBuiltinRules(store) {
954
955
  if (added.length) log2.info(`seeded ${added.length} builtin permission rule(s): ${added.join(", ")}`);
955
956
  }
956
957
 
957
- // packages/server/src/permissions/local.ts
958
+ // daemon/src/permissions/local.ts
958
959
  import path3 from "node:path";
959
960
  var HOME_ISH = /(^|[\s"'=:])(~|\$HOME)\//;
960
961
  var URL_RE = /\b[a-z][a-z0-9+.-]*:\/\/\S+/gi;
@@ -1006,7 +1007,7 @@ function localDecision(policy, reach) {
1006
1007
  return { action: "require", reason: `Touches ${reach.evidence}, outside the shared workspace (your own machine)` };
1007
1008
  }
1008
1009
 
1009
- // packages/server/src/permissions/gateway.ts
1010
+ // daemon/src/permissions/gateway.ts
1010
1011
  var log3 = logger("gateway");
1011
1012
  function summarize(namespacedToolName, input) {
1012
1013
  const o = input ?? {};
@@ -1185,10 +1186,10 @@ var PermissionGateway = class {
1185
1186
  }
1186
1187
  };
1187
1188
 
1188
- // packages/server/src/permissions/autoreview.ts
1189
+ // daemon/src/permissions/autoreview.ts
1189
1190
  import { query as query2 } from "@anthropic-ai/claude-agent-sdk";
1190
1191
 
1191
- // packages/server/src/agent/session.ts
1192
+ // daemon/src/agent/session.ts
1192
1193
  import { query } from "@anthropic-ai/claude-agent-sdk";
1193
1194
  var log4 = logger("agent");
1194
1195
  function resolveModel(tier) {
@@ -1299,7 +1300,7 @@ async function* runTurn(req) {
1299
1300
  }
1300
1301
  }
1301
1302
 
1302
- // packages/server/src/permissions/autoreview.ts
1303
+ // daemon/src/permissions/autoreview.ts
1303
1304
  var log5 = logger("autoreview");
1304
1305
  var SYSTEM = `You are the automated action reviewer for a local AI-teammate system.
1305
1306
  You judge ONE proposed tool call and answer with a single JSON object.
@@ -1384,13 +1385,13 @@ function makeAutoReviewer(getSettings, cwd) {
1384
1385
  }
1385
1386
  }
1386
1387
 
1387
- // packages/server/src/bots/manager.ts
1388
+ // daemon/src/bots/manager.ts
1388
1389
  import path5 from "node:path";
1389
1390
  import fs4 from "node:fs";
1390
1391
  import { createSdkMcpServer, tool } from "@anthropic-ai/claude-agent-sdk";
1391
1392
  import { z } from "zod";
1392
1393
 
1393
- // packages/server/src/memory/memory.ts
1394
+ // daemon/src/memory/memory.ts
1394
1395
  import fs3 from "node:fs";
1395
1396
  import path4 from "node:path";
1396
1397
  function memoryDir(workspace, slug) {
@@ -1429,7 +1430,7 @@ consequential decision.
1429
1430
  ${body}`;
1430
1431
  }
1431
1432
 
1432
- // packages/server/src/bots/prompt.ts
1433
+ // daemon/src/bots/prompt.ts
1433
1434
  function buildSystemPrompt(ctx) {
1434
1435
  const { bot, workspace } = ctx;
1435
1436
  const parts = [];
@@ -1485,7 +1486,7 @@ Say who should take the next step. Keep replies short \u2014 the humans are read
1485
1486
  return parts.join("\n\n");
1486
1487
  }
1487
1488
 
1488
- // packages/server/src/bots/manager.ts
1489
+ // daemon/src/bots/manager.ts
1489
1490
  var log6 = logger("bots");
1490
1491
  var BotManager = class {
1491
1492
  constructor(deps) {
@@ -1886,11 +1887,11 @@ function summarizeTool(name, input) {
1886
1887
  return j.length > 160 ? `${j.slice(0, 160)}\u2026` : j;
1887
1888
  }
1888
1889
 
1889
- // packages/server/src/config/config.ts
1890
+ // daemon/src/config/config.ts
1890
1891
  import fs6 from "node:fs";
1891
1892
  import { parse as parseToml, stringify as stringifyToml } from "smol-toml";
1892
1893
 
1893
- // packages/server/src/config/paths.ts
1894
+ // daemon/src/config/paths.ts
1894
1895
  import os from "node:os";
1895
1896
  import path6 from "node:path";
1896
1897
  import fs5 from "node:fs";
@@ -1924,7 +1925,7 @@ function ensureDirs(p) {
1924
1925
  }
1925
1926
  }
1926
1927
 
1927
- // packages/server/src/config/config.ts
1928
+ // daemon/src/config/config.ts
1928
1929
  var DEFAULT_PORT = 4780;
1929
1930
  var DEFAULT_HOST = "127.0.0.1";
1930
1931
  function loadConfig(root) {
@@ -1959,7 +1960,7 @@ function writeConfig(cfg) {
1959
1960
  );
1960
1961
  }
1961
1962
 
1962
- // packages/server/src/permissions/secrets.ts
1963
+ // daemon/src/permissions/secrets.ts
1963
1964
  import fs7 from "node:fs";
1964
1965
  import path7 from "node:path";
1965
1966
  import crypto from "node:crypto";
@@ -2142,7 +2143,7 @@ var SecretsService = class {
2142
2143
  }
2143
2144
  };
2144
2145
 
2145
- // packages/server/src/app.ts
2146
+ // daemon/src/app.ts
2146
2147
  var log8 = logger("app");
2147
2148
  async function optionalImport(name, load) {
2148
2149
  try {
@@ -2243,8 +2244,8 @@ async function createApp(opts = {}) {
2243
2244
  }
2244
2245
  async function wireSkills(app) {
2245
2246
  try {
2246
- const mod = await optionalImport("skills", () => import("./skills-66WRX64H.js"));
2247
- const pluginMod = await optionalImport("skill plugin", () => import("./plugin-POMHVGD4.js"));
2247
+ const mod = await optionalImport("skills", () => import("./skills-JUHWFBD6.js"));
2248
+ const pluginMod = await optionalImport("skill plugin", () => import("./plugin-WYUCG6F7.js"));
2248
2249
  const Ctor = mod?.SkillStore ?? mod?.default;
2249
2250
  if (!Ctor) return void log8.warn("skills subsystem unavailable: no SkillStore export");
2250
2251
  const pluginRoot = app.cfg.paths.skills;
@@ -2256,7 +2257,7 @@ async function wireSkills(app) {
2256
2257
  }
2257
2258
  const filesDir = pluginMod?.skillFilesDir?.(pluginRoot) ?? pluginRoot;
2258
2259
  app.skills = new Ctor(app.store, filesDir);
2259
- const bundledMod = await optionalImport("bundled skills", () => import("./bundled-46DUK5PG.js"));
2260
+ const bundledMod = await optionalImport("bundled skills", () => import("./bundled-26SJR7EB.js"));
2260
2261
  if (bundledMod?.syncBundledSkills) {
2261
2262
  try {
2262
2263
  const decisions = bundledMod.syncBundledSkills(filesDir);
@@ -2285,12 +2286,12 @@ async function wireSkills(app) {
2285
2286
  }
2286
2287
  async function wireBrowser(app) {
2287
2288
  try {
2288
- const mod = await optionalImport("browser", () => import("./browser-OHRD7YI3.js"));
2289
+ const mod = await optionalImport("browser", () => import("./browser-4ZHHBD6J.js"));
2289
2290
  const Ctor = mod?.BrowserService ?? mod?.default;
2290
2291
  if (!Ctor) return void log8.warn("browser subsystem unavailable: no BrowserService export");
2291
2292
  const svc = new Ctor({ profileDir: app.cfg.paths.browserProfile, bus: app.bus, headless: true });
2292
2293
  let toolsMod = null;
2293
- toolsMod = await optionalImport("browser tools", () => import("./tools-P5537ASX.js"));
2294
+ toolsMod = await optionalImport("browser tools", () => import("./tools-YNE7ZRPR.js"));
2294
2295
  const cache = /* @__PURE__ */ new Map();
2295
2296
  svc.toolServerFor = (botId) => {
2296
2297
  if (!toolsMod?.createBrowserToolServer) return void 0;
@@ -2309,7 +2310,7 @@ async function wireBrowser(app) {
2309
2310
  }
2310
2311
  async function wireScheduler(app) {
2311
2312
  try {
2312
- const mod = await optionalImport("scheduler", () => import("./scheduler-Q7OHNGP6.js"));
2313
+ const mod = await optionalImport("scheduler", () => import("./scheduler-VZVHQWGD.js"));
2313
2314
  const Ctor = mod?.Scheduler ?? mod?.default;
2314
2315
  if (!Ctor) return void log8.warn("scheduler subsystem unavailable: no Scheduler export");
2315
2316
  app.scheduler = new Ctor({
@@ -2351,7 +2352,7 @@ function workspaceRelative(root, p) {
2351
2352
  return resolved;
2352
2353
  }
2353
2354
 
2354
- // packages/server/src/bots/groups.ts
2355
+ // daemon/src/bots/groups.ts
2355
2356
  import { query as query3 } from "@anthropic-ai/claude-agent-sdk";
2356
2357
  var log9 = logger("groups");
2357
2358
  async function routeGroupMessage(args) {
@@ -2402,7 +2403,7 @@ function parseMentions(text, members) {
2402
2403
  return { botIds, everyone };
2403
2404
  }
2404
2405
 
2405
- // packages/server/src/api/routes-core.ts
2406
+ // daemon/src/api/routes-core.ts
2406
2407
  import fs8 from "node:fs";
2407
2408
  import path9 from "node:path";
2408
2409
  import { fileURLToPath } from "node:url";
@@ -2581,7 +2582,7 @@ ${attachments.map((a) => `- ${a.name} \u2192 ${a.path}`).join("\n")}` : "";
2581
2582
  });
2582
2583
  }
2583
2584
 
2584
- // packages/server/src/api/routes-ops.ts
2585
+ // daemon/src/api/routes-ops.ts
2585
2586
  import fs9 from "node:fs";
2586
2587
  import path10 from "node:path";
2587
2588
  function registerOpsRoutes(f, app) {
@@ -2853,7 +2854,7 @@ function registerOpsRoutes(f, app) {
2853
2854
  });
2854
2855
  }
2855
2856
 
2856
- // packages/server/src/api/server.ts
2857
+ // daemon/src/api/server.ts
2857
2858
  var log10 = logger("server");
2858
2859
  var require_ = createRequire(import.meta.url);
2859
2860
  function resolveWebDist() {
@@ -2932,6 +2933,22 @@ async function startServer(opts = {}) {
2932
2933
  socket.close();
2933
2934
  return;
2934
2935
  }
2936
+ socket.on("message", (raw) => {
2937
+ if (!app.browser?.forwardInput) return;
2938
+ let frame;
2939
+ try {
2940
+ frame = ScreencastClientFrameSchema.parse(JSON.parse(raw.toString()));
2941
+ } catch {
2942
+ return;
2943
+ }
2944
+ void app.browser.forwardInput(botId, frame.input).catch((err) => {
2945
+ try {
2946
+ if (socket.readyState === 1)
2947
+ socket.send(JSON.stringify({ type: "input-error", message: err.message }));
2948
+ } catch {
2949
+ }
2950
+ });
2951
+ });
2935
2952
  socket.on("close", () => stop?.());
2936
2953
  socket.on("error", () => stop?.());
2937
2954
  });
@@ -2946,7 +2963,7 @@ async function startServer(opts = {}) {
2946
2963
  });
2947
2964
  log10.info(`serving UI from ${dist}`);
2948
2965
  } else {
2949
- log10.warn("web UI not built \u2014 run `pnpm --filter @antbot/web build`");
2966
+ log10.warn("web UI not built \u2014 run `pnpm --filter @antbot/ui build`");
2950
2967
  fastify.setNotFoundHandler((req, reply) => {
2951
2968
  if (req.url.startsWith("/api")) return reply.code(404).send({ error: "Not found" });
2952
2969
  return reply.type("text/html").send(
@@ -2954,7 +2971,7 @@ async function startServer(opts = {}) {
2954
2971
  <body style="font-family:system-ui;background:#0b0d10;color:#e6e8eb;padding:3rem">
2955
2972
  <h1>ant-bot daemon is running</h1>
2956
2973
  <p>The web UI has not been built yet. Run:</p>
2957
- <pre style="background:#151922;padding:1rem;border-radius:8px">pnpm --filter @antbot/web build</pre>
2974
+ <pre style="background:#151922;padding:1rem;border-radius:8px">pnpm --filter @antbot/ui build</pre>
2958
2975
  <p>The API is live at <code>/api/health</code>.</p>`
2959
2976
  );
2960
2977
  });