@snoglobe/helios 0.1.0 → 0.2.1
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/README.md +1 -1
- package/dist/acp/entry.d.ts +7 -0
- package/dist/acp/entry.d.ts.map +1 -0
- package/dist/acp/entry.js +46 -0
- package/dist/acp/entry.js.map +1 -0
- package/dist/acp/server.d.ts +57 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +434 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp/transport.d.ts +31 -0
- package/dist/acp/transport.d.ts.map +1 -0
- package/dist/acp/transport.js +116 -0
- package/dist/acp/transport.js.map +1 -0
- package/dist/acp/types.d.ts +213 -0
- package/dist/acp/types.d.ts.map +1 -0
- package/dist/acp/types.js +3 -0
- package/dist/acp/types.js.map +1 -0
- package/dist/app.d.ts +8 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +51 -281
- package/dist/app.js.map +1 -1
- package/dist/bootstrap.d.ts +3 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +26 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli/auth.d.ts +20 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +62 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/doctor.d.ts +9 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +368 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/env.d.ts +13 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +16 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/export.d.ts +11 -0
- package/dist/cli/export.d.ts.map +1 -0
- package/dist/cli/export.js +103 -0
- package/dist/cli/export.js.map +1 -0
- package/dist/cli/index.d.ts +22 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +71 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-cmd.d.ts +11 -0
- package/dist/cli/init-cmd.d.ts.map +1 -0
- package/dist/cli/init-cmd.js +37 -0
- package/dist/cli/init-cmd.js.map +1 -0
- package/dist/cli/kill.d.ts +8 -0
- package/dist/cli/kill.d.ts.map +1 -0
- package/dist/cli/kill.js +46 -0
- package/dist/cli/kill.js.map +1 -0
- package/dist/cli/options.d.ts +18 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +24 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/replay.d.ts +9 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +65 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/report.d.ts +11 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +70 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/run.d.ts +17 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +120 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/search.d.ts +9 -0
- package/dist/cli/search.d.ts.map +1 -0
- package/dist/cli/search.js +52 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/cli/sessions.d.ts +8 -0
- package/dist/cli/sessions.d.ts.map +1 -0
- package/dist/cli/sessions.js +38 -0
- package/dist/cli/sessions.js.map +1 -0
- package/dist/cli/watch.d.ts +8 -0
- package/dist/cli/watch.d.ts.map +1 -0
- package/dist/cli/watch.js +81 -0
- package/dist/cli/watch.js.map +1 -0
- package/dist/config/project.d.ts +63 -0
- package/dist/config/project.d.ts.map +1 -0
- package/dist/config/project.js +112 -0
- package/dist/config/project.js.map +1 -0
- package/dist/core/orchestrator.d.ts +4 -2
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +8 -3
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/task-poller.d.ts +43 -0
- package/dist/core/task-poller.d.ts.map +1 -0
- package/dist/core/task-poller.js +98 -0
- package/dist/core/task-poller.js.map +1 -0
- package/dist/experiments/branching.d.ts +38 -0
- package/dist/experiments/branching.d.ts.map +1 -0
- package/dist/experiments/branching.js +80 -0
- package/dist/experiments/branching.js.map +1 -0
- package/dist/hub/client.d.ts +70 -0
- package/dist/hub/client.d.ts.map +1 -0
- package/dist/hub/client.js +140 -0
- package/dist/hub/client.js.map +1 -0
- package/dist/hub/config.d.ts +9 -0
- package/dist/hub/config.d.ts.map +1 -0
- package/dist/hub/config.js +38 -0
- package/dist/hub/config.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +25 -3
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +44 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +387 -0
- package/dist/init.js.map +1 -0
- package/dist/memory/context-gate.d.ts.map +1 -1
- package/dist/memory/context-gate.js +1 -1
- package/dist/memory/context-gate.js.map +1 -1
- package/dist/memory/experiment-tracker.d.ts.map +1 -1
- package/dist/memory/experiment-tracker.js +2 -6
- package/dist/memory/experiment-tracker.js.map +1 -1
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +16 -20
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/metrics/collector.d.ts.map +1 -1
- package/dist/metrics/collector.js +7 -7
- package/dist/metrics/collector.js.map +1 -1
- package/dist/metrics/resources.d.ts +44 -0
- package/dist/metrics/resources.d.ts.map +1 -0
- package/dist/metrics/resources.js +382 -0
- package/dist/metrics/resources.js.map +1 -0
- package/dist/metrics/store.d.ts +10 -2
- package/dist/metrics/store.d.ts.map +1 -1
- package/dist/metrics/store.js +91 -27
- package/dist/metrics/store.js.map +1 -1
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +2 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/notifier.d.ts +36 -0
- package/dist/notifications/notifier.d.ts.map +1 -0
- package/dist/notifications/notifier.js +102 -0
- package/dist/notifications/notifier.js.map +1 -0
- package/dist/paths.d.ts +3 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +5 -0
- package/dist/paths.js.map +1 -0
- package/dist/providers/claude/provider.d.ts +7 -3
- package/dist/providers/claude/provider.d.ts.map +1 -1
- package/dist/providers/claude/provider.js +48 -8
- package/dist/providers/claude/provider.js.map +1 -1
- package/dist/providers/openai/callback-server.d.ts +5 -1
- package/dist/providers/openai/callback-server.d.ts.map +1 -1
- package/dist/providers/openai/callback-server.js +42 -20
- package/dist/providers/openai/callback-server.js.map +1 -1
- package/dist/providers/openai/oauth.d.ts +4 -0
- package/dist/providers/openai/oauth.d.ts.map +1 -1
- package/dist/providers/openai/oauth.js +35 -14
- package/dist/providers/openai/oauth.js.map +1 -1
- package/dist/providers/openai/provider.d.ts +6 -3
- package/dist/providers/openai/provider.d.ts.map +1 -1
- package/dist/providers/openai/provider.js +35 -9
- package/dist/providers/openai/provider.js.map +1 -1
- package/dist/providers/types.d.ts +9 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/remote/config.d.ts.map +1 -1
- package/dist/remote/config.js +4 -8
- package/dist/remote/config.js.map +1 -1
- package/dist/remote/connection-pool.d.ts.map +1 -1
- package/dist/remote/connection-pool.js +9 -5
- package/dist/remote/connection-pool.js.map +1 -1
- package/dist/store/database.d.ts.map +1 -1
- package/dist/store/database.js +2 -2
- package/dist/store/database.js.map +1 -1
- package/dist/store/migrations.d.ts.map +1 -1
- package/dist/store/migrations.js +27 -0
- package/dist/store/migrations.js.map +1 -1
- package/dist/store/preferences.d.ts +2 -0
- package/dist/store/preferences.d.ts.map +1 -1
- package/dist/store/preferences.js +2 -2
- package/dist/store/preferences.js.map +1 -1
- package/dist/store/session-store.d.ts +6 -0
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +20 -5
- package/dist/store/session-store.js.map +1 -1
- package/dist/tools/env-snapshot.d.ts +5 -0
- package/dist/tools/env-snapshot.d.ts.map +1 -0
- package/dist/tools/env-snapshot.js +174 -0
- package/dist/tools/env-snapshot.js.map +1 -0
- package/dist/tools/experiment-branch.d.ts +7 -0
- package/dist/tools/experiment-branch.d.ts.map +1 -0
- package/dist/tools/experiment-branch.js +167 -0
- package/dist/tools/experiment-branch.js.map +1 -0
- package/dist/tools/file-ops.d.ts.map +1 -1
- package/dist/tools/file-ops.js +1 -3
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/hub.d.ts +5 -0
- package/dist/tools/hub.d.ts.map +1 -0
- package/dist/tools/hub.js +298 -0
- package/dist/tools/hub.js.map +1 -0
- package/dist/tools/sweep.d.ts +6 -0
- package/dist/tools/sweep.d.ts.map +1 -0
- package/dist/tools/sweep.js +153 -0
- package/dist/tools/sweep.js.map +1 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +2 -1
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/writeup.d.ts +11 -0
- package/dist/tools/writeup.d.ts.map +1 -0
- package/dist/tools/writeup.js +102 -0
- package/dist/tools/writeup.js.map +1 -0
- package/dist/ui/commands.d.ts +36 -0
- package/dist/ui/commands.d.ts.map +1 -1
- package/dist/ui/commands.js +501 -1
- package/dist/ui/commands.js.map +1 -1
- package/dist/ui/components/input-bar.js.map +1 -1
- package/dist/ui/components/overlay-header.d.ts.map +1 -1
- package/dist/ui/components/overlay-header.js.map +1 -1
- package/dist/ui/components/status-bar.js +1 -1
- package/dist/ui/components/status-bar.js.map +1 -1
- package/dist/ui/format.d.ts +4 -0
- package/dist/ui/format.d.ts.map +1 -1
- package/dist/ui/format.js +16 -0
- package/dist/ui/format.js.map +1 -1
- package/dist/ui/layout.d.ts +7 -42
- package/dist/ui/layout.d.ts.map +1 -1
- package/dist/ui/layout.js +71 -543
- package/dist/ui/layout.js.map +1 -1
- package/dist/ui/overlays/metrics-overlay.js.map +1 -1
- package/dist/ui/overlays/task-overlay.d.ts +1 -1
- package/dist/ui/overlays/task-overlay.d.ts.map +1 -1
- package/dist/ui/overlays/task-overlay.js.map +1 -1
- package/dist/ui/panels/conversation.d.ts +1 -1
- package/dist/ui/panels/conversation.d.ts.map +1 -1
- package/dist/ui/panels/conversation.js +1 -2
- package/dist/ui/panels/conversation.js.map +1 -1
- package/dist/ui/panels/metrics-dashboard.d.ts.map +1 -1
- package/dist/ui/panels/metrics-dashboard.js.map +1 -1
- package/dist/ui/panels/sleep-panel.js.map +1 -1
- package/dist/ui/panels/sticky-notes.d.ts.map +1 -1
- package/dist/ui/panels/sticky-notes.js.map +1 -1
- package/dist/ui/panels/task-list.d.ts +4 -2
- package/dist/ui/panels/task-list.d.ts.map +1 -1
- package/dist/ui/panels/task-list.js +41 -9
- package/dist/ui/panels/task-list.js.map +1 -1
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js.map +1 -1
- package/dist/ui/types.d.ts +22 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +2 -0
- package/dist/ui/types.js.map +1 -0
- package/package.json +19 -6
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> [!CAUTION]
|
|
4
4
|
> **Important:** Helios does not currently have a permissions/security model. The agent runs basically unrestricted. You are responsible for any losses of data/other adverse outcomes from running it. If you have stuff you care about, then back it up (whether or not you use Helios, backing up is a good idea!), run Helios in a container, or wait until it has a permissions system.
|
|
5
5
|
|
|
6
|
-

|
|
7
7
|
|
|
8
8
|
An autonomous research agent inspired by [Andrej Karpathy's 'autoresearch'](https://github.com/karpathy/autoresearch). Autoresearch works very well within Helios, just have to tune the prompt slightly.
|
|
9
9
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/acp/entry.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP mode entry point.
|
|
3
|
+
* Initializes the Helios runtime and starts the ACP stdio server.
|
|
4
|
+
* No TUI — pure JSON-RPC over stdin/stdout.
|
|
5
|
+
*/
|
|
6
|
+
import { createRuntime } from "../init.js";
|
|
7
|
+
import { AcpServer } from "./server.js";
|
|
8
|
+
const providerArg = (() => {
|
|
9
|
+
const i = process.argv.indexOf("--provider");
|
|
10
|
+
const j = process.argv.indexOf("-p");
|
|
11
|
+
const idx = Math.max(i, j);
|
|
12
|
+
if (idx >= 0) {
|
|
13
|
+
const v = process.argv[idx + 1];
|
|
14
|
+
if (v === "claude" || v === "openai")
|
|
15
|
+
return v;
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
})();
|
|
19
|
+
const claudeMode = (() => {
|
|
20
|
+
const i = process.argv.indexOf("--claude-mode");
|
|
21
|
+
if (i >= 0) {
|
|
22
|
+
const v = process.argv[i + 1];
|
|
23
|
+
if (v === "cli" || v === "api")
|
|
24
|
+
return v;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
})();
|
|
28
|
+
// stderr for logs since stdout is the ACP transport
|
|
29
|
+
const log = (msg) => process.stderr.write(`[helios-acp] ${msg}\n`);
|
|
30
|
+
log("Initializing runtime...");
|
|
31
|
+
const runtime = await createRuntime({ provider: providerArg, claudeMode });
|
|
32
|
+
const server = new AcpServer(runtime);
|
|
33
|
+
log("ACP server ready — waiting for initialize request");
|
|
34
|
+
// Clean up on exit
|
|
35
|
+
process.on("SIGINT", () => {
|
|
36
|
+
server.stop();
|
|
37
|
+
runtime.cleanup();
|
|
38
|
+
process.exit(0);
|
|
39
|
+
});
|
|
40
|
+
process.on("SIGTERM", () => {
|
|
41
|
+
server.stop();
|
|
42
|
+
runtime.cleanup();
|
|
43
|
+
process.exit(0);
|
|
44
|
+
});
|
|
45
|
+
server.start();
|
|
46
|
+
//# sourceMappingURL=entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/acp/entry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE;IACxB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IACvB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC,EAAE,CAAC;AAEL,oDAAoD;AACpD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAE3E,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAE/B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAEtC,GAAG,CAAC,mDAAmD,CAAC,CAAC;AAEzD,mBAAmB;AACnB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,OAAO,CAAC,OAAO,EAAE,CAAC;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,OAAO,CAAC,OAAO,EAAE,CAAC;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP Agent server — maps Agent Client Protocol to the Helios Orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Lifecycle:
|
|
5
|
+
* Client → initialize → negotiate capabilities
|
|
6
|
+
* Client → session/new → create orchestrator session
|
|
7
|
+
* Client → session/prompt → stream model output as session/update notifications
|
|
8
|
+
* Client → session/cancel → interrupt generation
|
|
9
|
+
* Client → session/list → list past sessions
|
|
10
|
+
* Client → session/set_config_option → switch provider/model
|
|
11
|
+
*/
|
|
12
|
+
import type { HeliosRuntime } from "../init.js";
|
|
13
|
+
export declare class AcpServer {
|
|
14
|
+
private transport;
|
|
15
|
+
private runtime;
|
|
16
|
+
private activeSessions;
|
|
17
|
+
private activePromptSession;
|
|
18
|
+
private initialized;
|
|
19
|
+
private prompting;
|
|
20
|
+
private static readonly MAX_SESSIONS;
|
|
21
|
+
private pollTimer;
|
|
22
|
+
constructor(runtime: HeliosRuntime);
|
|
23
|
+
private get orchestrator();
|
|
24
|
+
private get experimentTracker();
|
|
25
|
+
start(): void;
|
|
26
|
+
stop(): void;
|
|
27
|
+
private wireMonitor;
|
|
28
|
+
private wireSleepWake;
|
|
29
|
+
/**
|
|
30
|
+
* Poll background tasks every 5s — detect completion, collect final metrics,
|
|
31
|
+
* update experiment tracker, and fire notifications.
|
|
32
|
+
* Uses setTimeout + re-arm to prevent overlapping polls under high latency.
|
|
33
|
+
*/
|
|
34
|
+
private startTaskPoll;
|
|
35
|
+
/** Get the most recently used session ID. */
|
|
36
|
+
private getActiveSessionId;
|
|
37
|
+
/**
|
|
38
|
+
* Inject a synthetic prompt into the session (monitor tick, sleep wake, etc.)
|
|
39
|
+
* and stream the model's response as ACP session updates.
|
|
40
|
+
*/
|
|
41
|
+
private injectPrompt;
|
|
42
|
+
private registerHandlers;
|
|
43
|
+
private handleInitialize;
|
|
44
|
+
private handleSessionNew;
|
|
45
|
+
private handleSessionPrompt;
|
|
46
|
+
private handleSessionCancel;
|
|
47
|
+
private handleSessionList;
|
|
48
|
+
private handleSetConfigOption;
|
|
49
|
+
private sendUpdate;
|
|
50
|
+
private getConfigOptions;
|
|
51
|
+
/**
|
|
52
|
+
* Build a CommandContext adapter that routes TUI command output
|
|
53
|
+
* through ACP session/update notifications.
|
|
54
|
+
*/
|
|
55
|
+
private buildCommandContext;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/acp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA6ChD,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAO;IAE3C,OAAO,CAAC,SAAS,CAA+C;gBAEpD,OAAO,EAAE,aAAa;IAQlC,OAAO,KAAK,YAAY,GAAwC;IAChE,OAAO,KAAK,iBAAiB,GAA6C;IAE1E,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IAUZ,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;IASrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAqCrB,6CAA6C;IAC7C,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;YACW,YAAY;IA0D1B,OAAO,CAAC,gBAAgB;YAsBV,gBAAgB;YAmBhB,gBAAgB;YAgChB,mBAAmB;IAqFjC,OAAO,CAAC,mBAAmB;YAOb,iBAAiB;YAajB,qBAAqB;IAUnC,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,gBAAgB;IAiBxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAsC5B"}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP Agent server — maps Agent Client Protocol to the Helios Orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Lifecycle:
|
|
5
|
+
* Client → initialize → negotiate capabilities
|
|
6
|
+
* Client → session/new → create orchestrator session
|
|
7
|
+
* Client → session/prompt → stream model output as session/update notifications
|
|
8
|
+
* Client → session/cancel → interrupt generation
|
|
9
|
+
* Client → session/list → list past sessions
|
|
10
|
+
* Client → session/set_config_option → switch provider/model
|
|
11
|
+
*/
|
|
12
|
+
import { StdioTransport } from "./transport.js";
|
|
13
|
+
import { VERSION } from "../version.js";
|
|
14
|
+
import { COMMANDS, handleSlashCommand } from "../ui/commands.js";
|
|
15
|
+
import { pollTaskStatuses, handleFinishedTasks, buildMonitorMessage } from "../core/task-poller.js";
|
|
16
|
+
/** Map helios tool names to ACP tool call kinds. */
|
|
17
|
+
function toolKind(name) {
|
|
18
|
+
if (/read|download|task_output|show_metrics|memory_ls|memory_read/.test(name))
|
|
19
|
+
return "read";
|
|
20
|
+
if (/write|upload|patch|memory_write|memory_rm|clear/.test(name))
|
|
21
|
+
return "edit";
|
|
22
|
+
if (/exec|kill/.test(name))
|
|
23
|
+
return "execute";
|
|
24
|
+
if (/fetch|web/.test(name))
|
|
25
|
+
return "fetch";
|
|
26
|
+
if (/list|compare|hub_leaves|hub_log|hub_read/.test(name))
|
|
27
|
+
return "search";
|
|
28
|
+
if (/consult|writeup/.test(name))
|
|
29
|
+
return "think";
|
|
30
|
+
return "other";
|
|
31
|
+
}
|
|
32
|
+
/** Build a descriptive title for a tool call from the tool name + args. */
|
|
33
|
+
function toolTitle(event) {
|
|
34
|
+
const args = event.args;
|
|
35
|
+
const machine = args.machine_id;
|
|
36
|
+
switch (event.name) {
|
|
37
|
+
case "remote_exec":
|
|
38
|
+
case "remote_exec_background": {
|
|
39
|
+
const label = machine ?? event.name;
|
|
40
|
+
const cmd = args.command;
|
|
41
|
+
return cmd ? `${label}: ${cmd}` : label;
|
|
42
|
+
}
|
|
43
|
+
case "remote_upload":
|
|
44
|
+
case "remote_download":
|
|
45
|
+
return `${machine ?? event.name}: ${args.remote_path ?? args.local_path ?? ""}`;
|
|
46
|
+
case "memory_write":
|
|
47
|
+
case "memory_read":
|
|
48
|
+
case "memory_ls":
|
|
49
|
+
case "memory_rm":
|
|
50
|
+
return `${event.name}: ${args.path ?? "/"}`;
|
|
51
|
+
case "metrics_query":
|
|
52
|
+
return `${event.name}: ${args.name ?? "all"}`;
|
|
53
|
+
default:
|
|
54
|
+
return event.name;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class AcpServer {
|
|
58
|
+
transport = new StdioTransport();
|
|
59
|
+
runtime;
|
|
60
|
+
activeSessions = new Map();
|
|
61
|
+
activePromptSession = null;
|
|
62
|
+
initialized = false;
|
|
63
|
+
prompting = false;
|
|
64
|
+
static MAX_SESSIONS = 100;
|
|
65
|
+
pollTimer = null;
|
|
66
|
+
constructor(runtime) {
|
|
67
|
+
this.runtime = runtime;
|
|
68
|
+
this.registerHandlers();
|
|
69
|
+
this.wireMonitor();
|
|
70
|
+
this.wireSleepWake();
|
|
71
|
+
this.startTaskPoll();
|
|
72
|
+
}
|
|
73
|
+
get orchestrator() { return this.runtime.orchestrator; }
|
|
74
|
+
get experimentTracker() { return this.runtime.experimentTracker; }
|
|
75
|
+
start() {
|
|
76
|
+
this.transport.start();
|
|
77
|
+
}
|
|
78
|
+
stop() {
|
|
79
|
+
if (this.pollTimer) {
|
|
80
|
+
clearTimeout(this.pollTimer);
|
|
81
|
+
this.pollTimer = null;
|
|
82
|
+
}
|
|
83
|
+
this.transport.stop();
|
|
84
|
+
}
|
|
85
|
+
// ── Monitor & sleep/wake wiring ────────────────────
|
|
86
|
+
wireMonitor() {
|
|
87
|
+
this.runtime.monitorManager.on("tick", (config) => {
|
|
88
|
+
if (this.prompting)
|
|
89
|
+
return;
|
|
90
|
+
const sessionId = this.getActiveSessionId();
|
|
91
|
+
if (!sessionId)
|
|
92
|
+
return;
|
|
93
|
+
const message = buildMonitorMessage(config, this.runtime.executor, this.runtime.metricStore);
|
|
94
|
+
this.injectPrompt(sessionId, message);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
wireSleepWake() {
|
|
98
|
+
this.runtime.sleepManager.on("wake", (_session, _reason, wakeMessage) => {
|
|
99
|
+
if (this.prompting)
|
|
100
|
+
return;
|
|
101
|
+
const sessionId = this.getActiveSessionId();
|
|
102
|
+
if (!sessionId)
|
|
103
|
+
return;
|
|
104
|
+
this.injectPrompt(sessionId, wakeMessage);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Poll background tasks every 5s — detect completion, collect final metrics,
|
|
109
|
+
* update experiment tracker, and fire notifications.
|
|
110
|
+
* Uses setTimeout + re-arm to prevent overlapping polls under high latency.
|
|
111
|
+
*/
|
|
112
|
+
startTaskPoll() {
|
|
113
|
+
const { executor, metricCollector } = this.runtime;
|
|
114
|
+
const poll = async () => {
|
|
115
|
+
try {
|
|
116
|
+
const procs = executor.getBackgroundProcesses();
|
|
117
|
+
if (procs.length === 0) {
|
|
118
|
+
await metricCollector.collectAll().catch(() => { });
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const { finished } = await pollTaskStatuses(executor);
|
|
122
|
+
if (finished.length > 0) {
|
|
123
|
+
await handleFinishedTasks(finished, {
|
|
124
|
+
executor: this.runtime.executor,
|
|
125
|
+
connectionPool: this.runtime.connectionPool,
|
|
126
|
+
metricCollector: this.runtime.metricCollector,
|
|
127
|
+
metricStore: this.runtime.metricStore,
|
|
128
|
+
experimentTracker: this.runtime.experimentTracker,
|
|
129
|
+
notifier: this.runtime.notifier,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
await metricCollector.collectAll().catch(() => { });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Non-fatal — will retry on next tick
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
if (this.pollTimer !== null) {
|
|
141
|
+
this.pollTimer = setTimeout(poll, 5000);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
this.pollTimer = setTimeout(poll, 5000);
|
|
146
|
+
}
|
|
147
|
+
/** Get the most recently used session ID. */
|
|
148
|
+
getActiveSessionId() {
|
|
149
|
+
if (this.activePromptSession)
|
|
150
|
+
return this.activePromptSession;
|
|
151
|
+
// Fall back to the last session we know about
|
|
152
|
+
const ids = [...this.activeSessions.keys()];
|
|
153
|
+
return ids.length > 0 ? ids[ids.length - 1] : null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Inject a synthetic prompt into the session (monitor tick, sleep wake, etc.)
|
|
157
|
+
* and stream the model's response as ACP session updates.
|
|
158
|
+
*/
|
|
159
|
+
async injectPrompt(sessionId, text) {
|
|
160
|
+
if (this.prompting)
|
|
161
|
+
return;
|
|
162
|
+
this.prompting = true;
|
|
163
|
+
try {
|
|
164
|
+
for await (const event of this.orchestrator.send(text)) {
|
|
165
|
+
this.experimentTracker?.onEvent(event);
|
|
166
|
+
switch (event.type) {
|
|
167
|
+
case "text":
|
|
168
|
+
if (event.delta) {
|
|
169
|
+
this.sendUpdate(sessionId, {
|
|
170
|
+
sessionUpdate: "agent_message_chunk",
|
|
171
|
+
content: { type: "text", text: event.delta },
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
case "tool_call":
|
|
176
|
+
this.sendUpdate(sessionId, {
|
|
177
|
+
sessionUpdate: "tool_call",
|
|
178
|
+
toolCallId: event.id,
|
|
179
|
+
title: toolTitle(event),
|
|
180
|
+
kind: toolKind(event.name),
|
|
181
|
+
status: "in_progress",
|
|
182
|
+
});
|
|
183
|
+
break;
|
|
184
|
+
case "tool_result": {
|
|
185
|
+
const content = event.result
|
|
186
|
+
? [{ type: "text", text: event.result }]
|
|
187
|
+
: [];
|
|
188
|
+
this.sendUpdate(sessionId, {
|
|
189
|
+
sessionUpdate: "tool_call_update",
|
|
190
|
+
toolCallId: event.callId,
|
|
191
|
+
status: event.isError ? "failed" : "completed",
|
|
192
|
+
content,
|
|
193
|
+
});
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case "error":
|
|
197
|
+
this.sendUpdate(sessionId, {
|
|
198
|
+
sessionUpdate: "agent_message_chunk",
|
|
199
|
+
content: { type: "text", text: `Error: ${event.error.message}` },
|
|
200
|
+
});
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
process.stderr.write(`[helios-acp] inject prompt error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
207
|
+
}
|
|
208
|
+
finally {
|
|
209
|
+
this.prompting = false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// ── Handler registration ────────────────────────────
|
|
213
|
+
registerHandlers() {
|
|
214
|
+
this.transport.onMethod("initialize", (params) => this.handleInitialize(params));
|
|
215
|
+
this.transport.onMethod("session/new", (params) => this.handleSessionNew(params));
|
|
216
|
+
this.transport.onMethod("session/prompt", (params) => this.handleSessionPrompt(params));
|
|
217
|
+
this.transport.onMethod("session/list", (params) => this.handleSessionList(params));
|
|
218
|
+
this.transport.onMethod("session/set_config_option", (params) => this.handleSetConfigOption(params));
|
|
219
|
+
this.transport.onNotification("session/cancel", (params) => this.handleSessionCancel(params));
|
|
220
|
+
}
|
|
221
|
+
// ── Protocol methods ────────────────────────────────
|
|
222
|
+
async handleInitialize(_params) {
|
|
223
|
+
this.initialized = true;
|
|
224
|
+
return {
|
|
225
|
+
protocolVersion: 1,
|
|
226
|
+
agentCapabilities: {
|
|
227
|
+
loadSession: false,
|
|
228
|
+
promptCapabilities: {},
|
|
229
|
+
sessionCapabilities: { list: {} },
|
|
230
|
+
mcpCapabilities: { http: false, sse: false },
|
|
231
|
+
},
|
|
232
|
+
agentInfo: {
|
|
233
|
+
name: "helios",
|
|
234
|
+
title: "Helios — Autonomous ML Research Agent",
|
|
235
|
+
version: VERSION,
|
|
236
|
+
},
|
|
237
|
+
authMethods: [],
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
async handleSessionNew(params) {
|
|
241
|
+
if (!this.initialized)
|
|
242
|
+
throw new Error("Not initialized");
|
|
243
|
+
const session = await this.orchestrator.ensureSession();
|
|
244
|
+
this.activeSessions.set(session.id, { cwd: params.cwd });
|
|
245
|
+
// Evict oldest entries to bound memory
|
|
246
|
+
if (this.activeSessions.size > AcpServer.MAX_SESSIONS) {
|
|
247
|
+
const oldest = this.activeSessions.keys().next().value;
|
|
248
|
+
this.activeSessions.delete(oldest);
|
|
249
|
+
}
|
|
250
|
+
// Advertise slash commands
|
|
251
|
+
this.sendUpdate(session.id, {
|
|
252
|
+
sessionUpdate: "available_commands_update",
|
|
253
|
+
availableCommands: COMMANDS.map((c) => ({
|
|
254
|
+
name: c.name,
|
|
255
|
+
description: c.description,
|
|
256
|
+
input: c.args ? { hint: c.args } : undefined,
|
|
257
|
+
})),
|
|
258
|
+
});
|
|
259
|
+
// Advertise config options
|
|
260
|
+
const configOptions = this.getConfigOptions();
|
|
261
|
+
this.sendUpdate(session.id, {
|
|
262
|
+
sessionUpdate: "config_option_update",
|
|
263
|
+
configOptions,
|
|
264
|
+
});
|
|
265
|
+
return { sessionId: session.id, configOptions };
|
|
266
|
+
}
|
|
267
|
+
async handleSessionPrompt(params) {
|
|
268
|
+
if (!this.initialized)
|
|
269
|
+
throw new Error("Not initialized");
|
|
270
|
+
this.activePromptSession = params.sessionId;
|
|
271
|
+
// Extract text from content blocks
|
|
272
|
+
const text = params.prompt
|
|
273
|
+
.filter((b) => b.type === "text")
|
|
274
|
+
.map((b) => b.text)
|
|
275
|
+
.join("\n");
|
|
276
|
+
if (!text.trim()) {
|
|
277
|
+
return { stopReason: "end_turn" };
|
|
278
|
+
}
|
|
279
|
+
// Handle slash commands via the shared command handler
|
|
280
|
+
if (text.startsWith("/")) {
|
|
281
|
+
await handleSlashCommand(text, this.buildCommandContext(params.sessionId));
|
|
282
|
+
return { stopReason: "end_turn" };
|
|
283
|
+
}
|
|
284
|
+
this.prompting = true;
|
|
285
|
+
try {
|
|
286
|
+
let stopReason = "end_turn";
|
|
287
|
+
for await (const event of this.orchestrator.send(text)) {
|
|
288
|
+
// Check for cancellation
|
|
289
|
+
if (this.activePromptSession !== params.sessionId) {
|
|
290
|
+
stopReason = "cancelled";
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
// Feed to experiment tracker
|
|
294
|
+
this.experimentTracker?.onEvent(event);
|
|
295
|
+
switch (event.type) {
|
|
296
|
+
case "text":
|
|
297
|
+
if (event.delta) {
|
|
298
|
+
this.sendUpdate(params.sessionId, {
|
|
299
|
+
sessionUpdate: "agent_message_chunk",
|
|
300
|
+
content: { type: "text", text: event.delta },
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
break;
|
|
304
|
+
case "tool_call":
|
|
305
|
+
this.sendUpdate(params.sessionId, {
|
|
306
|
+
sessionUpdate: "tool_call",
|
|
307
|
+
toolCallId: event.id,
|
|
308
|
+
title: toolTitle(event),
|
|
309
|
+
kind: toolKind(event.name),
|
|
310
|
+
status: "in_progress",
|
|
311
|
+
});
|
|
312
|
+
break;
|
|
313
|
+
case "tool_result": {
|
|
314
|
+
const content = event.result
|
|
315
|
+
? [{ type: "text", text: event.result }]
|
|
316
|
+
: [];
|
|
317
|
+
this.sendUpdate(params.sessionId, {
|
|
318
|
+
sessionUpdate: "tool_call_update",
|
|
319
|
+
toolCallId: event.callId,
|
|
320
|
+
status: event.isError ? "failed" : "completed",
|
|
321
|
+
content,
|
|
322
|
+
});
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
case "error":
|
|
326
|
+
this.sendUpdate(params.sessionId, {
|
|
327
|
+
sessionUpdate: "agent_message_chunk",
|
|
328
|
+
content: { type: "text", text: `Error: ${event.error.message}` },
|
|
329
|
+
});
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return { stopReason };
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
return { stopReason: "end_turn" };
|
|
337
|
+
}
|
|
338
|
+
finally {
|
|
339
|
+
this.activePromptSession = null;
|
|
340
|
+
this.prompting = false;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
handleSessionCancel(params) {
|
|
344
|
+
if (this.activePromptSession === params.sessionId) {
|
|
345
|
+
this.orchestrator.interrupt();
|
|
346
|
+
this.activePromptSession = null;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
async handleSessionList(_params) {
|
|
350
|
+
if (!this.initialized)
|
|
351
|
+
throw new Error("Not initialized");
|
|
352
|
+
const summaries = this.orchestrator.sessionStore.listSessionSummaries(50);
|
|
353
|
+
return {
|
|
354
|
+
sessions: summaries.map((s) => ({
|
|
355
|
+
sessionId: s.id,
|
|
356
|
+
cwd: this.activeSessions.get(s.id)?.cwd ?? process.cwd(),
|
|
357
|
+
title: s.firstUserMessage ?? undefined,
|
|
358
|
+
updatedAt: new Date(s.lastActiveAt).toISOString(),
|
|
359
|
+
})),
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
async handleSetConfigOption(params) {
|
|
363
|
+
if (!this.initialized)
|
|
364
|
+
throw new Error("Not initialized");
|
|
365
|
+
if (params.configId === "provider") {
|
|
366
|
+
await this.orchestrator.switchProvider(params.value);
|
|
367
|
+
}
|
|
368
|
+
return { configOptions: this.getConfigOptions() };
|
|
369
|
+
}
|
|
370
|
+
// ── Helpers ─────────────────────────────────────────
|
|
371
|
+
sendUpdate(sessionId, update) {
|
|
372
|
+
this.transport.notify("session/update", {
|
|
373
|
+
sessionId,
|
|
374
|
+
update,
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
getConfigOptions() {
|
|
378
|
+
const currentProvider = this.orchestrator.currentProvider?.name ?? "claude";
|
|
379
|
+
return [
|
|
380
|
+
{
|
|
381
|
+
id: "provider",
|
|
382
|
+
name: "Provider",
|
|
383
|
+
type: "select",
|
|
384
|
+
category: "model",
|
|
385
|
+
currentValue: currentProvider,
|
|
386
|
+
options: [
|
|
387
|
+
{ value: "claude", name: "Claude" },
|
|
388
|
+
{ value: "openai", name: "OpenAI" },
|
|
389
|
+
],
|
|
390
|
+
},
|
|
391
|
+
];
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Build a CommandContext adapter that routes TUI command output
|
|
395
|
+
* through ACP session/update notifications.
|
|
396
|
+
*/
|
|
397
|
+
buildCommandContext(sessionId) {
|
|
398
|
+
const messages = [];
|
|
399
|
+
let nextId = 1;
|
|
400
|
+
const addMessage = (role, content) => {
|
|
401
|
+
const id = nextId++;
|
|
402
|
+
this.sendUpdate(sessionId, {
|
|
403
|
+
sessionUpdate: "agent_message_chunk",
|
|
404
|
+
content: { type: "text", text: content },
|
|
405
|
+
});
|
|
406
|
+
return id;
|
|
407
|
+
};
|
|
408
|
+
return {
|
|
409
|
+
orchestrator: this.orchestrator,
|
|
410
|
+
addMessage,
|
|
411
|
+
updateMessage: (_id, updates) => {
|
|
412
|
+
// For streaming updates (like /writeup), send incremental chunks
|
|
413
|
+
if (updates.content) {
|
|
414
|
+
this.sendUpdate(sessionId, {
|
|
415
|
+
sessionUpdate: "agent_message_chunk",
|
|
416
|
+
content: { type: "text", text: updates.content },
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
setMessages: () => { },
|
|
421
|
+
messages,
|
|
422
|
+
setIsStreaming: () => { },
|
|
423
|
+
connectionPool: this.runtime.connectionPool,
|
|
424
|
+
metricStore: this.runtime.metricStore,
|
|
425
|
+
metricCollector: this.runtime.metricCollector,
|
|
426
|
+
memoryStore: this.runtime.memoryStore,
|
|
427
|
+
stickyManager: this.runtime.stickyManager,
|
|
428
|
+
setStickyNotes: () => { },
|
|
429
|
+
executor: this.runtime.executor,
|
|
430
|
+
restoreMessages: () => [],
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/acp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON-RPC 2.0 over stdio transport for ACP.
|
|
3
|
+
* Messages are newline-delimited JSON on stdin/stdout.
|
|
4
|
+
*/
|
|
5
|
+
type MethodHandler = (params: Record<string, unknown>, id: number | string) => Promise<unknown>;
|
|
6
|
+
type NotificationHandler = (params: Record<string, unknown>) => void;
|
|
7
|
+
export declare class StdioTransport {
|
|
8
|
+
private rl;
|
|
9
|
+
private methods;
|
|
10
|
+
private notifications;
|
|
11
|
+
private pending;
|
|
12
|
+
private nextId;
|
|
13
|
+
constructor();
|
|
14
|
+
/** Register a handler for incoming requests (has id, expects response). */
|
|
15
|
+
onMethod(method: string, handler: MethodHandler): void;
|
|
16
|
+
/** Register a handler for incoming notifications (no id, no response). */
|
|
17
|
+
onNotification(method: string, handler: NotificationHandler): void;
|
|
18
|
+
/** Send a notification to the client (no response expected). */
|
|
19
|
+
notify(method: string, params?: Record<string, unknown>): void;
|
|
20
|
+
/** Send a request to the client and wait for a response (30s timeout). */
|
|
21
|
+
request(method: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
22
|
+
/** Start reading from stdin. */
|
|
23
|
+
start(): void;
|
|
24
|
+
stop(): void;
|
|
25
|
+
private dispatch;
|
|
26
|
+
private sendResult;
|
|
27
|
+
private sendError;
|
|
28
|
+
private writeLine;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/acp/transport.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAChG,KAAK,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAErE,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAC;IACX,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,OAAO,CAGV;IACL,OAAO,CAAC,MAAM,CAAK;;IAMnB,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAItD,0EAA0E;IAC1E,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAIlE,gEAAgE;IAChE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM9D,0EAA0E;IACpE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBjF,gCAAgC;IAChC,KAAK,IAAI,IAAI;IAab,IAAI,IAAI,IAAI;IAMZ,OAAO,CAAC,QAAQ;IAuChB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,SAAS;CAGlB"}
|