@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.
- package/LICENSE +21 -0
- package/README.md +690 -0
- package/dist/api/acp/acpServer.d.ts +23 -0
- package/dist/api/acp/acpServer.js +814 -0
- package/dist/api/acp/index.d.ts +2 -0
- package/dist/api/acp/index.js +2 -0
- package/dist/api/acp/irisClient.d.ts +58 -0
- package/dist/api/acp/irisClient.js +214 -0
- package/dist/api/agent.d.ts +14 -0
- package/dist/api/agent.js +4171 -0
- package/dist/api/backendService.d.ts +4 -0
- package/dist/api/backendService.js +14 -0
- package/dist/api/core/agent/host/AgentContract.d.ts +82 -0
- package/dist/api/core/agent/host/AgentContract.js +1 -0
- package/dist/api/core/agent/host/AgentRegistry.d.ts +24 -0
- package/dist/api/core/agent/host/AgentRegistry.js +125 -0
- package/dist/api/core/agent/host/defaultRegistry.d.ts +15 -0
- package/dist/api/core/agent/host/defaultRegistry.js +46 -0
- package/dist/api/core/agent/host/externalAgentLifecycle.d.ts +65 -0
- package/dist/api/core/agent/host/externalAgentLifecycle.js +117 -0
- package/dist/api/core/agent/host/hostSessionManager.d.ts +111 -0
- package/dist/api/core/agent/host/hostSessionManager.js +352 -0
- package/dist/api/core/agent/host/index.d.ts +5 -0
- package/dist/api/core/agent/host/index.js +5 -0
- package/dist/api/core/agent/index.d.ts +87 -0
- package/dist/api/core/agent/index.js +1024 -0
- package/dist/api/core/agent/publicContracts.d.ts +35 -0
- package/dist/api/core/agent/publicContracts.js +103 -0
- package/dist/api/core/agent/tools/applyDiff.d.ts +51 -0
- package/dist/api/core/agent/tools/applyDiff.js +131 -0
- package/dist/api/core/agent/tools/backgroundTasks.d.ts +240 -0
- package/dist/api/core/agent/tools/backgroundTasks.js +313 -0
- package/dist/api/core/agent/tools/createDirectory.d.ts +43 -0
- package/dist/api/core/agent/tools/createDirectory.js +77 -0
- package/dist/api/core/agent/tools/deleteFile.d.ts +37 -0
- package/dist/api/core/agent/tools/deleteFile.js +66 -0
- package/dist/api/core/agent/tools/editFile.d.ts +73 -0
- package/dist/api/core/agent/tools/editFile.js +173 -0
- package/dist/api/core/agent/tools/executeCommand.d.ts +59 -0
- package/dist/api/core/agent/tools/executeCommand.js +250 -0
- package/dist/api/core/agent/tools/fileContent.d.ts +54 -0
- package/dist/api/core/agent/tools/fileContent.js +227 -0
- package/dist/api/core/agent/tools/findDefinition.d.ts +72 -0
- package/dist/api/core/agent/tools/findDefinition.js +109 -0
- package/dist/api/core/agent/tools/findReferences.d.ts +86 -0
- package/dist/api/core/agent/tools/findReferences.js +135 -0
- package/dist/api/core/agent/tools/formatDocument.d.ts +67 -0
- package/dist/api/core/agent/tools/formatDocument.js +90 -0
- package/dist/api/core/agent/tools/getCodeActions.d.ts +77 -0
- package/dist/api/core/agent/tools/getCodeActions.js +97 -0
- package/dist/api/core/agent/tools/getCodeCompletion.d.ts +77 -0
- package/dist/api/core/agent/tools/getCodeCompletion.js +174 -0
- package/dist/api/core/agent/tools/getCodeContext.d.ts +14 -0
- package/dist/api/core/agent/tools/getCodeContext.js +282 -0
- package/dist/api/core/agent/tools/getSignatureHelp.d.ts +61 -0
- package/dist/api/core/agent/tools/getSignatureHelp.js +85 -0
- package/dist/api/core/agent/tools/getSymbols.d.ts +50 -0
- package/dist/api/core/agent/tools/getSymbols.js +164 -0
- package/dist/api/core/agent/tools/getSymbolsLSP.d.ts +58 -0
- package/dist/api/core/agent/tools/getSymbolsLSP.js +147 -0
- package/dist/api/core/agent/tools/getTypeInfo.d.ts +70 -0
- package/dist/api/core/agent/tools/getTypeInfo.js +84 -0
- package/dist/api/core/agent/tools/getWorkspaceInfo.d.ts +80 -0
- package/dist/api/core/agent/tools/getWorkspaceInfo.js +281 -0
- package/dist/api/core/agent/tools/getWorkspaceSymbols.d.ts +53 -0
- package/dist/api/core/agent/tools/getWorkspaceSymbols.js +97 -0
- package/dist/api/core/agent/tools/grepSearch.d.ts +100 -0
- package/dist/api/core/agent/tools/grepSearch.js +211 -0
- package/dist/api/core/agent/tools/languageModelToolsIntegration.d.ts +13 -0
- package/dist/api/core/agent/tools/languageModelToolsIntegration.js +22 -0
- package/dist/api/core/agent/tools/listDirectory.d.ts +66 -0
- package/dist/api/core/agent/tools/listDirectory.js +161 -0
- package/dist/api/core/agent/tools/mcpTools.d.ts +48 -0
- package/dist/api/core/agent/tools/mcpTools.js +442 -0
- package/dist/api/core/agent/tools/queryKnowledgeGraph.d.ts +120 -0
- package/dist/api/core/agent/tools/queryKnowledgeGraph.js +306 -0
- package/dist/api/core/agent/tools/readFile.d.ts +92 -0
- package/dist/api/core/agent/tools/readFile.js +337 -0
- package/dist/api/core/agent/tools/renameFile.d.ts +49 -0
- package/dist/api/core/agent/tools/renameFile.js +86 -0
- package/dist/api/core/agent/tools/renameSymbol.d.ts +70 -0
- package/dist/api/core/agent/tools/renameSymbol.js +106 -0
- package/dist/api/core/agent/tools/runTerminalCommand.d.ts +72 -0
- package/dist/api/core/agent/tools/runTerminalCommand.js +69 -0
- package/dist/api/core/agent/tools/searchFiles.d.ts +82 -0
- package/dist/api/core/agent/tools/searchFiles.js +280 -0
- package/dist/api/core/agent/tools/terminalAutoApprove.d.ts +3 -0
- package/dist/api/core/agent/tools/terminalAutoApprove.js +676 -0
- package/dist/api/core/agent/tools/treeTraversal.d.ts +60 -0
- package/dist/api/core/agent/tools/treeTraversal.js +217 -0
- package/dist/api/core/agent/tools/webSearch.d.ts +37 -0
- package/dist/api/core/agent/tools/webSearch.js +80 -0
- package/dist/api/core/agent/tools/writeFile.d.ts +59 -0
- package/dist/api/core/agent/tools/writeFile.js +97 -0
- package/dist/api/core/agent/utils/capturedWorkspaceMutationBridge.d.ts +12 -0
- package/dist/api/core/agent/utils/capturedWorkspaceMutationBridge.js +67 -0
- package/dist/api/core/agent/utils/diffUtils.d.ts +14 -0
- package/dist/api/core/agent/utils/diffUtils.js +39 -0
- package/dist/api/core/agent/utils/environmentSnapshot.d.ts +42 -0
- package/dist/api/core/agent/utils/environmentSnapshot.js +213 -0
- package/dist/api/core/agent/utils/errorRecovery.d.ts +49 -0
- package/dist/api/core/agent/utils/errorRecovery.js +229 -0
- package/dist/api/core/agent/utils/multimodalTokenLimiter.d.ts +8 -0
- package/dist/api/core/agent/utils/multimodalTokenLimiter.js +238 -0
- package/dist/api/core/agent/utils/openRouterModelSettings.d.ts +12 -0
- package/dist/api/core/agent/utils/openRouterModelSettings.js +34 -0
- package/dist/api/core/agent/utils/pathRecovery.d.ts +1 -0
- package/dist/api/core/agent/utils/pathRecovery.js +29 -0
- package/dist/api/core/agent/utils/repoMapIndex.d.ts +3 -0
- package/dist/api/core/agent/utils/repoMapIndex.js +197 -0
- package/dist/api/core/agent/utils/skillsDiscovery.d.ts +10 -0
- package/dist/api/core/agent/utils/skillsDiscovery.js +50 -0
- package/dist/api/core/agent/utils/toolCallBudget.d.ts +9 -0
- package/dist/api/core/agent/utils/toolCallBudget.js +55 -0
- package/dist/api/core/agent/utils/toolLifecycle.d.ts +30 -0
- package/dist/api/core/agent/utils/toolLifecycle.js +361 -0
- package/dist/api/core/agent/utils/toolResultSafetyProcessor.d.ts +12 -0
- package/dist/api/core/agent/utils/toolResultSafetyProcessor.js +57 -0
- package/dist/api/core/agent/utils/workspaceMutationBridge.d.ts +13 -0
- package/dist/api/core/agent/utils/workspaceMutationBridge.js +149 -0
- package/dist/api/core/agent/utils/workspacePathGuard.d.ts +7 -0
- package/dist/api/core/agent/utils/workspacePathGuard.js +79 -0
- package/dist/api/core/containers/chat/toolResultSerialization.d.ts +8 -0
- package/dist/api/core/containers/chat/toolResultSerialization.js +71 -0
- package/dist/api/core/library/BrowserManager.d.ts +11 -0
- package/dist/api/core/library/BrowserManager.js +66 -0
- package/dist/api/core/library/desktopWorkspace.d.ts +1 -0
- package/dist/api/core/library/desktopWorkspace.js +3 -0
- package/dist/api/core/library/extensionManager.d.ts +10 -0
- package/dist/api/core/library/extensionManager.js +27 -0
- package/dist/api/core/library/knowledgeGraph.d.ts +268 -0
- package/dist/api/core/library/knowledgeGraph.js +989 -0
- package/dist/api/core/library/languageModelTools.d.ts +141 -0
- package/dist/api/core/library/languageModelTools.js +207 -0
- package/dist/api/core/library/localRuntime.d.ts +23 -0
- package/dist/api/core/library/localRuntime.js +144 -0
- package/dist/api/core/library/lsp/coreLsp.d.ts +367 -0
- package/dist/api/core/library/lsp/coreLsp.js +2076 -0
- package/dist/api/core/library/lsp/protocol.d.ts +25 -0
- package/dist/api/core/library/lsp/protocol.js +1 -0
- package/dist/api/core/library/lsp/serverManager.d.ts +37 -0
- package/dist/api/core/library/lsp/serverManager.js +427 -0
- package/dist/api/core/library/mcpServerProvider.d.ts +69 -0
- package/dist/api/core/library/mcpServerProvider.js +152 -0
- package/dist/api/core/library/mcpSettings.d.ts +20 -0
- package/dist/api/core/library/mcpSettings.js +131 -0
- package/dist/api/core/library/patternMatcher.d.ts +66 -0
- package/dist/api/core/library/patternMatcher.js +284 -0
- package/dist/api/core/library/regexEscape.d.ts +4 -0
- package/dist/api/core/library/regexEscape.js +4 -0
- package/dist/api/core/library/runtimeEventBus.d.ts +27 -0
- package/dist/api/core/library/runtimeEventBus.js +78 -0
- package/dist/api/core/library/safetyMiddleware.d.ts +98 -0
- package/dist/api/core/library/safetyMiddleware.js +215 -0
- package/dist/api/core/library/tauri.d.ts +71 -0
- package/dist/api/core/library/tauri.js +222 -0
- package/dist/api/core/library/tauriImport.d.ts +5 -0
- package/dist/api/core/library/tauriImport.js +7 -0
- package/dist/api/core/library/terminalAutoApproveSettings.d.ts +32 -0
- package/dist/api/core/library/terminalAutoApproveSettings.js +529 -0
- package/dist/api/core/library/workspaceIdentity.d.ts +10 -0
- package/dist/api/core/library/workspaceIdentity.js +49 -0
- package/dist/api/core/library/workspaceSummary.d.ts +19 -0
- package/dist/api/core/library/workspaceSummary.js +35 -0
- package/dist/api/core/skills/agent-customization/SKILL.md +27 -0
- package/dist/api/core/skills/bug-fix/SKILL.md +21 -0
- package/dist/api/core/skills/create-pr/SKILL.md +32 -0
- package/dist/api/core/skills/dev-server/SKILL.md +20 -0
- package/dist/api/core/skills/fix-suggestions/SKILL.md +21 -0
- package/dist/api/core/skills/github-search/SKILL.md +21 -0
- package/dist/api/core/skills/github-summary/SKILL.md +25 -0
- package/dist/api/core/skills/integration-tests/SKILL.md +29 -0
- package/dist/api/core/skills/pr-comments/SKILL.md +23 -0
- package/dist/api/core/skills/project-setup/SKILL.md +20 -0
- package/dist/api/core/skills/search-integration/SKILL.md +19 -0
- package/dist/api/core/skills/search-results/SKILL.md +19 -0
- package/dist/api/core/skills/typescript-upgrade/SKILL.md +21 -0
- package/dist/api/data/runStore.d.ts +46 -0
- package/dist/api/data/runStore.js +244 -0
- package/dist/api/helpers/agentUtils.d.ts +11 -0
- package/dist/api/helpers/agentUtils.js +23 -0
- package/dist/api/helpers/modelTokenLimits.d.ts +2 -0
- package/dist/api/helpers/modelTokenLimits.js +158 -0
- package/dist/api/helpers/observationalMemory.d.ts +10 -0
- package/dist/api/helpers/observationalMemory.js +36 -0
- package/dist/api/helpers/promptBudget.d.ts +30 -0
- package/dist/api/helpers/promptBudget.js +216 -0
- package/dist/api/helpers/resolveImageMessageParts.d.ts +9 -0
- package/dist/api/helpers/resolveImageMessageParts.js +140 -0
- package/dist/api/helpers/slashCommands.d.ts +31 -0
- package/dist/api/helpers/slashCommands.js +129 -0
- package/dist/api/helpers/tokenUsage.d.ts +19 -0
- package/dist/api/helpers/tokenUsage.js +81 -0
- package/dist/api/routes/fileRoutes.d.ts +2 -0
- package/dist/api/routes/fileRoutes.js +108 -0
- package/dist/api/routes/lspDocumentRoutes.d.ts +4 -0
- package/dist/api/routes/lspDocumentRoutes.js +84 -0
- package/dist/api/routes/lspHierarchyRoutes.d.ts +4 -0
- package/dist/api/routes/lspHierarchyRoutes.js +122 -0
- package/dist/api/routes/lspPositionRoutes.d.ts +4 -0
- package/dist/api/routes/lspPositionRoutes.js +263 -0
- package/dist/api/routes/lspQueryRoutes.d.ts +4 -0
- package/dist/api/routes/lspQueryRoutes.js +679 -0
- package/dist/api/routes/lspResolveRoutes.d.ts +4 -0
- package/dist/api/routes/lspResolveRoutes.js +143 -0
- package/dist/api/routes/lspSemanticDocumentRoutes.d.ts +4 -0
- package/dist/api/routes/lspSemanticDocumentRoutes.js +98 -0
- package/dist/api/routes/semanticRoutes.d.ts +2 -0
- package/dist/api/routes/semanticRoutes.js +126 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.js +160 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +38 -0
- package/package.json +100 -0
|
@@ -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;
|