glimmervoid 0.35.1 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -82
- package/dist/bin/glimmervoid.js +58 -114
- package/dist/chunks/{adapters-CADejSpq.js → adapters-BmfVPxlH.js} +29 -61
- package/dist/chunks/adapters-CqFFmM2R.js +1 -0
- package/dist/chunks/{agent-api-cli-CRj_FYbz.js → agent-api-cli-BTHEyJKS.js} +1 -1
- package/dist/chunks/{agent-api-cli-vGwstJ1j.js → agent-api-cli-CBgOKXoO.js} +41 -12
- package/dist/chunks/{agent-api-core-D1233u1U.js → agent-api-core-DzKhakCv.js} +94 -3
- package/dist/chunks/{agent-setup-cli-BTAFcckd.js → agent-setup-cli-C8DGxlA-.js} +1 -1
- package/dist/chunks/{config-rPbbL4nW.js → config-BYc2z1Oc.js} +60 -779
- package/dist/chunks/config-store-B7MpiYxG.js +4181 -0
- package/dist/chunks/config-store-CsUoy88Q.js +1 -0
- package/dist/chunks/{contracts-DjIgIuDk.js → contracts-C6ipN_zw.js} +100 -12
- package/dist/chunks/git-version-6QFnKbWa.js +139 -0
- package/dist/chunks/{grok-KKgdSe-7.js → grok-CZ6kP_vD.js} +7 -3
- package/dist/chunks/guardrails-deps-Cb-ki4EU.js +70 -0
- package/dist/chunks/{sandbox-proxy-core-hnQgKR0T.js → guardrails-proxy-core-BI3rdY-m.js} +4 -4
- package/dist/chunks/{hook-command-core-DclEoE9e.js → hook-command-core-qTNK-xMF.js} +4 -1
- package/dist/chunks/{hook-tools-UX2fmt81.js → hook-tools-BkxllUHE.js} +9 -16
- package/dist/chunks/{knowledge-graph-cli-Rj5nj87L.js → knowledge-graph-cli-DApeMzA8.js} +1 -1
- package/dist/chunks/{loopback-post-DepQfdcM.js → loopback-post-DJ6iYWuL.js} +9 -9
- package/dist/chunks/{main-C-T2Uk20.js → main-BUfjroXE.js} +16282 -12595
- package/dist/chunks/{pair-cli-Dcyzv3In.js → pair-cli-GZ9t1mIO.js} +2 -2
- package/dist/chunks/{remote-config-Dd1T-VJA.js → remote-config-D2Is89Kj.js} +1 -1
- package/dist/chunks/{rtk-hook-core-BmEz2aq9.js → rtk-hook-core-VrUafGAp.js} +15 -5
- package/dist/chunks/rtk-resolver-B8BPgN9L.js +1 -0
- package/dist/chunks/{rtk-resolver-B9pzjLsM.js → rtk-resolver-C_micGrL.js} +1 -1
- package/dist/chunks/session-BZbariv5.js +1032 -0
- package/dist/chunks/{session-routes-BYy3am9m.js → session-routes-C4t8O8yg.js} +9 -9
- package/dist/chunks/settings-cli-DQOjmjev.js +484 -0
- package/dist/chunks/{ssh-sign-cli-DPHpT22B.js → ssh-sign-cli-LIBP8ppO.js} +2 -2
- package/dist/client/assets/index-B_Qt7fbZ.css +1 -0
- package/dist/client/assets/index-D-upBor0.js +265 -0
- package/dist/client/index.html +5 -3
- package/dist/scripts/postinstall-path-check.js +4 -4
- package/dist/server/index.js +1 -1
- package/dist/session/command-hook-relay.js +1 -1
- package/dist/session/{sandbox-open-launcher.js → guardrails-open-launcher.js} +10 -10
- package/dist/session/hook-relay.js +1 -1
- package/dist/session/hook-tool-relay.js +3 -3
- package/dist/session/statusline-relay.js +1 -1
- package/package.json +6 -5
- package/dist/chunks/adapters-B37wqNti.js +0 -1
- package/dist/chunks/config-store-BeIxAZNn.js +0 -1
- package/dist/chunks/config-store-BtsYbNC3.js +0 -1713
- package/dist/chunks/git-version-CUcDtF5k.js +0 -58
- package/dist/chunks/rtk-resolver-SWU5VVM7.js +0 -1
- package/dist/chunks/sandbox-deps-CWiH1d1w.js +0 -70
- package/dist/chunks/session-D6xXN0UU.js +0 -232
- package/dist/client/assets/index-CUxRHbCS.js +0 -254
- package/dist/client/assets/index-DE2GUmqs.css +0 -1
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { r as execFileSync } from "./child-process-safe-CbQnyh7D.js";
|
|
2
|
-
//#region server/git/core/git-version-core.ts
|
|
3
|
-
var NEW_WORK_ISOLATION_FLOOR = Object.freeze({
|
|
4
|
-
major: 2,
|
|
5
|
-
minor: 48
|
|
6
|
-
});
|
|
7
|
-
var NEW_WORK_ISOLATION_FLOOR_LABEL = `${NEW_WORK_ISOLATION_FLOOR.major}.${NEW_WORK_ISOLATION_FLOOR.minor}`;
|
|
8
|
-
var WHOLE_RANGE_CONSEQUENCE = "a team re-review cannot single out the author's new work and reviews the whole pull request range";
|
|
9
|
-
var GIT_UPDATE_HINT = `Update git to ${NEW_WORK_ISOLATION_FLOOR_LABEL} or newer`;
|
|
10
|
-
var UNKNOWN_GIT_VERSION = Object.freeze({
|
|
11
|
-
version: null,
|
|
12
|
-
isTooOldToIsolateNewWork: false
|
|
13
|
-
});
|
|
14
|
-
function gitVersionReport(versionOutput) {
|
|
15
|
-
const match = /^git version (\d+)\.(\d+)(?:\.(\d+))?/.exec(versionOutput?.trim() ?? "");
|
|
16
|
-
if (!match) return UNKNOWN_GIT_VERSION;
|
|
17
|
-
const [, major = "", minor = "", patch] = match;
|
|
18
|
-
const isBelowFloorMajor = Number(major) < NEW_WORK_ISOLATION_FLOOR.major;
|
|
19
|
-
const isBelowFloorMinor = Number(major) === NEW_WORK_ISOLATION_FLOOR.major && Number(minor) < NEW_WORK_ISOLATION_FLOOR.minor;
|
|
20
|
-
return {
|
|
21
|
-
version: [
|
|
22
|
-
major,
|
|
23
|
-
minor,
|
|
24
|
-
patch
|
|
25
|
-
].filter((part) => part !== void 0).join("."),
|
|
26
|
-
isTooOldToIsolateNewWork: isBelowFloorMajor || isBelowFloorMinor
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
function gitBootWarning(report) {
|
|
30
|
-
if (!report.isTooOldToIsolateNewWork) return null;
|
|
31
|
-
return `[git] git ${report.version} is older than ${NEW_WORK_ISOLATION_FLOOR_LABEL}, so ${WHOLE_RANGE_CONSEQUENCE}. ${GIT_UPDATE_HINT}.`;
|
|
32
|
-
}
|
|
33
|
-
function gitDoctorRows(report) {
|
|
34
|
-
const versionRow = ["git", report.version ?? "unknown"];
|
|
35
|
-
if (!report.isTooOldToIsolateNewWork) return [versionRow];
|
|
36
|
-
return [versionRow, ["hint", `${GIT_UPDATE_HINT}: on an older one ${WHOLE_RANGE_CONSEQUENCE}`]];
|
|
37
|
-
}
|
|
38
|
-
//#endregion
|
|
39
|
-
//#region server/git/git-version.ts
|
|
40
|
-
function readGitVersionOutput() {
|
|
41
|
-
return execFileSync("git", ["--version"], {
|
|
42
|
-
encoding: "utf8",
|
|
43
|
-
timeout: 3e3
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
function probeGitVersion({ readVersionOutput = readGitVersionOutput } = {}) {
|
|
47
|
-
try {
|
|
48
|
-
return gitVersionReport(readVersionOutput());
|
|
49
|
-
} catch {
|
|
50
|
-
return gitVersionReport(null);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function warnWhenGitIsTooOld({ probe = probeGitVersion, log = console } = {}) {
|
|
54
|
-
const warning = gitBootWarning(probe());
|
|
55
|
-
if (warning !== null) log.warn(warning);
|
|
56
|
-
}
|
|
57
|
-
//#endregion
|
|
58
|
-
export { warnWhenGitIsTooOld as n, gitDoctorRows as r, probeGitVersion as t };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { t as getRtkPath } from "./rtk-resolver-B9pzjLsM.js";
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { i as execSync } from "./child-process-safe-CbQnyh7D.js";
|
|
2
|
-
import { r as resolvePathCommandMatches } from "./spawn-command-Cc40FiZI.js";
|
|
3
|
-
//#region server/sandbox/core/sandbox-deps-core.ts
|
|
4
|
-
var LINUX_SANDBOX_BINARIES = Object.freeze([
|
|
5
|
-
"bwrap",
|
|
6
|
-
"socat",
|
|
7
|
-
"rg"
|
|
8
|
-
]);
|
|
9
|
-
var NO_SANDBOX_BINARIES = Object.freeze([]);
|
|
10
|
-
var SANDBOX_INSTALL_HINT = "Install bubblewrap, socat and ripgrep, for example: sudo apt install bubblewrap socat ripgrep";
|
|
11
|
-
var SANDBOXED_WORK = "guarded sessions and factory checks";
|
|
12
|
-
function requiredSandboxBinaries(platform) {
|
|
13
|
-
return platform === "linux" ? LINUX_SANDBOX_BINARIES : NO_SANDBOX_BINARIES;
|
|
14
|
-
}
|
|
15
|
-
function sandboxDependencyReport({ platform, binariesOnPath }) {
|
|
16
|
-
const requiredBinaries = requiredSandboxBinaries(platform);
|
|
17
|
-
const missingBinaries = requiredBinaries.filter((binary) => !binariesOnPath.has(binary));
|
|
18
|
-
return {
|
|
19
|
-
platform,
|
|
20
|
-
requiredBinaries,
|
|
21
|
-
missingBinaries,
|
|
22
|
-
installHint: missingBinaries.length > 0 ? SANDBOX_INSTALL_HINT : null
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
function namesList(names) {
|
|
26
|
-
if (names.length <= 1) return names.join("");
|
|
27
|
-
return `${names.slice(0, -1).join(", ")} and ${names.at(-1)}`;
|
|
28
|
-
}
|
|
29
|
-
function missingBinariesPhrase(report) {
|
|
30
|
-
return `${namesList(report.missingBinaries)} ${report.missingBinaries.length === 1 ? "is" : "are"} not on PATH`;
|
|
31
|
-
}
|
|
32
|
-
function sandboxSpawnRefusal(report) {
|
|
33
|
-
if (report.missingBinaries.length === 0) return null;
|
|
34
|
-
return `not started: the guardrails need ${namesList(report.requiredBinaries)}, and ${missingBinariesPhrase(report)}. ${report.installHint}`;
|
|
35
|
-
}
|
|
36
|
-
function sandboxBootWarning(report) {
|
|
37
|
-
if (report.missingBinaries.length === 0) return null;
|
|
38
|
-
return `[guardrails] ${missingBinariesPhrase(report)}, so ${SANDBOXED_WORK} will refuse to start. ${report.installHint}`;
|
|
39
|
-
}
|
|
40
|
-
function sandboxDoctorRows(report) {
|
|
41
|
-
if (report.requiredBinaries.length === 0) return [["guardrails", `nothing to check on ${report.platform}`]];
|
|
42
|
-
const binaryRows = report.requiredBinaries.map((binary) => [binary, report.missingBinaries.includes(binary) ? "MISSING" : "found"]);
|
|
43
|
-
if (report.installHint === null) return binaryRows;
|
|
44
|
-
return [...binaryRows, ["hint", report.installHint]];
|
|
45
|
-
}
|
|
46
|
-
function sandboxInstallNotice(report) {
|
|
47
|
-
if (report.installHint === null) return null;
|
|
48
|
-
return `glimmervoid: ${missingBinariesPhrase(report)}; ${SANDBOXED_WORK} need ${namesList(report.requiredBinaries)}. ${report.installHint}`;
|
|
49
|
-
}
|
|
50
|
-
//#endregion
|
|
51
|
-
//#region server/sandbox/sandbox-deps.ts
|
|
52
|
-
function probeSandboxDependencies({ platform = process.platform, exec = execSync } = {}) {
|
|
53
|
-
return sandboxDependencyReport({
|
|
54
|
-
platform,
|
|
55
|
-
binariesOnPath: new Set(requiredSandboxBinaries(platform).filter((binary) => resolvePathCommandMatches(binary, {
|
|
56
|
-
platform,
|
|
57
|
-
exec
|
|
58
|
-
}).length > 0))
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
function checkSandboxDependencies({ probe = probeSandboxDependencies, log = console } = {}) {
|
|
62
|
-
const report = probe();
|
|
63
|
-
const warning = sandboxBootWarning(report);
|
|
64
|
-
if (warning !== null) log.warn(warning);
|
|
65
|
-
const refusal = sandboxSpawnRefusal(report);
|
|
66
|
-
return () => refusal;
|
|
67
|
-
}
|
|
68
|
-
var allowSandboxedSpawn = () => null;
|
|
69
|
-
//#endregion
|
|
70
|
-
export { sandboxInstallNotice as a, sandboxDoctorRows as i, checkSandboxDependencies as n, probeSandboxDependencies as r, allowSandboxedSpawn as t };
|
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
//#region shared/states.ts
|
|
3
|
-
var STATES = Object.freeze({
|
|
4
|
-
DORMANT: "DORMANT",
|
|
5
|
-
INITIALIZING: "INITIALIZING",
|
|
6
|
-
STARTING: "STARTING",
|
|
7
|
-
RUNNING: "RUNNING",
|
|
8
|
-
WAITING: "WAITING",
|
|
9
|
-
IDLE: "IDLE",
|
|
10
|
-
COMPLETE: "COMPLETE",
|
|
11
|
-
DONE: "DONE",
|
|
12
|
-
FAILED: "FAILED"
|
|
13
|
-
});
|
|
14
|
-
Object.freeze({
|
|
15
|
-
[STATES.DORMANT]: "Dormant",
|
|
16
|
-
[STATES.INITIALIZING]: "Preparing",
|
|
17
|
-
[STATES.STARTING]: "Starting",
|
|
18
|
-
[STATES.RUNNING]: "Working",
|
|
19
|
-
[STATES.WAITING]: "Needs Input",
|
|
20
|
-
[STATES.IDLE]: "Idle",
|
|
21
|
-
[STATES.COMPLETE]: "Complete",
|
|
22
|
-
[STATES.DONE]: "Exited",
|
|
23
|
-
[STATES.FAILED]: "Failed"
|
|
24
|
-
});
|
|
25
|
-
Object.freeze({
|
|
26
|
-
[STATES.DORMANT]: "○",
|
|
27
|
-
[STATES.INITIALIZING]: "◌",
|
|
28
|
-
[STATES.STARTING]: "◐",
|
|
29
|
-
[STATES.RUNNING]: "●",
|
|
30
|
-
[STATES.WAITING]: "◆",
|
|
31
|
-
[STATES.IDLE]: "◍",
|
|
32
|
-
[STATES.FAILED]: "▲",
|
|
33
|
-
[STATES.DONE]: "■",
|
|
34
|
-
[STATES.COMPLETE]: "◇"
|
|
35
|
-
});
|
|
36
|
-
var KILLABLE_STATES = Object.freeze([
|
|
37
|
-
STATES.INITIALIZING,
|
|
38
|
-
STATES.STARTING,
|
|
39
|
-
STATES.RUNNING,
|
|
40
|
-
STATES.WAITING,
|
|
41
|
-
STATES.IDLE,
|
|
42
|
-
STATES.COMPLETE
|
|
43
|
-
]);
|
|
44
|
-
var RESTARTABLE_STATES = Object.freeze([STATES.DONE, STATES.FAILED]);
|
|
45
|
-
var MERGEABLE_LIVE_STATES = Object.freeze([
|
|
46
|
-
STATES.WAITING,
|
|
47
|
-
STATES.IDLE,
|
|
48
|
-
STATES.COMPLETE
|
|
49
|
-
]);
|
|
50
|
-
var DETAIL_FIELD_BY_TOOL = Object.freeze({
|
|
51
|
-
Bash: "command",
|
|
52
|
-
Read: "file_path",
|
|
53
|
-
Edit: "file_path",
|
|
54
|
-
MultiEdit: "file_path",
|
|
55
|
-
Write: "file_path",
|
|
56
|
-
NotebookEdit: "notebook_path",
|
|
57
|
-
Grep: "pattern",
|
|
58
|
-
Glob: "pattern",
|
|
59
|
-
WebFetch: "url",
|
|
60
|
-
WebSearch: "query",
|
|
61
|
-
Task: "description",
|
|
62
|
-
Agent: "description",
|
|
63
|
-
Skill: "skill"
|
|
64
|
-
});
|
|
65
|
-
function firstDetailLine(text) {
|
|
66
|
-
const line = text.split(/\r?\n/, 1)[0]?.trim() ?? "";
|
|
67
|
-
if (line.length <= 160) return line;
|
|
68
|
-
return `${line.slice(0, 157)}...`;
|
|
69
|
-
}
|
|
70
|
-
function toolDetailFieldValue(toolName, toolInput) {
|
|
71
|
-
const field = DETAIL_FIELD_BY_TOOL[toolName];
|
|
72
|
-
if (!field) return null;
|
|
73
|
-
if (!toolInput || typeof toolInput !== "object" || Array.isArray(toolInput)) return null;
|
|
74
|
-
const value = toolInput[field];
|
|
75
|
-
return typeof value === "string" ? value : null;
|
|
76
|
-
}
|
|
77
|
-
function toolDetailLine(toolName, toolInput) {
|
|
78
|
-
const fieldValue = toolDetailFieldValue(toolName, toolInput);
|
|
79
|
-
return fieldValue === null ? "" : firstDetailLine(fieldValue);
|
|
80
|
-
}
|
|
81
|
-
var TASK_TITLE_CONTROL_CHARACTERS = /[\x00-\x1f\x7f-\x9f]/;
|
|
82
|
-
var PROMPT_DETAIL_HIDDEN_CHARACTERS = new RegExp(`${TASK_TITLE_CONTROL_CHARACTERS.source}|[\\p{Cf}\\u2028\\u2029]`, "u");
|
|
83
|
-
var TaskTitle = z.string().refine((title) => !TASK_TITLE_CONTROL_CHARACTERS.test(title)).trim().max(120);
|
|
84
|
-
var RefinedTaskTitle = z.object({ title: z.string().nullable() }).strict();
|
|
85
|
-
var SessionState = z.enum(STATES);
|
|
86
|
-
var PendingWakeup = z.object({
|
|
87
|
-
at: z.number().finite().nullable(),
|
|
88
|
-
kind: z.string(),
|
|
89
|
-
reason: z.string().nullable()
|
|
90
|
-
}).passthrough();
|
|
91
|
-
var ASK_USER_QUESTION_TOOL_NAME = "AskUserQuestion";
|
|
92
|
-
var PROMPT_QUESTION_MAX_CHARS = 300;
|
|
93
|
-
var PROMPT_QUESTION_OPTION_MAX_CHARS = 80;
|
|
94
|
-
var hasNoHiddenCharacters = (text) => !PROMPT_DETAIL_HIDDEN_CHARACTERS.test(text);
|
|
95
|
-
var PendingPromptQuestion = z.object({
|
|
96
|
-
text: z.string().min(1).max(PROMPT_QUESTION_MAX_CHARS).refine(hasNoHiddenCharacters),
|
|
97
|
-
options: z.array(z.string().min(1).max(PROMPT_QUESTION_OPTION_MAX_CHARS).refine(hasNoHiddenCharacters)).min(1).max(8),
|
|
98
|
-
multiSelect: z.boolean()
|
|
99
|
-
});
|
|
100
|
-
var PendingPromptDetail = z.object({
|
|
101
|
-
toolName: z.string().max(160),
|
|
102
|
-
summary: z.string().max(160),
|
|
103
|
-
isComplete: z.boolean(),
|
|
104
|
-
question: PendingPromptQuestion.nullable().optional()
|
|
105
|
-
});
|
|
106
|
-
var SessionSnapshot = z.object({
|
|
107
|
-
id: z.string(),
|
|
108
|
-
name: z.string(),
|
|
109
|
-
taskTitle: TaskTitle.nullable().default(null),
|
|
110
|
-
taskTitleIsCustom: z.boolean().default(false),
|
|
111
|
-
path: z.string(),
|
|
112
|
-
agent: z.string(),
|
|
113
|
-
state: SessionState,
|
|
114
|
-
stateSince: z.number(),
|
|
115
|
-
sleeping: z.boolean(),
|
|
116
|
-
dangerouslySkipPermissions: z.boolean(),
|
|
117
|
-
saneYolo: z.boolean().default(false),
|
|
118
|
-
ephemeral: z.boolean(),
|
|
119
|
-
isWorktree: z.boolean(),
|
|
120
|
-
isWorkspace: z.boolean().default(false),
|
|
121
|
-
resumeSessionId: z.string().nullable(),
|
|
122
|
-
activeAgents: z.number().int().nonnegative(),
|
|
123
|
-
awaitingBackgroundTasks: z.boolean(),
|
|
124
|
-
isCompacting: z.boolean().default(false),
|
|
125
|
-
hasEndedTurn: z.boolean().default(false),
|
|
126
|
-
pendingWakeup: PendingWakeup.nullable(),
|
|
127
|
-
pendingPromptKind: z.string().nullable(),
|
|
128
|
-
pendingPromptDetail: PendingPromptDetail.nullable().default(null),
|
|
129
|
-
hasPlan: z.boolean().default(false),
|
|
130
|
-
mergeStatus: z.string().nullable(),
|
|
131
|
-
mergeReason: z.string().nullable(),
|
|
132
|
-
worktreeNotice: z.string().nullable(),
|
|
133
|
-
effectiveBase: z.string().nullable(),
|
|
134
|
-
auditLog: z.array(z.unknown())
|
|
135
|
-
}).passthrough();
|
|
136
|
-
function isSamePromptQuestion(left, right) {
|
|
137
|
-
if (!left || !right) return !left && !right;
|
|
138
|
-
return left.text === right.text && left.multiSelect === right.multiSelect && left.options.length === right.options.length && left.options.every((option, index) => option === right.options[index]);
|
|
139
|
-
}
|
|
140
|
-
var AGENT_URL_ENV = "GLIMMERVOID_AGENT_URL";
|
|
141
|
-
var SIGN_URL_ENV = "GLIMMERVOID_SIGN_URL";
|
|
142
|
-
var SSH_SIGN_BODY_CAP_BYTES = 1048576;
|
|
143
|
-
var SshSignRequest = z.object({
|
|
144
|
-
namespace: z.literal("git", { error: "namespace must be git" }),
|
|
145
|
-
publicKey: z.string({ error: "publicKey must be a string" }).min(1, { error: "publicKey must not be empty" }).max(16384, { error: "publicKey must be at most 16384 characters" }),
|
|
146
|
-
payload: z.base64({ error: "payload must be base64" })
|
|
147
|
-
}).strict();
|
|
148
|
-
var SshSignReply = z.union([z.object({
|
|
149
|
-
ok: z.literal(true),
|
|
150
|
-
signature: z.string()
|
|
151
|
-
}).strict(), z.object({
|
|
152
|
-
ok: z.literal(false),
|
|
153
|
-
error: z.string()
|
|
154
|
-
}).strict()]);
|
|
155
|
-
var AGENT_API_VERBS = [
|
|
156
|
-
"spawn",
|
|
157
|
-
"attention",
|
|
158
|
-
"board",
|
|
159
|
-
"dispatch",
|
|
160
|
-
"reopen",
|
|
161
|
-
"cancel",
|
|
162
|
-
"push",
|
|
163
|
-
"edit",
|
|
164
|
-
"limits"
|
|
165
|
-
];
|
|
166
|
-
var ORCHESTRATOR_AGENT_VERBS = [
|
|
167
|
-
"dispatch",
|
|
168
|
-
"reopen",
|
|
169
|
-
"cancel"
|
|
170
|
-
];
|
|
171
|
-
var AgentSpawnRequest = z.object({
|
|
172
|
-
prompt: z.string({ error: "prompt must be a string" }).min(1, { error: "prompt must not be empty" }).max(2e4, { error: "prompt must be at most 20000 characters" }).refine((prompt) => !prompt.trimStart().startsWith("-"), { message: "prompt must not start with a dash, which the agent CLI would read as an option" }),
|
|
173
|
-
name: z.string({ error: "name must be a string" }).min(1, { error: "name must not be empty" }).max(200, { error: "name must be at most 200 characters" }).optional(),
|
|
174
|
-
agent: z.string({ error: "agent must be a string" }).min(1, { error: "agent must not be empty" }).max(40, { error: "agent must be at most 40 characters" }).optional()
|
|
175
|
-
}).strict();
|
|
176
|
-
var AgentAttentionRequest = z.object({ note: z.string({ error: "note must be a string" }).min(1, { error: "note must not be empty" }).max(500, { error: "note must be at most 500 characters" }) }).strict();
|
|
177
|
-
z.union([z.object({
|
|
178
|
-
ok: z.literal(true),
|
|
179
|
-
pending: z.boolean()
|
|
180
|
-
}).strict(), z.object({
|
|
181
|
-
ok: z.literal(false),
|
|
182
|
-
error: z.string()
|
|
183
|
-
}).strict()]);
|
|
184
|
-
z.object({
|
|
185
|
-
id: SessionSnapshot.shape.id,
|
|
186
|
-
name: SessionSnapshot.shape.name,
|
|
187
|
-
agent: SessionSnapshot.shape.agent,
|
|
188
|
-
state: SessionSnapshot.shape.state,
|
|
189
|
-
ephemeral: SessionSnapshot.shape.ephemeral
|
|
190
|
-
}).strict();
|
|
191
|
-
var SESSION_DOC_BODY_CAP_BYTES = 262144;
|
|
192
|
-
var SESSION_DOC_PATH_MAX_CHARS = 4096;
|
|
193
|
-
var AgentEditRequest = z.object({ path: z.string({ error: "path must be a string" }).min(1, { error: "path must not be empty" }).max(SESSION_DOC_PATH_MAX_CHARS, { error: `path must be at most ${SESSION_DOC_PATH_MAX_CHARS} characters` }) }).strict();
|
|
194
|
-
var SessionDoc = z.object({
|
|
195
|
-
path: z.string(),
|
|
196
|
-
name: z.string(),
|
|
197
|
-
surfacedAt: z.number().finite()
|
|
198
|
-
}).strict();
|
|
199
|
-
var SESSION_COMMANDS = [
|
|
200
|
-
"push",
|
|
201
|
-
"spawn",
|
|
202
|
-
"attention",
|
|
203
|
-
"board",
|
|
204
|
-
"edit"
|
|
205
|
-
];
|
|
206
|
-
var AgentLimitsReply = z.object({
|
|
207
|
-
commands: z.array(z.object({
|
|
208
|
-
name: z.enum(SESSION_COMMANDS),
|
|
209
|
-
answers: z.boolean(),
|
|
210
|
-
reason: z.string().optional()
|
|
211
|
-
}).strict()),
|
|
212
|
-
sandboxed: z.boolean(),
|
|
213
|
-
deadEnds: z.array(z.object({
|
|
214
|
-
blocked: z.string(),
|
|
215
|
-
route: z.string()
|
|
216
|
-
}).strict())
|
|
217
|
-
}).strict().extend({ ok: z.literal(true) }).strict();
|
|
218
|
-
var AgentDispatchRequest = z.object({
|
|
219
|
-
workId: z.string().regex(/^wrk-[0-9a-f]{16}$/).optional(),
|
|
220
|
-
readyIntent: z.string().regex(/^wrk-[0-9a-f]{16}$/).optional()
|
|
221
|
-
}).strict().refine((request) => Boolean(request.workId) !== Boolean(request.readyIntent), "Expected exactly one work id or ready intent");
|
|
222
|
-
var AgentTicketRequest = z.object({ workId: z.string({ error: "workId must be a string" }).regex(/^wrk-[0-9a-f]{16}$/, { error: "workId must match wrk-[0-9a-f]{16}" }) }).strict();
|
|
223
|
-
z.discriminatedUnion("ok", [z.object({
|
|
224
|
-
ok: z.literal(true),
|
|
225
|
-
workId: z.string(),
|
|
226
|
-
state: z.enum(["open", "cancelled"])
|
|
227
|
-
}), z.object({
|
|
228
|
-
ok: z.literal(false),
|
|
229
|
-
reason: z.string()
|
|
230
|
-
})]);
|
|
231
|
-
//#endregion
|
|
232
|
-
export { toolDetailFieldValue as A, SessionState as C, TaskTitle as D, TASK_TITLE_CONTROL_CHARACTERS as E, STATES as F, KILLABLE_STATES as M, MERGEABLE_LIVE_STATES as N, isSamePromptQuestion as O, RESTARTABLE_STATES as P, SessionSnapshot as S, SshSignRequest as T, SESSION_DOC_BODY_CAP_BYTES as _, AgentDispatchRequest as a, SSH_SIGN_BODY_CAP_BYTES as b, AgentSpawnRequest as c, PROMPT_DETAIL_HIDDEN_CHARACTERS as d, PendingPromptDetail as f, SESSION_COMMANDS as g, RefinedTaskTitle as h, AgentAttentionRequest as i, toolDetailLine as j, firstDetailLine as k, AgentTicketRequest as l, PendingWakeup as m, AGENT_URL_ENV as n, AgentEditRequest as o, PendingPromptQuestion as p, ASK_USER_QUESTION_TOOL_NAME as r, AgentLimitsReply as s, AGENT_API_VERBS as t, ORCHESTRATOR_AGENT_VERBS as u, SESSION_DOC_PATH_MAX_CHARS as v, SshSignReply as w, SessionDoc as x, SIGN_URL_ENV as y };
|