@gonzih/agent-ops 0.4.0 → 0.5.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.
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Adapter for cc-tg agents.
3
+ * Calls the embedded control server: /restart, /logs, /status.
4
+ */
5
+ export interface CcTgStatus {
6
+ id: string;
7
+ type: string;
8
+ namespace: string;
9
+ pid: number;
10
+ version: string;
11
+ uptime_seconds: number;
12
+ started_at: string;
13
+ last_seen: string;
14
+ }
15
+ export declare class CcTgAdapter {
16
+ private headers;
17
+ status(controlUrl: string, authToken?: string): Promise<CcTgStatus>;
18
+ restart(controlUrl: string, authToken?: string): Promise<{
19
+ ok: boolean;
20
+ message: string;
21
+ }>;
22
+ logs(controlUrl: string, lines?: number, authToken?: string): Promise<string>;
23
+ health(controlUrl: string, authToken?: string): Promise<boolean>;
24
+ }
25
+ //# sourceMappingURL=cc-tg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cc-tg.d.ts","sourceRoot":"","sources":["../../src/adapters/cc-tg.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO;IAMT,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMnE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAS1F,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASzE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQvE"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Adapter for cc-tg agents.
3
+ * Calls the embedded control server: /restart, /logs, /status.
4
+ */
5
+ export class CcTgAdapter {
6
+ headers(authToken) {
7
+ const h = { "Content-Type": "application/json" };
8
+ if (authToken)
9
+ h["Authorization"] = `Bearer ${authToken}`;
10
+ return h;
11
+ }
12
+ async status(controlUrl, authToken) {
13
+ const res = await fetch(`${controlUrl}/status`, { headers: this.headers(authToken) });
14
+ if (!res.ok)
15
+ throw new Error(`cc-tg status failed: ${res.status}`);
16
+ return res.json();
17
+ }
18
+ async restart(controlUrl, authToken) {
19
+ const res = await fetch(`${controlUrl}/restart`, {
20
+ method: "POST",
21
+ headers: this.headers(authToken),
22
+ });
23
+ if (!res.ok)
24
+ throw new Error(`cc-tg restart failed: ${res.status}`);
25
+ return res.json();
26
+ }
27
+ async logs(controlUrl, lines = 50, authToken) {
28
+ const res = await fetch(`${controlUrl}/logs?lines=${lines}`, {
29
+ headers: this.headers(authToken),
30
+ });
31
+ if (!res.ok)
32
+ throw new Error(`cc-tg logs failed: ${res.status}`);
33
+ const body = (await res.json());
34
+ return body.content;
35
+ }
36
+ async health(controlUrl, authToken) {
37
+ try {
38
+ await this.status(controlUrl, authToken);
39
+ return true;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=cc-tg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cc-tg.js","sourceRoot":"","sources":["../../src/adapters/cc-tg.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,MAAM,OAAO,WAAW;IACd,OAAO,CAAC,SAAkB;QAChC,MAAM,CAAC,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QACzE,IAAI,SAAS;YAAE,CAAC,CAAC,eAAe,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC;QAC1D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,SAAkB;QACjD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,OAAO,GAAG,CAAC,IAAI,EAAyB,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,SAAkB;QAClD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,UAAU,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACjC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,GAAG,CAAC,IAAI,EAA+C,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,KAAK,GAAG,EAAE,EAAE,SAAkB;QAC3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,eAAe,KAAK,EAAE,EAAE;YAC3D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACjC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,SAAkB;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Adapter for codex agents (OpenAI-compatible API).
3
+ * Health check via GET /models.
4
+ */
5
+ export interface CodexHealthResult {
6
+ healthy: boolean;
7
+ models?: string[];
8
+ error?: string;
9
+ }
10
+ export declare class CodexAdapter {
11
+ private headers;
12
+ health(baseUrl: string, apiKey?: string): Promise<CodexHealthResult>;
13
+ complete(baseUrl: string, model: string, prompt: string, apiKey?: string): Promise<string>;
14
+ }
15
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO;IAMT,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAcpE,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;CAUnB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Adapter for codex agents (OpenAI-compatible API).
3
+ * Health check via GET /models.
4
+ */
5
+ export class CodexAdapter {
6
+ headers(apiKey) {
7
+ const h = { "Content-Type": "application/json" };
8
+ if (apiKey)
9
+ h["Authorization"] = `Bearer ${apiKey}`;
10
+ return h;
11
+ }
12
+ async health(baseUrl, apiKey) {
13
+ try {
14
+ const res = await fetch(`${baseUrl}/models`, {
15
+ headers: this.headers(apiKey),
16
+ signal: AbortSignal.timeout(5000),
17
+ });
18
+ if (!res.ok)
19
+ return { healthy: false, error: `HTTP ${res.status}` };
20
+ const body = (await res.json());
21
+ return { healthy: true, models: body.data.map((m) => m.id) };
22
+ }
23
+ catch (err) {
24
+ return { healthy: false, error: err.message };
25
+ }
26
+ }
27
+ async complete(baseUrl, model, prompt, apiKey) {
28
+ const res = await fetch(`${baseUrl}/completions`, {
29
+ method: "POST",
30
+ headers: this.headers(apiKey),
31
+ body: JSON.stringify({ model, prompt, max_tokens: 16 }),
32
+ });
33
+ if (!res.ok)
34
+ throw new Error(`codex complete failed: ${res.status}`);
35
+ const body = (await res.json());
36
+ return body.choices[0]?.text ?? "";
37
+ }
38
+ }
39
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,OAAO,YAAY;IACf,OAAO,CAAC,MAAe;QAC7B,MAAM,CAAC,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;QACzE,IAAI,MAAM;YAAE,CAAC,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,MAAe;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,SAAS,EAAE;gBAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoC,CAAC;YACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAe,EACf,KAAa,EACb,MAAc,EACd,MAAe;QAEf,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;SACxD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyC,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Generic HTTP adapter for custom agents.
3
+ * Health check via GET /health endpoint.
4
+ */
5
+ export interface CustomHealthResult {
6
+ healthy: boolean;
7
+ status?: unknown;
8
+ error?: string;
9
+ }
10
+ export declare class CustomHttpAdapter {
11
+ health(baseUrl: string, authToken?: string): Promise<CustomHealthResult>;
12
+ restart(baseUrl: string, authToken?: string): Promise<{
13
+ ok: boolean;
14
+ }>;
15
+ logs(baseUrl: string, lines?: number, authToken?: string): Promise<string>;
16
+ }
17
+ //# sourceMappingURL=custom-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-http.d.ts","sourceRoot":"","sources":["../../src/adapters/custom-http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAiB;IACtB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqBxE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IAQtE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAO7E"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Generic HTTP adapter for custom agents.
3
+ * Health check via GET /health endpoint.
4
+ */
5
+ export class CustomHttpAdapter {
6
+ async health(baseUrl, authToken) {
7
+ try {
8
+ const headers = {};
9
+ if (authToken)
10
+ headers["Authorization"] = `Bearer ${authToken}`;
11
+ const res = await fetch(`${baseUrl}/health`, {
12
+ headers,
13
+ signal: AbortSignal.timeout(5000),
14
+ });
15
+ if (!res.ok)
16
+ return { healthy: false, error: `HTTP ${res.status}` };
17
+ let status;
18
+ try {
19
+ status = await res.json();
20
+ }
21
+ catch {
22
+ status = await res.text();
23
+ }
24
+ return { healthy: true, status };
25
+ }
26
+ catch (err) {
27
+ return { healthy: false, error: err.message };
28
+ }
29
+ }
30
+ async restart(baseUrl, authToken) {
31
+ const headers = {};
32
+ if (authToken)
33
+ headers["Authorization"] = `Bearer ${authToken}`;
34
+ const res = await fetch(`${baseUrl}/restart`, { method: "POST", headers });
35
+ if (!res.ok)
36
+ throw new Error(`custom-http restart failed: ${res.status}`);
37
+ return { ok: true };
38
+ }
39
+ async logs(baseUrl, lines = 50, authToken) {
40
+ const headers = {};
41
+ if (authToken)
42
+ headers["Authorization"] = `Bearer ${authToken}`;
43
+ const res = await fetch(`${baseUrl}/logs?lines=${lines}`, { headers });
44
+ if (!res.ok)
45
+ throw new Error(`custom-http logs failed: ${res.status}`);
46
+ return res.text();
47
+ }
48
+ }
49
+ //# sourceMappingURL=custom-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-http.js","sourceRoot":"","sources":["../../src/adapters/custom-http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,SAAkB;QAC9C,IAAI,CAAC;YACH,MAAM,OAAO,GAA2B,EAAE,CAAC;YAC3C,IAAI,SAAS;gBAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC;YAChE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,SAAS,EAAE;gBAC3C,OAAO;gBACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YACpE,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,SAAkB;QAC/C,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,SAAS;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,KAAK,GAAG,EAAE,EAAE,SAAkB;QACxD,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,SAAS;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export { CcTgAdapter } from "./cc-tg.js";
2
+ export type { CcTgStatus } from "./cc-tg.js";
3
+ export { OpenclawAdapter } from "./openclaw.js";
4
+ export type { OpenclawHealthResult } from "./openclaw.js";
5
+ export { CodexAdapter } from "./codex.js";
6
+ export type { CodexHealthResult } from "./codex.js";
7
+ export { CustomHttpAdapter } from "./custom-http.js";
8
+ export type { CustomHealthResult } from "./custom-http.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { CcTgAdapter } from "./cc-tg.js";
2
+ export { OpenclawAdapter } from "./openclaw.js";
3
+ export { CodexAdapter } from "./codex.js";
4
+ export { CustomHttpAdapter } from "./custom-http.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Adapter for openclaw agents (Ollama-compatible API).
3
+ * Health check via POST /api/generate with a minimal prompt.
4
+ */
5
+ export interface OpenclawHealthResult {
6
+ healthy: boolean;
7
+ model?: string;
8
+ error?: string;
9
+ }
10
+ export declare class OpenclawAdapter {
11
+ health(baseUrl: string, model?: string): Promise<OpenclawHealthResult>;
12
+ listModels(baseUrl: string): Promise<string[]>;
13
+ }
14
+ //# sourceMappingURL=openclaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IACpB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAexE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAMrD"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Adapter for openclaw agents (Ollama-compatible API).
3
+ * Health check via POST /api/generate with a minimal prompt.
4
+ */
5
+ export class OpenclawAdapter {
6
+ async health(baseUrl, model = "llama3") {
7
+ try {
8
+ const res = await fetch(`${baseUrl}/api/generate`, {
9
+ method: "POST",
10
+ headers: { "Content-Type": "application/json" },
11
+ body: JSON.stringify({ model, prompt: "ping", stream: false }),
12
+ signal: AbortSignal.timeout(5000),
13
+ });
14
+ if (!res.ok)
15
+ return { healthy: false, error: `HTTP ${res.status}` };
16
+ return { healthy: true, model };
17
+ }
18
+ catch (err) {
19
+ return { healthy: false, error: err.message };
20
+ }
21
+ }
22
+ async listModels(baseUrl) {
23
+ const res = await fetch(`${baseUrl}/api/tags`);
24
+ if (!res.ok)
25
+ throw new Error(`openclaw list models failed: ${res.status}`);
26
+ const body = (await res.json());
27
+ return body.models.map((m) => m.name);
28
+ }
29
+ }
30
+ //# sourceMappingURL=openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,KAAK,GAAG,QAAQ;QAC5C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,EAAE;gBACjD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gBAC9D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwC,CAAC;QACvE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;CACF"}
package/dist/api.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Registry API HTTP server.
3
+ *
4
+ * Endpoints:
5
+ * GET /agents — list all registered agents
6
+ * POST /agents/register — register a new agent
7
+ * POST /agents/:id/restart — restart via adapter
8
+ * GET /agents/:id/logs — tail logs via adapter
9
+ * DELETE /agents/:id — deregister
10
+ */
11
+ import http from "node:http";
12
+ export interface RegistryApiOptions {
13
+ port: number;
14
+ redisUrl?: string;
15
+ authToken?: string;
16
+ controlAuthToken?: string;
17
+ }
18
+ export declare function createRegistryApi(opts: RegistryApiOptions): http.Server;
19
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAiED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC,MAAM,CA2EvE"}
package/dist/api.js ADDED
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Registry API HTTP server.
3
+ *
4
+ * Endpoints:
5
+ * GET /agents — list all registered agents
6
+ * POST /agents/register — register a new agent
7
+ * POST /agents/:id/restart — restart via adapter
8
+ * GET /agents/:id/logs — tail logs via adapter
9
+ * DELETE /agents/:id — deregister
10
+ */
11
+ import http from "node:http";
12
+ import { AgentRegistry } from "./registry.js";
13
+ import { CcTgAdapter } from "./adapters/cc-tg.js";
14
+ import { CustomHttpAdapter } from "./adapters/custom-http.js";
15
+ function json(res, status, body) {
16
+ const payload = JSON.stringify(body);
17
+ res.writeHead(status, {
18
+ "Content-Type": "application/json",
19
+ "Content-Length": Buffer.byteLength(payload),
20
+ });
21
+ res.end(payload);
22
+ }
23
+ function readBody(req) {
24
+ return new Promise((resolve, reject) => {
25
+ let data = "";
26
+ req.on("data", (chunk) => { data += chunk; });
27
+ req.on("end", () => resolve(data));
28
+ req.on("error", reject);
29
+ });
30
+ }
31
+ /** Parse /agents/:id/action — returns {id, action} or null */
32
+ function parseAgentPath(pathname) {
33
+ const m = pathname.match(/^\/agents\/([^/]+)(?:\/(.+))?$/);
34
+ if (!m)
35
+ return null;
36
+ return { id: decodeURIComponent(m[1]), action: m[2] };
37
+ }
38
+ async function dispatchRestart(agent, controlAuthToken) {
39
+ switch (agent.type) {
40
+ case "cc-tg": {
41
+ const adapter = new CcTgAdapter();
42
+ return adapter.restart(agent.control_url, controlAuthToken);
43
+ }
44
+ case "openclaw":
45
+ case "codex":
46
+ case "custom": {
47
+ const adapter = new CustomHttpAdapter();
48
+ return adapter.restart(agent.control_url, controlAuthToken);
49
+ }
50
+ default:
51
+ throw new Error(`No restart adapter for type: ${agent.type}`);
52
+ }
53
+ }
54
+ async function dispatchLogs(agent, lines, controlAuthToken) {
55
+ switch (agent.type) {
56
+ case "cc-tg": {
57
+ const adapter = new CcTgAdapter();
58
+ return adapter.logs(agent.control_url, lines, controlAuthToken);
59
+ }
60
+ case "openclaw":
61
+ case "codex":
62
+ case "custom": {
63
+ const adapter = new CustomHttpAdapter();
64
+ return adapter.logs(agent.control_url, lines, controlAuthToken);
65
+ }
66
+ default:
67
+ throw new Error(`No logs adapter for type: ${agent.type}`);
68
+ }
69
+ }
70
+ export function createRegistryApi(opts) {
71
+ const registry = new AgentRegistry(opts.redisUrl);
72
+ registry.connect().catch((err) => {
73
+ console.error("[agent-ops/api] Redis connect failed:", err);
74
+ });
75
+ const server = http.createServer(async (req, res) => {
76
+ // Optional auth
77
+ if (opts.authToken) {
78
+ const auth = req.headers["authorization"] ?? "";
79
+ if (auth !== `Bearer ${opts.authToken}`) {
80
+ return json(res, 401, { error: "unauthorized" });
81
+ }
82
+ }
83
+ const url = new URL(req.url ?? "/", `http://localhost:${opts.port}`);
84
+ const { pathname } = url;
85
+ try {
86
+ // GET /agents
87
+ if (req.method === "GET" && pathname === "/agents") {
88
+ const agents = await registry.list();
89
+ return json(res, 200, { agents });
90
+ }
91
+ // POST /agents/register
92
+ if (req.method === "POST" && pathname === "/agents/register") {
93
+ const body = await readBody(req);
94
+ const record = JSON.parse(body);
95
+ if (!record.id || !record.type || !record.control_url) {
96
+ return json(res, 400, { error: "id, type, and control_url are required" });
97
+ }
98
+ await registry.register(record);
99
+ return json(res, 200, { ok: true, id: record.id });
100
+ }
101
+ // /agents/:id/...
102
+ const parsed = parseAgentPath(pathname);
103
+ if (!parsed)
104
+ return json(res, 404, { error: "not found" });
105
+ const { id, action } = parsed;
106
+ // DELETE /agents/:id
107
+ if (req.method === "DELETE" && !action) {
108
+ await registry.deregister(id);
109
+ return json(res, 200, { ok: true });
110
+ }
111
+ // POST /agents/:id/restart
112
+ if (req.method === "POST" && action === "restart") {
113
+ const agent = await registry.get(id);
114
+ if (!agent)
115
+ return json(res, 404, { error: `agent ${id} not found` });
116
+ const result = await dispatchRestart(agent, opts.controlAuthToken);
117
+ return json(res, 200, { ok: true, result });
118
+ }
119
+ // GET /agents/:id/logs
120
+ if (req.method === "GET" && action === "logs") {
121
+ const agent = await registry.get(id);
122
+ if (!agent)
123
+ return json(res, 404, { error: `agent ${id} not found` });
124
+ const lines = parseInt(url.searchParams.get("lines") ?? "50", 10);
125
+ const content = await dispatchLogs(agent, lines, opts.controlAuthToken);
126
+ return json(res, 200, { id, lines, content });
127
+ }
128
+ return json(res, 404, { error: "not found" });
129
+ }
130
+ catch (err) {
131
+ return json(res, 500, { error: err.message });
132
+ }
133
+ });
134
+ server.listen(opts.port, () => {
135
+ console.log(`[agent-ops/api] registry API listening on :${opts.port}`);
136
+ });
137
+ return server;
138
+ }
139
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,8 @@ export { AgentRegistry } from "./registry.js";
2
2
  export type { AgentRecord } from "./registry.js";
3
3
  export { createControlServer } from "./control.js";
4
4
  export type { ControlServerOptions } from "./control.js";
5
+ export { createRegistryApi } from "./api.js";
6
+ export type { RegistryApiOptions } from "./api.js";
7
+ export { CcTgAdapter, OpenclawAdapter, CodexAdapter, CustomHttpAdapter } from "./adapters/index.js";
8
+ export type { CcTgStatus, OpenclawHealthResult, CodexHealthResult, CustomHealthResult, } from "./adapters/index.js";
5
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACpG,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export { AgentRegistry } from "./registry.js";
2
2
  export { createControlServer } from "./control.js";
3
+ export { createRegistryApi } from "./api.js";
4
+ export { CcTgAdapter, OpenclawAdapter, CodexAdapter, CustomHttpAdapter } from "./adapters/index.js";
3
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  export interface AgentRecord {
8
8
  id: string;
9
- type: 'cc-tg' | 'openclaw' | 'codex' | 'ollama' | 'custom';
9
+ type?: 'cc-tg' | 'openclaw' | 'codex' | 'ollama' | 'custom';
10
10
  hostname: string;
11
11
  user: string;
12
12
  bot_username: string;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAA6B;gBAE9B,QAAQ,GAAE,MAA0D;IAI1E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,6EAA6E;IACvE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,gEAAgE;IAC1D,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1C,6CAA6C;IACvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,sCAAsC;IAChC,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IASpC,qEAAqE;IAC/D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;CAInD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAA6B;gBAE9B,QAAQ,GAAE,MAA0D;IAI1E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,6EAA6E;IACvE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,gEAAgE;IAC1D,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1C,6CAA6C;IACvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,sCAAsC;IAChC,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IASpC,qEAAqE;IAC/D,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;CAInD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gonzih/agent-ops",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Universal agent control plane — type-agnostic discovery, control, metrics aggregation for cc-tg, openclaw, codex, ollama, and custom agents",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",