@twelvehart/orcats 0.2.2 → 0.2.3
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 +3 -3
- package/dist/backends/acp-client.d.ts +1 -1
- package/dist/backends/acp-client.d.ts.map +1 -1
- package/dist/backends/acp-run.d.ts.map +1 -1
- package/dist/baseline/index.d.ts +3 -1
- package/dist/baseline/index.d.ts.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/package.json +5 -4
- package/src/backends/acp-client.ts +12 -10
- package/src/backends/acp-run.ts +18 -18
- package/src/backends/claude-run.ts +0 -3
- package/src/baseline/index.ts +4 -2
- package/src/cli/embedded.ts +19 -0
- package/src/cli/main.ts +4 -2
- package/src/cli/version.ts +1 -1
- package/src/monitor/index.ts +4 -2
- package/src/run-output/index.ts +2 -2
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Use Orcats when you want coding-agent work to be expressed as code instead of a
|
|
|
8
8
|
|
|
9
9
|
## Status
|
|
10
10
|
|
|
11
|
-
The package is version `0.2.
|
|
11
|
+
The package is version `0.2.3`. Install the public npm package for normal project use:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
npm i @twelvehart/orcats
|
|
@@ -63,8 +63,8 @@ curl -fsSL https://github.com/ASRagab/orca-ts/releases/latest/download/install.s
|
|
|
63
63
|
Pin a version or change the install directory with environment variables:
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
ORCA_VERSION=0.2.
|
|
67
|
-
bash <(curl -fsSL https://github.com/ASRagab/orca-ts/releases/download/v0.2.
|
|
66
|
+
ORCA_VERSION=0.2.3 ORCA_INSTALL_DIR="$HOME/.local/bin" \
|
|
67
|
+
bash <(curl -fsSL https://github.com/ASRagab/orca-ts/releases/download/v0.2.3/install.sh)
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
The standalone binary embeds the runtime API, so it can run a flow that imports from `@twelvehart/orcats` even when the flow project has no `node_modules`. If the project has its own `@twelvehart/orcats` package dependency, that project copy wins.
|
|
@@ -35,7 +35,7 @@ export interface AcpSpawnOptions {
|
|
|
35
35
|
readonly env?: NodeJS.ProcessEnv;
|
|
36
36
|
}
|
|
37
37
|
export type AcpProcessSpawner = (command: string, args: readonly string[], options: AcpSpawnOptions) => AcpProcess;
|
|
38
|
-
export type AcpRequestHandler = (message: AcpRequestMessage) =>
|
|
38
|
+
export type AcpRequestHandler = (message: AcpRequestMessage) => unknown;
|
|
39
39
|
export interface AcpClientOptions {
|
|
40
40
|
readonly command: string;
|
|
41
41
|
readonly args?: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-client.d.ts","sourceRoot":"","sources":["../../src/backends/acp-client.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,IAAI,IAAI,CAAC;IACjB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,eAAe,KACrB,UAAU,CAAC;AAEhB,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC
|
|
1
|
+
{"version":3,"file":"acp-client.d.ts","sourceRoot":"","sources":["../../src/backends/acp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-run.d.ts","sourceRoot":"","sources":["../../src/backends/acp-run.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAML,KAAK,UAAU,EAEhB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,GAAG,OAAO;IAC9E,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAMlF;AAED,wBAAgB,gBAAgB,IAAI;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAEjG;AAED,wBAAgB,eAAe,IAAI;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAchG;AAaD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,CAAC,SAAS,QAAQ,GAAG,OAAO,EAC3E,OAAO,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,EACrC,OAAO,EAAE,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC,EAC5C,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"acp-run.d.ts","sourceRoot":"","sources":["../../src/backends/acp-run.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAML,KAAK,UAAU,EAEhB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,GAAG,OAAO;IAC9E,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAMlF;AAED,wBAAgB,gBAAgB,IAAI;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAEjG;AAED,wBAAgB,eAAe,IAAI;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAchG;AAaD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,CAAC,SAAS,QAAQ,GAAG,OAAO,EAC3E,OAAO,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,EACrC,OAAO,EAAE,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC,EAC5C,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CA6Hf"}
|
package/dist/baseline/index.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface BaselineGateIssue {
|
|
|
20
20
|
export interface BaselineRepairResult {
|
|
21
21
|
readonly usage?: Usage | undefined;
|
|
22
22
|
}
|
|
23
|
+
type BaselineRepairOutput<T = void> = BaselineRepairResult | T;
|
|
23
24
|
export interface BaselineGateResult {
|
|
24
25
|
readonly policy: BaselinePolicy;
|
|
25
26
|
readonly status: "clean" | "repaired";
|
|
@@ -32,7 +33,7 @@ export interface RunBaselineGateOptions {
|
|
|
32
33
|
readonly commands: readonly VerificationCommand[];
|
|
33
34
|
readonly policy?: BaselinePolicy;
|
|
34
35
|
readonly commandTool?: CommandTool;
|
|
35
|
-
readonly repair?: (issues: readonly BaselineGateIssue[]) => Promise<
|
|
36
|
+
readonly repair?: (issues: readonly BaselineGateIssue[]) => Promise<BaselineRepairOutput>;
|
|
36
37
|
readonly monitor?: Pick<WorkflowMonitor, "stage" | "recordOutcome" | "recordFailure">;
|
|
37
38
|
readonly snapshotDir?: string;
|
|
38
39
|
readonly maxIterations?: number;
|
|
@@ -51,4 +52,5 @@ export declare function resolveBaselinePolicy(options?: BaselinePolicyParseOptio
|
|
|
51
52
|
export declare function parseBaselinePolicy(value: string | undefined): BaselinePolicy;
|
|
52
53
|
export declare function runBaselineGate(options: RunBaselineGateOptions): Promise<BaselineGateResult>;
|
|
53
54
|
export declare function captureDirtyBaselineSnapshot(options: DirtyBaselineSnapshotOptions): Promise<string | undefined>;
|
|
55
|
+
export {};
|
|
54
56
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAmB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAExF,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAA6B,MAAM,mBAAmB,CAAC;AAErG,eAAO,MAAM,gBAAgB,+CAAgD,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,KAAK,OAAO,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const ORCA_VERSION = "0.2.
|
|
1
|
+
export declare const ORCA_VERSION = "0.2.3";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twelvehart/orcats",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "TypeScript-native reimagining of Orca: deterministic coding-agent flows with author-time type feedback.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -56,10 +56,11 @@
|
|
|
56
56
|
"build:binary": "bun build src/cli/main.ts --compile --outfile dist/orcats",
|
|
57
57
|
"build:types": "tsc -p tsconfig.build.json",
|
|
58
58
|
"build:release": "bun run scripts/build-release-binaries.ts",
|
|
59
|
-
"lint": "eslint .",
|
|
59
|
+
"lint": "bun run docs:site:prepare && eslint .",
|
|
60
60
|
"test": "bun test",
|
|
61
61
|
"typecheck": "tsc --noEmit",
|
|
62
62
|
"docs:site:dev": "cd website && bun run dev",
|
|
63
|
+
"docs:site:prepare": "cd website && bun install --frozen-lockfile && bunx astro sync",
|
|
63
64
|
"docs:site:build": "cd website && bun install --frozen-lockfile && bun run build",
|
|
64
65
|
"docs:site:preview": "cd website && bun run preview",
|
|
65
66
|
"docs:check": "bun run scripts/check-doc-links.ts",
|
|
@@ -72,7 +73,7 @@
|
|
|
72
73
|
"validate:package": "bun run build:types && bun run scripts/validate-package-artifact.ts",
|
|
73
74
|
"smoke:package": "bun run scripts/smoke-package.ts",
|
|
74
75
|
"smoke:binary": "bun run scripts/smoke-binary.ts",
|
|
75
|
-
"verify": "bun run typecheck && bun test && bun run docs:site:build && bun run docs:check && bun run docs:symbols && bun run validate:fixtures && bun run validate:release && bun run build:types && bun run docs:signatures && bun run check:facade-gate && bun run smoke:binary"
|
|
76
|
+
"verify": "bun run lint && bun run typecheck && bun test && bun run docs:site:build && bun run docs:check && bun run docs:symbols && bun run validate:fixtures && bun run validate:release && bun run build:types && bun run docs:signatures && bun run check:facade-gate && bun run smoke:binary"
|
|
76
77
|
},
|
|
77
78
|
"dependencies": {
|
|
78
79
|
"effect": "^3.21.2",
|
|
@@ -83,7 +84,7 @@
|
|
|
83
84
|
"@eslint/js": "^9.39.1",
|
|
84
85
|
"@types/bun": "^1.3.3",
|
|
85
86
|
"eslint": "^9.39.1",
|
|
86
|
-
"eslint-plugin-boundaries": "^
|
|
87
|
+
"eslint-plugin-boundaries": "^6.0.2",
|
|
87
88
|
"typescript": "^5.9.3",
|
|
88
89
|
"typescript-eslint": "^8.46.4"
|
|
89
90
|
},
|
|
@@ -52,7 +52,7 @@ export type AcpProcessSpawner = (
|
|
|
52
52
|
options: AcpSpawnOptions
|
|
53
53
|
) => AcpProcess;
|
|
54
54
|
|
|
55
|
-
export type AcpRequestHandler = (message: AcpRequestMessage) =>
|
|
55
|
+
export type AcpRequestHandler = (message: AcpRequestMessage) => unknown;
|
|
56
56
|
|
|
57
57
|
interface Deferred<T> {
|
|
58
58
|
readonly promise: Promise<T>;
|
|
@@ -83,7 +83,7 @@ export class AcpClient {
|
|
|
83
83
|
readonly timer: ReturnType<typeof setTimeout>;
|
|
84
84
|
}
|
|
85
85
|
>();
|
|
86
|
-
private readonly closedState: Deferred<void> = Promise.withResolvers
|
|
86
|
+
private readonly closedState: Deferred<void> = Promise.withResolvers();
|
|
87
87
|
private nextId = 0;
|
|
88
88
|
private closed = false;
|
|
89
89
|
|
|
@@ -121,7 +121,13 @@ export class AcpClient {
|
|
|
121
121
|
this.pending.delete(id);
|
|
122
122
|
reject(new Error(`ACP request ${method} timed out after ${String(timeoutMs)}ms`));
|
|
123
123
|
}, timeoutMs);
|
|
124
|
-
this.pending.set(id, {
|
|
124
|
+
this.pending.set(id, {
|
|
125
|
+
resolve: (value) => {
|
|
126
|
+
resolve(value as T);
|
|
127
|
+
},
|
|
128
|
+
reject,
|
|
129
|
+
timer
|
|
130
|
+
});
|
|
125
131
|
});
|
|
126
132
|
this.write(message);
|
|
127
133
|
return await response;
|
|
@@ -259,23 +265,19 @@ export function spawnAcpProcess(
|
|
|
259
265
|
stdio: ["pipe", "pipe", "pipe"]
|
|
260
266
|
});
|
|
261
267
|
|
|
262
|
-
if (!child.stdout || !child.stdin) {
|
|
263
|
-
throw new Error(`failed to capture stdio for ${command}`);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
268
|
const exit = Promise.withResolvers<number | null>();
|
|
267
269
|
child.on("error", exit.reject);
|
|
268
270
|
child.on("close", exit.resolve);
|
|
269
271
|
|
|
270
272
|
return {
|
|
271
273
|
stdout: child.stdout,
|
|
272
|
-
|
|
274
|
+
stderr: child.stderr,
|
|
273
275
|
exit: exit.promise,
|
|
274
276
|
write(data: string) {
|
|
275
|
-
child.stdin
|
|
277
|
+
child.stdin.write(data);
|
|
276
278
|
},
|
|
277
279
|
endStdin() {
|
|
278
|
-
child.stdin
|
|
280
|
+
child.stdin.end();
|
|
279
281
|
},
|
|
280
282
|
kill(signal?: NodeJS.Signals) {
|
|
281
283
|
child.kill(signal);
|
package/src/backends/acp-run.ts
CHANGED
|
@@ -92,24 +92,26 @@ export async function runAcpConversation<Output, B extends "claude" | "codex">(
|
|
|
92
92
|
let markPromptActivity = (): void => {};
|
|
93
93
|
|
|
94
94
|
try {
|
|
95
|
-
client = await runAcpPhase(options.backend, "initialization",
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
95
|
+
client = await runAcpPhase(options.backend, "initialization", () =>
|
|
96
|
+
Promise.resolve(createAcpClient({
|
|
97
|
+
command: options.command,
|
|
98
|
+
args: options.args ?? [],
|
|
99
|
+
cwd: sessionCwd,
|
|
100
|
+
...(options.env === undefined ? {} : { env: options.env }),
|
|
101
|
+
...(options.spawnProcess === undefined ? {} : { spawnProcess: options.spawnProcess }),
|
|
102
|
+
requestTimeoutMs: options.requestTimeoutMs ?? 600_000,
|
|
103
|
+
handleRequest: (message) => handleClientRequest(message, sessionCwd, options.config?.readOnly === true),
|
|
104
|
+
onIncomingMessage: () => {
|
|
105
|
+
markPromptActivity();
|
|
106
|
+
}
|
|
107
|
+
}))
|
|
108
|
+
);
|
|
107
109
|
options.setProcess(client.process);
|
|
108
110
|
const acpClient = client;
|
|
109
111
|
options.setCancel(() => cancelAcpTurn(acpClient, activeSessionId, activePrompt, options.cancelTimeoutMs));
|
|
110
112
|
const done = acpClient.done.then(
|
|
111
113
|
() => ({ type: "success" as const }),
|
|
112
|
-
(error) => ({ type: "failed" as const, error })
|
|
114
|
+
(error: unknown) => ({ type: "failed" as const, error })
|
|
113
115
|
);
|
|
114
116
|
|
|
115
117
|
const updates = consumeAcpMessages(
|
|
@@ -149,7 +151,9 @@ export async function runAcpConversation<Output, B extends "claude" | "codex">(
|
|
|
149
151
|
options.requestTimeoutMs ?? 600_000,
|
|
150
152
|
options.inactivityTimeoutMs ?? DefaultAcpInactivityTimeoutMs
|
|
151
153
|
);
|
|
152
|
-
markPromptActivity =
|
|
154
|
+
markPromptActivity = () => {
|
|
155
|
+
watchdog.markActivity();
|
|
156
|
+
};
|
|
153
157
|
activePrompt = runAcpPhase(options.backend, "prompt execution", () => Promise.race([
|
|
154
158
|
acpClient.request<AcpPromptResponse>("session/prompt", {
|
|
155
159
|
sessionId: activeSessionId,
|
|
@@ -623,10 +627,6 @@ function backendLabel(backend: "claude" | "codex"): string {
|
|
|
623
627
|
return backend === "claude" ? "Claude" : "Codex";
|
|
624
628
|
}
|
|
625
629
|
|
|
626
|
-
function delay(ms: number): Promise<void> {
|
|
627
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
628
|
-
}
|
|
629
|
-
|
|
630
630
|
function isObject(value: unknown): value is Record<string, unknown> {
|
|
631
631
|
return typeof value === "object" && value !== null;
|
|
632
632
|
}
|
|
@@ -222,8 +222,5 @@ function resolveClaudeTransport<Output>(
|
|
|
222
222
|
if (config.model !== undefined || config.resumeSessionId !== undefined) {
|
|
223
223
|
return "stream-json";
|
|
224
224
|
}
|
|
225
|
-
if (transport === undefined || transport === "acp") {
|
|
226
|
-
return "acp";
|
|
227
|
-
}
|
|
228
225
|
return "acp";
|
|
229
226
|
}
|
package/src/baseline/index.ts
CHANGED
|
@@ -31,6 +31,8 @@ export interface BaselineRepairResult {
|
|
|
31
31
|
readonly usage?: Usage | undefined;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
type BaselineRepairOutput<T = void> = BaselineRepairResult | T;
|
|
35
|
+
|
|
34
36
|
export interface BaselineGateResult {
|
|
35
37
|
readonly policy: BaselinePolicy;
|
|
36
38
|
readonly status: "clean" | "repaired";
|
|
@@ -44,7 +46,7 @@ export interface RunBaselineGateOptions {
|
|
|
44
46
|
readonly commands: readonly VerificationCommand[];
|
|
45
47
|
readonly policy?: BaselinePolicy;
|
|
46
48
|
readonly commandTool?: CommandTool;
|
|
47
|
-
readonly repair?: (issues: readonly BaselineGateIssue[]) => Promise<
|
|
49
|
+
readonly repair?: (issues: readonly BaselineGateIssue[]) => Promise<BaselineRepairOutput>;
|
|
48
50
|
readonly monitor?: Pick<WorkflowMonitor, "stage" | "recordOutcome" | "recordFailure">;
|
|
49
51
|
readonly snapshotDir?: string;
|
|
50
52
|
readonly maxIterations?: number;
|
|
@@ -205,7 +207,7 @@ async function runBaselineGateInner(options: RunBaselineGateOptions): Promise<Ba
|
|
|
205
207
|
|
|
206
208
|
let usage: Usage | undefined;
|
|
207
209
|
const loop = await fixLoop<BaselineGateIssue>(
|
|
208
|
-
|
|
210
|
+
() => Promise.resolve(ok(latest.passed ? [] : [{ message: renderValidationFailure(latest.logs), fixable: true as const }])),
|
|
209
211
|
async (issues) => {
|
|
210
212
|
const repaired = await options.repair?.(issues);
|
|
211
213
|
usage = addUsage(usage, repaired?.usage);
|
package/src/cli/embedded.ts
CHANGED
|
@@ -37,6 +37,22 @@ export function canResolveOrca(scriptPath: string): boolean {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
function canResolveFrom(specifier: string, fromDir: string): boolean {
|
|
40
|
+
if (isBunExecutable()) {
|
|
41
|
+
const probe = Bun.spawnSync(
|
|
42
|
+
[
|
|
43
|
+
process.execPath,
|
|
44
|
+
"--eval",
|
|
45
|
+
`Bun.resolveSync(${JSON.stringify(specifier)}, ${JSON.stringify(fromDir)});`,
|
|
46
|
+
],
|
|
47
|
+
{
|
|
48
|
+
stdin: "ignore",
|
|
49
|
+
stdout: "ignore",
|
|
50
|
+
stderr: "ignore",
|
|
51
|
+
},
|
|
52
|
+
);
|
|
53
|
+
return probe.exitCode === 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
40
56
|
try {
|
|
41
57
|
Bun.resolveSync(specifier, fromDir);
|
|
42
58
|
return true;
|
|
@@ -46,6 +62,9 @@ function canResolveFrom(specifier: string, fromDir: string): boolean {
|
|
|
46
62
|
}
|
|
47
63
|
|
|
48
64
|
function hasProjectPackage(specifier: string, fromDir: string, includeSelfReference: boolean): boolean {
|
|
65
|
+
if (!canResolveFrom(specifier, fromDir)) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
49
68
|
for (let dir = fromDir; ; dir = dirname(dir)) {
|
|
50
69
|
if (existsSync(join(dir, "node_modules", ...specifier.split("/"), "package.json"))) {
|
|
51
70
|
return true;
|
package/src/cli/main.ts
CHANGED
|
@@ -304,8 +304,10 @@ function createCliReporter(): RunReporter {
|
|
|
304
304
|
return createRunReporter({
|
|
305
305
|
sinks: [
|
|
306
306
|
createRunPresenter({
|
|
307
|
-
isTTY: process.stderr.isTTY
|
|
308
|
-
writeDiagnostic: (message) =>
|
|
307
|
+
isTTY: process.stderr.isTTY,
|
|
308
|
+
writeDiagnostic: (message) => {
|
|
309
|
+
process.stderr.write(message);
|
|
310
|
+
},
|
|
309
311
|
}),
|
|
310
312
|
],
|
|
311
313
|
});
|
package/src/cli/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const ORCA_VERSION = "0.2.
|
|
1
|
+
export const ORCA_VERSION = "0.2.3";
|
package/src/monitor/index.ts
CHANGED
|
@@ -336,8 +336,10 @@ function defaultRunReporter(writeStatus: ((line: string) => void) | undefined):
|
|
|
336
336
|
return createRunReporter({
|
|
337
337
|
sinks: [
|
|
338
338
|
createRunPresenter({
|
|
339
|
-
isTTY: process.stderr.isTTY
|
|
340
|
-
writeDiagnostic: (text) =>
|
|
339
|
+
isTTY: process.stderr.isTTY,
|
|
340
|
+
writeDiagnostic: (text) => {
|
|
341
|
+
writer(text.endsWith("\n") ? text.slice(0, -1) : text);
|
|
342
|
+
},
|
|
341
343
|
}),
|
|
342
344
|
],
|
|
343
345
|
});
|
package/src/run-output/index.ts
CHANGED
|
@@ -186,7 +186,7 @@ export function createRunReporter(options: RunReporterOptions = {}): RunReporter
|
|
|
186
186
|
|
|
187
187
|
export function createRunPresenter(options: RunPresenterOptions = {}): RunEventSink {
|
|
188
188
|
const env = options.env ?? process.env;
|
|
189
|
-
const isTTY = options.isTTY ?? process.stderr.isTTY
|
|
189
|
+
const isTTY = options.isTTY ?? process.stderr.isTTY;
|
|
190
190
|
const writeDiagnostic =
|
|
191
191
|
options.writeDiagnostic ??
|
|
192
192
|
((text: string) => {
|
|
@@ -285,7 +285,7 @@ function formatCycleProgress(head: string, event: CycleProgressEvent): string {
|
|
|
285
285
|
|
|
286
286
|
function prefix(options: Pick<RunPresenterOptions, "env" | "isTTY"> = {}): string {
|
|
287
287
|
const env = options.env ?? process.env;
|
|
288
|
-
const isTTY = options.isTTY ?? process.stderr.isTTY
|
|
288
|
+
const isTTY = options.isTTY ?? process.stderr.isTTY;
|
|
289
289
|
if (isTTY && !env.NO_COLOR && !env.CI) {
|
|
290
290
|
return "\u001b[36morca\u001b[0m |";
|
|
291
291
|
}
|