@ashx-j/lunr 0.2.19 → 0.2.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +2 -2
  3. package/dist/builtin-extensions/index.d.ts.map +1 -1
  4. package/dist/builtin-extensions/index.js +0 -2
  5. package/dist/builtin-extensions/index.js.map +1 -1
  6. package/dist/builtin-extensions/pi-intercom/broker/spawn.d.ts +6 -4
  7. package/dist/builtin-extensions/pi-intercom/broker/spawn.d.ts.map +1 -1
  8. package/dist/builtin-extensions/pi-intercom/broker/spawn.js +93 -49
  9. package/dist/builtin-extensions/pi-intercom/broker/spawn.js.map +1 -1
  10. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  11. package/dist/builtin-extensions/pi-intercom/index.js +351 -351
  12. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  13. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -1
  14. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  15. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +80 -43
  16. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  17. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts +18 -8
  18. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  19. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +36 -11
  20. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -3
  22. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  23. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +21 -12
  24. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  25. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +7 -1
  26. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  27. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js +225 -15
  28. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  29. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.d.ts +29 -0
  30. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.d.ts.map +1 -0
  31. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js +179 -0
  32. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js.map +1 -0
  33. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts +89 -0
  34. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts.map +1 -0
  35. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js +541 -0
  36. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js.map +1 -0
  37. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +9 -1
  38. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +34 -9
  40. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  41. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  42. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js +1 -2
  43. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  44. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts +2 -1
  45. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
  46. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +35 -8
  47. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  49. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +3 -3
  51. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts +1 -0
  53. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +54 -38
  55. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +3 -6
  57. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js +64 -5
  59. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +1 -0
  62. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +21 -8
  65. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  66. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +62 -16
  68. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  69. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts +2 -0
  70. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.d.ts.map +1 -1
  71. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js +75 -18
  72. package/dist/builtin-extensions/pi-subagents/src/runs/shared/acceptance.js.map +1 -1
  73. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +13 -1
  74. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  75. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +67 -11
  76. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  77. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
  78. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +5 -2
  79. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
  80. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  81. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +13 -3
  82. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  83. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +3 -0
  84. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
  85. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +68 -11
  86. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
  87. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +12 -1
  88. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
  89. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +21 -2
  90. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
  91. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +16 -4
  92. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  93. package/dist/builtin-extensions/pi-subagents/src/shared/types.js +1 -1
  94. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  95. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +2 -0
  96. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  97. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +24 -6
  98. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  99. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +44 -4
  100. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  101. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +227 -133
  102. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  103. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +1 -1
  105. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -1
  106. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +2 -13
  107. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -1
  108. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js +5 -91
  109. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
  110. package/dist/core/permissions.d.ts +1 -0
  111. package/dist/core/permissions.d.ts.map +1 -1
  112. package/dist/core/permissions.js +8 -4
  113. package/dist/core/permissions.js.map +1 -1
  114. package/dist/core/plan-mode.d.ts.map +1 -1
  115. package/dist/core/plan-mode.js +0 -5
  116. package/dist/core/plan-mode.js.map +1 -1
  117. package/dist/core/runtime-bridges.d.ts.map +1 -1
  118. package/dist/core/runtime-bridges.js +0 -2
  119. package/dist/core/runtime-bridges.js.map +1 -1
  120. package/dist/core/subagent-cancellation.d.ts +21 -0
  121. package/dist/core/subagent-cancellation.d.ts.map +1 -0
  122. package/dist/core/subagent-cancellation.js +53 -0
  123. package/dist/core/subagent-cancellation.js.map +1 -0
  124. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  125. package/dist/modes/interactive/components/assistant-message.js +12 -18
  126. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  127. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  128. package/dist/modes/interactive/components/tool-execution.js +12 -0
  129. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  130. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  131. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  132. package/dist/modes/interactive/interactive-mode.js +29 -0
  133. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  134. package/dist/node-runtime/{agent-session-services-35WNVGMR.js → agent-session-services-75JKASCW.js} +3 -3
  135. package/dist/node-runtime/{builtin-extensions-322XDDEM.js → builtin-extensions-X4JMM4ZS.js} +2 -2
  136. package/dist/node-runtime/{chunk-XATUM2HK.js → chunk-25I2BHAA.js} +1 -1
  137. package/dist/node-runtime/{chunk-MCUNIRD5.js → chunk-46ECNOLF.js} +477 -246
  138. package/dist/node-runtime/{chunk-J26TSGDL.js → chunk-6N22HULO.js} +8 -5
  139. package/dist/node-runtime/{chunk-TFBIJTM3.js → chunk-AL2FMKKM.js} +7 -7
  140. package/dist/node-runtime/chunk-AOFXZQKA.js +24 -0
  141. package/dist/node-runtime/chunk-BBUVIEZB.js +51 -0
  142. package/dist/node-runtime/{chunk-ZRCBN365.js → chunk-ELWEXVO5.js} +7 -7
  143. package/dist/node-runtime/{chunk-ATGA2WLC.js → chunk-JYNNB7DU.js} +397 -34
  144. package/dist/node-runtime/{chunk-4FX25LWP.js → chunk-K3646JTM.js} +16 -117
  145. package/dist/node-runtime/{chunk-PNJSG3IZ.js → chunk-LTYWTR3V.js} +1 -369
  146. package/dist/node-runtime/{chunk-TXHKBRHZ.js → chunk-QKFMBRAL.js} +45 -31
  147. package/dist/node-runtime/{command-DWUM5X3U.js → command-RBTRL55A.js} +1 -1
  148. package/dist/node-runtime/{gateway-UZXMFGWY.js → gateway-L4ANRTVE.js} +2 -2
  149. package/dist/node-runtime/index.js +9 -8
  150. package/dist/node-runtime/{interactive-mode-QT5IKGQ5.js → interactive-mode-HPUNH7SV.js} +5 -4
  151. package/dist/node-runtime/{lunr-cron-QPBTKBGI.js → lunr-cron-NNYTWTGF.js} +2 -2
  152. package/dist/node-runtime/main.js +7 -7
  153. package/dist/node-runtime/{pi-intercom-EEMBGQID.js → pi-intercom-DDQMRNPJ.js} +96 -76
  154. package/dist/node-runtime/{pi-subagents-7YJ3I4VE.js → pi-subagents-T5WMMLBB.js} +1040 -318
  155. package/dist/node-runtime/rpc-entry.js +7 -7
  156. package/dist/node-runtime/{runtime-bridges-3RKBDLNA.js → runtime-bridges-NJQERQ72.js} +2 -4
  157. package/dist/node-runtime/{subagent-executor-5Q5A4HJ2.js → subagent-executor-SRFC26SJ.js} +168 -249
  158. package/docs/features.md +17 -3
  159. package/docs/keybindings.md +3 -1
  160. package/docs/settings.md +1 -1
  161. package/package.json +4 -4
  162. package/dist/builtin-extensions/lunr-settings-tools.d.ts +0 -4
  163. package/dist/builtin-extensions/lunr-settings-tools.d.ts.map +0 -1
  164. package/dist/builtin-extensions/lunr-settings-tools.js +0 -120
  165. package/dist/builtin-extensions/lunr-settings-tools.js.map +0 -1
  166. package/dist/core/settings-tools-bridge.d.ts +0 -35
  167. package/dist/core/settings-tools-bridge.d.ts.map +0 -1
  168. package/dist/core/settings-tools-bridge.js +0 -56
  169. package/dist/core/settings-tools-bridge.js.map +0 -1
  170. package/dist/node-runtime/chunk-3NMWLTPV.js +0 -64
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  isPlanModeActive,
7
7
  requestPlanApproval
8
- } from "./chunk-J26TSGDL.js";
8
+ } from "./chunk-6N22HULO.js";
9
9
  import {
10
10
  ashxj_tui_default
11
11
  } from "./chunk-JHYKXIMM.js";
@@ -49,12 +49,12 @@ function readMemory() {
49
49
  let file = memoryFile();
50
50
  return existsSync(file) ? readFileSync(file, "utf-8") : "";
51
51
  }
52
- function writeMemoryRaw(text2) {
53
- ensureDir(), writeFileSync(memoryFile(), text2, "utf-8");
52
+ function writeMemoryRaw(text) {
53
+ ensureDir(), writeFileSync(memoryFile(), text, "utf-8");
54
54
  }
55
55
  function memoryLines() {
56
- let text2 = readMemory();
57
- return text2.trim() ? text2.split(`
56
+ let text = readMemory();
57
+ return text.trim() ? text.split(`
58
58
  `).filter((l) => l.trim().length > 0) : [];
59
59
  }
60
60
  function clampCap(n) {
@@ -1089,11 +1089,11 @@ function lunr_todos_default(pi) {
1089
1089
  return;
1090
1090
  }
1091
1091
  ctx.ui.setWidget(WIDGET_KEY, (_tui, theme) => {
1092
- let text2 = new Text(lines.map((l) => colorize(l, theme)).join(`
1092
+ let text = new Text(lines.map((l) => colorize(l, theme)).join(`
1093
1093
  `), 1, 0);
1094
1094
  return {
1095
- render: (width) => text2.render(width),
1096
- invalidate: () => text2.invalidate?.(),
1095
+ render: (width) => text.render(width),
1096
+ invalidate: () => text.invalidate?.(),
1097
1097
  handleClick: () => (expanded = !expanded, refreshWidget(), !0)
1098
1098
  };
1099
1099
  }, { placement: "aboveEditor" });
@@ -1135,12 +1135,12 @@ function lunr_todos_default(pi) {
1135
1135
  }))
1136
1136
  }),
1137
1137
  async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
1138
- let text2 = (t) => ({ content: [{ type: "text", text: t }] });
1138
+ let text = (t) => ({ content: [{ type: "text", text: t }] });
1139
1139
  return todos = (Array.isArray(params?.todos) ? params.todos : []).filter((t) => t && typeof t.content == "string" && t.content.trim().length > 0).map((t, i) => ({
1140
1140
  id: typeof t.id == "string" && t.id ? t.id : String(i + 1),
1141
1141
  content: t.content.trim(),
1142
1142
  status: t.status === "in_progress" || t.status === "completed" ? t.status : "pending"
1143
- })), lastCtx = ctx, refreshWidget(), text2(summarizeTodos(todos));
1143
+ })), lastCtx = ctx, refreshWidget(), text(summarizeTodos(todos));
1144
1144
  },
1145
1145
  renderCall(args, theme) {
1146
1146
  let n = Array.isArray(args?.todos) ? args.todos.length : 0, detail = n === 0 ? "clear" : `${n} item${n === 1 ? "" : "s"}`;
@@ -1184,8 +1184,8 @@ function lunr_plan_tools_default(pi) {
1184
1184
  renderResult(result, { isPartial }, theme) {
1185
1185
  if (isPartial)
1186
1186
  return new Text2(theme.fg("warning", "Presenting plan..."), 0, 0);
1187
- let first = result?.content?.[0], text2 = first?.type === "text" ? first.text : "";
1188
- return new Text2(theme.fg("dim", text2), 0, 0);
1187
+ let first = result?.content?.[0], text = first?.type === "text" ? first.text : "";
1188
+ return new Text2(theme.fg("dim", text), 0, 0);
1189
1189
  }
1190
1190
  });
1191
1191
  }
@@ -1198,106 +1198,6 @@ function lunr_skill_creator_default(pi) {
1198
1198
  pi.on("resources_discover", async () => ({ skillPaths: [SKILLS_DIR] }));
1199
1199
  }
1200
1200
 
1201
- // packages/coding-agent/dist/builtin-extensions/lunr-settings-tools.js
1202
- var SETTINGS_BRIDGE = /* @__PURE__ */ Symbol.for("@lunr/settings-tools"), MODEL_TIERS_BRIDGE = /* @__PURE__ */ Symbol.for("@lunr/model-tiers"), DETAILED_SETTINGS_TOOL_NAMES = [
1203
- "settings_model_tiers",
1204
- "settings_subscriptions",
1205
- "settings_rollback",
1206
- "settings_session_retention"
1207
- ];
1208
- function settingsBridge() {
1209
- let bridge = globalThis[SETTINGS_BRIDGE];
1210
- if (!bridge)
1211
- throw new Error("Settings are unavailable in this runtime. Reload lunR and try again.");
1212
- return bridge;
1213
- }
1214
- function text(value, guidance) {
1215
- return {
1216
- content: [{ type: "text", text: `${JSON.stringify(value, null, 2)}
1217
-
1218
- ${guidance}` }],
1219
- details: value
1220
- };
1221
- }
1222
- var thinking = typebox_exports.Union([
1223
- typebox_exports.Literal("off"),
1224
- typebox_exports.Literal("minimal"),
1225
- typebox_exports.Literal("low"),
1226
- typebox_exports.Literal("medium"),
1227
- typebox_exports.Literal("high"),
1228
- typebox_exports.Literal("xhigh"),
1229
- typebox_exports.Literal("max"),
1230
- typebox_exports.Null()
1231
- ], { description: "Per-tier thinking level. null inherits the parent session thinking level." });
1232
- function lunrSettingsTools(pi) {
1233
- let loaded = !1, registerDetailedTools = () => {
1234
- loaded || (loaded = !0, pi.registerTool({
1235
- name: "settings_model_tiers",
1236
- label: "Model tiers",
1237
- description: "Read or partially update light, standard, and heavy subagent model routes and their thinking levels. Models use provider/model ids. Omitted fields are unchanged.",
1238
- parameters: typebox_exports.Object({
1239
- enabled: typebox_exports.Optional(typebox_exports.Boolean({ description: "Enable or disable tier-based child routing." })),
1240
- light: typebox_exports.Optional(typebox_exports.String({ minLength: 1, description: "Model route for light work." })),
1241
- standard: typebox_exports.Optional(typebox_exports.String({ minLength: 1, description: "Model route for standard work." })),
1242
- heavy: typebox_exports.Optional(typebox_exports.String({ minLength: 1, description: "Model route for heavy work." })),
1243
- lightThinking: typebox_exports.Optional(thinking),
1244
- standardThinking: typebox_exports.Optional(thinking),
1245
- heavyThinking: typebox_exports.Optional(thinking)
1246
- }, { additionalProperties: !1 }),
1247
- async execute(_id, params) {
1248
- let bridge = settingsBridge();
1249
- return Object.keys(params).length > 0 && (bridge.setModelTiers(params), globalThis[MODEL_TIERS_BRIDGE]?.refreshToolDescription?.()), text(bridge.getModelTiers(), Object.keys(params).length > 0 ? "Tier routes are saved and apply to the next child launch; the subagent schema guidance is refreshed now." : "Pass only the fields you want to change. Child launches still validate model availability and authentication.");
1250
- }
1251
- }), pi.registerTool({
1252
- name: "settings_subscriptions",
1253
- label: "Subscription management",
1254
- description: "Read or update automatic management of multiple stored provider subscriptions. Omit enabled to read without changing it.",
1255
- parameters: typebox_exports.Object({ enabled: typebox_exports.Optional(typebox_exports.Boolean()) }, { additionalProperties: !1 }),
1256
- async execute(_id, params) {
1257
- let bridge = settingsBridge();
1258
- return params.enabled !== void 0 && bridge.setAutoManageSubscriptions(params.enabled), text({ enabled: bridge.getAutoManageSubscriptions() }, params.enabled === void 0 ? "Set enabled to change automatic subscription selection." : "The setting is saved and applies to subsequent provider requests.");
1259
- }
1260
- }), pi.registerTool({
1261
- name: "settings_rollback",
1262
- label: "Rollback",
1263
- description: "Read or partially update rollback behavior: enabled, retained turns, capture strategy, and scope. Omitted fields are unchanged. Auto permission mode force-enables rollback for its current session.",
1264
- parameters: typebox_exports.Object({
1265
- enabled: typebox_exports.Optional(typebox_exports.Boolean()),
1266
- turns: typebox_exports.Optional(typebox_exports.Integer({ minimum: 1, maximum: 20 })),
1267
- capture: typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("copies"), typebox_exports.Literal("shadow-git"), typebox_exports.Literal("hybrid")])),
1268
- scope: typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("tools"), typebox_exports.Literal("tree")]))
1269
- }, { additionalProperties: !1 }),
1270
- async execute(_id, params) {
1271
- let bridge = settingsBridge();
1272
- Object.keys(params).length > 0 && bridge.setRollback(params);
1273
- let current = bridge.getRollback();
1274
- return text(current, current.forcedByAuto ? "Saved settings apply normally, but rollback remains force-enabled for this Auto-mode session." : Object.keys(params).length > 0 ? "Rollback settings are saved and live for subsequent tool calls." : "Pass only the fields you want to change.");
1275
- }
1276
- }), pi.registerTool({
1277
- name: "settings_session_retention",
1278
- label: "Session retention",
1279
- description: "Read or update how many days saved sessions are retained. Set days to 0 to keep sessions forever. Cleanup applies on a later launch, not retroactively in this turn.",
1280
- parameters: typebox_exports.Object({ days: typebox_exports.Optional(typebox_exports.Integer({ minimum: 0, maximum: 36500 })) }, { additionalProperties: !1 }),
1281
- async execute(_id, params) {
1282
- let bridge = settingsBridge();
1283
- return params.days !== void 0 && bridge.setSessionRetentionDays(params.days), text({ days: bridge.getSessionRetentionDays() }, params.days === void 0 ? "Set days to change retention; 0 keeps sessions forever." : "The setting is saved. Session cleanup uses it on a later launch.");
1284
- }
1285
- }));
1286
- };
1287
- pi.registerTool({
1288
- name: "settings_load",
1289
- label: "Settings",
1290
- description: "Load four narrow agent-managed settings tools for model tiers, subscription management, rollback, and session retention. Call only when the task requires inspecting or changing those settings.",
1291
- promptSnippet: "Load narrow settings controls on demand",
1292
- promptGuidelines: ["Call settings_load only when the user asks to inspect or change model tiers, subscription management, rollback, or session retention."],
1293
- parameters: typebox_exports.Object({}, { additionalProperties: !1 }),
1294
- async execute() {
1295
- let alreadyLoaded = loaded;
1296
- return registerDetailedTools(), pi.setActiveTools([.../* @__PURE__ */ new Set([...pi.getActiveTools(), ...DETAILED_SETTINGS_TOOL_NAMES])]), text({ activated: [...DETAILED_SETTINGS_TOOL_NAMES], alreadyLoaded }, "The four tools are active for the next model step and remain active in this runtime. A new runtime starts with only settings_load visible.");
1297
- }
1298
- });
1299
- }
1300
-
1301
1201
  // packages/coding-agent/dist/builtin-extensions/index.js
1302
1202
  function ext(name, factory) {
1303
1203
  return { name, factory };
@@ -1311,15 +1211,14 @@ var lightBuiltinExtensions = [
1311
1211
  ext("lunr-local-providers", lunrLocalProviders),
1312
1212
  ext("lunr-todos", lunr_todos_default),
1313
1213
  ext("lunr-plan-tools", lunr_plan_tools_default),
1314
- ext("lunr-skill-creator", lunr_skill_creator_default),
1315
- ext("lunr-settings-tools", lunrSettingsTools)
1214
+ ext("lunr-skill-creator", lunr_skill_creator_default)
1316
1215
  ], DEFERRED_BUILTIN_LOADERS = [
1317
1216
  { name: "pi-ollama-cloud", load: () => import("./pi-ollama-cloud-2F3Y2QNM.js") },
1318
1217
  { name: "narumiruna-pi-goal", load: () => import("./goal-NJEE5CTU.js") },
1319
- { name: "lunr-cron", load: () => import("./lunr-cron-QPBTKBGI.js") },
1320
- { name: "pi-intercom", load: () => import("./pi-intercom-EEMBGQID.js") },
1218
+ { name: "lunr-cron", load: () => import("./lunr-cron-NNYTWTGF.js") },
1219
+ { name: "pi-intercom", load: () => import("./pi-intercom-DDQMRNPJ.js") },
1321
1220
  { name: "pi-prompt-template-model", load: () => import("./pi-prompt-template-model-QWTCGLJU.js") },
1322
- { name: "pi-subagents", load: () => import("./pi-subagents-7YJ3I4VE.js") },
1221
+ { name: "pi-subagents", load: () => import("./pi-subagents-T5WMMLBB.js") },
1323
1222
  { name: "pi-web-access", load: () => import("./pi-web-access-2CQGFLT2.js") },
1324
1223
  { name: "pi-lsp-extension", load: () => import("./src-BPQFJR76.js") },
1325
1224
  { name: "pi-mcp-adapter", load: () => import("./pi-mcp-adapter-GUFZWW54.js") }
@@ -1,8 +1,4 @@
1
1
  import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
2
- import {
3
- CONFIG_DIR_NAME,
4
- getAgentDir
5
- } from "./chunk-FQMM2EZ2.js";
6
2
 
7
3
  // packages/coding-agent/dist/core/usage-adapters/shared.js
8
4
  async function fetchWithTimeout(url, init, timeoutMs = 1e4) {
@@ -435,373 +431,9 @@ function getUsageServiceBridge() {
435
431
  return globalThis[USAGE_SERVICE_BRIDGE_SYMBOL];
436
432
  }
437
433
 
438
- // packages/coding-agent/dist/core/rollback.js
439
- import { spawnSync } from "node:child_process";
440
- import { createHash } from "node:crypto";
441
- import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
442
- import { homedir } from "node:os";
443
- import { dirname, join, normalize, resolve } from "node:path";
444
- var ROLLBACK_BASE = join(homedir(), ".lunr", "rollback"), contexts = /* @__PURE__ */ new Map(), lastSessionId, globalSettingsManager, warningHandler;
445
- function setRollbackWarningHandler(handler) {
446
- warningHandler = handler;
447
- }
448
- function createContext(sessionId) {
449
- return {
450
- sessionId,
451
- settingsManager: globalSettingsManager,
452
- sessionForceEnabled: !1,
453
- turns: [],
454
- currentTurnIndex: -1,
455
- repoWarningShown: !1,
456
- externalModWarningShown: !1
457
- };
458
- }
459
- function getContext(sessionId) {
460
- let sid = sessionId ?? lastSessionId ?? "default", ctx = contexts.get(sid);
461
- return ctx || (ctx = createContext(sid), contexts.set(sid, ctx)), ctx;
462
- }
463
- function initRollback(sm, sid) {
464
- globalSettingsManager = sm, lastSessionId = sid, contexts.set(sid, createContext(sid));
465
- let ctx = contexts.get(sid);
466
- ctx.settingsManager = sm, loadPersistedTurns(ctx);
467
- }
468
- function isRollbackEnabled(sessionId) {
469
- let ctx = getContext(sessionId);
470
- return (ctx.settingsManager?.getRollbackEnabled() ?? !1) || ctx.sessionForceEnabled;
471
- }
472
- function isRollbackSessionForceEnabled(sessionId) {
473
- return getContext(sessionId).sessionForceEnabled;
474
- }
475
- function enableRollbackForSession(sessionId) {
476
- getContext(sessionId).sessionForceEnabled = !0;
477
- }
478
- function disableRollbackForSession(sessionId) {
479
- getContext(sessionId).sessionForceEnabled = !1;
480
- }
481
- function pruneTurns(ctx) {
482
- let maxTurns = ctx.settingsManager?.getRollbackTurns() ?? 2;
483
- for (; ctx.turns.length > maxTurns; ) {
484
- let old = ctx.turns.shift();
485
- old && cleanupTurnFiles(ctx, old);
486
- }
487
- }
488
- function beginTurn(cwd, sessionId) {
489
- let ctx = getContext(sessionId);
490
- if (!isRollbackEnabled(ctx.sessionId))
491
- return;
492
- cwd && (ctx.lastCwd = cwd), ctx.currentTurnIndex++;
493
- let turn = { turnIndex: ctx.currentTurnIndex, cwd, files: /* @__PURE__ */ new Map() };
494
- ctx.turns.push(turn), pruneTurns(ctx), cwd && ctx.settingsManager?.getRollbackScope() === "tree" && captureTreeBaseline(ctx, cwd);
495
- }
496
- function rollbackSnapshotBeforeWrite(absPath, sessionId) {
497
- let ctx = getContext(sessionId);
498
- if (!isRollbackEnabled(ctx.sessionId))
499
- return;
500
- (ctx.currentTurnIndex < 0 || ctx.turns.length === 0) && beginTurn(ctx.lastCwd, ctx.sessionId);
501
- let turn = ctx.turns[ctx.turns.length - 1];
502
- if (turn && !turn.files.has(absPath))
503
- try {
504
- let existed = existsSync(absPath), content;
505
- existed && (content = readFileSync(absPath)), turn.files.set(absPath, {
506
- existed,
507
- content,
508
- createdByTool: !0
509
- }), persistSnapshot(ctx, turn, absPath);
510
- } catch {
511
- }
512
- }
513
- function captureTreeBaseline(ctx, cwd) {
514
- let turn = ctx.turns[ctx.turns.length - 1];
515
- if (!turn)
516
- return;
517
- let entries = gitPorcelain(ctx, cwd);
518
- if (entries)
519
- for (let { path } of entries) {
520
- if (!path)
521
- continue;
522
- let abs = join(cwd, path);
523
- if (!turn.files.has(abs))
524
- try {
525
- let existed = existsSync(abs);
526
- turn.files.set(abs, {
527
- existed,
528
- content: existed ? readFileSync(abs) : void 0,
529
- createdByTool: !1
530
- }), persistSnapshot(ctx, turn, abs);
531
- } catch {
532
- }
533
- }
534
- }
535
- function captureTreeChanges(cwd, sessionId) {
536
- let ctx = getContext(sessionId);
537
- if (!isRollbackEnabled(ctx.sessionId) || ctx.settingsManager?.getRollbackScope() !== "tree" || ctx.currentTurnIndex < 0 || ctx.turns.length === 0)
538
- return;
539
- let turn = ctx.turns[ctx.turns.length - 1];
540
- if (!turn)
541
- return;
542
- let entries = gitPorcelain(ctx, cwd);
543
- if (entries)
544
- for (let { status, path, source } of entries) {
545
- if (!path)
546
- continue;
547
- let abs = join(cwd, path);
548
- if (!turn.files.has(abs))
549
- try {
550
- if (status === "??" || status.includes("R")) {
551
- if (turn.files.set(abs, { existed: !1, createdByTool: !1 }), persistSnapshot(ctx, turn, abs), status.includes("R") && source) {
552
- let sourceAbs = join(cwd, source);
553
- if (!turn.files.has(sourceAbs)) {
554
- let headSrc = spawnSync("git", ["show", `HEAD:${source}`], {
555
- cwd,
556
- timeout: 5e3,
557
- maxBuffer: 33554432
558
- });
559
- !headSrc.error && headSrc.status === 0 && headSrc.stdout && (turn.files.set(sourceAbs, {
560
- existed: !0,
561
- content: headSrc.stdout,
562
- createdByTool: !1
563
- }), persistSnapshot(ctx, turn, sourceAbs));
564
- }
565
- }
566
- } else {
567
- let head = spawnSync("git", ["show", `HEAD:${path}`], {
568
- cwd,
569
- timeout: 5e3,
570
- maxBuffer: 33554432
571
- });
572
- if (head.error || head.status !== 0 || !head.stdout)
573
- continue;
574
- turn.files.set(abs, {
575
- existed: !0,
576
- content: head.stdout,
577
- createdByTool: !1
578
- }), persistSnapshot(ctx, turn, abs);
579
- }
580
- } catch {
581
- }
582
- }
583
- }
584
- function gitPorcelain(ctx, cwd) {
585
- try {
586
- let result = spawnSync("git", ["status", "--porcelain", "-z"], { cwd, encoding: "utf8", timeout: 5e3 });
587
- if (result.error || result.status !== 0) {
588
- warnOnce(ctx, "Rollback tree scope: not a git repository (or git failed) \u2014 bash side-effects won't be captured.");
589
- return;
590
- }
591
- let fields = (result.stdout ?? "").split("\0").filter((f) => f.length > 0), entries = [];
592
- for (let i = 0; i < fields.length; i++) {
593
- let field = fields[i], status = field.slice(0, 2), path = field.slice(3), source;
594
- (status.includes("R") || status.includes("C")) && (source = fields[i + 1], i++), entries.push({ status, path, source });
595
- }
596
- return entries;
597
- } catch {
598
- warnOnce(ctx, "Rollback tree scope: not a git repository (or git failed) \u2014 bash side-effects won't be captured.");
599
- return;
600
- }
601
- }
602
- function warnOnce(ctx, message) {
603
- if (!ctx.repoWarningShown) {
604
- ctx.repoWarningShown = !0;
605
- try {
606
- warningHandler?.(message);
607
- } catch {
608
- }
609
- }
610
- }
611
- function persistSnapshot(ctx, turn, absPath) {
612
- try {
613
- let snap = turn.files.get(absPath);
614
- if (!snap)
615
- return;
616
- let turnDir = getTurnDir(ctx, turn.turnIndex);
617
- mkdirSync(turnDir, { recursive: !0 });
618
- let manifestPath = join(turnDir, "manifest.json"), manifest = readManifest(manifestPath), entry = { existed: snap.existed, createdByTool: snap.createdByTool };
619
- if (snap.content) {
620
- let snapFile = snapFileName(absPath);
621
- writeFileSync(join(turnDir, snapFile), snap.content), entry.snapFile = snapFile;
622
- }
623
- manifest.files[absPath] = entry, turn.cwd && (manifest.cwd = turn.cwd), writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
624
- } catch {
625
- }
626
- }
627
- function readManifest(path) {
628
- if (!existsSync(path))
629
- return { files: {} };
630
- try {
631
- let parsed = JSON.parse(readFileSync(path, "utf-8"));
632
- if (parsed && typeof parsed == "object" && !Array.isArray(parsed)) {
633
- let files = parsed.files;
634
- return {
635
- cwd: typeof parsed.cwd == "string" ? parsed.cwd : void 0,
636
- files: files && typeof files == "object" && !Array.isArray(files) ? files : {}
637
- };
638
- }
639
- return { files: {} };
640
- } catch {
641
- return { files: {} };
642
- }
643
- }
644
- function loadPersistedTurns(ctx) {
645
- try {
646
- let sessionDir = join(ROLLBACK_BASE, ctx.sessionId);
647
- if (!existsSync(sessionDir))
648
- return;
649
- let loaded = [];
650
- for (let dirName of readdirSync(sessionDir)) {
651
- let match = /^turn-(\d+)$/.exec(dirName);
652
- if (!match)
653
- continue;
654
- let turnIndex = Number(match[1]), turnDir = join(sessionDir, dirName), manifest = readManifest(join(turnDir, "manifest.json")), files = /* @__PURE__ */ new Map();
655
- for (let [absPath, meta] of Object.entries(manifest.files)) {
656
- let content;
657
- if (meta.snapFile)
658
- try {
659
- content = readFileSync(join(turnDir, meta.snapFile));
660
- } catch {
661
- content = void 0;
662
- }
663
- files.set(absPath, { existed: meta.existed, content, createdByTool: meta.createdByTool });
664
- }
665
- loaded.push({ turnIndex, cwd: manifest.cwd, files });
666
- }
667
- loaded.sort((a, b) => a.turnIndex - b.turnIndex), ctx.turns = loaded, ctx.currentTurnIndex = loaded.length > 0 ? loaded[loaded.length - 1].turnIndex : -1, pruneTurns(ctx);
668
- } catch {
669
- }
670
- }
671
- function getTurnDir(ctx, turnIndex) {
672
- return join(ROLLBACK_BASE, ctx.sessionId, `turn-${turnIndex}`);
673
- }
674
- function cleanupTurnFiles(ctx, turn) {
675
- try {
676
- let dir = getTurnDir(ctx, turn.turnIndex);
677
- existsSync(dir) && rmSync(dir, { recursive: !0, force: !0 });
678
- } catch {
679
- }
680
- }
681
- function isPathUnderRoot(absPath, root) {
682
- let normRoot = normalize(root).replace(/\\$/g, ""), normPath = normalize(absPath).replace(/\\$/g, "");
683
- return process.platform === "win32" && (normRoot = normRoot.toLowerCase(), normPath = normPath.toLowerCase()), normPath === normRoot || normPath.startsWith(`${normRoot}/`) || normPath.startsWith(`${normRoot}\\`);
684
- }
685
- function isWithinAllowedRoots(absPath, turn) {
686
- return turn.cwd ? [
687
- ROLLBACK_BASE,
688
- join(homedir(), CONFIG_DIR_NAME),
689
- // lunr: agent settings / cron jobs.json live under the config dir
690
- // lunr: simple-memory lives next to the lunr agent dir (~/.lunr/simple-memory)
691
- join(dirname(getAgentDir()), "simple-memory"),
692
- resolve(turn.cwd)
693
- ].some((root) => isPathUnderRoot(absPath, root)) : !0;
694
- }
695
- function warnExternalModification(ctx, message) {
696
- if (!(ctx.externalModWarningShown || !warningHandler)) {
697
- ctx.externalModWarningShown = !0;
698
- try {
699
- warningHandler(message);
700
- } catch {
701
- }
702
- }
703
- }
704
- function peekRollbackTurnsConsumed(sessionId) {
705
- let ctx = getContext(sessionId);
706
- if (!isRollbackEnabled(ctx.sessionId) || ctx.turns.length === 0)
707
- return 0;
708
- let consumed = 0;
709
- for (let i = ctx.turns.length - 1; i >= 0 && (consumed++, !(ctx.turns[i].files.size > 0)); i--)
710
- ;
711
- return consumed;
712
- }
713
- function rollbackLastTurn(sessionId) {
714
- let ctx = getContext(sessionId), empty = { restored: [], deleted: [], turnsConsumed: 0 };
715
- if (!isRollbackEnabled(ctx.sessionId))
716
- return empty;
717
- let turnsConsumed = 0;
718
- for (; ctx.turns.length > 0 && ctx.turns[ctx.turns.length - 1].files.size === 0; ) {
719
- let skipped = ctx.turns.pop();
720
- skipped && (cleanupTurnFiles(ctx, skipped), turnsConsumed++);
721
- }
722
- if (ctx.turns.length === 0)
723
- return empty;
724
- turnsConsumed++;
725
- let turn = ctx.turns[ctx.turns.length - 1], capture = ctx.settingsManager?.getRollbackCapture() ?? "copies", restored = [], deleted = [];
726
- for (let [absPath, snap] of turn.files)
727
- try {
728
- if (!isWithinAllowedRoots(absPath, turn)) {
729
- warnExternalModification(ctx, `Rollback skipped ${absPath}: outside the session working directory or lunR config dir.`);
730
- continue;
731
- }
732
- if (snap.existed && snap.content) {
733
- if (!snap.createdByTool && existsSync(absPath) && readFileSync(absPath).equals(snap.content))
734
- continue;
735
- mkdirSync(dirname(absPath), { recursive: !0 }), writeFileSync(absPath, snap.content), restored.push(absPath);
736
- } else snap.existed || (snap.createdByTool || capture === "hybrid" || capture === "shadow-git") && existsSync(absPath) && (unlinkSync(absPath), deleted.push(absPath));
737
- } catch {
738
- }
739
- return cleanupTurnFiles(ctx, turn), ctx.turns.pop(), { restored, deleted, turnsConsumed };
740
- }
741
- function migrateRollbackSession(oldSessionId, newSessionId) {
742
- if (oldSessionId === newSessionId)
743
- return;
744
- let ctx = contexts.get(oldSessionId);
745
- ctx && (contexts.delete(oldSessionId), ctx.sessionId = newSessionId, contexts.set(newSessionId, ctx));
746
- try {
747
- let oldDir = join(ROLLBACK_BASE, oldSessionId), newDir = join(ROLLBACK_BASE, newSessionId);
748
- if (existsSync(oldDir)) {
749
- existsSync(newDir) && rmSync(newDir, { recursive: !0, force: !0 });
750
- try {
751
- renameSync(oldDir, newDir);
752
- } catch {
753
- cpSync(oldDir, newDir, { recursive: !0 }), rmSync(oldDir, { recursive: !0, force: !0 });
754
- }
755
- }
756
- } catch {
757
- }
758
- }
759
- function clearRollback(sessionId) {
760
- if (sessionId === void 0) {
761
- for (let ctx2 of contexts.values()) {
762
- for (let turn of ctx2.turns)
763
- cleanupTurnFiles(ctx2, turn);
764
- try {
765
- let sessionDir = join(ROLLBACK_BASE, ctx2.sessionId);
766
- existsSync(sessionDir) && rmSync(sessionDir, { recursive: !0, force: !0 });
767
- } catch {
768
- }
769
- }
770
- contexts.clear();
771
- return;
772
- }
773
- let ctx = contexts.get(sessionId);
774
- if (ctx) {
775
- for (let turn of ctx.turns)
776
- cleanupTurnFiles(ctx, turn);
777
- try {
778
- let sessionDir = join(ROLLBACK_BASE, sessionId);
779
- existsSync(sessionDir) && rmSync(sessionDir, { recursive: !0, force: !0 });
780
- } catch {
781
- }
782
- contexts.delete(sessionId);
783
- }
784
- }
785
- function snapFileName(absPath) {
786
- return `${createHash("sha1").update(absPath).digest("hex")}.snap`;
787
- }
788
-
789
434
  export {
790
435
  getAllPlanUsageResults,
791
436
  clearPlanUsageCache,
792
437
  registerUsageServiceBridge,
793
- getUsageServiceBridge,
794
- setRollbackWarningHandler,
795
- initRollback,
796
- isRollbackEnabled,
797
- isRollbackSessionForceEnabled,
798
- enableRollbackForSession,
799
- disableRollbackForSession,
800
- beginTurn,
801
- rollbackSnapshotBeforeWrite,
802
- captureTreeChanges,
803
- peekRollbackTurnsConsumed,
804
- rollbackLastTurn,
805
- migrateRollbackSession,
806
- clearRollback
438
+ getUsageServiceBridge
807
439
  };