@xfey/tutti 0.1.11 → 0.1.13

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 (53) hide show
  1. package/dist/control-plane/context-sync.js +1 -0
  2. package/dist/control-plane/event-publishers.js +21 -12
  3. package/dist/control-plane/execution-status.js +4 -0
  4. package/dist/control-plane/project-context-bootstrap.d.ts +2 -0
  5. package/dist/control-plane/project-context-bootstrap.js +1 -0
  6. package/dist/control-plane/reference-summary-refresh.js +4 -0
  7. package/dist/control-plane/run-start.js +1 -0
  8. package/dist/control-plane/task-compile-continuation.js +1 -0
  9. package/dist/control-plane/task-compile-start.d.ts +2 -1
  10. package/dist/control-plane/task-compile-start.js +5 -0
  11. package/dist/control-plane/types.d.ts +2 -1
  12. package/dist/control-plane/workflows/openai.js +19 -0
  13. package/dist/control-plane/workflows/types.d.ts +6 -1
  14. package/dist/procedure-engine/index.d.ts +10 -1
  15. package/dist/procedure-engine/index.js +34 -4
  16. package/dist/providers/openai/app-server/json-rpc.d.ts +6 -1
  17. package/dist/providers/openai/app-server/json-rpc.js +15 -1
  18. package/dist/providers/openai/app-server/read-only-procedure.d.ts +2 -0
  19. package/dist/providers/openai/app-server/read-only-procedure.js +13 -1
  20. package/dist/providers/openai/app-server/runtime-telemetry.d.ts +18 -0
  21. package/dist/providers/openai/app-server/runtime-telemetry.js +130 -0
  22. package/dist/providers/openai/app-server/workspace-write-run.d.ts +2 -0
  23. package/dist/providers/openai/app-server/workspace-write-run.js +13 -1
  24. package/dist/run-engine/index.d.ts +2 -1
  25. package/dist/run-engine/index.js +14 -1
  26. package/dist/run-pipeline/task-run-invocation.js +9 -0
  27. package/dist/server-shell/cli/args.d.ts +9 -9
  28. package/dist/server-shell/cli/args.js +31 -31
  29. package/dist/server-shell/cli/cli.js +24 -24
  30. package/dist/server-shell/cli/errors.d.ts +1 -1
  31. package/dist/server-shell/cli/host-lifecycle.js +7 -0
  32. package/dist/server-shell/cli/launch-command.d.ts +2 -2
  33. package/dist/server-shell/cli/launch-command.js +24 -3
  34. package/dist/server-shell/cli/managed-host.d.ts +2 -0
  35. package/dist/server-shell/cli/managed-host.js +6 -0
  36. package/dist/server-shell/cli/project-resolver.d.ts +6 -0
  37. package/dist/server-shell/cli/project-resolver.js +125 -3
  38. package/dist/server-shell/cli/runtime-commands.d.ts +5 -5
  39. package/dist/server-shell/cli/runtime-commands.js +50 -19
  40. package/dist/server-shell/cli/terminal-qr.d.ts +5 -0
  41. package/dist/server-shell/cli/terminal-qr.js +17 -0
  42. package/dist/server-shell/http/routes/project-api/openapi-execution-routes.d.ts +14 -0
  43. package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +14 -0
  44. package/dist/server-shell/http/routes/project-api/openapi.d.ts +28 -0
  45. package/dist/server-shell/http/routes/project-api/schemas.d.ts +14 -0
  46. package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.d.ts +50 -0
  47. package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.js +25 -0
  48. package/node_modules/@tutti/shared/dist/schemas/api/types.d.ts +4 -1
  49. package/package.json +2 -1
  50. package/web/assets/index-CDUT1Etl.js +29 -0
  51. package/web/assets/{index-D8xJY8Gr.css → index-DIQpGeKY.css} +1 -1
  52. package/web/index.html +2 -2
  53. package/web/assets/index-BMMQgQjz.js +0 -29
@@ -1,19 +1,141 @@
1
- import { resolve } from "node:path";
1
+ import { existsSync, readdirSync } from "node:fs";
2
+ import { basename, join, resolve } from "node:path";
3
+ import { ID_PREFIXES, isPrefixedId } from "@tutti/shared/ids";
2
4
  import { readOpenAiProviderConfigProjection, readProjectOpenAiProviderConfig, resolveTuttiHome, } from "../../providers/openai/index.js";
3
5
  import { LaunchError } from "./errors.js";
4
6
  import { assertSafeProjectRoot } from "./git-bootstrap.js";
5
7
  import { readMachineProjectBinding, readMachineRuntimeEndpoint, } from "./machine-local.js";
6
8
  import { readProjectDisplayName, readProjectIdentity } from "./project-identity.js";
9
+ function projectIdsFromTuttiHome(tuttiHome) {
10
+ const projectsRoot = join(tuttiHome, "projects");
11
+ if (!existsSync(projectsRoot)) {
12
+ return [];
13
+ }
14
+ return readdirSync(projectsRoot, { withFileTypes: true })
15
+ .filter((entry) => entry.isDirectory() && isPrefixedId(entry.name, ID_PREFIXES.project))
16
+ .map((entry) => entry.name)
17
+ .sort();
18
+ }
19
+ function readRuntimeEndpoint(tuttiHome, projectId) {
20
+ try {
21
+ return readMachineRuntimeEndpoint(tuttiHome, projectId);
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }
27
+ function readBinding(tuttiHome, projectId) {
28
+ try {
29
+ return readMachineProjectBinding(tuttiHome, projectId);
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ function readProjectTargetEntry(tuttiHome, projectId) {
36
+ const binding = readBinding(tuttiHome, projectId);
37
+ const endpoint = readRuntimeEndpoint(tuttiHome, projectId);
38
+ const workspaceRoot = binding?.workspace_root ?? endpoint?.workspace_root;
39
+ if (workspaceRoot === undefined) {
40
+ return null;
41
+ }
42
+ const workspaceName = basename(workspaceRoot) || projectId;
43
+ const displayName = readProjectDisplayName(workspaceRoot) ?? workspaceName;
44
+ const aliases = Array.from(new Set([displayName, workspaceName].filter((alias) => alias.trim() !== "")));
45
+ return {
46
+ project_id: projectId,
47
+ workspace_root: workspaceRoot,
48
+ display_name: displayName,
49
+ aliases,
50
+ };
51
+ }
52
+ function listProjectTargetEntries(tuttiHome) {
53
+ return projectIdsFromTuttiHome(tuttiHome)
54
+ .map((projectId) => readProjectTargetEntry(tuttiHome, projectId))
55
+ .filter((entry) => entry !== null);
56
+ }
57
+ function normalizeTargetName(value) {
58
+ return value.trim().toLowerCase();
59
+ }
60
+ function formatTargetMatch(entry) {
61
+ return `${entry.project_id} ${entry.display_name} ${entry.workspace_root}`;
62
+ }
63
+ function resolveSingleTargetMatch(target, matches) {
64
+ if (matches.length === 1) {
65
+ return matches[0];
66
+ }
67
+ if (matches.length > 1) {
68
+ throw new LaunchError("project_target_ambiguous", `Project target is ambiguous: ${target}`, "Use the unique project ID prefix shown by `tutti ps`, or the full project ID from this error.", { matches: matches.map(formatTargetMatch) });
69
+ }
70
+ throw new LaunchError("project_target_not_found", `Project target was not found: ${target}`, "Run `tutti ps` to list known projects, or pass a project workspace path.");
71
+ }
72
+ function resolveProjectTargetWorkspaceRoot(options) {
73
+ const target = options.target.trim();
74
+ if (target === "") {
75
+ return resolve(options.cwd, ".");
76
+ }
77
+ const pathCandidate = resolve(options.cwd, target);
78
+ if (existsSync(pathCandidate)) {
79
+ return pathCandidate;
80
+ }
81
+ const entries = listProjectTargetEntries(options.tuttiHome);
82
+ const exactId = entries.filter((entry) => entry.project_id === target);
83
+ if (exactId.length > 0) {
84
+ return resolveSingleTargetMatch(target, exactId).workspace_root;
85
+ }
86
+ if (target.startsWith(ID_PREFIXES.project)) {
87
+ const idPrefix = entries.filter((entry) => entry.project_id.startsWith(target));
88
+ if (idPrefix.length > 0) {
89
+ return resolveSingleTargetMatch(target, idPrefix).workspace_root;
90
+ }
91
+ }
92
+ const normalizedTarget = normalizeTargetName(target);
93
+ const nameMatches = entries.filter((entry) => entry.aliases.some((alias) => normalizeTargetName(alias) === normalizedTarget));
94
+ return resolveSingleTargetMatch(target, nameMatches).workspace_root;
95
+ }
96
+ export function resolveLaunchWorkspacePath(options) {
97
+ const cwd = options.cwd ?? process.cwd();
98
+ const env = options.env ?? process.env;
99
+ const target = options.target;
100
+ if (target === undefined) {
101
+ return resolve(cwd, ".");
102
+ }
103
+ const pathCandidate = resolve(cwd, target);
104
+ if (existsSync(pathCandidate)) {
105
+ return pathCandidate;
106
+ }
107
+ try {
108
+ return resolveProjectTargetWorkspaceRoot({
109
+ target,
110
+ cwd,
111
+ tuttiHome: resolveTuttiHome(env.TUTTI_HOME, cwd),
112
+ });
113
+ }
114
+ catch (error) {
115
+ if (error instanceof LaunchError &&
116
+ error.code === "project_target_not_found" &&
117
+ !target.startsWith(ID_PREFIXES.project)) {
118
+ return pathCandidate;
119
+ }
120
+ throw error;
121
+ }
122
+ }
7
123
  export function resolveExistingProjectContext(options) {
8
124
  const cwd = options.cwd ?? process.cwd();
9
125
  const env = options.env ?? process.env;
10
- const workspaceRoot = resolve(cwd, options.workspacePath ?? ".");
126
+ const tuttiHome = resolveTuttiHome(env.TUTTI_HOME, cwd);
127
+ const workspaceRoot = options.workspacePath === undefined
128
+ ? resolveProjectTargetWorkspaceRoot({
129
+ target: options.target ?? ".",
130
+ cwd,
131
+ tuttiHome,
132
+ })
133
+ : resolve(cwd, options.workspacePath);
11
134
  assertSafeProjectRoot(workspaceRoot);
12
135
  const identity = readProjectIdentity(workspaceRoot);
13
136
  if (identity.kind !== "present") {
14
137
  throw new LaunchError("project_identity_conflict", "Current directory is not a Tutti project", "Run `tutti launch` from a project root first.");
15
138
  }
16
- const tuttiHome = resolveTuttiHome(env.TUTTI_HOME, cwd);
17
139
  const binding = readMachineProjectBinding(tuttiHome, identity.project_id);
18
140
  const projectConfig = readProjectOpenAiProviderConfig(tuttiHome, identity.project_id);
19
141
  return {
@@ -11,6 +11,7 @@ export type RuntimeProjectRow = {
11
11
  relay_project_ref?: string;
12
12
  join_url?: string;
13
13
  };
14
+ export declare function formatProjectIdForDisplay(projectId: ProjectId, projectIds: readonly ProjectId[]): string;
14
15
  export declare function listRuntimeProjects(options?: {
15
16
  env?: NodeJS.ProcessEnv;
16
17
  cwd?: string;
@@ -21,12 +22,11 @@ export declare function runPsManageCommand(options?: {
21
22
  stdin?: NodeJS.ReadStream;
22
23
  stdout?: NodeJS.WriteStream;
23
24
  }): Promise<void>;
24
- export declare function runStopCommand(workspacePath?: string): Promise<string>;
25
- export declare function runInviteCommand(workspacePath?: string): Promise<string>;
26
- export declare function runProviderStatusCommand(workspacePath?: string): string;
27
- export declare function runLogsCommand(workspacePath?: string, tailLines?: number): string;
25
+ export declare function runStopCommand(target?: string): Promise<string>;
26
+ export declare function runInviteCommand(target?: string): Promise<string>;
27
+ export declare function runProviderStatusCommand(target?: string): string;
28
+ export declare function runLogsCommand(target?: string, tailLines?: number): string;
28
29
  export declare function readRuntimeEndpointForProject(tuttiHome: string, projectId: ProjectId): MachineRuntimeEndpointRecord | null;
29
30
  export declare function runtimeEndpointPathForProject(tuttiHome: string, projectId: ProjectId): string;
30
31
  export declare function projectLocalStoreRoot(tuttiHome: string, projectId: ProjectId): string;
31
- export declare function resolveWorkspacePath(value: string | undefined): string;
32
32
  //# sourceMappingURL=runtime-commands.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { existsSync, readdirSync, readFileSync } from "node:fs";
2
- import { join, resolve } from "node:path";
2
+ import { join } from "node:path";
3
3
  import { emitKeypressEvents } from "node:readline";
4
4
  import { ID_PREFIXES, isPrefixedId } from "@tutti/shared/ids";
5
5
  import { redactText } from "@tutti/shared/utils";
@@ -8,11 +8,12 @@ import { getHostLogFilePath, getMachineRuntimeEndpointPath, getProjectLocalStore
8
8
  import { readHostLocalLaunchStatus, readHostLocalProject, readHostLocalProviderConfig, requestHostLocalShutdown, rotateHostLocalInvite, } from "./local-control-client.js";
9
9
  import { formatCliErrorReason, LaunchError } from "./errors.js";
10
10
  import { resolveExistingProjectContext } from "./project-resolver.js";
11
- import { renderTerminalQr } from "./terminal-qr.js";
11
+ import { formatJoinLinkValidity, renderTerminalQr } from "./terminal-qr.js";
12
12
  import { resolveTuttiHome } from "../../providers/openai/index.js";
13
- function resolveProject(workspacePath) {
13
+ const PROJECT_ID_DISPLAY_MIN_LENGTH = 12;
14
+ function resolveProject(target) {
14
15
  return resolveExistingProjectContext({
15
- ...(workspacePath === undefined ? {} : { workspacePath }),
16
+ ...(target === undefined ? {} : { target }),
16
17
  });
17
18
  }
18
19
  function projectIdsFromTuttiHome(tuttiHome) {
@@ -33,6 +34,23 @@ function readEndpointFile(tuttiHome, projectId) {
33
34
  return null;
34
35
  }
35
36
  }
37
+ function readBindingFile(tuttiHome, projectId) {
38
+ try {
39
+ return readMachineProjectBinding(tuttiHome, projectId);
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ export function formatProjectIdForDisplay(projectId, projectIds) {
46
+ for (let length = Math.min(PROJECT_ID_DISPLAY_MIN_LENGTH, projectId.length); length <= projectId.length; length += 1) {
47
+ const prefix = projectId.slice(0, length);
48
+ if (projectIds.every((candidate) => candidate === projectId || !candidate.startsWith(prefix))) {
49
+ return prefix;
50
+ }
51
+ }
52
+ return projectId;
53
+ }
36
54
  export async function listRuntimeProjects(options = {}) {
37
55
  const cwd = options.cwd ?? process.cwd();
38
56
  const tuttiHome = resolveTuttiHome(options.env?.TUTTI_HOME, cwd);
@@ -43,7 +61,7 @@ export async function listRuntimeProjects(options = {}) {
43
61
  if (endpoint === null) {
44
62
  continue;
45
63
  }
46
- const binding = readMachineProjectBinding(tuttiHome, projectId);
64
+ const binding = readBindingFile(tuttiHome, projectId);
47
65
  const health = await probe(endpoint);
48
66
  if (health.kind === "stale") {
49
67
  rows.push({
@@ -85,9 +103,11 @@ function formatTable(rows) {
85
103
  if (rows.length === 0) {
86
104
  return "No Tutti host processes found.";
87
105
  }
88
- const header = ["STATUS", "PROJECT", "PROVIDER", "WORKSPACE"];
106
+ const header = ["STATUS", "ID", "PROJECT", "PROVIDER", "WORKSPACE"];
107
+ const projectIds = rows.map((row) => row.project_id);
89
108
  const data = rows.map((row) => [
90
109
  row.status,
110
+ formatProjectIdForDisplay(row.project_id, projectIds),
91
111
  row.display_name,
92
112
  row.provider_status ?? "-",
93
113
  redactText(row.workspace_root),
@@ -124,10 +144,12 @@ function renderManager(options) {
124
144
  "",
125
145
  ];
126
146
  if (options.rows.length > 0) {
127
- const header = ["", "STATUS", "PROJECT", "PROVIDER", "WORKSPACE"];
147
+ const header = ["", "STATUS", "ID", "PROJECT", "PROVIDER", "WORKSPACE"];
148
+ const projectIds = options.rows.map((row) => row.project_id);
128
149
  const data = options.rows.map((row, index) => [
129
150
  index === options.selectedIndex ? ">" : " ",
130
151
  row.status,
152
+ formatProjectIdForDisplay(row.project_id, projectIds),
131
153
  row.display_name,
132
154
  row.provider_status ?? "-",
133
155
  redactText(row.workspace_root),
@@ -249,8 +271,8 @@ export async function runPsManageCommand(options = {}) {
249
271
  stdout.write(SHOW_CURSOR);
250
272
  }
251
273
  }
252
- export async function runStopCommand(workspacePath) {
253
- const project = resolveProject(workspacePath);
274
+ export async function runStopCommand(target) {
275
+ const project = resolveProject(target);
254
276
  const endpoint = project.runtime_endpoint;
255
277
  if (endpoint === null) {
256
278
  return "Tutti host is not running for this project.";
@@ -263,8 +285,8 @@ export async function runStopCommand(workspacePath) {
263
285
  }
264
286
  return `Stopped ${project.display_name}.`;
265
287
  }
266
- export async function runInviteCommand(workspacePath) {
267
- const project = resolveProject(workspacePath);
288
+ export async function runInviteCommand(target) {
289
+ const project = resolveProject(target);
268
290
  const endpoint = project.runtime_endpoint;
269
291
  if (endpoint === null) {
270
292
  throw new LaunchError("host_not_running", "Tutti host is not running for this project.", "Run `tutti launch` first, then retry `tutti invite`.");
@@ -280,10 +302,22 @@ export async function runInviteCommand(workspacePath) {
280
302
  if (joinUrl === undefined) {
281
303
  throw new LaunchError("relay_registration_failed", "Relay did not return a visible join URL.", "Retry `tutti invite`; if it keeps failing, run `tutti launch` to reconnect the host.");
282
304
  }
283
- return [`Join URL: ${joinUrl}`, "", renderTerminalQr(joinUrl)].join("\n");
305
+ return [
306
+ `Join URL: ${joinUrl}`,
307
+ formatJoinLinkValidity({
308
+ ...(status.relay?.join_token_expires_at === undefined
309
+ ? {}
310
+ : { expiresAt: status.relay.join_token_expires_at }),
311
+ ...(status.relay?.join_token_reusable === undefined
312
+ ? {}
313
+ : { reusable: status.relay.join_token_reusable }),
314
+ }),
315
+ "",
316
+ renderTerminalQr(joinUrl),
317
+ ].join("\n");
284
318
  }
285
- export function runProviderStatusCommand(workspacePath) {
286
- const project = resolveProject(workspacePath);
319
+ export function runProviderStatusCommand(target) {
320
+ const project = resolveProject(target);
287
321
  return [
288
322
  `Project: ${project.display_name}`,
289
323
  `Provider: ${project.provider_config.status}`,
@@ -296,8 +330,8 @@ export function runProviderStatusCommand(workspacePath) {
296
330
  : []),
297
331
  ].join("\n");
298
332
  }
299
- export function runLogsCommand(workspacePath, tailLines = 120) {
300
- const project = resolveProject(workspacePath);
333
+ export function runLogsCommand(target, tailLines = 120) {
334
+ const project = resolveProject(target);
301
335
  const logPath = getHostLogFilePath(project.tutti_home);
302
336
  if (!existsSync(logPath)) {
303
337
  return `No host log exists yet at ${redactText(logPath)}.`;
@@ -314,7 +348,4 @@ export function runtimeEndpointPathForProject(tuttiHome, projectId) {
314
348
  export function projectLocalStoreRoot(tuttiHome, projectId) {
315
349
  return getProjectLocalStoreRoot(tuttiHome, projectId);
316
350
  }
317
- export function resolveWorkspacePath(value) {
318
- return resolve(process.cwd(), value ?? ".");
319
- }
320
351
  //# sourceMappingURL=runtime-commands.js.map
@@ -1,2 +1,7 @@
1
1
  export declare function renderTerminalQr(input: string): string;
2
+ export declare function formatJoinLinkValidity(options: {
3
+ expiresAt?: string;
4
+ reusable?: boolean;
5
+ now?: Date;
6
+ }): string;
2
7
  //# sourceMappingURL=terminal-qr.d.ts.map
@@ -8,4 +8,21 @@ export function renderTerminalQr(input) {
8
8
  });
9
9
  return output.trimEnd();
10
10
  }
11
+ export function formatJoinLinkValidity(options) {
12
+ if (options.expiresAt !== undefined) {
13
+ const expiresAt = new Date(options.expiresAt);
14
+ if (!Number.isNaN(expiresAt.getTime())) {
15
+ const now = options.now ?? new Date();
16
+ const remainingMs = expiresAt.getTime() - now.getTime();
17
+ const suffix = remainingMs <= 0
18
+ ? "expired"
19
+ : `about ${Math.ceil(remainingMs / 60_000).toString()} min`;
20
+ return `Join link valid until: ${options.expiresAt} (${suffix})`;
21
+ }
22
+ }
23
+ if (options.reusable === true) {
24
+ return "Join link validity: reusable; expiration was not reported.";
25
+ }
26
+ return "Join link validity: expiration was not reported.";
27
+ }
11
28
  //# sourceMappingURL=terminal-qr.js.map
@@ -189,6 +189,20 @@ export declare const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES: ({
189
189
  lane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"foreground">, import("@sinclair/typebox").TLiteral<"scratchpad_background">]>>;
190
190
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
191
191
  }>>>;
192
+ runtime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
193
+ activity_ref: import("@sinclair/typebox").TString;
194
+ stage_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
195
+ started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
196
+ updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
197
+ token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
198
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
199
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
200
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
201
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
202
+ total_tokens: import("@sinclair/typebox").TInteger;
203
+ }>>;
204
+ current_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>>;
205
+ }>>;
192
206
  blocked_by: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
193
207
  kind: import("@sinclair/typebox").TLiteral<"clarification">;
194
208
  thread_id: import("@sinclair/typebox").TString;
@@ -1211,6 +1211,20 @@ export declare const HOST_PROJECT_WORKSPACE_OPENAPI_ROUTES: ({
1211
1211
  lane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"foreground">, import("@sinclair/typebox").TLiteral<"scratchpad_background">]>>;
1212
1212
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1213
1213
  }>>>;
1214
+ runtime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1215
+ activity_ref: import("@sinclair/typebox").TString;
1216
+ stage_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1217
+ started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1218
+ updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1219
+ token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1220
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1221
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1222
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1223
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1224
+ total_tokens: import("@sinclair/typebox").TInteger;
1225
+ }>>;
1226
+ current_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>>;
1227
+ }>>;
1214
1228
  blocked_by: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
1215
1229
  kind: import("@sinclair/typebox").TLiteral<"clarification">;
1216
1230
  thread_id: import("@sinclair/typebox").TString;
@@ -799,6 +799,20 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
799
799
  lane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"foreground">, import("@sinclair/typebox").TLiteral<"scratchpad_background">]>>;
800
800
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
801
801
  }>>>;
802
+ runtime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
803
+ activity_ref: import("@sinclair/typebox").TString;
804
+ stage_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
805
+ started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
806
+ updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
807
+ token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
808
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
809
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
810
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
811
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
812
+ total_tokens: import("@sinclair/typebox").TInteger;
813
+ }>>;
814
+ current_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>>;
815
+ }>>;
802
816
  blocked_by: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
803
817
  kind: import("@sinclair/typebox").TLiteral<"clarification">;
804
818
  thread_id: import("@sinclair/typebox").TString;
@@ -2350,6 +2364,20 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
2350
2364
  lane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"foreground">, import("@sinclair/typebox").TLiteral<"scratchpad_background">]>>;
2351
2365
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
2352
2366
  }>>>;
2367
+ runtime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
2368
+ activity_ref: import("@sinclair/typebox").TString;
2369
+ stage_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
2370
+ started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
2371
+ updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
2372
+ token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
2373
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
2374
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
2375
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
2376
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
2377
+ total_tokens: import("@sinclair/typebox").TInteger;
2378
+ }>>;
2379
+ current_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>>;
2380
+ }>>;
2353
2381
  blocked_by: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
2354
2382
  kind: import("@sinclair/typebox").TLiteral<"clarification">;
2355
2383
  thread_id: import("@sinclair/typebox").TString;
@@ -1193,6 +1193,20 @@ export declare const BootstrapResponseSchema: {
1193
1193
  lane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"foreground">, import("@sinclair/typebox").TLiteral<"scratchpad_background">]>>;
1194
1194
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1195
1195
  }>>>;
1196
+ runtime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1197
+ activity_ref: import("@sinclair/typebox").TString;
1198
+ stage_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1199
+ started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1200
+ updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1201
+ token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1202
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1203
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1204
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1205
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1206
+ total_tokens: import("@sinclair/typebox").TInteger;
1207
+ }>>;
1208
+ current_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>>;
1209
+ }>>;
1196
1210
  blocked_by: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
1197
1211
  kind: import("@sinclair/typebox").TLiteral<"clarification">;
1198
1212
  thread_id: import("@sinclair/typebox").TString;
@@ -8,6 +8,28 @@ export declare const ExecutionActivitySummarySchema: import("@sinclair/typebox")
8
8
  lane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"foreground">, import("@sinclair/typebox").TLiteral<"scratchpad_background">]>>;
9
9
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
10
10
  }>;
11
+ export declare const ExecutionRuntimeActionSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>;
12
+ export declare const ExecutionRuntimeTokenUsageSchema: import("@sinclair/typebox").TObject<{
13
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
14
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
15
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
16
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
17
+ total_tokens: import("@sinclair/typebox").TInteger;
18
+ }>;
19
+ export declare const ExecutionRuntimeSnapshotSchema: import("@sinclair/typebox").TObject<{
20
+ activity_ref: import("@sinclair/typebox").TString;
21
+ stage_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
22
+ started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
23
+ updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
24
+ token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
25
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
26
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
27
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
28
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
29
+ total_tokens: import("@sinclair/typebox").TInteger;
30
+ }>>;
31
+ current_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>>;
32
+ }>;
11
33
  export declare const ExecutionStatusProjectionSchema: import("@sinclair/typebox").TObject<{
12
34
  status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"idle">, import("@sinclair/typebox").TLiteral<"running">, import("@sinclair/typebox").TLiteral<"pending">, import("@sinclair/typebox").TLiteral<"failed">]>;
13
35
  summary: import("@sinclair/typebox").TString;
@@ -41,6 +63,20 @@ export declare const ExecutionStatusProjectionSchema: import("@sinclair/typebox"
41
63
  lane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"foreground">, import("@sinclair/typebox").TLiteral<"scratchpad_background">]>>;
42
64
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
43
65
  }>>>;
66
+ runtime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
67
+ activity_ref: import("@sinclair/typebox").TString;
68
+ stage_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
69
+ started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
70
+ updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
71
+ token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
72
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
73
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
74
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
75
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
76
+ total_tokens: import("@sinclair/typebox").TInteger;
77
+ }>>;
78
+ current_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>>;
79
+ }>>;
44
80
  blocked_by: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
45
81
  kind: import("@sinclair/typebox").TLiteral<"clarification">;
46
82
  thread_id: import("@sinclair/typebox").TString;
@@ -164,6 +200,20 @@ export declare const ExecutionStatusChangedEventPayloadSchema: import("@sinclair
164
200
  lane: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"foreground">, import("@sinclair/typebox").TLiteral<"scratchpad_background">]>>;
165
201
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
166
202
  }>>>;
203
+ runtime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
204
+ activity_ref: import("@sinclair/typebox").TString;
205
+ stage_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
206
+ started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
207
+ updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
208
+ token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
209
+ input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
210
+ cached_input_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
211
+ output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
212
+ reasoning_output_tokens: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
213
+ total_tokens: import("@sinclair/typebox").TInteger;
214
+ }>>;
215
+ current_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"reading_context">, import("@sinclair/typebox").TLiteral<"planning">, import("@sinclair/typebox").TLiteral<"editing_files">, import("@sinclair/typebox").TLiteral<"running_command">, import("@sinclair/typebox").TLiteral<"using_tool">, import("@sinclair/typebox").TLiteral<"waiting_for_approval">, import("@sinclair/typebox").TLiteral<"finalizing">]>>;
216
+ }>>;
167
217
  blocked_by: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
168
218
  kind: import("@sinclair/typebox").TLiteral<"clarification">;
169
219
  thread_id: import("@sinclair/typebox").TString;
@@ -22,12 +22,37 @@ export const ExecutionActivitySummarySchema = Type.Object({
22
22
  lane: Type.Optional(ProcedureLaneSchema),
23
23
  started_at: Type.Optional(IsoDateTimeStringSchema),
24
24
  }, { additionalProperties: false });
25
+ export const ExecutionRuntimeActionSchema = Type.Union([
26
+ Type.Literal("reading_context"),
27
+ Type.Literal("planning"),
28
+ Type.Literal("editing_files"),
29
+ Type.Literal("running_command"),
30
+ Type.Literal("using_tool"),
31
+ Type.Literal("waiting_for_approval"),
32
+ Type.Literal("finalizing"),
33
+ ]);
34
+ export const ExecutionRuntimeTokenUsageSchema = Type.Object({
35
+ input_tokens: Type.Optional(Type.Integer({ minimum: 0 })),
36
+ cached_input_tokens: Type.Optional(Type.Integer({ minimum: 0 })),
37
+ output_tokens: Type.Optional(Type.Integer({ minimum: 0 })),
38
+ reasoning_output_tokens: Type.Optional(Type.Integer({ minimum: 0 })),
39
+ total_tokens: Type.Integer({ minimum: 0 }),
40
+ }, { additionalProperties: false });
41
+ export const ExecutionRuntimeSnapshotSchema = Type.Object({
42
+ activity_ref: ActivityRefSchema,
43
+ stage_id: Type.Optional(Type.String()),
44
+ started_at: Type.Optional(IsoDateTimeStringSchema),
45
+ updated_at: Type.Optional(IsoDateTimeStringSchema),
46
+ token_usage: Type.Optional(ExecutionRuntimeTokenUsageSchema),
47
+ current_action: Type.Optional(ExecutionRuntimeActionSchema),
48
+ }, { additionalProperties: false });
25
49
  export const ExecutionStatusProjectionSchema = Type.Object({
26
50
  status: ExecutionStatusKindSchema,
27
51
  summary: Type.String(),
28
52
  active_task: Type.Optional(TaskProjectionSchema),
29
53
  active_activity: Type.Optional(ExecutionActivitySummarySchema),
30
54
  active_activities: Type.Optional(Type.Array(ExecutionActivitySummarySchema)),
55
+ runtime: Type.Optional(ExecutionRuntimeSnapshotSchema),
31
56
  blocked_by: Type.Optional(Type.Union([
32
57
  Type.Object({
33
58
  kind: Type.Literal("clarification"),
@@ -13,7 +13,7 @@ import type { ActiveClarificationProjectionSchema, ClarificationChangedEventPayl
13
13
  import type { GetProjectDocRequestSchema, GetProjectDocResponseSchema, GetProjectDocsResponseSchema, GetReferenceFilesRequestSchema, GetReferenceFilesResponseSchema, GetViewerAssetRequestSchema, GetViewerFileRequestSchema, GetViewerFileResponseSchema, GetViewerTreeRequestSchema, GetViewerTreeResponseSchema, ProjectDocKeySchema, ProjectDocParamsSchema, ProjectDocSummaryProjectionSchema, ReferenceDirectoryProjectionSchema, ReferenceFileProjectionSchema, ReferenceSummaryProjectionSchema, ReferenceTextReadBlockedReasonSchema, RefreshReferenceSummariesDispositionSchema, RefreshReferenceSummariesPayloadSchema, RefreshReferenceSummariesResultSchema, UploadReferenceFileDispositionSchema, UploadReferenceFilePayloadSchema, UploadReferenceFileResultSchema, ViewerAssetVariantSchema, ViewerFileContentProjectionSchema, ViewerFileProjectionSchema, ViewerPathSchema, ViewerRepoSnapshotSchema, ViewerTreeEntryProjectionSchema, ViewerTreeTextReadBlockedReasonSchema, ViewerUnreadableReasonSchema } from "./viewer-reference.js";
14
14
  import type { ArtifactKindSchema, ArtifactManifestPathSchema, ArtifactManifestSchema, ArtifactPreviewCommandPayloadSchema, ArtifactPreviewCommandResultSchema, ArtifactPreviewProjectionSchema, ArtifactPreviewStatusSchema, ArtifactProjectionSchema, ArtifactServerManifestSchema, ArtifactStaticManifestSchema, ArtifactSummaryProjectionSchema, GetArtifactsResponseSchema, HeartbeatArtifactPreviewDispositionSchema, StartArtifactPreviewDispositionSchema, StopArtifactPreviewDispositionSchema } from "./artifacts.js";
15
15
  import type { DeleteSkillDispositionSchema, DeleteSkillPayloadSchema, GetSkillParamsSchema, GetSkillResponseSchema, GetSkillsResponseSchema, ImportSkillZipDispositionSchema, ImportSkillZipPayloadSchema, ImportSkillZipResultSchema, SkillDetailProjectionSchema, SkillNameSchema, SkillProjectionSchema } from "./skills.js";
16
- import type { ActivityEventProjectionSchema, ActivityEventSsePayloadSchema, ApprovalChangedEventPayloadSchema, ActivityProjectionSchema, ConnectionReadyEventPayloadSchema, ExecutionActivitySummarySchema, ExecutionStatusChangedEventPayloadSchema, ExecutionStatusKindSchema, ExecutionStatusProjectionSchema, ProcedureLaneSchema, ProviderConfigChangedEventPayloadSchema, QueryInvalidateEventPayloadSchema, ScratchpadUpdatedEventPayloadSchema, TaskDetailUpdatedEventPayloadSchema, TaskUpdatedEventPayloadSchema, WorklistChangedEventPayloadSchema, WorkspaceRecoveredEventPayloadSchema } from "./runtime-events.js";
16
+ import type { ActivityEventProjectionSchema, ActivityEventSsePayloadSchema, ApprovalChangedEventPayloadSchema, ActivityProjectionSchema, ConnectionReadyEventPayloadSchema, ExecutionActivitySummarySchema, ExecutionRuntimeActionSchema, ExecutionRuntimeSnapshotSchema, ExecutionRuntimeTokenUsageSchema, ExecutionStatusChangedEventPayloadSchema, ExecutionStatusKindSchema, ExecutionStatusProjectionSchema, ProcedureLaneSchema, ProviderConfigChangedEventPayloadSchema, QueryInvalidateEventPayloadSchema, ScratchpadUpdatedEventPayloadSchema, TaskDetailUpdatedEventPayloadSchema, TaskUpdatedEventPayloadSchema, WorklistChangedEventPayloadSchema, WorkspaceRecoveredEventPayloadSchema } from "./runtime-events.js";
17
17
  import type { ContextSyncDispositionSchema, ContextSyncPayloadSchema, ContextSyncResultSchema, InitializeProjectDocsDispositionSchema, InitializeProjectDocsPayloadSchema, InitializeProjectDocsResultSchema, RefreshScratchpadDispositionSchema, RefreshScratchpadResultSchema, RunSchedulerNowDispositionSchema, RunSchedulerNowPayloadSchema, SubmitWorklistDispositionSchema, SubmitWorklistPayloadSchema, SubmitWorklistResultSchema, UpdateProjectDisplayNameDispositionSchema, UpdateProjectDisplayNamePayloadSchema, UpdateProjectDisplayNameResultSchema } from "./workspace-commands.js";
18
18
  export type CursorPageRequest = Static<typeof CursorPageRequestSchema>;
19
19
  export type CursorPage<TItem> = {
@@ -128,6 +128,9 @@ export type GetRecoverySummaryResponse = Static<typeof GetRecoverySummaryRespons
128
128
  export type ExecutionStatusKind = Static<typeof ExecutionStatusKindSchema>;
129
129
  export type ProcedureLane = Static<typeof ProcedureLaneSchema>;
130
130
  export type ExecutionActivitySummary = Static<typeof ExecutionActivitySummarySchema>;
131
+ export type ExecutionRuntimeAction = Static<typeof ExecutionRuntimeActionSchema>;
132
+ export type ExecutionRuntimeTokenUsage = Static<typeof ExecutionRuntimeTokenUsageSchema>;
133
+ export type ExecutionRuntimeSnapshot = Static<typeof ExecutionRuntimeSnapshotSchema>;
131
134
  export type ExecutionStatusProjection = Static<typeof ExecutionStatusProjectionSchema>;
132
135
  export type ActivityProjection = Static<typeof ActivityProjectionSchema>;
133
136
  export type ActivityEventProjection = Static<typeof ActivityEventProjectionSchema>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xfey/tutti",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -35,6 +35,7 @@
35
35
  "better-sqlite3": "^12.9.0",
36
36
  "fastify": "^5.8.5",
37
37
  "openai": "^6.34.0",
38
+ "prebuild-install": "npm:@scrypted/prebuild-install@7.1.10",
38
39
  "qrcode-terminal": "^0.12.0",
39
40
  "sharp": "^0.35.3",
40
41
  "ulid": "^3.0.2",