@asterxsk/kiln 0.4.0 → 0.4.2
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 +155 -155
- package/agent/AGENTS.md +67 -67
- package/agent/README.md +5 -5
- package/agent/extensions/ask-user/index.ts +418 -418
- package/agent/extensions/ask-user/install.ps1 +27 -27
- package/agent/extensions/ask-user/install.sh +24 -24
- package/agent/extensions/ask-user/package-lock.json +769 -769
- package/agent/extensions/ask-user/package.json +19 -19
- package/agent/extensions/ask-user/prompt.ts +45 -45
- package/agent/extensions/ask-user/tsconfig.json +7 -7
- package/agent/extensions/background-terminals/docs/implementation-guide.md +942 -942
- package/agent/extensions/background-terminals/index.ts +627 -627
- package/agent/extensions/background-terminals/install.ps1 +27 -27
- package/agent/extensions/background-terminals/install.sh +24 -24
- package/agent/extensions/background-terminals/manager.test.ts +735 -735
- package/agent/extensions/background-terminals/output.test.ts +109 -109
- package/agent/extensions/background-terminals/package-lock.json +769 -769
- package/agent/extensions/background-terminals/package.json +17 -17
- package/agent/extensions/background-terminals/prompt.test.ts +125 -125
- package/agent/extensions/background-terminals/ps.test.ts +82 -82
- package/agent/extensions/background-terminals/result-delivery.test.ts +44 -44
- package/agent/extensions/background-terminals/src/domain.ts +87 -87
- package/agent/extensions/background-terminals/src/manager.ts +907 -907
- package/agent/extensions/background-terminals/src/output.ts +84 -84
- package/agent/extensions/background-terminals/src/prompt.ts +142 -142
- package/agent/extensions/background-terminals/src/result-delivery.ts +27 -27
- package/agent/extensions/background-terminals/src/runtime.ts +36 -36
- package/agent/extensions/background-terminals/src/ui/output-view.ts +79 -79
- package/agent/extensions/background-terminals/src/ui/ps.ts +621 -621
- package/agent/extensions/background-terminals/tsconfig.json +7 -7
- package/agent/extensions/destructive/README.md +31 -31
- package/agent/extensions/destructive/index.ts +88 -88
- package/agent/extensions/destructive/install.ps1 +27 -27
- package/agent/extensions/destructive/install.sh +24 -24
- package/agent/extensions/file-search/index.spec.ts +443 -443
- package/agent/extensions/file-search/index.ts +459 -459
- package/agent/extensions/file-search/install.ps1 +27 -27
- package/agent/extensions/file-search/install.sh +24 -24
- package/agent/extensions/file-search/package-lock.json +2253 -2253
- package/agent/extensions/file-search/package.json +23 -23
- package/agent/extensions/file-search/src/args.ts +122 -122
- package/agent/extensions/file-search/src/binaries.ts +422 -422
- package/agent/extensions/file-search/src/output.ts +126 -126
- package/agent/extensions/file-search/src/process.ts +146 -146
- package/agent/extensions/file-search/src/prompt.ts +52 -52
- package/agent/extensions/file-search/tsconfig.json +7 -7
- package/agent/extensions/goal/README.md +50 -50
- package/agent/extensions/goal/index.ts +155 -155
- package/agent/extensions/goal/install.ps1 +27 -27
- package/agent/extensions/goal/install.sh +24 -24
- package/agent/extensions/kiln-update/README.md +38 -25
- package/agent/extensions/kiln-update/index.ts +177 -99
- package/agent/extensions/modelconf/PLAN.md +915 -915
- package/agent/extensions/modelconf/README.md +66 -66
- package/agent/extensions/modelconf/index.ts +296 -296
- package/agent/extensions/modelconf/install.ps1 +27 -27
- package/agent/extensions/modelconf/install.sh +24 -24
- package/agent/extensions/modelconf/package-lock.json +1809 -1809
- package/agent/extensions/modelconf/package.json +13 -13
- package/agent/extensions/modelconf/src/fuzzy.ts +26 -26
- package/agent/extensions/modelconf/src/glob.ts +13 -13
- package/agent/extensions/modelconf/src/persistence.test.ts +46 -46
- package/agent/extensions/modelconf/src/persistence.ts +164 -164
- package/agent/extensions/modelconf/src/ui/ModelConfView.test.ts +75 -75
- package/agent/extensions/modelconf/src/ui/ModelConfView.ts +1101 -1101
- package/agent/extensions/modelconf/tsconfig.json +15 -15
- package/agent/extensions/pi-web-access/CHANGELOG.md +690 -690
- package/agent/extensions/pi-web-access/LICENSE +21 -21
- package/agent/extensions/pi-web-access/README.md +470 -470
- package/agent/extensions/pi-web-access/SECURITY.md +5 -5
- package/agent/extensions/pi-web-access/activity.ts +101 -101
- package/agent/extensions/pi-web-access/auth-fetch.ts +148 -148
- package/agent/extensions/pi-web-access/brightdata-unlocker.ts +272 -272
- package/agent/extensions/pi-web-access/chrome-cookies.ts +669 -669
- package/agent/extensions/pi-web-access/content-find.ts +139 -139
- package/agent/extensions/pi-web-access/credential-source.ts +191 -191
- package/agent/extensions/pi-web-access/data-uri-sanitize.ts +406 -406
- package/agent/extensions/pi-web-access/datalab-pdf-extract.ts +568 -568
- package/agent/extensions/pi-web-access/declared-web-links.ts +173 -173
- package/agent/extensions/pi-web-access/evidence/CONTRACT-EVIDENCE.md +496 -496
- package/agent/extensions/pi-web-access/evidence/contract-probe.mjs +140 -140
- package/agent/extensions/pi-web-access/exa.ts +526 -526
- package/agent/extensions/pi-web-access/extract.ts +1196 -1196
- package/agent/extensions/pi-web-access/feature-config.ts +29 -29
- package/agent/extensions/pi-web-access/fetch-params.ts +111 -111
- package/agent/extensions/pi-web-access/gemini-adc.ts +298 -298
- package/agent/extensions/pi-web-access/gemini-api.ts +353 -353
- package/agent/extensions/pi-web-access/gemini-pdf-extract.ts +108 -108
- package/agent/extensions/pi-web-access/gemini-search.ts +21 -21
- package/agent/extensions/pi-web-access/gemini-url-context.ts +128 -128
- package/agent/extensions/pi-web-access/gemini-web-config.ts +101 -101
- package/agent/extensions/pi-web-access/gemini-web.ts +487 -487
- package/agent/extensions/pi-web-access/github-api.ts +197 -197
- package/agent/extensions/pi-web-access/github-extract.ts +746 -746
- package/agent/extensions/pi-web-access/github-issue-pr.ts +700 -700
- package/agent/extensions/pi-web-access/index.ts +1737 -1737
- package/agent/extensions/pi-web-access/package-lock.json +5808 -5808
- package/agent/extensions/pi-web-access/package.json +64 -64
- package/agent/extensions/pi-web-access/page-query.ts +96 -96
- package/agent/extensions/pi-web-access/pdf-extract.ts +409 -409
- package/agent/extensions/pi-web-access/promise-try.d.ts +7 -7
- package/agent/extensions/pi-web-access/query-rewrite.ts +51 -51
- package/agent/extensions/pi-web-access/render-search-error.ts +170 -170
- package/agent/extensions/pi-web-access/rsc-extract.ts +338 -338
- package/agent/extensions/pi-web-access/search-types.ts +20 -20
- package/agent/extensions/pi-web-access/source-check.ts +282 -282
- package/agent/extensions/pi-web-access/ssrf-protection.ts +526 -526
- package/agent/extensions/pi-web-access/storage.ts +521 -521
- package/agent/extensions/pi-web-access/summary-model-scope.ts +125 -125
- package/agent/extensions/pi-web-access/test/auth-fetch.test.mjs +208 -208
- package/agent/extensions/pi-web-access/test/brightdata-unlocker.test.mjs +840 -840
- package/agent/extensions/pi-web-access/test/chrome-cookie-extraction.test.mjs +441 -441
- package/agent/extensions/pi-web-access/test/config-path.test.mjs +283 -283
- package/agent/extensions/pi-web-access/test/content-find.test.mjs +25 -25
- package/agent/extensions/pi-web-access/test/credential-source.test.mjs +118 -118
- package/agent/extensions/pi-web-access/test/data-uri-sanitize.test.mjs +210 -210
- package/agent/extensions/pi-web-access/test/datalab-pdf-extract.test.mjs +552 -552
- package/agent/extensions/pi-web-access/test/declared-web-links.test.mjs +212 -212
- package/agent/extensions/pi-web-access/test/fetch-answer-storage.test.mjs +40 -40
- package/agent/extensions/pi-web-access/test/fetch-cache-storage.test.mjs +334 -334
- package/agent/extensions/pi-web-access/test/fetch-content-domain-policy.test.mjs +95 -95
- package/agent/extensions/pi-web-access/test/fetch-modes.test.mjs +53 -53
- package/agent/extensions/pi-web-access/test/fetch-not-found-guidance.test.mjs +92 -92
- package/agent/extensions/pi-web-access/test/fetch-params.test.mjs +86 -86
- package/agent/extensions/pi-web-access/test/fetch-render-call.test.mjs +34 -34
- package/agent/extensions/pi-web-access/test/fetch-routing.test.mjs +173 -173
- package/agent/extensions/pi-web-access/test/gemini-adc-auth.test.mjs +257 -257
- package/agent/extensions/pi-web-access/test/gemini-api-transport.test.mjs +170 -170
- package/agent/extensions/pi-web-access/test/gemini-pdf-extract.test.mjs +133 -133
- package/agent/extensions/pi-web-access/test/gemini-web-cookie-opt-in.test.mjs +178 -178
- package/agent/extensions/pi-web-access/test/gemini-web-header-overflow.test.mjs +148 -148
- package/agent/extensions/pi-web-access/test/get-search-content.test.mjs +223 -223
- package/agent/extensions/pi-web-access/test/github-extract.test.mjs +378 -378
- package/agent/extensions/pi-web-access/test/github-issue-pr.test.mjs +565 -565
- package/agent/extensions/pi-web-access/test/inline-content-config.test.mjs +99 -99
- package/agent/extensions/pi-web-access/test/lazy-extract-load.test.mjs +118 -118
- package/agent/extensions/pi-web-access/test/local-video-oversize.test.mjs +52 -52
- package/agent/extensions/pi-web-access/test/package-typebox-dependency.test.mjs +50 -50
- package/agent/extensions/pi-web-access/test/page-query.test.mjs +51 -51
- package/agent/extensions/pi-web-access/test/pdf-config.test.mjs +140 -140
- package/agent/extensions/pi-web-access/test/pdf-extract.test.mjs +500 -500
- package/agent/extensions/pi-web-access/test/proxy-transport.test.mjs +286 -286
- package/agent/extensions/pi-web-access/test/query-rewrite.test.mjs +52 -52
- package/agent/extensions/pi-web-access/test/rsc-fallback.test.mjs +102 -102
- package/agent/extensions/pi-web-access/test/search-error-render.test.mjs +152 -152
- package/agent/extensions/pi-web-access/test/search-providers.test.mjs +274 -274
- package/agent/extensions/pi-web-access/test/source-check.test.mjs +179 -179
- package/agent/extensions/pi-web-access/test/ssrf-allow-ranges-config.test.mjs +205 -205
- package/agent/extensions/pi-web-access/test/ssrf-protection.test.mjs +456 -456
- package/agent/extensions/pi-web-access/test/summary-model-scope.test.mjs +106 -106
- package/agent/extensions/pi-web-access/test/tool-registration-config.test.mjs +182 -182
- package/agent/extensions/pi-web-access/test/web-search-answer-render.test.mjs +66 -66
- package/agent/extensions/pi-web-access/test/youtube-extract-errors.test.mjs +64 -64
- package/agent/extensions/pi-web-access/tsconfig.json +11 -11
- package/agent/extensions/pi-web-access/utils.ts +451 -451
- package/agent/extensions/pi-web-access/video-extract.ts +392 -392
- package/agent/extensions/pi-web-access/youtube-extract.ts +328 -328
- package/agent/extensions/shared/activity-status.ts +31 -31
- package/agent/extensions/shared/child-session.test.ts +270 -270
- package/agent/extensions/shared/child-session.ts +148 -148
- package/agent/extensions/shared/context-utilization.test.ts +48 -48
- package/agent/extensions/shared/context-utilization.ts +47 -47
- package/agent/extensions/shared/dashboard-state.ts +99 -99
- package/agent/extensions/shared/install.ps1 +27 -27
- package/agent/extensions/shared/install.sh +24 -24
- package/agent/extensions/shared/tool-call-timeout.test.ts +117 -117
- package/agent/extensions/shared/tool-call-timeout.ts +104 -104
- package/agent/extensions/skillsconf/README.md +74 -74
- package/agent/extensions/skillsconf/index.ts +92 -92
- package/agent/extensions/skillsconf/install.ps1 +27 -27
- package/agent/extensions/skillsconf/install.sh +24 -24
- package/agent/extensions/skillsconf/package-lock.json +1809 -1809
- package/agent/extensions/skillsconf/package.json +18 -18
- package/agent/extensions/skillsconf/src/delete-skill.test.ts +64 -64
- package/agent/extensions/skillsconf/src/delete-skill.ts +45 -45
- package/agent/extensions/skillsconf/src/filter.test.ts +80 -80
- package/agent/extensions/skillsconf/src/filter.ts +74 -74
- package/agent/extensions/skillsconf/src/fuzzy.ts +26 -26
- package/agent/extensions/skillsconf/src/persistence.test.ts +72 -72
- package/agent/extensions/skillsconf/src/persistence.ts +169 -169
- package/agent/extensions/skillsconf/src/ui/SkillConfView.test.ts +337 -337
- package/agent/extensions/skillsconf/src/ui/SkillConfView.ts +758 -758
- package/agent/extensions/skillsconf/src/ui/text-input.ts +91 -91
- package/agent/extensions/skillsconf/src/ui/tui-helpers.ts +144 -144
- package/agent/extensions/skillsconf/tsconfig.json +15 -15
- package/agent/extensions/statusline/index.ts +273 -282
- package/agent/extensions/statusline/install.ps1 +27 -27
- package/agent/extensions/statusline/install.sh +24 -24
- package/agent/extensions/subagents/by-the-way.test.ts +29 -29
- package/agent/extensions/subagents/claude.test.ts +119 -119
- package/agent/extensions/subagents/codex.test.ts +102 -102
- package/agent/extensions/subagents/context-usage.test.ts +107 -107
- package/agent/extensions/subagents/docs/design-plan.md +568 -568
- package/agent/extensions/subagents/docs/effect-v4-extension-guide.md +354 -354
- package/agent/extensions/subagents/docs/effect-v4-notes.md +571 -571
- package/agent/extensions/subagents/index.ts +779 -779
- package/agent/extensions/subagents/install.ps1 +27 -27
- package/agent/extensions/subagents/install.sh +24 -24
- package/agent/extensions/subagents/manager.test.ts +276 -276
- package/agent/extensions/subagents/package-lock.json +2244 -2244
- package/agent/extensions/subagents/package.json +19 -19
- package/agent/extensions/subagents/result-delivery.test.ts +27 -27
- package/agent/extensions/subagents/src/backend.ts +73 -73
- package/agent/extensions/subagents/src/backends/claude.ts +701 -701
- package/agent/extensions/subagents/src/backends/codex.ts +1060 -1060
- package/agent/extensions/subagents/src/backends/pi.ts +575 -575
- package/agent/extensions/subagents/src/backends/stub.ts +300 -300
- package/agent/extensions/subagents/src/by-the-way.ts +21 -21
- package/agent/extensions/subagents/src/domain.ts +253 -253
- package/agent/extensions/subagents/src/format.ts +74 -74
- package/agent/extensions/subagents/src/manager.ts +736 -736
- package/agent/extensions/subagents/src/prompt.ts +92 -92
- package/agent/extensions/subagents/src/result-delivery.ts +20 -20
- package/agent/extensions/subagents/src/runtime.ts +53 -53
- package/agent/extensions/subagents/src/ui/takeover.ts +583 -583
- package/agent/extensions/subagents/src/ui/transcript.ts +201 -201
- package/agent/extensions/subagents/takeover.test.ts +29 -29
- package/agent/extensions/subagents/tsconfig.json +7 -7
- package/agent/extensions/todo/AGENTS.md +38 -38
- package/agent/extensions/todo/LICENSE +21 -21
- package/agent/extensions/todo/config.ts +55 -55
- package/agent/extensions/todo/index.ts +151 -151
- package/agent/extensions/todo/install.ps1 +27 -27
- package/agent/extensions/todo/install.sh +24 -24
- package/agent/extensions/todo/locales/de.json +17 -17
- package/agent/extensions/todo/locales/en.json +15 -15
- package/agent/extensions/todo/locales/es.json +17 -17
- package/agent/extensions/todo/locales/fr.json +17 -17
- package/agent/extensions/todo/locales/pt-BR.json +17 -17
- package/agent/extensions/todo/locales/pt.json +17 -17
- package/agent/extensions/todo/locales/ru.json +17 -17
- package/agent/extensions/todo/locales/uk.json +17 -17
- package/agent/extensions/todo/locales/zh.json +17 -17
- package/agent/extensions/todo/package-lock.json +3358 -3358
- package/agent/extensions/todo/package.json +67 -67
- package/agent/extensions/todo/state/i18n-bridge.ts +64 -64
- package/agent/extensions/todo/state/invariants.ts +20 -20
- package/agent/extensions/todo/state/replay.ts +38 -38
- package/agent/extensions/todo/state/selectors.ts +107 -107
- package/agent/extensions/todo/state/state-reducer.ts +326 -326
- package/agent/extensions/todo/state/state.ts +18 -18
- package/agent/extensions/todo/state/store.ts +82 -82
- package/agent/extensions/todo/state/task-graph.ts +57 -57
- package/agent/extensions/todo/todo-overlay.ts +200 -200
- package/agent/extensions/todo/todo.ts +155 -155
- package/agent/extensions/todo/tool/response-envelope.ts +109 -109
- package/agent/extensions/todo/tool/types.ts +206 -206
- package/agent/extensions/todo/view/format.ts +177 -177
- package/agent/extensions/trim-context/README.md +54 -54
- package/agent/extensions/trim-context/index.ts +487 -487
- package/agent/extensions/trim-context/install.ps1 +27 -27
- package/agent/extensions/trim-context/install.sh +24 -24
- package/agent/keybindings.json +7 -7
- package/agent/version.txt +1 -1
- package/bin/kiln.js +20 -13
- package/package.json +1 -1
- package/agent/extensions/taste/index.ts +0 -443
- package/agent/extensions/taste/install.ps1 +0 -27
- package/agent/extensions/taste/install.sh +0 -24
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "subagents",
|
|
3
|
-
"private": true,
|
|
4
|
-
"type": "module",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"check": "tsc --noEmit -p .",
|
|
7
|
-
"prepare": "effect-tsgo patch",
|
|
8
|
-
"test": "node --test --experimental-strip-types manager.test.ts result-delivery.test.ts context-usage.test.ts takeover.test.ts by-the-way.test.ts",
|
|
9
|
-
"test:live": "node --test --experimental-strip-types claude.test.ts codex.test.ts"
|
|
10
|
-
},
|
|
11
|
-
"dependencies": {
|
|
12
|
-
"@anthropic-ai/claude-agent-sdk": "^0.3.216",
|
|
13
|
-
"effect": "^4.0.0-beta.99"
|
|
14
|
-
},
|
|
15
|
-
"devDependencies": {
|
|
16
|
-
"@effect/tsgo": "^0.24.2",
|
|
17
|
-
"typescript": "^7.0.2"
|
|
18
|
-
}
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "subagents",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"check": "tsc --noEmit -p .",
|
|
7
|
+
"prepare": "effect-tsgo patch",
|
|
8
|
+
"test": "node --test --experimental-strip-types manager.test.ts result-delivery.test.ts context-usage.test.ts takeover.test.ts by-the-way.test.ts",
|
|
9
|
+
"test:live": "node --test --experimental-strip-types claude.test.ts codex.test.ts"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@anthropic-ai/claude-agent-sdk": "^0.3.216",
|
|
13
|
+
"effect": "^4.0.0-beta.99"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@effect/tsgo": "^0.24.2",
|
|
17
|
+
"typescript": "^7.0.2"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import test from "node:test";
|
|
3
|
-
import { createDeferredResultDelivery } from "./src/result-delivery.ts";
|
|
4
|
-
|
|
5
|
-
test("a result consumed by a later wait is not delivered", () => {
|
|
6
|
-
const delivery = createDeferredResultDelivery<{
|
|
7
|
-
id: string;
|
|
8
|
-
output: string;
|
|
9
|
-
}>();
|
|
10
|
-
|
|
11
|
-
delivery.defer({ id: "sa-1", output: "done" });
|
|
12
|
-
delivery.consume(["sa-1"]);
|
|
13
|
-
|
|
14
|
-
assert.deepEqual(delivery.drain(), []);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
test("unconsumed results are delivered once in settlement order", () => {
|
|
18
|
-
const delivery = createDeferredResultDelivery<{ id: string }>();
|
|
19
|
-
const first = { id: "sa-1" };
|
|
20
|
-
const second = { id: "sa-2" };
|
|
21
|
-
|
|
22
|
-
delivery.defer(first);
|
|
23
|
-
delivery.defer(second);
|
|
24
|
-
|
|
25
|
-
assert.deepEqual(delivery.drain(), [first, second]);
|
|
26
|
-
assert.deepEqual(delivery.drain(), []);
|
|
27
|
-
});
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import { createDeferredResultDelivery } from "./src/result-delivery.ts";
|
|
4
|
+
|
|
5
|
+
test("a result consumed by a later wait is not delivered", () => {
|
|
6
|
+
const delivery = createDeferredResultDelivery<{
|
|
7
|
+
id: string;
|
|
8
|
+
output: string;
|
|
9
|
+
}>();
|
|
10
|
+
|
|
11
|
+
delivery.defer({ id: "sa-1", output: "done" });
|
|
12
|
+
delivery.consume(["sa-1"]);
|
|
13
|
+
|
|
14
|
+
assert.deepEqual(delivery.drain(), []);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("unconsumed results are delivered once in settlement order", () => {
|
|
18
|
+
const delivery = createDeferredResultDelivery<{ id: string }>();
|
|
19
|
+
const first = { id: "sa-1" };
|
|
20
|
+
const second = { id: "sa-2" };
|
|
21
|
+
|
|
22
|
+
delivery.defer(first);
|
|
23
|
+
delivery.defer(second);
|
|
24
|
+
|
|
25
|
+
assert.deepEqual(delivery.drain(), [first, second]);
|
|
26
|
+
assert.deepEqual(delivery.drain(), []);
|
|
27
|
+
});
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The unified backend interface: one `SubagentBackend` per agent runtime
|
|
3
|
-
* (pi, Claude Code, Codex), all producing the same `SubagentSession` shape.
|
|
4
|
-
*
|
|
5
|
-
* Planned real implementations (currently stubbed in ./backends/):
|
|
6
|
-
* - pi: in-process `createAgentSession()` via the pi SDK.
|
|
7
|
-
* - claude: `@anthropic-ai/claude-agent-sdk` `query()` in streaming-input mode.
|
|
8
|
-
* - codex: `codex app-server` child process speaking JSON-RPC over stdio.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { Effect, Scope, Stream } from "effect";
|
|
12
|
-
import { Context } from "effect";
|
|
13
|
-
import type {
|
|
14
|
-
BackendName,
|
|
15
|
-
SendError,
|
|
16
|
-
SpawnError,
|
|
17
|
-
SpawnTask,
|
|
18
|
-
SubagentEvent,
|
|
19
|
-
SubagentMeta,
|
|
20
|
-
} from "./domain.ts";
|
|
21
|
-
|
|
22
|
-
export interface BackendCapabilities {
|
|
23
|
-
/** Can send() steer a live run (vs. only starting a fresh run when idle). */
|
|
24
|
-
readonly steering: boolean;
|
|
25
|
-
readonly modelSelection: boolean;
|
|
26
|
-
readonly reasoningEffort: boolean;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* A live subagent session. The manager is the single consumer of `events`;
|
|
31
|
-
* it folds them into the `SubagentSnapshot` everything else reads.
|
|
32
|
-
*/
|
|
33
|
-
export interface SubagentSession {
|
|
34
|
-
/** Current metadata snapshot. Updates also arrive as MetaChanged events. */
|
|
35
|
-
readonly meta: Effect.Effect<SubagentMeta>;
|
|
36
|
-
/**
|
|
37
|
-
* All activity, normalized. Ends when the session's scope closes. Every
|
|
38
|
-
* run started within the session terminates with a RunSettled event.
|
|
39
|
-
*/
|
|
40
|
-
readonly events: Stream.Stream<SubagentEvent>;
|
|
41
|
-
/**
|
|
42
|
-
* Steer the active run, or start a fresh run when idle (v1 `manager.send`
|
|
43
|
-
* semantics — the "is a run active" decision is backend-native state).
|
|
44
|
-
*/
|
|
45
|
-
send(text: string): Effect.Effect<void, SendError>;
|
|
46
|
-
/**
|
|
47
|
-
* Interrupt the active run. Resolves once the backend acknowledges; the
|
|
48
|
-
* corresponding RunSettled(Interrupted) arrives on `events`. Callers bound
|
|
49
|
-
* this with a timeout and fall back to closing the session scope.
|
|
50
|
-
*/
|
|
51
|
-
readonly interrupt: Effect.Effect<void>;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export interface SubagentBackend {
|
|
55
|
-
readonly name: BackendName;
|
|
56
|
-
readonly capabilities: BackendCapabilities;
|
|
57
|
-
/** Probe availability (binary on PATH, SDK importable, credentials). */
|
|
58
|
-
readonly available: Effect.Effect<boolean>;
|
|
59
|
-
/**
|
|
60
|
-
* Spawn a session. Scoped: closing the scope interrupts/kills the
|
|
61
|
-
* underlying session or process and ends `events`. Fire-and-forget
|
|
62
|
-
* semantics (background fibers, result delivery) live in the manager.
|
|
63
|
-
*/
|
|
64
|
-
spawn(
|
|
65
|
-
task: SpawnTask,
|
|
66
|
-
): Effect.Effect<SubagentSession, SpawnError, Scope.Scope>;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/** Registry of all wired backends, keyed by name. */
|
|
70
|
-
export class BackendRegistry extends Context.Service<
|
|
71
|
-
BackendRegistry,
|
|
72
|
-
ReadonlyMap<BackendName, SubagentBackend>
|
|
73
|
-
>()("subagents/BackendRegistry") {}
|
|
1
|
+
/**
|
|
2
|
+
* The unified backend interface: one `SubagentBackend` per agent runtime
|
|
3
|
+
* (pi, Claude Code, Codex), all producing the same `SubagentSession` shape.
|
|
4
|
+
*
|
|
5
|
+
* Planned real implementations (currently stubbed in ./backends/):
|
|
6
|
+
* - pi: in-process `createAgentSession()` via the pi SDK.
|
|
7
|
+
* - claude: `@anthropic-ai/claude-agent-sdk` `query()` in streaming-input mode.
|
|
8
|
+
* - codex: `codex app-server` child process speaking JSON-RPC over stdio.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { Effect, Scope, Stream } from "effect";
|
|
12
|
+
import { Context } from "effect";
|
|
13
|
+
import type {
|
|
14
|
+
BackendName,
|
|
15
|
+
SendError,
|
|
16
|
+
SpawnError,
|
|
17
|
+
SpawnTask,
|
|
18
|
+
SubagentEvent,
|
|
19
|
+
SubagentMeta,
|
|
20
|
+
} from "./domain.ts";
|
|
21
|
+
|
|
22
|
+
export interface BackendCapabilities {
|
|
23
|
+
/** Can send() steer a live run (vs. only starting a fresh run when idle). */
|
|
24
|
+
readonly steering: boolean;
|
|
25
|
+
readonly modelSelection: boolean;
|
|
26
|
+
readonly reasoningEffort: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* A live subagent session. The manager is the single consumer of `events`;
|
|
31
|
+
* it folds them into the `SubagentSnapshot` everything else reads.
|
|
32
|
+
*/
|
|
33
|
+
export interface SubagentSession {
|
|
34
|
+
/** Current metadata snapshot. Updates also arrive as MetaChanged events. */
|
|
35
|
+
readonly meta: Effect.Effect<SubagentMeta>;
|
|
36
|
+
/**
|
|
37
|
+
* All activity, normalized. Ends when the session's scope closes. Every
|
|
38
|
+
* run started within the session terminates with a RunSettled event.
|
|
39
|
+
*/
|
|
40
|
+
readonly events: Stream.Stream<SubagentEvent>;
|
|
41
|
+
/**
|
|
42
|
+
* Steer the active run, or start a fresh run when idle (v1 `manager.send`
|
|
43
|
+
* semantics — the "is a run active" decision is backend-native state).
|
|
44
|
+
*/
|
|
45
|
+
send(text: string): Effect.Effect<void, SendError>;
|
|
46
|
+
/**
|
|
47
|
+
* Interrupt the active run. Resolves once the backend acknowledges; the
|
|
48
|
+
* corresponding RunSettled(Interrupted) arrives on `events`. Callers bound
|
|
49
|
+
* this with a timeout and fall back to closing the session scope.
|
|
50
|
+
*/
|
|
51
|
+
readonly interrupt: Effect.Effect<void>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface SubagentBackend {
|
|
55
|
+
readonly name: BackendName;
|
|
56
|
+
readonly capabilities: BackendCapabilities;
|
|
57
|
+
/** Probe availability (binary on PATH, SDK importable, credentials). */
|
|
58
|
+
readonly available: Effect.Effect<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Spawn a session. Scoped: closing the scope interrupts/kills the
|
|
61
|
+
* underlying session or process and ends `events`. Fire-and-forget
|
|
62
|
+
* semantics (background fibers, result delivery) live in the manager.
|
|
63
|
+
*/
|
|
64
|
+
spawn(
|
|
65
|
+
task: SpawnTask,
|
|
66
|
+
): Effect.Effect<SubagentSession, SpawnError, Scope.Scope>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Registry of all wired backends, keyed by name. */
|
|
70
|
+
export class BackendRegistry extends Context.Service<
|
|
71
|
+
BackendRegistry,
|
|
72
|
+
ReadonlyMap<BackendName, SubagentBackend>
|
|
73
|
+
>()("subagents/BackendRegistry") {}
|