@codexhost/cli-darwin-x64 0.9.1 → 0.10.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 +1 -1
- package/THIRD_PARTY_NOTICES.txt +0 -4
- package/app/codexhost-distribution.json +1 -1
- package/app/desktop-controller.mjs +304 -197
- package/app/host-runtime.mjs +1163 -666
- package/app/plugins/antigravity/plugin.mjs +73 -3
- package/app/plugins/claude-code/plugin.mjs +446 -48
- package/app/plugins/codebuddy/plugin.mjs +159 -6
- package/app/plugins/cursor-cli/plugin.mjs +207 -53
- package/app/plugins/deepseek-harness/plugin.mjs +89 -21
- package/app/plugins/enabled.json +2 -1
- package/app/plugins/grok/plugin.mjs +449 -160
- package/app/plugins/hermes/plugin.mjs +217 -63
- package/app/plugins/kimi-code/manifest.json +11 -0
- package/app/plugins/kimi-code/plugin.mjs +24226 -0
- package/app/plugins/kiro-cli/plugin.mjs +312 -65
- package/app/plugins/omp/plugin.mjs +313 -67
- package/app/plugins/opencode/plugin.mjs +73 -3
- package/app/plugins/pi/plugin.mjs +3029 -1671
- package/app/plugins/qoder/plugin.mjs +334 -187
- package/app/plugins/qoder-cn/plugin.mjs +334 -187
- package/app/plugins/workbuddy/plugin.mjs +158 -6
- package/app/renderer-extension.js +5580 -3301
- package/bin/codexhost +0 -0
- package/libexec/codexhost-shim +0 -0
- package/libexec/codexhost-updater +0 -0
- package/package.json +1 -1
- package/licenses/opencodex-LICENSE.txt +0 -21
|
@@ -27108,6 +27108,61 @@ function date4(params) {
|
|
|
27108
27108
|
// ../../../node_modules/zod/v4/classic/external.js
|
|
27109
27109
|
config(en_default());
|
|
27110
27110
|
|
|
27111
|
+
// ../../shared-contracts/dist/credential-imports.js
|
|
27112
|
+
var credentialSourceSchema = external_exports.object({
|
|
27113
|
+
id: external_exports.string().min(1).max(256),
|
|
27114
|
+
harnessId: external_exports.string().min(1),
|
|
27115
|
+
label: external_exports.string().min(1).max(512),
|
|
27116
|
+
provider: external_exports.enum(["openai-codex", "xai"])
|
|
27117
|
+
}).strict();
|
|
27118
|
+
var credentialImportNameSchema = external_exports.string().regex(/^[a-z][a-z0-9-]{0,47}$/);
|
|
27119
|
+
var credentialImportRecordSchema = external_exports.object({
|
|
27120
|
+
name: credentialImportNameSchema,
|
|
27121
|
+
source: credentialSourceSchema,
|
|
27122
|
+
importedAt: external_exports.string()
|
|
27123
|
+
}).strict();
|
|
27124
|
+
var credentialImportsRequestSchema = external_exports.discriminatedUnion("action", [
|
|
27125
|
+
external_exports.object({ action: external_exports.literal("list") }).strict(),
|
|
27126
|
+
external_exports.object({
|
|
27127
|
+
action: external_exports.literal("import"),
|
|
27128
|
+
sourceId: external_exports.string().min(1).max(256),
|
|
27129
|
+
name: credentialImportNameSchema,
|
|
27130
|
+
confirmed: external_exports.literal(true)
|
|
27131
|
+
}).strict(),
|
|
27132
|
+
external_exports.object({
|
|
27133
|
+
action: external_exports.literal("reimport"),
|
|
27134
|
+
sourceId: external_exports.string().min(1).max(256),
|
|
27135
|
+
name: credentialImportNameSchema,
|
|
27136
|
+
confirmed: external_exports.literal(true)
|
|
27137
|
+
}).strict(),
|
|
27138
|
+
external_exports.object({
|
|
27139
|
+
action: external_exports.literal("remove"),
|
|
27140
|
+
name: credentialImportNameSchema,
|
|
27141
|
+
confirmed: external_exports.literal(true)
|
|
27142
|
+
}).strict()
|
|
27143
|
+
]);
|
|
27144
|
+
var credentialOtherLoginSchema = external_exports.object({
|
|
27145
|
+
provider: external_exports.string().min(1).max(128),
|
|
27146
|
+
type: external_exports.enum(["oauth", "api_key", "unknown"]),
|
|
27147
|
+
/** Best-effort account label (e.g. the email in a Codex token), derived locally when present. */
|
|
27148
|
+
label: external_exports.string().min(1).max(512).optional(),
|
|
27149
|
+
/** Recognized credential vendor, derived from the OAuth token issuer. Absent when unknown. */
|
|
27150
|
+
vendor: external_exports.enum(["openai-codex", "xai"]).optional()
|
|
27151
|
+
}).strict();
|
|
27152
|
+
var credentialImportsResultSchema = external_exports.object({
|
|
27153
|
+
sources: external_exports.array(credentialSourceSchema),
|
|
27154
|
+
targets: external_exports.array(external_exports.object({
|
|
27155
|
+
harnessId: external_exports.string(),
|
|
27156
|
+
providers: external_exports.array(external_exports.enum(["openai-codex", "xai"])),
|
|
27157
|
+
imports: external_exports.array(credentialImportRecordSchema),
|
|
27158
|
+
others: external_exports.array(credentialOtherLoginSchema).default([])
|
|
27159
|
+
}).strict())
|
|
27160
|
+
}).strict();
|
|
27161
|
+
var credentialImportsParamsSchema = external_exports.object({
|
|
27162
|
+
targetHarnessId: external_exports.string().min(1).max(128).optional(),
|
|
27163
|
+
request: credentialImportsRequestSchema
|
|
27164
|
+
}).strict();
|
|
27165
|
+
|
|
27111
27166
|
// ../../shared-contracts/dist/version.js
|
|
27112
27167
|
var WORKSPACE_CONTRACT_VERSION = 1;
|
|
27113
27168
|
|
|
@@ -27811,10 +27866,21 @@ var harnessCommandDescriptorSchema = external_exports.object({
|
|
|
27811
27866
|
invocation: commandInvocationSchema,
|
|
27812
27867
|
label: commandLabelSchema,
|
|
27813
27868
|
description: commandDescriptionSchema.optional(),
|
|
27814
|
-
argumentMode: external_exports.enum(["none", "text"])
|
|
27869
|
+
argumentMode: external_exports.enum(["none", "text"]),
|
|
27870
|
+
/**
|
|
27871
|
+
* Native distinction reported by the Harness. Omitted when the Harness does
|
|
27872
|
+
* not tell skills and commands apart; consumers treat that as "command".
|
|
27873
|
+
*/
|
|
27874
|
+
kind: external_exports.enum(["command", "skill"]).optional()
|
|
27815
27875
|
}).strict();
|
|
27816
27876
|
var harnessCommandCatalogSchema = external_exports.object({
|
|
27817
|
-
commands: external_exports.array(harnessCommandDescriptorSchema)
|
|
27877
|
+
commands: external_exports.array(harnessCommandDescriptorSchema),
|
|
27878
|
+
/**
|
|
27879
|
+
* `live` when the catalog includes what a native Session reports for its
|
|
27880
|
+
* workspace (custom commands, skills); `static` for Adapter built-ins only.
|
|
27881
|
+
* Omitted by Adapters; set by the Host on inspection results.
|
|
27882
|
+
*/
|
|
27883
|
+
source: external_exports.enum(["live", "static"]).optional()
|
|
27818
27884
|
}).strict().superRefine((catalog, context) => {
|
|
27819
27885
|
const ids = /* @__PURE__ */ new Set();
|
|
27820
27886
|
for (const [index, command] of catalog.commands.entries()) {
|
|
@@ -27828,7 +27894,11 @@ var harnessCommandCatalogSchema = external_exports.object({
|
|
|
27828
27894
|
ids.add(command.id);
|
|
27829
27895
|
}
|
|
27830
27896
|
});
|
|
27831
|
-
var harnessCommandsInspectParamsSchema = external_exports.object({
|
|
27897
|
+
var harnessCommandsInspectParamsSchema = external_exports.object({
|
|
27898
|
+
harnessId: harnessIdSchema,
|
|
27899
|
+
/** Workspace of a draft without a Thread, for its live catalog when known. */
|
|
27900
|
+
cwd: external_exports.string().min(1).optional()
|
|
27901
|
+
}).strict();
|
|
27832
27902
|
var threadCommandsInspectParamsSchema = external_exports.object({
|
|
27833
27903
|
threadId: hostThreadIdSchema
|
|
27834
27904
|
}).strict();
|
|
@@ -28398,6 +28468,265 @@ function mapQoderException(error51) {
|
|
|
28398
28468
|
};
|
|
28399
28469
|
}
|
|
28400
28470
|
|
|
28471
|
+
// ../../harness-adapter/dist/approval.js
|
|
28472
|
+
function invalidRequest(message) {
|
|
28473
|
+
return { code: "invalidRequest", message, retryable: false };
|
|
28474
|
+
}
|
|
28475
|
+
function validateHostApprovalResponse(interaction, response) {
|
|
28476
|
+
return interaction.actions.some(({ id }) => id === response.actionId) ? null : invalidRequest("Approval Response contains an undeclared action ID");
|
|
28477
|
+
}
|
|
28478
|
+
|
|
28479
|
+
// ../../harness-adapter/dist/question.js
|
|
28480
|
+
function invalidRequest2(message) {
|
|
28481
|
+
return { code: "invalidRequest", message, retryable: false };
|
|
28482
|
+
}
|
|
28483
|
+
function validateHostQuestionResponse(interaction, response) {
|
|
28484
|
+
const questionIds = new Set(interaction.questions.map(({ id }) => id));
|
|
28485
|
+
if (response.cancelled) {
|
|
28486
|
+
return Object.keys(response.answers).length === 0 ? null : invalidRequest2("Cancelled Question Response must not contain answers");
|
|
28487
|
+
}
|
|
28488
|
+
for (const answerId of Object.keys(response.answers)) {
|
|
28489
|
+
if (!questionIds.has(answerId)) {
|
|
28490
|
+
return invalidRequest2("Question Response contains an unknown Question ID");
|
|
28491
|
+
}
|
|
28492
|
+
}
|
|
28493
|
+
for (const question of interaction.questions) {
|
|
28494
|
+
const answers = response.answers[question.id] ?? [];
|
|
28495
|
+
if (!question.optional && answers.length === 0) {
|
|
28496
|
+
return invalidRequest2("Question Response omits a required answer");
|
|
28497
|
+
}
|
|
28498
|
+
if (question.type === "text") {
|
|
28499
|
+
if (answers.length > 1) {
|
|
28500
|
+
return invalidRequest2("Text Question accepts at most one answer");
|
|
28501
|
+
}
|
|
28502
|
+
continue;
|
|
28503
|
+
}
|
|
28504
|
+
if (!question.multiple && answers.length > 1) {
|
|
28505
|
+
return invalidRequest2("Single-choice Question accepts at most one answer");
|
|
28506
|
+
}
|
|
28507
|
+
const declared = new Set(question.options.map(({ value }) => value));
|
|
28508
|
+
if (!question.allowOther && answers.some((answer) => !declared.has(answer))) {
|
|
28509
|
+
return invalidRequest2("Question Response contains an undeclared choice");
|
|
28510
|
+
}
|
|
28511
|
+
}
|
|
28512
|
+
return null;
|
|
28513
|
+
}
|
|
28514
|
+
|
|
28515
|
+
// ../../harness-adapter/dist/output-channel.js
|
|
28516
|
+
var HarnessOutputChannel = class {
|
|
28517
|
+
outputs;
|
|
28518
|
+
#consumerCreated = false;
|
|
28519
|
+
#ended = false;
|
|
28520
|
+
#pending = [];
|
|
28521
|
+
#values = [];
|
|
28522
|
+
constructor() {
|
|
28523
|
+
this.outputs = {
|
|
28524
|
+
[Symbol.asyncIterator]: () => {
|
|
28525
|
+
if (this.#consumerCreated) {
|
|
28526
|
+
throw new Error("Harness outputs allow only one consumer");
|
|
28527
|
+
}
|
|
28528
|
+
this.#consumerCreated = true;
|
|
28529
|
+
return {
|
|
28530
|
+
next: () => this.#next()
|
|
28531
|
+
};
|
|
28532
|
+
}
|
|
28533
|
+
};
|
|
28534
|
+
}
|
|
28535
|
+
emit(value) {
|
|
28536
|
+
if (this.#ended)
|
|
28537
|
+
return false;
|
|
28538
|
+
const resolve = this.#pending.shift();
|
|
28539
|
+
if (resolve)
|
|
28540
|
+
resolve({ done: false, value });
|
|
28541
|
+
else
|
|
28542
|
+
this.#values.push(value);
|
|
28543
|
+
return true;
|
|
28544
|
+
}
|
|
28545
|
+
end() {
|
|
28546
|
+
if (this.#ended)
|
|
28547
|
+
return;
|
|
28548
|
+
this.#ended = true;
|
|
28549
|
+
if (this.#values.length !== 0)
|
|
28550
|
+
return;
|
|
28551
|
+
for (const resolve of this.#pending.splice(0))
|
|
28552
|
+
resolve({ done: true, value: void 0 });
|
|
28553
|
+
}
|
|
28554
|
+
#next() {
|
|
28555
|
+
const value = this.#values.shift();
|
|
28556
|
+
if (value !== void 0)
|
|
28557
|
+
return Promise.resolve({ done: false, value });
|
|
28558
|
+
if (this.#ended)
|
|
28559
|
+
return Promise.resolve({ done: true, value: void 0 });
|
|
28560
|
+
return new Promise((resolve) => this.#pending.push(resolve));
|
|
28561
|
+
}
|
|
28562
|
+
};
|
|
28563
|
+
|
|
28564
|
+
// ../../harness-adapter/dist/usage.js
|
|
28565
|
+
var tokenFields = [
|
|
28566
|
+
"inputTokens",
|
|
28567
|
+
"cachedInputTokens",
|
|
28568
|
+
"cacheWriteInputTokens",
|
|
28569
|
+
"outputTokens",
|
|
28570
|
+
"outputTokensPerSecond",
|
|
28571
|
+
"reasoningOutputTokens",
|
|
28572
|
+
"totalTokens",
|
|
28573
|
+
"contextWindowTokens",
|
|
28574
|
+
"contextUsedTokens"
|
|
28575
|
+
];
|
|
28576
|
+
var safeIntegerFields = [
|
|
28577
|
+
"planFiveHourResetsAtUnix",
|
|
28578
|
+
"planSevenDayResetsAtUnix"
|
|
28579
|
+
];
|
|
28580
|
+
var percentFields = [
|
|
28581
|
+
"cacheHitRatePercent",
|
|
28582
|
+
"planFiveHourUsedPercent",
|
|
28583
|
+
"planSevenDayUsedPercent"
|
|
28584
|
+
];
|
|
28585
|
+
var usageFields = /* @__PURE__ */ new Set([
|
|
28586
|
+
...tokenFields,
|
|
28587
|
+
...safeIntegerFields,
|
|
28588
|
+
...percentFields,
|
|
28589
|
+
"totalCostUsd",
|
|
28590
|
+
"totalCredits",
|
|
28591
|
+
"contextUsagePercent"
|
|
28592
|
+
]);
|
|
28593
|
+
function isRecord(value) {
|
|
28594
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
28595
|
+
}
|
|
28596
|
+
function parseHostUsage(value) {
|
|
28597
|
+
if (!isRecord(value))
|
|
28598
|
+
throw new Error("Harness Usage must be an object");
|
|
28599
|
+
const keys = Object.keys(value);
|
|
28600
|
+
if (keys.length === 0)
|
|
28601
|
+
throw new Error("Harness Usage must contain a reliable field");
|
|
28602
|
+
for (const key of keys) {
|
|
28603
|
+
if (!usageFields.has(key)) {
|
|
28604
|
+
throw new Error(`Harness Usage contains unknown field '${key}'`);
|
|
28605
|
+
}
|
|
28606
|
+
}
|
|
28607
|
+
for (const field of ["totalCredits", "contextUsagePercent"]) {
|
|
28608
|
+
const candidate = value[field];
|
|
28609
|
+
if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0)) {
|
|
28610
|
+
throw new Error(`Harness Usage '${field}' must be a finite non-negative number`);
|
|
28611
|
+
}
|
|
28612
|
+
}
|
|
28613
|
+
for (const field of tokenFields) {
|
|
28614
|
+
const candidate = value[field];
|
|
28615
|
+
if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
|
|
28616
|
+
throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
|
|
28617
|
+
}
|
|
28618
|
+
}
|
|
28619
|
+
for (const field of safeIntegerFields) {
|
|
28620
|
+
const candidate = value[field];
|
|
28621
|
+
if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
|
|
28622
|
+
throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
|
|
28623
|
+
}
|
|
28624
|
+
}
|
|
28625
|
+
if (value.outputTokensPerSecond !== void 0 && (typeof value.outputTokensPerSecond !== "number" || !Number.isFinite(value.outputTokensPerSecond) || value.outputTokensPerSecond < 0)) {
|
|
28626
|
+
throw new Error("Harness Usage 'outputTokensPerSecond' must be a finite non-negative number");
|
|
28627
|
+
}
|
|
28628
|
+
if (value.totalCostUsd !== void 0 && (typeof value.totalCostUsd !== "number" || !Number.isFinite(value.totalCostUsd) || value.totalCostUsd < 0)) {
|
|
28629
|
+
throw new Error("Harness Usage 'totalCostUsd' must be a finite non-negative number");
|
|
28630
|
+
}
|
|
28631
|
+
for (const field of percentFields) {
|
|
28632
|
+
const candidate = value[field];
|
|
28633
|
+
if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0 || candidate > 100)) {
|
|
28634
|
+
throw new Error(`Harness Usage '${field}' must be between 0 and 100`);
|
|
28635
|
+
}
|
|
28636
|
+
}
|
|
28637
|
+
const hasContextUsed = value.contextUsedTokens !== void 0;
|
|
28638
|
+
const hasContextWindow = value.contextWindowTokens !== void 0;
|
|
28639
|
+
if (hasContextUsed !== hasContextWindow) {
|
|
28640
|
+
throw new Error("Harness Usage context fields must be provided together");
|
|
28641
|
+
}
|
|
28642
|
+
if (hasContextWindow && value.contextWindowTokens === 0) {
|
|
28643
|
+
throw new Error("Harness Usage 'contextWindowTokens' must be greater than zero");
|
|
28644
|
+
}
|
|
28645
|
+
if (value.planFiveHourResetsAtUnix !== void 0 && value.planFiveHourUsedPercent === void 0) {
|
|
28646
|
+
throw new Error("Harness Usage 'planFiveHourResetsAtUnix' must be provided with 'planFiveHourUsedPercent'");
|
|
28647
|
+
}
|
|
28648
|
+
if (value.planSevenDayResetsAtUnix !== void 0 && value.planSevenDayUsedPercent === void 0) {
|
|
28649
|
+
throw new Error("Harness Usage 'planSevenDayResetsAtUnix' must be provided with 'planSevenDayUsedPercent'");
|
|
28650
|
+
}
|
|
28651
|
+
return { ...value };
|
|
28652
|
+
}
|
|
28653
|
+
|
|
28654
|
+
// ../../harness-adapter/dist/live-command-catalog.js
|
|
28655
|
+
var COMMON_EXCLUDED_LIVE_COMMANDS = /* @__PURE__ */ new Set([
|
|
28656
|
+
// Session lifecycle
|
|
28657
|
+
"branch",
|
|
28658
|
+
"clear",
|
|
28659
|
+
"exit",
|
|
28660
|
+
"fork",
|
|
28661
|
+
"fresh",
|
|
28662
|
+
"new",
|
|
28663
|
+
"quit",
|
|
28664
|
+
"rename",
|
|
28665
|
+
"rename-chat",
|
|
28666
|
+
"reset",
|
|
28667
|
+
"resume",
|
|
28668
|
+
"rewind",
|
|
28669
|
+
"session",
|
|
28670
|
+
"sessions",
|
|
28671
|
+
// Desktop-owned configuration
|
|
28672
|
+
"autocompact",
|
|
28673
|
+
"color",
|
|
28674
|
+
"config",
|
|
28675
|
+
"effort",
|
|
28676
|
+
"fast",
|
|
28677
|
+
"keybindings",
|
|
28678
|
+
"model",
|
|
28679
|
+
"models",
|
|
28680
|
+
"output-style",
|
|
28681
|
+
"permissions",
|
|
28682
|
+
"settings",
|
|
28683
|
+
"statusline",
|
|
28684
|
+
"terminal-setup",
|
|
28685
|
+
"theme",
|
|
28686
|
+
"vim",
|
|
28687
|
+
// Trust and approval policy
|
|
28688
|
+
"always-approve",
|
|
28689
|
+
"auto-mode-setup",
|
|
28690
|
+
// Native login
|
|
28691
|
+
"login",
|
|
28692
|
+
"logout",
|
|
28693
|
+
// Work outliving the Turn
|
|
28694
|
+
"autopilot",
|
|
28695
|
+
"background",
|
|
28696
|
+
"bg",
|
|
28697
|
+
"goal",
|
|
28698
|
+
"jobs",
|
|
28699
|
+
"loop",
|
|
28700
|
+
"multitask",
|
|
28701
|
+
"queue",
|
|
28702
|
+
"remote-control",
|
|
28703
|
+
"schedule",
|
|
28704
|
+
"steer",
|
|
28705
|
+
// Native terminal UI
|
|
28706
|
+
"copy",
|
|
28707
|
+
"debug",
|
|
28708
|
+
"feedback",
|
|
28709
|
+
"heapdump",
|
|
28710
|
+
"share",
|
|
28711
|
+
"shell",
|
|
28712
|
+
// Plugin and MCP management
|
|
28713
|
+
"marketplace",
|
|
28714
|
+
"mcp",
|
|
28715
|
+
"plugins",
|
|
28716
|
+
"reload-plugins"
|
|
28717
|
+
]);
|
|
28718
|
+
var COMMON_EXCLUDED_LIVE_COMMAND_PREFIXES = ["__", "hooks-"];
|
|
28719
|
+
function isExcludedLiveCommand(name, kind, extra = {}) {
|
|
28720
|
+
const normalized = name.trim().replace(/^\//u, "");
|
|
28721
|
+
if (new Set(extra.names ?? []).has(normalized))
|
|
28722
|
+
return true;
|
|
28723
|
+
if (extra.prefixes?.some((prefix) => normalized.startsWith(prefix)))
|
|
28724
|
+
return true;
|
|
28725
|
+
if (kind === "skill")
|
|
28726
|
+
return false;
|
|
28727
|
+
return COMMON_EXCLUDED_LIVE_COMMANDS.has(normalized) || COMMON_EXCLUDED_LIVE_COMMAND_PREFIXES.some((prefix) => normalized.startsWith(prefix));
|
|
28728
|
+
}
|
|
28729
|
+
|
|
28401
28730
|
// dist/qoder-slash-commands.js
|
|
28402
28731
|
var QODER_FALLBACK_COMMAND_CATALOG = harnessCommandCatalogSchema.parse({
|
|
28403
28732
|
commands: [
|
|
@@ -28436,7 +28765,7 @@ function mapQoderSlashCommands(commands) {
|
|
|
28436
28765
|
if (typeof rawName !== "string")
|
|
28437
28766
|
continue;
|
|
28438
28767
|
const cleanName = rawName.replace(/^\//, "").trim().toLowerCase();
|
|
28439
|
-
if (!cleanName)
|
|
28768
|
+
if (!cleanName || isExcludedLiveCommand(cleanName, "command"))
|
|
28440
28769
|
continue;
|
|
28441
28770
|
const id = `qoder.${cleanName}`;
|
|
28442
28771
|
if (seenIds.has(id))
|
|
@@ -29034,189 +29363,6 @@ function mapToQoderPermissionMode(id) {
|
|
|
29034
29363
|
// dist/qoder-sdk-transport.js
|
|
29035
29364
|
import { randomUUID } from "node:crypto";
|
|
29036
29365
|
|
|
29037
|
-
// ../../harness-adapter/dist/approval.js
|
|
29038
|
-
function invalidRequest(message) {
|
|
29039
|
-
return { code: "invalidRequest", message, retryable: false };
|
|
29040
|
-
}
|
|
29041
|
-
function validateHostApprovalResponse(interaction, response) {
|
|
29042
|
-
return interaction.actions.some(({ id }) => id === response.actionId) ? null : invalidRequest("Approval Response contains an undeclared action ID");
|
|
29043
|
-
}
|
|
29044
|
-
|
|
29045
|
-
// ../../harness-adapter/dist/question.js
|
|
29046
|
-
function invalidRequest2(message) {
|
|
29047
|
-
return { code: "invalidRequest", message, retryable: false };
|
|
29048
|
-
}
|
|
29049
|
-
function validateHostQuestionResponse(interaction, response) {
|
|
29050
|
-
const questionIds = new Set(interaction.questions.map(({ id }) => id));
|
|
29051
|
-
if (response.cancelled) {
|
|
29052
|
-
return Object.keys(response.answers).length === 0 ? null : invalidRequest2("Cancelled Question Response must not contain answers");
|
|
29053
|
-
}
|
|
29054
|
-
for (const answerId of Object.keys(response.answers)) {
|
|
29055
|
-
if (!questionIds.has(answerId)) {
|
|
29056
|
-
return invalidRequest2("Question Response contains an unknown Question ID");
|
|
29057
|
-
}
|
|
29058
|
-
}
|
|
29059
|
-
for (const question of interaction.questions) {
|
|
29060
|
-
const answers = response.answers[question.id] ?? [];
|
|
29061
|
-
if (!question.optional && answers.length === 0) {
|
|
29062
|
-
return invalidRequest2("Question Response omits a required answer");
|
|
29063
|
-
}
|
|
29064
|
-
if (question.type === "text") {
|
|
29065
|
-
if (answers.length > 1) {
|
|
29066
|
-
return invalidRequest2("Text Question accepts at most one answer");
|
|
29067
|
-
}
|
|
29068
|
-
continue;
|
|
29069
|
-
}
|
|
29070
|
-
if (!question.multiple && answers.length > 1) {
|
|
29071
|
-
return invalidRequest2("Single-choice Question accepts at most one answer");
|
|
29072
|
-
}
|
|
29073
|
-
const declared = new Set(question.options.map(({ value }) => value));
|
|
29074
|
-
if (!question.allowOther && answers.some((answer) => !declared.has(answer))) {
|
|
29075
|
-
return invalidRequest2("Question Response contains an undeclared choice");
|
|
29076
|
-
}
|
|
29077
|
-
}
|
|
29078
|
-
return null;
|
|
29079
|
-
}
|
|
29080
|
-
|
|
29081
|
-
// ../../harness-adapter/dist/output-channel.js
|
|
29082
|
-
var HarnessOutputChannel = class {
|
|
29083
|
-
outputs;
|
|
29084
|
-
#consumerCreated = false;
|
|
29085
|
-
#ended = false;
|
|
29086
|
-
#pending = [];
|
|
29087
|
-
#values = [];
|
|
29088
|
-
constructor() {
|
|
29089
|
-
this.outputs = {
|
|
29090
|
-
[Symbol.asyncIterator]: () => {
|
|
29091
|
-
if (this.#consumerCreated) {
|
|
29092
|
-
throw new Error("Harness outputs allow only one consumer");
|
|
29093
|
-
}
|
|
29094
|
-
this.#consumerCreated = true;
|
|
29095
|
-
return {
|
|
29096
|
-
next: () => this.#next()
|
|
29097
|
-
};
|
|
29098
|
-
}
|
|
29099
|
-
};
|
|
29100
|
-
}
|
|
29101
|
-
emit(value) {
|
|
29102
|
-
if (this.#ended)
|
|
29103
|
-
return false;
|
|
29104
|
-
const resolve = this.#pending.shift();
|
|
29105
|
-
if (resolve)
|
|
29106
|
-
resolve({ done: false, value });
|
|
29107
|
-
else
|
|
29108
|
-
this.#values.push(value);
|
|
29109
|
-
return true;
|
|
29110
|
-
}
|
|
29111
|
-
end() {
|
|
29112
|
-
if (this.#ended)
|
|
29113
|
-
return;
|
|
29114
|
-
this.#ended = true;
|
|
29115
|
-
if (this.#values.length !== 0)
|
|
29116
|
-
return;
|
|
29117
|
-
for (const resolve of this.#pending.splice(0))
|
|
29118
|
-
resolve({ done: true, value: void 0 });
|
|
29119
|
-
}
|
|
29120
|
-
#next() {
|
|
29121
|
-
const value = this.#values.shift();
|
|
29122
|
-
if (value !== void 0)
|
|
29123
|
-
return Promise.resolve({ done: false, value });
|
|
29124
|
-
if (this.#ended)
|
|
29125
|
-
return Promise.resolve({ done: true, value: void 0 });
|
|
29126
|
-
return new Promise((resolve) => this.#pending.push(resolve));
|
|
29127
|
-
}
|
|
29128
|
-
};
|
|
29129
|
-
|
|
29130
|
-
// ../../harness-adapter/dist/usage.js
|
|
29131
|
-
var tokenFields = [
|
|
29132
|
-
"inputTokens",
|
|
29133
|
-
"cachedInputTokens",
|
|
29134
|
-
"cacheWriteInputTokens",
|
|
29135
|
-
"outputTokens",
|
|
29136
|
-
"outputTokensPerSecond",
|
|
29137
|
-
"reasoningOutputTokens",
|
|
29138
|
-
"totalTokens",
|
|
29139
|
-
"contextWindowTokens",
|
|
29140
|
-
"contextUsedTokens"
|
|
29141
|
-
];
|
|
29142
|
-
var safeIntegerFields = [
|
|
29143
|
-
"planFiveHourResetsAtUnix",
|
|
29144
|
-
"planSevenDayResetsAtUnix"
|
|
29145
|
-
];
|
|
29146
|
-
var percentFields = [
|
|
29147
|
-
"cacheHitRatePercent",
|
|
29148
|
-
"planFiveHourUsedPercent",
|
|
29149
|
-
"planSevenDayUsedPercent"
|
|
29150
|
-
];
|
|
29151
|
-
var usageFields = /* @__PURE__ */ new Set([
|
|
29152
|
-
...tokenFields,
|
|
29153
|
-
...safeIntegerFields,
|
|
29154
|
-
...percentFields,
|
|
29155
|
-
"totalCostUsd",
|
|
29156
|
-
"totalCredits",
|
|
29157
|
-
"contextUsagePercent"
|
|
29158
|
-
]);
|
|
29159
|
-
function isRecord(value) {
|
|
29160
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
29161
|
-
}
|
|
29162
|
-
function parseHostUsage(value) {
|
|
29163
|
-
if (!isRecord(value))
|
|
29164
|
-
throw new Error("Harness Usage must be an object");
|
|
29165
|
-
const keys = Object.keys(value);
|
|
29166
|
-
if (keys.length === 0)
|
|
29167
|
-
throw new Error("Harness Usage must contain a reliable field");
|
|
29168
|
-
for (const key of keys) {
|
|
29169
|
-
if (!usageFields.has(key)) {
|
|
29170
|
-
throw new Error(`Harness Usage contains unknown field '${key}'`);
|
|
29171
|
-
}
|
|
29172
|
-
}
|
|
29173
|
-
for (const field of ["totalCredits", "contextUsagePercent"]) {
|
|
29174
|
-
const candidate = value[field];
|
|
29175
|
-
if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0)) {
|
|
29176
|
-
throw new Error(`Harness Usage '${field}' must be a finite non-negative number`);
|
|
29177
|
-
}
|
|
29178
|
-
}
|
|
29179
|
-
for (const field of tokenFields) {
|
|
29180
|
-
const candidate = value[field];
|
|
29181
|
-
if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
|
|
29182
|
-
throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
|
|
29183
|
-
}
|
|
29184
|
-
}
|
|
29185
|
-
for (const field of safeIntegerFields) {
|
|
29186
|
-
const candidate = value[field];
|
|
29187
|
-
if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isSafeInteger(candidate) || candidate < 0)) {
|
|
29188
|
-
throw new Error(`Harness Usage '${field}' must be a non-negative safe integer`);
|
|
29189
|
-
}
|
|
29190
|
-
}
|
|
29191
|
-
if (value.outputTokensPerSecond !== void 0 && (typeof value.outputTokensPerSecond !== "number" || !Number.isFinite(value.outputTokensPerSecond) || value.outputTokensPerSecond < 0)) {
|
|
29192
|
-
throw new Error("Harness Usage 'outputTokensPerSecond' must be a finite non-negative number");
|
|
29193
|
-
}
|
|
29194
|
-
if (value.totalCostUsd !== void 0 && (typeof value.totalCostUsd !== "number" || !Number.isFinite(value.totalCostUsd) || value.totalCostUsd < 0)) {
|
|
29195
|
-
throw new Error("Harness Usage 'totalCostUsd' must be a finite non-negative number");
|
|
29196
|
-
}
|
|
29197
|
-
for (const field of percentFields) {
|
|
29198
|
-
const candidate = value[field];
|
|
29199
|
-
if (candidate !== void 0 && (typeof candidate !== "number" || !Number.isFinite(candidate) || candidate < 0 || candidate > 100)) {
|
|
29200
|
-
throw new Error(`Harness Usage '${field}' must be between 0 and 100`);
|
|
29201
|
-
}
|
|
29202
|
-
}
|
|
29203
|
-
const hasContextUsed = value.contextUsedTokens !== void 0;
|
|
29204
|
-
const hasContextWindow = value.contextWindowTokens !== void 0;
|
|
29205
|
-
if (hasContextUsed !== hasContextWindow) {
|
|
29206
|
-
throw new Error("Harness Usage context fields must be provided together");
|
|
29207
|
-
}
|
|
29208
|
-
if (hasContextWindow && value.contextWindowTokens === 0) {
|
|
29209
|
-
throw new Error("Harness Usage 'contextWindowTokens' must be greater than zero");
|
|
29210
|
-
}
|
|
29211
|
-
if (value.planFiveHourResetsAtUnix !== void 0 && value.planFiveHourUsedPercent === void 0) {
|
|
29212
|
-
throw new Error("Harness Usage 'planFiveHourResetsAtUnix' must be provided with 'planFiveHourUsedPercent'");
|
|
29213
|
-
}
|
|
29214
|
-
if (value.planSevenDayResetsAtUnix !== void 0 && value.planSevenDayUsedPercent === void 0) {
|
|
29215
|
-
throw new Error("Harness Usage 'planSevenDayResetsAtUnix' must be provided with 'planSevenDayUsedPercent'");
|
|
29216
|
-
}
|
|
29217
|
-
return { ...value };
|
|
29218
|
-
}
|
|
29219
|
-
|
|
29220
29366
|
// ../../../node_modules/@qoder-ai/qoder-agent-sdk/dist/index.js
|
|
29221
29367
|
var dist_exports = {};
|
|
29222
29368
|
__export(dist_exports, {
|
|
@@ -51900,6 +52046,7 @@ var QoderAdapter = class {
|
|
|
51900
52046
|
harnessId;
|
|
51901
52047
|
#variant;
|
|
51902
52048
|
commandCatalog = QODER_FALLBACK_COMMAND_CATALOG;
|
|
52049
|
+
liveCommandCatalog = true;
|
|
51903
52050
|
#commandOverride;
|
|
51904
52051
|
#environment;
|
|
51905
52052
|
#platform;
|