@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.
- package/CHANGELOG.md +42 -5
- package/README.md +69 -24
- package/dist/{browser-OHRD7YI3.js → browser-4ZHHBD6J.js} +132 -4
- package/dist/browser-4ZHHBD6J.js.map +7 -0
- package/dist/{bundled-46DUK5PG.js → bundled-26SJR7EB.js} +5 -5
- package/dist/{bundled-46DUK5PG.js.map → bundled-26SJR7EB.js.map} +1 -1
- package/dist/{chunk-DYIJTUMY.js → chunk-AON76FHD.js} +113 -83
- package/dist/chunk-AON76FHD.js.map +7 -0
- package/dist/{chunk-AHAON6J7.js → chunk-CNCHYZVD.js} +2 -2
- package/dist/{chunk-AHAON6J7.js.map → chunk-CNCHYZVD.js.map} +1 -1
- package/dist/{chunk-Z2YT2PZN.js → chunk-GYWJUW4E.js} +6 -6
- package/dist/{chunk-Z2YT2PZN.js.map → chunk-GYWJUW4E.js.map} +3 -3
- package/dist/{chunk-7BOHBPB2.js → chunk-JCZBDGBA.js} +3 -3
- package/dist/{chunk-7BOHBPB2.js.map → chunk-JCZBDGBA.js.map} +1 -1
- package/dist/{chunk-KSQOVWP5.js → chunk-MSSHR6SW.js} +6 -6
- package/dist/chunk-MSSHR6SW.js.map +7 -0
- package/dist/index.js +28 -28
- package/dist/index.js.map +2 -2
- package/dist/{install-IY2M3OUQ.js → install-KTEW2CW3.js} +3 -3
- package/dist/{plugin-POMHVGD4.js → plugin-WYUCG6F7.js} +2 -2
- package/dist/{plugin-POMHVGD4.js.map → plugin-WYUCG6F7.js.map} +1 -1
- package/dist/{scheduler-Q7OHNGP6.js → scheduler-VZVHQWGD.js} +3 -3
- package/dist/scheduler-VZVHQWGD.js.map +7 -0
- package/dist/server.js +58 -41
- package/dist/server.js.map +3 -3
- package/dist/{skills-66WRX64H.js → skills-JUHWFBD6.js} +2 -2
- package/dist/skills-spec.js +2 -2
- package/dist/skills-spec.js.map +1 -1
- package/dist/{tools-P5537ASX.js → tools-YNE7ZRPR.js} +2 -2
- package/dist/{tools-P5537ASX.js.map → tools-YNE7ZRPR.js.map} +1 -1
- package/package.json +1 -1
- package/skills/README.md +1 -1
- package/web/dist/assets/index-BBZbK10k.js +130 -0
- package/web/dist/assets/index-BKrFsCQD.css +2 -0
- package/web/dist/index.html +2 -2
- package/dist/browser-OHRD7YI3.js.map +0 -7
- package/dist/chunk-DYIJTUMY.js.map +0 -7
- package/dist/chunk-KSQOVWP5.js.map +0 -7
- package/dist/scheduler-Q7OHNGP6.js.map +0 -7
- package/web/dist/assets/index-BLQ8rPiN.js +0 -130
- package/web/dist/assets/index-IEIkG_jd.css +0 -2
- /package/dist/{install-IY2M3OUQ.js.map → install-KTEW2CW3.js.map} +0 -0
- /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-
|
|
18
|
+
} from "./chunk-AON76FHD.js";
|
|
18
19
|
import {
|
|
19
20
|
findWebDist,
|
|
20
21
|
nodeLocateDeps,
|
|
21
22
|
readPackageVersion
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-GYWJUW4E.js";
|
|
23
24
|
import {
|
|
24
25
|
describeSkillSource
|
|
25
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-JCZBDGBA.js";
|
|
26
27
|
import {
|
|
27
28
|
newId,
|
|
28
29
|
now,
|
|
29
30
|
slugify
|
|
30
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-MSSHR6SW.js";
|
|
31
32
|
import {
|
|
32
33
|
logger
|
|
33
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-CNCHYZVD.js";
|
|
34
35
|
|
|
35
|
-
//
|
|
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
|
-
//
|
|
46
|
+
// daemon/src/app.ts
|
|
46
47
|
import path8 from "node:path";
|
|
47
48
|
|
|
48
|
-
//
|
|
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
|
-
//
|
|
54
|
+
// daemon/src/db/migrations.ts
|
|
54
55
|
import fs from "node:fs";
|
|
55
56
|
import path from "node:path";
|
|
56
57
|
|
|
57
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
1189
|
+
// daemon/src/permissions/autoreview.ts
|
|
1189
1190
|
import { query as query2 } from "@anthropic-ai/claude-agent-sdk";
|
|
1190
1191
|
|
|
1191
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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-
|
|
2247
|
-
const pluginMod = await optionalImport("skill plugin", () => import("./plugin-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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/
|
|
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/
|
|
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
|
});
|