@liberseek/boft-cli-win32-arm64 0.6.9 → 0.7.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.
@@ -18687,6 +18687,46 @@ var ClientSideConnection = class {
18687
18687
  // ../../shared-contracts/dist/version.js
18688
18688
  var WORKSPACE_CONTRACT_VERSION = 1;
18689
18689
 
18690
+ // ../../shared-contracts/dist/idle-release.js
18691
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MIN = 5;
18692
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MAX = 1440;
18693
+ var idleReleaseSettingsSchema = external_exports.strictObject({
18694
+ enabled: external_exports.boolean(),
18695
+ timeoutMinutes: external_exports.number().int().min(IDLE_RELEASE_TIMEOUT_MINUTES_MIN).max(IDLE_RELEASE_TIMEOUT_MINUTES_MAX)
18696
+ });
18697
+ var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
18698
+ enabled: false,
18699
+ timeoutMinutes: 30
18700
+ });
18701
+
18702
+ // ../../shared-contracts/dist/loaded-sessions.js
18703
+ var loadedSessionStateSchema = external_exports.enum([
18704
+ "idle",
18705
+ "running",
18706
+ "busy",
18707
+ "closing",
18708
+ "failed",
18709
+ "blocked"
18710
+ ]);
18711
+ var loadedSessionReasonSchema = external_exports.enum([
18712
+ "none",
18713
+ "disabled",
18714
+ "timeout",
18715
+ "operation",
18716
+ "background",
18717
+ "identity",
18718
+ "persistence",
18719
+ "closeFailed"
18720
+ ]);
18721
+ var loadedSessionsSchema = external_exports.array(external_exports.strictObject({
18722
+ threadId: external_exports.string(),
18723
+ title: external_exports.string(),
18724
+ harnessId: external_exports.string(),
18725
+ state: loadedSessionStateSchema,
18726
+ reason: loadedSessionReasonSchema,
18727
+ inactiveMs: external_exports.number().nonnegative()
18728
+ }));
18729
+
18690
18730
  // ../../shared-contracts/dist/ids.js
18691
18731
  var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
18692
18732
  message: "Identifier must not be empty or whitespace"
@@ -21490,6 +21530,7 @@ function mapGrokReplay(replay, harnessId, sessionId, cwd, knownTurnRefs = [], to
21490
21530
  const fileItem = {
21491
21531
  type: "fileChange",
21492
21532
  itemId: stableId("file-change", turnIndex, ++messageIndex),
21533
+ sourceItemIds: [tool.itemId],
21493
21534
  changes
21494
21535
  };
21495
21536
  items.push({ item: fileItem, outcome: { status: "succeeded" } });
@@ -22164,6 +22205,12 @@ async function rewindGrokLastTurn(input) {
22164
22205
 
22165
22206
  // dist/grok-plan-review.js
22166
22207
  var GROK_PLAN_DECISION_ID = "plan-decision";
22208
+ var GROK_PLAN_APPROVE_VALUE = "approve";
22209
+ var GROK_PLAN_APPROVE_LABEL = "Approve plan and exit plan mode";
22210
+ var GROK_PLAN_STAY_VALUE = "stay";
22211
+ var GROK_PLAN_STAY_LABEL = "Stay in plan mode";
22212
+ var GROK_PLAN_OUTCOME_APPROVED = "approved";
22213
+ var GROK_PLAN_OUTCOME_CANCELLED = "cancelled";
22167
22214
  function isRecord10(value) {
22168
22215
  return typeof value === "object" && value !== null && !Array.isArray(value);
22169
22216
  }
@@ -22202,19 +22249,23 @@ function createGrokPlanReview(request, interactionId, turnId) {
22202
22249
  prompt: request.plan ? `${warning}
22203
22250
 
22204
22251
  ${request.plan}` : "Grok did not provide plan text. Stay in plan mode and ask Grok to present the plan before approving it.",
22205
- options: [
22252
+ options: request.plan ? [
22206
22253
  {
22207
- value: "stay",
22208
- label: "Stay in plan mode",
22209
- description: "Do not approve the plan or begin implementation."
22254
+ value: GROK_PLAN_APPROVE_VALUE,
22255
+ label: GROK_PLAN_APPROVE_LABEL,
22256
+ description: "Leave plan mode and begin implementation."
22210
22257
  },
22211
- ...request.plan ? [
22212
- {
22213
- value: "approve",
22214
- label: "Approve plan and exit plan mode",
22215
- description: "Leave plan mode and begin implementation."
22216
- }
22217
- ] : []
22258
+ {
22259
+ value: GROK_PLAN_STAY_VALUE,
22260
+ label: GROK_PLAN_STAY_LABEL,
22261
+ description: "Do not approve the plan or begin implementation."
22262
+ }
22263
+ ] : [
22264
+ {
22265
+ value: GROK_PLAN_STAY_VALUE,
22266
+ label: GROK_PLAN_STAY_LABEL,
22267
+ description: "Do not approve the plan or begin implementation."
22268
+ }
22218
22269
  ],
22219
22270
  multiple: false,
22220
22271
  allowOther: false,
@@ -22224,12 +22275,13 @@ ${request.plan}` : "Grok did not provide plan text. Stay in plan mode and ask Gr
22224
22275
  };
22225
22276
  }
22226
22277
  function grokPlanRejectedResponse() {
22227
- return { approved: false, feedback: "" };
22278
+ return { outcome: GROK_PLAN_OUTCOME_CANCELLED };
22228
22279
  }
22229
22280
  function grokExitPlanModeResponse(request, response) {
22281
+ const decision = response.answers[GROK_PLAN_DECISION_ID]?.[0];
22282
+ const approved = !response.cancelled && request.plan !== null && (decision === GROK_PLAN_APPROVE_VALUE || decision === GROK_PLAN_APPROVE_LABEL);
22230
22283
  return {
22231
- approved: !response.cancelled && request.plan !== null && response.answers[GROK_PLAN_DECISION_ID]?.[0] === "approve",
22232
- feedback: ""
22284
+ outcome: approved ? GROK_PLAN_OUTCOME_APPROVED : GROK_PLAN_OUTCOME_CANCELLED
22233
22285
  };
22234
22286
  }
22235
22287
 
@@ -24059,7 +24111,7 @@ var GrokHarnessSession = class {
24059
24111
  return this.#configure(model, parsed.data);
24060
24112
  }
24061
24113
  async #configure(model, thinkingOptionId) {
24062
- if (this.#active || this.#configuring) {
24114
+ if (this.#configuring) {
24063
24115
  return {
24064
24116
  ok: false,
24065
24117
  error: {
@@ -24545,6 +24597,7 @@ var GrokHarnessSession = class {
24545
24597
  const fileItem = {
24546
24598
  type: "fileChange",
24547
24599
  itemId: hostItemIdSchema.parse(this.#randomUUID()),
24600
+ sourceItemIds: [tool.item.itemId],
24548
24601
  changes
24549
24602
  };
24550
24603
  this.#event({ type: "item.started", turnId: active.command.turnId, item: fileItem });
@@ -14525,6 +14525,46 @@ config(en_default());
14525
14525
  // ../../shared-contracts/dist/version.js
14526
14526
  var WORKSPACE_CONTRACT_VERSION = 1;
14527
14527
 
14528
+ // ../../shared-contracts/dist/idle-release.js
14529
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MIN = 5;
14530
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MAX = 1440;
14531
+ var idleReleaseSettingsSchema = external_exports.strictObject({
14532
+ enabled: external_exports.boolean(),
14533
+ timeoutMinutes: external_exports.number().int().min(IDLE_RELEASE_TIMEOUT_MINUTES_MIN).max(IDLE_RELEASE_TIMEOUT_MINUTES_MAX)
14534
+ });
14535
+ var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
14536
+ enabled: false,
14537
+ timeoutMinutes: 30
14538
+ });
14539
+
14540
+ // ../../shared-contracts/dist/loaded-sessions.js
14541
+ var loadedSessionStateSchema = external_exports.enum([
14542
+ "idle",
14543
+ "running",
14544
+ "busy",
14545
+ "closing",
14546
+ "failed",
14547
+ "blocked"
14548
+ ]);
14549
+ var loadedSessionReasonSchema = external_exports.enum([
14550
+ "none",
14551
+ "disabled",
14552
+ "timeout",
14553
+ "operation",
14554
+ "background",
14555
+ "identity",
14556
+ "persistence",
14557
+ "closeFailed"
14558
+ ]);
14559
+ var loadedSessionsSchema = external_exports.array(external_exports.strictObject({
14560
+ threadId: external_exports.string(),
14561
+ title: external_exports.string(),
14562
+ harnessId: external_exports.string(),
14563
+ state: loadedSessionStateSchema,
14564
+ reason: loadedSessionReasonSchema,
14565
+ inactiveMs: external_exports.number().nonnegative()
14566
+ }));
14567
+
14528
14568
  // ../../shared-contracts/dist/ids.js
14529
14569
  var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
14530
14570
  message: "Identifier must not be empty or whitespace"
@@ -21257,9 +21297,6 @@ var HermesSession = class {
21257
21297
  }
21258
21298
  }
21259
21299
  async #selectModel(command) {
21260
- if (this.#activeTurn) {
21261
- return err("sessionBusy", "Model selection conflicts with an active Turn", true);
21262
- }
21263
21300
  const native = decodeHermesModelRefId(command.model.id);
21264
21301
  if (!native) {
21265
21302
  return err("invalidRequest", "Model Ref does not belong to Hermes");
@@ -14526,6 +14526,46 @@ config(en_default());
14526
14526
  // ../../shared-contracts/dist/version.js
14527
14527
  var WORKSPACE_CONTRACT_VERSION = 1;
14528
14528
 
14529
+ // ../../shared-contracts/dist/idle-release.js
14530
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MIN = 5;
14531
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MAX = 1440;
14532
+ var idleReleaseSettingsSchema = external_exports.strictObject({
14533
+ enabled: external_exports.boolean(),
14534
+ timeoutMinutes: external_exports.number().int().min(IDLE_RELEASE_TIMEOUT_MINUTES_MIN).max(IDLE_RELEASE_TIMEOUT_MINUTES_MAX)
14535
+ });
14536
+ var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
14537
+ enabled: false,
14538
+ timeoutMinutes: 30
14539
+ });
14540
+
14541
+ // ../../shared-contracts/dist/loaded-sessions.js
14542
+ var loadedSessionStateSchema = external_exports.enum([
14543
+ "idle",
14544
+ "running",
14545
+ "busy",
14546
+ "closing",
14547
+ "failed",
14548
+ "blocked"
14549
+ ]);
14550
+ var loadedSessionReasonSchema = external_exports.enum([
14551
+ "none",
14552
+ "disabled",
14553
+ "timeout",
14554
+ "operation",
14555
+ "background",
14556
+ "identity",
14557
+ "persistence",
14558
+ "closeFailed"
14559
+ ]);
14560
+ var loadedSessionsSchema = external_exports.array(external_exports.strictObject({
14561
+ threadId: external_exports.string(),
14562
+ title: external_exports.string(),
14563
+ harnessId: external_exports.string(),
14564
+ state: loadedSessionStateSchema,
14565
+ reason: loadedSessionReasonSchema,
14566
+ inactiveMs: external_exports.number().nonnegative()
14567
+ }));
14568
+
14529
14569
  // ../../shared-contracts/dist/ids.js
14530
14570
  var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
14531
14571
  message: "Identifier must not be empty or whitespace"
@@ -21708,6 +21748,7 @@ var KiroTurnOutput = class {
21708
21748
  const file2 = {
21709
21749
  type: "fileChange",
21710
21750
  itemId: hostItemIdSchema.parse(`file-${tool.item.itemId}`),
21751
+ sourceItemIds: [tool.item.itemId],
21711
21752
  changes: changes ?? []
21712
21753
  };
21713
21754
  if (tool.file) {
@@ -22091,6 +22132,10 @@ async function readKiroSnapshot(location) {
22091
22132
  const completedAtMs = Date.parse(end?.timestamp ?? "");
22092
22133
  const hasTiming = Number.isFinite(startedAtMs) && Number.isFinite(completedAtMs) && startedAtMs >= 0 && completedAtMs >= startedAtMs;
22093
22134
  const lastContent = turn.rows.findLast((row) => row.payload.type === "tool_call" || row.payload.type === "assistant" && kiroVisibleText(historyText(row.payload)).trim().length > 0 && !["Reasoning", "Summary"].includes(String(row.payload.operationType)));
22135
+ const toolSources = new Map(turn.rows.filter((row) => row.payload.type === "tool_call").map((row) => [
22136
+ row.payload.toolCallId,
22137
+ hostItemIdSchema.parse(`kiro-${nativeSessionId}-${row.id}`)
22138
+ ]));
22094
22139
  for (const row of turn.rows) {
22095
22140
  const type = row.payload?.type;
22096
22141
  const itemId = hostItemIdSchema.parse(`kiro-${nativeSessionId}-${row.id}`);
@@ -22141,10 +22186,12 @@ async function readKiroSnapshot(location) {
22141
22186
  } else if (type === "tool_result") {
22142
22187
  const changes = row.payload.success === true ? projectKiroFileChanges(row.payload.content, location.cwd) : null;
22143
22188
  if (changes) {
22189
+ const sourceItemId = toolSources.get(row.payload.toolCallId);
22144
22190
  items.push({
22145
22191
  item: {
22146
22192
  type: "fileChange",
22147
22193
  itemId,
22194
+ sourceItemIds: sourceItemId ? [sourceItemId] : [],
22148
22195
  changes
22149
22196
  },
22150
22197
  outcome: { status: "succeeded" }
@@ -23005,12 +23052,12 @@ var KiroSession = class {
23005
23052
  return { ok: true, value: { accepted: true } };
23006
23053
  }
23007
23054
  async #selectModel(command) {
23008
- if (this.#activeTurnId !== null || this.#configBusy) {
23055
+ if (this.#configBusy) {
23009
23056
  return {
23010
23057
  ok: false,
23011
23058
  error: {
23012
23059
  code: "sessionBusy",
23013
- message: "Cannot change model while turn is active",
23060
+ message: "Another configuration change is in progress",
23014
23061
  retryable: false
23015
23062
  }
23016
23063
  };
@@ -23101,7 +23148,7 @@ var KiroSession = class {
23101
23148
  });
23102
23149
  }
23103
23150
  async #selectThinking(command) {
23104
- if (this.#activeTurnId !== null || this.#configBusy) {
23151
+ if (this.#configBusy) {
23105
23152
  return {
23106
23153
  ok: false,
23107
23154
  error: { code: "sessionBusy", message: "Session is busy", retryable: true }
@@ -14777,6 +14777,46 @@ config(en_default());
14777
14777
  // ../../shared-contracts/dist/version.js
14778
14778
  var WORKSPACE_CONTRACT_VERSION = 1;
14779
14779
 
14780
+ // ../../shared-contracts/dist/idle-release.js
14781
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MIN = 5;
14782
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MAX = 1440;
14783
+ var idleReleaseSettingsSchema = external_exports.strictObject({
14784
+ enabled: external_exports.boolean(),
14785
+ timeoutMinutes: external_exports.number().int().min(IDLE_RELEASE_TIMEOUT_MINUTES_MIN).max(IDLE_RELEASE_TIMEOUT_MINUTES_MAX)
14786
+ });
14787
+ var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
14788
+ enabled: false,
14789
+ timeoutMinutes: 30
14790
+ });
14791
+
14792
+ // ../../shared-contracts/dist/loaded-sessions.js
14793
+ var loadedSessionStateSchema = external_exports.enum([
14794
+ "idle",
14795
+ "running",
14796
+ "busy",
14797
+ "closing",
14798
+ "failed",
14799
+ "blocked"
14800
+ ]);
14801
+ var loadedSessionReasonSchema = external_exports.enum([
14802
+ "none",
14803
+ "disabled",
14804
+ "timeout",
14805
+ "operation",
14806
+ "background",
14807
+ "identity",
14808
+ "persistence",
14809
+ "closeFailed"
14810
+ ]);
14811
+ var loadedSessionsSchema = external_exports.array(external_exports.strictObject({
14812
+ threadId: external_exports.string(),
14813
+ title: external_exports.string(),
14814
+ harnessId: external_exports.string(),
14815
+ state: loadedSessionStateSchema,
14816
+ reason: loadedSessionReasonSchema,
14817
+ inactiveMs: external_exports.number().nonnegative()
14818
+ }));
14819
+
14780
14820
  // ../../shared-contracts/dist/ids.js
14781
14821
  var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
14782
14822
  message: "Identifier must not be empty or whitespace"
@@ -15046,6 +15046,46 @@ config(en_default());
15046
15046
  // ../../shared-contracts/dist/version.js
15047
15047
  var WORKSPACE_CONTRACT_VERSION = 1;
15048
15048
 
15049
+ // ../../shared-contracts/dist/idle-release.js
15050
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MIN = 5;
15051
+ var IDLE_RELEASE_TIMEOUT_MINUTES_MAX = 1440;
15052
+ var idleReleaseSettingsSchema = external_exports.strictObject({
15053
+ enabled: external_exports.boolean(),
15054
+ timeoutMinutes: external_exports.number().int().min(IDLE_RELEASE_TIMEOUT_MINUTES_MIN).max(IDLE_RELEASE_TIMEOUT_MINUTES_MAX)
15055
+ });
15056
+ var DEFAULT_IDLE_RELEASE_SETTINGS = Object.freeze({
15057
+ enabled: false,
15058
+ timeoutMinutes: 30
15059
+ });
15060
+
15061
+ // ../../shared-contracts/dist/loaded-sessions.js
15062
+ var loadedSessionStateSchema = external_exports.enum([
15063
+ "idle",
15064
+ "running",
15065
+ "busy",
15066
+ "closing",
15067
+ "failed",
15068
+ "blocked"
15069
+ ]);
15070
+ var loadedSessionReasonSchema = external_exports.enum([
15071
+ "none",
15072
+ "disabled",
15073
+ "timeout",
15074
+ "operation",
15075
+ "background",
15076
+ "identity",
15077
+ "persistence",
15078
+ "closeFailed"
15079
+ ]);
15080
+ var loadedSessionsSchema = external_exports.array(external_exports.strictObject({
15081
+ threadId: external_exports.string(),
15082
+ title: external_exports.string(),
15083
+ harnessId: external_exports.string(),
15084
+ state: loadedSessionStateSchema,
15085
+ reason: loadedSessionReasonSchema,
15086
+ inactiveMs: external_exports.number().nonnegative()
15087
+ }));
15088
+
15049
15089
  // ../../shared-contracts/dist/ids.js
15050
15090
  var opaqueIdSchema = external_exports.string().refine((value) => value.trim().length > 0, {
15051
15091
  message: "Identifier must not be empty or whitespace"
@@ -18609,7 +18649,8 @@ function synthesizeFileChange(kind, args, cwd) {
18609
18649
  {
18610
18650
  path: displayed.path,
18611
18651
  kind: "add",
18612
- unifiedDiff: createTwoFilesPatch(oldHeader2, newHeader2, "", content, "", "", { context: 3 })
18652
+ unifiedDiff: createTwoFilesPatch(oldHeader2, newHeader2, "", content, "", "", { context: 3 }),
18653
+ diffScope: "fragment"
18613
18654
  }
18614
18655
  ];
18615
18656
  }
@@ -18631,7 +18672,8 @@ function synthesizeFileChange(kind, args, cwd) {
18631
18672
  kind: "update",
18632
18673
  unifiedDiff: createTwoFilesPatch(oldHeader, newHeader, oldText, newText, "", "", {
18633
18674
  context: 3
18634
- })
18675
+ }),
18676
+ diffScope: "fragment"
18635
18677
  }
18636
18678
  ];
18637
18679
  }
@@ -19028,7 +19070,7 @@ var OmpHarnessSession = class {
19028
19070
  return this.#closePromise;
19029
19071
  }
19030
19072
  async #selectModel(command) {
19031
- if (this.#acceptingTurn || this.#active || this.#configuring) {
19073
+ if (this.#acceptingTurn || this.#configuring) {
19032
19074
  return {
19033
19075
  ok: false,
19034
19076
  error: {
@@ -19100,7 +19142,7 @@ var OmpHarnessSession = class {
19100
19142
  }
19101
19143
  };
19102
19144
  }
19103
- if (this.#acceptingTurn || this.#active || this.#configuring) {
19145
+ if (this.#acceptingTurn || this.#configuring) {
19104
19146
  return {
19105
19147
  ok: false,
19106
19148
  error: {
@@ -19885,12 +19927,17 @@ var OmpHarnessSession = class {
19885
19927
  try {
19886
19928
  const kind = fileMutatingKind(event.toolName);
19887
19929
  const args = tool.arguments;
19888
- if (kind && synthesizeFileChange(kind, args, this.#cwd)) {
19930
+ if (kind && !patchFromResult(event.result) && synthesizeFileChange(kind, args, this.#cwd)) {
19889
19931
  return;
19890
19932
  }
19891
19933
  const changes = reliableFileChange(event.toolName, args, event.result, this.#cwd);
19892
19934
  if (changes) {
19893
- const fileItem = { type: "fileChange", itemId: this.#newItemId(), changes };
19935
+ const fileItem = {
19936
+ type: "fileChange",
19937
+ itemId: this.#newItemId(),
19938
+ sourceItemIds: [tool.item.itemId],
19939
+ changes
19940
+ };
19894
19941
  this.#event({ type: "item.started", turnId: active.command.turnId, item: fileItem });
19895
19942
  this.#completeItem(active, fileItem, { status: "succeeded" });
19896
19943
  }