@basilica/openclaw 0.1.0
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/gateway/index.d.ts +7 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +21 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/status.d.ts +12 -0
- package/dist/gateway/status.d.ts.map +1 -0
- package/dist/gateway/status.js +33 -0
- package/dist/gateway/status.js.map +1 -0
- package/dist/gateway/sync-service.d.ts +17 -0
- package/dist/gateway/sync-service.d.ts.map +1 -0
- package/dist/gateway/sync-service.js +46 -0
- package/dist/gateway/sync-service.js.map +1 -0
- package/dist/gateway/webhook.d.ts +12 -0
- package/dist/gateway/webhook.d.ts.map +1 -0
- package/dist/gateway/webhook.js +23 -0
- package/dist/gateway/webhook.js.map +1 -0
- package/dist/hooks/audit.d.ts +17 -0
- package/dist/hooks/audit.d.ts.map +1 -0
- package/dist/hooks/audit.js +28 -0
- package/dist/hooks/audit.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +14 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/model-routing.d.ts +3 -0
- package/dist/hooks/model-routing.d.ts.map +1 -0
- package/dist/hooks/model-routing.js +11 -0
- package/dist/hooks/model-routing.js.map +1 -0
- package/dist/hooks/prompt-context.d.ts +3 -0
- package/dist/hooks/prompt-context.d.ts.map +1 -0
- package/dist/hooks/prompt-context.js +11 -0
- package/dist/hooks/prompt-context.js.map +1 -0
- package/dist/hooks/tool-policy.d.ts +3 -0
- package/dist/hooks/tool-policy.d.ts.map +1 -0
- package/dist/hooks/tool-policy.js +44 -0
- package/dist/hooks/tool-policy.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/context.d.ts +6 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +28 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/datasets.d.ts +3 -0
- package/dist/tools/datasets.d.ts.map +1 -0
- package/dist/tools/datasets.js +57 -0
- package/dist/tools/datasets.js.map +1 -0
- package/dist/tools/deployments.d.ts +3 -0
- package/dist/tools/deployments.d.ts.map +1 -0
- package/dist/tools/deployments.js +58 -0
- package/dist/tools/deployments.js.map +1 -0
- package/dist/tools/gpu.d.ts +3 -0
- package/dist/tools/gpu.d.ts.map +1 -0
- package/dist/tools/gpu.js +63 -0
- package/dist/tools/gpu.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inference.d.ts +3 -0
- package/dist/tools/inference.d.ts.map +1 -0
- package/dist/tools/inference.js +42 -0
- package/dist/tools/inference.js.map +1 -0
- package/dist/tools/jobs.d.ts +3 -0
- package/dist/tools/jobs.d.ts.map +1 -0
- package/dist/tools/jobs.js +58 -0
- package/dist/tools/jobs.js.map +1 -0
- package/dist/tools/logs.d.ts +3 -0
- package/dist/tools/logs.d.ts.map +1 -0
- package/dist/tools/logs.js +44 -0
- package/dist/tools/logs.js.map +1 -0
- package/dist/tools/schemas.d.ts +18 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +135 -0
- package/dist/tools/schemas.js.map +1 -0
- package/openclaw.plugin.json +38 -0
- package/package.json +41 -0
- package/skills/basilica-operator/index.md +56 -0
- package/skills/basilica-platform/index.md +67 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { OpenClawPluginApi } from "openclaw-plugin-types";
|
|
2
|
+
export declare function registerBasilicaGateway(api: OpenClawPluginApi): void;
|
|
3
|
+
export { BasilicaSyncService } from "./sync-service.js";
|
|
4
|
+
export { addWebhookListener, removeWebhookListener } from "./webhook.js";
|
|
5
|
+
export type { WebhookPayload, WebhookEventType, WebhookListener } from "./webhook.js";
|
|
6
|
+
export type { PlatformStatus } from "./status.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAiBpE;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACtF,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { handleStatus } from "./status.js";
|
|
2
|
+
import { handleWebhook } from "./webhook.js";
|
|
3
|
+
import { BasilicaSyncService } from "./sync-service.js";
|
|
4
|
+
export function registerBasilicaGateway(api) {
|
|
5
|
+
api.registerGatewayMethod("basilica.status", handleStatus);
|
|
6
|
+
api.registerHttpRoute({
|
|
7
|
+
path: "/basilica/webhook",
|
|
8
|
+
method: "POST",
|
|
9
|
+
auth: "plugin",
|
|
10
|
+
handler: handleWebhook,
|
|
11
|
+
});
|
|
12
|
+
const syncService = new BasilicaSyncService();
|
|
13
|
+
api.registerService({
|
|
14
|
+
id: "basilica-sync",
|
|
15
|
+
start: () => syncService.start(),
|
|
16
|
+
stop: () => syncService.stop(),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export { BasilicaSyncService } from "./sync-service.js";
|
|
20
|
+
export { addWebhookListener, removeWebhookListener } from "./webhook.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,GAAsB;IAC5D,GAAG,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;IAE3D,GAAG,CAAC,iBAAiB,CAAC;QACpB,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,aAAa;KACvB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAE9C,GAAG,CAAC,eAAe,CAAC;QAClB,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE;QAChC,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BasilicaCredential } from "@basilica/openclaw-sdk";
|
|
2
|
+
export interface StatusParams {
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
credential?: BasilicaCredential;
|
|
5
|
+
}
|
|
6
|
+
export interface PlatformStatus {
|
|
7
|
+
healthy: boolean;
|
|
8
|
+
timestamp: string;
|
|
9
|
+
services: Record<string, "up" | "degraded" | "down">;
|
|
10
|
+
}
|
|
11
|
+
export declare function handleStatus(params: Record<string, unknown>): Promise<PlatformStatus>;
|
|
12
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/gateway/status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwB,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEvF,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;CACtD;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAgC3F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BasilicaClient, BasilicaError } from "@basilica/openclaw-sdk";
|
|
2
|
+
export async function handleStatus(params) {
|
|
3
|
+
const baseUrl = params.baseUrl ?? "https://api.basilica.cloud";
|
|
4
|
+
const config = {
|
|
5
|
+
baseUrl,
|
|
6
|
+
credential: params.credential ?? { type: "token", token: "" },
|
|
7
|
+
};
|
|
8
|
+
try {
|
|
9
|
+
const client = new BasilicaClient(config);
|
|
10
|
+
await client.request("GET", "/health");
|
|
11
|
+
return {
|
|
12
|
+
healthy: true,
|
|
13
|
+
timestamp: new Date().toISOString(),
|
|
14
|
+
services: {
|
|
15
|
+
api: "up",
|
|
16
|
+
inference: "up",
|
|
17
|
+
compute: "up",
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
return {
|
|
23
|
+
healthy: false,
|
|
24
|
+
timestamp: new Date().toISOString(),
|
|
25
|
+
services: {
|
|
26
|
+
api: err instanceof BasilicaError && err.code === "NETWORK_ERROR" ? "down" : "degraded",
|
|
27
|
+
inference: "degraded",
|
|
28
|
+
compute: "degraded",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/gateway/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAcvE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAA+B;IAChE,MAAM,OAAO,GAAI,MAAM,CAAC,OAAkB,IAAI,4BAA4B,CAAC;IAE3E,MAAM,MAAM,GAAyB;QACnC,OAAO;QACP,UAAU,EAAE,MAAM,CAAC,UAAgC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;KACpF,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE;gBACR,GAAG,EAAE,IAAI;gBACT,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,IAAI;aACd;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE;gBACR,GAAG,EAAE,GAAG,YAAY,aAAa,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;gBACvF,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface SyncState {
|
|
2
|
+
running: boolean;
|
|
3
|
+
lastSyncAt: string | null;
|
|
4
|
+
syncCount: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class BasilicaSyncService {
|
|
7
|
+
private intervalId;
|
|
8
|
+
private state;
|
|
9
|
+
private readonly intervalMs;
|
|
10
|
+
private readonly onSync;
|
|
11
|
+
constructor(intervalMs?: number, onSync?: () => Promise<void>);
|
|
12
|
+
start(): Promise<void>;
|
|
13
|
+
stop(): Promise<void>;
|
|
14
|
+
getState(): SyncState;
|
|
15
|
+
private tick;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=sync-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-service.d.ts","sourceRoot":"","sources":["../../src/gateway/sync-service.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,KAAK,CAIX;IACF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;gBAEjC,UAAU,GAAE,MAAe,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAK/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,QAAQ,IAAI,SAAS;YAIP,IAAI;CASnB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export class BasilicaSyncService {
|
|
2
|
+
intervalId = null;
|
|
3
|
+
state = {
|
|
4
|
+
running: false,
|
|
5
|
+
lastSyncAt: null,
|
|
6
|
+
syncCount: 0,
|
|
7
|
+
};
|
|
8
|
+
intervalMs;
|
|
9
|
+
onSync;
|
|
10
|
+
constructor(intervalMs = 60_000, onSync) {
|
|
11
|
+
this.intervalMs = intervalMs;
|
|
12
|
+
this.onSync = onSync ?? (async () => { });
|
|
13
|
+
}
|
|
14
|
+
async start() {
|
|
15
|
+
if (this.state.running)
|
|
16
|
+
return;
|
|
17
|
+
this.state.running = true;
|
|
18
|
+
this.intervalId = setInterval(() => {
|
|
19
|
+
void this.tick();
|
|
20
|
+
}, this.intervalMs);
|
|
21
|
+
await this.tick();
|
|
22
|
+
}
|
|
23
|
+
async stop() {
|
|
24
|
+
if (!this.state.running)
|
|
25
|
+
return;
|
|
26
|
+
if (this.intervalId) {
|
|
27
|
+
clearInterval(this.intervalId);
|
|
28
|
+
this.intervalId = null;
|
|
29
|
+
}
|
|
30
|
+
this.state.running = false;
|
|
31
|
+
}
|
|
32
|
+
getState() {
|
|
33
|
+
return { ...this.state };
|
|
34
|
+
}
|
|
35
|
+
async tick() {
|
|
36
|
+
try {
|
|
37
|
+
await this.onSync();
|
|
38
|
+
this.state.lastSyncAt = new Date().toISOString();
|
|
39
|
+
this.state.syncCount++;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// sync errors are non-fatal, next interval retries
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=sync-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-service.js","sourceRoot":"","sources":["../../src/gateway/sync-service.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,mBAAmB;IACtB,UAAU,GAA0C,IAAI,CAAC;IACzD,KAAK,GAAc;QACzB,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,CAAC;KACb,CAAC;IACe,UAAU,CAAS;IACnB,MAAM,CAAsB;IAE7C,YAAY,aAAqB,MAAM,EAAE,MAA4B;QACnE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QAE/B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QAEhC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HttpRequest, HttpResponse } from "openclaw-plugin-types";
|
|
2
|
+
export type WebhookEventType = "job.completed" | "job.failed" | "deployment.status_changed" | "alert.triggered";
|
|
3
|
+
export interface WebhookPayload {
|
|
4
|
+
eventType: WebhookEventType;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
data: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export type WebhookListener = (payload: WebhookPayload) => void;
|
|
9
|
+
export declare function addWebhookListener(listener: WebhookListener): void;
|
|
10
|
+
export declare function removeWebhookListener(listener: WebhookListener): void;
|
|
11
|
+
export declare function handleWebhook(req: HttpRequest): Promise<HttpResponse>;
|
|
12
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/gateway/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,YAAY,GAAG,2BAA2B,GAAG,iBAAiB,CAAC;AAEhH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAIhE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAElE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAGrE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAgB3E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const listeners = [];
|
|
2
|
+
export function addWebhookListener(listener) {
|
|
3
|
+
listeners.push(listener);
|
|
4
|
+
}
|
|
5
|
+
export function removeWebhookListener(listener) {
|
|
6
|
+
const idx = listeners.indexOf(listener);
|
|
7
|
+
if (idx >= 0)
|
|
8
|
+
listeners.splice(idx, 1);
|
|
9
|
+
}
|
|
10
|
+
export async function handleWebhook(req) {
|
|
11
|
+
if (req.method !== "POST") {
|
|
12
|
+
return { status: 405, body: { error: "Method not allowed" } };
|
|
13
|
+
}
|
|
14
|
+
const payload = req.body;
|
|
15
|
+
if (!payload?.eventType || !payload?.timestamp) {
|
|
16
|
+
return { status: 400, body: { error: "Invalid webhook payload: missing eventType or timestamp" } };
|
|
17
|
+
}
|
|
18
|
+
for (const listener of listeners) {
|
|
19
|
+
listener(payload);
|
|
20
|
+
}
|
|
21
|
+
return { status: 200, body: { received: true } };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/gateway/webhook.ts"],"names":[],"mappings":"AAYA,MAAM,SAAS,GAAsB,EAAE,CAAC;AAExC,MAAM,UAAU,kBAAkB,CAAC,QAAyB;IAC1D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAyB;IAC7D,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,GAAG,IAAI,CAAC;QAAE,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAgB;IAClD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,IAAkC,CAAC;IAEvD,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC/C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,yDAAyD,EAAE,EAAE,CAAC;IACrG,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { OpenClawPluginApi } from "openclaw-plugin-types";
|
|
2
|
+
export interface AuditRecord {
|
|
3
|
+
timestamp: string;
|
|
4
|
+
toolName: string;
|
|
5
|
+
toolCallId: string;
|
|
6
|
+
durationMs: number;
|
|
7
|
+
resultLength: number;
|
|
8
|
+
}
|
|
9
|
+
export interface SessionSummary {
|
|
10
|
+
sessionId: string;
|
|
11
|
+
basilicaToolCalls: number;
|
|
12
|
+
totalDurationMs: number;
|
|
13
|
+
timestamp: string;
|
|
14
|
+
}
|
|
15
|
+
export type AuditEmitter = (type: "tool_call" | "session_end", data: AuditRecord | SessionSummary) => void;
|
|
16
|
+
export declare function registerAuditHooks(api: OpenClawPluginApi, emit: AuditEmitter): void;
|
|
17
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/hooks/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,uBAAuB,CAAC;AAIlG,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,WAAW,GAAG,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,cAAc,KAAK,IAAI,CAAC;AAE3G,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,YAAY,GACjB,IAAI,CA+BN"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const BASILICA_TOOL_PREFIX = "basilica_";
|
|
2
|
+
export function registerAuditHooks(api, emit) {
|
|
3
|
+
api.on("after_tool_call", (event) => {
|
|
4
|
+
if (!event.toolName.startsWith(BASILICA_TOOL_PREFIX))
|
|
5
|
+
return;
|
|
6
|
+
const record = {
|
|
7
|
+
timestamp: new Date().toISOString(),
|
|
8
|
+
toolName: event.toolName,
|
|
9
|
+
toolCallId: event.toolCallId,
|
|
10
|
+
durationMs: event.durationMs,
|
|
11
|
+
resultLength: event.result.content.length,
|
|
12
|
+
};
|
|
13
|
+
emit("tool_call", record);
|
|
14
|
+
}, { priority: 100 });
|
|
15
|
+
api.on("agent_end", (event) => {
|
|
16
|
+
const basilicaCalls = event.toolCalls.filter((tc) => tc.toolName.startsWith(BASILICA_TOOL_PREFIX));
|
|
17
|
+
if (basilicaCalls.length === 0)
|
|
18
|
+
return;
|
|
19
|
+
const summary = {
|
|
20
|
+
sessionId: event.sessionId,
|
|
21
|
+
basilicaToolCalls: basilicaCalls.length,
|
|
22
|
+
totalDurationMs: basilicaCalls.reduce((sum, tc) => sum + tc.durationMs, 0),
|
|
23
|
+
timestamp: new Date().toISOString(),
|
|
24
|
+
};
|
|
25
|
+
emit("session_end", summary);
|
|
26
|
+
}, { priority: 100 });
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/hooks/audit.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAmBzC,MAAM,UAAU,kBAAkB,CAChC,GAAsB,EACtB,IAAkB;IAElB,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAyB,EAAE,EAAE;QACtD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAAE,OAAO;QAE7D,MAAM,MAAM,GAAgB;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;SAC1C,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtB,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAoB,EAAE,EAAE;QAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAClD,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAC7C,CAAC;QAEF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEvC,MAAM,OAAO,GAAmB;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,iBAAiB,EAAE,aAAa,CAAC,MAAM;YACvC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1E,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { OpenClawPluginApi } from "openclaw-plugin-types";
|
|
2
|
+
import { type AuditEmitter } from "./audit.js";
|
|
3
|
+
export declare function registerBasilicaHooks(api: OpenClawPluginApi, config?: Record<string, unknown>, auditEmitter?: AuditEmitter): void;
|
|
4
|
+
export type { AuditEmitter, AuditRecord, SessionSummary } from "./audit.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI/D,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAMnE,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,iBAAiB,EACtB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,YAAY,GAAE,YAAkC,GAC/C,IAAI,CAKN;AAED,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { registerModelRouting } from "./model-routing.js";
|
|
2
|
+
import { registerPromptContext } from "./prompt-context.js";
|
|
3
|
+
import { registerToolPolicy } from "./tool-policy.js";
|
|
4
|
+
import { registerAuditHooks } from "./audit.js";
|
|
5
|
+
const defaultAuditEmitter = (_type, _data) => {
|
|
6
|
+
// in production, this would forward to Basilica's audit API
|
|
7
|
+
};
|
|
8
|
+
export function registerBasilicaHooks(api, config = {}, auditEmitter = defaultAuditEmitter) {
|
|
9
|
+
registerModelRouting(api, config);
|
|
10
|
+
registerPromptContext(api, config);
|
|
11
|
+
registerToolPolicy(api, config);
|
|
12
|
+
registerAuditHooks(api, auditEmitter);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,YAAY,CAAC;AAEnE,MAAM,mBAAmB,GAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;IACzD,4DAA4D;AAC9D,CAAC,CAAC;AAEF,MAAM,UAAU,qBAAqB,CACnC,GAAsB,EACtB,SAAkC,EAAE,EACpC,eAA6B,mBAAmB;IAEhD,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChC,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-routing.d.ts","sourceRoot":"","sources":["../../src/hooks/model-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAyC,MAAM,uBAAuB,CAAC;AAEtG,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASlG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function registerModelRouting(api, config) {
|
|
2
|
+
const routing = config.routing;
|
|
3
|
+
if (!routing?.preferBasilicaModels)
|
|
4
|
+
return;
|
|
5
|
+
api.on("before_model_resolve", (event) => {
|
|
6
|
+
if (event.requestedModel)
|
|
7
|
+
return;
|
|
8
|
+
return { modelOverride: "basilica/default" };
|
|
9
|
+
}, { priority: 10 });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=model-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-routing.js","sourceRoot":"","sources":["../../src/hooks/model-routing.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,GAAsB,EAAE,MAA+B;IAC1F,MAAM,OAAO,GAAG,MAAM,CAAC,OAAyD,CAAC;IAEjF,IAAI,CAAC,OAAO,EAAE,oBAAoB;QAAE,OAAO;IAE3C,GAAG,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,KAAwB,EAA6B,EAAE;QACrF,IAAI,KAAK,CAAC,cAAc;YAAE,OAAO;QACjC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC;IAC/C,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-context.d.ts","sourceRoot":"","sources":["../../src/hooks/prompt-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAuC,MAAM,uBAAuB,CAAC;AAEpG,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASnG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function registerPromptContext(api, config) {
|
|
2
|
+
const defaultProject = config.defaultProject;
|
|
3
|
+
api.on("before_prompt_build", (_event) => {
|
|
4
|
+
if (!defaultProject)
|
|
5
|
+
return;
|
|
6
|
+
return {
|
|
7
|
+
prependSystemContext: `Basilica project context: ${defaultProject}`,
|
|
8
|
+
};
|
|
9
|
+
}, { priority: 10 });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=prompt-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-context.js","sourceRoot":"","sources":["../../src/hooks/prompt-context.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,GAAsB,EAAE,MAA+B;IAC3F,MAAM,cAAc,GAAG,MAAM,CAAC,cAAoC,CAAC;IAEnE,GAAG,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAwB,EAA4B,EAAE;QACnF,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,OAAO;YACL,oBAAoB,EAAE,6BAA6B,cAAc,EAAE;SACpE,CAAC;IACJ,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-policy.d.ts","sourceRoot":"","sources":["../../src/hooks/tool-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAiC,MAAM,uBAAuB,CAAC;AAS9F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAyBhG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const BASILICA_TOOL_PREFIX = "basilica_";
|
|
2
|
+
const DESTRUCTIVE_TOOLS = new Set([
|
|
3
|
+
"basilica_cancel_job",
|
|
4
|
+
"basilica_restart_deployment",
|
|
5
|
+
]);
|
|
6
|
+
export function registerToolPolicy(api, config) {
|
|
7
|
+
const toolGroups = config.toolGroups;
|
|
8
|
+
api.on("before_tool_call", (event) => {
|
|
9
|
+
if (!event.toolName.startsWith(BASILICA_TOOL_PREFIX))
|
|
10
|
+
return;
|
|
11
|
+
if (toolGroups && !isToolGroupEnabled(event.toolName, toolGroups)) {
|
|
12
|
+
return {
|
|
13
|
+
blocked: true,
|
|
14
|
+
reason: `Tool group for "${event.toolName}" is disabled in plugin configuration`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (DESTRUCTIVE_TOOLS.has(event.toolName)) {
|
|
18
|
+
const params = event.params;
|
|
19
|
+
if (!params.projectId && !config.defaultProject) {
|
|
20
|
+
return {
|
|
21
|
+
blocked: true,
|
|
22
|
+
reason: `Destructive operation "${event.toolName}" requires an explicit project scope`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}, { priority: 5 });
|
|
28
|
+
}
|
|
29
|
+
function isToolGroupEnabled(toolName, groups) {
|
|
30
|
+
if (toolName.includes("inference"))
|
|
31
|
+
return groups.inference !== false;
|
|
32
|
+
if (toolName.includes("job"))
|
|
33
|
+
return groups.jobs !== false;
|
|
34
|
+
if (toolName.includes("gpu") || toolName.includes("compute") || toolName.includes("allocation"))
|
|
35
|
+
return groups.gpu !== false;
|
|
36
|
+
if (toolName.includes("deploy"))
|
|
37
|
+
return groups.deployments !== false;
|
|
38
|
+
if (toolName.includes("dataset"))
|
|
39
|
+
return groups.datasets !== false;
|
|
40
|
+
if (toolName.includes("log") || toolName.includes("error"))
|
|
41
|
+
return groups.logs !== false;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=tool-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-policy.js","sourceRoot":"","sources":["../../src/hooks/tool-policy.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEzC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,qBAAqB;IACrB,6BAA6B;CAC9B,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,GAAsB,EAAE,MAA+B;IACxF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAiD,CAAC;IAE5E,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAoB,EAAyB,EAAE;QACzE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC;YAAE,OAAO;QAE7D,IAAI,UAAU,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,mBAAmB,KAAK,CAAC,QAAQ,uCAAuC;aACjF,CAAC;QACJ,CAAC;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAChD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,0BAA0B,KAAK,CAAC,QAAQ,sCAAsC;iBACvF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,MAA+B;IAC3E,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC;IACtE,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;IAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC;IAC7H,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC;IACrE,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC;IACnE,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;IACzF,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,eAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,eAAO,MAAM,IAAI,aAAa,CAAC;AAE/B,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAI7D"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { registerBasilicaTools } from "./tools/index.js";
|
|
2
|
+
import { registerBasilicaHooks } from "./hooks/index.js";
|
|
3
|
+
import { registerBasilicaGateway } from "./gateway/index.js";
|
|
4
|
+
export const id = "basilica";
|
|
5
|
+
export const name = "Basilica";
|
|
6
|
+
export default function register(api) {
|
|
7
|
+
registerBasilicaTools(api);
|
|
8
|
+
registerBasilicaHooks(api);
|
|
9
|
+
registerBasilicaGateway(api);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC;AAC7B,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAE/B,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAsB;IACrD,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,uBAAuB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BasilicaClient } from "@basilica/openclaw-sdk";
|
|
2
|
+
import type { ToolContext } from "openclaw-plugin-types";
|
|
3
|
+
export declare function resolveBasilicaClient(ctx: ToolContext): BasilicaClient;
|
|
4
|
+
export declare function resolveProjectId(ctx: ToolContext, params: Record<string, unknown>): string | undefined;
|
|
5
|
+
export declare function formatError(err: unknown): string;
|
|
6
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,wBAAwB,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAmBtE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAEtG;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQhD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BasilicaClient, BasilicaError } from "@basilica/openclaw-sdk";
|
|
2
|
+
export function resolveBasilicaClient(ctx) {
|
|
3
|
+
if (!ctx.credential) {
|
|
4
|
+
throw new BasilicaError("Basilica authentication required. Run: openclaw models auth login --provider basilica", "AUTH_MISSING");
|
|
5
|
+
}
|
|
6
|
+
const credential = ctx.credential;
|
|
7
|
+
const config = {
|
|
8
|
+
baseUrl: ctx.config.baseUrl ?? "https://api.basilica.cloud",
|
|
9
|
+
credential,
|
|
10
|
+
org: ctx.orgId
|
|
11
|
+
? { orgId: ctx.orgId, projectId: ctx.projectId }
|
|
12
|
+
: undefined,
|
|
13
|
+
};
|
|
14
|
+
return new BasilicaClient(config);
|
|
15
|
+
}
|
|
16
|
+
export function resolveProjectId(ctx, params) {
|
|
17
|
+
return params.projectId ?? ctx.projectId ?? ctx.config.defaultProject;
|
|
18
|
+
}
|
|
19
|
+
export function formatError(err) {
|
|
20
|
+
if (err instanceof BasilicaError) {
|
|
21
|
+
return `Basilica error (${err.code}): ${err.message}`;
|
|
22
|
+
}
|
|
23
|
+
if (err instanceof Error) {
|
|
24
|
+
return `Error: ${err.message}`;
|
|
25
|
+
}
|
|
26
|
+
return "An unknown error occurred";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIvE,MAAM,UAAU,qBAAqB,CAAC,GAAgB;IACpD,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CACrB,uFAAuF,EACvF,cAAc,CACf,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,UAA2C,CAAC;IAEnE,MAAM,MAAM,GAAyB;QACnC,OAAO,EAAG,GAAG,CAAC,MAAM,CAAC,OAAkB,IAAI,4BAA4B;QACvE,UAAU;QACV,GAAG,EAAE,GAAG,CAAC,KAAK;YACZ,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE;YAChD,CAAC,CAAC,SAAS;KACd,CAAC;IAEF,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAgB,EAAE,MAA+B;IAChF,OAAQ,MAAM,CAAC,SAAoB,IAAI,GAAG,CAAC,SAAS,IAAK,GAAG,CAAC,MAAM,CAAC,cAAyB,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACjC,OAAO,mBAAmB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datasets.d.ts","sourceRoot":"","sources":["../../src/tools/datasets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI/D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAoDjE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { resolveBasilicaClient, resolveProjectId, formatError } from "./context.js";
|
|
2
|
+
import { datasetListSchema, datasetGetSchema, datasetArtifactsSchema } from "./schemas.js";
|
|
3
|
+
export function registerDatasetTools(api) {
|
|
4
|
+
api.registerTool((ctx) => ({
|
|
5
|
+
name: "basilica_list_datasets",
|
|
6
|
+
label: "List Basilica Datasets",
|
|
7
|
+
description: "List datasets available on Basilica",
|
|
8
|
+
parameters: datasetListSchema,
|
|
9
|
+
async execute(_toolCallId, params) {
|
|
10
|
+
try {
|
|
11
|
+
const client = resolveBasilicaClient(ctx);
|
|
12
|
+
const result = await client.datasets.list({
|
|
13
|
+
projectId: resolveProjectId(ctx, params),
|
|
14
|
+
page: params.page,
|
|
15
|
+
pageSize: params.pageSize,
|
|
16
|
+
});
|
|
17
|
+
return { content: JSON.stringify(result, null, 2) };
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return { content: formatError(err) };
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
}));
|
|
24
|
+
api.registerTool((ctx) => ({
|
|
25
|
+
name: "basilica_get_dataset",
|
|
26
|
+
label: "Get Basilica Dataset",
|
|
27
|
+
description: "Get metadata for a Basilica dataset",
|
|
28
|
+
parameters: datasetGetSchema,
|
|
29
|
+
async execute(_toolCallId, params) {
|
|
30
|
+
try {
|
|
31
|
+
const client = resolveBasilicaClient(ctx);
|
|
32
|
+
const result = await client.datasets.get(params.datasetId);
|
|
33
|
+
return { content: JSON.stringify(result, null, 2) };
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
return { content: formatError(err) };
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
}));
|
|
40
|
+
api.registerTool((ctx) => ({
|
|
41
|
+
name: "basilica_dataset_artifacts",
|
|
42
|
+
label: "Basilica Dataset Artifacts",
|
|
43
|
+
description: "Locate artifacts for a Basilica dataset",
|
|
44
|
+
parameters: datasetArtifactsSchema,
|
|
45
|
+
async execute(_toolCallId, params) {
|
|
46
|
+
try {
|
|
47
|
+
const client = resolveBasilicaClient(ctx);
|
|
48
|
+
const result = await client.datasets.getArtifacts(params.datasetId);
|
|
49
|
+
return { content: JSON.stringify(result, null, 2) };
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
return { content: formatError(err) };
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=datasets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datasets.js","sourceRoot":"","sources":["../../src/tools/datasets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE3F,MAAM,UAAU,oBAAoB,CAAC,GAAsB;IACzD,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,qCAAqC;QAClD,UAAU,EAAE,iBAAiB;QAC7B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACxC,SAAS,EAAE,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC;oBACxC,IAAI,EAAE,MAAM,CAAC,IAA0B;oBACvC,QAAQ,EAAE,MAAM,CAAC,QAA8B;iBAChD,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,qCAAqC;QAClD,UAAU,EAAE,gBAAgB;QAC5B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAmB,CAAC,CAAC;gBACrE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,4BAA4B;QAClC,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,yCAAyC;QACtD,UAAU,EAAE,sBAAsB;QAClC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,SAAmB,CAAC,CAAC;gBAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;KACF,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../../src/tools/deployments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI/D,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAqDpE"}
|