@liberseek/boft-cli-win32-arm64 0.6.9 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +1 -1
  2. package/THIRD_PARTY_NOTICES.txt +12 -4
  3. package/app/codexhost-distribution.json +1 -1
  4. package/app/desktop-controller.mjs +287 -170
  5. package/app/host-runtime.mjs +2450 -1044
  6. package/app/plugins/antigravity/plugin.mjs +167 -16
  7. package/app/plugins/claude-code/plugin.mjs +311 -58
  8. package/app/plugins/codebuddy/plugin.mjs +2355 -894
  9. package/app/plugins/cursor-cli/plugin.mjs +35973 -10933
  10. package/app/plugins/deepseek-harness/plugin.mjs +125 -7
  11. package/app/plugins/enabled.json +4 -1
  12. package/app/plugins/grok/plugin.mjs +261 -97
  13. package/app/plugins/hermes/plugin.mjs +2486 -99
  14. package/app/plugins/kiro-cli/plugin.mjs +120 -3
  15. package/app/plugins/muse/plugin.mjs +110 -0
  16. package/app/plugins/omp/plugin.mjs +145 -10
  17. package/app/plugins/opencode/plugin.mjs +162 -46
  18. package/app/plugins/pi/plugin.mjs +2891 -1678
  19. package/app/plugins/qoder/assets/icon.svg +1 -0
  20. package/app/plugins/qoder/manifest.json +12 -0
  21. package/app/plugins/qoder/plugin.mjs +52352 -0
  22. package/app/plugins/qoder-cn/assets/icon.svg +1 -0
  23. package/app/plugins/qoder-cn/manifest.json +12 -0
  24. package/app/plugins/qoder-cn/plugin.mjs +52350 -0
  25. package/app/plugins/workbuddy/assets/icon.svg +29 -0
  26. package/app/plugins/workbuddy/manifest.json +14 -0
  27. package/app/plugins/workbuddy/plugin.mjs +25007 -0
  28. package/app/renderer-extension.js +6043 -1442
  29. package/bin/boft.exe +0 -0
  30. package/libexec/boft-node-repl.exe +0 -0
  31. package/libexec/boft-shim.exe +0 -0
  32. package/libexec/boft-updater.exe +0 -0
  33. package/licenses/Qoder-Agent-SDK-LICENSE.txt +7 -0
  34. package/licenses/QoderCN-Agent-SDK-LICENSE.txt +7 -0
  35. package/licenses/{opencodex-LICENSE.txt → tailwindcss-LICENSE.txt} +1 -1
  36. package/package.json +1 -1
@@ -14528,9 +14528,104 @@ function date4(params) {
14528
14528
  // ../../../node_modules/zod/v4/classic/external.js
14529
14529
  config(en_default());
14530
14530
 
14531
+ // ../../shared-contracts/dist/credential-imports.js
14532
+ var credentialSourceSchema = external_exports.object({
14533
+ id: external_exports.string().min(1).max(256),
14534
+ harnessId: external_exports.string().min(1),
14535
+ label: external_exports.string().min(1).max(512),
14536
+ provider: external_exports.enum(["openai-codex", "xai"])
14537
+ }).strict();
14538
+ var credentialImportNameSchema = external_exports.string().regex(/^[a-z][a-z0-9-]{0,47}$/);
14539
+ var credentialImportRecordSchema = external_exports.object({
14540
+ name: credentialImportNameSchema,
14541
+ source: credentialSourceSchema,
14542
+ importedAt: external_exports.string()
14543
+ }).strict();
14544
+ var credentialImportsRequestSchema = external_exports.discriminatedUnion("action", [
14545
+ external_exports.object({ action: external_exports.literal("list") }).strict(),
14546
+ external_exports.object({
14547
+ action: external_exports.literal("import"),
14548
+ sourceId: external_exports.string().min(1).max(256),
14549
+ name: credentialImportNameSchema,
14550
+ confirmed: external_exports.literal(true)
14551
+ }).strict(),
14552
+ external_exports.object({
14553
+ action: external_exports.literal("reimport"),
14554
+ sourceId: external_exports.string().min(1).max(256),
14555
+ name: credentialImportNameSchema,
14556
+ confirmed: external_exports.literal(true)
14557
+ }).strict(),
14558
+ external_exports.object({
14559
+ action: external_exports.literal("remove"),
14560
+ name: credentialImportNameSchema,
14561
+ confirmed: external_exports.literal(true)
14562
+ }).strict()
14563
+ ]);
14564
+ var credentialOtherLoginSchema = external_exports.object({
14565
+ provider: external_exports.string().min(1).max(128),
14566
+ type: external_exports.enum(["oauth", "api_key", "unknown"]),
14567
+ /** Best-effort account label (e.g. the email in a Codex token), derived locally when present. */
14568
+ label: external_exports.string().min(1).max(512).optional(),
14569
+ /** Recognized credential vendor, derived from the OAuth token issuer. Absent when unknown. */
14570
+ vendor: external_exports.enum(["openai-codex", "xai"]).optional()
14571
+ }).strict();
14572
+ var credentialImportsResultSchema = external_exports.object({
14573
+ sources: external_exports.array(credentialSourceSchema),
14574
+ targets: external_exports.array(external_exports.object({
14575
+ harnessId: external_exports.string(),
14576
+ providers: external_exports.array(external_exports.enum(["openai-codex", "xai"])),
14577
+ imports: external_exports.array(credentialImportRecordSchema),
14578
+ others: external_exports.array(credentialOtherLoginSchema).default([])
14579
+ }).strict())
14580
+ }).strict();
14581
+ var credentialImportsParamsSchema = external_exports.object({
14582
+ targetHarnessId: external_exports.string().min(1).max(128).optional(),
14583
+ request: credentialImportsRequestSchema
14584
+ }).strict();
14585
+
14531
14586
  // ../../shared-contracts/dist/version.js
14532
14587
  var WORKSPACE_CONTRACT_VERSION = 1;
14533
14588
 
14589
+ // ../../shared-contracts/dist/idle-release.js
14590
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MIN = 5;
14591
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MAX = 1440;
14592
+ var idleReleaseSettingsSchema = external_exports.strictObject({
14593
+ enabled: external_exports.boolean(),
14594
+ timeoutMinutes: external_exports.number().int().min(IDLE_RELEASE_TIMEOUT_MINUTES_MIN).max(IDLE_RELEASE_TIMEOUT_MINUTES_MAX)
14595
+ });
14596
+ var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
14597
+ enabled: false,
14598
+ timeoutMinutes: 30
14599
+ });
14600
+
14601
+ // ../../shared-contracts/dist/loaded-sessions.js
14602
+ var loadedSessionStateSchema = external_exports.enum([
14603
+ "idle",
14604
+ "running",
14605
+ "busy",
14606
+ "closing",
14607
+ "failed",
14608
+ "blocked"
14609
+ ]);
14610
+ var loadedSessionReasonSchema = external_exports.enum([
14611
+ "none",
14612
+ "disabled",
14613
+ "timeout",
14614
+ "operation",
14615
+ "background",
14616
+ "identity",
14617
+ "persistence",
14618
+ "closeFailed"
14619
+ ]);
14620
+ var loadedSessionsSchema = external_exports.array(external_exports.strictObject({
14621
+ threadId: external_exports.string(),
14622
+ title: external_exports.string(),
14623
+ harnessId: external_exports.string(),
14624
+ state: loadedSessionStateSchema,
14625
+ reason: loadedSessionReasonSchema,
14626
+ inactiveMs: external_exports.number().nonnegative()
14627
+ }));
14628
+
14534
14629
  // ../../shared-contracts/dist/ids.js
14535
14630
  var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
14536
14631
  message: "Identifier must not be empty or whitespace"
@@ -15037,6 +15132,8 @@ var pluginPresentationShape = {
15037
15132
  id: harnessPluginIdSchema,
15038
15133
  name: external_exports.string().trim().min(1).max(128),
15039
15134
  version: external_exports.string().min(1).max(128),
15135
+ /** The factory accepts a persisted local entrypoint through its construction context. */
15136
+ launchCommand: external_exports.literal(true).optional(),
15040
15137
  links: external_exports.object({
15041
15138
  documentation: documentationUrlSchema.optional(),
15042
15139
  installation: documentationUrlSchema.optional()
@@ -15074,6 +15171,19 @@ var harnessPluginRouteSchema = external_exports.object({
15074
15171
  permissionModeId: harnessPermissionModeIdSchema.optional()
15075
15172
  }).strict();
15076
15173
 
15174
+ // ../../shared-contracts/dist/harness-launch-settings.js
15175
+ var harnessLaunchPathSchema = external_exports.string().trim().min(1).max(4096).refine((value) => !/[\u0000\r\n]/u.test(value), "Invalid entrypoint path");
15176
+ var harnessLaunchSettingsGetSchema = external_exports.object({
15177
+ harnessId: harnessPluginIdSchema
15178
+ }).strict();
15179
+ var harnessLaunchSettingsSetSchema = harnessLaunchSettingsGetSchema.extend({
15180
+ path: harnessLaunchPathSchema.nullable()
15181
+ });
15182
+ var harnessLaunchSettingsSchema = external_exports.object({
15183
+ path: harnessLaunchPathSchema.nullable(),
15184
+ restartRequired: external_exports.boolean()
15185
+ }).strict();
15186
+
15077
15187
  // ../../shared-contracts/dist/codex-accounts.js
15078
15188
  var accountIdSchema = external_exports.string().min(1).max(256).regex(/^[A-Za-z0-9._~-]+$/u);
15079
15189
  var nonBlankTextSchema3 = external_exports.string().trim().min(1);
@@ -17756,6 +17866,7 @@ var infoSchema = external_exports.object({
17756
17866
  });
17757
17867
  var AntigravitySubagents = class {
17758
17868
  #states = /* @__PURE__ */ new Map();
17869
+ #lastObservedAt = /* @__PURE__ */ new Map();
17759
17870
  #transcripts = /* @__PURE__ */ new Map();
17760
17871
  #items = /* @__PURE__ */ new Map();
17761
17872
  #options;
@@ -17851,18 +17962,27 @@ var AntigravitySubagents = class {
17851
17962
  return;
17852
17963
  const parentId = this.#options.parentId();
17853
17964
  const port = await this.#options.port();
17854
- if (!parentId || port === null)
17965
+ if (!parentId || port === null) {
17966
+ for (const id of this.#states.keys())
17967
+ this.#expireUnobserved(id);
17968
+ if (this.#ended && !this.running)
17969
+ this.stop();
17855
17970
  return;
17971
+ }
17856
17972
  for (const [id, previous] of this.#states) {
17857
17973
  if (this.#stopped)
17858
17974
  return;
17859
17975
  let status = previous.status;
17976
+ let statusObserved = false;
17860
17977
  try {
17861
17978
  const value = await subagentRpc(port, id, "GetCascadeTrajectory");
17862
17979
  const observed = subagentRunStatus(value, parentId);
17863
17980
  if (observed !== "completed" || status !== "interrupted" && status !== "failed") {
17864
17981
  status = observed ?? status;
17865
17982
  }
17983
+ statusObserved = observed !== null;
17984
+ if (statusObserved)
17985
+ this.#lastObservedAt.set(id, Date.now());
17866
17986
  } catch {
17867
17987
  }
17868
17988
  const transcript = await readSubagentTranscript({
@@ -17893,6 +18013,8 @@ var AntigravitySubagents = class {
17893
18013
  this.#options.emit({ type: "subagent.transcript.changed", nativeSubagentId: id });
17894
18014
  }
17895
18015
  }
18016
+ if (!statusObserved)
18017
+ this.#expireUnobserved(id);
17896
18018
  }
17897
18019
  if (this.#ended && !this.running)
17898
18020
  this.stop();
@@ -17903,9 +18025,35 @@ var AntigravitySubagents = class {
17903
18025
  this.#complete(delegation, outcome);
17904
18026
  }
17905
18027
  this.#ended = true;
18028
+ const now = Date.now();
18029
+ for (const [id, state] of this.#states) {
18030
+ if (state.status === "running" || state.status === "pending") {
18031
+ this.#lastObservedAt.set(id, now);
18032
+ }
18033
+ }
17906
18034
  if (!this.running)
17907
18035
  this.stop();
17908
18036
  }
18037
+ #expireUnobserved(id) {
18038
+ if (!this.#ended || this.#stopped)
18039
+ return;
18040
+ const state = this.#states.get(id);
18041
+ if (!state || state.status !== "running" && state.status !== "pending")
18042
+ return;
18043
+ const now = Date.now();
18044
+ if (now - (this.#lastObservedAt.get(id) ?? now) < this.#options.observationTimeoutMs)
18045
+ return;
18046
+ const resultSummary = "Observation timed out; native Subagent completion could not be confirmed.";
18047
+ this.#states.set(id, { ...state, status: "interrupted", resultSummary });
18048
+ this.#options.emit({
18049
+ type: "subagent.state.changed",
18050
+ nativeSubagentId: id,
18051
+ status: "interrupted",
18052
+ resultSummary
18053
+ });
18054
+ this.#options.emit({ type: "subagent.transcript.changed", nativeSubagentId: id });
18055
+ this.#lastObservedAt.delete(id);
18056
+ }
17909
18057
  cancel() {
17910
18058
  return this.#cancellation ??= this.#cancelNative();
17911
18059
  }
@@ -17957,6 +18105,7 @@ var AntigravitySubagents = class {
17957
18105
  stop() {
17958
18106
  this.#stopped = true;
17959
18107
  clearInterval(this.#timer);
18108
+ this.#lastObservedAt.clear();
17960
18109
  this.#settled?.();
17961
18110
  }
17962
18111
  #watch() {
@@ -17990,6 +18139,7 @@ var antigravityHarnessId = harnessIdSchema.parse("antigravity");
17990
18139
  var DEFAULT_INSPECT_TIMEOUT_MS = 2e4;
17991
18140
  var DEFAULT_PRINT_TIMEOUT = "30m";
17992
18141
  var DEFAULT_TOOL_OUTPUT_LIMIT = 64e3;
18142
+ var DEFAULT_SUBAGENT_OBSERVATION_TIMEOUT_MS = 3e4;
17993
18143
  var CONTEXT_USAGE_TIMEOUT_MS = 8e3;
17994
18144
  var CONTEXT_USAGE_RETRY_MS = 100;
17995
18145
  var TRAJECTORY_TIMEOUT_MS = 2e3;
@@ -18235,6 +18385,7 @@ var AntigravitySession = class {
18235
18385
  #onClosed;
18236
18386
  #printTimeout;
18237
18387
  #toolOutputLimit;
18388
+ #subagentObservationTimeoutMs;
18238
18389
  #history;
18239
18390
  #subagentObservers = /* @__PURE__ */ new Set();
18240
18391
  #active = null;
@@ -18258,6 +18409,7 @@ var AntigravitySession = class {
18258
18409
  this.#printTimeout = input.printTimeout;
18259
18410
  this.#thinkingOptionId = input.thinkingOptionId ?? input.history.thinkingOptionId;
18260
18411
  this.#toolOutputLimit = input.toolOutputLimit;
18412
+ this.#subagentObservationTimeoutMs = input.subagentObservationTimeoutMs;
18261
18413
  this.#onClosed = input.onClosed;
18262
18414
  this.initialState = this.#state();
18263
18415
  this.outputs = this.#channel.outputs;
@@ -18411,6 +18563,7 @@ var AntigravitySession = class {
18411
18563
  }
18412
18564
  const active = {
18413
18565
  command,
18566
+ model: this.#model,
18414
18567
  process: child,
18415
18568
  exited: new Promise((resolve) => child.once("close", () => resolve())),
18416
18569
  questions,
@@ -18420,6 +18573,7 @@ var AntigravitySession = class {
18420
18573
  port: () => this.#languageServerPort(active),
18421
18574
  cwd: this.#cwd,
18422
18575
  outputLimit: this.#toolOutputLimit,
18576
+ observationTimeoutMs: this.#subagentObservationTimeoutMs,
18423
18577
  initialStates: this.#history.snapshot().flatMap((turn) => turn.items.flatMap(({ item }) => item.type === "subagentDelegation" ? item.subagents : [])),
18424
18578
  emit: (event) => {
18425
18579
  if (event.type === "subagent.state.changed") {
@@ -18579,7 +18733,7 @@ ${line}`).slice(-8e3);
18579
18733
  if (event.step_update.conversation_id !== this.#nativeRef?.nativeSessionId)
18580
18734
  return;
18581
18735
  await this.#handleStep(active, event.step_update);
18582
- const usage = hostUsage(event.step_update.usage, this.#model?.id);
18736
+ const usage = hostUsage(event.step_update.usage, active.model?.id);
18583
18737
  if (usage)
18584
18738
  this.#publishUsage(active, usage);
18585
18739
  this.#ensureContextUsage(active, event.step_update.conversation_id);
@@ -18593,7 +18747,7 @@ ${line}`).slice(-8e3);
18593
18747
  async #handleResult(active, event) {
18594
18748
  if (this.#active !== active)
18595
18749
  return;
18596
- const usage = hostUsage(event.result.usage, this.#model?.id);
18750
+ const usage = hostUsage(event.result.usage, active.model?.id);
18597
18751
  if (usage)
18598
18752
  this.#publishUsage(active, usage);
18599
18753
  this.#ensureContextUsage(active, event.result.conversation_id);
@@ -18665,7 +18819,7 @@ ${line}`).slice(-8e3);
18665
18819
  #ensureContextUsage(active, conversationId) {
18666
18820
  if (active.contextUsagePromise)
18667
18821
  return;
18668
- active.contextUsagePromise = pollAntigravityContextUsage(active.logPath, conversationId, this.#model?.id, () => active.receivedResult || active.cancellationRequested || active.process.exitCode !== null);
18822
+ active.contextUsagePromise = pollAntigravityContextUsage(active.logPath, conversationId, active.model?.id, () => active.receivedResult || active.cancellationRequested || active.process.exitCode !== null);
18669
18823
  }
18670
18824
  async #handleStep(active, step) {
18671
18825
  if (step.step_type === "subagent") {
@@ -18913,12 +19067,6 @@ ${line}`).slice(-8e3);
18913
19067
  return { ok: true, value: { cancellationRequested: true } };
18914
19068
  }
18915
19069
  #selectModel(command) {
18916
- if (this.isActive) {
18917
- return {
18918
- ok: false,
18919
- error: { code: "sessionBusy", message: "Turn is active", retryable: true }
18920
- };
18921
- }
18922
19070
  this.#model = harnessModelRefSchema.parse(command.model);
18923
19071
  const available = antigravityAvailableThinkingOptions(this.#catalog, this.#model);
18924
19072
  if (this.#thinkingOptionId && !available?.some(({ id }) => id === this.#thinkingOptionId)) {
@@ -18929,12 +19077,6 @@ ${line}`).slice(-8e3);
18929
19077
  return { ok: true, value: { completed: true } };
18930
19078
  }
18931
19079
  #selectThinking(command) {
18932
- if (this.isActive) {
18933
- return {
18934
- ok: false,
18935
- error: { code: "sessionBusy", message: "Turn is active", retryable: true }
18936
- };
18937
- }
18938
19080
  const requested = harnessThinkingOptionIdSchema.safeParse(command.thinkingOptionId);
18939
19081
  if (!requested.success) {
18940
19082
  return {
@@ -19043,6 +19185,7 @@ var AntigravityAdapter = class {
19043
19185
  #printTimeout;
19044
19186
  #sessions = /* @__PURE__ */ new Set();
19045
19187
  #toolOutputLimit;
19188
+ #subagentObservationTimeoutMs;
19046
19189
  #closed = false;
19047
19190
  #quota = null;
19048
19191
  #quotaCwd = null;
@@ -19054,6 +19197,11 @@ var AntigravityAdapter = class {
19054
19197
  this.#inspectTimeoutMs = options.inspectTimeoutMs ?? DEFAULT_INSPECT_TIMEOUT_MS;
19055
19198
  this.#printTimeout = options.printTimeout ?? DEFAULT_PRINT_TIMEOUT;
19056
19199
  this.#toolOutputLimit = options.toolOutputLimit ?? DEFAULT_TOOL_OUTPUT_LIMIT;
19200
+ const subagentObservationTimeoutMs = options.subagentObservationTimeoutMs ?? DEFAULT_SUBAGENT_OBSERVATION_TIMEOUT_MS;
19201
+ if (!Number.isFinite(subagentObservationTimeoutMs) || subagentObservationTimeoutMs <= 0) {
19202
+ throw new RangeError("subagentObservationTimeoutMs must be a finite positive number");
19203
+ }
19204
+ this.#subagentObservationTimeoutMs = subagentObservationTimeoutMs;
19057
19205
  }
19058
19206
  async inspect(input = {}) {
19059
19207
  if (this.#closed) {
@@ -19236,6 +19384,7 @@ var AntigravityAdapter = class {
19236
19384
  printTimeout: this.#printTimeout,
19237
19385
  ...params.thinkingOptionId ? { thinkingOptionId: params.thinkingOptionId } : {},
19238
19386
  toolOutputLimit: this.#toolOutputLimit,
19387
+ subagentObservationTimeoutMs: this.#subagentObservationTimeoutMs,
19239
19388
  onClosed: () => this.#sessions.delete(session2)
19240
19389
  });
19241
19390
  this.#sessions.add(session2);
@@ -19271,6 +19420,7 @@ var AntigravityAdapter = class {
19271
19420
  printTimeout: this.#printTimeout,
19272
19421
  ...params.thinkingOptionId ? { thinkingOptionId: params.thinkingOptionId } : {},
19273
19422
  toolOutputLimit: this.#toolOutputLimit,
19423
+ subagentObservationTimeoutMs: this.#subagentObservationTimeoutMs,
19274
19424
  onClosed: () => this.#sessions.delete(session2)
19275
19425
  });
19276
19426
  this.#sessions.add(session2);
@@ -19327,6 +19477,7 @@ var AntigravityAdapter = class {
19327
19477
  printTimeout: this.#printTimeout,
19328
19478
  ...thinkingOptionId ? { thinkingOptionId } : {},
19329
19479
  toolOutputLimit: this.#toolOutputLimit,
19480
+ subagentObservationTimeoutMs: this.#subagentObservationTimeoutMs,
19330
19481
  onClosed: () => this.#sessions.delete(session)
19331
19482
  });
19332
19483
  this.#sessions.add(session);