@jait/gateway 0.1.67 → 0.1.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +22 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/schema.d.ts +178 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +15 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/dist/routes/maintenance.d.ts +19 -0
- package/dist/routes/maintenance.d.ts.map +1 -0
- package/dist/routes/maintenance.js +90 -0
- package/dist/routes/maintenance.js.map +1 -0
- package/dist/routes/network.d.ts +1 -1
- package/dist/routes/network.d.ts.map +1 -1
- package/dist/routes/network.js +47 -5
- package/dist/routes/network.js.map +1 -1
- package/dist/scheduler/service.d.ts.map +1 -1
- package/dist/scheduler/service.js +26 -12
- package/dist/scheduler/service.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -1
- package/dist/server.js.map +1 -1
- package/dist/services/maintenance.d.ts +83 -0
- package/dist/services/maintenance.d.ts.map +1 -0
- package/dist/services/maintenance.js +203 -0
- package/dist/services/maintenance.js.map +1 -0
- package/dist/services/notifications.d.ts +45 -0
- package/dist/services/notifications.d.ts.map +1 -0
- package/dist/services/notifications.js +50 -0
- package/dist/services/notifications.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/maintenance-tools.d.ts +14 -0
- package/dist/tools/maintenance-tools.d.ts.map +1 -0
- package/dist/tools/maintenance-tools.js +96 -0
- package/dist/tools/maintenance-tools.js.map +1 -0
- package/dist/tools/network-tools.d.ts.map +1 -1
- package/dist/tools/network-tools.js +36 -2
- package/dist/tools/network-tools.js.map +1 -1
- package/dist/ws.d.ts +2 -0
- package/dist/ws.d.ts.map +1 -1
- package/dist/ws.js +25 -0
- package/dist/ws.js.map +1 -1
- package/package.json +3 -1
- package/web-dist/assets/{index-DbQ9kk74.js → index-Bv4pc6dO.js} +201 -201
- package/web-dist/dist/apple-touch-icon.png +0 -0
- package/web-dist/dist/assets/index-Bv4pc6dO.js +804 -0
- package/web-dist/dist/assets/index-CCOWLHCG.css +32 -0
- package/web-dist/dist/favicon-16x16.png +0 -0
- package/web-dist/dist/favicon-32x32.png +0 -0
- package/web-dist/dist/icon.svg +17 -0
- package/web-dist/dist/index.html +17 -0
- package/web-dist/index.html +1 -1
- package/web-dist/assets/index-B87MjRBO.js +0 -2
- package/web-dist/assets/web-BDAa97kk.js +0 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MaintenanceService — supervised self-test and self-fix pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Flow:
|
|
5
|
+
* 1. Cron triggers a maintenance run for a repo
|
|
6
|
+
* 2. Runs configured checks (typecheck, test, lint) via shell
|
|
7
|
+
* 3. Parses failures from output
|
|
8
|
+
* 4. If failures found → creates a Plan with proposed fix tasks
|
|
9
|
+
* 5. Broadcasts results via WS so the user can supervise
|
|
10
|
+
* 6. Tasks stay "proposed" until the user approves & starts them
|
|
11
|
+
*
|
|
12
|
+
* The user stays in the loop: they see every run, every failure, and
|
|
13
|
+
* every proposed fix before any agent thread touches code.
|
|
14
|
+
*/
|
|
15
|
+
import { eq, desc } from "drizzle-orm";
|
|
16
|
+
import { execSync } from "node:child_process";
|
|
17
|
+
import { existsSync } from "node:fs";
|
|
18
|
+
import { scheduledJobRuns } from "../db/schema.js";
|
|
19
|
+
import { uuidv7 } from "../db/uuidv7.js";
|
|
20
|
+
import { newTaskId } from "./plans.js";
|
|
21
|
+
const DEFAULT_CHECKS = [
|
|
22
|
+
{ name: "Typecheck", command: "bun run typecheck" },
|
|
23
|
+
{ name: "Tests", command: "bun run test" },
|
|
24
|
+
{ name: "Lint", command: "bun run lint" },
|
|
25
|
+
];
|
|
26
|
+
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
27
|
+
// ── Service ──────────────────────────────────────────────────────────
|
|
28
|
+
export class MaintenanceService {
|
|
29
|
+
db;
|
|
30
|
+
planService;
|
|
31
|
+
repoService;
|
|
32
|
+
constructor(db, planService, repoService) {
|
|
33
|
+
this.db = db;
|
|
34
|
+
this.planService = planService;
|
|
35
|
+
this.repoService = repoService;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Run maintenance checks for ALL accessible repositories.
|
|
39
|
+
* Skips repos whose paths don't exist locally.
|
|
40
|
+
*/
|
|
41
|
+
async runAll(jobId, config) {
|
|
42
|
+
const repos = this.repoService.list();
|
|
43
|
+
const results = [];
|
|
44
|
+
for (const repo of repos) {
|
|
45
|
+
if (!existsSync(repo.localPath))
|
|
46
|
+
continue;
|
|
47
|
+
try {
|
|
48
|
+
const result = await this.runForRepo(repo.id, jobId, config);
|
|
49
|
+
results.push(result);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.error(`Maintenance failed for ${repo.name}:`, err);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return results;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Run maintenance checks for a specific repository.
|
|
59
|
+
* Returns structured results; creates a fix plan if anything failed.
|
|
60
|
+
*/
|
|
61
|
+
async runForRepo(repoId, jobId, config) {
|
|
62
|
+
const repo = this.repoService.getById(repoId);
|
|
63
|
+
if (!repo)
|
|
64
|
+
throw new Error(`Repository not found: ${repoId}`);
|
|
65
|
+
if (!existsSync(repo.localPath)) {
|
|
66
|
+
throw new Error(`Repository path not accessible: ${repo.localPath}`);
|
|
67
|
+
}
|
|
68
|
+
const checks = config?.checks ?? DEFAULT_CHECKS;
|
|
69
|
+
const timeoutMs = config?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
70
|
+
const runId = uuidv7();
|
|
71
|
+
const startedAt = new Date().toISOString();
|
|
72
|
+
// Persist run as "running"
|
|
73
|
+
this.db.insert(scheduledJobRuns).values({
|
|
74
|
+
id: runId,
|
|
75
|
+
jobId,
|
|
76
|
+
status: "running",
|
|
77
|
+
triggeredBy: "maintenance",
|
|
78
|
+
startedAt,
|
|
79
|
+
}).run();
|
|
80
|
+
const results = [];
|
|
81
|
+
for (const check of checks) {
|
|
82
|
+
const checkStart = Date.now();
|
|
83
|
+
let output = "";
|
|
84
|
+
let passed = false;
|
|
85
|
+
try {
|
|
86
|
+
output = execSync(check.command, {
|
|
87
|
+
cwd: repo.localPath,
|
|
88
|
+
timeout: timeoutMs,
|
|
89
|
+
encoding: "utf-8",
|
|
90
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
91
|
+
maxBuffer: 1024 * 1024, // 1MB
|
|
92
|
+
env: { ...process.env, CI: "true", FORCE_COLOR: "0" },
|
|
93
|
+
});
|
|
94
|
+
passed = true;
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
if (err && typeof err === "object" && "stdout" in err) {
|
|
98
|
+
const execErr = err;
|
|
99
|
+
output = [execErr.stdout ?? "", execErr.stderr ?? ""].filter(Boolean).join("\n");
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
output = err instanceof Error ? err.message : String(err);
|
|
103
|
+
}
|
|
104
|
+
passed = false;
|
|
105
|
+
}
|
|
106
|
+
results.push({
|
|
107
|
+
name: check.name,
|
|
108
|
+
command: check.command,
|
|
109
|
+
passed,
|
|
110
|
+
output: output.slice(0, 50_000), // cap stored output
|
|
111
|
+
durationMs: Date.now() - checkStart,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
const allPassed = results.every((r) => r.passed);
|
|
115
|
+
const completedAt = new Date().toISOString();
|
|
116
|
+
// Create fix plan if there were failures
|
|
117
|
+
let planId;
|
|
118
|
+
if (!allPassed) {
|
|
119
|
+
planId = this.createFixPlan(repo, results, config?.preferredProvider);
|
|
120
|
+
}
|
|
121
|
+
// Persist run result
|
|
122
|
+
const outputSummary = results
|
|
123
|
+
.map((r) => `${r.passed ? "✓" : "✗"} ${r.name} (${r.durationMs}ms)`)
|
|
124
|
+
.join("\n");
|
|
125
|
+
const errorSummary = results
|
|
126
|
+
.filter((r) => !r.passed)
|
|
127
|
+
.map((r) => `${r.name}: ${r.output.slice(0, 2000)}`)
|
|
128
|
+
.join("\n---\n");
|
|
129
|
+
this.db.update(scheduledJobRuns).set({
|
|
130
|
+
status: allPassed ? "completed" : "failed",
|
|
131
|
+
output: outputSummary,
|
|
132
|
+
error: allPassed ? null : errorSummary.slice(0, 50_000),
|
|
133
|
+
planId: planId ?? null,
|
|
134
|
+
completedAt,
|
|
135
|
+
}).where(eq(scheduledJobRuns.id, runId)).run();
|
|
136
|
+
return {
|
|
137
|
+
id: runId,
|
|
138
|
+
jobId,
|
|
139
|
+
repoId: repo.id,
|
|
140
|
+
repoName: repo.name,
|
|
141
|
+
checks: results,
|
|
142
|
+
allPassed,
|
|
143
|
+
planId,
|
|
144
|
+
startedAt,
|
|
145
|
+
completedAt,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/** Get recent runs, optionally filtered by jobId. */
|
|
149
|
+
listRuns(jobId, limit = 50) {
|
|
150
|
+
if (jobId) {
|
|
151
|
+
return this.db
|
|
152
|
+
.select()
|
|
153
|
+
.from(scheduledJobRuns)
|
|
154
|
+
.where(eq(scheduledJobRuns.jobId, jobId))
|
|
155
|
+
.orderBy(desc(scheduledJobRuns.startedAt))
|
|
156
|
+
.limit(limit)
|
|
157
|
+
.all();
|
|
158
|
+
}
|
|
159
|
+
return this.db
|
|
160
|
+
.select()
|
|
161
|
+
.from(scheduledJobRuns)
|
|
162
|
+
.orderBy(desc(scheduledJobRuns.startedAt))
|
|
163
|
+
.limit(limit)
|
|
164
|
+
.all();
|
|
165
|
+
}
|
|
166
|
+
/** Get a single run by ID. */
|
|
167
|
+
getRun(id) {
|
|
168
|
+
return this.db
|
|
169
|
+
.select()
|
|
170
|
+
.from(scheduledJobRuns)
|
|
171
|
+
.where(eq(scheduledJobRuns.id, id))
|
|
172
|
+
.get();
|
|
173
|
+
}
|
|
174
|
+
// ── Private ──────────────────────────────────────────────────────
|
|
175
|
+
/**
|
|
176
|
+
* Parse check failures and create a Plan with proposed fix tasks.
|
|
177
|
+
* Tasks are left as "proposed" — the user must approve before they run.
|
|
178
|
+
*/
|
|
179
|
+
createFixPlan(repo, results, _preferredProvider) {
|
|
180
|
+
const failures = results.filter((r) => !r.passed);
|
|
181
|
+
const tasks = failures.map((failure) => ({
|
|
182
|
+
id: newTaskId(),
|
|
183
|
+
title: `Fix ${failure.name} failures`,
|
|
184
|
+
description: [
|
|
185
|
+
`The \`${failure.command}\` check failed. Fix the errors below.`,
|
|
186
|
+
"",
|
|
187
|
+
"```",
|
|
188
|
+
failure.output.slice(0, 8000),
|
|
189
|
+
"```",
|
|
190
|
+
"",
|
|
191
|
+
"Run the same command again after fixing to verify.",
|
|
192
|
+
].join("\n"),
|
|
193
|
+
status: "proposed",
|
|
194
|
+
}));
|
|
195
|
+
const plan = this.planService.create({
|
|
196
|
+
repoId: repo.id,
|
|
197
|
+
title: `Maintenance: ${failures.length} check(s) failed — ${new Date().toLocaleDateString()}`,
|
|
198
|
+
tasks,
|
|
199
|
+
});
|
|
200
|
+
return plan.id;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=maintenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/services/maintenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NotificationService — broadcasts notifications to all connected clients.
|
|
3
|
+
*
|
|
4
|
+
* Sends a WS "notification" event that each client handles according to
|
|
5
|
+
* its platform:
|
|
6
|
+
* - Electron desktop → native toast via desktop:notify IPC
|
|
7
|
+
* - Web browser → Notification API (with permission)
|
|
8
|
+
* - Android/Capacitor → local notification plugin
|
|
9
|
+
*
|
|
10
|
+
* Notifications are fire-and-forget; the gateway doesn't track delivery.
|
|
11
|
+
* All supervision happens in real-time via connected clients.
|
|
12
|
+
*/
|
|
13
|
+
import type { WsControlPlane } from "../ws.js";
|
|
14
|
+
export type NotificationLevel = "info" | "success" | "warning" | "error";
|
|
15
|
+
export interface JaitNotification {
|
|
16
|
+
/** Unique ID for deduplication on the client */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Notification title (short) */
|
|
19
|
+
title: string;
|
|
20
|
+
/** Notification body (detail) */
|
|
21
|
+
body: string;
|
|
22
|
+
/** Severity level */
|
|
23
|
+
level: NotificationLevel;
|
|
24
|
+
/** Optional deep-link path within the Jait UI (e.g. "/plans/abc123") */
|
|
25
|
+
link?: string;
|
|
26
|
+
/** ISO timestamp */
|
|
27
|
+
timestamp: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class NotificationService {
|
|
30
|
+
private ws;
|
|
31
|
+
constructor(ws: WsControlPlane);
|
|
32
|
+
/**
|
|
33
|
+
* Send a notification to all connected clients.
|
|
34
|
+
*/
|
|
35
|
+
send(notification: Omit<JaitNotification, "timestamp">): void;
|
|
36
|
+
/** Shorthand for info-level notifications */
|
|
37
|
+
info(title: string, body: string, link?: string): void;
|
|
38
|
+
/** Shorthand for success-level notifications */
|
|
39
|
+
success(title: string, body: string, link?: string): void;
|
|
40
|
+
/** Shorthand for warning-level notifications */
|
|
41
|
+
warning(title: string, body: string, link?: string): void;
|
|
42
|
+
/** Shorthand for error-level notifications */
|
|
43
|
+
error(title: string, body: string, link?: string): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=notifications.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/services/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,KAAK,EAAE,iBAAiB,CAAC;IACzB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,mBAAmB;IAClB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEtC;;OAEG;IACH,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,IAAI;IAc7D,6CAA6C;IAC7C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAItD,gDAAgD;IAChD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzD,gDAAgD;IAChD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzD,8CAA8C;IAC9C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;CAGxD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NotificationService — broadcasts notifications to all connected clients.
|
|
3
|
+
*
|
|
4
|
+
* Sends a WS "notification" event that each client handles according to
|
|
5
|
+
* its platform:
|
|
6
|
+
* - Electron desktop → native toast via desktop:notify IPC
|
|
7
|
+
* - Web browser → Notification API (with permission)
|
|
8
|
+
* - Android/Capacitor → local notification plugin
|
|
9
|
+
*
|
|
10
|
+
* Notifications are fire-and-forget; the gateway doesn't track delivery.
|
|
11
|
+
* All supervision happens in real-time via connected clients.
|
|
12
|
+
*/
|
|
13
|
+
export class NotificationService {
|
|
14
|
+
ws;
|
|
15
|
+
constructor(ws) {
|
|
16
|
+
this.ws = ws;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Send a notification to all connected clients.
|
|
20
|
+
*/
|
|
21
|
+
send(notification) {
|
|
22
|
+
const payload = {
|
|
23
|
+
...notification,
|
|
24
|
+
timestamp: new Date().toISOString(),
|
|
25
|
+
};
|
|
26
|
+
this.ws.broadcastAll({
|
|
27
|
+
type: "notification",
|
|
28
|
+
sessionId: "",
|
|
29
|
+
timestamp: payload.timestamp,
|
|
30
|
+
payload,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** Shorthand for info-level notifications */
|
|
34
|
+
info(title, body, link) {
|
|
35
|
+
this.send({ id: `notif-${Date.now()}`, title, body, level: "info", link });
|
|
36
|
+
}
|
|
37
|
+
/** Shorthand for success-level notifications */
|
|
38
|
+
success(title, body, link) {
|
|
39
|
+
this.send({ id: `notif-${Date.now()}`, title, body, level: "success", link });
|
|
40
|
+
}
|
|
41
|
+
/** Shorthand for warning-level notifications */
|
|
42
|
+
warning(title, body, link) {
|
|
43
|
+
this.send({ id: `notif-${Date.now()}`, title, body, level: "warning", link });
|
|
44
|
+
}
|
|
45
|
+
/** Shorthand for error-level notifications */
|
|
46
|
+
error(title, body, link) {
|
|
47
|
+
this.send({ id: `notif-${Date.now()}`, title, body, level: "error", link });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/services/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsBH,MAAM,OAAO,mBAAmB;IACV;IAApB,YAAoB,EAAkB;QAAlB,OAAE,GAAF,EAAE,CAAgB;IAAG,CAAC;IAE1C;;OAEG;IACH,IAAI,CAAC,YAAiD;QACpD,MAAM,OAAO,GAAqB;YAChC,GAAG,YAAY;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;YACnB,IAAI,EAAE,cAA6B;YACnC,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC,KAAa,EAAE,IAAY,EAAE,IAAa;QAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,gDAAgD;IAChD,OAAO,CAAC,KAAa,EAAE,IAAY,EAAE,IAAa;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,gDAAgD;IAChD,OAAO,CAAC,KAAa,EAAE,IAAY,EAAE,IAAa;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,IAAa;QAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;CACF"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export { createAgentSpawnTool } from "./agent-tools.js";
|
|
|
14
14
|
export { createThreadControlTool } from "./thread-tools.js";
|
|
15
15
|
export { createNetworkScanTool, getLatestNetworkScan, setLatestNetworkScan } from "./network-tools.js";
|
|
16
16
|
export { createRedeployTool } from "./redeploy-tools.js";
|
|
17
|
+
export { createMaintenanceRunTool } from "./maintenance-tools.js";
|
|
17
18
|
export { createToolsListTool, createToolsSearchTool } from "./meta-tools.js";
|
|
18
19
|
export { McpManager, wrapMcpTool, registerMcpTools, unregisterMcpTools, type McpServerConfig, type McpConnection } from "./mcp-bridge.js";
|
|
19
20
|
export { ToolName, type ToolNameValue } from "./tool-names.js";
|
|
@@ -49,6 +50,8 @@ export interface ToolRegistryDeps {
|
|
|
49
50
|
};
|
|
50
51
|
threadService?: ThreadService;
|
|
51
52
|
providerRegistry?: ProviderRegistry;
|
|
53
|
+
maintenanceService?: import("../services/maintenance.js").MaintenanceService;
|
|
54
|
+
notifications?: import("../services/notifications.js").NotificationService;
|
|
52
55
|
/** Graceful shutdown callback — needed by the redeploy tool */
|
|
53
56
|
shutdown?: () => Promise<void>;
|
|
54
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -13,6 +13,7 @@ export { createAgentSpawnTool } from "./agent-tools.js";
|
|
|
13
13
|
export { createThreadControlTool } from "./thread-tools.js";
|
|
14
14
|
export { createNetworkScanTool, getLatestNetworkScan, setLatestNetworkScan } from "./network-tools.js";
|
|
15
15
|
export { createRedeployTool } from "./redeploy-tools.js";
|
|
16
|
+
export { createMaintenanceRunTool } from "./maintenance-tools.js";
|
|
16
17
|
export { createToolsListTool, createToolsSearchTool } from "./meta-tools.js";
|
|
17
18
|
export { McpManager, wrapMcpTool, registerMcpTools, unregisterMcpTools } from "./mcp-bridge.js";
|
|
18
19
|
export { ToolName } from "./tool-names.js";
|
|
@@ -35,6 +36,7 @@ import { createAgentSpawnTool } from "./agent-tools.js";
|
|
|
35
36
|
import { createThreadControlTool } from "./thread-tools.js";
|
|
36
37
|
import { createNetworkScanTool } from "./network-tools.js";
|
|
37
38
|
import { createRedeployTool } from "./redeploy-tools.js";
|
|
39
|
+
import { createMaintenanceRunTool } from "./maintenance-tools.js";
|
|
38
40
|
import { createToolsListTool, createToolsSearchTool } from "./meta-tools.js";
|
|
39
41
|
import { inferContextWindow } from "../config.js";
|
|
40
42
|
// ── Core tools (simplified set of 8) ────────────────────────────────
|
|
@@ -144,6 +146,10 @@ export function createToolRegistry(surfaceRegistry, deps = {}) {
|
|
|
144
146
|
tools.register(createBrowserSandboxStartTool());
|
|
145
147
|
// Network tools
|
|
146
148
|
tools.register(createNetworkScanTool());
|
|
149
|
+
// Maintenance tools
|
|
150
|
+
if (deps.maintenanceService) {
|
|
151
|
+
tools.register(createMaintenanceRunTool(deps.maintenanceService, deps.notifications));
|
|
152
|
+
}
|
|
147
153
|
// Agent spawn (sub-agent) tool — needs config for LLM settings
|
|
148
154
|
if (deps.config) {
|
|
149
155
|
const agentDeps = {
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC/H,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAA4C,MAAM,iBAAiB,CAAC;AAC1I,OAAO,EAAE,QAAQ,EAAsB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAyB,MAAM,eAAe,CAAC;AACzE,OAAO,EAEL,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,sBAAsB,GAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,GAIf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GAUjB,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC/H,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAAkB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIlE,uEAAuE;AACvE,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC/H,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAA4C,MAAM,iBAAiB,CAAC;AAC1I,OAAO,EAAE,QAAQ,EAAsB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAyB,MAAM,eAAe,CAAC;AACzE,OAAO,EAEL,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,sBAAsB,GAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,GAIf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GAUjB,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC/H,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAAkB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIlE,uEAAuE;AACvE,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AAqBzB,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAChC,eAAgC,EAChC,OAAyB,EAAE;IAE3B,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;IAEjC,uEAAuE;IACvE,uDAAuD;IACvD,uEAAuE;IACvE,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;IAClD,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAChC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IACjC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,eAAe;QACf,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC,CAAC;IACJ,8DAA8D;IAE9D,uEAAuE;IACvE,gEAAgE;IAChE,+DAA+D;IAC/D,uEAAuE;IAEvE,iEAAiE;IACjE,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,CAAC;IAE1D,iEAAiE;IACjE,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;IACpD,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;IACpD,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;IAEpD,WAAW;IACX,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACpC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEtC,6BAA6B;IAC7B,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC;IACxD,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC;IACzD,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC;IAExD,+DAA+D;IAC/D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,sBAAsB;IACtB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,CAAC,QAAQ,CACZ,uBAAuB,CAAC;YACtB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,KAAK,CAAC,QAAQ,CACZ,kBAAkB,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,eAAe;IACf,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3D,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChD,KAAK,CAAC,QAAQ,CACZ,uBAAuB,CAAC;YACtB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,eAAe;SAChC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IAE7C,sBAAsB;IACtB,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC3D,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC3D,KAAK,MAAM,IAAI,IAAI,6BAA6B,CAAC,eAAe,CAAC,EAAE,CAAC;QAClE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACtC,KAAK,CAAC,QAAQ,CAAC,6BAA6B,EAAE,CAAC,CAAC;IAEhD,gBAAgB;IAChB,KAAK,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAExC,oBAAoB;IACpB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,+DAA+D;IAC/D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG;YAChB,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,CAAC,OAA6C,EAAE,EAAE;gBAC9D,MAAM,cAAc,GAClB,OAAO,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,MAAO,CAAC,WAAW,CAAC;gBACxE,OAAO;oBACL,YAAY,EACV,OAAO,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,MAAO,CAAC,YAAY;oBAC1E,aAAa,EACX,OAAO,CAAC,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,MAAO,CAAC,aAAa;oBAC5E,WAAW,EAAE,cAAc;oBAC3B,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE;wBACtD,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC;wBACpC,CAAC,CAAC,IAAI,CAAC,MAAO,CAAC,aAAa;iBAC/B,CAAC;YACJ,CAAC;SACF,CAAC;QACF,gCAAgC;QAChC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,wDAAwD;QACxD,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* maintenance.run tool — invoked by the scheduler to run self-test checks
|
|
3
|
+
* on a repository and create fix plans when failures are found.
|
|
4
|
+
*
|
|
5
|
+
* Input: { repoId: string }
|
|
6
|
+
* The tool runs all configured checks, persists results, and creates
|
|
7
|
+
* a Plan with proposed tasks if anything fails. The user supervises
|
|
8
|
+
* by reviewing and approving plan tasks before agent threads start.
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolDefinition } from "./contracts.js";
|
|
11
|
+
import type { MaintenanceService } from "../services/maintenance.js";
|
|
12
|
+
import type { NotificationService } from "../services/notifications.js";
|
|
13
|
+
export declare function createMaintenanceRunTool(maintenanceService: MaintenanceService, notifications?: NotificationService): ToolDefinition;
|
|
14
|
+
//# sourceMappingURL=maintenance-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance-tools.d.ts","sourceRoot":"","sources":["../../src/tools/maintenance-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,wBAAgB,wBAAwB,CACtC,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,CAAC,EAAE,mBAAmB,GAClC,cAAc,CAmGhB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* maintenance.run tool — invoked by the scheduler to run self-test checks
|
|
3
|
+
* on a repository and create fix plans when failures are found.
|
|
4
|
+
*
|
|
5
|
+
* Input: { repoId: string }
|
|
6
|
+
* The tool runs all configured checks, persists results, and creates
|
|
7
|
+
* a Plan with proposed tasks if anything fails. The user supervises
|
|
8
|
+
* by reviewing and approving plan tasks before agent threads start.
|
|
9
|
+
*/
|
|
10
|
+
export function createMaintenanceRunTool(maintenanceService, notifications) {
|
|
11
|
+
return {
|
|
12
|
+
name: "maintenance.run",
|
|
13
|
+
description: "Run maintenance checks (typecheck, test, lint) on a repository. " +
|
|
14
|
+
"Creates a fix plan with proposed tasks if any check fails. " +
|
|
15
|
+
"If repoId is omitted, checks all accessible repositories.",
|
|
16
|
+
tier: "standard",
|
|
17
|
+
parameters: {
|
|
18
|
+
type: "object",
|
|
19
|
+
properties: {
|
|
20
|
+
repoId: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: "ID of the repository to check. Omit to check all repos.",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
execute: async (input, context) => {
|
|
27
|
+
const { repoId } = input ?? {};
|
|
28
|
+
const jobId = context.actionId ?? `manual-${Date.now()}`;
|
|
29
|
+
try {
|
|
30
|
+
if (repoId) {
|
|
31
|
+
const result = await maintenanceService.runForRepo(repoId, jobId);
|
|
32
|
+
const summary = result.checks
|
|
33
|
+
.map((c) => `${c.passed ? "✓" : "✗"} ${c.name} (${c.durationMs}ms)`)
|
|
34
|
+
.join("\n");
|
|
35
|
+
const msg = result.allPassed
|
|
36
|
+
? "All checks passed"
|
|
37
|
+
: `${result.checks.filter((c) => !c.passed).length} check(s) failed — fix plan created`;
|
|
38
|
+
if (notifications) {
|
|
39
|
+
if (result.allPassed) {
|
|
40
|
+
notifications.success("Maintenance passed", `All checks passed for ${result.repoName}`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
notifications.warning("Maintenance: checks failed", `${result.checks.filter((c) => !c.passed).length} check(s) failed in ${result.repoName}`, result.planId ? `/plans/${result.planId}` : undefined);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
ok: true,
|
|
48
|
+
message: msg,
|
|
49
|
+
data: { runId: result.id, planId: result.planId, summary },
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Run all repos
|
|
53
|
+
const results = await maintenanceService.runAll(jobId);
|
|
54
|
+
if (results.length === 0) {
|
|
55
|
+
return { ok: true, message: "No accessible repositories found" };
|
|
56
|
+
}
|
|
57
|
+
const summary = results.map((r) => {
|
|
58
|
+
const checks = r.checks
|
|
59
|
+
.map((c) => ` ${c.passed ? "✓" : "✗"} ${c.name}`)
|
|
60
|
+
.join("\n");
|
|
61
|
+
return `${r.allPassed ? "✓" : "✗"} ${r.repoName}\n${checks}`;
|
|
62
|
+
}).join("\n\n");
|
|
63
|
+
const failed = results.filter((r) => !r.allPassed);
|
|
64
|
+
const msg = failed.length === 0
|
|
65
|
+
? `All ${results.length} repo(s) passed`
|
|
66
|
+
: `${failed.length}/${results.length} repo(s) have failures — fix plans created`;
|
|
67
|
+
if (notifications) {
|
|
68
|
+
if (failed.length === 0) {
|
|
69
|
+
notifications.success("Maintenance passed", msg);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
notifications.warning("Maintenance: failures found", msg);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
ok: true,
|
|
77
|
+
message: msg,
|
|
78
|
+
data: {
|
|
79
|
+
repos: results.map((r) => ({
|
|
80
|
+
repoName: r.repoName,
|
|
81
|
+
allPassed: r.allPassed,
|
|
82
|
+
runId: r.id,
|
|
83
|
+
planId: r.planId,
|
|
84
|
+
})),
|
|
85
|
+
summary,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
91
|
+
return { ok: false, message: msg };
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=maintenance-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance-tools.js","sourceRoot":"","sources":["../../src/tools/maintenance-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-tools.d.ts","sourceRoot":"","sources":["../../src/tools/network-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAC;AAgHjE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,eAAe,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;IACvE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,cAAc,GAAG,IAAI,CAE5F;AAED,wBAAgB,oBAAoB,IAAI,eAAe,GAAG,IAAI,CAE7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAsChE;AAMD,wBAAgB,qBAAqB,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"network-tools.d.ts","sourceRoot":"","sources":["../../src/tools/network-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,gBAAgB,CAAC;AAgHjE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,eAAe,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;IACvE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,cAAc,GAAG,IAAI,CAE5F;AAED,wBAAgB,oBAAoB,IAAI,eAAe,GAAG,IAAI,CAE7D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAsChE;AAMD,wBAAgB,qBAAqB,IAAI,cAAc,CAsLtD"}
|
|
@@ -186,14 +186,23 @@ export function createNetworkScanTool() {
|
|
|
186
186
|
try {
|
|
187
187
|
for (const subnet of subnets) {
|
|
188
188
|
if (platform() === "win32") {
|
|
189
|
-
|
|
190
|
-
|
|
189
|
+
// Batched ping sweep — 25 per batch, batches in parallel
|
|
190
|
+
const BATCH = 25;
|
|
191
|
+
const batches = [];
|
|
192
|
+
for (let i = 1; i <= 254; i += BATCH) {
|
|
193
|
+
const end = Math.min(i + BATCH - 1, 254);
|
|
194
|
+
const cmds = Array.from({ length: end - i + 1 }, (_, j) => `ping -n 1 -w 500 ${subnet}.${i + j} > nul 2>&1`).join(" & ");
|
|
195
|
+
batches.push(cmds);
|
|
196
|
+
}
|
|
197
|
+
await Promise.all(batches.map(cmd => execAsync(cmd, { timeout: 45000 }).catch(() => { })));
|
|
191
198
|
}
|
|
192
199
|
else {
|
|
193
200
|
const pingCmd = `for i in $(seq 1 254); do ping -c 1 -W 1 ${subnet}.$i & done; wait`;
|
|
194
201
|
await execAsync(pingCmd, { timeout: 30000, shell: "/bin/bash" }).catch(() => { });
|
|
195
202
|
}
|
|
196
203
|
}
|
|
204
|
+
// Brief pause for ARP cache to settle
|
|
205
|
+
await new Promise(r => setTimeout(r, 2500));
|
|
197
206
|
// Re-read ARP table after all sweeps
|
|
198
207
|
const { stdout } = await execAsync("arp -a", { timeout: 10000 });
|
|
199
208
|
arpEntries = parseArpTable(stdout);
|
|
@@ -201,6 +210,31 @@ export function createNetworkScanTool() {
|
|
|
201
210
|
catch {
|
|
202
211
|
// use existing ARP entries
|
|
203
212
|
}
|
|
213
|
+
// 2b. On Windows, supplement with Get-NetNeighbor
|
|
214
|
+
if (platform() === "win32") {
|
|
215
|
+
try {
|
|
216
|
+
const { stdout: pshOutput } = await execAsync('powershell -NoProfile -Command "Get-NetNeighbor -AddressFamily IPv4 | Where-Object { $_.State -ne \'Unreachable\' -and $_.LinkLayerAddress -ne \'\' -and $_.LinkLayerAddress -ne \'00-00-00-00-00-00\' } | Select-Object IPAddress,LinkLayerAddress | ConvertTo-Csv -NoTypeInformation"', { timeout: 15000 });
|
|
217
|
+
const existingIps = new Set(arpEntries.map(e => e.ip));
|
|
218
|
+
for (const line of pshOutput.split("\n")) {
|
|
219
|
+
const csvMatch = /"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"\s*,\s*"([0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2}-[0-9a-fA-F]{2})"/.exec(line);
|
|
220
|
+
if (!csvMatch)
|
|
221
|
+
continue;
|
|
222
|
+
const ip = csvMatch[1];
|
|
223
|
+
const mac = csvMatch[2].replace(/-/g, ":").toLowerCase();
|
|
224
|
+
if (existingIps.has(ip))
|
|
225
|
+
continue;
|
|
226
|
+
if (mac === "ff:ff:ff:ff:ff:ff" || mac === "00:00:00:00:00:00")
|
|
227
|
+
continue;
|
|
228
|
+
const firstOctet = parseInt(mac.slice(0, 2), 16);
|
|
229
|
+
if (firstOctet & 1)
|
|
230
|
+
continue;
|
|
231
|
+
if (subnets.some(s => ip.startsWith(s + "."))) {
|
|
232
|
+
arpEntries.push({ ip, mac });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch { }
|
|
237
|
+
}
|
|
204
238
|
// 3. Filter to subnet
|
|
205
239
|
const subnetFiltered = arpEntries.filter((e) => subnets.some((s) => e.ip.startsWith(s + ".")));
|
|
206
240
|
// 4. Probe ports in parallel
|