@sovara/runner 0.1.1 → 0.3.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.
Files changed (47) hide show
  1. package/README.md +64 -18
  2. package/dist/annotation.d.ts +3 -0
  3. package/dist/annotation.d.ts.map +1 -0
  4. package/dist/annotation.js +27 -0
  5. package/dist/annotation.js.map +1 -0
  6. package/dist/codeVersion.d.ts +19 -0
  7. package/dist/codeVersion.d.ts.map +1 -0
  8. package/dist/codeVersion.js +125 -0
  9. package/dist/codeVersion.js.map +1 -0
  10. package/dist/context.d.ts +4 -2
  11. package/dist/context.d.ts.map +1 -1
  12. package/dist/context.js +8 -1
  13. package/dist/context.js.map +1 -1
  14. package/dist/env.d.ts +1 -0
  15. package/dist/env.d.ts.map +1 -1
  16. package/dist/env.js +75 -1
  17. package/dist/env.js.map +1 -1
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/payload/editIoExcludePatterns.json +3 -0
  23. package/dist/payload/wrap.d.ts +5 -1
  24. package/dist/payload/wrap.d.ts.map +1 -1
  25. package/dist/payload/wrap.js +75 -3
  26. package/dist/payload/wrap.js.map +1 -1
  27. package/dist/projectContext.d.ts +3 -1
  28. package/dist/projectContext.d.ts.map +1 -1
  29. package/dist/projectContext.js +23 -17
  30. package/dist/projectContext.js.map +1 -1
  31. package/dist/runtimeClient.d.ts +6 -0
  32. package/dist/runtimeClient.d.ts.map +1 -1
  33. package/dist/runtimeClient.js +16 -0
  34. package/dist/runtimeClient.js.map +1 -1
  35. package/dist/serverLifecycle.d.ts.map +1 -1
  36. package/dist/serverLifecycle.js +1 -33
  37. package/dist/serverLifecycle.js.map +1 -1
  38. package/dist/toolTraceUtils.d.ts +37 -0
  39. package/dist/toolTraceUtils.d.ts.map +1 -0
  40. package/dist/toolTraceUtils.js +184 -0
  41. package/dist/toolTraceUtils.js.map +1 -0
  42. package/dist/trace.d.ts +13 -0
  43. package/dist/trace.d.ts.map +1 -0
  44. package/dist/trace.js +133 -0
  45. package/dist/trace.js.map +1 -0
  46. package/dist/user.js +1 -1
  47. package/package.json +3 -2
package/dist/trace.js ADDED
@@ -0,0 +1,133 @@
1
+ import { buildToolErrorOutput, buildToolSuccessOutput, prepareToolTrace, recordPreparedToolOutput, shouldTraceTool, } from "./toolTraceUtils.js";
2
+ const API_TYPE = "sovara.trace";
3
+ export function trace(first, second) {
4
+ if (typeof first === "function" && isClassMethodContext(second)) {
5
+ return makeWrapped(first, undefined, String(second.name));
6
+ }
7
+ if (typeof first === "function") {
8
+ return makeWrapped(first, isTraceOptions(second) ? second : undefined);
9
+ }
10
+ if (isTraceOptions(first)) {
11
+ return (value, ctx) => {
12
+ if (!isClassMethodContext(ctx)) {
13
+ return makeWrapped(value, first);
14
+ }
15
+ return makeWrapped(value, first, String(ctx.name));
16
+ };
17
+ }
18
+ throw new TypeError("trace expects a function, decorator context, or options object");
19
+ }
20
+ function isTraceOptions(value) {
21
+ return Boolean(value) && typeof value === "object" && !isClassMethodContext(value);
22
+ }
23
+ function isClassMethodContext(value) {
24
+ return Boolean(value) && typeof value === "object" && value.kind === "method";
25
+ }
26
+ function isPromiseLike(value) {
27
+ return (Boolean(value) &&
28
+ (typeof value === "object" || typeof value === "function") &&
29
+ typeof value.then === "function");
30
+ }
31
+ function warnTraceFailure() {
32
+ console.warn("[sovara] Failed to trace decorated function.");
33
+ }
34
+ function resolveToolName(fn, options, contextName) {
35
+ if (options?.name) {
36
+ return options.name;
37
+ }
38
+ if (fn.name) {
39
+ return fn.name;
40
+ }
41
+ if (contextName) {
42
+ return contextName;
43
+ }
44
+ const constructorName = fn.constructor?.name;
45
+ return typeof constructorName === "string" && constructorName ? constructorName : "Function";
46
+ }
47
+ function prepareInvocation(args) {
48
+ const toolCallId = crypto.randomUUID();
49
+ if (!shouldTraceTool(toolCallId)) {
50
+ return null;
51
+ }
52
+ const toolName = resolveToolName(args.fn, args.options, args.contextName);
53
+ const toolInput = { args: args.callArgs };
54
+ const prepared = prepareToolTrace({
55
+ toolName,
56
+ toolInput,
57
+ toolCallId,
58
+ apiType: API_TYPE,
59
+ meta: args.options?.meta,
60
+ }).catch(() => {
61
+ warnTraceFailure();
62
+ return null;
63
+ });
64
+ return {
65
+ toolName,
66
+ toolCallId,
67
+ meta: args.options?.meta,
68
+ prepared,
69
+ };
70
+ }
71
+ async function recordSuccess(invocation, output) {
72
+ if (!invocation) {
73
+ return;
74
+ }
75
+ const prepared = await invocation.prepared;
76
+ if (!prepared) {
77
+ return;
78
+ }
79
+ await recordPreparedToolOutput(prepared, buildToolSuccessOutput({
80
+ toolName: invocation.toolName,
81
+ toolCallId: invocation.toolCallId,
82
+ result: output,
83
+ meta: invocation.meta,
84
+ }), API_TYPE);
85
+ }
86
+ async function recordError(invocation, error) {
87
+ if (!invocation) {
88
+ return;
89
+ }
90
+ const prepared = await invocation.prepared;
91
+ if (!prepared) {
92
+ return;
93
+ }
94
+ await recordPreparedToolOutput(prepared, buildToolErrorOutput({
95
+ toolName: invocation.toolName,
96
+ toolCallId: invocation.toolCallId,
97
+ error,
98
+ }), API_TYPE);
99
+ }
100
+ function makeWrapped(fn, options, contextName) {
101
+ const wrapped = function traced(...args) {
102
+ const invocation = prepareInvocation({ fn, callArgs: args, options, contextName });
103
+ let result;
104
+ try {
105
+ result = fn.apply(this, args);
106
+ }
107
+ catch (error) {
108
+ void recordError(invocation, error).catch(warnTraceFailure);
109
+ throw error;
110
+ }
111
+ if (isPromiseLike(result)) {
112
+ return (async () => {
113
+ try {
114
+ const value = await result;
115
+ await recordSuccess(invocation, value).catch(warnTraceFailure);
116
+ return value;
117
+ }
118
+ catch (error) {
119
+ await recordError(invocation, error).catch(warnTraceFailure);
120
+ throw error;
121
+ }
122
+ })();
123
+ }
124
+ void recordSuccess(invocation, result).catch(warnTraceFailure);
125
+ return result;
126
+ };
127
+ Object.defineProperty(wrapped, "name", {
128
+ configurable: true,
129
+ value: fn.name,
130
+ });
131
+ return wrapped;
132
+ }
133
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"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"}
package/dist/user.js CHANGED
@@ -26,6 +26,6 @@ export async function resolveActiveUser(client, overrides) {
26
26
  email,
27
27
  };
28
28
  }
29
- throw new Error("Sovara user setup is missing. Run `so-cli init --user-name <full-name> --user-email <email>` and retry.");
29
+ throw new Error("Sovara user setup is missing. Run `sovara init --user-name <full-name> --user-email <email>` and retry.");
30
30
  }
31
31
  //# sourceMappingURL=user.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sovara/runner",
3
- "version": "0.1.1",
3
+ "version": "0.3.3",
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",
@@ -68,6 +68,7 @@
68
68
  "vitest": "^2.1.8"
69
69
  },
70
70
  "dependencies": {
71
- "flat": "^6.0.1"
71
+ "flat": "^6.0.1",
72
+ "superjson": "^2.2.6"
72
73
  }
73
74
  }