@cortexkit/aft-pi 0.49.4 → 0.50.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 CHANGED
@@ -59,8 +59,8 @@ All four keep the same agent-facing parameters as Pi's built-ins, so your prompt
59
59
 
60
60
  AFT reads config from two levels, project overrides user:
61
61
 
62
- - **User:** `~/.pi/agent/aft.jsonc` (or `.json`)
63
- - **Project:** `<project>/.pi/aft.jsonc` (or `.json`)
62
+ - **User:** `~/.config/cortexkit/aft.jsonc`
63
+ - **Project:** `<project>/.cortexkit/aft.jsonc`
64
64
 
65
65
  All keys are optional. Example:
66
66
 
@@ -164,8 +164,10 @@ export declare function handleTurnEndBgCompletions(drainContext: DrainContext &
164
164
  * (re-armed until acked), so it always means "drain me now" — even for a task
165
165
  * this process never tracked (prior session / already-cleared outstanding entry),
166
166
  * which the gated drain in {@link triggerWakeIfPending} would skip, leaving the
167
- * module to re-arm and nudge forever. See the OpenCode twin for the full
168
- * rationale.
167
+ * module to re-arm and nudge forever. The module-side loop lives at
168
+ * `crates/aft/src/subc/push.rs::{emit_bg_event_wakes,clear_stale_bg_wakes_for_empty_sessions}`:
169
+ * it re-emits pending wakes until ack empties the queue, so coalescing a duplicate
170
+ * while this handler is in flight is safe. See the OpenCode twin for the full rationale.
169
171
  */
170
172
  export declare function handleSubcBgEventsNudge(drainContext: DrainContext & {
171
173
  runtime: SendUserMessageRuntime;
@@ -1 +1 @@
1
- {"version":3,"file":"bg-notifications.d.ts","sourceRoot":"","sources":["../src/bg-notifications.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bg-notifications.d.ts","sourceRoot":"","sources":["../src/bg-notifications.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -133,6 +133,8 @@ export interface AftConfig {
133
133
  $schema?: string;
134
134
  /** Master switch for AFT. Default true. Project config may set it because turning AFT off is not a privilege escalation. */
135
135
  enabled?: boolean;
136
+ /** Select the edit/read surface. `hashline` exposes tagged reads and `{ patch }` edits. */
137
+ edit_mode?: "default" | "hashline";
136
138
  format_on_edit?: boolean;
137
139
  /** Maximum formatter subprocess wallclock seconds. Bounded 1..=600. Default 10. */
138
140
  formatter_timeout_secs?: number;
@@ -216,6 +218,10 @@ export declare function resolveBashConfig(config: AftConfig): ResolvedBashConfig
216
218
  export declare const AftConfigSchema: z.ZodPreprocess<z.ZodObject<{
217
219
  $schema: z.ZodOptional<z.ZodString>;
218
220
  enabled: z.ZodOptional<z.ZodBoolean>;
221
+ edit_mode: z.ZodOptional<z.ZodEnum<{
222
+ default: "default";
223
+ hashline: "hashline";
224
+ }>>;
219
225
  format_on_edit: z.ZodOptional<z.ZodBoolean>;
220
226
  formatter_timeout_secs: z.ZodOptional<z.ZodNumber>;
221
227
  validate_on_edit: z.ZodOptional<z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAgBH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAUpE,OAAO,EACL,KAAK,SAAS,EAGd,mBAAmB,EAIpB,MAAM,aAAa,CAAC;AA2BrB,OAAO,EAAyB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA4BrF,KAAK,mBAAmB,GAAG;IACzB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC;AAEF,iBAAS,4BAA4B,CACnC,OAAO,EAAE,MAAM,mBAAmB,GAAG,SAAS,EAC9C,sBAAsB,GAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAgB,IAOrE,eAAe,MAAM,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyCjF;AAyED,iBAAS,0BAA0B,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,GAC7C,IAAI,CAUN;AAED,iBAAS,wBAAwB,CAC/B,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,iBAAiB,GAAG,UAAU,CAAC,GACtD,OAAO,CAGT;AAED,iBAAS,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG9E;AASD,iBAAe,iCAAiC,CAAC,OAAO,EAAE;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC,OAAO,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC1E,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChB;AAED;;;;GAIG;AACH,yBAA+B,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAihB9D;AAED,eAAO,MAAM,QAAQ;;;;;;;CAOpB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAgBH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAUpE,OAAO,EACL,KAAK,SAAS,EAGd,mBAAmB,EAIpB,MAAM,aAAa,CAAC;AA2BrB,OAAO,EAAyB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA4BrF,KAAK,mBAAmB,GAAG;IACzB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC;AAEF,iBAAS,4BAA4B,CACnC,OAAO,EAAE,MAAM,mBAAmB,GAAG,SAAS,EAC9C,sBAAsB,GAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAgB,IAOrE,eAAe,MAAM,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyCjF;AAyED,iBAAS,0BAA0B,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,GAC7C,IAAI,CAUN;AAED,iBAAS,wBAAwB,CAC/B,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,iBAAiB,GAAG,UAAU,CAAC,GACtD,OAAO,CAGT;AAED,iBAAS,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG9E;AASD,iBAAe,iCAAiC,CAAC,OAAO,EAAE;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC,OAAO,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAC1E,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChB;AAED;;;;GAIG;AACH,yBAA+B,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAoiB9D;AAED,eAAO,MAAM,QAAQ;;;;;;;CAOpB,CAAC"}
package/dist/index.js CHANGED
@@ -8410,6 +8410,8 @@ var DEFAULT_BRIDGE_TIMEOUT_MS = 30000;
8410
8410
  var BRIDGE_HANG_TIMEOUT_THRESHOLD = 2;
8411
8411
  var MAX_STDOUT_BUFFER = 64 * 1024 * 1024;
8412
8412
  var STDOUT_BUFFER_COMPACT_THRESHOLD = 64 * 1024;
8413
+ var HASHLINE_REGISTRATION_LOG_INTERVAL_MS = 60000;
8414
+ var HASHLINE_REGISTRATION_LOG_STATE_LIMIT = 256;
8413
8415
  var TERMINAL_BASH_STATUSES = new Set([
8414
8416
  "completed",
8415
8417
  "failed",
@@ -8559,6 +8561,9 @@ class BinaryBridge {
8559
8561
  configured = false;
8560
8562
  _configurePromise = null;
8561
8563
  configOverrides;
8564
+ editSlotSurvives;
8565
+ editSlotSurvivesCaptured = false;
8566
+ hashlineRegistrationLogState = new Map;
8562
8567
  minVersion;
8563
8568
  onVersionMismatch;
8564
8569
  onConfigureWarnings;
@@ -8575,20 +8580,33 @@ class BinaryBridge {
8575
8580
  errorPrefix;
8576
8581
  logger;
8577
8582
  childEnv;
8578
- constructor(binaryPath, cwd, options, configOverrides) {
8583
+ constructor(binaryPath, cwd, options, configOverrides, editSlotSurvives) {
8579
8584
  this.binaryPath = binaryPath;
8580
8585
  this.cwd = cwd;
8581
8586
  this.timeoutMs = options?.timeoutMs ?? DEFAULT_BRIDGE_TIMEOUT_MS;
8582
8587
  this.hangThreshold = options?.hangThreshold ?? BRIDGE_HANG_TIMEOUT_THRESHOLD;
8583
8588
  this.maxRestarts = options?.maxRestarts ?? 3;
8584
- this.configOverrides = configOverrides ?? {};
8589
+ this.errorPrefix = options?.errorPrefix ?? "[aft-bridge]";
8590
+ this.configOverrides = { ...configOverrides ?? {} };
8591
+ const legacyEditSlotSurvives = this.configOverrides.edit_slot_survives;
8592
+ delete this.configOverrides.edit_slot_survives;
8593
+ if (legacyEditSlotSurvives !== undefined && typeof legacyEditSlotSurvives !== "boolean") {
8594
+ throw new Error(`${this.errorPrefix} edit_slot_survives must be a boolean`);
8595
+ }
8596
+ if (editSlotSurvives !== undefined && legacyEditSlotSurvives !== undefined && editSlotSurvives !== legacyEditSlotSurvives) {
8597
+ throw new Error(`${this.errorPrefix} conflicting edit_slot_survives construction values`);
8598
+ }
8599
+ const capturedEditSlotSurvives = editSlotSurvives ?? legacyEditSlotSurvives;
8600
+ if (typeof capturedEditSlotSurvives === "boolean") {
8601
+ this.editSlotSurvives = capturedEditSlotSurvives;
8602
+ this.editSlotSurvivesCaptured = true;
8603
+ }
8585
8604
  this.minVersion = options?.minVersion;
8586
8605
  this.onVersionMismatch = options?.onVersionMismatch;
8587
8606
  this.onConfigureWarnings = options?.onConfigureWarnings;
8588
8607
  this.onBashCompletion = options?.onBashCompletion;
8589
8608
  this.onBashLongRunning = options?.onBashLongRunning;
8590
8609
  this.onBashPatternMatch = options?.onBashPatternMatch;
8591
- this.errorPrefix = options?.errorPrefix ?? "[aft-bridge]";
8592
8610
  this.logger = options?.logger;
8593
8611
  this.childEnv = options?.childEnv;
8594
8612
  }
@@ -8699,13 +8717,54 @@ class BinaryBridge {
8699
8717
  cacheStatusSnapshot(snapshot) {
8700
8718
  this.cachedStatus = snapshot;
8701
8719
  }
8720
+ setEditSlotSurvives(value) {
8721
+ if (this.editSlotSurvivesCaptured) {
8722
+ throw new Error(`${this.errorPrefix} edit_slot_survives is write-once and was already captured`);
8723
+ }
8724
+ this.editSlotSurvives = value;
8725
+ this.editSlotSurvivesCaptured = true;
8726
+ }
8727
+ logHashlineRegistrationCarrier(phase, sessionId, editSlotSurvives) {
8728
+ const session = sessionId && sessionId.length > 0 ? sessionId : "__default__";
8729
+ const key = `${phase}\x00${session}\x00${String(editSlotSurvives)}`;
8730
+ const now = Date.now();
8731
+ const state = this.hashlineRegistrationLogState.get(key);
8732
+ if (state && now - state.lastEmittedAt < HASHLINE_REGISTRATION_LOG_INTERVAL_MS) {
8733
+ state.suppressed += 1;
8734
+ return;
8735
+ }
8736
+ const repeated = state && state.suppressed > 0 ? ` repeated=${state.suppressed + 1}` : "";
8737
+ if (!state && this.hashlineRegistrationLogState.size >= HASHLINE_REGISTRATION_LOG_STATE_LIMIT) {
8738
+ const oldest = this.hashlineRegistrationLogState.keys().next().value;
8739
+ if (oldest !== undefined)
8740
+ this.hashlineRegistrationLogState.delete(oldest);
8741
+ }
8742
+ this.hashlineRegistrationLogState.set(key, { lastEmittedAt: now, suppressed: 0 });
8743
+ this.sessionLogVia(sessionId, `hashline registration carrier transport=ndjson phase=${phase} edit_slot_survives=${editSlotSurvives}${repeated}`);
8744
+ }
8702
8745
  async send(command, params = {}, options) {
8703
- return this.sendWithVersionMismatchRetry(command, params, options, true);
8746
+ let dispatchParams = params;
8747
+ if (command === "configure") {
8748
+ dispatchParams = { ...params };
8749
+ delete dispatchParams.edit_slot_survives;
8750
+ const editSlotSurvives = this.editSlotSurvives;
8751
+ if (this.editSlotSurvivesCaptured && typeof editSlotSurvives === "boolean") {
8752
+ dispatchParams.edit_slot_survives = editSlotSurvives;
8753
+ const sessionId = typeof dispatchParams.session_id === "string" ? dispatchParams.session_id : undefined;
8754
+ this.logHashlineRegistrationCarrier("configure", sessionId, editSlotSurvives);
8755
+ }
8756
+ }
8757
+ return this.sendWithVersionMismatchRetry(command, dispatchParams, options, true);
8704
8758
  }
8705
8759
  async toolCall(sessionId, name, rawArgs = {}, options) {
8706
8760
  const params = { name, arguments: rawArgs };
8707
8761
  if (sessionId)
8708
8762
  params.session_id = sessionId;
8763
+ const editSlotSurvives = this.editSlotSurvives;
8764
+ if (this.editSlotSurvivesCaptured && typeof editSlotSurvives === "boolean") {
8765
+ params.edit_slot_survives = editSlotSurvives;
8766
+ this.logHashlineRegistrationCarrier("tool_call", sessionId, editSlotSurvives);
8767
+ }
8709
8768
  const { preview, ...sendOptions } = options ?? {};
8710
8769
  if (preview === true)
8711
8770
  params.preview = true;
@@ -12873,6 +12932,8 @@ function normalizeWindowsRoot(p) {
12873
12932
  var AFT_MODULE_ID = "aft";
12874
12933
  var MAX_CONSECUTIVE_TRANSPORT_FAILURES = 3;
12875
12934
  var BG_STABLE_MS = 5000;
12935
+ var BG_LIFECYCLE_LOG_INTERVAL_MS = 60000;
12936
+ var BG_DISPATCH_PROBE_INTERVAL_MS = 60000;
12876
12937
  var DEFAULT_SESSION_ID = "__default__";
12877
12938
  var LOCALLY_SATISFIED_COMMANDS = new Set(["configure"]);
12878
12939
 
@@ -12935,12 +12996,15 @@ class BgSubscription {
12935
12996
  canAttach;
12936
12997
  onRootAttachFailure;
12937
12998
  onDormant;
12999
+ dispatchProbeIntervalMs;
12938
13000
  nudgeRef;
12939
13001
  isCurrent;
12940
13002
  stopped = false;
12941
13003
  current = null;
12942
13004
  loop;
12943
- constructor(identity, acquireClient, dropClient, consumerIdentity, onNudge, sleep2, canAttach, onRootAttachFailure, onDormant, nudgeRef, isCurrent = () => true) {
13005
+ lifecycleLogState = new Map;
13006
+ nudgeReceiptLogState = null;
13007
+ constructor(identity, acquireClient, dropClient, consumerIdentity, onNudge, sleep2, canAttach, onRootAttachFailure, onDormant, dispatchProbeIntervalMs, nudgeRef, isCurrent = () => true) {
12944
13008
  this.identity = identity;
12945
13009
  this.acquireClient = acquireClient;
12946
13010
  this.dropClient = dropClient;
@@ -12950,6 +13014,7 @@ class BgSubscription {
12950
13014
  this.canAttach = canAttach;
12951
13015
  this.onRootAttachFailure = onRootAttachFailure;
12952
13016
  this.onDormant = onDormant;
13017
+ this.dispatchProbeIntervalMs = dispatchProbeIntervalMs;
12953
13018
  this.nudgeRef = nudgeRef;
12954
13019
  this.isCurrent = isCurrent;
12955
13020
  this.loop = this.run();
@@ -12966,25 +13031,106 @@ class BgSubscription {
12966
13031
  return;
12967
13032
  });
12968
13033
  }
13034
+ info(kind, message) {
13035
+ const now = Date.now();
13036
+ const state = this.lifecycleLogState.get(kind);
13037
+ if (state && now - state.lastEmittedAt < BG_LIFECYCLE_LOG_INTERVAL_MS) {
13038
+ state.suppressed += 1;
13039
+ return;
13040
+ }
13041
+ const suppressed = state?.suppressed ?? 0;
13042
+ this.lifecycleLogState.set(kind, { lastEmittedAt: now, suppressed: 0 });
13043
+ const suffix = suppressed > 0 ? ` suppressed=${suppressed}` : "";
13044
+ log(`subc bg_events: ${message}${suffix}`, { sessionId: this.identity.session });
13045
+ }
13046
+ routeId(route) {
13047
+ return `${route.channel}@${route.epoch}`;
13048
+ }
13049
+ recordNudgeReceipt(routeId) {
13050
+ const now = Date.now();
13051
+ const state = this.nudgeReceiptLogState;
13052
+ if (state && now - state.lastEmittedAt < BG_LIFECYCLE_LOG_INTERVAL_MS) {
13053
+ state.count += 1;
13054
+ return;
13055
+ }
13056
+ const count = (state?.count ?? 0) + 1;
13057
+ this.nudgeReceiptLogState = { lastEmittedAt: now, count: 0 };
13058
+ log(`subc bg_events: nudge received channel=${routeId} count=${count}`, {
13059
+ sessionId: this.identity.session
13060
+ });
13061
+ }
13062
+ errorText(error2) {
13063
+ return error2 instanceof Error ? `${error2.name}: ${error2.message}` : String(error2);
13064
+ }
13065
+ startDispatchProbe(client, routeId) {
13066
+ const initial = client.droppedIngressFrames;
13067
+ if (typeof initial !== "number")
13068
+ return () => {
13069
+ return;
13070
+ };
13071
+ let previous = initial;
13072
+ const timer = setInterval(() => {
13073
+ const total = client.droppedIngressFrames;
13074
+ if (typeof total !== "number" || total <= previous)
13075
+ return;
13076
+ const delta = total - previous;
13077
+ previous = total;
13078
+ this.info("dispatch-epoch-drop", `client ingress epoch drops scope=client observed_while_channel=${routeId} delta=${delta} total=${total}`);
13079
+ }, this.dispatchProbeIntervalMs);
13080
+ timer.unref?.();
13081
+ return () => clearInterval(timer);
13082
+ }
12969
13083
  async run() {
12970
- let attempt = 0;
13084
+ let backoffAttempt = 0;
13085
+ let reconnectAttempt = 0;
13086
+ let reconnecting = false;
13087
+ const beginReconnect = () => {
13088
+ reconnecting = true;
13089
+ reconnectAttempt = reconnectAttempt === 0 ? 1 : reconnectAttempt + 1;
13090
+ };
13091
+ const giveUp = (reason) => {
13092
+ this.info("reconnect-gave-up", `reconnect gave-up attempt=${reconnectAttempt} reason=${reason}`);
13093
+ };
12971
13094
  while (!this.stopped) {
12972
- if (!this.isCurrent())
13095
+ if (!this.isCurrent()) {
13096
+ if (reconnecting)
13097
+ giveUp("stale-session");
12973
13098
  return;
13099
+ }
12974
13100
  if (!this.canAttach()) {
13101
+ if (reconnecting)
13102
+ giveUp("root-dormant");
12975
13103
  this.onDormant();
12976
13104
  return;
12977
13105
  }
13106
+ if (reconnecting) {
13107
+ this.info("reconnect-attempt", `reconnect attempt=${reconnectAttempt}`);
13108
+ }
12978
13109
  let client;
12979
13110
  try {
12980
13111
  client = await this.acquireClient();
12981
- } catch {
12982
- await this.backoff(attempt++);
13112
+ } catch (err) {
13113
+ if (!reconnecting)
13114
+ beginReconnect();
13115
+ this.info("reconnect-error", `reconnect error attempt=${reconnectAttempt} error=${this.errorText(err)}`);
13116
+ await this.backoff(backoffAttempt++);
13117
+ if (reconnecting)
13118
+ reconnectAttempt += 1;
12983
13119
  continue;
12984
13120
  }
12985
- if (this.stopped || !this.isCurrent())
13121
+ if (this.stopped) {
13122
+ if (reconnecting)
13123
+ giveUp("stopped");
12986
13124
  return;
13125
+ }
13126
+ if (!this.isCurrent()) {
13127
+ if (reconnecting)
13128
+ giveUp("stale-session");
13129
+ return;
13130
+ }
12987
13131
  if (!this.canAttach()) {
13132
+ if (reconnecting)
13133
+ giveUp("root-dormant");
12988
13134
  this.onDormant();
12989
13135
  return;
12990
13136
  }
@@ -12993,44 +13139,84 @@ class BgSubscription {
12993
13139
  route = await client.routeOpen({ kind: "tool_provider", module_id: AFT_MODULE_ID }, this.identity, { consumerIdentity: this.consumerIdentity });
12994
13140
  } catch (err) {
12995
13141
  if (this.isCurrent() && this.onRootAttachFailure(err)) {
13142
+ if (reconnecting)
13143
+ giveUp("root-dormant");
12996
13144
  this.onDormant();
12997
13145
  return;
12998
13146
  }
12999
13147
  if (isConsumerReconnectTransient(err))
13000
13148
  this.dropClient(client);
13001
- await this.backoff(attempt++);
13149
+ if (!reconnecting)
13150
+ beginReconnect();
13151
+ this.info("reconnect-error", `reconnect error attempt=${reconnectAttempt} error=${this.errorText(err)}`);
13152
+ await this.backoff(backoffAttempt++);
13153
+ if (reconnecting)
13154
+ reconnectAttempt += 1;
13002
13155
  continue;
13003
13156
  }
13004
13157
  if (this.stopped || !this.isCurrent()) {
13005
13158
  safeCloseRoute(client, route);
13159
+ if (reconnecting)
13160
+ giveUp(this.stopped ? "stopped" : "stale-session");
13006
13161
  return;
13007
13162
  }
13008
13163
  const subscribedAt = Date.now();
13164
+ const routeId = this.routeId(route);
13165
+ let stopDispatchProbe = () => {
13166
+ return;
13167
+ };
13009
13168
  try {
13010
13169
  const sub = client.subscribe(route, { op: "bg_events" }, () => {
13011
- if (!this.stopped && this.isCurrent())
13012
- this.onNudge();
13170
+ if (this.stopped) {
13171
+ this.info("nudge-drop-stopped", `nudge dropped cause=subscription-stopped channel=${routeId}`);
13172
+ return;
13173
+ }
13174
+ this.recordNudgeReceipt(routeId);
13175
+ if (!this.isCurrent()) {
13176
+ this.info("nudge-stale-carrier", `nudge carried by stale subscription; checking current session channel=${routeId}`);
13177
+ }
13178
+ this.onNudge();
13013
13179
  });
13014
13180
  this.current = sub;
13181
+ stopDispatchProbe = this.startDispatchProbe(client, routeId);
13182
+ this.info("subscription-open", `subscription open channel=${routeId}`);
13183
+ if (reconnecting) {
13184
+ this.info("reconnect-success", `reconnect success attempt=${reconnectAttempt} channel=${routeId}`);
13185
+ reconnecting = false;
13186
+ reconnectAttempt = 0;
13187
+ }
13015
13188
  if (this.stopped)
13016
13189
  sub.unsubscribe();
13017
13190
  if (!this.stopped && this.isCurrent())
13018
13191
  this.onNudge();
13019
13192
  await sub.closed;
13020
- return;
13193
+ this.info("stream-end", `stream ended channel=${routeId}`);
13194
+ if (this.stopped) {
13195
+ giveUp("stopped");
13196
+ return;
13197
+ }
13198
+ beginReconnect();
13021
13199
  } catch (err) {
13022
- if (this.stopped)
13200
+ const routeId2 = this.routeId(route);
13201
+ this.info("stream-error", `stream error channel=${routeId2} error=${this.errorText(err)}`);
13202
+ if (this.stopped) {
13203
+ giveUp("stopped");
13023
13204
  return;
13205
+ }
13024
13206
  if (isConsumerReconnectTransient(err))
13025
13207
  this.dropClient(client);
13026
13208
  if (Date.now() - subscribedAt >= BG_STABLE_MS)
13027
- attempt = 0;
13209
+ backoffAttempt = 0;
13210
+ beginReconnect();
13028
13211
  } finally {
13212
+ stopDispatchProbe();
13029
13213
  this.current = null;
13030
13214
  safeCloseRoute(client, route);
13031
13215
  }
13032
- await this.backoff(attempt++);
13216
+ await this.backoff(backoffAttempt++);
13033
13217
  }
13218
+ if (reconnecting)
13219
+ giveUp("stopped");
13034
13220
  }
13035
13221
  async backoff(attempt) {
13036
13222
  const ms = Math.min(100 * 2 ** Math.min(attempt, 6), 2000);
@@ -13128,6 +13314,9 @@ class SubcTransport {
13128
13314
  this.assertCurrent();
13129
13315
  const { preview, timeoutMs, onProgress } = this.splitOptions(options);
13130
13316
  const body = { name, arguments: rawArgs };
13317
+ const editSlotSurvives = this.pool.getEditSlotSurvives();
13318
+ if (editSlotSurvives !== undefined)
13319
+ body.edit_slot_survives = editSlotSurvives;
13131
13320
  if (preview === true)
13132
13321
  body.preview = true;
13133
13322
  const reply = await this.pool.routeRequest(this.identityFor(sessionId), body, timeoutMs, onProgress, this.generation);
@@ -13142,7 +13331,11 @@ class SubcTransport {
13142
13331
  }
13143
13332
  const { timeoutMs, onProgress } = this.splitOptions(options);
13144
13333
  const session = typeof params.session_id === "string" ? params.session_id : undefined;
13145
- const reply = await this.pool.routeRequest(this.identityFor(session), { name: command, arguments: params }, timeoutMs, onProgress, this.generation);
13334
+ const body = { name: command, arguments: params };
13335
+ const editSlotSurvives = this.pool.getEditSlotSurvives();
13336
+ if (editSlotSurvives !== undefined)
13337
+ body.edit_slot_survives = editSlotSurvives;
13338
+ const reply = await this.pool.routeRequest(this.identityFor(session), body, timeoutMs, onProgress, this.generation);
13146
13339
  const response = reliftReply(reply);
13147
13340
  this.captureStatusBar(response);
13148
13341
  return response;
@@ -13166,6 +13359,7 @@ class SubcTransportPool {
13166
13359
  onBgEventsNudge;
13167
13360
  onBgEventsNudgeRef;
13168
13361
  bgBackoffSleep;
13362
+ bgDispatchProbeIntervalMs;
13169
13363
  lifecycleDemandCheck;
13170
13364
  onLifecycleEvent;
13171
13365
  onBgNudgeRejected;
@@ -13181,8 +13375,11 @@ class SubcTransportPool {
13181
13375
  transportFailures = 0;
13182
13376
  transports = new Map;
13183
13377
  generationRejections = new Set;
13378
+ nudgeDeliveryLogState = new Map;
13184
13379
  pendingRootCleanups = new Set;
13185
13380
  shuttingDown = false;
13381
+ editSlotSurvives;
13382
+ editSlotSurvivesCaptured = false;
13186
13383
  constructor(options) {
13187
13384
  this.connectionFile = options.connectionFile;
13188
13385
  this.harness = options.harness;
@@ -13192,6 +13389,7 @@ class SubcTransportPool {
13192
13389
  this.onBgEventsNudge = options.onBgEventsNudge;
13193
13390
  this.onBgEventsNudgeRef = options.onBgEventsNudgeRef;
13194
13391
  this.bgBackoffSleep = options.bgBackoffSleep ?? ((ms) => new Promise((resolve4) => setTimeout(resolve4, ms)));
13392
+ this.bgDispatchProbeIntervalMs = options.bgDispatchProbeIntervalMs ?? BG_DISPATCH_PROBE_INTERVAL_MS;
13195
13393
  const lifecycle = options.lifecycle;
13196
13394
  const demandCheck = options.lifecycleDemandCheck ?? options.demandCheck ?? lifecycle?.demandCheck;
13197
13395
  this.lifecycleDemandCheck = demandCheck;
@@ -13508,6 +13706,35 @@ class SubcTransportPool {
13508
13706
  isCurrentSession(key, record) {
13509
13707
  return this.sessions.get(key) === record && !record.closed;
13510
13708
  }
13709
+ currentSessionForNudge(identity) {
13710
+ const current = this.sessions.get(identityKey(identity));
13711
+ return current && !current.closed ? current : null;
13712
+ }
13713
+ nudgeRefFor(record) {
13714
+ const poolId = this.currentPoolId();
13715
+ const generation = record.generation;
13716
+ if (poolId === undefined || generation === undefined)
13717
+ return;
13718
+ return {
13719
+ canonicalRoot: record.canonicalRoot,
13720
+ session: record.identity.session,
13721
+ concretePoolId: poolId,
13722
+ generation
13723
+ };
13724
+ }
13725
+ logNudgeDelivery(kind, record, message) {
13726
+ const key = `${kind}\x00${record.identityKey}`;
13727
+ const now = Date.now();
13728
+ const state = this.nudgeDeliveryLogState.get(key);
13729
+ if (state && now - state.lastEmittedAt < BG_LIFECYCLE_LOG_INTERVAL_MS) {
13730
+ state.suppressed += 1;
13731
+ return;
13732
+ }
13733
+ const suppressed = state?.suppressed ?? 0;
13734
+ this.nudgeDeliveryLogState.set(key, { lastEmittedAt: now, suppressed: 0 });
13735
+ const suffix = suppressed > 0 ? ` suppressed=${suppressed}` : "";
13736
+ log(`subc bg_events: ${message}${suffix}`, { sessionId: record.identity.session });
13737
+ }
13511
13738
  removeIndexMembership(record) {
13512
13739
  const keys = this.rootIndex.get(record.canonicalRoot);
13513
13740
  if (!keys)
@@ -13761,20 +13988,32 @@ class SubcTransportPool {
13761
13988
  return;
13762
13989
  if (record.bgSub)
13763
13990
  return;
13764
- const poolId = this.currentPoolId();
13765
- const generation = record.generation;
13766
- const nudgeRef = poolId !== undefined && generation !== undefined ? {
13767
- canonicalRoot: record.canonicalRoot,
13768
- session: identity.session,
13769
- concretePoolId: poolId,
13770
- generation
13771
- } : undefined;
13991
+ const nudgeRef = this.nudgeRefFor(record);
13772
13992
  const onNudge = () => {
13773
- if (!this.isCurrentSession(record.identityKey, record))
13993
+ const currentRecord = this.currentSessionForNudge(identity);
13994
+ if (!currentRecord) {
13995
+ this.logNudgeDelivery("drop-no-current-session", record, `nudge dropped cause=no-current-session root=${record.canonicalRoot}`);
13774
13996
  return;
13775
- this.onBgEventsNudge?.(identity.project_root, identity.session);
13776
- if (nudgeRef)
13777
- this.onBgEventsNudgeRef?.(nudgeRef);
13997
+ }
13998
+ if (currentRecord !== record) {
13999
+ this.logNudgeDelivery("forward-superseded-carrier", currentRecord, `nudge forwarding cause=superseded-carrying-record root=${currentRecord.canonicalRoot}`);
14000
+ }
14001
+ const currentRef = this.nudgeRefFor(currentRecord);
14002
+ let delivered = false;
14003
+ if (currentRef && this.onBgEventsNudgeRef) {
14004
+ this.onBgEventsNudgeRef(currentRef);
14005
+ delivered = true;
14006
+ }
14007
+ if (this.onBgEventsNudge) {
14008
+ if (!currentRef && this.onBgEventsNudgeRef) {
14009
+ this.logNudgeDelivery("fallback-missing-generation", currentRecord, `nudge dispatch fallback=root-session-handler cause=generation-provenance-unavailable root=${currentRecord.canonicalRoot}`);
14010
+ }
14011
+ this.onBgEventsNudge(currentRecord.identity.project_root, currentRecord.identity.session);
14012
+ delivered = true;
14013
+ }
14014
+ if (delivered)
14015
+ return;
14016
+ this.logNudgeDelivery("drop-no-compatible-handler", currentRecord, `nudge dropped cause=generation-provenance-unavailable-and-root-session-handler-unwired root=${currentRecord.canonicalRoot}`);
13778
14017
  };
13779
14018
  let sub = null;
13780
14019
  const clearDormantSubscription = () => {
@@ -13786,7 +14025,7 @@ class SubcTransportPool {
13786
14025
  return false;
13787
14026
  this.markRootDormant(record.canonicalRoot, error2);
13788
14027
  return true;
13789
- }, clearDormantSubscription, nudgeRef, () => this.isCurrentSession(record.identityKey, record) && this.isCurrentLiveGeneration(record.canonicalRoot, record.generation));
14028
+ }, clearDormantSubscription, this.bgDispatchProbeIntervalMs, nudgeRef, () => this.isCurrentSession(record.identityKey, record) && this.isCurrentLiveGeneration(record.canonicalRoot, record.generation));
13790
14029
  record.bgSub = sub;
13791
14030
  if (!this.rootCanAttach(record.canonicalRoot)) {
13792
14031
  record.bgSub = null;
@@ -13848,7 +14087,21 @@ class SubcTransportPool {
13848
14087
  return Promise.resolve();
13849
14088
  return registry.requestProjectRootClose(registration.concretePoolId, root, generation, cause);
13850
14089
  }
13851
- setConfigureOverride(_key, _value) {}
14090
+ setConfigureOverride(key, value) {
14091
+ if (key !== "edit_slot_survives")
14092
+ return;
14093
+ if (typeof value !== "boolean") {
14094
+ throw new Error("edit_slot_survives must be set once to a boolean");
14095
+ }
14096
+ if (this.editSlotSurvivesCaptured) {
14097
+ throw new Error("edit_slot_survives is write-once and was already captured");
14098
+ }
14099
+ this.editSlotSurvives = value;
14100
+ this.editSlotSurvivesCaptured = true;
14101
+ }
14102
+ getEditSlotSurvives() {
14103
+ return this.editSlotSurvives;
14104
+ }
13852
14105
  async reconfigure(_projectRoot, _overrides) {}
13853
14106
  async replaceBinary(path2) {
13854
14107
  return path2;
@@ -13926,14 +14179,29 @@ function toolErrorFromResponse(command, response) {
13926
14179
  return new AftToolError(message, code, response);
13927
14180
  }
13928
14181
  var BASH_TRANSPORT_DISPOSITION = "The transport to the AFT daemon was interrupted; no background task was created for this command and no task ID exists. Re-run the command. Do not poll bash_status for it.";
14182
+ var SUBC_MODULE_RESTART_DISPOSITION = "The AFT daemon module restarted while this call was in flight, so its outcome is UNKNOWN: it may or may not have executed. Verify actual state before re-running, and never blind-retry a mutation.";
14183
+ function isRouteGoodbyeError(error2) {
14184
+ if (!(error2 instanceof SubcError))
14185
+ return false;
14186
+ if (error2.code === undefined) {
14187
+ return error2.message.includes("route closed by subc");
14188
+ }
14189
+ return error2.code === "route_closed" && error2.message.includes("route closed by subc");
14190
+ }
13929
14191
  function isTransportClassError(error2) {
13930
14192
  return isBridgeTransportTimeout(error2) || isConsumerReconnectTransient(error2) || error2 instanceof StaleRouteHandleError || error2 instanceof SubcRootGenerationExpiredError || error2 instanceof SubcRootReapedError;
13931
14193
  }
13932
14194
  function adaptToolError(command, error2) {
13933
- if (command !== "bash" || !isTransportClassError(error2))
13934
- return error2;
13935
14195
  if (!(error2 instanceof Error))
13936
14196
  return error2;
14197
+ if (isRouteGoodbyeError(error2)) {
14198
+ if (error2.message.includes(SUBC_MODULE_RESTART_DISPOSITION))
14199
+ return error2;
14200
+ error2.message = error2.message ? `${error2.message} ${SUBC_MODULE_RESTART_DISPOSITION}` : SUBC_MODULE_RESTART_DISPOSITION;
14201
+ return error2;
14202
+ }
14203
+ if (command !== "bash" || !isTransportClassError(error2))
14204
+ return error2;
13937
14205
  if (error2.message.includes(BASH_TRANSPORT_DISPOSITION))
13938
14206
  return error2;
13939
14207
  error2.message = error2.message ? `${error2.message} ${BASH_TRANSPORT_DISPOSITION}` : BASH_TRANSPORT_DISPOSITION;
@@ -16065,6 +16333,8 @@ class BridgePool {
16065
16333
  idleTimeoutMs;
16066
16334
  bridgeOptions;
16067
16335
  configOverrides;
16336
+ editSlotSurvives;
16337
+ editSlotSurvivesCaptured = false;
16068
16338
  projectConfigLoader;
16069
16339
  logger;
16070
16340
  cleanupTimer = null;
@@ -16089,7 +16359,16 @@ class BridgePool {
16089
16359
  logger: options.logger,
16090
16360
  childEnv: options.childEnv
16091
16361
  };
16092
- this.configOverrides = configOverrides;
16362
+ this.configOverrides = { ...configOverrides };
16363
+ const initialEditSlotSurvives = this.configOverrides.edit_slot_survives;
16364
+ delete this.configOverrides.edit_slot_survives;
16365
+ if (initialEditSlotSurvives !== undefined) {
16366
+ if (typeof initialEditSlotSurvives !== "boolean") {
16367
+ throw new Error("edit_slot_survives must be a boolean");
16368
+ }
16369
+ this.editSlotSurvives = initialEditSlotSurvives;
16370
+ this.editSlotSurvivesCaptured = true;
16371
+ }
16093
16372
  this.startCleanupTimer();
16094
16373
  }
16095
16374
  getActiveBridgeForRoot(projectRoot) {
@@ -16128,7 +16407,8 @@ class BridgePool {
16128
16407
  }
16129
16408
  const projectOverrides = this.loadProjectOverrides(key);
16130
16409
  const mergedOverrides = { ...this.configOverrides, ...projectOverrides };
16131
- const bridge = new BinaryBridge(this.binaryPath, key, this.bridgeOptions, mergedOverrides);
16410
+ delete mergedOverrides.edit_slot_survives;
16411
+ const bridge = new BinaryBridge(this.binaryPath, key, this.bridgeOptions, mergedOverrides, this.editSlotSurvivesCaptured ? this.editSlotSurvives : undefined);
16132
16412
  this.bridges.set(key, { bridge, lastUsed: Date.now() });
16133
16413
  return bridge;
16134
16414
  }
@@ -16232,6 +16512,23 @@ class BridgePool {
16232
16512
  error(message, meta);
16233
16513
  }
16234
16514
  setConfigureOverride(key, value) {
16515
+ if (key === "edit_slot_survives") {
16516
+ if (typeof value !== "boolean") {
16517
+ throw new Error("edit_slot_survives must be set once to a boolean");
16518
+ }
16519
+ if (this.editSlotSurvivesCaptured) {
16520
+ throw new Error("edit_slot_survives is write-once and was already captured");
16521
+ }
16522
+ this.editSlotSurvives = value;
16523
+ this.editSlotSurvivesCaptured = true;
16524
+ for (const entry of this.bridges.values()) {
16525
+ entry.bridge.setEditSlotSurvives(value);
16526
+ }
16527
+ for (const bridge of this.staleBridges) {
16528
+ bridge.setEditSlotSurvives(value);
16529
+ }
16530
+ return;
16531
+ }
16235
16532
  if (value === undefined) {
16236
16533
  delete this.configOverrides[key];
16237
16534
  } else {
@@ -16289,6 +16586,7 @@ class RevivableTransportPool {
16289
16586
  revival = null;
16290
16587
  transports = new Map;
16291
16588
  configureOverrides = new Map;
16589
+ editSlotSurvivesCaptured = false;
16292
16590
  constructor(initialPool, createPool, onBinaryReplaced) {
16293
16591
  this.createPool = createPool;
16294
16592
  this.onBinaryReplaced = onBinaryReplaced;
@@ -16319,6 +16617,18 @@ class RevivableTransportPool {
16319
16617
  return this.getBridge(projectRoot).toolCall(runtime.sessionID, name, rawArgs, options);
16320
16618
  }
16321
16619
  setConfigureOverride(key, value) {
16620
+ if (key === "edit_slot_survives") {
16621
+ if (typeof value !== "boolean") {
16622
+ throw new Error("edit_slot_survives must be set once to a boolean");
16623
+ }
16624
+ if (this.editSlotSurvivesCaptured) {
16625
+ throw new Error("edit_slot_survives is write-once and was already captured");
16626
+ }
16627
+ this.activePool.setConfigureOverride(key, value);
16628
+ this.editSlotSurvivesCaptured = true;
16629
+ this.configureOverrides.set(key, value);
16630
+ return;
16631
+ }
16322
16632
  if (value === undefined)
16323
16633
  this.configureOverrides.delete(key);
16324
16634
  else
@@ -16326,14 +16636,20 @@ class RevivableTransportPool {
16326
16636
  this.activePool.setConfigureOverride(key, value);
16327
16637
  }
16328
16638
  async reconfigure(projectRoot, overrides) {
16639
+ const pool = await this.ensureActivePool();
16640
+ const runtimeOverrides = {};
16329
16641
  for (const [key, value] of Object.entries(overrides)) {
16642
+ if (key === "edit_slot_survives") {
16643
+ this.setConfigureOverride(key, value);
16644
+ continue;
16645
+ }
16330
16646
  if (value === undefined)
16331
16647
  this.configureOverrides.delete(key);
16332
16648
  else
16333
16649
  this.configureOverrides.set(key, value);
16650
+ runtimeOverrides[key] = value;
16334
16651
  }
16335
- const pool = await this.ensureActivePool();
16336
- await pool.reconfigure(projectRoot, overrides);
16652
+ await pool.reconfigure(projectRoot, runtimeOverrides);
16337
16653
  }
16338
16654
  async replaceBinary(path2) {
16339
16655
  const replaced = await this.activePool.replaceBinary(path2);
@@ -16739,6 +17055,12 @@ var UNKNOWN_COMPLETION_TTL_MS = 5000;
16739
17055
  var UNKNOWN_COMPLETION_CAP = 32;
16740
17056
  var DEFAULT_SESSION_ID2 = "__default__";
16741
17057
  var LOG_PREFIX = "[aft-pi] bg-notifications:";
17058
+ var SUBC_NUDGE_LOG_INTERVAL_MS = 60000;
17059
+ var subcNudgesInFlight = new Map;
17060
+ var subcNudgeLogState = new Map;
17061
+ function normalizeSessionID(sessionID) {
17062
+ return sessionID && sessionID.length > 0 ? sessionID : DEFAULT_SESSION_ID2;
17063
+ }
16742
17064
  function consumeBgCompletion(sessionID, taskId) {
16743
17065
  const state = stateFor(sessionID);
16744
17066
  state.pendingCompletions = state.pendingCompletions.filter((c) => c.task_id !== taskId);
@@ -16934,11 +17256,49 @@ async function handleTurnEndBgCompletions(drainContext) {
16934
17256
  stateFor(drainContext.sessionID).wakeDeferredTaskIds.clear();
16935
17257
  await triggerWakeIfPending(drainContext, false, true);
16936
17258
  }
16937
- async function handleSubcBgEventsNudge(drainContext) {
17259
+ function handleSubcBgEventsNudge(drainContext) {
17260
+ const resolvedDrainContext = {
17261
+ ...drainContext,
17262
+ sessionID: normalizeSessionID(drainContext.sessionID)
17263
+ };
17264
+ const key = `${resolvedDrainContext.directory}\x00${resolvedDrainContext.sessionID}`;
17265
+ const inFlight = subcNudgesInFlight.get(key);
17266
+ if (inFlight) {
17267
+ logSubcNudgeLifecycle(resolvedDrainContext, "coalesced-in-flight", "nudge coalesced cause=handler-already-in-flight");
17268
+ return inFlight;
17269
+ }
17270
+ logSubcNudgeLifecycle(resolvedDrainContext, "handler-entry", "nudge handler entered");
17271
+ const handling = handleSubcBgEventsNudgeOnce(resolvedDrainContext);
17272
+ subcNudgesInFlight.set(key, handling);
17273
+ const clear = () => {
17274
+ if (subcNudgesInFlight.get(key) === handling)
17275
+ subcNudgesInFlight.delete(key);
17276
+ };
17277
+ handling.then(clear, clear);
17278
+ return handling;
17279
+ }
17280
+ async function handleSubcBgEventsNudgeOnce(drainContext) {
16938
17281
  bridgeForDrain(drainContext);
16939
17282
  stateFor(drainContext.sessionID).wakeDeferredTaskIds.clear();
16940
17283
  await triggerWakeIfPending(drainContext, false, true, true);
16941
17284
  }
17285
+ function logSubcNudgeLifecycle(drainContext, kind, message) {
17286
+ const key = `${kind}\x00${drainContext.directory}\x00${drainContext.sessionID}`;
17287
+ const now = Date.now();
17288
+ const state = subcNudgeLogState.get(key);
17289
+ if (state && now - state.lastEmittedAt < SUBC_NUDGE_LOG_INTERVAL_MS) {
17290
+ state.suppressed += 1;
17291
+ return;
17292
+ }
17293
+ const suppressed = state?.suppressed ?? 0;
17294
+ subcNudgeLogState.set(key, { lastEmittedAt: now, suppressed: 0 });
17295
+ sessionLog(drainContext.sessionID, `${LOG_PREFIX} ${message}`, {
17296
+ event: "subc_bg_nudge_delivery",
17297
+ cause: kind,
17298
+ canonical_root: drainContext.directory,
17299
+ suppressed
17300
+ });
17301
+ }
16942
17302
  async function triggerWakeIfPending(drainContext, skipDrain, includeDeferredCompletions = true, forceDrain = false) {
16943
17303
  const state = stateFor(drainContext.sessionID);
16944
17304
  if (!skipDrain && (forceDrain || state.outstandingTaskIds.size > 0 || !state.forcedDrainCompleted)) {
@@ -17406,7 +17766,7 @@ import {
17406
17766
  // package.json
17407
17767
  var package_default = {
17408
17768
  name: "@cortexkit/aft-pi",
17409
- version: "0.49.4",
17769
+ version: "0.50.0",
17410
17770
  type: "module",
17411
17771
  description: "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
17412
17772
  main: "dist/index.js",
@@ -17429,19 +17789,19 @@ var package_default = {
17429
17789
  "test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
17430
17790
  },
17431
17791
  dependencies: {
17432
- "@cortexkit/aft-bridge": "0.49.4",
17792
+ "@cortexkit/aft-bridge": "0.50.0",
17433
17793
  "comment-json": "^5.0.0",
17434
17794
  diff: "^8.0.4",
17435
17795
  typebox: "1.1.38",
17436
17796
  zod: "^4.4.3"
17437
17797
  },
17438
17798
  optionalDependencies: {
17439
- "@cortexkit/aft-darwin-arm64": "0.49.4",
17440
- "@cortexkit/aft-darwin-x64": "0.49.4",
17441
- "@cortexkit/aft-linux-arm64": "0.49.4",
17442
- "@cortexkit/aft-linux-x64": "0.49.4",
17443
- "@cortexkit/aft-win32-arm64": "0.49.4",
17444
- "@cortexkit/aft-win32-x64": "0.49.4"
17799
+ "@cortexkit/aft-darwin-arm64": "0.50.0",
17800
+ "@cortexkit/aft-darwin-x64": "0.50.0",
17801
+ "@cortexkit/aft-linux-arm64": "0.50.0",
17802
+ "@cortexkit/aft-linux-x64": "0.50.0",
17803
+ "@cortexkit/aft-win32-arm64": "0.50.0",
17804
+ "@cortexkit/aft-win32-x64": "0.50.0"
17445
17805
  },
17446
17806
  devDependencies: {
17447
17807
  "@earendil-works/pi-coding-agent": "^0.80.2",
@@ -32502,6 +32862,7 @@ var BackupConfigSchema = exports_external.object({
32502
32862
  var AftConfigSchema = exports_external.preprocess((value) => stripHarnessSpecificConfigKeys(value, OPENCODE_ONLY_KEYS), exports_external.object({
32503
32863
  $schema: exports_external.string().optional(),
32504
32864
  enabled: exports_external.boolean().optional(),
32865
+ edit_mode: exports_external.enum(["default", "hashline"]).optional(),
32505
32866
  format_on_edit: exports_external.boolean().optional(),
32506
32867
  formatter_timeout_secs: exports_external.number().int().min(1).max(600).optional(),
32507
32868
  validate_on_edit: exports_external.enum(["syntax", "full"]).optional(),
@@ -32715,10 +33076,15 @@ function loadConfigFromPath(configPath) {
32715
33076
  }
32716
33077
  }
32717
33078
  function parseConfigPartially(rawConfig) {
33079
+ let configForParsing = rawConfig;
33080
+ if (Object.hasOwn(rawConfig, "edit_mode") && rawConfig.edit_mode !== "default" && rawConfig.edit_mode !== "hashline") {
33081
+ warn2(`Unknown edit_mode value ${JSON.stringify(rawConfig.edit_mode)}; falling back to "default"`);
33082
+ configForParsing = { ...rawConfig, edit_mode: "default" };
33083
+ }
32718
33084
  const partialConfig = {};
32719
33085
  const invalidSections = [];
32720
- for (const key of Object.keys(rawConfig)) {
32721
- const sectionResult = AftConfigSchema.safeParse({ [key]: rawConfig[key] });
33086
+ for (const key of Object.keys(configForParsing)) {
33087
+ const sectionResult = AftConfigSchema.safeParse({ [key]: configForParsing[key] });
32722
33088
  if (sectionResult.success) {
32723
33089
  const parsed = sectionResult.data;
32724
33090
  if (parsed[key] !== undefined) {
@@ -32843,6 +33209,7 @@ function getProjectLspStrippedKeys(lsp) {
32843
33209
  }
32844
33210
  var PROJECT_SAFE_TOP_LEVEL_FIELDS = new Set([
32845
33211
  "enabled",
33212
+ "edit_mode",
32846
33213
  "tool_surface",
32847
33214
  "format_on_edit",
32848
33215
  "validate_on_edit",
@@ -35190,6 +35557,15 @@ var EditParams = Type2.Object({
35190
35557
  description: "Batch edits — non-empty array of { oldString, newString }, { oldString, newString, replaceAll: true }, or { startLine, endLine, content } objects applied atomically."
35191
35558
  }))
35192
35559
  });
35560
+ var HashlineEditParams = Type2.Object({
35561
+ patch: Type2.String({
35562
+ minLength: 1,
35563
+ description: "Hashline patch text with one or more [path#TAG] sections and PUT/CUT/REM/MV operations"
35564
+ })
35565
+ }, { additionalProperties: false });
35566
+ function stringList(value) {
35567
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
35568
+ }
35193
35569
  var GrepParams = Type2.Object({
35194
35570
  pattern: Type2.String({ description: "Regex pattern to search for" }),
35195
35571
  path: Type2.Optional(Type2.String({
@@ -35354,7 +35730,42 @@ PDFs aren't supported on the Pi harness yet.`, response);
35354
35730
  }
35355
35731
  }));
35356
35732
  }
35357
- if (surface.hoistEdit) {
35733
+ if (surface.hoistEdit && ctx.hashlineEffective === true) {
35734
+ pi.registerTool({
35735
+ name: "edit",
35736
+ label: "edit",
35737
+ description: "Apply a hashline patch. Arguments are exactly `{patch}` where `patch` is a non-empty string of one or more `[path#TAG]` sections with PUT/CUT/REM/MV operations. Paths and tags come from section headers; obtain tags from tagged reads. Server-owned preview control is outside this schema.",
35738
+ promptSnippet: "Apply a tagged hashline patch through the edit tool",
35739
+ promptGuidelines: [
35740
+ "Read a file to obtain its current hashline tag before editing it.",
35741
+ "Pass exactly one patch string; paths and tags belong in patch section headers."
35742
+ ],
35743
+ parameters: HashlineEditParams,
35744
+ async execute(_toolCallId, params, _signal, _onUpdate, extCtx) {
35745
+ const bridge = bridgeFor(ctx, extCtx.cwd);
35746
+ const rawArgs = { patch: params.patch };
35747
+ const preflight = await callToolCall(bridge, "hashline_preflight", rawArgs, extCtx);
35748
+ if (preflight.success === false)
35749
+ throw toolErrorFromResponse("edit", preflight);
35750
+ for (const target of [
35751
+ ...stringList(preflight.affected_paths),
35752
+ ...stringList(preflight.mv_destinations)
35753
+ ]) {
35754
+ await assertExternalDirectoryPermission(extCtx, await resolvePathArg(extCtx.cwd, target), {
35755
+ restrictToProjectRoot: surface.restrictToProjectRoot
35756
+ });
35757
+ }
35758
+ const preview = await callToolCall(bridge, "edit", rawArgs, extCtx, { preview: true });
35759
+ if (preview.success === false)
35760
+ throw toolErrorFromResponse("edit", preview);
35761
+ const response = await callToolCall(bridge, "edit", rawArgs, extCtx);
35762
+ if (response.success === false)
35763
+ throw toolErrorFromResponse("edit", response);
35764
+ return buildMutationResult(response);
35765
+ }
35766
+ });
35767
+ }
35768
+ if (surface.hoistEdit && ctx.hashlineEffective !== true) {
35358
35769
  pi.registerTool(withPathAliasPreparation({
35359
35770
  name: "edit",
35360
35771
  label: "edit",
@@ -38574,7 +38985,7 @@ var PLUGIN_VERSION = (() => {
38574
38985
  return "0.0.0";
38575
38986
  }
38576
38987
  })();
38577
- var ANNOUNCEMENT_VERSION = "0.49.4";
38988
+ var ANNOUNCEMENT_VERSION = "0.50.0";
38578
38989
  var ANNOUNCEMENT_FEATURES = [
38579
38990
  "Callgraph stays consistent under load: edits arriving mid-rebuild can no longer be silently lost from navigation results.",
38580
38991
  "aft_zoom handles real-world .jsonc: files with comment banners above the opening brace now resolve, and not-found errors point at the segment that actually failed (thanks @iceteaSA).",
@@ -38850,6 +39261,16 @@ ${lines}
38850
39261
  poolOptions,
38851
39262
  configOverrides,
38852
39263
  subcConnectionFile: config2.subc?.connection_file,
39264
+ onBgEventsNudge: (directory, sessionID) => {
39265
+ handleSubcBgEventsNudge({
39266
+ ctx,
39267
+ directory,
39268
+ sessionID,
39269
+ runtime: pi
39270
+ }).catch((err) => {
39271
+ warn2(`[aft-pi] bg nudge rejected: ${err instanceof Error ? err.message : String(err)}`);
39272
+ });
39273
+ },
38853
39274
  onBgEventsNudgeRef: (ref) => {
38854
39275
  handleSubcBgEventsNudge({
38855
39276
  ctx,
@@ -38874,8 +39295,16 @@ ${lines}
38874
39295
  });
38875
39296
  }
38876
39297
  pool.setConfigureOverride("harness", "pi");
38877
- pool.setConfigureOverride("aft_search_registered", resolvePiToolSurface(config2).semantic);
38878
- const ctx = { pool, config: config2, storageDir };
39298
+ const surface = resolvePiToolSurface(config2);
39299
+ const hashlineEditRegistered = config2.edit_mode === "hashline" && surface.hoistEdit;
39300
+ pool.setConfigureOverride("edit_slot_survives", hashlineEditRegistered);
39301
+ pool.setConfigureOverride("aft_search_registered", surface.semantic);
39302
+ const ctx = {
39303
+ pool,
39304
+ config: config2,
39305
+ hashlineEffective: hashlineEditRegistered,
39306
+ storageDir
39307
+ };
38879
39308
  if (onnxRuntimePromise) {
38880
39309
  onnxRuntimePromise.then((ortDylibDir) => {
38881
39310
  if (ortDylibDir) {
@@ -38913,7 +39342,6 @@ ${lines}
38913
39342
  if (ANNOUNCEMENT_VERSION && ANNOUNCEMENT_FEATURES.length > 0) {
38914
39343
  sendFeatureAnnouncement(ANNOUNCEMENT_VERSION, ANNOUNCEMENT_FEATURES, ANNOUNCEMENT_FOOTER, storageDir);
38915
39344
  }
38916
- const surface = resolvePiToolSurface(config2);
38917
39345
  registerPiToolSurface(pi, ctx, surface);
38918
39346
  registerWorkflowHints(pi, config2, surface);
38919
39347
  registerStatusCommand(pi, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAEjB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAU,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyDjD;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAuFD;;;;;;;;;GASG;AACH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/E,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAgGD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,kEAAkE;AAClE,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8ED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CA8PN;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,eAAe,CAAC,mBAAmB,CAAC,CAmFtC;AAuED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,GAAG,MAAM,EAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,EAC5C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB,SAAS,GAAG,IAAI,CAmDlB;AAQD;6BAC6B;AAC7B,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA0B3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,mBAAmB,EAAE,OAAO,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAER"}
1
+ {"version":3,"file":"hoisted.d.ts","sourceRoot":"","sources":["../../src/tools/hoisted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EAEjB,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAU,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyDjD;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAuFD;;;;;;;;;GASG;AACH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/E,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAiHD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,kEAAkE;AAClE,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8ED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CA0SN;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,eAAe,CAAC,mBAAmB,CAAC,CAmFtC;AAuED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,GAAG,MAAM,EAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,EAC5C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB,SAAS,GAAG,IAAI,CAmDlB;AAQD;6BAC6B;AAC7B,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA0B3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,mBAAmB,EAAE,OAAO,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAER"}
package/dist/types.d.ts CHANGED
@@ -12,6 +12,8 @@ import type { AftConfig } from "./config.js";
12
12
  export interface PluginContext {
13
13
  pool: AftTransportPool;
14
14
  config: AftConfig;
15
+ /** Whether hashline edit/read mode is active for this plugin registration. */
16
+ hashlineEffective?: boolean;
15
17
  /** Absolute path to AFT's data storage dir (e.g. ~/.local/share/cortexkit/aft). */
16
18
  storageDir: string;
17
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/aft-pi",
3
- "version": "0.49.4",
3
+ "version": "0.50.0",
4
4
  "type": "module",
5
5
  "description": "Pi coding agent extension for Agent File Tools (AFT) — tree-sitter and LSP-powered code analysis",
6
6
  "main": "dist/index.js",
@@ -23,19 +23,19 @@
23
23
  "test:unit": "bun test src/__tests__ --path-ignore-patterns 'src/__tests__/e2e/**'"
24
24
  },
25
25
  "dependencies": {
26
- "@cortexkit/aft-bridge": "0.49.4",
26
+ "@cortexkit/aft-bridge": "0.50.0",
27
27
  "comment-json": "^5.0.0",
28
28
  "diff": "^8.0.4",
29
29
  "typebox": "1.1.38",
30
30
  "zod": "^4.4.3"
31
31
  },
32
32
  "optionalDependencies": {
33
- "@cortexkit/aft-darwin-arm64": "0.49.4",
34
- "@cortexkit/aft-darwin-x64": "0.49.4",
35
- "@cortexkit/aft-linux-arm64": "0.49.4",
36
- "@cortexkit/aft-linux-x64": "0.49.4",
37
- "@cortexkit/aft-win32-arm64": "0.49.4",
38
- "@cortexkit/aft-win32-x64": "0.49.4"
33
+ "@cortexkit/aft-darwin-arm64": "0.50.0",
34
+ "@cortexkit/aft-darwin-x64": "0.50.0",
35
+ "@cortexkit/aft-linux-arm64": "0.50.0",
36
+ "@cortexkit/aft-linux-x64": "0.50.0",
37
+ "@cortexkit/aft-win32-arm64": "0.50.0",
38
+ "@cortexkit/aft-win32-x64": "0.50.0"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@earendil-works/pi-coding-agent": "^0.80.2",