@autonav/core 1.5.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/adapter/index.d.ts +3 -3
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +3 -3
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/navigator-adapter.d.ts +196 -0
- package/dist/adapter/navigator-adapter.d.ts.map +1 -0
- package/dist/adapter/navigator-adapter.js +579 -0
- package/dist/adapter/navigator-adapter.js.map +1 -0
- package/dist/cli/autonav.d.ts +2 -5
- package/dist/cli/autonav.d.ts.map +1 -1
- package/dist/cli/autonav.js +35 -49
- package/dist/cli/autonav.js.map +1 -1
- package/dist/cli/nav-chat.d.ts +2 -1
- package/dist/cli/nav-chat.d.ts.map +1 -1
- package/dist/cli/nav-chat.js +32 -3
- package/dist/cli/nav-chat.js.map +1 -1
- package/dist/cli/nav-init.d.ts +2 -1
- package/dist/cli/nav-init.d.ts.map +1 -1
- package/dist/cli/nav-init.js +12 -4
- package/dist/cli/nav-init.js.map +1 -1
- package/dist/cli/nav-install.d.ts +2 -1
- package/dist/cli/nav-install.d.ts.map +1 -1
- package/dist/cli/nav-install.js +4 -2
- package/dist/cli/nav-install.js.map +1 -1
- package/dist/cli/nav-memento.d.ts +21 -0
- package/dist/cli/nav-memento.d.ts.map +1 -0
- package/dist/cli/nav-memento.js +185 -0
- package/dist/cli/nav-memento.js.map +1 -0
- package/dist/cli/nav-mend.d.ts +2 -1
- package/dist/cli/nav-mend.d.ts.map +1 -1
- package/dist/cli/nav-mend.js +4 -1
- package/dist/cli/nav-mend.js.map +1 -1
- package/dist/cli/nav-migrate.d.ts +2 -1
- package/dist/cli/nav-migrate.d.ts.map +1 -1
- package/dist/cli/nav-migrate.js +2 -6
- package/dist/cli/nav-migrate.js.map +1 -1
- package/dist/cli/nav-query.d.ts +2 -1
- package/dist/cli/nav-query.d.ts.map +1 -1
- package/dist/cli/nav-query.js +12 -6
- package/dist/cli/nav-query.js.map +1 -1
- package/dist/cli/nav-standup.d.ts +18 -0
- package/dist/cli/nav-standup.d.ts.map +1 -0
- package/dist/cli/nav-standup.js +151 -0
- package/dist/cli/nav-standup.js.map +1 -0
- package/dist/cli/nav-uninstall.d.ts +2 -1
- package/dist/cli/nav-uninstall.d.ts.map +1 -1
- package/dist/cli/nav-uninstall.js +4 -2
- package/dist/cli/nav-uninstall.js.map +1 -1
- package/dist/cli/nav-update.d.ts +2 -1
- package/dist/cli/nav-update.d.ts.map +1 -1
- package/dist/cli/nav-update.js +11 -6
- package/dist/cli/nav-update.js.map +1 -1
- package/dist/conversation/App.d.ts +9 -2
- package/dist/conversation/App.d.ts.map +1 -1
- package/dist/conversation/App.js +304 -111
- package/dist/conversation/App.js.map +1 -1
- package/dist/conversation/index.d.ts +5 -0
- package/dist/conversation/index.d.ts.map +1 -1
- package/dist/conversation/index.js +17 -2
- package/dist/conversation/index.js.map +1 -1
- package/dist/harness/chibi-harness.d.ts +36 -0
- package/dist/harness/chibi-harness.d.ts.map +1 -0
- package/dist/harness/chibi-harness.js +383 -0
- package/dist/harness/chibi-harness.js.map +1 -0
- package/dist/harness/chibi-plugins/get_plugin_config +64 -0
- package/dist/harness/chibi-plugins/query_navigator +114 -0
- package/dist/harness/chibi-plugins/submit_answer +38 -0
- package/dist/harness/chibi-plugins/update_plugin_config +91 -0
- package/dist/harness/claude-code-harness.d.ts +24 -0
- package/dist/harness/claude-code-harness.d.ts.map +1 -0
- package/dist/harness/claude-code-harness.js +242 -0
- package/dist/harness/claude-code-harness.js.map +1 -0
- package/dist/harness/ephemeral-home.d.ts +34 -0
- package/dist/harness/ephemeral-home.d.ts.map +1 -0
- package/dist/harness/ephemeral-home.js +56 -0
- package/dist/harness/ephemeral-home.js.map +1 -0
- package/dist/harness/factory.d.ts +47 -0
- package/dist/harness/factory.d.ts.map +1 -0
- package/dist/harness/factory.js +84 -0
- package/dist/harness/factory.js.map +1 -0
- package/dist/harness/helpers.d.ts +58 -0
- package/dist/harness/helpers.d.ts.map +1 -0
- package/dist/harness/helpers.js +78 -0
- package/dist/harness/helpers.js.map +1 -0
- package/dist/harness/index.d.ts +14 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +13 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/opencode-harness.d.ts +79 -0
- package/dist/harness/opencode-harness.d.ts.map +1 -0
- package/dist/harness/opencode-harness.js +537 -0
- package/dist/harness/opencode-harness.js.map +1 -0
- package/dist/harness/opencode-tools/get_plugin_config.ts +72 -0
- package/dist/harness/opencode-tools/query_navigator.ts +126 -0
- package/dist/harness/opencode-tools/submit_answer.ts +40 -0
- package/dist/harness/opencode-tools/update_plugin_config.ts +105 -0
- package/dist/harness/sandbox.d.ts +59 -0
- package/dist/harness/sandbox.d.ts.map +1 -0
- package/dist/harness/sandbox.js +152 -0
- package/dist/harness/sandbox.js.map +1 -0
- package/dist/harness/tool-server.d.ts +50 -0
- package/dist/harness/tool-server.d.ts.map +1 -0
- package/dist/harness/tool-server.js +27 -0
- package/dist/harness/tool-server.js.map +1 -0
- package/dist/harness/types.d.ts +168 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +12 -0
- package/dist/harness/types.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/interview/App.d.ts +4 -2
- package/dist/interview/App.d.ts.map +1 -1
- package/dist/interview/App.js +36 -56
- package/dist/interview/App.js.map +1 -1
- package/dist/interview/index.d.ts +3 -0
- package/dist/interview/index.d.ts.map +1 -1
- package/dist/interview/index.js +1 -0
- package/dist/interview/index.js.map +1 -1
- package/dist/interview/prompts.d.ts +3 -1
- package/dist/interview/prompts.d.ts.map +1 -1
- package/dist/interview/prompts.js +5 -1
- package/dist/interview/prompts.js.map +1 -1
- package/dist/interview/ui/ChatBanner.d.ts +17 -0
- package/dist/interview/ui/ChatBanner.d.ts.map +1 -0
- package/dist/interview/ui/ChatBanner.js +30 -0
- package/dist/interview/ui/ChatBanner.js.map +1 -0
- package/dist/interview/ui/ChatInput.d.ts +36 -0
- package/dist/interview/ui/ChatInput.d.ts.map +1 -0
- package/dist/interview/ui/ChatInput.js +304 -0
- package/dist/interview/ui/ChatInput.js.map +1 -0
- package/dist/interview/ui/MarkdownText.d.ts +13 -0
- package/dist/interview/ui/MarkdownText.d.ts.map +1 -0
- package/dist/interview/ui/MarkdownText.js +107 -0
- package/dist/interview/ui/MarkdownText.js.map +1 -0
- package/dist/interview/ui/index.d.ts +3 -0
- package/dist/interview/ui/index.d.ts.map +1 -1
- package/dist/interview/ui/index.js +3 -0
- package/dist/interview/ui/index.js.map +1 -1
- package/dist/memento/git-operations.d.ts +95 -0
- package/dist/memento/git-operations.d.ts.map +1 -0
- package/dist/memento/git-operations.js +256 -0
- package/dist/memento/git-operations.js.map +1 -0
- package/dist/memento/implementer-agent.d.ts +31 -0
- package/dist/memento/implementer-agent.d.ts.map +1 -0
- package/dist/memento/implementer-agent.js +95 -0
- package/dist/memento/implementer-agent.js.map +1 -0
- package/dist/memento/index.d.ts +32 -0
- package/dist/memento/index.d.ts.map +1 -0
- package/dist/memento/index.js +40 -0
- package/dist/memento/index.js.map +1 -0
- package/dist/memento/loop.d.ts +34 -0
- package/dist/memento/loop.d.ts.map +1 -0
- package/dist/memento/loop.js +1227 -0
- package/dist/memento/loop.js.map +1 -0
- package/dist/memento/matrix-animation.d.ts +103 -0
- package/dist/memento/matrix-animation.d.ts.map +1 -0
- package/dist/memento/matrix-animation.js +303 -0
- package/dist/memento/matrix-animation.js.map +1 -0
- package/dist/memento/nav-protocol.d.ts +30 -0
- package/dist/memento/nav-protocol.d.ts.map +1 -0
- package/dist/memento/nav-protocol.js +75 -0
- package/dist/memento/nav-protocol.js.map +1 -0
- package/dist/memento/prompts.d.ts +57 -0
- package/dist/memento/prompts.d.ts.map +1 -0
- package/dist/memento/prompts.js +208 -0
- package/dist/memento/prompts.js.map +1 -0
- package/dist/memento/rate-limit.d.ts +85 -0
- package/dist/memento/rate-limit.d.ts.map +1 -0
- package/dist/memento/rate-limit.js +221 -0
- package/dist/memento/rate-limit.js.map +1 -0
- package/dist/memento/types.d.ts +123 -0
- package/dist/memento/types.d.ts.map +1 -0
- package/dist/memento/types.js +30 -0
- package/dist/memento/types.js.map +1 -0
- package/dist/memento/worker-agent.d.ts +33 -0
- package/dist/memento/worker-agent.d.ts.map +1 -0
- package/dist/memento/worker-agent.js +93 -0
- package/dist/memento/worker-agent.js.map +1 -0
- package/dist/registry.d.ts +35 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +87 -0
- package/dist/registry.js.map +1 -0
- package/dist/repo-analyzer/index.d.ts +2 -1
- package/dist/repo-analyzer/index.d.ts.map +1 -1
- package/dist/repo-analyzer/index.js +6 -17
- package/dist/repo-analyzer/index.js.map +1 -1
- package/dist/standup/config.d.ts +19 -0
- package/dist/standup/config.d.ts.map +1 -0
- package/dist/standup/config.js +42 -0
- package/dist/standup/config.js.map +1 -0
- package/dist/standup/index.d.ts +24 -0
- package/dist/standup/index.d.ts.map +1 -0
- package/dist/standup/index.js +29 -0
- package/dist/standup/index.js.map +1 -0
- package/dist/standup/loop.d.ts +36 -0
- package/dist/standup/loop.d.ts.map +1 -0
- package/dist/standup/loop.js +508 -0
- package/dist/standup/loop.js.map +1 -0
- package/dist/standup/prompts.d.ts +62 -0
- package/dist/standup/prompts.d.ts.map +1 -0
- package/dist/standup/prompts.js +211 -0
- package/dist/standup/prompts.js.map +1 -0
- package/dist/standup/standup-protocol.d.ts +33 -0
- package/dist/standup/standup-protocol.d.ts.map +1 -0
- package/dist/standup/standup-protocol.js +189 -0
- package/dist/standup/standup-protocol.js.map +1 -0
- package/dist/standup/types.d.ts +185 -0
- package/dist/standup/types.d.ts.map +1 -0
- package/dist/standup/types.js +67 -0
- package/dist/standup/types.js.map +1 -0
- package/dist/tools/cross-nav.d.ts +21 -0
- package/dist/tools/cross-nav.d.ts.map +1 -0
- package/dist/tools/cross-nav.js +93 -0
- package/dist/tools/cross-nav.js.map +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/related-navs-config.d.ts +15 -0
- package/dist/tools/related-navs-config.d.ts.map +1 -0
- package/dist/tools/related-navs-config.js +132 -0
- package/dist/tools/related-navs-config.js.map +1 -0
- package/dist/tools/related-navs.d.ts +23 -0
- package/dist/tools/related-navs.d.ts.map +1 -0
- package/dist/tools/related-navs.js +107 -0
- package/dist/tools/related-navs.js.map +1 -0
- package/dist/tools/response.d.ts +3 -2
- package/dist/tools/response.d.ts.map +1 -1
- package/dist/tools/response.js +7 -11
- package/dist/tools/response.js.map +1 -1
- package/dist/tools/self-config.d.ts +2 -1
- package/dist/tools/self-config.d.ts.map +1 -1
- package/dist/tools/self-config.js +5 -9
- package/dist/tools/self-config.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/harness/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGvD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,CAAC,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAChD,WAAW,CAmBb;AAeD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBvE;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAChD,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness Factory
|
|
3
|
+
*
|
|
4
|
+
* Resolves and creates the appropriate harness based on configuration.
|
|
5
|
+
*
|
|
6
|
+
* Resolution priority:
|
|
7
|
+
* 1. Explicit type parameter
|
|
8
|
+
* 2. CLI flag: --harness chibi
|
|
9
|
+
* 3. Env var: AUTONAV_HARNESS=chibi
|
|
10
|
+
* 4. Navigator config.json: harness.type
|
|
11
|
+
* 5. Default: claude-code
|
|
12
|
+
*/
|
|
13
|
+
import { ClaudeCodeHarness } from "./claude-code-harness.js";
|
|
14
|
+
/**
|
|
15
|
+
* Resolve harness type from available sources.
|
|
16
|
+
*
|
|
17
|
+
* @param explicit - Explicit type (from CLI flag or direct call)
|
|
18
|
+
* @param navigatorConfig - Navigator config object (may have harness.type)
|
|
19
|
+
* @returns Resolved harness type
|
|
20
|
+
*/
|
|
21
|
+
export function resolveHarnessType(explicit, navigatorConfig) {
|
|
22
|
+
// 1. Explicit parameter (from CLI --harness flag)
|
|
23
|
+
if (explicit) {
|
|
24
|
+
return validateHarnessType(explicit);
|
|
25
|
+
}
|
|
26
|
+
// 2. Environment variable
|
|
27
|
+
const envType = process.env.AUTONAV_HARNESS;
|
|
28
|
+
if (envType) {
|
|
29
|
+
return validateHarnessType(envType);
|
|
30
|
+
}
|
|
31
|
+
// 3. Navigator config
|
|
32
|
+
if (navigatorConfig?.harness?.type) {
|
|
33
|
+
return validateHarnessType(navigatorConfig.harness.type);
|
|
34
|
+
}
|
|
35
|
+
// 4. Default
|
|
36
|
+
return "claude-code";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Validate a string is a valid HarnessType
|
|
40
|
+
*/
|
|
41
|
+
function validateHarnessType(value) {
|
|
42
|
+
const valid = ["claude-code", "chibi", "opencode"];
|
|
43
|
+
if (!valid.includes(value)) {
|
|
44
|
+
throw new Error(`Invalid harness type: "${value}". Valid types: ${valid.join(", ")}`);
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a harness instance for the given type.
|
|
50
|
+
*
|
|
51
|
+
* @param type - Harness type to create
|
|
52
|
+
* @returns Harness instance
|
|
53
|
+
*/
|
|
54
|
+
export async function createHarness(type) {
|
|
55
|
+
switch (type) {
|
|
56
|
+
case "claude-code":
|
|
57
|
+
return new ClaudeCodeHarness();
|
|
58
|
+
case "chibi": {
|
|
59
|
+
// Dynamic import to avoid loading chibi dependencies when not needed
|
|
60
|
+
const { ChibiHarness } = await import("./chibi-harness.js");
|
|
61
|
+
return new ChibiHarness();
|
|
62
|
+
}
|
|
63
|
+
case "opencode": {
|
|
64
|
+
const { OpenCodeHarness } = await import("./opencode-harness.js");
|
|
65
|
+
return new OpenCodeHarness();
|
|
66
|
+
}
|
|
67
|
+
default:
|
|
68
|
+
throw new Error(`Unknown harness type: ${type}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Resolve harness type and create instance in one call.
|
|
73
|
+
*
|
|
74
|
+
* This is the main entry point for harness creation.
|
|
75
|
+
*
|
|
76
|
+
* @param explicit - Explicit type (from CLI --harness flag)
|
|
77
|
+
* @param navigatorConfig - Navigator config object
|
|
78
|
+
* @returns Ready-to-use Harness instance
|
|
79
|
+
*/
|
|
80
|
+
export async function resolveAndCreateHarness(explicit, navigatorConfig) {
|
|
81
|
+
const type = resolveHarnessType(explicit, navigatorConfig);
|
|
82
|
+
return createHarness(type);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/harness/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAiB,EACjB,eAAiD;IAEjD,kDAAkD;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,0BAA0B;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,sBAAsB;IACtB,IAAI,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACnC,OAAO,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa;IACb,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAkB,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAoB,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,0BAA0B,KAAK,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAAoB,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAiB;IACnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,OAAO,IAAI,iBAAiB,EAAE,CAAC;QAEjC,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,qEAAqE;YACrE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC5D,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAClE,OAAO,IAAI,eAAe,EAAE,CAAC;QAC/B,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAiB,EACjB,eAAiD;IAEjD,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC3D,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness Helpers
|
|
3
|
+
*
|
|
4
|
+
* Utility functions for consuming AgentEvent streams.
|
|
5
|
+
* These are the most common patterns across all harness consumers.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentEvent } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Collect all text from an agent event stream into a single string.
|
|
10
|
+
*
|
|
11
|
+
* Useful for simple queries where you just need the final answer text.
|
|
12
|
+
*/
|
|
13
|
+
export declare function collectText(events: AsyncIterable<AgentEvent>): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Result from collecting a complete agent run.
|
|
16
|
+
*/
|
|
17
|
+
export interface CollectedResult {
|
|
18
|
+
/** Whether the run succeeded */
|
|
19
|
+
success: boolean;
|
|
20
|
+
/** Final text output */
|
|
21
|
+
text: string;
|
|
22
|
+
/** Token usage */
|
|
23
|
+
usage?: {
|
|
24
|
+
inputTokens: number;
|
|
25
|
+
outputTokens: number;
|
|
26
|
+
};
|
|
27
|
+
/** Cost in USD */
|
|
28
|
+
costUsd?: number;
|
|
29
|
+
/** Duration in ms */
|
|
30
|
+
durationMs?: number;
|
|
31
|
+
/** All text events (in order) */
|
|
32
|
+
textEvents: string[];
|
|
33
|
+
/** All tool use events */
|
|
34
|
+
toolUseEvents: Array<{
|
|
35
|
+
name: string;
|
|
36
|
+
id: string;
|
|
37
|
+
input: Record<string, unknown>;
|
|
38
|
+
}>;
|
|
39
|
+
/** All tool result events */
|
|
40
|
+
toolResultEvents: Array<{
|
|
41
|
+
toolUseId: string;
|
|
42
|
+
content: string;
|
|
43
|
+
isError?: boolean;
|
|
44
|
+
}>;
|
|
45
|
+
/** All error events */
|
|
46
|
+
errorEvents: Array<{
|
|
47
|
+
message: string;
|
|
48
|
+
retryable?: boolean;
|
|
49
|
+
}>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Collect the full result from an agent event stream.
|
|
53
|
+
*
|
|
54
|
+
* Accumulates all events into a structured result. Useful when you need
|
|
55
|
+
* to inspect tool usage, track errors, or access usage metrics.
|
|
56
|
+
*/
|
|
57
|
+
export declare function collectResult(events: AsyncIterable<AgentEvent>): Promise<CollectedResult>;
|
|
58
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/harness/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAUpF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IAEjB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,kBAAkB;IAClB,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAEtD,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,iCAAiC;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,0BAA0B;IAC1B,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAEnF,6BAA6B;IAC7B,gBAAgB,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAEnF,uBAAuB;IACvB,WAAW,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC9D;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAiD/F"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness Helpers
|
|
3
|
+
*
|
|
4
|
+
* Utility functions for consuming AgentEvent streams.
|
|
5
|
+
* These are the most common patterns across all harness consumers.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Collect all text from an agent event stream into a single string.
|
|
9
|
+
*
|
|
10
|
+
* Useful for simple queries where you just need the final answer text.
|
|
11
|
+
*/
|
|
12
|
+
export async function collectText(events) {
|
|
13
|
+
let text = "";
|
|
14
|
+
for await (const event of events) {
|
|
15
|
+
if (event.type === "text") {
|
|
16
|
+
text = event.text; // Use last text (not concatenate — each text event is a full block)
|
|
17
|
+
}
|
|
18
|
+
else if (event.type === "result" && event.text && !text) {
|
|
19
|
+
text = event.text;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return text;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Collect the full result from an agent event stream.
|
|
26
|
+
*
|
|
27
|
+
* Accumulates all events into a structured result. Useful when you need
|
|
28
|
+
* to inspect tool usage, track errors, or access usage metrics.
|
|
29
|
+
*/
|
|
30
|
+
export async function collectResult(events) {
|
|
31
|
+
const result = {
|
|
32
|
+
success: false,
|
|
33
|
+
text: "",
|
|
34
|
+
textEvents: [],
|
|
35
|
+
toolUseEvents: [],
|
|
36
|
+
toolResultEvents: [],
|
|
37
|
+
errorEvents: [],
|
|
38
|
+
};
|
|
39
|
+
for await (const event of events) {
|
|
40
|
+
switch (event.type) {
|
|
41
|
+
case "text":
|
|
42
|
+
result.textEvents.push(event.text);
|
|
43
|
+
result.text = event.text; // Last text block
|
|
44
|
+
break;
|
|
45
|
+
case "tool_use":
|
|
46
|
+
result.toolUseEvents.push({
|
|
47
|
+
name: event.name,
|
|
48
|
+
id: event.id,
|
|
49
|
+
input: event.input,
|
|
50
|
+
});
|
|
51
|
+
break;
|
|
52
|
+
case "tool_result":
|
|
53
|
+
result.toolResultEvents.push({
|
|
54
|
+
toolUseId: event.toolUseId,
|
|
55
|
+
content: event.content,
|
|
56
|
+
isError: event.isError,
|
|
57
|
+
});
|
|
58
|
+
break;
|
|
59
|
+
case "error":
|
|
60
|
+
result.errorEvents.push({
|
|
61
|
+
message: event.message,
|
|
62
|
+
retryable: event.retryable,
|
|
63
|
+
});
|
|
64
|
+
break;
|
|
65
|
+
case "result":
|
|
66
|
+
result.success = event.success;
|
|
67
|
+
if (event.text && !result.text) {
|
|
68
|
+
result.text = event.text;
|
|
69
|
+
}
|
|
70
|
+
result.usage = event.usage;
|
|
71
|
+
result.costUsd = event.costUsd;
|
|
72
|
+
result.durationMs = event.durationMs;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/harness/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAiC;IACjE,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,oEAAoE;QACzF,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1D,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAkCD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAiC;IACnE,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;QACjB,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM;gBACT,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,kBAAkB;gBAC5C,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;oBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAC3B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC/B,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;gBAC3B,CAAC;gBACD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC3B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC/B,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;gBACrC,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness Module
|
|
3
|
+
*
|
|
4
|
+
* Universal agent runtime adapter. Everything goes through the harness:
|
|
5
|
+
* query, update, chat, memento, standup, and agent-to-agent communication.
|
|
6
|
+
*/
|
|
7
|
+
export type { Harness, HarnessSession, AgentConfig, AgentEvent, HarnessType, SandboxConfig, } from "./types.js";
|
|
8
|
+
export { ClaudeCodeHarness } from "./claude-code-harness.js";
|
|
9
|
+
export { resolveHarnessType, createHarness, resolveAndCreateHarness, } from "./factory.js";
|
|
10
|
+
export { collectText, collectResult, type CollectedResult, } from "./helpers.js";
|
|
11
|
+
export { defineTool, type ToolDefinition, type ToolResult, } from "./tool-server.js";
|
|
12
|
+
export { createEphemeralHome, type EphemeralHome, type EphemeralHomeOptions, } from "./ephemeral-home.js";
|
|
13
|
+
export { isSandboxEnabled, wrapCommand, } from "./sandbox.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,WAAW,EACX,aAAa,EACb,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,WAAW,GACZ,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness Module
|
|
3
|
+
*
|
|
4
|
+
* Universal agent runtime adapter. Everything goes through the harness:
|
|
5
|
+
* query, update, chat, memento, standup, and agent-to-agent communication.
|
|
6
|
+
*/
|
|
7
|
+
export { ClaudeCodeHarness } from "./claude-code-harness.js";
|
|
8
|
+
export { resolveHarnessType, createHarness, resolveAndCreateHarness, } from "./factory.js";
|
|
9
|
+
export { collectText, collectResult, } from "./helpers.js";
|
|
10
|
+
export { defineTool, } from "./tool-server.js";
|
|
11
|
+
export { createEphemeralHome, } from "./ephemeral-home.js";
|
|
12
|
+
export { isSandboxEnabled, wrapCommand, } from "./sandbox.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/harness/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,WAAW,EACX,aAAa,GAEd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,GAGX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,mBAAmB,GAGpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,WAAW,GACZ,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Harness
|
|
3
|
+
*
|
|
4
|
+
* Adapts OpenCode (https://opencode.ai/) into the universal Harness interface
|
|
5
|
+
* via its TypeScript SDK (@opencode-ai/sdk).
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - A shared opencode server process is started lazily on first run()
|
|
9
|
+
* - Each run() creates an SDK session + ephemeral project dir with custom tools
|
|
10
|
+
* - Events stream via SSE (event.subscribe) and translate to AgentEvent
|
|
11
|
+
* - Custom tools live in .opencode/tools/ as TypeScript files (loaded by OpenCode)
|
|
12
|
+
*
|
|
13
|
+
* The server persists across sessions within a single harness instance.
|
|
14
|
+
* Calling close() on the harness kills the server process.
|
|
15
|
+
*/
|
|
16
|
+
import type { Harness, HarnessSession, AgentConfig, AgentEvent } from "./types.js";
|
|
17
|
+
import type { ToolDefinition } from "./tool-server.js";
|
|
18
|
+
/**
|
|
19
|
+
* OpenCode harness session.
|
|
20
|
+
*
|
|
21
|
+
* Uses promptAsync + event.subscribe for streaming. Each prompt fires
|
|
22
|
+
* asynchronously and events are consumed from the SSE stream filtered
|
|
23
|
+
* by session ID.
|
|
24
|
+
*/
|
|
25
|
+
declare class OpenCodeSession implements HarnessSession {
|
|
26
|
+
private config;
|
|
27
|
+
private sessionId;
|
|
28
|
+
private client;
|
|
29
|
+
private cleanupFn;
|
|
30
|
+
private closed;
|
|
31
|
+
private directory;
|
|
32
|
+
private abortController;
|
|
33
|
+
private currentIterator;
|
|
34
|
+
constructor(config: AgentConfig, sessionId: string, client: any, cleanupFn: (() => void) | null, directory: string);
|
|
35
|
+
/**
|
|
36
|
+
* Send the initial or follow-up prompt and stream events.
|
|
37
|
+
*/
|
|
38
|
+
private streamPrompt;
|
|
39
|
+
[Symbol.asyncIterator](): AsyncIterator<AgentEvent>;
|
|
40
|
+
/**
|
|
41
|
+
* Start streaming for the initial prompt.
|
|
42
|
+
*/
|
|
43
|
+
startInitialPrompt(prompt: string): void;
|
|
44
|
+
send(prompt: string): AsyncIterable<AgentEvent>;
|
|
45
|
+
updateConfig(config: Partial<AgentConfig>): void;
|
|
46
|
+
close(): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* OpenCode Harness
|
|
50
|
+
*
|
|
51
|
+
* Manages a shared opencode server and creates sessions that delegate
|
|
52
|
+
* to the OpenCode SDK. Custom tools are injected via .opencode/tools/
|
|
53
|
+
* in ephemeral project directories.
|
|
54
|
+
*/
|
|
55
|
+
export declare class OpenCodeHarness implements Harness {
|
|
56
|
+
readonly displayName = "opencode";
|
|
57
|
+
private server;
|
|
58
|
+
private client;
|
|
59
|
+
private initPromise;
|
|
60
|
+
/**
|
|
61
|
+
* Lazily start the shared opencode server.
|
|
62
|
+
*/
|
|
63
|
+
private ensureServer;
|
|
64
|
+
run(config: AgentConfig, prompt: string): HarnessSession;
|
|
65
|
+
/**
|
|
66
|
+
* Internal: Create a fully-initialized OpenCodeSession.
|
|
67
|
+
* Called from LazyOpenCodeSession on first iteration.
|
|
68
|
+
*/
|
|
69
|
+
createSession(config: AgentConfig, prompt: string): Promise<OpenCodeSession>;
|
|
70
|
+
createToolServer(name: string, tools: ToolDefinition[]): {
|
|
71
|
+
server: unknown;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Stop the shared server and clean up all resources.
|
|
75
|
+
*/
|
|
76
|
+
close(): Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=opencode-harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-harness.d.ts","sourceRoot":"","sources":["../../src/harness/opencode-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA2CvD;;;;;;GAMG;AACH,cAAM,eAAgB,YAAW,cAAc;IAC7C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAA2C;gBAGhE,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,EAC9B,SAAS,EAAE,MAAM;IAUnB;;OAEG;YACY,YAAY;IAiNpB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC;IAS1D;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IAa/C,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAI1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB7B;AAED;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,OAAO;IAC7C,QAAQ,CAAC,WAAW,cAAc;IAElC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAA8B;IAEjD;;OAEG;YACW,YAAY;IA+D1B,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IAQxD;;;OAGG;IACG,aAAa,CACjB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC;IAkG3B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE;IAa5E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
|