@liberseek/boft-cli-win32-arm64 0.6.7 → 0.6.8
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 +1 -1
- package/THIRD_PARTY_NOTICES.txt +4 -0
- package/app/codexhost-distribution.json +1 -1
- package/app/desktop-controller.mjs +18 -14
- package/app/host-runtime.mjs +672 -363
- package/app/plugins/antigravity/plugin.mjs +45 -198
- package/app/plugins/claude-code/plugin.mjs +245 -58
- package/app/plugins/codebuddy/assets/icon.svg +1 -0
- package/app/plugins/codebuddy/manifest.json +13 -0
- package/app/plugins/codebuddy/plugin.mjs +23179 -0
- package/app/plugins/cursor-cli/assets/icon.svg +1 -0
- package/app/plugins/cursor-cli/manifest.json +13 -0
- package/app/plugins/cursor-cli/plugin.mjs +22713 -0
- package/app/plugins/enabled.json +3 -1
- package/app/plugins/opencode/plugin.mjs +24 -5
- package/app/plugins/pi/plugin.mjs +0 -12
- package/app/renderer-extension.js +264 -98
- package/bin/boft.exe +0 -0
- package/libexec/boft-node-repl.exe +0 -0
- package/libexec/boft-shim.exe +0 -0
- package/libexec/boft-updater.exe +0 -0
- package/licenses/Agent-Client-Protocol-SDK-LICENSE.txt +191 -0
- package/package.json +1 -1
|
@@ -15384,45 +15384,37 @@ var updateStatusResultSchema = external_exports.strictObject({
|
|
|
15384
15384
|
// ../../shared-contracts/dist/index.js
|
|
15385
15385
|
var workspaceContractVersionSchema = external_exports.literal(WORKSPACE_CONTRACT_VERSION);
|
|
15386
15386
|
|
|
15387
|
-
// ../../harness-adapter/dist/approval.js
|
|
15388
|
-
function invalidRequest(message) {
|
|
15389
|
-
return { code: "invalidRequest", message, retryable: false };
|
|
15390
|
-
}
|
|
15391
|
-
function validateHostApprovalResponse(interaction, response) {
|
|
15392
|
-
return interaction.actions.some(({ id }) => id === response.actionId) ? null : invalidRequest("Approval Response contains an undeclared action ID");
|
|
15393
|
-
}
|
|
15394
|
-
|
|
15395
15387
|
// ../../harness-adapter/dist/question.js
|
|
15396
|
-
function
|
|
15388
|
+
function invalidRequest(message) {
|
|
15397
15389
|
return { code: "invalidRequest", message, retryable: false };
|
|
15398
15390
|
}
|
|
15399
15391
|
function validateHostQuestionResponse(interaction, response) {
|
|
15400
15392
|
const questionIds = new Set(interaction.questions.map(({ id }) => id));
|
|
15401
15393
|
if (response.cancelled) {
|
|
15402
|
-
return Object.keys(response.answers).length === 0 ? null :
|
|
15394
|
+
return Object.keys(response.answers).length === 0 ? null : invalidRequest("Cancelled Question Response must not contain answers");
|
|
15403
15395
|
}
|
|
15404
15396
|
for (const answerId of Object.keys(response.answers)) {
|
|
15405
15397
|
if (!questionIds.has(answerId)) {
|
|
15406
|
-
return
|
|
15398
|
+
return invalidRequest("Question Response contains an unknown Question ID");
|
|
15407
15399
|
}
|
|
15408
15400
|
}
|
|
15409
15401
|
for (const question of interaction.questions) {
|
|
15410
15402
|
const answers = response.answers[question.id] ?? [];
|
|
15411
15403
|
if (!question.optional && answers.length === 0) {
|
|
15412
|
-
return
|
|
15404
|
+
return invalidRequest("Question Response omits a required answer");
|
|
15413
15405
|
}
|
|
15414
15406
|
if (question.type === "text") {
|
|
15415
15407
|
if (answers.length > 1) {
|
|
15416
|
-
return
|
|
15408
|
+
return invalidRequest("Text Question accepts at most one answer");
|
|
15417
15409
|
}
|
|
15418
15410
|
continue;
|
|
15419
15411
|
}
|
|
15420
15412
|
if (!question.multiple && answers.length > 1) {
|
|
15421
|
-
return
|
|
15413
|
+
return invalidRequest("Single-choice Question accepts at most one answer");
|
|
15422
15414
|
}
|
|
15423
15415
|
const declared = new Set(question.options.map(({ value }) => value));
|
|
15424
15416
|
if (!question.allowOther && answers.some((answer) => !declared.has(answer))) {
|
|
15425
|
-
return
|
|
15417
|
+
return invalidRequest("Question Response contains an undeclared choice");
|
|
15426
15418
|
}
|
|
15427
15419
|
}
|
|
15428
15420
|
return null;
|
|
@@ -16265,7 +16257,7 @@ async function forkAntigravitySession(options) {
|
|
|
16265
16257
|
}));
|
|
16266
16258
|
const model = sourceSession?.model ?? sourceHistory.model;
|
|
16267
16259
|
const thinkingOptionId = sourceSession?.thinkingOptionId ?? sourceHistory.thinkingOptionId;
|
|
16268
|
-
const permissionMode = sourceSession?.permissionMode ?? "
|
|
16260
|
+
const permissionMode = sourceSession?.permissionMode ?? "dangerously-skip-permissions";
|
|
16269
16261
|
const forkedHistory = await AntigravityHistory.createDerived({
|
|
16270
16262
|
environment: sessionEnvironment,
|
|
16271
16263
|
nativeSessionId: derivedNativeSessionId,
|
|
@@ -16390,23 +16382,13 @@ function antigravityAvailableThinkingOptions(catalog, model) {
|
|
|
16390
16382
|
}
|
|
16391
16383
|
|
|
16392
16384
|
// dist/permission-modes.js
|
|
16393
|
-
var ANTIGRAVITY_DEFAULT_PERMISSION_MODE_ID = harnessPermissionModeIdSchema.parse("
|
|
16385
|
+
var ANTIGRAVITY_DEFAULT_PERMISSION_MODE_ID = harnessPermissionModeIdSchema.parse("dangerously-skip-permissions");
|
|
16394
16386
|
var ANTIGRAVITY_PERMISSION_MODE_CATALOG = harnessPermissionModeCatalogSchema.parse({
|
|
16395
16387
|
modes: [
|
|
16396
|
-
{
|
|
16397
|
-
id: "configured",
|
|
16398
|
-
label: "Configured permissions",
|
|
16399
|
-
description: "Use Antigravity CLI permission rules; headless prompts are denied safely."
|
|
16400
|
-
},
|
|
16401
|
-
{
|
|
16402
|
-
id: "desktop-approvals",
|
|
16403
|
-
label: "Desktop approvals",
|
|
16404
|
-
description: "Ask Desktop before each parent tool action. Uses native auto-execution behind a verified, fail-closed Hook; does not use configured permission prompts."
|
|
16405
|
-
},
|
|
16406
16388
|
{
|
|
16407
16389
|
id: "dangerously-skip-permissions",
|
|
16408
16390
|
label: "Skip permissions",
|
|
16409
|
-
description: "
|
|
16391
|
+
description: "Run Antigravity CLI with --dangerously-skip-permissions. codexhost adds no tool approval or workspace restrictions.",
|
|
16410
16392
|
dangerous: true
|
|
16411
16393
|
}
|
|
16412
16394
|
],
|
|
@@ -16414,10 +16396,10 @@ var ANTIGRAVITY_PERMISSION_MODE_CATALOG = harnessPermissionModeCatalogSchema.par
|
|
|
16414
16396
|
});
|
|
16415
16397
|
function decodeAntigravityPermissionModeId(value) {
|
|
16416
16398
|
const parsed = harnessPermissionModeIdSchema.parse(value);
|
|
16417
|
-
if (parsed !== "
|
|
16418
|
-
throw new Error("Antigravity
|
|
16399
|
+
if (parsed !== "dangerously-skip-permissions") {
|
|
16400
|
+
throw new Error("Antigravity only supports Skip permissions (dangerous). Explicitly select Skip permissions to continue; codexhost does not enforce tool permissions.");
|
|
16419
16401
|
}
|
|
16420
|
-
return
|
|
16402
|
+
return "dangerously-skip-permissions";
|
|
16421
16403
|
}
|
|
16422
16404
|
|
|
16423
16405
|
// dist/rollback.js
|
|
@@ -16489,7 +16471,7 @@ async function rollbackAntigravityLastTurn(options) {
|
|
|
16489
16471
|
}));
|
|
16490
16472
|
const model = sourceSession?.model ?? sourceHistory.model;
|
|
16491
16473
|
const thinkingOptionId = sourceSession?.thinkingOptionId ?? sourceHistory.thinkingOptionId;
|
|
16492
|
-
const permissionMode = sourceSession?.permissionMode ?? "
|
|
16474
|
+
const permissionMode = sourceSession?.permissionMode ?? "dangerously-skip-permissions";
|
|
16493
16475
|
const rolledBackHistory = await AntigravityHistory.createDerived({
|
|
16494
16476
|
environment: sessionEnvironment,
|
|
16495
16477
|
nativeSessionId: derivedNativeSessionId,
|
|
@@ -17137,9 +17119,15 @@ function parseBuckets(groups) {
|
|
|
17137
17119
|
}
|
|
17138
17120
|
function leadingBucket(buckets) {
|
|
17139
17121
|
return [...buckets].sort((left, right) => {
|
|
17140
|
-
|
|
17122
|
+
const leftIsFiveHour = periodTypeFrom(left.window) === "five_hour";
|
|
17123
|
+
const rightIsFiveHour = periodTypeFrom(right.window) === "five_hour";
|
|
17124
|
+
if (leftIsFiveHour !== rightIsFiveHour) {
|
|
17125
|
+
return Number(rightIsFiveHour) - Number(leftIsFiveHour);
|
|
17126
|
+
}
|
|
17127
|
+
if (right.usagePercent !== left.usagePercent) {
|
|
17141
17128
|
return right.usagePercent - left.usagePercent;
|
|
17142
|
-
|
|
17129
|
+
}
|
|
17130
|
+
return 0;
|
|
17143
17131
|
})[0];
|
|
17144
17132
|
}
|
|
17145
17133
|
function parseAntigravityUsageCommand(command, fetchedAt = (/* @__PURE__ */ new Date()).toISOString()) {
|
|
@@ -17231,9 +17219,7 @@ process.stdin.on("end", () => {
|
|
|
17231
17219
|
target.pathname !== "/question" || target.username || target.password) {
|
|
17232
17220
|
return unavailable();
|
|
17233
17221
|
}
|
|
17234
|
-
|
|
17235
|
-
const approval = process.env.CODEXHOST_AGY_QUESTION_APPROVALS === "1" &&
|
|
17236
|
-
payload.toolCall && payload.toolCall.name !== "ask_question";
|
|
17222
|
+
JSON.parse(input);
|
|
17237
17223
|
request = http.request(target, {
|
|
17238
17224
|
method: "POST",
|
|
17239
17225
|
headers: {
|
|
@@ -17254,7 +17240,7 @@ process.stdin.on("end", () => {
|
|
|
17254
17240
|
try {
|
|
17255
17241
|
const value = JSON.parse(body);
|
|
17256
17242
|
if (response.statusCode !== 200 ||
|
|
17257
|
-
|
|
17243
|
+
value.decision !== "deny" ||
|
|
17258
17244
|
typeof value.reason !== "string") return unavailable();
|
|
17259
17245
|
finish(value);
|
|
17260
17246
|
} catch { unavailable(); }
|
|
@@ -17289,23 +17275,11 @@ var responseSchema = external_exports.object({
|
|
|
17289
17275
|
answers: external_exports.record(external_exports.string(), external_exports.array(external_exports.string().max(8e3)).max(30)),
|
|
17290
17276
|
cancelled: external_exports.boolean().optional()
|
|
17291
17277
|
}).strict();
|
|
17292
|
-
|
|
17293
|
-
conversationId: external_exports.string().min(1).max(128),
|
|
17294
|
-
stepIdx: external_exports.number().int().nonnegative(),
|
|
17295
|
-
toolCall: external_exports.object({
|
|
17296
|
-
name: external_exports.string().min(1).max(256).refine((name) => name !== "ask_question"),
|
|
17297
|
-
args: jsonValueSchema
|
|
17298
|
-
})
|
|
17299
|
-
});
|
|
17300
|
-
var approvalResponseSchema = external_exports.strictObject({
|
|
17301
|
-
type: external_exports.literal("approval"),
|
|
17302
|
-
actionId: external_exports.string()
|
|
17303
|
-
});
|
|
17304
|
-
function deny(response, reason, status = 200, decision = "deny") {
|
|
17278
|
+
function deny(response, reason, status = 200) {
|
|
17305
17279
|
if (response.destroyed || response.writableEnded)
|
|
17306
17280
|
return;
|
|
17307
17281
|
response.writeHead(status, { "content-type": "application/json", connection: "close" });
|
|
17308
|
-
response.end(JSON.stringify({ decision, reason }));
|
|
17282
|
+
response.end(JSON.stringify({ decision: "deny", reason }));
|
|
17309
17283
|
}
|
|
17310
17284
|
var AntigravityQuestionBridge = class _AntigravityQuestionBridge {
|
|
17311
17285
|
directory;
|
|
@@ -17321,14 +17295,12 @@ var AntigravityQuestionBridge = class _AntigravityQuestionBridge {
|
|
|
17321
17295
|
#seenSteps = /* @__PURE__ */ new Set();
|
|
17322
17296
|
#stopped = false;
|
|
17323
17297
|
#disposal = null;
|
|
17324
|
-
#hookCommand = "";
|
|
17325
17298
|
constructor(directory, options) {
|
|
17326
17299
|
this.directory = directory;
|
|
17327
17300
|
this.#options = options;
|
|
17328
17301
|
this.environment = {
|
|
17329
17302
|
CODEXHOST_AGY_QUESTION_TOKEN: this.#token,
|
|
17330
|
-
CODEXHOST_AGY_QUESTION_TIMEOUT_MS: String(options.timeoutMs ?? QUESTION_TIMEOUT_MS)
|
|
17331
|
-
CODEXHOST_AGY_QUESTION_APPROVALS: options.approvals ? "1" : "0"
|
|
17303
|
+
CODEXHOST_AGY_QUESTION_TIMEOUT_MS: String(options.timeoutMs ?? QUESTION_TIMEOUT_MS)
|
|
17332
17304
|
};
|
|
17333
17305
|
this.#server.on("request", (request, response) => this.#receive(request, response));
|
|
17334
17306
|
}
|
|
@@ -17355,12 +17327,11 @@ var AntigravityQuestionBridge = class _AntigravityQuestionBridge {
|
|
|
17355
17327
|
bridge.environment.CODEXHOST_AGY_QUESTION_NODE = `"${process.execPath.replaceAll("\\", "/")}"`;
|
|
17356
17328
|
bridge.environment.CODEXHOST_AGY_QUESTION_CLIENT = `"${client.replaceAll("\\", "/")}"`;
|
|
17357
17329
|
const command = process.platform === "win32" ? "%CODEXHOST_AGY_QUESTION_NODE% %CODEXHOST_AGY_QUESTION_CLIENT%" : `${quote(process.execPath)} ${quote(client)}`;
|
|
17358
|
-
bridge.#hookCommand = command;
|
|
17359
17330
|
await writeFile2(path7.join(directory, ".agents", "hooks.json"), JSON.stringify({
|
|
17360
17331
|
"codexhost-question-bridge": {
|
|
17361
17332
|
PreToolUse: [
|
|
17362
17333
|
{
|
|
17363
|
-
matcher:
|
|
17334
|
+
matcher: "^ask_question$",
|
|
17364
17335
|
hooks: [
|
|
17365
17336
|
{
|
|
17366
17337
|
type: "command",
|
|
@@ -17378,38 +17349,6 @@ var AntigravityQuestionBridge = class _AntigravityQuestionBridge {
|
|
|
17378
17349
|
throw error51;
|
|
17379
17350
|
}
|
|
17380
17351
|
}
|
|
17381
|
-
verifyApprovalHooks(stdout) {
|
|
17382
|
-
if (!this.#options.approvals)
|
|
17383
|
-
return false;
|
|
17384
|
-
const hookSchema = external_exports.object({
|
|
17385
|
-
event: external_exports.literal("command_result"),
|
|
17386
|
-
command: external_exports.object({
|
|
17387
|
-
name: external_exports.literal("hooks"),
|
|
17388
|
-
data: external_exports.object({
|
|
17389
|
-
hooks: external_exports.array(external_exports.object({
|
|
17390
|
-
name: external_exports.string(),
|
|
17391
|
-
enabled: external_exports.boolean(),
|
|
17392
|
-
source: external_exports.string(),
|
|
17393
|
-
actions: external_exports.array(external_exports.object({
|
|
17394
|
-
event: external_exports.string(),
|
|
17395
|
-
matcher: external_exports.string(),
|
|
17396
|
-
command: external_exports.string()
|
|
17397
|
-
}))
|
|
17398
|
-
}))
|
|
17399
|
-
})
|
|
17400
|
-
})
|
|
17401
|
-
});
|
|
17402
|
-
for (const line of stdout.split("\n")) {
|
|
17403
|
-
try {
|
|
17404
|
-
const parsed = hookSchema.safeParse(JSON.parse(line));
|
|
17405
|
-
if (!parsed.success)
|
|
17406
|
-
continue;
|
|
17407
|
-
return parsed.data.command.data.hooks.some((hook) => hook.name === "codexhost-question-bridge" && hook.enabled && path7.resolve(hook.source) === path7.join(this.directory, ".agents", "hooks.json") && hook.actions.some((action) => action.event === "PreToolUse" && action.matcher === ".*" && action.command === this.#hookCommand));
|
|
17408
|
-
} catch {
|
|
17409
|
-
}
|
|
17410
|
-
}
|
|
17411
|
-
return false;
|
|
17412
|
-
}
|
|
17413
17352
|
#receive(request, response) {
|
|
17414
17353
|
const auth = Buffer.from(request.headers.authorization ?? "");
|
|
17415
17354
|
const expected = Buffer.from(`Bearer ${this.#token}`);
|
|
@@ -17443,13 +17382,6 @@ var AntigravityQuestionBridge = class _AntigravityQuestionBridge {
|
|
|
17443
17382
|
return;
|
|
17444
17383
|
}
|
|
17445
17384
|
if (!parsed.success) {
|
|
17446
|
-
if (this.#options.approvals) {
|
|
17447
|
-
const approval = approvalRequestSchema.safeParse(JSON.parse(body));
|
|
17448
|
-
if (approval.success) {
|
|
17449
|
-
this.#options.schedule(() => this.#approve(approval.data, response));
|
|
17450
|
-
return;
|
|
17451
|
-
}
|
|
17452
|
-
}
|
|
17453
17385
|
deny(response, "Invalid question payload", 400);
|
|
17454
17386
|
return;
|
|
17455
17387
|
}
|
|
@@ -17457,52 +17389,6 @@ var AntigravityQuestionBridge = class _AntigravityQuestionBridge {
|
|
|
17457
17389
|
this.#options.schedule(() => this.#ask(payload, response));
|
|
17458
17390
|
});
|
|
17459
17391
|
}
|
|
17460
|
-
#approve(payload, response) {
|
|
17461
|
-
if (this.#stopped || response.destroyed || payload.conversationId !== this.#options.nativeSessionId() && !this.#options.ownsApprovalSession?.(payload.conversationId)) {
|
|
17462
|
-
deny(response, "Tool approval does not belong to the active codexhost Turn.");
|
|
17463
|
-
return;
|
|
17464
|
-
}
|
|
17465
|
-
if (payload.toolCall.name === "ask_permission") {
|
|
17466
|
-
deny(response, "Desktop approves actual tool actions. Call the intended tool directly instead of ask_permission.");
|
|
17467
|
-
return;
|
|
17468
|
-
}
|
|
17469
|
-
const stepKey = `${payload.conversationId}:${payload.stepIdx}`;
|
|
17470
|
-
if (this.#seenSteps.has(stepKey) || this.#seenSteps.size >= 128) {
|
|
17471
|
-
deny(response, "Duplicate or overlapping tool approval. No permission was granted.");
|
|
17472
|
-
return;
|
|
17473
|
-
}
|
|
17474
|
-
this.#seenSteps.add(stepKey);
|
|
17475
|
-
const interaction = {
|
|
17476
|
-
type: "approval",
|
|
17477
|
-
interactionId: hostInteractionIdSchema.parse(randomUUID4()),
|
|
17478
|
-
turnId: this.#options.turnId,
|
|
17479
|
-
title: `Antigravity: ${payload.toolCall.name}`,
|
|
17480
|
-
description: `Tool: ${payload.toolCall.name}
|
|
17481
|
-
Session: ${payload.conversationId}
|
|
17482
|
-
Arguments:
|
|
17483
|
-
${JSON.stringify(payload.toolCall.args, null, 2)}`,
|
|
17484
|
-
subject: { type: "nativeAction" },
|
|
17485
|
-
actions: [
|
|
17486
|
-
{ id: "allow-once", label: "Allow once", effect: "allowOnce" },
|
|
17487
|
-
{ id: "deny", label: "Deny", effect: "deny" }
|
|
17488
|
-
]
|
|
17489
|
-
};
|
|
17490
|
-
const pending = {
|
|
17491
|
-
interaction,
|
|
17492
|
-
response,
|
|
17493
|
-
expiresAt: Date.now() + (this.#options.timeoutMs ?? QUESTION_TIMEOUT_MS),
|
|
17494
|
-
timer: setTimeout(() => {
|
|
17495
|
-
this.#finish(pending, "expired", "Tool approval expired. No permission was granted.");
|
|
17496
|
-
}, this.#options.timeoutMs ?? QUESTION_TIMEOUT_MS)
|
|
17497
|
-
};
|
|
17498
|
-
this.#pending.set(interaction.interactionId, pending);
|
|
17499
|
-
response.on("close", () => {
|
|
17500
|
-
if (!response.writableFinished) {
|
|
17501
|
-
this.#finish(pending, "cancelled", "Tool approval connection closed. No permission was granted.");
|
|
17502
|
-
}
|
|
17503
|
-
});
|
|
17504
|
-
this.#options.emit({ kind: "interaction", interaction });
|
|
17505
|
-
}
|
|
17506
17392
|
#ask(payload, response) {
|
|
17507
17393
|
if (this.#stopped || response.destroyed || payload.conversationId !== this.#options.nativeSessionId()) {
|
|
17508
17394
|
deny(response, "This question does not belong to the active codexhost Turn. No answer was received.");
|
|
@@ -17578,27 +17464,12 @@ ${JSON.stringify(payload.toolCall.args, null, 2)}`,
|
|
|
17578
17464
|
};
|
|
17579
17465
|
}
|
|
17580
17466
|
if (Date.now() >= pending.expiresAt) {
|
|
17581
|
-
this.#finish(pending, "expired",
|
|
17467
|
+
this.#finish(pending, "expired", EXPIRED_REASON);
|
|
17582
17468
|
return {
|
|
17583
17469
|
ok: false,
|
|
17584
17470
|
error: { code: "invalidState", message: "Question has expired", retryable: false }
|
|
17585
17471
|
};
|
|
17586
17472
|
}
|
|
17587
|
-
if (pending.interaction.type === "approval") {
|
|
17588
|
-
const parsed2 = approvalResponseSchema.safeParse(command.response);
|
|
17589
|
-
if (!parsed2.success) {
|
|
17590
|
-
return {
|
|
17591
|
-
ok: false,
|
|
17592
|
-
error: { code: "invalidRequest", message: "Invalid Approval response", retryable: false }
|
|
17593
|
-
};
|
|
17594
|
-
}
|
|
17595
|
-
const error52 = validateHostApprovalResponse(pending.interaction, parsed2.data);
|
|
17596
|
-
if (error52)
|
|
17597
|
-
return { ok: false, error: error52 };
|
|
17598
|
-
const allowed = parsed2.data.actionId === "allow-once";
|
|
17599
|
-
this.#finish(pending, "responded", allowed ? "User approved this tool call once." : "User denied this tool call.", allowed ? "allow" : "deny");
|
|
17600
|
-
return { ok: true, value: { accepted: true } };
|
|
17601
|
-
}
|
|
17602
17473
|
const parsed = responseSchema.safeParse(command.response);
|
|
17603
17474
|
if (!parsed.success) {
|
|
17604
17475
|
return {
|
|
@@ -17634,11 +17505,11 @@ ${JSON.stringify(payload.toolCall.args, null, 2)}`,
|
|
|
17634
17505
|
this.#finish(pending, parsed.data.cancelled ? "cancelled" : "responded", reason);
|
|
17635
17506
|
return { ok: true, value: { accepted: true } };
|
|
17636
17507
|
}
|
|
17637
|
-
#finish(pending, reason, text
|
|
17508
|
+
#finish(pending, reason, text) {
|
|
17638
17509
|
if (!this.#pending.delete(pending.interaction.interactionId))
|
|
17639
17510
|
return;
|
|
17640
17511
|
clearTimeout(pending.timer);
|
|
17641
|
-
deny(pending.response, text
|
|
17512
|
+
deny(pending.response, text);
|
|
17642
17513
|
this.#options.emit({
|
|
17643
17514
|
kind: "event",
|
|
17644
17515
|
event: {
|
|
@@ -17669,7 +17540,7 @@ ${JSON.stringify(payload.toolCall.args, null, 2)}`,
|
|
|
17669
17540
|
return;
|
|
17670
17541
|
this.#stopped = true;
|
|
17671
17542
|
for (const pending of this.#pending.values()) {
|
|
17672
|
-
this.#finish(pending, "cancelled",
|
|
17543
|
+
this.#finish(pending, "cancelled", "The codexhost Turn ended before an answer was received. Do not infer a user choice.");
|
|
17673
17544
|
}
|
|
17674
17545
|
}
|
|
17675
17546
|
dispose() {
|
|
@@ -18207,7 +18078,7 @@ function permissionDeniedTurnError(nativeMode, denial) {
|
|
|
18207
18078
|
const mode = nativeMode ? ` '${nativeMode}'` : "";
|
|
18208
18079
|
return {
|
|
18209
18080
|
code: "nativeFailure",
|
|
18210
|
-
message: `Antigravity denied a tool call under its${mode} permission mode and produced no response.
|
|
18081
|
+
message: `Antigravity denied a tool call under its${mode} permission mode and produced no response. codexhost uses native Skip permissions and does not enforce tool permissions. Check Antigravity CLI diagnostics and native Hooks for the denial; Desktop approvals and Configured permissions are not supported.`,
|
|
18211
18082
|
retryable: false,
|
|
18212
18083
|
diagnostic: sanitizeDiagnosticTail(denial)
|
|
18213
18084
|
};
|
|
@@ -18483,8 +18354,6 @@ var AntigravitySession = class {
|
|
|
18483
18354
|
}
|
|
18484
18355
|
let questions;
|
|
18485
18356
|
this.#preparingQuestions = AntigravityQuestionBridge.create({
|
|
18486
|
-
approvals: this.#permissionMode === "desktop-approvals",
|
|
18487
|
-
ownsApprovalSession: (id) => this.#active?.command === command && !this.#active.cancellationRequested && this.#active.subagents.state(id) !== void 0,
|
|
18488
18357
|
turnId: command.turnId,
|
|
18489
18358
|
nativeSessionId: () => this.#active?.command === command && !this.#active.cancellationRequested ? this.#nativeRef?.nativeSessionId : void 0,
|
|
18490
18359
|
schedule: (action) => {
|
|
@@ -18507,26 +18376,6 @@ var AntigravitySession = class {
|
|
|
18507
18376
|
}
|
|
18508
18377
|
this.#channel.emit(output);
|
|
18509
18378
|
}
|
|
18510
|
-
}).then(async (bridge) => {
|
|
18511
|
-
if (this.#permissionMode !== "desktop-approvals")
|
|
18512
|
-
return bridge;
|
|
18513
|
-
try {
|
|
18514
|
-
const { stdout } = await runBuffered(this.#executable, [
|
|
18515
|
-
"--add-dir",
|
|
18516
|
-
this.#cwd,
|
|
18517
|
-
"--add-dir",
|
|
18518
|
-
bridge.directory,
|
|
18519
|
-
"--print=/hooks",
|
|
18520
|
-
"--output-format",
|
|
18521
|
-
"stream-json"
|
|
18522
|
-
], this.#cwd, { ...this.#environment, ...bridge.environment }, DEFAULT_INSPECT_TIMEOUT_MS);
|
|
18523
|
-
if (!bridge.verifyApprovalHooks(stdout))
|
|
18524
|
-
throw new Error("Desktop approval Hook was not loaded");
|
|
18525
|
-
return bridge;
|
|
18526
|
-
} catch {
|
|
18527
|
-
await bridge.dispose();
|
|
18528
|
-
throw new Error("Desktop approval Hook verification failed; no tools were started");
|
|
18529
|
-
}
|
|
18530
18379
|
});
|
|
18531
18380
|
try {
|
|
18532
18381
|
questions = await this.#preparingQuestions;
|
|
@@ -18559,9 +18408,7 @@ var AntigravitySession = class {
|
|
|
18559
18408
|
if (this.#nativeRef)
|
|
18560
18409
|
arguments_.unshift("--conversation", this.#nativeRef.nativeSessionId);
|
|
18561
18410
|
arguments_.push(...antigravityModelArguments(this.#model, this.#thinkingOptionId));
|
|
18562
|
-
|
|
18563
|
-
arguments_.push("--dangerously-skip-permissions");
|
|
18564
|
-
}
|
|
18411
|
+
arguments_.push("--dangerously-skip-permissions");
|
|
18565
18412
|
arguments_.push("--add-dir", this.#cwd);
|
|
18566
18413
|
arguments_.push("--add-dir", questions.directory);
|
|
18567
18414
|
arguments_.push("--log-file", logPath);
|
|
@@ -19343,6 +19190,17 @@ var AntigravityAdapter = class {
|
|
|
19343
19190
|
async open(input) {
|
|
19344
19191
|
if (this.#closed)
|
|
19345
19192
|
return { ok: false, error: invalidState("Antigravity Adapter is closed") };
|
|
19193
|
+
let permissionMode = "dangerously-skip-permissions";
|
|
19194
|
+
if (input.kind !== "fork" && input.permissionModeId) {
|
|
19195
|
+
try {
|
|
19196
|
+
permissionMode = decodeAntigravityPermissionModeId(input.permissionModeId);
|
|
19197
|
+
} catch (error51) {
|
|
19198
|
+
return {
|
|
19199
|
+
ok: false,
|
|
19200
|
+
error: { code: "invalidRequest", message: errorMessage(error51), retryable: false }
|
|
19201
|
+
};
|
|
19202
|
+
}
|
|
19203
|
+
}
|
|
19346
19204
|
if (!input.cwd) {
|
|
19347
19205
|
return {
|
|
19348
19206
|
ok: false,
|
|
@@ -19454,17 +19312,6 @@ var AntigravityAdapter = class {
|
|
|
19454
19312
|
};
|
|
19455
19313
|
}
|
|
19456
19314
|
}
|
|
19457
|
-
let permissionMode = "configured";
|
|
19458
|
-
if (input.kind === "create" && input.permissionModeId) {
|
|
19459
|
-
try {
|
|
19460
|
-
permissionMode = decodeAntigravityPermissionModeId(input.permissionModeId);
|
|
19461
|
-
} catch (error51) {
|
|
19462
|
-
return {
|
|
19463
|
-
ok: false,
|
|
19464
|
-
error: { code: "invalidRequest", message: errorMessage(error51), retryable: false }
|
|
19465
|
-
};
|
|
19466
|
-
}
|
|
19467
|
-
}
|
|
19468
19315
|
const sessionEnvironment = { ...this.#environment, ...input.environment ?? {} };
|
|
19469
19316
|
const history = await AntigravityHistory.open({
|
|
19470
19317
|
environment: sessionEnvironment,
|