neoctl 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/repl/index.js +2 -2
  2. package/dist/repl/index.js.map +1 -1
  3. package/package.json +3 -2
  4. package/dist/core/commands.d.ts +0 -66
  5. package/dist/core/commands.js +0 -151
  6. package/dist/core/commands.js.map +0 -1
  7. package/dist/core/runtime.d.ts +0 -59
  8. package/dist/core/runtime.js +0 -161
  9. package/dist/core/runtime.js.map +0 -1
  10. package/dist/repl/render.d.ts +0 -2
  11. package/dist/repl/render.js +0 -45
  12. package/dist/repl/render.js.map +0 -1
  13. package/dist/repl/status-line.d.ts +0 -19
  14. package/dist/repl/status-line.js +0 -160
  15. package/dist/repl/status-line.js.map +0 -1
  16. package/dist/repl/transcript-flush.d.ts +0 -6
  17. package/dist/repl/transcript-flush.js +0 -54
  18. package/dist/repl/transcript-flush.js.map +0 -1
  19. package/dist/repl/transcript-format.d.ts +0 -16
  20. package/dist/repl/transcript-format.js +0 -199
  21. package/dist/repl/transcript-format.js.map +0 -1
  22. package/dist/server/agent-manager.d.ts +0 -56
  23. package/dist/server/agent-manager.js +0 -171
  24. package/dist/server/agent-manager.js.map +0 -1
  25. package/dist/server/connection-manager.d.ts +0 -18
  26. package/dist/server/connection-manager.js +0 -52
  27. package/dist/server/connection-manager.js.map +0 -1
  28. package/dist/server/event-mapper.d.ts +0 -4
  29. package/dist/server/event-mapper.js +0 -31
  30. package/dist/server/event-mapper.js.map +0 -1
  31. package/dist/server/query-runtime.d.ts +0 -29
  32. package/dist/server/query-runtime.js +0 -61
  33. package/dist/server/query-runtime.js.map +0 -1
  34. package/dist/server/rpc-router.d.ts +0 -24
  35. package/dist/server/rpc-router.js +0 -165
  36. package/dist/server/rpc-router.js.map +0 -1
  37. package/dist/server/rpc-types.d.ts +0 -92
  38. package/dist/server/rpc-types.js +0 -2
  39. package/dist/server/rpc-types.js.map +0 -1
  40. package/dist/server/ws-server.d.ts +0 -22
  41. package/dist/server/ws-server.js +0 -84
  42. package/dist/server/ws-server.js.map +0 -1
  43. package/dist/tasks/task-record.d.ts +0 -50
  44. package/dist/tasks/task-record.js +0 -50
  45. package/dist/tasks/task-record.js.map +0 -1
  46. package/dist/tools/builtins/echo-tool.d.ts +0 -4
  47. package/dist/tools/builtins/echo-tool.js +0 -26
  48. package/dist/tools/builtins/echo-tool.js.map +0 -1
  49. package/dist/tools/builtins/vision-tool.d.ts +0 -38
  50. package/dist/tools/builtins/vision-tool.js +0 -351
  51. package/dist/tools/builtins/vision-tool.js.map +0 -1
@@ -1,92 +0,0 @@
1
- import type { AgentEvent } from "../types/events.js";
2
- import type { SessionStoreSnapshot, SessionSummary } from "../session/session-store.js";
3
- export interface JsonRpcRequest<T = unknown> {
4
- jsonrpc: "2.0";
5
- id?: string | number | null;
6
- method: string;
7
- params?: T;
8
- }
9
- export interface JsonRpcSuccess<T = unknown> {
10
- jsonrpc: "2.0";
11
- id: string | number | null;
12
- result: T;
13
- }
14
- export interface JsonRpcError {
15
- jsonrpc: "2.0";
16
- id: string | number | null;
17
- error: {
18
- code: number;
19
- message: string;
20
- data?: unknown;
21
- };
22
- }
23
- export interface RpcAgentLocator {
24
- userId: string;
25
- agentId?: string;
26
- sessionId?: string;
27
- }
28
- export interface AgentAttachParams extends RpcAgentLocator {
29
- create?: boolean;
30
- resume?: boolean;
31
- }
32
- export interface AgentDetachParams extends RpcAgentLocator {
33
- }
34
- export interface SessionListParams extends RpcAgentLocator {
35
- limit?: number;
36
- }
37
- export interface SessionDeleteParams extends RpcAgentLocator {
38
- targetSessionId: string;
39
- }
40
- export interface QueryStartParams extends RpcAgentLocator {
41
- queryId?: string;
42
- text: string;
43
- displayText?: string;
44
- disconnectPolicy?: "continue" | "cancel";
45
- }
46
- export interface QueryCancelParams extends RpcAgentLocator {
47
- queryId: string;
48
- }
49
- export interface QueryResumeItem {
50
- queryId: string;
51
- afterSeq?: number;
52
- }
53
- export interface ConnectionResumeParams {
54
- agents?: RpcAgentLocator[];
55
- queries?: QueryResumeItem[];
56
- }
57
- export interface RpcSessionInfo {
58
- current?: SessionStoreSnapshot;
59
- available?: SessionSummary[];
60
- }
61
- export interface RpcAgentSnapshot {
62
- key: string;
63
- userId: string;
64
- agentId: string;
65
- state: string;
66
- attachedConnections: number;
67
- activeQueryId?: string;
68
- snapshot: ReturnType<import("../core/query-engine.js").QueryEngine["snapshot"]>;
69
- }
70
- export interface RpcQueryEventEnvelope {
71
- queryId: string;
72
- seq: number;
73
- event: SerializedAgentEvent;
74
- createdAt: string;
75
- }
76
- export type SerializedAgentEvent = AgentEvent | ({
77
- type: "retrying";
78
- attempt: number;
79
- delayMs: number;
80
- error: {
81
- name: string;
82
- message: string;
83
- stack?: string;
84
- };
85
- }) | ({
86
- type: "error";
87
- error: {
88
- name: string;
89
- message: string;
90
- stack?: string;
91
- };
92
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=rpc-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc-types.js","sourceRoot":"","sources":["../../src/server/rpc-types.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import http from "node:http";
2
- import { WebSocketServer } from "ws";
3
- import { AgentManager, type AgentManagerOptions } from "./agent-manager.js";
4
- import { ConnectionManager } from "./connection-manager.js";
5
- import { RpcRouter } from "./rpc-router.js";
6
- export interface JsonRpcWebSocketServerOptions extends AgentManagerOptions {
7
- server?: http.Server;
8
- path?: string;
9
- sweepIntervalMs?: number;
10
- }
11
- export declare class JsonRpcWebSocketServer {
12
- readonly agentManager: AgentManager;
13
- readonly connectionManager: ConnectionManager;
14
- readonly websocketServer: WebSocketServer;
15
- readonly router: RpcRouter;
16
- private readonly sweepTimer;
17
- constructor(options?: JsonRpcWebSocketServerOptions);
18
- close(): Promise<void>;
19
- private handleConnection;
20
- private findSocket;
21
- }
22
- export declare function startJsonRpcWebSocketServer(options?: JsonRpcWebSocketServerOptions): Promise<JsonRpcWebSocketServer>;
@@ -1,84 +0,0 @@
1
- import { WebSocketServer } from "ws";
2
- import { AgentManager } from "./agent-manager.js";
3
- import { ConnectionManager } from "./connection-manager.js";
4
- import { RpcRouter } from "./rpc-router.js";
5
- export class JsonRpcWebSocketServer {
6
- agentManager;
7
- connectionManager = new ConnectionManager();
8
- websocketServer;
9
- router;
10
- sweepTimer;
11
- constructor(options = {}) {
12
- this.agentManager = new AgentManager(options);
13
- this.websocketServer = new WebSocketServer({ noServer: !options.server, server: options.server, path: options.path });
14
- this.router = new RpcRouter({
15
- agentManager: this.agentManager,
16
- connectionManager: this.connectionManager,
17
- emitNotification: (connectionId, method, params) => {
18
- const socket = this.findSocket(connectionId);
19
- if (!socket || socket.readyState !== socket.OPEN)
20
- return;
21
- socket.send(JSON.stringify({ jsonrpc: "2.0", method, params }));
22
- },
23
- });
24
- this.websocketServer.on("connection", (socket) => this.handleConnection(socket));
25
- this.sweepTimer = setInterval(() => {
26
- this.agentManager.sweep();
27
- }, options.sweepIntervalMs ?? 30_000);
28
- this.sweepTimer.unref?.();
29
- }
30
- close() {
31
- clearInterval(this.sweepTimer);
32
- return new Promise((resolve, reject) => {
33
- this.websocketServer.close((error) => {
34
- if (error)
35
- reject(error);
36
- else
37
- resolve();
38
- });
39
- });
40
- }
41
- handleConnection(socket) {
42
- const connectionId = createConnectionId();
43
- this.connectionManager.open(connectionId);
44
- socket.__connectionId = connectionId;
45
- socket.on("message", async (data) => {
46
- const text = typeof data === "string" ? data : data.toString("utf8");
47
- let request;
48
- try {
49
- request = JSON.parse(text);
50
- }
51
- catch {
52
- socket.send(JSON.stringify({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "parse error" } }));
53
- return;
54
- }
55
- const response = await this.router.handle(connectionId, request);
56
- if (response && request.id !== undefined)
57
- socket.send(JSON.stringify(response));
58
- });
59
- socket.on("close", () => {
60
- const detached = this.connectionManager.close(connectionId);
61
- for (const identity of detached) {
62
- const agent = this.agentManager.detach(connectionId, identity);
63
- if (agent?.activeQuery?.disconnectPolicy === "cancel")
64
- agent.activeQuery.cancel();
65
- }
66
- this.agentManager.detachConnectionFromAll(connectionId);
67
- });
68
- }
69
- findSocket(connectionId) {
70
- for (const client of this.websocketServer.clients) {
71
- const socket = client;
72
- if (socket.__connectionId === connectionId)
73
- return socket;
74
- }
75
- return undefined;
76
- }
77
- }
78
- export async function startJsonRpcWebSocketServer(options = {}) {
79
- return new JsonRpcWebSocketServer(options);
80
- }
81
- function createConnectionId() {
82
- return `conn_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
83
- }
84
- //# sourceMappingURL=ws-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-server.js","sourceRoot":"","sources":["../../src/server/ws-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,MAAM,IAAI,CAAC;AACrD,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS5C,MAAM,OAAO,sBAAsB;IACxB,YAAY,CAAe;IAC3B,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC5C,eAAe,CAAkB;IACjC,MAAM,CAAY;IACV,UAAU,CAAiC;IAE5D,YAAY,UAAyC,EAAE;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtH,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAC7C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI;oBAAE,OAAO;gBACzD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC,EAAE,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,KAAa,EAAE,EAAE;gBAC3C,IAAI,KAAK;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBACpB,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,MAAiB;QACxC,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;QAC1C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,MAAkD,CAAC,cAAc,GAAG,YAAY,CAAC;QAElF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAqB,EAAE,EAAE;YACnD,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrE,IAAI,OAAuB,CAAC;YAC5B,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3G,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACjE,IAAI,QAAQ,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5D,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBAC/D,IAAI,KAAK,EAAE,WAAW,EAAE,gBAAgB,KAAK,QAAQ;oBAAE,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACpF,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,YAAoB;QACrC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAiD,CAAC;YACjE,IAAI,MAAM,CAAC,cAAc,KAAK,YAAY;gBAAE,OAAO,MAAM,CAAC;QAC5D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,UAAyC,EAAE;IAC3F,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC"}
@@ -1,50 +0,0 @@
1
- import type { Message } from "../types/messages.js";
2
- export type LocalTaskStatus = "pending" | "running" | "completed" | "failed" | "killed";
3
- export type LocalTaskType = "exec";
4
- export interface TaskProgressSnapshot {
5
- totalEvents: number;
6
- totalToolUseCount: number;
7
- lastActivity?: string;
8
- lastText?: string;
9
- }
10
- export interface LocalTask {
11
- id: string;
12
- taskId: string;
13
- agentId: string;
14
- type: LocalTaskType;
15
- status: LocalTaskStatus;
16
- description: string;
17
- prompt: string;
18
- messages: Message[];
19
- progress: TaskProgressSnapshot;
20
- outputFile: string;
21
- result?: TaskResult;
22
- error?: string;
23
- notified: boolean;
24
- retain: boolean;
25
- abortController?: AbortController;
26
- createdAt: string;
27
- updatedAt: string;
28
- completedAt?: string;
29
- }
30
- export interface TaskResult {
31
- agent_id: string;
32
- agent_type: string;
33
- content: string;
34
- total_duration_ms: number;
35
- total_tokens?: number;
36
- total_tool_use_count: number;
37
- usage?: unknown;
38
- }
39
- export declare function createLocalTask(input: {
40
- taskId: string;
41
- agentId: string;
42
- description: string;
43
- prompt: string;
44
- type?: LocalTaskType;
45
- outputFile?: string;
46
- abortController?: AbortController;
47
- retain?: boolean;
48
- }): LocalTask;
49
- export declare function writeLocalTaskOutput(task: LocalTask): void;
50
- export declare function renderLocalTaskOutput(task: LocalTask): string;
@@ -1,50 +0,0 @@
1
- import { mkdirSync, writeFileSync } from "node:fs";
2
- import { resolve } from "node:path";
3
- import { getNeoctlHome } from "../paths.js";
4
- export function createLocalTask(input) {
5
- const now = new Date().toISOString();
6
- return {
7
- id: input.taskId,
8
- taskId: input.taskId,
9
- agentId: input.agentId,
10
- type: input.type ?? "exec",
11
- status: "pending",
12
- description: input.description,
13
- prompt: input.prompt,
14
- messages: [],
15
- progress: { totalEvents: 0, totalToolUseCount: 0 },
16
- outputFile: input.outputFile ?? defaultTaskOutputFile(input.taskId),
17
- notified: false,
18
- retain: input.retain ?? true,
19
- abortController: input.abortController,
20
- createdAt: now,
21
- updatedAt: now,
22
- };
23
- }
24
- export function writeLocalTaskOutput(task) {
25
- const content = renderLocalTaskOutput(task);
26
- mkdirSync(resolve(task.outputFile, ".."), { recursive: true });
27
- writeFileSync(task.outputFile, content, "utf8");
28
- }
29
- export function renderLocalTaskOutput(task) {
30
- return [
31
- `task_id: ${task.taskId}`,
32
- `agent_id: ${task.agentId}`,
33
- `status: ${task.status}`,
34
- `description: ${task.description}`,
35
- `created_at: ${task.createdAt}`,
36
- `updated_at: ${task.updatedAt}`,
37
- task.completedAt ? `completed_at: ${task.completedAt}` : undefined,
38
- "",
39
- "prompt:",
40
- task.prompt,
41
- "",
42
- "result:",
43
- task.result?.content ?? "",
44
- task.error ? `\nerror:\n${task.error}` : undefined,
45
- ].filter((line) => line !== undefined).join("\n");
46
- }
47
- function defaultTaskOutputFile(taskId) {
48
- return resolve(getNeoctlHome(), "tasks", `${taskId}.txt`);
49
- }
50
- //# sourceMappingURL=task-record.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-record.js","sourceRoot":"","sources":["../../src/tasks/task-record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA6C5C,MAAM,UAAU,eAAe,CAAC,KAS/B;IACC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,MAAM;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;QAC1B,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE;QAClD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC;QACnE,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;QAC5B,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAClD,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAe;IACnD,OAAO;QACL,YAAY,IAAI,CAAC,MAAM,EAAE;QACzB,aAAa,IAAI,CAAC,OAAO,EAAE;QAC3B,WAAW,IAAI,CAAC,MAAM,EAAE;QACxB,gBAAgB,IAAI,CAAC,WAAW,EAAE;QAClC,eAAe,IAAI,CAAC,SAAS,EAAE;QAC/B,eAAe,IAAI,CAAC,SAAS,EAAE;QAC/B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;QAClE,EAAE;QACF,SAAS;QACT,IAAI,CAAC,MAAM;QACX,EAAE;QACF,SAAS;QACT,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE;QAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;KACnD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc;IAC3C,OAAO,OAAO,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC;AAC5D,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Tool } from "../tool.js";
2
- export declare const echoTool: Tool<{
3
- text: string;
4
- }>;
@@ -1,26 +0,0 @@
1
- export const echoTool = {
2
- name: "echo",
3
- aliases: ["say"],
4
- description: "Return the provided text. Useful for wiring tests before real tools exist.",
5
- inputSchema: {
6
- type: "object",
7
- properties: { text: { type: "string", description: "Text to return." } },
8
- required: ["text"],
9
- additionalProperties: false,
10
- },
11
- metadata: { readOnly: true, concurrent: true, visible: true, maxResultSizeChars: 4096, searchHint: "echo text" },
12
- validate(input) {
13
- return { text: input.text };
14
- },
15
- validateInput(input) {
16
- return input.text.length > 0 ? { ok: true, value: input } : { ok: false, message: "echo.text cannot be empty" };
17
- },
18
- isConcurrencySafe() {
19
- return true;
20
- },
21
- async call(input, _context, options) {
22
- options.onProgress?.({ toolName: "echo", message: "Echo text prepared" });
23
- return { ok: true, output: input.text };
24
- },
25
- };
26
- //# sourceMappingURL=echo-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"echo-tool.js","sourceRoot":"","sources":["../../../src/tools/builtins/echo-tool.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAA2B;IAC9C,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,WAAW,EAAE,4EAA4E;IACzF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE;QACxE,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,oBAAoB,EAAE,KAAK;KAC5B;IACD,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE;IAChH,QAAQ,CAAC,KAAc;QACrB,OAAO,EAAE,IAAI,EAAG,KAA0B,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,aAAa,CAAC,KAAK;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;IAClH,CAAC;IACD,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO;QACjC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC1E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;CACF,CAAC"}
@@ -1,38 +0,0 @@
1
- import type { ModelGateway, ModelUsage } from "../../model/model-gateway.js";
2
- import type { Tool } from "../tool.js";
3
- export interface VisionToolInput {
4
- /** Question/instruction for the vision-capable model. */
5
- prompt: string;
6
- /** Prior conversation image labels/refs/paths, e.g. [img#1], image 1, Generated image 1, or a storage.path. */
7
- imageRefs?: string[];
8
- /** Use the latest prior conversation image when imageRefs is omitted. Defaults to true. */
9
- useLatestImage?: boolean;
10
- /** Optional model override. Defaults to the current main-loop model. */
11
- model?: string;
12
- /** Optional max output tokens for the vision analysis response. */
13
- maxOutputTokens?: number;
14
- }
15
- export interface VisionToolOutput {
16
- provider: "model-gateway";
17
- model?: string;
18
- prompt: string;
19
- imageRefs: string[];
20
- sourceImages: number;
21
- images: Array<{
22
- index: number;
23
- label?: string;
24
- mimeType: string;
25
- filename: string;
26
- storagePath?: string;
27
- }>;
28
- text: string;
29
- durationMs: number;
30
- usage?: ModelUsage;
31
- }
32
- export interface CreateVisionToolOptions {
33
- modelGateway?: ModelGateway;
34
- model?: string;
35
- timeoutMs?: number;
36
- }
37
- export declare function createVisionTool(options?: CreateVisionToolOptions): Tool<VisionToolInput>;
38
- export declare const visionTool: Tool<VisionToolInput>;