@sovara/runner 0.1.2 → 0.3.4
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 +16 -22
- package/dist/claudeAgentSdk/wrapper.d.ts.map +1 -1
- package/dist/claudeAgentSdk/wrapper.js +8 -20
- package/dist/claudeAgentSdk/wrapper.js.map +1 -1
- package/dist/codeVersion.d.ts +19 -0
- package/dist/codeVersion.d.ts.map +1 -0
- package/dist/codeVersion.js +125 -0
- package/dist/codeVersion.js.map +1 -0
- package/dist/context.d.ts +3 -6
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +8 -6
- package/dist/context.js.map +1 -1
- package/dist/env.d.ts +1 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +4 -1
- package/dist/env.js.map +1 -1
- package/dist/projectContext.d.ts +3 -1
- package/dist/projectContext.d.ts.map +1 -1
- package/dist/projectContext.js +23 -17
- package/dist/projectContext.js.map +1 -1
- package/dist/runtimeClient.d.ts +3 -6
- package/dist/runtimeClient.d.ts.map +1 -1
- package/dist/runtimeClient.js +20 -31
- package/dist/runtimeClient.js.map +1 -1
- package/dist/serverLifecycle.d.ts.map +1 -1
- package/dist/serverLifecycle.js +1 -33
- package/dist/serverLifecycle.js.map +1 -1
- package/package.json +4 -3
- package/dist/claudeAgentSdk/parseHook.d.ts +0 -20
- package/dist/claudeAgentSdk/parseHook.d.ts.map +0 -1
- package/dist/claudeAgentSdk/parseHook.js +0 -160
- package/dist/claudeAgentSdk/parseHook.js.map +0 -1
- package/dist/user.d.ts +0 -11
- package/dist/user.d.ts.map +0 -1
- package/dist/user.js +0 -31
- package/dist/user.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @sovara/runner
|
|
2
2
|
|
|
3
|
-
TypeScript runner for [Sovara](https://
|
|
3
|
+
TypeScript runner for [Sovara](https://docs.sovara-labs.com) — wrap your script in a
|
|
4
4
|
single function and Sovara records every LLM call, tool invocation, and log
|
|
5
5
|
line into a structured run graph.
|
|
6
6
|
|
|
@@ -8,12 +8,14 @@ The runner is the TS counterpart to the Python `sovara` runner. It targets
|
|
|
8
8
|
the same Sovara server, produces the same node shapes, and is safe to mix
|
|
9
9
|
with Python runs in the same project.
|
|
10
10
|
|
|
11
|
+
Documentation: https://docs.sovara-labs.com
|
|
12
|
+
|
|
11
13
|
## Requirements
|
|
12
14
|
|
|
13
15
|
- Node 18 or newer (built-in `fetch`).
|
|
14
|
-
- A
|
|
15
|
-
|
|
16
|
-
- A Sovara user and project, configured once with `
|
|
16
|
+
- A reachable Sovara backend. For local use, open the Sovara desktop app.
|
|
17
|
+
Enterprise agent projects should use their project-specific connection flow.
|
|
18
|
+
- A Sovara user and project, configured once with `sovara init`.
|
|
17
19
|
|
|
18
20
|
## Install
|
|
19
21
|
|
|
@@ -93,9 +95,8 @@ completes.
|
|
|
93
95
|
```ts
|
|
94
96
|
export type WithSovaraRunOptions = {
|
|
95
97
|
name: string; // required run name
|
|
96
|
-
url?: string; // server URL (default:
|
|
98
|
+
url?: string; // server URL (default: http://127.0.0.1:5959)
|
|
97
99
|
captureLogs?: boolean; // default: true
|
|
98
|
-
user?: { fullName?: string; email?: string }; // overrides only
|
|
99
100
|
project?: { name?: string; description?: string };
|
|
100
101
|
};
|
|
101
102
|
|
|
@@ -110,11 +111,10 @@ whatever `fn` returns.
|
|
|
110
111
|
|
|
111
112
|
**Top-level call** (no parent run on the stack):
|
|
112
113
|
|
|
113
|
-
1. Health-checks the server
|
|
114
|
-
|
|
115
|
-
2. Resolves the active user. Fails hard with a `so-cli init` hint if
|
|
114
|
+
1. Health-checks the configured server and fails fast if it is unreachable.
|
|
115
|
+
2. Resolves the active user. Fails hard with a `sovara init` hint if
|
|
116
116
|
user setup is missing.
|
|
117
|
-
3. Resolves the project for `process.cwd()`. Fails hard with a `
|
|
117
|
+
3. Resolves the project for `process.cwd()`. Fails hard with a `sovara init`
|
|
118
118
|
hint if the cwd isn't part of a known Sovara project.
|
|
119
119
|
4. Registers the run, opens an SSE shutdown listener, runs `fn` inside
|
|
120
120
|
an `AsyncLocalStorage` scope, and deregisters in `finally`.
|
|
@@ -167,7 +167,7 @@ await withSovaraRun(
|
|
|
167
167
|
```
|
|
168
168
|
|
|
169
169
|
Overrides are only applied if user/project are present. They don't bypass
|
|
170
|
-
the `
|
|
170
|
+
the `sovara init` requirement — they just refine the values.
|
|
171
171
|
|
|
172
172
|
### `trace(fn, options?)`
|
|
173
173
|
|
|
@@ -285,33 +285,27 @@ for await (const message of handle.query("What did I install last?")) {
|
|
|
285
285
|
|
|
286
286
|
| Variable | Purpose | Default |
|
|
287
287
|
| ---------------------------- | -------------------------------------------------------------------------- | ----------------------- |
|
|
288
|
-
| `SOVARA_SERVER_URL` | Override the Sovara server URL | `http://127.0.0.1:5959` |
|
|
289
288
|
| `HOST` | Server host (used to compute the default URL) | `127.0.0.1` |
|
|
290
289
|
| `PYTHON_PORT` | Server port (used to compute the default URL) | `5959` |
|
|
291
290
|
| `SOVARA_CLAUDE_PROXY_ACTIVE` | Set automatically by `@sovara/runner/claude` to prevent nested proxy loops | unset |
|
|
292
291
|
|
|
293
292
|
### Server URL
|
|
294
293
|
|
|
295
|
-
|
|
294
|
+
The TypeScript runner uses the local backend by default. Pass `url` per call only when the caller explicitly manages a remote backend connection:
|
|
296
295
|
|
|
297
296
|
```ts
|
|
298
297
|
await withSovaraRun({ name: "demo", url: "http://localhost:6000" }, fn);
|
|
299
298
|
```
|
|
300
299
|
|
|
301
|
-
Or set `SOVARA_SERVER_URL` once for the process.
|
|
302
|
-
|
|
303
300
|
## Error messages
|
|
304
301
|
|
|
305
302
|
The runner fails fast for misconfiguration. Common ones:
|
|
306
303
|
|
|
307
|
-
- **`Sovara
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
- **``Sovara user setup is missing. Run `so-cli init --user-name <full-name> --user-email <email>` and retry.``**
|
|
311
|
-
Run the suggested `so-cli init` command.
|
|
304
|
+
- **`Sovara backend is not reachable at <url>. Open the Sovara desktop app or pass an explicit url to withSovaraRun for a managed remote run.`**
|
|
305
|
+
Open the desktop app for local runs, or pass `url` when the caller owns remote backend setup.
|
|
312
306
|
|
|
313
|
-
- **``Sovara project setup is missing for <cwd>. Run `
|
|
314
|
-
Run the suggested `
|
|
307
|
+
- **``Sovara project setup is missing for <cwd>. Run `sovara init --project-root "<cwd>" --project-name <project-name>` and retry.``**
|
|
308
|
+
Run the suggested `sovara init` command.
|
|
315
309
|
|
|
316
310
|
- **`Custom Claude Agent SDK transports are not supported yet under sovara.`**
|
|
317
311
|
Remove `options.transport` from your `query()` / `startup()` call.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../src/claudeAgentSdk/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,WAAW,EAErB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../src/claudeAgentSdk/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,WAAW,EAErB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAY9E,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,KAAK,SAAS,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC;AAC5F,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAElD,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAgPF,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAMnD;AAED,wBAAsB,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBpE"}
|
|
@@ -3,7 +3,6 @@ import { randomUUID } from "node:crypto";
|
|
|
3
3
|
import { getCurrentRunScope } from "../context.js";
|
|
4
4
|
import { warnOnce } from "../util/logger.js";
|
|
5
5
|
import { sanitizeStackTrace } from "../util/stackTrace.js";
|
|
6
|
-
import { publishClaudeSdkMessage } from "./parseHook.js";
|
|
7
6
|
const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com";
|
|
8
7
|
const UNSUPPORTED_CUSTOM_TRANSPORT_MESSAGE = "Custom Claude Agent SDK transports are not supported yet under sovara.";
|
|
9
8
|
const PROXY_LOOP_MESSAGE = "Claude Agent SDK ANTHROPIC_BASE_URL points at the Sovara Claude proxy itself. Nested Claude proxy configuration is not supported.";
|
|
@@ -54,7 +53,7 @@ function isDuplicateSdkTerminalError(error) {
|
|
|
54
53
|
return (error instanceof Error &&
|
|
55
54
|
error.message.startsWith("Claude Code returned an error result:"));
|
|
56
55
|
}
|
|
57
|
-
function wrapQueryResult(createSource, beforeRead
|
|
56
|
+
function wrapQueryResult(createSource, beforeRead) {
|
|
58
57
|
let source;
|
|
59
58
|
async function getSource() {
|
|
60
59
|
await beforeRead;
|
|
@@ -66,7 +65,7 @@ function wrapQueryResult(createSource, beforeRead, onMessage) {
|
|
|
66
65
|
const iterator = (async function* () {
|
|
67
66
|
const resolvedSource = await getSource();
|
|
68
67
|
if (!isAsyncIterable(resolvedSource)) {
|
|
69
|
-
warnOnce("claude-sdk-non-iterable-query", "[sovara] Claude SDK query() returned a non-iterable result; skipping
|
|
68
|
+
warnOnce("claude-sdk-non-iterable-query", "[sovara] Claude SDK query() returned a non-iterable result; skipping query wrapper instrumentation.");
|
|
70
69
|
return;
|
|
71
70
|
}
|
|
72
71
|
let yieldedSdkErrorResult = false;
|
|
@@ -75,7 +74,6 @@ function wrapQueryResult(createSource, beforeRead, onMessage) {
|
|
|
75
74
|
if (isSdkErrorResult(message)) {
|
|
76
75
|
yieldedSdkErrorResult = true;
|
|
77
76
|
}
|
|
78
|
-
await onMessage(message);
|
|
79
77
|
yield message;
|
|
80
78
|
}
|
|
81
79
|
}
|
|
@@ -152,32 +150,22 @@ function instrumentQuery(input, scope) {
|
|
|
152
150
|
return wrapQueryResult(() => claudeQuery({
|
|
153
151
|
...input,
|
|
154
152
|
options: nextOptions,
|
|
155
|
-
}), registrationPromise
|
|
156
|
-
await publishClaudeSdkMessage(message, {
|
|
157
|
-
scope,
|
|
158
|
-
stackTrace: sanitizeStackTrace(new Error().stack),
|
|
159
|
-
});
|
|
160
|
-
});
|
|
153
|
+
}), registrationPromise);
|
|
161
154
|
}
|
|
162
|
-
function wrapWarmQueryResult(source
|
|
155
|
+
function wrapWarmQueryResult(source) {
|
|
163
156
|
if (!isAsyncIterable(source)) {
|
|
164
157
|
return source;
|
|
165
158
|
}
|
|
166
|
-
return wrapQueryResult(() => source, Promise.resolve()
|
|
167
|
-
await publishClaudeSdkMessage(message, {
|
|
168
|
-
scope,
|
|
169
|
-
stackTrace: sanitizeStackTrace(new Error().stack),
|
|
170
|
-
});
|
|
171
|
-
});
|
|
159
|
+
return wrapQueryResult(() => source, Promise.resolve());
|
|
172
160
|
}
|
|
173
|
-
function patchWarmQueryHandle(warmQueryHandle
|
|
161
|
+
function patchWarmQueryHandle(warmQueryHandle) {
|
|
174
162
|
if (!isObject(warmQueryHandle) || typeof warmQueryHandle.query !== "function") {
|
|
175
163
|
return warmQueryHandle;
|
|
176
164
|
}
|
|
177
165
|
const originalQuery = warmQueryHandle.query.bind(warmQueryHandle);
|
|
178
166
|
const patchedWarmQuery = (prompt) => {
|
|
179
167
|
const rawResult = originalQuery(prompt);
|
|
180
|
-
return wrapWarmQueryResult(rawResult
|
|
168
|
+
return wrapWarmQueryResult(rawResult);
|
|
181
169
|
};
|
|
182
170
|
try {
|
|
183
171
|
warmQueryHandle.query = patchedWarmQuery;
|
|
@@ -214,6 +202,6 @@ export async function startup(params) {
|
|
|
214
202
|
options: nextOptions,
|
|
215
203
|
});
|
|
216
204
|
await registrationPromise;
|
|
217
|
-
return patchWarmQueryHandle(warm
|
|
205
|
+
return patchWarmQueryHandle(warm);
|
|
218
206
|
}
|
|
219
207
|
//# sourceMappingURL=wrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/claudeAgentSdk/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,WAAW,EACpB,OAAO,IAAI,aAAa,GACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/claudeAgentSdk/wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type CodeVersion = {
|
|
2
|
+
type: "git";
|
|
3
|
+
available: boolean;
|
|
4
|
+
status: "clean" | "dirty" | "missing_project_root" | "missing_project_config" | "git_unavailable" | "not_git_repo" | "no_commit";
|
|
5
|
+
repo_root: string | null;
|
|
6
|
+
commit_sha: string | null;
|
|
7
|
+
short_commit_sha: string | null;
|
|
8
|
+
branch: string | null;
|
|
9
|
+
dirty: boolean | null;
|
|
10
|
+
remote_url: string | null;
|
|
11
|
+
web_url: string | null;
|
|
12
|
+
commit_url: string | null;
|
|
13
|
+
};
|
|
14
|
+
export declare function normalizeGitRemoteURL(remoteURL: string | null | undefined): string | null;
|
|
15
|
+
export declare function buildCommitURL(webURL: string | null, commitSHA: string | null): string | null;
|
|
16
|
+
export declare function collectCodeVersion(projectRoot: string | null | undefined): CodeVersion;
|
|
17
|
+
export declare function findProjectRoot(startPath: string): string | null;
|
|
18
|
+
export declare function readProjectId(projectRoot: string): string;
|
|
19
|
+
//# sourceMappingURL=codeVersion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeVersion.d.ts","sourceRoot":"","sources":["../src/codeVersion.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EACF,OAAO,GACP,OAAO,GACP,sBAAsB,GACtB,wBAAwB,GACxB,iBAAiB,GACjB,cAAc,GACd,WAAW,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AA4BF,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CA6BzF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAiB7F;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAqCtF;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYhE;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
const GIT_TIMEOUT_MS = 2000;
|
|
5
|
+
const emptyCodeVersion = (status) => ({
|
|
6
|
+
type: "git",
|
|
7
|
+
available: false,
|
|
8
|
+
status,
|
|
9
|
+
repo_root: null,
|
|
10
|
+
commit_sha: null,
|
|
11
|
+
short_commit_sha: null,
|
|
12
|
+
branch: null,
|
|
13
|
+
dirty: null,
|
|
14
|
+
remote_url: null,
|
|
15
|
+
web_url: null,
|
|
16
|
+
commit_url: null,
|
|
17
|
+
});
|
|
18
|
+
function runGit(cwd, args) {
|
|
19
|
+
const result = spawnSync("git", ["-C", cwd, ...args], {
|
|
20
|
+
encoding: "utf8",
|
|
21
|
+
timeout: GIT_TIMEOUT_MS,
|
|
22
|
+
});
|
|
23
|
+
if (result.error || result.status !== 0) {
|
|
24
|
+
return { ok: false, stdout: "" };
|
|
25
|
+
}
|
|
26
|
+
return { ok: true, stdout: result.stdout.trim() };
|
|
27
|
+
}
|
|
28
|
+
export function normalizeGitRemoteURL(remoteURL) {
|
|
29
|
+
const remote = remoteURL?.trim();
|
|
30
|
+
if (!remote) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const ssh = /^(?:ssh:\/\/)?git@([^/:]+)(?::|\/)(.+)$/.exec(remote);
|
|
34
|
+
if (ssh) {
|
|
35
|
+
const host = ssh[1];
|
|
36
|
+
const path = ssh[2].replace(/\/+$/, "").replace(/\.git$/, "");
|
|
37
|
+
return path ? `https://${host}/${path}` : null;
|
|
38
|
+
}
|
|
39
|
+
let parsed;
|
|
40
|
+
try {
|
|
41
|
+
parsed = new URL(remote);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const path = parsed.pathname.replace(/\/+$/, "").replace(/\.git$/, "");
|
|
50
|
+
if (!parsed.hostname || !path || path === "/") {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const port = parsed.port ? `:${parsed.port}` : "";
|
|
54
|
+
return `https://${parsed.hostname}${port}${path}`;
|
|
55
|
+
}
|
|
56
|
+
export function buildCommitURL(webURL, commitSHA) {
|
|
57
|
+
if (!webURL || !commitSHA) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
let hostname = "";
|
|
61
|
+
try {
|
|
62
|
+
hostname = new URL(webURL).hostname;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
if (hostname === "github.com" || hostname.endsWith(".github.com")) {
|
|
68
|
+
return `${webURL}/commit/${commitSHA}`;
|
|
69
|
+
}
|
|
70
|
+
if (hostname === "gitlab.com" || hostname.endsWith(".gitlab.com")) {
|
|
71
|
+
return `${webURL}/-/commit/${commitSHA}`;
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
export function collectCodeVersion(projectRoot) {
|
|
76
|
+
if (!projectRoot) {
|
|
77
|
+
return emptyCodeVersion("missing_project_root");
|
|
78
|
+
}
|
|
79
|
+
const repo = runGit(projectRoot, ["rev-parse", "--show-toplevel"]);
|
|
80
|
+
if (!repo.ok || !repo.stdout) {
|
|
81
|
+
return emptyCodeVersion("not_git_repo");
|
|
82
|
+
}
|
|
83
|
+
const commit = runGit(repo.stdout, ["rev-parse", "HEAD"]);
|
|
84
|
+
if (!commit.ok || !commit.stdout) {
|
|
85
|
+
return {
|
|
86
|
+
...emptyCodeVersion("no_commit"),
|
|
87
|
+
repo_root: repo.stdout,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const branch = runGit(repo.stdout, ["branch", "--show-current"]);
|
|
91
|
+
const status = runGit(repo.stdout, ["status", "--porcelain", "--untracked-files=all"]);
|
|
92
|
+
const remote = runGit(repo.stdout, ["remote", "get-url", "origin"]);
|
|
93
|
+
const dirty = status.ok ? status.stdout.length > 0 : null;
|
|
94
|
+
const webURL = normalizeGitRemoteURL(remote.ok ? remote.stdout : null);
|
|
95
|
+
return {
|
|
96
|
+
type: "git",
|
|
97
|
+
available: true,
|
|
98
|
+
status: dirty ? "dirty" : "clean",
|
|
99
|
+
repo_root: repo.stdout,
|
|
100
|
+
commit_sha: commit.stdout,
|
|
101
|
+
short_commit_sha: commit.stdout.slice(0, 7),
|
|
102
|
+
branch: branch.ok && branch.stdout ? branch.stdout : null,
|
|
103
|
+
dirty,
|
|
104
|
+
remote_url: webURL,
|
|
105
|
+
web_url: webURL,
|
|
106
|
+
commit_url: buildCommitURL(webURL, commit.stdout),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export function findProjectRoot(startPath) {
|
|
110
|
+
let current = resolve(startPath);
|
|
111
|
+
while (true) {
|
|
112
|
+
if (existsSync(join(current, ".sovara", ".project_id"))) {
|
|
113
|
+
return current;
|
|
114
|
+
}
|
|
115
|
+
const parent = dirname(current);
|
|
116
|
+
if (parent === current) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
current = parent;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export function readProjectId(projectRoot) {
|
|
123
|
+
return readFileSync(join(projectRoot, ".sovara", ".project_id"), "utf8").trim();
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=codeVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeVersion.js","sourceRoot":"","sources":["../src/codeVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,cAAc,GAAG,IAAI,CAAC;AAuB5B,MAAM,gBAAgB,GAAG,CAAC,MAA6B,EAAe,EAAE,CAAC,CAAC;IACxE,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,KAAK;IAChB,MAAM;IACN,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,IAAI;IACtB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,SAAS,MAAM,CAAC,GAAW,EAAE,IAAc;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;QACpD,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAoC;IACxE,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,yCAAyC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAED,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,OAAO,WAAW,MAAM,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,SAAwB;IAC5E,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClE,OAAO,GAAG,MAAM,WAAW,SAAS,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClE,OAAO,GAAG,MAAM,aAAa,SAAS,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAsC;IACvE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,OAAO,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO;YACL,GAAG,gBAAgB,CAAC,WAAW,CAAC;YAChC,SAAS,EAAE,IAAI,CAAC,MAAM;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvE,OAAO;QACL,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QACjC,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACzD,KAAK;QACL,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAClF,CAAC"}
|
package/dist/context.d.ts
CHANGED
|
@@ -3,10 +3,6 @@ export type WithSovaraRunOptions = {
|
|
|
3
3
|
name: string;
|
|
4
4
|
url?: string;
|
|
5
5
|
captureLogs?: boolean;
|
|
6
|
-
user?: {
|
|
7
|
-
fullName?: string;
|
|
8
|
-
email?: string;
|
|
9
|
-
};
|
|
10
6
|
project?: {
|
|
11
7
|
name?: string;
|
|
12
8
|
description?: string;
|
|
@@ -14,10 +10,11 @@ export type WithSovaraRunOptions = {
|
|
|
14
10
|
__testing?: {
|
|
15
11
|
client?: RunScopeClient;
|
|
16
12
|
skipLifecycle?: boolean;
|
|
13
|
+
requireProjectConfig?: boolean;
|
|
17
14
|
};
|
|
18
15
|
};
|
|
19
|
-
type CoreRunScopeClientMethods = "registerSubrun" | "deregisterRun" | "updateRunLog" | "
|
|
20
|
-
type ClaudeRunScopeClientMethods = "registerClaudeProxyClient"
|
|
16
|
+
type CoreRunScopeClientMethods = "registerSubrun" | "deregisterRun" | "updateRunLog" | "getProject" | "registerRun" | "prepareCall" | "recordOutput" | "recordException";
|
|
17
|
+
type ClaudeRunScopeClientMethods = "registerClaudeProxyClient";
|
|
21
18
|
type PriorsRunScopeClientMethods = "queryPriors" | "retrievePriors";
|
|
22
19
|
type AnnotationRunScopeClientMethods = "requestAnnotationEvaluation";
|
|
23
20
|
export type RunScopeClient = Pick<RuntimeClient, CoreRunScopeClientMethods> & Partial<Pick<RuntimeClient, ClaudeRunScopeClientMethods | PriorsRunScopeClientMethods | AnnotationRunScopeClientMethods>>;
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,KAAK,yBAAyB,GAC1B,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,YAAY,GACZ,aAAa,GACb,aAAa,GACb,cAAc,GACd,iBAAiB,CAAC;AAEtB,KAAK,2BAA2B,GAAG,2BAA2B,CAAC;AAE/D,KAAK,2BAA2B,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEpE,KAAK,+BAA+B,GAAG,6BAA6B,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,yBAAyB,CAAC,GACzE,OAAO,CACL,IAAI,CACF,aAAa,EACb,2BAA2B,GAAG,2BAA2B,GAAG,+BAA+B,CAC5F,CACF,CAAC;AAEJ,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC;AAWF,wBAAgB,kBAAkB,IAAI,QAAQ,GAAG,SAAS,CAEzD;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,KAAK,EAAE,MAAM,GAAG,oBAAoB,EACpC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CA8FZ"}
|
package/dist/context.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import { collectCodeVersion } from "./codeVersion.js";
|
|
2
3
|
import { readRunnerConfig } from "./env.js";
|
|
3
4
|
import { resolveProjectContext } from "./projectContext.js";
|
|
4
5
|
import { installRunLogCapture } from "./runLogCapture.js";
|
|
5
6
|
import { RuntimeClient } from "./runtimeClient.js";
|
|
6
7
|
import { ensureServerRunning } from "./serverLifecycle.js";
|
|
7
8
|
import { startRunSseListener } from "./sseListener.js";
|
|
8
|
-
import { resolveActiveUser } from "./user.js";
|
|
9
9
|
import { ensureMcpPatchInstalled } from "./mcpPatch.js";
|
|
10
10
|
const scopeStorage = new AsyncLocalStorage();
|
|
11
11
|
function normalizeOptions(input) {
|
|
@@ -46,8 +46,12 @@ export async function withSovaraRun(input, fn) {
|
|
|
46
46
|
await ensureServerRunning(url);
|
|
47
47
|
}
|
|
48
48
|
const client = options.__testing?.client ?? new RuntimeClient(url);
|
|
49
|
-
const
|
|
50
|
-
|
|
49
|
+
const project = await resolveProjectContext(client, config.cwd, options.project, {
|
|
50
|
+
allowMissingProjectConfig: Boolean(options.__testing?.client
|
|
51
|
+
&& skipLifecycle
|
|
52
|
+
&& !options.__testing.requireProjectConfig),
|
|
53
|
+
});
|
|
54
|
+
const codeVersion = collectCodeVersion(project.projectRoot);
|
|
51
55
|
const registration = await client.registerRun({
|
|
52
56
|
name: options.name,
|
|
53
57
|
cwd: config.cwd,
|
|
@@ -57,9 +61,7 @@ export async function withSovaraRun(input, fn) {
|
|
|
57
61
|
projectName: project.projectName,
|
|
58
62
|
projectDescription: project.projectDescription,
|
|
59
63
|
projectRoot: project.projectRoot,
|
|
60
|
-
|
|
61
|
-
userFullName: user.fullName,
|
|
62
|
-
userEmail: user.email,
|
|
64
|
+
codeVersion,
|
|
63
65
|
});
|
|
64
66
|
const scope = {
|
|
65
67
|
runId: registration.runId,
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
CHANGED
package/dist/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,YAAY,CAU/C"}
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,gBAAgB,IAAI,YAAY,CAU/C"}
|
package/dist/env.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { DEFAULT_SERVER_URL } from "./constants.js";
|
|
2
|
+
export function resolveServerURL() {
|
|
3
|
+
return DEFAULT_SERVER_URL;
|
|
4
|
+
}
|
|
2
5
|
export function readRunnerConfig() {
|
|
3
6
|
const environment = Object.fromEntries(Object.entries(process.env).filter(([, value]) => typeof value === "string"));
|
|
4
7
|
return {
|
|
5
8
|
cwd: process.cwd(),
|
|
6
9
|
environment,
|
|
7
|
-
url:
|
|
10
|
+
url: resolveServerURL(),
|
|
8
11
|
};
|
|
9
12
|
}
|
|
10
13
|
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAQpD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CACpC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CACnD,CAAC;IAE5B,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,WAAW;QACX,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAQpD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CACpC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CACnD,CAAC;IAE5B,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,WAAW;QACX,GAAG,EAAE,gBAAgB,EAAE;KACxB,CAAC;AACJ,CAAC"}
|
package/dist/projectContext.d.ts
CHANGED
|
@@ -5,8 +5,10 @@ export type ProjectContext = {
|
|
|
5
5
|
projectDescription: string;
|
|
6
6
|
projectRoot: string;
|
|
7
7
|
};
|
|
8
|
-
export declare function resolveProjectContext(client: Pick<RuntimeClient, "
|
|
8
|
+
export declare function resolveProjectContext(client: Pick<RuntimeClient, "getProject">, cwd: string, overrides?: {
|
|
9
9
|
name?: string;
|
|
10
10
|
description?: string;
|
|
11
|
+
}, options?: {
|
|
12
|
+
allowMissingProjectConfig?: boolean;
|
|
11
13
|
}): Promise<ProjectContext>;
|
|
12
14
|
//# sourceMappingURL=projectContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectContext.d.ts","sourceRoot":"","sources":["../src/projectContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projectContext.d.ts","sourceRoot":"","sources":["../src/projectContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAMF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACnD,OAAO,CAAC,EAAE;IAAE,yBAAyB,CAAC,EAAE,OAAO,CAAA;CAAE,GAChD,OAAO,CAAC,cAAc,CAAC,CA+BzB"}
|
package/dist/projectContext.js
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
|
+
import { basename } from "node:path";
|
|
2
|
+
import { findProjectRoot, readProjectId } from "./codeVersion.js";
|
|
1
3
|
function suggestedInitCommand(projectRoot) {
|
|
2
|
-
return `
|
|
4
|
+
return `sovara init --project-root ${JSON.stringify(projectRoot)} --project-name <project-name>`;
|
|
3
5
|
}
|
|
4
|
-
export async function resolveProjectContext(client, cwd, overrides) {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
export async function resolveProjectContext(client, cwd, overrides, options) {
|
|
7
|
+
const projectRoot = findProjectRoot(cwd);
|
|
8
|
+
if (!projectRoot) {
|
|
9
|
+
if (options?.allowMissingProjectConfig) {
|
|
10
|
+
return {
|
|
11
|
+
projectId: "project-1",
|
|
12
|
+
projectName: overrides?.name ?? "Project",
|
|
13
|
+
projectDescription: overrides?.description ?? "",
|
|
14
|
+
projectRoot: cwd,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
8
17
|
throw new Error(`Sovara project setup is missing for ${cwd}. Run \`${suggestedInitCommand(cwd)}\` and retry.`);
|
|
9
18
|
}
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
throw new Error("Invalid project payload from server.");
|
|
17
|
-
}
|
|
19
|
+
const projectId = readProjectId(projectRoot);
|
|
20
|
+
const existingProject = await client.getProject(projectId);
|
|
21
|
+
const existingName = typeof existingProject?.name === "string" && existingProject.name
|
|
22
|
+
? existingProject.name
|
|
23
|
+
: null;
|
|
24
|
+
const existingDescription = typeof existingProject?.description === "string" ? existingProject.description : "";
|
|
18
25
|
return {
|
|
19
|
-
projectId
|
|
20
|
-
projectName: overrides?.name ??
|
|
21
|
-
projectDescription: overrides?.description ??
|
|
22
|
-
(typeof project.description === "string" ? project.description : ""),
|
|
26
|
+
projectId,
|
|
27
|
+
projectName: overrides?.name ?? existingName ?? (basename(projectRoot) || "Project"),
|
|
28
|
+
projectDescription: overrides?.description ?? existingDescription,
|
|
23
29
|
projectRoot,
|
|
24
30
|
};
|
|
25
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectContext.js","sourceRoot":"","sources":["../src/projectContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projectContext.js","sourceRoot":"","sources":["../src/projectContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUlE,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,OAAO,8BAA8B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,gCAAgC,CAAC;AACnG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAyC,EACzC,GAAW,EACX,SAAmD,EACnD,OAAiD;IAEjD,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,OAAO,EAAE,yBAAyB,EAAE,CAAC;YACvC,OAAO;gBACL,SAAS,EAAE,WAAW;gBACtB,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,SAAS;gBACzC,kBAAkB,EAAE,SAAS,EAAE,WAAW,IAAI,EAAE;gBAChD,WAAW,EAAE,GAAG;aACjB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CACb,uCAAuC,GAAG,WAAW,oBAAoB,CAAC,GAAG,CAAC,eAAe,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,YAAY,GAChB,OAAO,eAAe,EAAE,IAAI,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI;QAC/D,CAAC,CAAC,eAAe,CAAC,IAAI;QACtB,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,mBAAmB,GACvB,OAAO,eAAe,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,OAAO;QACL,SAAS;QACT,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;QACpF,kBAAkB,EAAE,SAAS,EAAE,WAAW,IAAI,mBAAmB;QACjE,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
package/dist/runtimeClient.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CodeVersion } from "./codeVersion.js";
|
|
1
2
|
export declare class RuntimeClientError extends Error {
|
|
2
3
|
readonly status: number;
|
|
3
4
|
readonly body: unknown;
|
|
@@ -12,9 +13,7 @@ export type RegisterRunRequest = {
|
|
|
12
13
|
projectName: string;
|
|
13
14
|
projectDescription: string;
|
|
14
15
|
projectRoot: string;
|
|
15
|
-
|
|
16
|
-
userFullName: string;
|
|
17
|
-
userEmail: string;
|
|
16
|
+
codeVersion: CodeVersion;
|
|
18
17
|
};
|
|
19
18
|
export type RegisterRunResponse = {
|
|
20
19
|
runId: string;
|
|
@@ -66,7 +65,7 @@ export declare class RuntimeClient {
|
|
|
66
65
|
private readonly baseUrl;
|
|
67
66
|
private readonly fetchFn;
|
|
68
67
|
constructor(baseUrl: string, fetchFn?: typeof fetch);
|
|
69
|
-
|
|
68
|
+
getProject(projectId: string): Promise<Record<string, unknown> | null>;
|
|
70
69
|
resolveProjectLocation(location: string): Promise<Record<string, unknown>>;
|
|
71
70
|
registerRun(request: RegisterRunRequest): Promise<RegisterRunResponse>;
|
|
72
71
|
registerSubrun(request: RegisterSubrunRequest): Promise<RegisterSubrunResponse>;
|
|
@@ -99,8 +98,6 @@ export declare class RuntimeClient {
|
|
|
99
98
|
recordOutput(request: FinalizeCallRequest): Promise<void>;
|
|
100
99
|
recordException(request: FinalizeCallRequest): Promise<void>;
|
|
101
100
|
registerClaudeProxyClient(runId: string, clientId: string, upstreamBaseUrl: string, stackTrace: string | null): Promise<void>;
|
|
102
|
-
registerClaudeSdkToolUse(runId: string, toolUseId: string, toolName: string, toolInput: unknown, stackTrace: string | null): Promise<void>;
|
|
103
|
-
finalizeClaudeSdkToolResult(runId: string, toolUseId: string, toolResult: unknown, isError: boolean): Promise<void>;
|
|
104
101
|
private request;
|
|
105
102
|
}
|
|
106
103
|
//# sourceMappingURL=runtimeClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeClient.d.ts","sourceRoot":"","sources":["../src/runtimeClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtimeClient.d.ts","sourceRoot":"","sources":["../src/runtimeClient.ts"],"names":[],"mappings":"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"}
|
package/dist/runtimeClient.js
CHANGED
|
@@ -23,11 +23,21 @@ export class RuntimeClient {
|
|
|
23
23
|
const maybeOriginal = globalThis[Symbol.for("sovara.originalFetch")];
|
|
24
24
|
this.fetchFn = typeof maybeOriginal === "function" ? maybeOriginal : fetch;
|
|
25
25
|
}
|
|
26
|
-
async
|
|
27
|
-
|
|
28
|
-
method: "GET"
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
async getProject(projectId) {
|
|
27
|
+
try {
|
|
28
|
+
const payload = await this.request(`/ui/projects/${encodeURIComponent(projectId)}`, { method: "GET" });
|
|
29
|
+
if (!payload || typeof payload !== "object") {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const data = payload;
|
|
33
|
+
if (data.project && typeof data.project === "object") {
|
|
34
|
+
return data.project;
|
|
35
|
+
}
|
|
36
|
+
return typeof data.project_id === "string" ? data : null;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
31
41
|
}
|
|
32
42
|
resolveProjectLocation(location) {
|
|
33
43
|
return this.request("/ui/projects/resolve-location", {
|
|
@@ -47,9 +57,7 @@ export class RuntimeClient {
|
|
|
47
57
|
project_name: request.projectName,
|
|
48
58
|
project_description: request.projectDescription,
|
|
49
59
|
project_root: request.projectRoot,
|
|
50
|
-
|
|
51
|
-
user_full_name: request.userFullName,
|
|
52
|
-
user_email: request.userEmail,
|
|
60
|
+
code_version: request.codeVersion,
|
|
53
61
|
}),
|
|
54
62
|
});
|
|
55
63
|
return { runId: payload.run_id };
|
|
@@ -165,34 +173,15 @@ export class RuntimeClient {
|
|
|
165
173
|
}),
|
|
166
174
|
});
|
|
167
175
|
}
|
|
168
|
-
async registerClaudeSdkToolUse(runId, toolUseId, toolName, toolInput, stackTrace) {
|
|
169
|
-
await this.request("/internal/runner/claude-sdk/tool-use", {
|
|
170
|
-
method: "POST",
|
|
171
|
-
body: toJsonBody({
|
|
172
|
-
run_id: runId,
|
|
173
|
-
tool_use_id: toolUseId,
|
|
174
|
-
tool_name: toolName,
|
|
175
|
-
tool_input: toolInput,
|
|
176
|
-
stack_trace: stackTrace,
|
|
177
|
-
}),
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
async finalizeClaudeSdkToolResult(runId, toolUseId, toolResult, isError) {
|
|
181
|
-
await this.request("/internal/runner/claude-sdk/tool-result", {
|
|
182
|
-
method: "POST",
|
|
183
|
-
body: toJsonBody({
|
|
184
|
-
run_id: runId,
|
|
185
|
-
tool_use_id: toolUseId,
|
|
186
|
-
tool_result: toolResult,
|
|
187
|
-
is_error: isError,
|
|
188
|
-
}),
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
176
|
async request(path, init) {
|
|
177
|
+
const agentToken = typeof process !== "undefined" ? process.env.SOVARA_AGENT_TOKEN?.trim() : "";
|
|
178
|
+
const accessToken = typeof process !== "undefined" ? process.env.SOVARA_ACCESS_TOKEN?.trim() : "";
|
|
192
179
|
const response = await this.fetchFn(`${this.baseUrl}${path}`, {
|
|
193
180
|
...init,
|
|
194
181
|
headers: {
|
|
195
182
|
"content-type": "application/json",
|
|
183
|
+
...(agentToken ? { "x-sovara-agent-token": agentToken } : {}),
|
|
184
|
+
...(accessToken ? { authorization: `Bearer ${accessToken}` } : {}),
|
|
196
185
|
...(init.headers ?? {}),
|
|
197
186
|
},
|
|
198
187
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeClient.js","sourceRoot":"","sources":["../src/runtimeClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtimeClient.js","sourceRoot":"","sources":["../src/runtimeClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverLifecycle.d.ts","sourceRoot":"","sources":["../src/serverLifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serverLifecycle.d.ts","sourceRoot":"","sources":["../src/serverLifecycle.ts"],"names":[],"mappings":"AAuBA,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpE"}
|
package/dist/serverLifecycle.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { SERVER_BOOT_POLL_INTERVAL_MS, SERVER_BOOT_TIMEOUT_MS, } from "./constants.js";
|
|
3
|
-
async function wait(ms) {
|
|
4
|
-
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
5
|
-
}
|
|
6
1
|
function getFetch() {
|
|
7
2
|
const maybeOriginal = globalThis[Symbol.for("sovara.originalFetch")];
|
|
8
3
|
if (typeof maybeOriginal === "function") {
|
|
@@ -23,37 +18,10 @@ async function isHealthy(url) {
|
|
|
23
18
|
return false;
|
|
24
19
|
}
|
|
25
20
|
}
|
|
26
|
-
async function spawnServer() {
|
|
27
|
-
await new Promise((resolve, reject) => {
|
|
28
|
-
const child = spawn("so-cli", ["server", "start"], {
|
|
29
|
-
detached: true,
|
|
30
|
-
stdio: "ignore",
|
|
31
|
-
});
|
|
32
|
-
child.once("error", (error) => reject(error));
|
|
33
|
-
child.once("spawn", () => resolve());
|
|
34
|
-
child.unref();
|
|
35
|
-
}).catch((error) => {
|
|
36
|
-
const code = typeof error === "object" && error !== null && "code" in error
|
|
37
|
-
? String(error.code)
|
|
38
|
-
: "";
|
|
39
|
-
if (code === "ENOENT") {
|
|
40
|
-
throw new Error("Sovara server is not running and 'so-cli' was not found. Start it manually with 'so-cli server start' or install Sovara.");
|
|
41
|
-
}
|
|
42
|
-
throw error;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
21
|
export async function ensureServerRunning(url) {
|
|
46
22
|
if (await isHealthy(url)) {
|
|
47
23
|
return;
|
|
48
24
|
}
|
|
49
|
-
|
|
50
|
-
const started = Date.now();
|
|
51
|
-
while (Date.now() - started <= SERVER_BOOT_TIMEOUT_MS) {
|
|
52
|
-
if (await isHealthy(url)) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
await wait(SERVER_BOOT_POLL_INTERVAL_MS);
|
|
56
|
-
}
|
|
57
|
-
throw new Error("Server not ready");
|
|
25
|
+
throw new Error(`Sovara backend is not reachable at ${url}. Open the Sovara desktop app or pass an explicit url to withSovaraRun for a managed remote run.`);
|
|
58
26
|
}
|
|
59
27
|
//# sourceMappingURL=serverLifecycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverLifecycle.js","sourceRoot":"","sources":["../src/serverLifecycle.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"serverLifecycle.js","sourceRoot":"","sources":["../src/serverLifecycle.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ;IACf,MAAM,aAAa,GAAI,UAAyC,CAC9D,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CACnC,CAAC;IACF,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;QACxC,OAAO,aAA6B,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0C,CAAC;QACjF,OAAO,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW;IACnD,IAAI,MAAM,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sCAAsC,GAAG,kGAAkG,CAC5I,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sovara/runner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "TypeScript runner for Sovara — wrap a script in a single function to record every LLM call, tool invocation, and log line into a structured run graph.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "SovaraLabs",
|
|
7
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://docs.sovara-labs.com",
|
|
8
8
|
"bugs": "https://github.com/SovaraLabs/sovara/issues",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
@@ -65,7 +65,8 @@
|
|
|
65
65
|
"@anthropic-ai/claude-agent-sdk": "^0.2.132",
|
|
66
66
|
"@types/node": "^22.10.2",
|
|
67
67
|
"typescript": "^5.6.3",
|
|
68
|
-
"
|
|
68
|
+
"vite": "^7.3.1",
|
|
69
|
+
"vitest": "^4.1.1"
|
|
69
70
|
},
|
|
70
71
|
"dependencies": {
|
|
71
72
|
"flat": "^6.0.1",
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { type RunScope } from "../context.js";
|
|
2
|
-
type ToolUseBlock = {
|
|
3
|
-
id: string;
|
|
4
|
-
name: string;
|
|
5
|
-
input: unknown;
|
|
6
|
-
};
|
|
7
|
-
type ToolResultBlock = {
|
|
8
|
-
toolUseId: string;
|
|
9
|
-
content: unknown;
|
|
10
|
-
isError: boolean;
|
|
11
|
-
};
|
|
12
|
-
export declare function extractClaudeSdkToolUseBlocks(message: unknown): ToolUseBlock[];
|
|
13
|
-
export declare function extractClaudeSdkToolResultBlocks(message: unknown): ToolResultBlock[];
|
|
14
|
-
export declare function normalizeToolResultContent(content: unknown): unknown;
|
|
15
|
-
export declare function publishClaudeSdkMessage(message: unknown, options?: {
|
|
16
|
-
scope?: RunScope;
|
|
17
|
-
stackTrace?: string | null;
|
|
18
|
-
}): Promise<void>;
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=parseHook.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseHook.d.ts","sourceRoot":"","sources":["../../src/claudeAgentSdk/parseHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIlE,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AA0DF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,EAAE,CAoB9E;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,EAAE,CAyDpF;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEpE;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACzD,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { getCurrentRunScope } from "../context.js";
|
|
2
|
-
import { warnOnce } from "../util/logger.js";
|
|
3
|
-
import { sanitizeStackTrace } from "../util/stackTrace.js";
|
|
4
|
-
function isObject(value) {
|
|
5
|
-
return !!value && typeof value === "object";
|
|
6
|
-
}
|
|
7
|
-
function toContentBlocks(message) {
|
|
8
|
-
if (!isObject(message)) {
|
|
9
|
-
return [];
|
|
10
|
-
}
|
|
11
|
-
const outerContent = message.content;
|
|
12
|
-
if (Array.isArray(outerContent)) {
|
|
13
|
-
return outerContent;
|
|
14
|
-
}
|
|
15
|
-
const wrappedMessage = message.message;
|
|
16
|
-
if (isObject(wrappedMessage) && Array.isArray(wrappedMessage.content)) {
|
|
17
|
-
return wrappedMessage.content;
|
|
18
|
-
}
|
|
19
|
-
return [];
|
|
20
|
-
}
|
|
21
|
-
function extractTopLevelToolUse(message) {
|
|
22
|
-
if (!isObject(message) || message.type !== "tool_use") {
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
const id = typeof message.id === "string" ? message.id : "";
|
|
26
|
-
const name = typeof message.name === "string" ? message.name : "";
|
|
27
|
-
if (!id || !name) {
|
|
28
|
-
return [];
|
|
29
|
-
}
|
|
30
|
-
return [{ id, name, input: message.input }];
|
|
31
|
-
}
|
|
32
|
-
function extractTopLevelToolResult(message) {
|
|
33
|
-
if (!isObject(message) || message.type !== "tool_result") {
|
|
34
|
-
return [];
|
|
35
|
-
}
|
|
36
|
-
const toolUseId = typeof message.tool_use_id === "string"
|
|
37
|
-
? message.tool_use_id
|
|
38
|
-
: typeof message.toolUseId === "string"
|
|
39
|
-
? message.toolUseId
|
|
40
|
-
: "";
|
|
41
|
-
if (!toolUseId) {
|
|
42
|
-
return [];
|
|
43
|
-
}
|
|
44
|
-
return [
|
|
45
|
-
{
|
|
46
|
-
toolUseId,
|
|
47
|
-
content: message.content,
|
|
48
|
-
isError: Boolean(message.is_error ?? message.isError),
|
|
49
|
-
},
|
|
50
|
-
];
|
|
51
|
-
}
|
|
52
|
-
export function extractClaudeSdkToolUseBlocks(message) {
|
|
53
|
-
const topLevel = extractTopLevelToolUse(message);
|
|
54
|
-
if (topLevel.length > 0) {
|
|
55
|
-
return topLevel;
|
|
56
|
-
}
|
|
57
|
-
const blocks = toContentBlocks(message);
|
|
58
|
-
const toolUses = [];
|
|
59
|
-
for (const block of blocks) {
|
|
60
|
-
if (!isObject(block) || block.type !== "tool_use") {
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
const id = typeof block.id === "string" ? block.id : "";
|
|
64
|
-
const name = typeof block.name === "string" ? block.name : "";
|
|
65
|
-
if (!id || !name) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
toolUses.push({ id, name, input: block.input });
|
|
69
|
-
}
|
|
70
|
-
return toolUses;
|
|
71
|
-
}
|
|
72
|
-
export function extractClaudeSdkToolResultBlocks(message) {
|
|
73
|
-
const topLevel = extractTopLevelToolResult(message);
|
|
74
|
-
if (topLevel.length > 0) {
|
|
75
|
-
return topLevel;
|
|
76
|
-
}
|
|
77
|
-
const blocks = toContentBlocks(message);
|
|
78
|
-
const toolResults = [];
|
|
79
|
-
for (const block of blocks) {
|
|
80
|
-
if (!isObject(block) || block.type !== "tool_result") {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
const toolUseId = typeof block.tool_use_id === "string"
|
|
84
|
-
? block.tool_use_id
|
|
85
|
-
: typeof block.toolUseId === "string"
|
|
86
|
-
? block.toolUseId
|
|
87
|
-
: "";
|
|
88
|
-
if (!toolUseId) {
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
toolResults.push({
|
|
92
|
-
toolUseId,
|
|
93
|
-
content: block.content,
|
|
94
|
-
isError: Boolean(block.is_error ?? block.isError),
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
if (toolResults.length > 0) {
|
|
98
|
-
return toolResults;
|
|
99
|
-
}
|
|
100
|
-
if (!isObject(message)) {
|
|
101
|
-
return [];
|
|
102
|
-
}
|
|
103
|
-
const maybeToolUseResult = message.tool_use_result;
|
|
104
|
-
if (!isObject(maybeToolUseResult)) {
|
|
105
|
-
return [];
|
|
106
|
-
}
|
|
107
|
-
const toolUseId = typeof maybeToolUseResult.tool_use_id === "string"
|
|
108
|
-
? maybeToolUseResult.tool_use_id
|
|
109
|
-
: typeof maybeToolUseResult.toolUseId === "string"
|
|
110
|
-
? maybeToolUseResult.toolUseId
|
|
111
|
-
: "";
|
|
112
|
-
if (!toolUseId) {
|
|
113
|
-
return [];
|
|
114
|
-
}
|
|
115
|
-
return [
|
|
116
|
-
{
|
|
117
|
-
toolUseId,
|
|
118
|
-
content: maybeToolUseResult.content,
|
|
119
|
-
isError: Boolean(maybeToolUseResult.is_error ?? maybeToolUseResult.isError),
|
|
120
|
-
},
|
|
121
|
-
];
|
|
122
|
-
}
|
|
123
|
-
export function normalizeToolResultContent(content) {
|
|
124
|
-
return content == null ? "" : content;
|
|
125
|
-
}
|
|
126
|
-
export async function publishClaudeSdkMessage(message, options) {
|
|
127
|
-
const scope = options?.scope ?? getCurrentRunScope();
|
|
128
|
-
if (!scope) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
const registerToolUse = scope.client.registerClaudeSdkToolUse;
|
|
132
|
-
const finalizeToolResult = scope.client.finalizeClaudeSdkToolResult;
|
|
133
|
-
if (typeof registerToolUse !== "function" && typeof finalizeToolResult !== "function") {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
const stackTrace = options?.stackTrace ?? sanitizeStackTrace(new Error().stack);
|
|
137
|
-
if (typeof registerToolUse === "function") {
|
|
138
|
-
const toolUses = extractClaudeSdkToolUseBlocks(message);
|
|
139
|
-
for (const block of toolUses) {
|
|
140
|
-
try {
|
|
141
|
-
await registerToolUse(scope.runId, block.id, block.name, block.input, stackTrace);
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
warnOnce("claude-sdk-tool-use", "[sovara] Failed to register Claude SDK tool-use event.");
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
if (typeof finalizeToolResult === "function") {
|
|
149
|
-
const toolResults = extractClaudeSdkToolResultBlocks(message);
|
|
150
|
-
for (const block of toolResults) {
|
|
151
|
-
try {
|
|
152
|
-
await finalizeToolResult(scope.runId, block.toolUseId, normalizeToolResultContent(block.content), block.isError);
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
warnOnce("claude-sdk-tool-result", "[sovara] Failed to finalize Claude SDK tool-result event.");
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=parseHook.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseHook.js","sourceRoot":"","sources":["../../src/claudeAgentSdk/parseHook.ts"],"names":[],"mappings":"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"}
|
package/dist/user.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { RuntimeClient } from "./runtimeClient.js";
|
|
2
|
-
export type ActiveUser = {
|
|
3
|
-
userId: string;
|
|
4
|
-
fullName: string;
|
|
5
|
-
email: string;
|
|
6
|
-
};
|
|
7
|
-
export declare function resolveActiveUser(client: Pick<RuntimeClient, "getActiveUser">, overrides?: {
|
|
8
|
-
fullName?: string;
|
|
9
|
-
email?: string;
|
|
10
|
-
}): Promise<ActiveUser>;
|
|
11
|
-
//# sourceMappingURL=user.d.ts.map
|
package/dist/user.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAqBF,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,EAC5C,SAAS,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,UAAU,CAAC,CAoBrB"}
|
package/dist/user.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
function parseUser(payload) {
|
|
2
|
-
if (!payload) {
|
|
3
|
-
return null;
|
|
4
|
-
}
|
|
5
|
-
const userId = payload.user_id;
|
|
6
|
-
const fullName = payload.full_name;
|
|
7
|
-
const email = payload.email;
|
|
8
|
-
if (typeof userId !== "string" ||
|
|
9
|
-
typeof fullName !== "string" ||
|
|
10
|
-
typeof email !== "string") {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
return { userId, fullName, email };
|
|
14
|
-
}
|
|
15
|
-
export async function resolveActiveUser(client, overrides) {
|
|
16
|
-
const current = parseUser(await client.getActiveUser());
|
|
17
|
-
const fullName = overrides?.fullName ?? current?.fullName;
|
|
18
|
-
const email = overrides?.email ?? current?.email;
|
|
19
|
-
if (current && overrides?.fullName === undefined && overrides?.email === undefined) {
|
|
20
|
-
return current;
|
|
21
|
-
}
|
|
22
|
-
if (current?.userId && fullName && email) {
|
|
23
|
-
return {
|
|
24
|
-
userId: current.userId,
|
|
25
|
-
fullName,
|
|
26
|
-
email,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
throw new Error("Sovara user setup is missing. Run `so-cli init --user-name <full-name> --user-email <email>` and retry.");
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=user.js.map
|
package/dist/user.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAQA,SAAS,SAAS,CAAC,OAAuC;IACxD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAO,QAAQ,KAAK,QAAQ;QAC5B,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAA4C,EAC5C,SAAiD;IAEjD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,OAAO,EAAE,QAAQ,CAAC;IAC1D,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,CAAC;IACjD,IAAI,OAAO,IAAI,SAAS,EAAE,QAAQ,KAAK,SAAS,IAAI,SAAS,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;QACnF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,EAAE,MAAM,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACzC,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ;YACR,KAAK;SACN,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;AACJ,CAAC"}
|