opencode-gitbutler 0.1.6 → 0.1.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/dist/cli.d.ts CHANGED
@@ -22,7 +22,9 @@ export type FileBranchResult = {
22
22
  branchCliId?: string;
23
23
  branchName?: string;
24
24
  unassignedCliId?: string;
25
+ confidence?: BranchInferenceConfidence;
25
26
  };
27
+ export type BranchInferenceConfidence = "high" | "medium" | "ambiguous";
26
28
  export type ButStatusBranch = {
27
29
  cliId: string;
28
30
  name: string;
@@ -81,5 +83,8 @@ export type Cli = {
81
83
  hasMultiBranchHunks: (filePath: string, statusData?: ButStatusFull | null) => boolean;
82
84
  toRelativePath: (absPath: string) => string;
83
85
  };
84
- export declare function createCli(cwd: string, log: Logger): Cli;
86
+ export type CliOptions = {
87
+ inferenceEnabled?: boolean;
88
+ };
89
+ export declare function createCli(cwd: string, log: Logger, options?: CliOptions): Cli;
85
90
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;QACpC,QAAQ,CAAC,EAAE,KAAK,CAAC;YACf,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;SAC7B,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;KAC7B,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;QACpC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;KAC9B,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,qDAAqD;QACrD,QAAQ,CAAC,EAAE;YACT,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,qCAAqC;QACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG;IAChB,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,KAAK,gBAAgB,CAAC;IAC1F,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAClD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxG,aAAa,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,GAAG,SAAS,CAAC;IAC5D,YAAY,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,mBAAmB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,KAAK,OAAO,CAAC;IACtF,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C,CAAC;AAOF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAyXvD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/cmd.js CHANGED
@@ -29052,7 +29052,8 @@ var DEFAULT_CONFIG = {
29052
29052
  stale_lock_ms: 300000,
29053
29053
  edit_debounce_ms: 200,
29054
29054
  gc_on_session_start: false,
29055
- notification_max_age_ms: 300000
29055
+ notification_max_age_ms: 300000,
29056
+ inference_enabled: true
29056
29057
  };
29057
29058
  var CONFIG_FILE_NAME = ".opencode/gitbutler.json";
29058
29059
  function stripJsonComments(input) {
@@ -29129,6 +29130,7 @@ async function loadConfig(cwd) {
29129
29130
  edit_debounce_ms: typeof parsed.edit_debounce_ms === "number" && parsed.edit_debounce_ms >= 0 ? parsed.edit_debounce_ms : DEFAULT_CONFIG.edit_debounce_ms,
29130
29131
  gc_on_session_start: typeof parsed.gc_on_session_start === "boolean" ? parsed.gc_on_session_start : DEFAULT_CONFIG.gc_on_session_start,
29131
29132
  notification_max_age_ms: typeof parsed.notification_max_age_ms === "number" && parsed.notification_max_age_ms >= 0 ? parsed.notification_max_age_ms : DEFAULT_CONFIG.notification_max_age_ms,
29133
+ inference_enabled: typeof parsed.inference_enabled === "boolean" ? parsed.inference_enabled : DEFAULT_CONFIG.inference_enabled,
29132
29134
  ...typeof parsed.branch_target === "string" && parsed.branch_target.length > 0 ? { branch_target: parsed.branch_target } : {}
29133
29135
  };
29134
29136
  } catch (err) {
package/dist/config.d.ts CHANGED
@@ -25,6 +25,7 @@ export type GitButlerPluginConfig = {
25
25
  notification_max_age_ms: number;
26
26
  /** When set, all sessions use this value for conversation_id instead of rootSessionID */
27
27
  branch_target?: string;
28
+ inference_enabled: boolean;
28
29
  };
29
30
  export declare const DEFAULT_CONFIG: Readonly<GitButlerPluginConfig>;
30
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,qBAAqB,GAAG;IAClC,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,uBAAuB,EAAE,MAAM,CAAC;IAChC,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,6CAA6C;IAC7C,WAAW,EAAE,OAAO,CAAC;IACrB,iFAAiF;IACjF,sBAAsB,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gGAAgG;IAChG,uBAAuB,EAAE,MAAM,CAAC;IAChC,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,qBAAqB,CAa1D,CAAC;AAIF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA6CvD;AAYD,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,qBAAqB,CAAC,CA4DhC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,qBAAqB,GAAG;IAClC,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,uBAAuB,EAAE,MAAM,CAAC;IAChC,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,6CAA6C;IAC7C,WAAW,EAAE,OAAO,CAAC;IACrB,iFAAiF;IACjF,sBAAsB,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gGAAgG;IAChG,uBAAuB,EAAE,MAAM,CAAC;IAChC,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,qBAAqB,CAc1D,CAAC;AAIF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA6CvD;AAYD,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,qBAAqB,CAAC,CA+DhC"}
package/dist/index.js CHANGED
@@ -13,7 +13,8 @@ var DEFAULT_CONFIG = {
13
13
  stale_lock_ms: 300000,
14
14
  edit_debounce_ms: 200,
15
15
  gc_on_session_start: false,
16
- notification_max_age_ms: 300000
16
+ notification_max_age_ms: 300000,
17
+ inference_enabled: true
17
18
  };
18
19
  var CONFIG_FILE_NAME = ".opencode/gitbutler.json";
19
20
  function stripJsonComments(input) {
@@ -90,6 +91,7 @@ async function loadConfig(cwd) {
90
91
  edit_debounce_ms: typeof parsed.edit_debounce_ms === "number" && parsed.edit_debounce_ms >= 0 ? parsed.edit_debounce_ms : DEFAULT_CONFIG.edit_debounce_ms,
91
92
  gc_on_session_start: typeof parsed.gc_on_session_start === "boolean" ? parsed.gc_on_session_start : DEFAULT_CONFIG.gc_on_session_start,
92
93
  notification_max_age_ms: typeof parsed.notification_max_age_ms === "number" && parsed.notification_max_age_ms >= 0 ? parsed.notification_max_age_ms : DEFAULT_CONFIG.notification_max_age_ms,
94
+ inference_enabled: typeof parsed.inference_enabled === "boolean" ? parsed.inference_enabled : DEFAULT_CONFIG.inference_enabled,
93
95
  ...typeof parsed.branch_target === "string" && parsed.branch_target.length > 0 ? { branch_target: parsed.branch_target } : {}
94
96
  };
95
97
  } catch (err) {
@@ -127,8 +129,117 @@ var CURSOR_RETRY_PARAMS = {
127
129
  stop: { maxRetries: 5, baseMs: 500 },
128
130
  default: { maxRetries: 3, baseMs: 200 }
129
131
  };
130
- function createCli(cwd, log) {
132
+ function createCli(cwd, log, options = {}) {
131
133
  const resolvedCwd = resolve2(cwd);
134
+ const inferenceEnabled = options.inferenceEnabled ?? true;
135
+ function toPathSegments(filePath) {
136
+ return filePath.replace(/\\/g, "/").split("/").filter(Boolean);
137
+ }
138
+ function sharedPrefixDepth(a, b) {
139
+ const limit = Math.min(a.length, b.length);
140
+ let depth = 0;
141
+ while (depth < limit && a[depth] === b[depth]) {
142
+ depth++;
143
+ }
144
+ return depth;
145
+ }
146
+ function scoreBranchByDirectoryPrefix(filePath, branch) {
147
+ const targetSegments = toPathSegments(filePath);
148
+ let maxScore = 0;
149
+ for (const commit of branch.commits ?? []) {
150
+ for (const change of commit.changes ?? []) {
151
+ if (!change.filePath)
152
+ continue;
153
+ const candidateSegments = toPathSegments(change.filePath);
154
+ const score = sharedPrefixDepth(targetSegments, candidateSegments);
155
+ if (score > maxScore) {
156
+ maxScore = score;
157
+ }
158
+ }
159
+ }
160
+ return maxScore;
161
+ }
162
+ function inferAssignedBranch(filePath, stackBranches, unassignedCliId) {
163
+ if (!inferenceEnabled) {
164
+ log.info("inference-disabled", {
165
+ file: filePath,
166
+ branchCount: stackBranches.length
167
+ });
168
+ return {
169
+ inBranch: true,
170
+ unassignedCliId,
171
+ confidence: "ambiguous"
172
+ };
173
+ }
174
+ if (stackBranches.length === 0) {
175
+ log.warn("inference-no-branches", {
176
+ file: filePath
177
+ });
178
+ return {
179
+ inBranch: true,
180
+ unassignedCliId,
181
+ confidence: "ambiguous"
182
+ };
183
+ }
184
+ if (stackBranches.length === 1) {
185
+ const [branch] = stackBranches;
186
+ if (!branch) {
187
+ return {
188
+ inBranch: true,
189
+ unassignedCliId,
190
+ confidence: "ambiguous"
191
+ };
192
+ }
193
+ log.info("inference-single-branch", {
194
+ file: filePath,
195
+ branchCliId: branch.cliId,
196
+ branchName: branch.name
197
+ });
198
+ return {
199
+ inBranch: true,
200
+ branchCliId: branch.cliId,
201
+ branchName: branch.name,
202
+ unassignedCliId,
203
+ confidence: "high"
204
+ };
205
+ }
206
+ const scoredBranches = stackBranches.map((branch) => ({
207
+ branch,
208
+ score: scoreBranchByDirectoryPrefix(filePath, branch)
209
+ })).sort((a, b) => b.score - a.score);
210
+ const best = scoredBranches[0];
211
+ const second = scoredBranches[1];
212
+ if (best?.branch && second && best.score >= 2 && best.score > second.score) {
213
+ log.info("inference-directory-match", {
214
+ file: filePath,
215
+ branchCliId: best.branch.cliId,
216
+ branchName: best.branch.name,
217
+ score: best.score,
218
+ margin: best.score - second.score,
219
+ branchCount: stackBranches.length
220
+ });
221
+ return {
222
+ inBranch: true,
223
+ branchCliId: best.branch.cliId,
224
+ branchName: best.branch.name,
225
+ unassignedCliId,
226
+ confidence: "medium"
227
+ };
228
+ }
229
+ log.warn("inference-ambiguous", {
230
+ file: filePath,
231
+ branchCount: stackBranches.length,
232
+ scores: scoredBranches.map((entry) => ({
233
+ branchCliId: entry.branch.cliId,
234
+ score: entry.score
235
+ }))
236
+ });
237
+ return {
238
+ inBranch: true,
239
+ unassignedCliId,
240
+ confidence: "ambiguous"
241
+ };
242
+ }
132
243
  function toRelativePath(absPath) {
133
244
  const resolved = resolve2(absPath);
134
245
  const rel = relative(resolvedCwd, resolved);
@@ -159,9 +270,10 @@ function createCli(cwd, log) {
159
270
  }
160
271
  const normalized = toRelativePath(filePath);
161
272
  const unassigned = data.unassignedChanges?.find((ch) => ch.filePath === normalized);
273
+ const assignedStacks = [];
162
274
  for (const stack of data.stacks ?? []) {
163
275
  if (stack.assignedChanges?.some((ch) => ch.filePath === normalized)) {
164
- return { inBranch: true };
276
+ assignedStacks.push(stack);
165
277
  }
166
278
  for (const branch of stack.branches ?? []) {
167
279
  for (const commit of branch.commits ?? []) {
@@ -170,12 +282,40 @@ function createCli(cwd, log) {
170
282
  inBranch: true,
171
283
  branchCliId: branch.cliId,
172
284
  branchName: branch.name,
173
- unassignedCliId: unassigned?.cliId
285
+ unassignedCliId: unassigned?.cliId,
286
+ confidence: "high"
174
287
  };
175
288
  }
176
289
  }
177
290
  }
178
291
  }
292
+ if (assignedStacks.length === 1) {
293
+ const [stack] = assignedStacks;
294
+ if (stack) {
295
+ return inferAssignedBranch(normalized, stack.branches ?? [], unassigned?.cliId);
296
+ }
297
+ }
298
+ if (assignedStacks.length > 1) {
299
+ const uniqueBranches = new Set;
300
+ for (const stack of assignedStacks) {
301
+ for (const branch of stack.branches ?? []) {
302
+ if (branch.cliId) {
303
+ uniqueBranches.add(branch.cliId);
304
+ }
305
+ }
306
+ }
307
+ log.warn("inference-ambiguous", {
308
+ file: normalized,
309
+ reason: "multiple-assigned-stacks",
310
+ stackCount: assignedStacks.length,
311
+ branchCount: uniqueBranches.size
312
+ });
313
+ return {
314
+ inBranch: true,
315
+ unassignedCliId: unassigned?.cliId,
316
+ confidence: "ambiguous"
317
+ };
318
+ }
179
319
  return { inBranch: false };
180
320
  } catch {
181
321
  return { inBranch: false };
@@ -835,39 +975,65 @@ function createRewordManager(deps) {
835
975
  });
836
976
  }
837
977
  reapStaleLocks();
978
+ const statusForSweep = cli.getFullStatus();
838
979
  const editedFiles = editedFilesPerConversation.get(conversationId);
839
980
  let sweepRubCount = 0;
981
+ let sweepSkippedAmbiguous = 0;
982
+ let sweepSkippedMultiBranch = 0;
983
+ let sweepNoTarget = 0;
840
984
  if (editedFiles && editedFiles.size > 0) {
841
985
  for (const filePath of editedFiles) {
842
986
  try {
843
- const branchInfo = cli.findFileBranch(filePath);
987
+ const branchInfo = cli.findFileBranch(filePath, statusForSweep);
844
988
  if (branchInfo.unassignedCliId && branchInfo.branchCliId) {
845
- if (!cli.hasMultiBranchHunks(filePath)) {
989
+ if (!cli.hasMultiBranchHunks(filePath, statusForSweep)) {
846
990
  const rubOk = cli.butRub(branchInfo.unassignedCliId, branchInfo.branchCliId);
847
991
  if (rubOk) {
848
992
  sweepRubCount++;
849
993
  log.info("post-stop-sweep-rub", {
850
994
  file: filePath,
851
995
  source: branchInfo.unassignedCliId,
852
- dest: branchInfo.branchCliId
996
+ dest: branchInfo.branchCliId,
997
+ confidence: branchInfo.confidence
853
998
  });
854
999
  }
1000
+ } else {
1001
+ sweepSkippedMultiBranch++;
1002
+ log.warn("post-stop-sweep-skip-multi-branch", {
1003
+ file: filePath,
1004
+ source: branchInfo.unassignedCliId,
1005
+ dest: branchInfo.branchCliId,
1006
+ confidence: branchInfo.confidence
1007
+ });
855
1008
  }
1009
+ } else if (branchInfo.inBranch && !branchInfo.branchCliId) {
1010
+ sweepSkippedAmbiguous++;
1011
+ log.warn("post-stop-sweep-skip-ambiguous", {
1012
+ file: filePath,
1013
+ confidence: branchInfo.confidence
1014
+ });
1015
+ } else {
1016
+ sweepNoTarget++;
1017
+ log.info("post-stop-sweep-no-target", {
1018
+ file: filePath,
1019
+ inBranch: branchInfo.inBranch
1020
+ });
856
1021
  }
857
1022
  } catch {}
858
1023
  }
859
- if (sweepRubCount > 0) {
860
- log.info("post-stop-sweep-summary", {
861
- conversationId,
862
- filesChecked: editedFiles.size,
863
- rubbed: sweepRubCount
864
- });
865
- }
1024
+ log.info("post-stop-sweep-summary", {
1025
+ conversationId,
1026
+ filesChecked: editedFiles.size,
1027
+ rubbed: sweepRubCount,
1028
+ skippedAmbiguous: sweepSkippedAmbiguous,
1029
+ skippedMultiBranch: sweepSkippedMultiBranch,
1030
+ noTarget: sweepNoTarget
1031
+ });
866
1032
  }
867
1033
  const prompt = await fetchUserPrompt(rootSessionID);
868
1034
  if (!prompt)
869
1035
  return;
870
- const status = cli.getFullStatus();
1036
+ const status = statusForSweep ?? cli.getFullStatus();
871
1037
  if (!status?.stacks)
872
1038
  return;
873
1039
  const ownershipSnapshot = [];
@@ -902,13 +1068,47 @@ function createRewordManager(deps) {
902
1068
  });
903
1069
  }
904
1070
  const candidateBranchCliIds = new Set;
1071
+ const candidateConfidenceByBranch = new Map;
1072
+ let candidateAmbiguousCount = 0;
1073
+ const confidenceRank = {
1074
+ ambiguous: 0,
1075
+ medium: 1,
1076
+ high: 2
1077
+ };
905
1078
  if (ownershipMatches && editedFiles && editedFiles.size > 0) {
906
1079
  for (const filePath of editedFiles) {
907
1080
  const branchInfo = cli.findFileBranch(filePath, status);
908
1081
  if (branchInfo.branchCliId) {
909
1082
  candidateBranchCliIds.add(branchInfo.branchCliId);
1083
+ const nextConfidence = branchInfo.confidence ?? "high";
1084
+ const existingConfidence = candidateConfidenceByBranch.get(branchInfo.branchCliId);
1085
+ const mergedConfidence = existingConfidence ? confidenceRank[nextConfidence] < confidenceRank[existingConfidence.confidence] ? nextConfidence : existingConfidence.confidence : nextConfidence;
1086
+ candidateConfidenceByBranch.set(branchInfo.branchCliId, {
1087
+ confidence: mergedConfidence,
1088
+ fileCount: (existingConfidence?.fileCount ?? 0) + 1,
1089
+ branchName: branchInfo.branchName ?? existingConfidence?.branchName ?? branchInfo.branchCliId
1090
+ });
1091
+ } else if (branchInfo.inBranch) {
1092
+ candidateAmbiguousCount++;
1093
+ log.warn("post-stop-candidate-skip-ambiguous", {
1094
+ conversationId,
1095
+ file: filePath,
1096
+ confidence: branchInfo.confidence
1097
+ });
910
1098
  }
911
1099
  }
1100
+ if (candidateConfidenceByBranch.size > 0 || candidateAmbiguousCount > 0) {
1101
+ log.info("post-stop-candidate-confidence", {
1102
+ conversationId,
1103
+ candidates: [...candidateConfidenceByBranch.entries()].map(([branchCliId, info]) => ({
1104
+ branchCliId,
1105
+ branchName: info.branchName,
1106
+ confidence: info.confidence,
1107
+ fileCount: info.fileCount
1108
+ })),
1109
+ skippedAmbiguous: candidateAmbiguousCount
1110
+ });
1111
+ }
912
1112
  }
913
1113
  if (ownershipMatches && owner?.branchName && !owner.branchName.startsWith("conversation-")) {
914
1114
  for (const stack of status.stacks) {
@@ -1082,11 +1282,28 @@ function createRewordManager(deps) {
1082
1282
  }
1083
1283
 
1084
1284
  // src/plugin.ts
1285
+ async function toUUID(input) {
1286
+ const data = new TextEncoder().encode(input);
1287
+ const hash = await crypto.subtle.digest("SHA-256", data);
1288
+ const hex = [...new Uint8Array(hash)].map((b) => b.toString(16).padStart(2, "0")).join("");
1289
+ return [
1290
+ hex.slice(0, 8),
1291
+ hex.slice(8, 12),
1292
+ `4${hex.slice(12, 15)}`,
1293
+ `8${hex.slice(15, 18)}`,
1294
+ hex.slice(18, 30)
1295
+ ].join("-");
1296
+ }
1297
+ function sessionCacheKey(rootSessionID, filePath) {
1298
+ return `${rootSessionID}\x00${filePath}`;
1299
+ }
1085
1300
  function createGitButlerPlugin(config = { ...DEFAULT_CONFIG }) {
1086
1301
  return async ({ client, directory, worktree }) => {
1087
1302
  const cwd = worktree ?? directory;
1088
1303
  const log = createLogger(config.log_enabled, cwd);
1089
- const cli = createCli(cwd, log);
1304
+ const cli = createCli(cwd, log, {
1305
+ inferenceEnabled: config.inference_enabled
1306
+ });
1090
1307
  const state = createStateManager(cwd, log);
1091
1308
  const diskSessionMap = await state.loadSessionMap();
1092
1309
  for (const [k, v] of diskSessionMap) {
@@ -1169,18 +1386,6 @@ function createGitButlerPlugin(config = { ...DEFAULT_CONFIG }) {
1169
1386
  cachedStatus = { data: fresh, timestamp: Date.now() };
1170
1387
  return fresh;
1171
1388
  }
1172
- async function toUUID(input) {
1173
- const data = new TextEncoder().encode(input);
1174
- const hash = await crypto.subtle.digest("SHA-256", data);
1175
- const hex = [...new Uint8Array(hash)].map((b) => b.toString(16).padStart(2, "0")).join("");
1176
- return [
1177
- hex.slice(0, 8),
1178
- hex.slice(8, 12),
1179
- `4${hex.slice(12, 15)}`,
1180
- `8${hex.slice(15, 18)}`,
1181
- hex.slice(18, 30)
1182
- ].join("-");
1183
- }
1184
1389
  function extractFilePathFromArgs(args) {
1185
1390
  const raw = args.filePath ?? args.file_path ?? args.path;
1186
1391
  return raw ? cli.toRelativePath(raw) : undefined;
@@ -1279,60 +1484,23 @@ function createGitButlerPlugin(config = { ...DEFAULT_CONFIG }) {
1279
1484
  }
1280
1485
  const relativePath = cli.toRelativePath(filePath);
1281
1486
  try {
1282
- const cached = assignmentCache.get(relativePath);
1487
+ const rootSessionID = state.resolveSessionRoot(input.sessionID);
1488
+ const branchSeed = config.branch_target ?? rootSessionID;
1489
+ const cacheKey = sessionCacheKey(rootSessionID, relativePath);
1490
+ const cached = assignmentCache.get(cacheKey);
1283
1491
  const cacheHit = cached && Date.now() - cached.timestamp < ASSIGNMENT_CACHE_TTL_MS;
1284
- if (!cacheHit) {
1285
- const statusSnapshot = cli.getFullStatus();
1286
- const branchInfo = cli.findFileBranch(relativePath, statusSnapshot);
1287
- if (branchInfo.inBranch) {
1288
- if (branchInfo.unassignedCliId && branchInfo.branchCliId) {
1289
- if (cli.hasMultiBranchHunks(relativePath, statusSnapshot)) {
1290
- log.warn("rub-skip-multi-branch", {
1291
- file: relativePath
1292
- });
1293
- } else {
1294
- log.info("rub-check", {
1295
- file: relativePath,
1296
- multiBranch: false,
1297
- source: branchInfo.unassignedCliId,
1298
- dest: branchInfo.branchCliId
1299
- });
1300
- const rubOk = cli.butRub(branchInfo.unassignedCliId, branchInfo.branchCliId);
1301
- if (rubOk) {
1302
- log.info("rub-ok", {
1303
- source: branchInfo.unassignedCliId,
1304
- dest: branchInfo.branchCliId,
1305
- file: relativePath
1306
- });
1307
- } else {
1308
- log.error("rub-failed", {
1309
- source: branchInfo.unassignedCliId,
1310
- dest: branchInfo.branchCliId,
1311
- file: relativePath
1312
- });
1313
- }
1314
- }
1315
- } else {
1316
- log.info("after-edit-already-assigned", {
1317
- file: relativePath,
1318
- sessionID: input.sessionID,
1319
- branch: branchInfo.branchName
1320
- });
1321
- }
1322
- return;
1323
- }
1324
- } else {
1492
+ const conversationId = cacheHit ? cached.conversationId : await toUUID(branchSeed);
1493
+ if (cacheHit) {
1325
1494
  log.info("assignment-cache-hit", {
1326
1495
  file: relativePath,
1327
- branchCliId: cached.branchCliId,
1496
+ conversationId,
1328
1497
  ageMs: Date.now() - cached.timestamp
1329
1498
  });
1330
1499
  }
1331
- const branchSeed = config.branch_target ?? state.resolveSessionRoot(input.sessionID);
1332
- const conversationId = cacheHit ? cached.conversationId : await toUUID(branchSeed);
1333
1500
  log.info("after-edit", {
1334
1501
  file: relativePath,
1335
1502
  sessionID: input.sessionID,
1503
+ rootSessionID,
1336
1504
  conversationId
1337
1505
  });
1338
1506
  try {
@@ -1344,14 +1512,15 @@ function createGitButlerPlugin(config = { ...DEFAULT_CONFIG }) {
1344
1512
  hook_event_name: "afterFileEdit",
1345
1513
  workspace_roots: [cwd]
1346
1514
  });
1347
- assignmentCache.set(relativePath, {
1348
- branchCliId: conversationId,
1515
+ assignmentCache.set(cacheKey, {
1349
1516
  conversationId,
1517
+ rootSessionID,
1350
1518
  timestamp: Date.now()
1351
1519
  });
1352
1520
  } catch (err) {
1353
1521
  log.error("cursor-after-edit-error", {
1354
1522
  file: relativePath,
1523
+ conversationId,
1355
1524
  error: err instanceof Error ? err.message : String(err)
1356
1525
  });
1357
1526
  }
@@ -1360,7 +1529,6 @@ function createGitButlerPlugin(config = { ...DEFAULT_CONFIG }) {
1360
1529
  editedFilesPerConversation.set(conversationId, new Set);
1361
1530
  }
1362
1531
  editedFilesPerConversation.get(conversationId).add(relativePath);
1363
- const rootSessionID = state.resolveSessionRoot(input.sessionID);
1364
1532
  const existingOwner = branchOwnership.get(conversationId);
1365
1533
  if (existingOwner && existingOwner.rootSessionID !== rootSessionID) {
1366
1534
  log.error("branch-collision", {
package/dist/plugin.d.ts CHANGED
@@ -17,5 +17,7 @@
17
17
  */
18
18
  import type { Plugin } from "@opencode-ai/plugin";
19
19
  import type { GitButlerPluginConfig } from "./config.js";
20
+ export declare function toUUID(input: string): Promise<string>;
21
+ export declare function sessionCacheKey(rootSessionID: string, filePath: string): string;
20
22
  export declare function createGitButlerPlugin(config?: GitButlerPluginConfig): Plugin;
21
23
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAUzD,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,qBAA6C,GACpD,MAAM,CA+nBR"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAUzD,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa3D;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,qBAA6C,GACpD,MAAM,CAskBR"}
@@ -1 +1 @@
1
- {"version":3,"file":"reword.d.ts","sourceRoot":"","sources":["../src/reword.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reword.d.ts","sourceRoot":"","sources":["../src/reword.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-gitbutler",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "type": "module",
5
5
  "description": "OpenCode plugin for GitButler integration",
6
6
  "main": "dist/index.js",