@4onstudios/iris-agent 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.
Files changed (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +690 -0
  3. package/dist/api/acp/acpServer.d.ts +23 -0
  4. package/dist/api/acp/acpServer.js +814 -0
  5. package/dist/api/acp/index.d.ts +2 -0
  6. package/dist/api/acp/index.js +2 -0
  7. package/dist/api/acp/irisClient.d.ts +58 -0
  8. package/dist/api/acp/irisClient.js +214 -0
  9. package/dist/api/agent.d.ts +14 -0
  10. package/dist/api/agent.js +4171 -0
  11. package/dist/api/backendService.d.ts +4 -0
  12. package/dist/api/backendService.js +14 -0
  13. package/dist/api/core/agent/host/AgentContract.d.ts +82 -0
  14. package/dist/api/core/agent/host/AgentContract.js +1 -0
  15. package/dist/api/core/agent/host/AgentRegistry.d.ts +24 -0
  16. package/dist/api/core/agent/host/AgentRegistry.js +125 -0
  17. package/dist/api/core/agent/host/defaultRegistry.d.ts +15 -0
  18. package/dist/api/core/agent/host/defaultRegistry.js +46 -0
  19. package/dist/api/core/agent/host/externalAgentLifecycle.d.ts +65 -0
  20. package/dist/api/core/agent/host/externalAgentLifecycle.js +117 -0
  21. package/dist/api/core/agent/host/hostSessionManager.d.ts +111 -0
  22. package/dist/api/core/agent/host/hostSessionManager.js +352 -0
  23. package/dist/api/core/agent/host/index.d.ts +5 -0
  24. package/dist/api/core/agent/host/index.js +5 -0
  25. package/dist/api/core/agent/index.d.ts +87 -0
  26. package/dist/api/core/agent/index.js +1024 -0
  27. package/dist/api/core/agent/publicContracts.d.ts +35 -0
  28. package/dist/api/core/agent/publicContracts.js +103 -0
  29. package/dist/api/core/agent/tools/applyDiff.d.ts +51 -0
  30. package/dist/api/core/agent/tools/applyDiff.js +131 -0
  31. package/dist/api/core/agent/tools/backgroundTasks.d.ts +240 -0
  32. package/dist/api/core/agent/tools/backgroundTasks.js +313 -0
  33. package/dist/api/core/agent/tools/createDirectory.d.ts +43 -0
  34. package/dist/api/core/agent/tools/createDirectory.js +77 -0
  35. package/dist/api/core/agent/tools/deleteFile.d.ts +37 -0
  36. package/dist/api/core/agent/tools/deleteFile.js +66 -0
  37. package/dist/api/core/agent/tools/editFile.d.ts +73 -0
  38. package/dist/api/core/agent/tools/editFile.js +173 -0
  39. package/dist/api/core/agent/tools/executeCommand.d.ts +59 -0
  40. package/dist/api/core/agent/tools/executeCommand.js +250 -0
  41. package/dist/api/core/agent/tools/fileContent.d.ts +54 -0
  42. package/dist/api/core/agent/tools/fileContent.js +227 -0
  43. package/dist/api/core/agent/tools/findDefinition.d.ts +72 -0
  44. package/dist/api/core/agent/tools/findDefinition.js +109 -0
  45. package/dist/api/core/agent/tools/findReferences.d.ts +86 -0
  46. package/dist/api/core/agent/tools/findReferences.js +135 -0
  47. package/dist/api/core/agent/tools/formatDocument.d.ts +67 -0
  48. package/dist/api/core/agent/tools/formatDocument.js +90 -0
  49. package/dist/api/core/agent/tools/getCodeActions.d.ts +77 -0
  50. package/dist/api/core/agent/tools/getCodeActions.js +97 -0
  51. package/dist/api/core/agent/tools/getCodeCompletion.d.ts +77 -0
  52. package/dist/api/core/agent/tools/getCodeCompletion.js +174 -0
  53. package/dist/api/core/agent/tools/getCodeContext.d.ts +14 -0
  54. package/dist/api/core/agent/tools/getCodeContext.js +282 -0
  55. package/dist/api/core/agent/tools/getSignatureHelp.d.ts +61 -0
  56. package/dist/api/core/agent/tools/getSignatureHelp.js +85 -0
  57. package/dist/api/core/agent/tools/getSymbols.d.ts +50 -0
  58. package/dist/api/core/agent/tools/getSymbols.js +164 -0
  59. package/dist/api/core/agent/tools/getSymbolsLSP.d.ts +58 -0
  60. package/dist/api/core/agent/tools/getSymbolsLSP.js +147 -0
  61. package/dist/api/core/agent/tools/getTypeInfo.d.ts +70 -0
  62. package/dist/api/core/agent/tools/getTypeInfo.js +84 -0
  63. package/dist/api/core/agent/tools/getWorkspaceInfo.d.ts +80 -0
  64. package/dist/api/core/agent/tools/getWorkspaceInfo.js +281 -0
  65. package/dist/api/core/agent/tools/getWorkspaceSymbols.d.ts +53 -0
  66. package/dist/api/core/agent/tools/getWorkspaceSymbols.js +97 -0
  67. package/dist/api/core/agent/tools/grepSearch.d.ts +100 -0
  68. package/dist/api/core/agent/tools/grepSearch.js +211 -0
  69. package/dist/api/core/agent/tools/languageModelToolsIntegration.d.ts +13 -0
  70. package/dist/api/core/agent/tools/languageModelToolsIntegration.js +22 -0
  71. package/dist/api/core/agent/tools/listDirectory.d.ts +66 -0
  72. package/dist/api/core/agent/tools/listDirectory.js +161 -0
  73. package/dist/api/core/agent/tools/mcpTools.d.ts +48 -0
  74. package/dist/api/core/agent/tools/mcpTools.js +442 -0
  75. package/dist/api/core/agent/tools/queryKnowledgeGraph.d.ts +120 -0
  76. package/dist/api/core/agent/tools/queryKnowledgeGraph.js +306 -0
  77. package/dist/api/core/agent/tools/readFile.d.ts +92 -0
  78. package/dist/api/core/agent/tools/readFile.js +337 -0
  79. package/dist/api/core/agent/tools/renameFile.d.ts +49 -0
  80. package/dist/api/core/agent/tools/renameFile.js +86 -0
  81. package/dist/api/core/agent/tools/renameSymbol.d.ts +70 -0
  82. package/dist/api/core/agent/tools/renameSymbol.js +106 -0
  83. package/dist/api/core/agent/tools/runTerminalCommand.d.ts +72 -0
  84. package/dist/api/core/agent/tools/runTerminalCommand.js +69 -0
  85. package/dist/api/core/agent/tools/searchFiles.d.ts +82 -0
  86. package/dist/api/core/agent/tools/searchFiles.js +280 -0
  87. package/dist/api/core/agent/tools/terminalAutoApprove.d.ts +3 -0
  88. package/dist/api/core/agent/tools/terminalAutoApprove.js +676 -0
  89. package/dist/api/core/agent/tools/treeTraversal.d.ts +60 -0
  90. package/dist/api/core/agent/tools/treeTraversal.js +217 -0
  91. package/dist/api/core/agent/tools/webSearch.d.ts +37 -0
  92. package/dist/api/core/agent/tools/webSearch.js +80 -0
  93. package/dist/api/core/agent/tools/writeFile.d.ts +59 -0
  94. package/dist/api/core/agent/tools/writeFile.js +97 -0
  95. package/dist/api/core/agent/utils/capturedWorkspaceMutationBridge.d.ts +12 -0
  96. package/dist/api/core/agent/utils/capturedWorkspaceMutationBridge.js +67 -0
  97. package/dist/api/core/agent/utils/diffUtils.d.ts +14 -0
  98. package/dist/api/core/agent/utils/diffUtils.js +39 -0
  99. package/dist/api/core/agent/utils/environmentSnapshot.d.ts +42 -0
  100. package/dist/api/core/agent/utils/environmentSnapshot.js +213 -0
  101. package/dist/api/core/agent/utils/errorRecovery.d.ts +49 -0
  102. package/dist/api/core/agent/utils/errorRecovery.js +229 -0
  103. package/dist/api/core/agent/utils/multimodalTokenLimiter.d.ts +8 -0
  104. package/dist/api/core/agent/utils/multimodalTokenLimiter.js +238 -0
  105. package/dist/api/core/agent/utils/openRouterModelSettings.d.ts +12 -0
  106. package/dist/api/core/agent/utils/openRouterModelSettings.js +34 -0
  107. package/dist/api/core/agent/utils/pathRecovery.d.ts +1 -0
  108. package/dist/api/core/agent/utils/pathRecovery.js +29 -0
  109. package/dist/api/core/agent/utils/repoMapIndex.d.ts +3 -0
  110. package/dist/api/core/agent/utils/repoMapIndex.js +197 -0
  111. package/dist/api/core/agent/utils/skillsDiscovery.d.ts +10 -0
  112. package/dist/api/core/agent/utils/skillsDiscovery.js +50 -0
  113. package/dist/api/core/agent/utils/toolCallBudget.d.ts +9 -0
  114. package/dist/api/core/agent/utils/toolCallBudget.js +55 -0
  115. package/dist/api/core/agent/utils/toolLifecycle.d.ts +30 -0
  116. package/dist/api/core/agent/utils/toolLifecycle.js +361 -0
  117. package/dist/api/core/agent/utils/toolResultSafetyProcessor.d.ts +12 -0
  118. package/dist/api/core/agent/utils/toolResultSafetyProcessor.js +57 -0
  119. package/dist/api/core/agent/utils/workspaceMutationBridge.d.ts +13 -0
  120. package/dist/api/core/agent/utils/workspaceMutationBridge.js +149 -0
  121. package/dist/api/core/agent/utils/workspacePathGuard.d.ts +7 -0
  122. package/dist/api/core/agent/utils/workspacePathGuard.js +79 -0
  123. package/dist/api/core/containers/chat/toolResultSerialization.d.ts +8 -0
  124. package/dist/api/core/containers/chat/toolResultSerialization.js +71 -0
  125. package/dist/api/core/library/BrowserManager.d.ts +11 -0
  126. package/dist/api/core/library/BrowserManager.js +66 -0
  127. package/dist/api/core/library/desktopWorkspace.d.ts +1 -0
  128. package/dist/api/core/library/desktopWorkspace.js +3 -0
  129. package/dist/api/core/library/extensionManager.d.ts +10 -0
  130. package/dist/api/core/library/extensionManager.js +27 -0
  131. package/dist/api/core/library/knowledgeGraph.d.ts +268 -0
  132. package/dist/api/core/library/knowledgeGraph.js +989 -0
  133. package/dist/api/core/library/languageModelTools.d.ts +141 -0
  134. package/dist/api/core/library/languageModelTools.js +207 -0
  135. package/dist/api/core/library/localRuntime.d.ts +23 -0
  136. package/dist/api/core/library/localRuntime.js +144 -0
  137. package/dist/api/core/library/lsp/coreLsp.d.ts +367 -0
  138. package/dist/api/core/library/lsp/coreLsp.js +2076 -0
  139. package/dist/api/core/library/lsp/protocol.d.ts +25 -0
  140. package/dist/api/core/library/lsp/protocol.js +1 -0
  141. package/dist/api/core/library/lsp/serverManager.d.ts +37 -0
  142. package/dist/api/core/library/lsp/serverManager.js +427 -0
  143. package/dist/api/core/library/mcpServerProvider.d.ts +69 -0
  144. package/dist/api/core/library/mcpServerProvider.js +152 -0
  145. package/dist/api/core/library/mcpSettings.d.ts +20 -0
  146. package/dist/api/core/library/mcpSettings.js +131 -0
  147. package/dist/api/core/library/patternMatcher.d.ts +66 -0
  148. package/dist/api/core/library/patternMatcher.js +284 -0
  149. package/dist/api/core/library/regexEscape.d.ts +4 -0
  150. package/dist/api/core/library/regexEscape.js +4 -0
  151. package/dist/api/core/library/runtimeEventBus.d.ts +27 -0
  152. package/dist/api/core/library/runtimeEventBus.js +78 -0
  153. package/dist/api/core/library/safetyMiddleware.d.ts +98 -0
  154. package/dist/api/core/library/safetyMiddleware.js +215 -0
  155. package/dist/api/core/library/tauri.d.ts +71 -0
  156. package/dist/api/core/library/tauri.js +222 -0
  157. package/dist/api/core/library/tauriImport.d.ts +5 -0
  158. package/dist/api/core/library/tauriImport.js +7 -0
  159. package/dist/api/core/library/terminalAutoApproveSettings.d.ts +32 -0
  160. package/dist/api/core/library/terminalAutoApproveSettings.js +529 -0
  161. package/dist/api/core/library/workspaceIdentity.d.ts +10 -0
  162. package/dist/api/core/library/workspaceIdentity.js +49 -0
  163. package/dist/api/core/library/workspaceSummary.d.ts +19 -0
  164. package/dist/api/core/library/workspaceSummary.js +35 -0
  165. package/dist/api/core/skills/agent-customization/SKILL.md +27 -0
  166. package/dist/api/core/skills/bug-fix/SKILL.md +21 -0
  167. package/dist/api/core/skills/create-pr/SKILL.md +32 -0
  168. package/dist/api/core/skills/dev-server/SKILL.md +20 -0
  169. package/dist/api/core/skills/fix-suggestions/SKILL.md +21 -0
  170. package/dist/api/core/skills/github-search/SKILL.md +21 -0
  171. package/dist/api/core/skills/github-summary/SKILL.md +25 -0
  172. package/dist/api/core/skills/integration-tests/SKILL.md +29 -0
  173. package/dist/api/core/skills/pr-comments/SKILL.md +23 -0
  174. package/dist/api/core/skills/project-setup/SKILL.md +20 -0
  175. package/dist/api/core/skills/search-integration/SKILL.md +19 -0
  176. package/dist/api/core/skills/search-results/SKILL.md +19 -0
  177. package/dist/api/core/skills/typescript-upgrade/SKILL.md +21 -0
  178. package/dist/api/data/runStore.d.ts +46 -0
  179. package/dist/api/data/runStore.js +244 -0
  180. package/dist/api/helpers/agentUtils.d.ts +11 -0
  181. package/dist/api/helpers/agentUtils.js +23 -0
  182. package/dist/api/helpers/modelTokenLimits.d.ts +2 -0
  183. package/dist/api/helpers/modelTokenLimits.js +158 -0
  184. package/dist/api/helpers/observationalMemory.d.ts +10 -0
  185. package/dist/api/helpers/observationalMemory.js +36 -0
  186. package/dist/api/helpers/promptBudget.d.ts +30 -0
  187. package/dist/api/helpers/promptBudget.js +216 -0
  188. package/dist/api/helpers/resolveImageMessageParts.d.ts +9 -0
  189. package/dist/api/helpers/resolveImageMessageParts.js +140 -0
  190. package/dist/api/helpers/slashCommands.d.ts +31 -0
  191. package/dist/api/helpers/slashCommands.js +129 -0
  192. package/dist/api/helpers/tokenUsage.d.ts +19 -0
  193. package/dist/api/helpers/tokenUsage.js +81 -0
  194. package/dist/api/routes/fileRoutes.d.ts +2 -0
  195. package/dist/api/routes/fileRoutes.js +108 -0
  196. package/dist/api/routes/lspDocumentRoutes.d.ts +4 -0
  197. package/dist/api/routes/lspDocumentRoutes.js +84 -0
  198. package/dist/api/routes/lspHierarchyRoutes.d.ts +4 -0
  199. package/dist/api/routes/lspHierarchyRoutes.js +122 -0
  200. package/dist/api/routes/lspPositionRoutes.d.ts +4 -0
  201. package/dist/api/routes/lspPositionRoutes.js +263 -0
  202. package/dist/api/routes/lspQueryRoutes.d.ts +4 -0
  203. package/dist/api/routes/lspQueryRoutes.js +679 -0
  204. package/dist/api/routes/lspResolveRoutes.d.ts +4 -0
  205. package/dist/api/routes/lspResolveRoutes.js +143 -0
  206. package/dist/api/routes/lspSemanticDocumentRoutes.d.ts +4 -0
  207. package/dist/api/routes/lspSemanticDocumentRoutes.js +98 -0
  208. package/dist/api/routes/semanticRoutes.d.ts +2 -0
  209. package/dist/api/routes/semanticRoutes.js +126 -0
  210. package/dist/cli.d.ts +8 -0
  211. package/dist/cli.js +160 -0
  212. package/dist/index.d.ts +1 -0
  213. package/dist/index.js +1 -0
  214. package/dist/server.d.ts +2 -0
  215. package/dist/server.js +38 -0
  216. package/package.json +100 -0
@@ -0,0 +1,2 @@
1
+ export * from "./irisClient.js";
2
+ export * from "./acpServer.js";
@@ -0,0 +1,2 @@
1
+ export * from "./irisClient.js";
2
+ export * from "./acpServer.js";
@@ -0,0 +1,58 @@
1
+ import { type ChildProcessByStdio } from "node:child_process";
2
+ import { Readable, Writable } from "node:stream";
3
+ import * as acp from "@agentclientprotocol/sdk";
4
+ export type IrisClientOptions = {
5
+ clientName?: string;
6
+ clientVersion?: string;
7
+ onSessionUpdate?: (notification: acp.SessionNotification) => void;
8
+ /**
9
+ * Called when the agent asks the client to approve or reject a tool call
10
+ * (e.g. a shell command) via `session/request_permission`. Return the
11
+ * outcome describing the user's decision. If omitted, IrisClient
12
+ * responds with `cancelled`, which the agent treats as a rejection.
13
+ */
14
+ onRequestPermission?: (params: acp.RequestPermissionRequest) => Promise<acp.RequestPermissionOutcome> | acp.RequestPermissionOutcome;
15
+ };
16
+ export type SpawnIrisClientOptions = IrisClientOptions & {
17
+ command?: string;
18
+ args?: string[];
19
+ cwd: string;
20
+ env?: NodeJS.ProcessEnv;
21
+ };
22
+ export type IrisClientTransport = acp.Stream | acp.AgentApp;
23
+ export type OpenSessionOptions = {
24
+ modelId?: string;
25
+ chatSessionId?: string;
26
+ mcpServers?: acp.McpServer[];
27
+ additionalDirectories?: string[];
28
+ meta?: Record<string, unknown>;
29
+ };
30
+ export type PromptOptions = {
31
+ modelId?: string;
32
+ maxSteps?: number;
33
+ meta?: Record<string, unknown>;
34
+ };
35
+ export declare class IrisClient {
36
+ private readonly connection;
37
+ private readonly context;
38
+ private closeTransport?;
39
+ private activeSession?;
40
+ private openingSession?;
41
+ private closed;
42
+ private constructor();
43
+ static connect(transport: IrisClientTransport, options?: IrisClientOptions): Promise<IrisClient>;
44
+ static spawn(options: SpawnIrisClientOptions): Promise<SpawnedIrisClient>;
45
+ openSession(cwd: string, options?: OpenSessionOptions): Promise<string>;
46
+ setModel(modelId: string): Promise<void>;
47
+ prompt(prompt: string | acp.ContentBlock[], options?: PromptOptions): Promise<acp.PromptResponse>;
48
+ cancel(): Promise<void>;
49
+ closeSession(): Promise<void>;
50
+ close(): Promise<void>;
51
+ private assertOpen;
52
+ private ownTransport;
53
+ }
54
+ export type SpawnedIrisClient = {
55
+ client: IrisClient;
56
+ process: ChildProcessByStdio<Writable, Readable, null>;
57
+ };
58
+ export declare function spawnIrisClient(options: SpawnIrisClientOptions): Promise<SpawnedIrisClient>;
@@ -0,0 +1,214 @@
1
+ import { spawn } from "node:child_process";
2
+ import { Readable, Writable } from "node:stream";
3
+ import * as acp from "@agentclientprotocol/sdk";
4
+ export class IrisClient {
5
+ connection;
6
+ context;
7
+ closeTransport;
8
+ activeSession;
9
+ openingSession;
10
+ closed = false;
11
+ constructor(connection, context) {
12
+ this.connection = connection;
13
+ this.context = context;
14
+ }
15
+ static async connect(transport, options = {}) {
16
+ const app = acp
17
+ .client({ name: options.clientName ?? "iris-client" })
18
+ .onNotification(acp.methods.client.session.update, (ctx) => {
19
+ options.onSessionUpdate?.(ctx.params);
20
+ })
21
+ .onRequest(acp.methods.client.session.requestPermission, async (ctx) => {
22
+ const outcome = options.onRequestPermission
23
+ ? await options.onRequestPermission(ctx.params)
24
+ : { outcome: "cancelled" };
25
+ return { outcome };
26
+ });
27
+ const connection = transport instanceof acp.AgentApp
28
+ ? app.connect(transport)
29
+ : app.connect(transport);
30
+ const context = connection.agent;
31
+ try {
32
+ await context.request(acp.methods.agent.initialize, {
33
+ protocolVersion: acp.PROTOCOL_VERSION,
34
+ clientCapabilities: {},
35
+ clientInfo: {
36
+ name: options.clientName ?? "iris-client",
37
+ version: options.clientVersion ?? "0.1.0",
38
+ },
39
+ });
40
+ }
41
+ catch (error) {
42
+ connection.close(error);
43
+ throw error;
44
+ }
45
+ return new IrisClient(connection, context);
46
+ }
47
+ static async spawn(options) {
48
+ const child = spawn(options.command ?? "iris-agent", options.args ?? ["--workspace", options.cwd, "--acp"], {
49
+ cwd: options.cwd,
50
+ env: { ...process.env, ...options.env },
51
+ stdio: ["pipe", "pipe", "inherit"],
52
+ });
53
+ const output = Writable.toWeb(child.stdin);
54
+ const input = Readable.toWeb(child.stdout);
55
+ let rejectProcessError = () => undefined;
56
+ const processError = new Promise((_, reject) => {
57
+ rejectProcessError = reject;
58
+ });
59
+ const onProcessError = (error) => rejectProcessError(error);
60
+ child.once("error", onProcessError);
61
+ try {
62
+ const client = await Promise.race([
63
+ IrisClient.connect(acp.ndJsonStream(output, input), options),
64
+ processError,
65
+ ]);
66
+ child.off("error", onProcessError);
67
+ client.ownTransport(() => {
68
+ if (child.exitCode === null && child.signalCode === null)
69
+ child.kill();
70
+ });
71
+ return { client, process: child };
72
+ }
73
+ catch (error) {
74
+ child.off("error", onProcessError);
75
+ if (child.exitCode === null && child.signalCode === null)
76
+ child.kill();
77
+ throw error;
78
+ }
79
+ }
80
+ async openSession(cwd, options) {
81
+ this.assertOpen();
82
+ if (this.activeSession) {
83
+ throw new Error("An ACP session is already open");
84
+ }
85
+ if (this.openingSession) {
86
+ throw new Error("An ACP session is already opening");
87
+ }
88
+ const openingSession = (async () => {
89
+ let builder = this.context.buildSession(cwd);
90
+ if (options?.additionalDirectories) {
91
+ builder = builder.withAdditionalDirectories(options.additionalDirectories);
92
+ }
93
+ if (options?.mcpServers) {
94
+ for (const server of options.mcpServers) {
95
+ builder = builder.withMcpServer(server);
96
+ }
97
+ }
98
+ if (options?.modelId || options?.chatSessionId || options?.meta) {
99
+ const req = builder.request;
100
+ req._meta = {
101
+ ...(options?.meta ?? {}),
102
+ iris: {
103
+ ...(typeof options?.meta?.iris === "object"
104
+ ? options.meta.iris
105
+ : {}),
106
+ ...(options?.modelId ? { modelId: options.modelId } : {}),
107
+ ...(options?.chatSessionId
108
+ ? { chatSessionId: options.chatSessionId }
109
+ : {}),
110
+ },
111
+ ...(options?.modelId ? { modelId: options.modelId } : {}),
112
+ };
113
+ }
114
+ const session = await builder.start();
115
+ this.activeSession = session;
116
+ return session.sessionId;
117
+ })();
118
+ this.openingSession = openingSession;
119
+ try {
120
+ return await openingSession;
121
+ }
122
+ finally {
123
+ if (this.openingSession === openingSession) {
124
+ this.openingSession = undefined;
125
+ }
126
+ }
127
+ }
128
+ async setModel(modelId) {
129
+ this.assertOpen();
130
+ if (!this.activeSession) {
131
+ throw new Error("Open an ACP session before setting configuration options");
132
+ }
133
+ await this.context.request(acp.methods.agent.session.setConfigOption, {
134
+ sessionId: this.activeSession.sessionId,
135
+ configId: "model",
136
+ value: modelId,
137
+ });
138
+ }
139
+ async prompt(prompt, options) {
140
+ this.assertOpen();
141
+ if (!this.activeSession) {
142
+ throw new Error("Open an ACP session before prompting");
143
+ }
144
+ if (options?.modelId || options?.maxSteps || options?.meta) {
145
+ const promptBlocks = typeof prompt === "string"
146
+ ? [{ type: "text", text: prompt }]
147
+ : Array.isArray(prompt)
148
+ ? prompt
149
+ : [prompt];
150
+ return this.context.request(acp.methods.agent.session.prompt, {
151
+ sessionId: this.activeSession.sessionId,
152
+ prompt: promptBlocks,
153
+ _meta: {
154
+ ...(options?.meta ?? {}),
155
+ iris: {
156
+ ...(typeof options?.meta?.iris === "object"
157
+ ? options.meta.iris
158
+ : {}),
159
+ ...(options?.modelId ? { modelId: options.modelId } : {}),
160
+ ...(typeof options?.maxSteps === "number"
161
+ ? { maxSteps: options.maxSteps }
162
+ : {}),
163
+ },
164
+ ...(options?.modelId ? { modelId: options.modelId } : {}),
165
+ },
166
+ });
167
+ }
168
+ return this.activeSession.prompt(prompt);
169
+ }
170
+ async cancel() {
171
+ this.assertOpen();
172
+ if (!this.activeSession)
173
+ return;
174
+ await this.context.notify(acp.methods.agent.session.cancel, {
175
+ sessionId: this.activeSession.sessionId,
176
+ });
177
+ }
178
+ async closeSession() {
179
+ this.assertOpen();
180
+ if (!this.activeSession)
181
+ return;
182
+ const activeSession = this.activeSession;
183
+ const sessionId = activeSession.sessionId;
184
+ await this.context.request(acp.methods.agent.session.close, { sessionId });
185
+ activeSession.dispose();
186
+ if (this.activeSession === activeSession) {
187
+ this.activeSession = undefined;
188
+ }
189
+ }
190
+ async close() {
191
+ if (this.closed)
192
+ return;
193
+ try {
194
+ if (this.activeSession)
195
+ await this.closeSession();
196
+ }
197
+ finally {
198
+ this.closed = true;
199
+ this.connection.close();
200
+ this.closeTransport?.();
201
+ await this.connection.closed;
202
+ }
203
+ }
204
+ assertOpen() {
205
+ if (this.closed)
206
+ throw new Error("ACP client is closed");
207
+ }
208
+ ownTransport(closeTransport) {
209
+ this.closeTransport = closeTransport;
210
+ }
211
+ }
212
+ export async function spawnIrisClient(options) {
213
+ return IrisClient.spawn(options);
214
+ }
@@ -0,0 +1,14 @@
1
+ import express from "express";
2
+ import type { Request, Response, NextFunction } from "express";
3
+ declare const router: import("express-serve-static-core").Router;
4
+ /**
5
+ * Reject with 403 unless ALL of:
6
+ * 1. The server was started as a Tauri desktop sidecar (TAURI_BUNDLED=1)
7
+ * 2. The request originates from the loopback interface
8
+ * 3. The X-Desktop-Token header matches the per-launch secret
9
+ *
10
+ * This gates the mutable /keys endpoint so arbitrary web pages or local
11
+ * processes cannot change API keys on behalf of the user.
12
+ */
13
+ export declare function requireDesktopAuth(req: Request, res: Response, next: NextFunction): express.Response<any, Record<string, any>>;
14
+ export default router;