@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.
- package/dist/control-plane/context-sync.js +1 -0
- package/dist/control-plane/event-publishers.js +21 -12
- package/dist/control-plane/execution-status.js +4 -0
- package/dist/control-plane/project-context-bootstrap.d.ts +2 -0
- package/dist/control-plane/project-context-bootstrap.js +1 -0
- package/dist/control-plane/reference-summary-refresh.js +4 -0
- package/dist/control-plane/run-start.js +1 -0
- package/dist/control-plane/task-compile-continuation.js +1 -0
- package/dist/control-plane/task-compile-start.d.ts +2 -1
- package/dist/control-plane/task-compile-start.js +5 -0
- package/dist/control-plane/types.d.ts +2 -1
- package/dist/control-plane/workflows/openai.js +19 -0
- package/dist/control-plane/workflows/types.d.ts +6 -1
- package/dist/procedure-engine/index.d.ts +10 -1
- package/dist/procedure-engine/index.js +34 -4
- package/dist/providers/openai/app-server/json-rpc.d.ts +6 -1
- package/dist/providers/openai/app-server/json-rpc.js +15 -1
- package/dist/providers/openai/app-server/read-only-procedure.d.ts +2 -0
- package/dist/providers/openai/app-server/read-only-procedure.js +13 -1
- package/dist/providers/openai/app-server/runtime-telemetry.d.ts +18 -0
- package/dist/providers/openai/app-server/runtime-telemetry.js +130 -0
- package/dist/providers/openai/app-server/workspace-write-run.d.ts +2 -0
- package/dist/providers/openai/app-server/workspace-write-run.js +13 -1
- package/dist/run-engine/index.d.ts +2 -1
- package/dist/run-engine/index.js +14 -1
- package/dist/run-pipeline/task-run-invocation.js +9 -0
- package/dist/server-shell/cli/args.d.ts +9 -9
- package/dist/server-shell/cli/args.js +31 -31
- package/dist/server-shell/cli/cli.js +24 -24
- package/dist/server-shell/cli/errors.d.ts +1 -1
- package/dist/server-shell/cli/host-lifecycle.js +7 -0
- package/dist/server-shell/cli/launch-command.d.ts +2 -2
- package/dist/server-shell/cli/launch-command.js +24 -3
- package/dist/server-shell/cli/managed-host.d.ts +2 -0
- package/dist/server-shell/cli/managed-host.js +6 -0
- package/dist/server-shell/cli/project-resolver.d.ts +6 -0
- package/dist/server-shell/cli/project-resolver.js +125 -3
- package/dist/server-shell/cli/runtime-commands.d.ts +5 -5
- package/dist/server-shell/cli/runtime-commands.js +50 -19
- package/dist/server-shell/cli/terminal-qr.d.ts +5 -0
- package/dist/server-shell/cli/terminal-qr.js +17 -0
- package/dist/server-shell/http/routes/project-api/openapi-execution-routes.d.ts +14 -0
- package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +14 -0
- package/dist/server-shell/http/routes/project-api/openapi.d.ts +28 -0
- package/dist/server-shell/http/routes/project-api/schemas.d.ts +14 -0
- package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.d.ts +50 -0
- package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.js +25 -0
- package/node_modules/@tutti/shared/dist/schemas/api/types.d.ts +4 -1
- package/package.json +2 -1
- package/web/assets/index-CDUT1Etl.js +29 -0
- package/web/assets/{index-D8xJY8Gr.css → index-DIQpGeKY.css} +1 -1
- package/web/index.html +2 -2
- package/web/assets/index-BMMQgQjz.js +0 -29
|
@@ -1,19 +1,141 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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(
|
|
25
|
-
export declare function runInviteCommand(
|
|
26
|
-
export declare function runProviderStatusCommand(
|
|
27
|
-
export declare function runLogsCommand(
|
|
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
|
|
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
|
-
|
|
13
|
+
const PROJECT_ID_DISPLAY_MIN_LENGTH = 12;
|
|
14
|
+
function resolveProject(target) {
|
|
14
15
|
return resolveExistingProjectContext({
|
|
15
|
-
...(
|
|
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 =
|
|
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(
|
|
253
|
-
const project = resolveProject(
|
|
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(
|
|
267
|
-
const project = resolveProject(
|
|
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 [
|
|
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(
|
|
286
|
-
const project = resolveProject(
|
|
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(
|
|
300
|
-
const project = resolveProject(
|
|
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
|
|
@@ -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.
|
|
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",
|