@multiplayer-app/agent 0.1.20 → 0.1.22
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 +14 -7
- package/dist/agent/definition.test.js +8 -3
- package/dist/agent/definition.test.js.map +1 -1
- package/dist/agent/profiles/coding.d.ts +1 -1
- package/dist/agent/profiles/coding.d.ts.map +1 -1
- package/dist/agent/profiles/coding.js +21 -4
- package/dist/agent/profiles/coding.js.map +1 -1
- package/dist/agent/profiles/index.js +1 -1
- package/dist/agent/profiles/index.js.map +1 -1
- package/dist/agent/profiles/research.d.ts.map +1 -1
- package/dist/agent/profiles/research.js +2 -2
- package/dist/agent/profiles/research.js.map +1 -1
- package/dist/agent/turn-history.d.ts.map +1 -1
- package/dist/agent/turn-history.js +7 -1
- package/dist/agent/turn-history.js.map +1 -1
- package/dist/agent/turn-runner.d.ts +8 -0
- package/dist/agent/turn-runner.d.ts.map +1 -1
- package/dist/agent/turn-runner.js +35 -10
- package/dist/agent/turn-runner.js.map +1 -1
- package/dist/app/app-host.d.ts +57 -0
- package/dist/app/app-host.d.ts.map +1 -0
- package/dist/app/app-host.js +252 -0
- package/dist/app/app-host.js.map +1 -0
- package/dist/app/app-host.test.d.ts +2 -0
- package/dist/app/app-host.test.d.ts.map +1 -0
- package/dist/app/app-host.test.js +639 -0
- package/dist/app/app-host.test.js.map +1 -0
- package/dist/app/build-log.d.ts +14 -0
- package/dist/app/build-log.d.ts.map +1 -0
- package/dist/app/build-log.js +173 -0
- package/dist/app/build-log.js.map +1 -0
- package/dist/app/build-log.test.d.ts +2 -0
- package/dist/app/build-log.test.d.ts.map +1 -0
- package/dist/app/build-log.test.js +255 -0
- package/dist/app/build-log.test.js.map +1 -0
- package/dist/app/config.d.ts +196 -0
- package/dist/app/config.d.ts.map +1 -0
- package/dist/app/config.js +362 -0
- package/dist/app/config.js.map +1 -0
- package/dist/app/config.test.d.ts +2 -0
- package/dist/app/config.test.d.ts.map +1 -0
- package/dist/app/config.test.js +224 -0
- package/dist/app/config.test.js.map +1 -0
- package/dist/app/detect.d.ts +68 -0
- package/dist/app/detect.d.ts.map +1 -0
- package/dist/app/detect.js +449 -0
- package/dist/app/detect.js.map +1 -0
- package/dist/app/detect.test.d.ts +2 -0
- package/dist/app/detect.test.d.ts.map +1 -0
- package/dist/app/detect.test.js +267 -0
- package/dist/app/detect.test.js.map +1 -0
- package/dist/app/env.d.ts +5 -0
- package/dist/app/env.d.ts.map +1 -0
- package/dist/app/env.js +22 -0
- package/dist/app/env.js.map +1 -0
- package/dist/app/functions-cli.d.ts +3 -0
- package/dist/app/functions-cli.d.ts.map +1 -0
- package/dist/app/functions-cli.js +27 -0
- package/dist/app/functions-cli.js.map +1 -0
- package/dist/app/functions-host.d.ts +15 -0
- package/dist/app/functions-host.d.ts.map +1 -0
- package/dist/app/functions-host.js +276 -0
- package/dist/app/functions-host.js.map +1 -0
- package/dist/app/functions-host.test.d.ts +2 -0
- package/dist/app/functions-host.test.d.ts.map +1 -0
- package/dist/app/functions-host.test.js +117 -0
- package/dist/app/functions-host.test.js.map +1 -0
- package/dist/app/functions-routes.d.ts +23 -0
- package/dist/app/functions-routes.d.ts.map +1 -0
- package/dist/app/functions-routes.js +85 -0
- package/dist/app/functions-routes.js.map +1 -0
- package/dist/app/functions-routes.test.d.ts +2 -0
- package/dist/app/functions-routes.test.d.ts.map +1 -0
- package/dist/app/functions-routes.test.js +40 -0
- package/dist/app/functions-routes.test.js.map +1 -0
- package/dist/app/manifest.d.ts +17 -0
- package/dist/app/manifest.d.ts.map +1 -0
- package/dist/app/manifest.js +64 -0
- package/dist/app/manifest.js.map +1 -0
- package/dist/app/manifest.test.d.ts +2 -0
- package/dist/app/manifest.test.d.ts.map +1 -0
- package/dist/app/manifest.test.js +173 -0
- package/dist/app/manifest.test.js.map +1 -0
- package/dist/app/release-artifacts.d.ts +43 -0
- package/dist/app/release-artifacts.d.ts.map +1 -0
- package/dist/app/release-artifacts.js +239 -0
- package/dist/app/release-artifacts.js.map +1 -0
- package/dist/app/release-artifacts.test.d.ts +2 -0
- package/dist/app/release-artifacts.test.d.ts.map +1 -0
- package/dist/app/release-artifacts.test.js +326 -0
- package/dist/app/release-artifacts.test.js.map +1 -0
- package/dist/app/route-pattern.d.ts +23 -0
- package/dist/app/route-pattern.d.ts.map +1 -0
- package/dist/app/route-pattern.js +339 -0
- package/dist/app/route-pattern.js.map +1 -0
- package/dist/app/route-pattern.test.d.ts +2 -0
- package/dist/app/route-pattern.test.d.ts.map +1 -0
- package/dist/app/route-pattern.test.js +187 -0
- package/dist/app/route-pattern.test.js.map +1 -0
- package/dist/app/rules.d.ts +61 -0
- package/dist/app/rules.d.ts.map +1 -0
- package/dist/app/rules.js +90 -0
- package/dist/app/rules.js.map +1 -0
- package/dist/app/rules.test.d.ts +2 -0
- package/dist/app/rules.test.d.ts.map +1 -0
- package/dist/app/rules.test.js +69 -0
- package/dist/app/rules.test.js.map +1 -0
- package/dist/app/runner.d.ts +109 -0
- package/dist/app/runner.d.ts.map +1 -0
- package/dist/app/runner.js +429 -0
- package/dist/app/runner.js.map +1 -0
- package/dist/app/site.d.ts +73 -0
- package/dist/app/site.d.ts.map +1 -0
- package/dist/app/site.js +161 -0
- package/dist/app/site.js.map +1 -0
- package/dist/app/site.test.d.ts +2 -0
- package/dist/app/site.test.d.ts.map +1 -0
- package/dist/app/site.test.js +291 -0
- package/dist/app/site.test.js.map +1 -0
- package/dist/app/static-server.d.ts +20 -0
- package/dist/app/static-server.d.ts.map +1 -0
- package/dist/app/static-server.js +145 -0
- package/dist/app/static-server.js.map +1 -0
- package/dist/persistence/conversation-store.d.ts +21 -0
- package/dist/persistence/conversation-store.d.ts.map +1 -0
- package/dist/persistence/conversation-store.js +59 -0
- package/dist/persistence/conversation-store.js.map +1 -0
- package/dist/persistence/conversation-store.test.d.ts +2 -0
- package/dist/persistence/conversation-store.test.d.ts.map +1 -0
- package/dist/persistence/conversation-store.test.js +98 -0
- package/dist/persistence/conversation-store.test.js.map +1 -0
- package/dist/persistence/git-sync.d.ts +14 -1
- package/dist/persistence/git-sync.d.ts.map +1 -1
- package/dist/persistence/git-sync.js +73 -17
- package/dist/persistence/git-sync.js.map +1 -1
- package/dist/persistence/git-sync.test.js +155 -6
- package/dist/persistence/git-sync.test.js.map +1 -1
- package/dist/persistence/snapshot-sync.d.ts +19 -2
- package/dist/persistence/snapshot-sync.d.ts.map +1 -1
- package/dist/persistence/snapshot-sync.js +194 -83
- package/dist/persistence/snapshot-sync.js.map +1 -1
- package/dist/persistence/snapshot-sync.test.js +145 -27
- package/dist/persistence/snapshot-sync.test.js.map +1 -1
- package/dist/persistence/workspace.d.ts +3 -0
- package/dist/persistence/workspace.d.ts.map +1 -1
- package/dist/persistence/workspace.js +1 -0
- package/dist/persistence/workspace.js.map +1 -1
- package/dist/research/extract-texts.d.ts.map +1 -1
- package/dist/research/extract-texts.js +6 -13
- package/dist/research/extract-texts.js.map +1 -1
- package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
- package/dist/research/filingramp/attachment-tools.js +7 -4
- package/dist/research/filingramp/attachment-tools.js.map +1 -1
- package/dist/research/filingramp/shared.d.ts.map +1 -1
- package/dist/research/filingramp/shared.js +5 -5
- package/dist/research/filingramp/shared.js.map +1 -1
- package/dist/runtime/app-mode.d.ts +10 -0
- package/dist/runtime/app-mode.d.ts.map +1 -0
- package/dist/runtime/app-mode.js +172 -0
- package/dist/runtime/app-mode.js.map +1 -0
- package/dist/runtime/app-mode.test.d.ts +2 -0
- package/dist/runtime/app-mode.test.d.ts.map +1 -0
- package/dist/runtime/app-mode.test.js +130 -0
- package/dist/runtime/app-mode.test.js.map +1 -0
- package/dist/runtime/app-rehearsal.d.ts +2 -0
- package/dist/runtime/app-rehearsal.d.ts.map +1 -0
- package/dist/runtime/app-rehearsal.js +56 -0
- package/dist/runtime/app-rehearsal.js.map +1 -0
- package/dist/runtime/build-mode.d.ts +18 -0
- package/dist/runtime/build-mode.d.ts.map +1 -0
- package/dist/runtime/build-mode.js +108 -0
- package/dist/runtime/build-mode.js.map +1 -0
- package/dist/runtime/build-mode.test.d.ts +2 -0
- package/dist/runtime/build-mode.test.d.ts.map +1 -0
- package/dist/runtime/build-mode.test.js +159 -0
- package/dist/runtime/build-mode.test.js.map +1 -0
- package/dist/runtime/cli.js +7 -2
- package/dist/runtime/cli.js.map +1 -1
- package/dist/runtime/config.d.ts +4 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +13 -2
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/guest-server.d.ts +3 -0
- package/dist/runtime/guest-server.d.ts.map +1 -0
- package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
- package/dist/runtime/guest-server.js.map +1 -0
- package/dist/runtime/image-hooks.d.ts +5 -0
- package/dist/runtime/image-hooks.d.ts.map +1 -0
- package/dist/runtime/image-hooks.js +68 -0
- package/dist/runtime/image-hooks.js.map +1 -0
- package/dist/runtime/image-hooks.test.d.ts +2 -0
- package/dist/runtime/image-hooks.test.d.ts.map +1 -0
- package/dist/runtime/image-hooks.test.js +74 -0
- package/dist/runtime/image-hooks.test.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -3
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +53 -35
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/listening-ports.d.ts +13 -0
- package/dist/runtime/listening-ports.d.ts.map +1 -0
- package/dist/runtime/listening-ports.js +78 -0
- package/dist/runtime/listening-ports.js.map +1 -0
- package/dist/runtime/listening-ports.test.d.ts +2 -0
- package/dist/runtime/listening-ports.test.d.ts.map +1 -0
- package/dist/runtime/listening-ports.test.js +39 -0
- package/dist/runtime/listening-ports.test.js.map +1 -0
- package/dist/runtime/preview-proxy.d.ts +56 -0
- package/dist/runtime/preview-proxy.d.ts.map +1 -0
- package/dist/runtime/preview-proxy.js +302 -0
- package/dist/runtime/preview-proxy.js.map +1 -0
- package/dist/runtime/preview-proxy.test.d.ts +2 -0
- package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
- package/dist/runtime/preview-proxy.test.js +122 -0
- package/dist/runtime/preview-proxy.test.js.map +1 -0
- package/dist/runtime/session-mode.d.ts +3 -0
- package/dist/runtime/session-mode.d.ts.map +1 -0
- package/dist/runtime/session-mode.js +60 -0
- package/dist/runtime/session-mode.js.map +1 -0
- package/dist/runtime/workload.d.ts +44 -0
- package/dist/runtime/workload.d.ts.map +1 -0
- package/dist/runtime/workload.js +222 -0
- package/dist/runtime/workload.js.map +1 -0
- package/dist/runtime/workload.test.d.ts +2 -0
- package/dist/runtime/workload.test.d.ts.map +1 -0
- package/dist/runtime/workload.test.js +235 -0
- package/dist/runtime/workload.test.js.map +1 -0
- package/dist/session/conversation.d.ts +3 -2
- package/dist/session/conversation.d.ts.map +1 -1
- package/dist/session/conversation.js +11 -7
- package/dist/session/conversation.js.map +1 -1
- package/dist/session/conversation.test.js +2 -3
- package/dist/session/conversation.test.js.map +1 -1
- package/dist/session/runtime.d.ts +16 -3
- package/dist/session/runtime.d.ts.map +1 -1
- package/dist/session/runtime.js +80 -13
- package/dist/session/runtime.js.map +1 -1
- package/dist/session/runtime.test.js +18 -7
- package/dist/session/runtime.test.js.map +1 -1
- package/dist/session/tools.d.ts.map +1 -1
- package/dist/session/tools.js +3 -3
- package/dist/session/tools.js.map +1 -1
- package/dist/task/loop.d.ts.map +1 -1
- package/dist/task/loop.js +6 -4
- package/dist/task/loop.js.map +1 -1
- package/dist/tools/exec-tools.d.ts +12 -0
- package/dist/tools/exec-tools.d.ts.map +1 -1
- package/dist/tools/exec-tools.js +46 -3
- package/dist/tools/exec-tools.js.map +1 -1
- package/dist/tools/exec-tools.test.d.ts +2 -0
- package/dist/tools/exec-tools.test.d.ts.map +1 -0
- package/dist/tools/exec-tools.test.js +48 -0
- package/dist/tools/exec-tools.test.js.map +1 -0
- package/dist/tools/fs-tools.d.ts.map +1 -1
- package/dist/tools/fs-tools.js +5 -5
- package/dist/tools/fs-tools.js.map +1 -1
- package/dist/transport/link.d.ts.map +1 -1
- package/dist/transport/link.js +16 -5
- package/dist/transport/link.js.map +1 -1
- package/dist/transport/link.test.js +24 -0
- package/dist/transport/link.test.js.map +1 -1
- package/dist/transport/protocol.d.ts +215 -3
- package/dist/transport/protocol.d.ts.map +1 -1
- package/dist/transport/protocol.js +163 -7
- package/dist/transport/protocol.js.map +1 -1
- package/dist/transport/protocol.test.js +41 -0
- package/dist/transport/protocol.test.js.map +1 -1
- package/dist/workspace-sync/eligibility.d.ts +14 -0
- package/dist/workspace-sync/eligibility.d.ts.map +1 -0
- package/dist/workspace-sync/eligibility.js +53 -0
- package/dist/workspace-sync/eligibility.js.map +1 -0
- package/dist/workspace-sync/merge.d.ts +15 -0
- package/dist/workspace-sync/merge.d.ts.map +1 -0
- package/dist/workspace-sync/merge.js +66 -0
- package/dist/workspace-sync/merge.js.map +1 -0
- package/dist/workspace-sync/merge.test.d.ts +2 -0
- package/dist/workspace-sync/merge.test.d.ts.map +1 -0
- package/dist/workspace-sync/merge.test.js +28 -0
- package/dist/workspace-sync/merge.test.js.map +1 -0
- package/dist/workspace-sync/workspace-sync.d.ts +48 -0
- package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
- package/dist/workspace-sync/workspace-sync.js +308 -0
- package/dist/workspace-sync/workspace-sync.js.map +1 -0
- package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
- package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
- package/dist/workspace-sync/workspace-sync.test.js +111 -0
- package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
- package/dist/workspace-sync/write-drafts.d.ts +24 -0
- package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
- package/dist/workspace-sync/write-drafts.js +87 -0
- package/dist/workspace-sync/write-drafts.js.map +1 -0
- package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
- package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
- package/dist/workspace-sync/write-drafts.test.js +36 -0
- package/dist/workspace-sync/write-drafts.test.js.map +1 -0
- package/package.json +12 -2
- package/dist/runtime/lambda-microvm.d.ts +0 -3
- package/dist/runtime/lambda-microvm.d.ts.map +0 -1
- package/dist/runtime/lambda-microvm.js.map +0 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ configuration, chooses a mode, and connects the agent to the gateway.
|
|
|
7
7
|
|
|
8
8
|
| Area | Files | Responsibility |
|
|
9
9
|
| --- | --- | --- |
|
|
10
|
-
| Startup | `src/runtime/cli.ts`, `src/runtime/index.ts`, `src/runtime/
|
|
10
|
+
| Startup | `src/runtime/cli.ts`, `src/runtime/index.ts`, `src/runtime/guest-server.ts` | Process startup, shutdown, Lambda suspend/terminate hooks |
|
|
11
11
|
| Configuration and wire contract | `src/runtime/config.ts`, `src/transport/protocol.ts` | Environment variables, commands, events, secret keys |
|
|
12
12
|
| One-shot tasks | `src/task/loop.ts`, `src/transport/reporter.ts` | Run `AGENT_TASK`, report results, exit |
|
|
13
13
|
| Agent definitions | `src/agent/definition.ts`, `src/agent/profiles/` | Coding/research prompts, model selection, workspace directories, tool composition |
|
|
@@ -19,6 +19,9 @@ configuration, chooses a mode, and connects the agent to the gateway.
|
|
|
19
19
|
| Models and usage | `src/models/resolve-model.ts`, `src/models/usage.ts` | Resolve a definition's model and normalize token usage |
|
|
20
20
|
| Workspace persistence | `src/persistence/workspace.ts`, `src/persistence/git-sync.ts`, `src/persistence/snapshot-sync.ts` | Common restore/checkpoint interface backed by project Git or standalone session snapshots |
|
|
21
21
|
| Gateway connection | `src/transport/link.ts` | Send sequenced events and acknowledge commands |
|
|
22
|
+
| Workspace live sync | `src/workspace-sync/` | Mirror every workspace text file into the session as it changes (`file_*` events), stream `write_files` drafts while the model writes, merge people's edits (`file_state`) back into the files |
|
|
23
|
+
| Live preview | `src/runtime/preview-proxy.ts`, `src/runtime/listening-ports.ts` | Forward the gateway's `<vmId>-<port>.apps.<domain>` and session URL (`<sessionId>[-<port>].apps.<domain>`) traffic (HTTP and WebSocket) from the guest's port 8080 to the app on localhost; report listening ports (`ports` event) |
|
|
24
|
+
| App (builder.json) | `src/app/`, `src/runtime/app-mode.ts` | Run the workspace's app as `.builder/builder.json` says ([docs](../../docs/architecture/builder-json.md)): a session VM writes the file from the services it detects as Vercel does, with the routes between them, and the file then decides; installs, services on their own `$PORT`, daemons, restarts; after every turn and on boot; route the session URL to it (`app` event, `run_app` tool); in `AGENT_MODE=app` a deployment of it, built and served on port 8080 |
|
|
22
25
|
| Local and MCP tools | `src/tools/`, `src/mcp/` | Filesystem, shell, external tool discovery and execution |
|
|
23
26
|
| Research tools | `src/research/filingramp-tools.ts`, `src/research/filingramp/` | Register FilingRamp tools and implement searches, filing details, downloads |
|
|
24
27
|
| Research contracts | `src/research/filingramp-contract.ts`, `src/research/scope.ts` | Normalize API-specific filters and apply the session scope |
|
|
@@ -45,8 +48,8 @@ returned messages, and decides when completion can be announced. Its constructor
|
|
|
45
48
|
optional definition, runner, and persistence dependencies so these boundaries can be tested
|
|
46
49
|
without a model provider or storage server.
|
|
47
50
|
|
|
48
|
-
`WorkspacePersistence` adapts the existing Git
|
|
49
|
-
distinguishes a Git commit from a
|
|
51
|
+
`WorkspacePersistence` adapts the existing Git and session-folder sync classes. Its checkpoint
|
|
52
|
+
result distinguishes a Git commit from a folder hash; neither leaks into the other's wire contract.
|
|
50
53
|
A successful no-op is still durable. A failed restore or upload rejects the operation.
|
|
51
54
|
|
|
52
55
|
## Session flow and invariants
|
|
@@ -70,11 +73,15 @@ and an in-flight model/tool step are process-local; this is not an execution jou
|
|
|
70
73
|
replays interrupted tool calls. Client event replay is a separate platform concern handled
|
|
71
74
|
outside this runtime. The refactor does not change the persisted conversation format.
|
|
72
75
|
|
|
73
|
-
Standalone sessions
|
|
74
|
-
|
|
76
|
+
Standalone sessions keep their workspace as files in the session's folder,
|
|
77
|
+
`accounts/<accountId>/sessions/<sessionId>/`, through the authenticated storage service; they do
|
|
78
|
+
not create `.git`. A checkpoint uploads only what changed. A new VM downloads the folder.
|
|
75
79
|
Project sessions use Git under `accounts/<accountId>/projects/<projectId>/`.
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
Workspace live sync mirrors every text file of the workspace into the session while the agent
|
|
81
|
+
works, both ways (services/api's workspace-sync.service.ts holds the session's side); with it,
|
|
82
|
+
`publish_results` only makes the files it names current at once. Mirrored text belongs to live
|
|
83
|
+
sync, and a checkpoint uploads it only while the session has not confirmed that version; everything
|
|
84
|
+
else (binaries, large files, build output, the agent's conversation) is the checkpoint's.
|
|
78
85
|
|
|
79
86
|
## Adding a research tool
|
|
80
87
|
|
|
@@ -7,7 +7,7 @@ const strict_1 = __importDefault(require("node:assert/strict"));
|
|
|
7
7
|
const node_test_1 = require("node:test");
|
|
8
8
|
const profiles_1 = require("./profiles");
|
|
9
9
|
(0, node_test_1.it)('keeps profile instructions, workspace setup, models, and tools together', () => {
|
|
10
|
-
var _a;
|
|
10
|
+
var _a, _b;
|
|
11
11
|
const config = {
|
|
12
12
|
sessionId: 'test', mode: 'session', profile: 'coding', workspaceDir: '/unused',
|
|
13
13
|
model: 'main-model', extractionModel: 'extraction-model', provider: {}, mcpConnections: [],
|
|
@@ -23,8 +23,13 @@ const profiles_1 = require("./profiles");
|
|
|
23
23
|
strict_1.default.equal(coding.model.id, 'main-model');
|
|
24
24
|
strict_1.default.deepEqual(coding.workspaceDirectories, []);
|
|
25
25
|
strict_1.default.match(coding.instructions({ restored: false }), /coding agent/);
|
|
26
|
-
|
|
26
|
+
// An app can show the account's data: the FilingRamp tools, but not research's bulk extraction.
|
|
27
|
+
strict_1.default.match(coding.instructions({ restored: false }), /FilingRamp tools/);
|
|
28
|
+
strict_1.default.equal(typeof ((_a = coding.createTools(context).search_filings) === null || _a === void 0 ? void 0 : _a.execute), 'function');
|
|
27
29
|
strict_1.default.equal(coding.createTools(context).extract_from_texts, undefined);
|
|
30
|
+
const withoutFilingRamp = (0, profiles_1.createAgentDefinition)({ ...config, filingRamp: undefined }, context.workspaceDir);
|
|
31
|
+
strict_1.default.equal(withoutFilingRamp.createTools(context).search_filings, undefined);
|
|
32
|
+
strict_1.default.doesNotMatch(withoutFilingRamp.instructions({ restored: false }), /FilingRamp/);
|
|
28
33
|
const research = (0, profiles_1.createAgentDefinition)({ ...config, profile: 'research' }, context.workspaceDir);
|
|
29
34
|
strict_1.default.deepEqual(research.workspaceDirectories, ['research', 'data', 'data/text']);
|
|
30
35
|
strict_1.default.match(research.instructions({ restored: false }), /fresh session/);
|
|
@@ -33,7 +38,7 @@ const profiles_1 = require("./profiles");
|
|
|
33
38
|
strict_1.default.match(research.instructions({ restored: false }), /TX/);
|
|
34
39
|
const tools = research.createTools(context);
|
|
35
40
|
for (const name of ['search_filings', 'count_filings', 'summarize_filings', 'get_filing', 'search_documents', 'download_attachment', 'search_objections', 'read_text', 'extract_from_texts']) {
|
|
36
|
-
strict_1.default.equal(typeof ((
|
|
41
|
+
strict_1.default.equal(typeof ((_b = tools[name]) === null || _b === void 0 ? void 0 : _b.execute), 'function', name);
|
|
37
42
|
}
|
|
38
43
|
strict_1.default.equal(research.createTools(context).search_documents, tools.search_documents, 'scope lookup cache survives between turns');
|
|
39
44
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.test.js","sourceRoot":"","sources":["../../src/agent/definition.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AACvC,yCAA8B;AAE9B,yCAAkD;AAGlD,IAAA,cAAE,EAAC,yEAAyE,EAAE,GAAG,EAAE;;IACjF,MAAM,MAAM,GAAuB;QACjC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS;QAC9E,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE;QAC1F,UAAU,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE;QACvF,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;KAClC,CAAA;IACD,MAAM,OAAO,GAAuB;QAClC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM;QAClE,cAAc,KAAI,CAAC,EAAE,oBAAoB,KAAI,CAAC,EAAE,YAAY,KAAI,CAAC,EAAE,WAAW,KAAI,CAAC;KACpF,CAAA;IACD,MAAM,MAAM,GAAG,IAAA,gCAAqB,EAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAClE,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACtC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;IAC3C,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,CAAC,CAAA;IACtE,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"definition.test.js","sourceRoot":"","sources":["../../src/agent/definition.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { AgentDefinition } from '../definition';
|
|
2
2
|
import type { AgentRuntimeConfig } from '../../runtime/config';
|
|
3
|
-
export declare function createCodingAgent(config: AgentRuntimeConfig): AgentDefinition;
|
|
3
|
+
export declare function createCodingAgent(config: AgentRuntimeConfig, workspaceDir: string): AgentDefinition;
|
|
4
4
|
//# sourceMappingURL=coding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coding.d.ts","sourceRoot":"","sources":["../../../src/agent/profiles/coding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"coding.d.ts","sourceRoot":"","sources":["../../../src/agent/profiles/coding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAW9D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,GAAG,eAAe,CAuBnG"}
|
|
@@ -2,16 +2,33 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createCodingAgent = createCodingAgent;
|
|
4
4
|
const attribution_1 = require("../../models/attribution");
|
|
5
|
+
const filingramp_client_1 = require("../../research/filingramp-client");
|
|
6
|
+
const filingramp_tools_1 = require("../../research/filingramp-tools");
|
|
5
7
|
const tools_1 = require("../../session/tools");
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
+
const exec_tools_1 = require("../../tools/exec-tools");
|
|
9
|
+
const SYSTEM_PROMPT = `You are a coding agent running inside an isolated session workspace VM with a persistent disk. You build what the user asks for — apps, dashboards, sites, APIs, scripts — as a real project in the workspace. You have direct tools to read/write files and run shell commands in the workspace, plus (if any MCP servers are configured) search_tools/get_tool_details/call_mcp_tool to use them. Every file you write appears in the user's session as you write it, so there is nothing to copy or publish. Work efficiently, verify with cheap commands (build, lint, a curl of the running app), report progress with report_progress, and finish each turn with a concise summary of what you built and how to use it. ${exec_tools_1.LIVE_PREVIEW_GUIDANCE}`;
|
|
10
|
+
const FILINGRAMP_DATA = ` Data from the user's FilingRamp account comes from the FilingRamp tools (count_filings, summarize_filings, search_filings, …): save what the app shows into the data/ folder of the service that shows it (packages/web/data/filings.json) with them and have the app load those files. Never put credentials in the app.`;
|
|
11
|
+
function createCodingAgent(config, workspaceDir) {
|
|
12
|
+
// Same FilingRamp access as the research profile, so an app can show the account's real data.
|
|
13
|
+
let reportProgress;
|
|
14
|
+
const filingTools = config.filingRamp
|
|
15
|
+
? (0, filingramp_tools_1.createFilingRampTools)({
|
|
16
|
+
client: new filingramp_client_1.FilingRampClient(config.filingRamp),
|
|
17
|
+
workspaceDir,
|
|
18
|
+
scope: config.researchScope,
|
|
19
|
+
onProgress: (toolCallId, done, total, label) => reportProgress === null || reportProgress === void 0 ? void 0 : reportProgress([{ key: 'bulk', label, status: done < total ? 'active' : 'done', detail: `${done}/${total}` }], toolCallId),
|
|
20
|
+
})
|
|
21
|
+
: {};
|
|
8
22
|
return {
|
|
9
23
|
profile: 'coding',
|
|
10
24
|
model: { id: config.model, provider: config.provider, attribution: attribution_1.OPENROUTER_APPS.SESSION_AGENT },
|
|
11
25
|
maxSteps: 80,
|
|
12
26
|
workspaceDirectories: [],
|
|
13
|
-
instructions: () => SYSTEM_PROMPT,
|
|
14
|
-
createTools: (context) =>
|
|
27
|
+
instructions: () => SYSTEM_PROMPT + (config.filingRamp ? FILINGRAMP_DATA : ''),
|
|
28
|
+
createTools: (context) => {
|
|
29
|
+
reportProgress = (steps, toolCallId) => context.reportProgress(steps, toolCallId);
|
|
30
|
+
return { ...(0, tools_1.createSessionTools)(context, config.mcpConnections), ...filingTools };
|
|
31
|
+
},
|
|
15
32
|
};
|
|
16
33
|
}
|
|
17
34
|
//# sourceMappingURL=coding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coding.js","sourceRoot":"","sources":["../../../src/agent/profiles/coding.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"coding.js","sourceRoot":"","sources":["../../../src/agent/profiles/coding.ts"],"names":[],"mappings":";;AAaA,8CAuBC;AAnCD,0DAA0D;AAE1D,wEAAmE;AACnE,sEAAuE;AACvE,+CAAwD;AAExD,uDAA8D;AAE9D,MAAM,aAAa,GAAG,isBAAisB,kCAAqB,EAAE,CAAA;AAE9uB,MAAM,eAAe,GAAG,4TAA4T,CAAA;AAEpV,SAAgB,iBAAiB,CAAC,MAA0B,EAAE,YAAoB;IAChF,8FAA8F;IAC9F,IAAI,cAAgE,CAAA;IACpE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU;QACnC,CAAC,CAAC,IAAA,wCAAqB,EAAC;YACpB,MAAM,EAAE,IAAI,oCAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;YAC/C,YAAY;YACZ,KAAK,EAAE,MAAM,CAAC,aAAa;YAC3B,UAAU,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAC7C,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC;SAC/H,CAAC;QACJ,CAAC,CAAC,EAAE,CAAA;IACN,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,6BAAe,CAAC,aAAa,EAAE;QAClG,QAAQ,EAAE,EAAE;QACZ,oBAAoB,EAAE,EAAE;QACxB,YAAY,EAAE,GAAG,EAAE,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE;YACvB,cAAc,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;YACjF,OAAO,EAAE,GAAG,IAAA,0BAAkB,EAAC,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,GAAG,WAAW,EAAE,CAAA;QAClF,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -4,6 +4,6 @@ exports.createAgentDefinition = createAgentDefinition;
|
|
|
4
4
|
const coding_1 = require("./coding");
|
|
5
5
|
const research_1 = require("./research");
|
|
6
6
|
function createAgentDefinition(config, workspaceDir) {
|
|
7
|
-
return config.profile === 'research' ? (0, research_1.createResearchAgent)(config, workspaceDir) : (0, coding_1.createCodingAgent)(config);
|
|
7
|
+
return config.profile === 'research' ? (0, research_1.createResearchAgent)(config, workspaceDir) : (0, coding_1.createCodingAgent)(config, workspaceDir);
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/profiles/index.ts"],"names":[],"mappings":";;AAKA,sDAEC;AALD,qCAA4C;AAC5C,yCAAgD;AAEhD,SAAgB,qBAAqB,CAAC,MAA0B,EAAE,YAAoB;IACpF,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,IAAA,8BAAmB,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAA,0BAAiB,EAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/profiles/index.ts"],"names":[],"mappings":";;AAKA,sDAEC;AALD,qCAA4C;AAC5C,yCAAgD;AAEhD,SAAgB,qBAAqB,CAAC,MAA0B,EAAE,YAAoB;IACpF,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,IAAA,8BAAmB,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAA,0BAAiB,EAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAC5H,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/agent/profiles/research.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,eAAe,CAAA;AAElE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/agent/profiles/research.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,eAAe,CAAA;AAElE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AA2B9D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,GAAG,eAAe,CA2CrG"}
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createResearchAgent = createResearchAgent;
|
|
7
|
-
const node_fs_1 = require("node:fs");
|
|
8
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
8
|
const attribution_1 = require("../../models/attribution");
|
|
9
|
+
const workload_1 = require("../../runtime/workload");
|
|
10
10
|
const extraction_tool_1 = require("../../research/extraction-tool");
|
|
11
11
|
const filingramp_client_1 = require("../../research/filingramp-client");
|
|
12
12
|
const filingramp_tools_1 = require("../../research/filingramp-tools");
|
|
@@ -19,7 +19,7 @@ const MAX_TURN_STEPS = 480;
|
|
|
19
19
|
/** The notes file the prompt tells the agent to keep; compaction carries it in place of removed steps. */
|
|
20
20
|
const workingNotes = Object.assign(async (workspaceDir) => {
|
|
21
21
|
try {
|
|
22
|
-
return await
|
|
22
|
+
return (await (0, workload_1.readInside)(workspaceDir, node_path_1.default.join(workspaceDir, prompt_1.RESEARCH_OUTPUT_FILES.notes))).toString('utf8');
|
|
23
23
|
}
|
|
24
24
|
catch (error) {
|
|
25
25
|
if (error.code === 'ENOENT')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../../src/agent/profiles/research.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../../src/agent/profiles/research.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-history.d.ts","sourceRoot":"","sources":["../../src/agent/turn-history.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAA;AAGjG,sFAAsF;AACtF,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,qBAAqB,CAAA;IAChC,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAEzD;AAED,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,QAAQ,EAAE,CAO/D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAE9D;AAuCD,mGAAmG;AACnG,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAiBvD;AAED,gGAAgG;AAChG,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,SAAS,CAK/D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,qBAAqB,
|
|
1
|
+
{"version":3,"file":"turn-history.d.ts","sourceRoot":"","sources":["../../src/agent/turn-history.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAA;AAGjG,sFAAsF;AACtF,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,qBAAqB,CAAA;IAChC,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAEzD;AAED,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,QAAQ,EAAE,CAO/D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAE9D;AAuCD,mGAAmG;AACnG,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAiBvD;AAED,gGAAgG;AAChG,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,SAAS,CAK/D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAgB5E;AAID,MAAM,WAAW,iBAAiB;IAChC,2FAA2F;IAC3F,YAAY,EAAE,MAAM,CAAA;IACpB,6GAA6G;IAC7G,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,EAAE,iBAAiE,CAAA;AAKlG,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAED,0HAA0H;AAC1H,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAWrH;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAW9H;AAED,yGAAyG;AACzG,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,GAAG,YAAY,EAAE,CAGvF"}
|
|
@@ -116,7 +116,13 @@ function collapseTurn(messages) {
|
|
|
116
116
|
const text = finalText(steps);
|
|
117
117
|
if (text === undefined) {
|
|
118
118
|
const narration = steps.map((step) => textOf(step.assistant).trim()).filter(Boolean).slice(-1)[0];
|
|
119
|
-
|
|
119
|
+
const lead = narration ? `${narration}\n\n` : '';
|
|
120
|
+
// A turn that ends on request_clarification ended on purpose: the next user message is the answer.
|
|
121
|
+
const last = steps[steps.length - 1];
|
|
122
|
+
if (last && toolCallsOf(last).some((call) => call.toolName === 'request_clarification')) {
|
|
123
|
+
return { role: 'assistant', content: `${lead}[This turn paused for the user's answer: ${describeSteps(steps)}.]` };
|
|
124
|
+
}
|
|
125
|
+
return { role: 'assistant', content: `${lead}[This turn was interrupted before it finished: ${describeSteps(steps)}. Its results are in the workspace files, not in this conversation.]` };
|
|
120
126
|
}
|
|
121
127
|
// The final step is the text itself; the account covers the work before it.
|
|
122
128
|
const work = steps.slice(0, -1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-history.js","sourceRoot":"","sources":["../../src/agent/turn-history.ts"],"names":[],"mappings":";;;AAoBA,kCAEC;AAGD,gCAOC;AAED,oCAEC;AAwCD,sCAiBC;AAGD,8BAKC;AAQD,
|
|
1
|
+
{"version":3,"file":"turn-history.js","sourceRoot":"","sources":["../../src/agent/turn-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { type ModelMessage } from 'ai';
|
|
|
2
2
|
import type { AgentDefinition } from './definition';
|
|
3
3
|
import type { OutboundEvent } from '../transport/link';
|
|
4
4
|
import { type TokenUsage } from '../models/usage';
|
|
5
|
+
import { type DraftSink } from '../workspace-sync/write-drafts';
|
|
5
6
|
/** Steps since the agent last called report_progress in this turn (all of them when it never did). */
|
|
6
7
|
export declare function stepsSinceProgress(steps: Array<{
|
|
7
8
|
toolCalls: Array<{
|
|
@@ -26,6 +27,13 @@ export interface TurnInput {
|
|
|
26
27
|
* turn cut off by a lost VM resumes from its last step instead of from the user's message.
|
|
27
28
|
*/
|
|
28
29
|
onStep?(messages: ModelMessage[]): void;
|
|
30
|
+
/**
|
|
31
|
+
* Workspace live sync (workspace-sync/workspace-sync.ts): write_files drafts stream into it, and
|
|
32
|
+
* publish_results mirrors its files through it. Without it, publish_results sends a `files` event.
|
|
33
|
+
*/
|
|
34
|
+
files?: DraftSink & {
|
|
35
|
+
flush(paths: string[]): Promise<void>;
|
|
36
|
+
};
|
|
29
37
|
}
|
|
30
38
|
interface TurnOutput {
|
|
31
39
|
/** Messages to append to history, including a safe text-only fallback for an interrupted turn. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-runner.d.ts","sourceRoot":"","sources":["../../src/agent/turn-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,YAAY,EAAiC,MAAM,IAAI,CAAA;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"turn-runner.d.ts","sourceRoot":"","sources":["../../src/agent/turn-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,YAAY,EAAiC,MAAM,IAAI,CAAA;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAY1D,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAelF,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,GAAG,MAAM,CAKnG;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,IAAI,OAAO,CAAA;IACzB,sFAAsF;IACtF,UAAU,CAAC,IAAI,OAAO,CAAA;IACtB,wFAAwF;IACxF,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAChC;;;OAGG;IACH,MAAM,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAA;CAC9D;AAED,UAAU,UAAU;IAClB,kGAAkG;IAClG,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,CAClC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE;AACvB,8GAA8G;GAC5G;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAC3D,CAAA;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,eAAe;IAElD,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;CAgLjD"}
|
|
@@ -9,6 +9,7 @@ const context_pruning_1 = require("../context-pruning");
|
|
|
9
9
|
const tool_call_repair_1 = require("../tool-call-repair");
|
|
10
10
|
const model_failure_1 = require("./model-failure");
|
|
11
11
|
const turn_history_1 = require("./turn-history");
|
|
12
|
+
const write_drafts_1 = require("../workspace-sync/write-drafts");
|
|
12
13
|
/** Steps the budget wrap-up may take (write notes and findings, publish, summarize) before the turn stops. */
|
|
13
14
|
const WRAP_UP_STEPS = 4;
|
|
14
15
|
const WRAP_UP_TOOLS = ['write_files', 'read_file', 'run_command', 'publish_results'];
|
|
@@ -41,7 +42,7 @@ class TurnRunner {
|
|
|
41
42
|
this.definition = definition;
|
|
42
43
|
}
|
|
43
44
|
async run(input) {
|
|
44
|
-
var _a, _b, _c
|
|
45
|
+
var _a, _b, _c;
|
|
45
46
|
const { messageId, abortSignal, emit } = input;
|
|
46
47
|
let partialText = '';
|
|
47
48
|
let askedUser = false;
|
|
@@ -61,7 +62,13 @@ class TurnRunner {
|
|
|
61
62
|
abortSignal,
|
|
62
63
|
recordUsage,
|
|
63
64
|
reportProgress: (steps, toolCallId) => emit({ type: 'progress', messageId, toolCallId, steps }),
|
|
64
|
-
|
|
65
|
+
// With live sync every workspace file is already in the session; publishing makes these current now.
|
|
66
|
+
publishFiles: (files) => {
|
|
67
|
+
if (input.files)
|
|
68
|
+
void input.files.flush(files.map((file) => file.path));
|
|
69
|
+
else
|
|
70
|
+
emit({ type: 'files', messageId, files });
|
|
71
|
+
},
|
|
65
72
|
requestClarification: (question, toolCallId) => {
|
|
66
73
|
askedUser = true;
|
|
67
74
|
emit({ type: 'question', messageId, toolCallId, question });
|
|
@@ -83,6 +90,7 @@ class TurnRunner {
|
|
|
83
90
|
}
|
|
84
91
|
return (0, context_pruning_1.pruneToolResults)([...history, ...(0, turn_history_1.compactedView)(steps, compaction)]);
|
|
85
92
|
};
|
|
93
|
+
const drafts = input.files ? new write_drafts_1.WriteDraftTracker(input.files) : undefined;
|
|
86
94
|
try {
|
|
87
95
|
let totalSteps = 0;
|
|
88
96
|
let text = '';
|
|
@@ -101,6 +109,14 @@ class TurnRunner {
|
|
|
101
109
|
tools,
|
|
102
110
|
abortSignal,
|
|
103
111
|
stopWhen: [(0, ai_1.stepCountIs)(maxSteps), () => askedUser, wrapUpDone],
|
|
112
|
+
// Here rather than from the stream below, which runs behind: stopWhen must see this step's
|
|
113
|
+
// tokens, or a turn at its budget pays for one more model call.
|
|
114
|
+
onStepFinish: (step) => {
|
|
115
|
+
var _a, _b;
|
|
116
|
+
const usage = (0, usage_1.usageOf)(step);
|
|
117
|
+
if (usage)
|
|
118
|
+
recordUsage(usage, (_b = (_a = step.response) === null || _a === void 0 ? void 0 : _a.modelId) !== null && _b !== void 0 ? _b : model.id);
|
|
119
|
+
},
|
|
104
120
|
experimental_repairToolCall: tool_call_repair_1.repairStringifiedToolInput,
|
|
105
121
|
prepareStep: async ({ stepNumber, steps, messages }) => {
|
|
106
122
|
var _a, _b;
|
|
@@ -139,26 +155,31 @@ class TurnRunner {
|
|
|
139
155
|
case 'reasoning-delta':
|
|
140
156
|
emit({ type: 'reasoning_delta', messageId, text: part.text });
|
|
141
157
|
break;
|
|
158
|
+
case 'tool-input-start':
|
|
159
|
+
drafts === null || drafts === void 0 ? void 0 : drafts.start(part.id, part.toolName);
|
|
160
|
+
break;
|
|
161
|
+
case 'tool-input-delta':
|
|
162
|
+
drafts === null || drafts === void 0 ? void 0 : drafts.delta(part.id, part.delta);
|
|
163
|
+
break;
|
|
164
|
+
case 'tool-input-end':
|
|
165
|
+
await (drafts === null || drafts === void 0 ? void 0 : drafts.end(part.id));
|
|
166
|
+
break;
|
|
142
167
|
case 'tool-call':
|
|
143
168
|
if (wrapUpFrom !== undefined && (part.toolName === 'publish_results' || part.toolName === 'write_files'))
|
|
144
169
|
saved = true;
|
|
145
170
|
emit({ type: 'tool_call_start', messageId, toolCallId: part.toolCallId, toolName: part.toolName, input: part.input });
|
|
146
171
|
break;
|
|
147
172
|
case 'tool-result':
|
|
173
|
+
void (drafts === null || drafts === void 0 ? void 0 : drafts.settle(part.toolCallId));
|
|
148
174
|
emit({ type: 'tool_call_result', messageId, toolCallId: part.toolCallId, output: part.output });
|
|
149
175
|
break;
|
|
150
176
|
case 'tool-error':
|
|
177
|
+
void (drafts === null || drafts === void 0 ? void 0 : drafts.settle(part.toolCallId));
|
|
151
178
|
emit({
|
|
152
179
|
type: 'tool_call_result', messageId, toolCallId: part.toolCallId,
|
|
153
180
|
error: part.error instanceof Error ? part.error.message : String(part.error),
|
|
154
181
|
});
|
|
155
182
|
break;
|
|
156
|
-
case 'finish-step': {
|
|
157
|
-
const usage = (0, usage_1.usageOf)(part);
|
|
158
|
-
if (usage)
|
|
159
|
-
recordUsage(usage, (_c = (_b = part.response) === null || _b === void 0 ? void 0 : _b.modelId) !== null && _c !== void 0 ? _c : model.id);
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
183
|
case 'error':
|
|
163
184
|
throw part.error;
|
|
164
185
|
}
|
|
@@ -181,7 +202,7 @@ class TurnRunner {
|
|
|
181
202
|
emit({ type: 'text_delta', messageId, text: note });
|
|
182
203
|
break;
|
|
183
204
|
}
|
|
184
|
-
(
|
|
205
|
+
(_b = input.onStep) === null || _b === void 0 ? void 0 : _b.call(input, turn);
|
|
185
206
|
}
|
|
186
207
|
return { status: 'completed', messages: turn, text, partialText, askedUser, wrappedUp, saved };
|
|
187
208
|
}
|
|
@@ -197,7 +218,11 @@ class TurnRunner {
|
|
|
197
218
|
const output = { messages, partialText, askedUser, wrappedUp, saved };
|
|
198
219
|
return aborted
|
|
199
220
|
? { ...output, status: 'aborted' }
|
|
200
|
-
: { ...output, status: 'failed', error: (0, model_failure_1.describeModelFailure)(error), userMessage: (
|
|
221
|
+
: { ...output, status: 'failed', error: (0, model_failure_1.describeModelFailure)(error), userMessage: (_c = (0, model_failure_1.userFacingModelFailure)(error)) !== null && _c !== void 0 ? _c : (0, model_failure_1.describeModelFailure)(error) };
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
// A write_files call cut off before it ran must not leave its draft in the session.
|
|
225
|
+
await (drafts === null || drafts === void 0 ? void 0 : drafts.settleAll());
|
|
201
226
|
}
|
|
202
227
|
}
|
|
203
228
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-runner.js","sourceRoot":"","sources":["../../src/agent/turn-runner.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"turn-runner.js","sourceRoot":"","sources":["../../src/agent/turn-runner.ts"],"names":[],"mappings":";;;AAiCA,gDAKC;AAtCD,2BAA8F;AAG9F,2DAA8D;AAE9D,2CAA0D;AAC1D,wDAAqD;AACrD,0DAAgE;AAChE,mDAA8E;AAC9E,iDAOuB;AACvB,iEAAkF;AAElF,8GAA8G;AAC9G,MAAM,aAAa,GAAG,CAAC,CAAA;AACvB,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAA;AACpF,MAAM,oBAAoB,GAAG;;;2IAG8G,CAAA;AAE3I,sGAAsG;AACtG,MAAM,uBAAuB,GAAG,CAAC,CAAA;AACjC,MAAM,iBAAiB,GACrB,mSAAmS,CAAA;AAErS,sGAAsG;AACtG,SAAgB,kBAAkB,CAAC,KAAwD;IACzF,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,iBAAiB,CAAC;YAAE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAA;IACjH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAA;AACrB,CAAC;AA6CD;;;;;;;;GAQG;AACH,MAAa,UAAU;IACrB,YAA6B,UAA2B;QAA3B,eAAU,GAAV,UAAU,CAAiB;IAAG,CAAC;IAE5D,KAAK,CAAC,GAAG,CAAC,KAAgB;;QACxB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QAC9C,IAAI,WAAW,GAAG,EAAE,CAAA;QACpB,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,IAAI,KAAK,GAAG,KAAK,CAAA;QACjB,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,uDAAuD;QACvD,MAAM,IAAI,GAAmB,EAAE,CAAA;QAC/B,yEAAyE;QACzE,IAAI,YAAY,GAAmB,EAAE,CAAA;QACrC,IAAI,UAAU,GAAoB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAA;QACrD,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,KAAa,EAAE,EAAE;YACvD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACxB,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;QAChE,CAAC,CAAA;QACD,MAAM,OAAO,GAAuB;YAClC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW;YACX,WAAW;YACX,cAAc,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YAC/F,qGAAqG;YACrG,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtB,IAAI,KAAK,CAAC,KAAK;oBAAE,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;;oBAClE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;YAChD,CAAC;YACD,oBAAoB,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE;gBAC7C,SAAS,GAAG,IAAI,CAAA;gBAChB,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC7D,CAAC;SACF,CAAA;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC9B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CAAA;QACpD,MAAM,YAAY,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,YAAY,mCAAI,QAAQ,CAAA;QAC7D,oGAAoG;QACpG,MAAM,QAAQ,GAAG,OAAO,KAAK,UAAU,CAAA;QAEvC,iGAAiG;QACjG,MAAM,SAAS,GAAG,KAAK,EAAE,YAA4B,EAA2B,EAAE;;YAChF,MAAM,KAAK,GAAG,IAAA,yBAAU,EAAC,YAAY,CAAC,CAAA;YACtC,MAAM,IAAI,GAAG,IAAA,0BAAW,EAAC,KAAK,EAAE,UAAU,EAAE,iCAAkB,CAAC,CAAA;YAC/D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,EAAC,YAAY,mDAAG,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA,CAAA;gBAC7F,UAAU,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAA,6BAAc,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAA,IAAI,CAAC,UAAU,CAAC,YAAY,0CAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAA;YAC5H,CAAC;YACD,OAAO,IAAA,kCAAgB,EAAC,CAAC,GAAG,OAAO,EAAE,GAAG,IAAA,4BAAa,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;QAC5E,CAAC,CAAA;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,gCAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3E,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,CAAC,CAAA;YAClB,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,SAAS,CAAC;gBACR,WAAW,CAAC,cAAc,EAAE,CAAA;gBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;gBAClD,IAAI,UAA8B,CAAA;gBAClC,MAAM,UAAU,GAAwC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACpE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,cAAc,EAAE,CAAA;gBAC7G,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;gBAC7B,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,CAAA;gBAClD,YAAY,GAAG,EAAE,CAAA;gBACjB,MAAM,MAAM,GAAG,IAAA,eAAU,EAAC;oBACxB,KAAK,EAAE,IAAA,oCAAoB,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC;oBACxE,MAAM,EAAE,KAAK,CAAC,YAAY;oBAC1B,QAAQ,EAAE,aAAa;oBACvB,KAAK;oBACL,WAAW;oBACX,QAAQ,EAAE,CAAC,IAAA,gBAAW,EAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;oBAC9D,2FAA2F;oBAC3F,gEAAgE;oBAChE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;;wBACrB,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,IAAI,CAAC,CAAA;wBAC3B,IAAI,KAAK;4BAAE,WAAW,CAAC,KAAK,EAAE,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,mCAAI,KAAK,CAAC,EAAE,CAAC,CAAA;oBACnE,CAAC;oBACD,2BAA2B,EAAE,6CAA0B;oBACvD,WAAW,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;;wBACrD,uFAAuF;wBACvF,sCAAsC;wBACtC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;wBACnD,IAAI,YAAY,CAAC,MAAM;4BAAE,MAAA,KAAK,CAAC,MAAM,sDAAG,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC,CAAA;wBAC1E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC,CAAA;wBACjE,IAAI,UAAU,KAAK,SAAS,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,KAAI,MAAA,KAAK,CAAC,UAAU,qDAAI,CAAA,CAAC;4BAAE,UAAU,GAAG,UAAU,CAAA;wBAC/G,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;4BAC7B,yFAAyF;4BACzF,uFAAuF;4BACvF,8FAA8F;4BAC9F,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;4BACvC,MAAM,KAAK,GAAG,QAAQ,IAAI,iBAAiB,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,uBAAuB,KAAK,CAAC,CAAA;4BAC1G,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;wBACjG,CAAC;wBACD,6FAA6F;wBAC7F,uFAAuF;wBACvF,2FAA2F;wBAC3F,qEAAqE;wBACrE,OAAO;4BACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;4BACvF,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;yBAC3D,CAAA;oBACH,CAAC;iBACF,CAAC,CAAA;gBAEF,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBAC3C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;wBAClB,KAAK,YAAY;4BACf,WAAW,IAAI,IAAI,CAAC,IAAI,CAAA;4BACxB,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;4BACxD,MAAK;wBACP,KAAK,iBAAiB;4BACpB,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;4BAC7D,MAAK;wBACP,KAAK,kBAAkB;4BACrB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;4BACrC,MAAK;wBACP,KAAK,kBAAkB;4BACrB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;4BAClC,MAAK;wBACP,KAAK,gBAAgB;4BACnB,MAAM,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAA;4BAC1B,MAAK;wBACP,KAAK,WAAW;4BACd,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,iBAAiB,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC;gCAAE,KAAK,GAAG,IAAI,CAAA;4BACtH,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;4BACrH,MAAK;wBACP,KAAK,aAAa;4BAChB,KAAK,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,CAAA;4BACpC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;4BAC/F,MAAK;wBACP,KAAK,YAAY;4BACf,KAAK,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,CAAA;4BACpC,IAAI,CAAC;gCACH,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU;gCAChE,KAAK,EAAE,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;6BAC7E,CAAC,CAAA;4BACF,MAAK;wBACP,KAAK,OAAO;4BACV,MAAM,IAAI,CAAC,KAAK,CAAA;oBACpB,CAAC;gBACH,CAAC;gBAED,WAAW,CAAC,cAAc,EAAE,CAAA;gBAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAA;gBAC9C,YAAY,GAAG,EAAE,CAAA;gBACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAA;gBAChC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAA;gBAC1B,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAA;gBACxB,SAAS,KAAT,SAAS,GAAK,UAAU,KAAK,SAAS,EAAA;gBACtC,qFAAqF;gBACrF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,IAAI,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,YAAY,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAA;gBAClH,IAAI,CAAC,KAAK;oBAAE,MAAK;gBACjB,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;oBAC/B,MAAM,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,gBAAgB,UAAU,8HAA8H,CAAA;oBACjM,WAAW,IAAI,IAAI,CAAA;oBACnB,IAAI,IAAI,IAAI,CAAA;oBACZ,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;oBACnD,MAAK;gBACP,CAAC;gBACD,MAAA,KAAK,CAAC,MAAM,sDAAG,IAAI,CAAC,CAAA;YACtB,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAA;YACnC,8FAA8F;YAC9F,qGAAqG;YACrG,MAAM,QAAQ,GAAmB;gBAC/B,GAAG,IAAI;gBACP,GAAG,YAAY;gBACf,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE;aACrG,CAAA;YACD,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;YACrE,OAAO,OAAO;gBACZ,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;gBAClC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAA,oCAAoB,EAAC,KAAK,CAAC,EAAE,WAAW,EAAE,MAAA,IAAA,sCAAsB,EAAC,KAAK,CAAC,mCAAI,IAAA,oCAAoB,EAAC,KAAK,CAAC,EAAE,CAAA;QACpJ,CAAC;gBAAS,CAAC;YACT,oFAAoF;YACpF,MAAM,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,CAAA,CAAA;QAC3B,CAAC;IACH,CAAC;CACF;AAnLD,gCAmLC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type http from 'node:http';
|
|
2
|
+
import type { Duplex } from 'node:stream';
|
|
3
|
+
import { type AgentAppStatus } from '../transport/protocol';
|
|
4
|
+
import { type AppRequestHandler } from '../runtime/preview-proxy';
|
|
5
|
+
import { type AppMode } from './config';
|
|
6
|
+
import { type AppRunnerOptions } from './runner';
|
|
7
|
+
export type AppHostOptions = Omit<AppRunnerOptions, 'onStatus'> & {
|
|
8
|
+
/** The `$schema` of the builder.json a session VM writes. */
|
|
9
|
+
schemaUrl?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare class AppHost implements AppRequestHandler {
|
|
12
|
+
private readonly options;
|
|
13
|
+
private runner?;
|
|
14
|
+
private current;
|
|
15
|
+
private loading?;
|
|
16
|
+
/** The running app's framework and where its config came from, stamped on its every status. */
|
|
17
|
+
private identity?;
|
|
18
|
+
/** builder.json's text when the app was last loaded: a change to it restarts the app. */
|
|
19
|
+
private loadedManifest?;
|
|
20
|
+
private readonly listeners;
|
|
21
|
+
constructor(options: AppHostOptions);
|
|
22
|
+
get dir(): string;
|
|
23
|
+
get mode(): AppMode;
|
|
24
|
+
status(): AgentAppStatus | null;
|
|
25
|
+
onStatus(listener: (status: AgentAppStatus | null) => void): () => void;
|
|
26
|
+
private publish;
|
|
27
|
+
/**
|
|
28
|
+
* (Re)loads the app (in a session VM, writing its builder.json first) and runs it, stopping the
|
|
29
|
+
* one before. Resolves once its processes are launched (or it failed); null when there is no app.
|
|
30
|
+
*/
|
|
31
|
+
start(): Promise<AgentAppStatus | null>;
|
|
32
|
+
/**
|
|
33
|
+
* After a turn: brings builder.json in line with what the workspace now holds and starts the
|
|
34
|
+
* app when that changed, or nothing runs (a new app, or one that failed). A running app whose
|
|
35
|
+
* builder.json is unchanged keeps running; its dev servers pick up code changes themselves.
|
|
36
|
+
*/
|
|
37
|
+
refresh(): Promise<AgentAppStatus | null>;
|
|
38
|
+
private queue;
|
|
39
|
+
/** builder.json, written or updated first in a session VM (a deployment runs the release's as it is). */
|
|
40
|
+
private manifest;
|
|
41
|
+
private load;
|
|
42
|
+
/** Reports why the app can't run at all (its release couldn't be fetched, it holds no app). */
|
|
43
|
+
fail(error: string): void;
|
|
44
|
+
/** The current app's status once every service is up or has crashed, or after `timeoutMs`. */
|
|
45
|
+
settled(timeoutMs: number): Promise<AgentAppStatus | null>;
|
|
46
|
+
stop(): Promise<void>;
|
|
47
|
+
handleRequest(req: http.IncomingMessage, res: http.ServerResponse): boolean;
|
|
48
|
+
/** Answers from the first route; a static service without the file passes the request to the next. */
|
|
49
|
+
private answer;
|
|
50
|
+
handleUpgrade(req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The guest's one app host for `dir` (the session's workspace), serving the session URL. The
|
|
54
|
+
* session runtime starts it at boot and the run_app tool restarts it; both get this instance.
|
|
55
|
+
*/
|
|
56
|
+
export declare function appHostFor(dir: string, create: () => AppHostOptions): AppHost;
|
|
57
|
+
//# sourceMappingURL=app-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-host.d.ts","sourceRoot":"","sources":["../../src/app/app-host.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAsE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC/H,OAAO,EAA6C,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5G,OAAO,EAA+B,KAAK,OAAO,EAAsB,MAAM,UAAU,CAAA;AAExF,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAI1E,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG;IAChE,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAqCD,qBAAa,OAAQ,YAAW,iBAAiB;IAUnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,MAAM,CAAC,CAAW;IAC1B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,OAAO,CAAC,CAAgC;IAChD,+FAA+F;IAC/F,OAAO,CAAC,QAAQ,CAAC,CAA8C;IAC/D,yFAAyF;IACzF,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqD;gBAElD,OAAO,EAAE,cAAc;IAEpD,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,MAAM,IAAI,cAAc,GAAG,IAAI;IAI/B,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI;IAKvE,OAAO,CAAC,OAAO;IAOf;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAIvC;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQzC,OAAO,CAAC,KAAK;IAMb,yGAAyG;YAC3F,QAAQ;YAMR,IAAI;IA8BlB,+FAA+F;IAC/F,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB,8FAA8F;IACxF,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAO1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO;IA6B3E,sGAAsG;IACtG,OAAO,CAAC,MAAM;IAqBd,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;CAYhF;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,GAAG,OAAO,CAQ7E"}
|