@ashx-j/lunr 0.2.8 → 0.2.9

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 (127) hide show
  1. package/dist/builtin-extensions/ashxj-spinners.d.ts +7 -0
  2. package/dist/builtin-extensions/ashxj-spinners.d.ts.map +1 -1
  3. package/dist/builtin-extensions/ashxj-spinners.js +40 -3
  4. package/dist/builtin-extensions/ashxj-spinners.js.map +1 -1
  5. package/dist/builtin-extensions/ashxj-tui.d.ts +4 -0
  6. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  7. package/dist/builtin-extensions/ashxj-tui.js +44 -0
  8. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  9. package/dist/builtin-extensions/lunr-behavior.d.ts +2 -1
  10. package/dist/builtin-extensions/lunr-behavior.d.ts.map +1 -1
  11. package/dist/builtin-extensions/lunr-behavior.js +26 -14
  12. package/dist/builtin-extensions/lunr-behavior.js.map +1 -1
  13. package/dist/builtin-extensions/lunr-todos.d.ts +4 -7
  14. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
  15. package/dist/builtin-extensions/lunr-todos.js +18 -10
  16. package/dist/builtin-extensions/lunr-todos.js.map +1 -1
  17. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +1 -1
  18. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js +3 -3
  19. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +1 -1
  20. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +2 -2
  22. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  23. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +2 -2
  24. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  25. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +3 -4
  26. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  27. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  28. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +6 -18
  29. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  30. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  31. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +13 -5
  32. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/shared/lunr-child-context.d.ts +21 -0
  34. package/dist/builtin-extensions/pi-subagents/src/shared/lunr-child-context.d.ts.map +1 -0
  35. package/dist/builtin-extensions/pi-subagents/src/shared/lunr-child-context.js +22 -0
  36. package/dist/builtin-extensions/pi-subagents/src/shared/lunr-child-context.js.map +1 -0
  37. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  38. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +2 -1
  39. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  40. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  41. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +10 -18
  42. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  43. package/dist/builtin-extensions/pi-web-access/render-search-error.d.ts.map +1 -1
  44. package/dist/builtin-extensions/pi-web-access/render-search-error.js +1 -1
  45. package/dist/builtin-extensions/pi-web-access/render-search-error.js.map +1 -1
  46. package/dist/catalog/models.json +1 -1
  47. package/dist/catalog/providers/openrouter.json +1 -1
  48. package/dist/catalog/providers/vercel-ai-gateway.json +1 -1
  49. package/dist/catalog/publication.json +3 -3
  50. package/dist/cli/update-cli.d.ts +16 -0
  51. package/dist/cli/update-cli.d.ts.map +1 -0
  52. package/dist/cli/update-cli.js +83 -0
  53. package/dist/cli/update-cli.js.map +1 -0
  54. package/dist/cli.d.ts.map +1 -1
  55. package/dist/cli.js +6 -0
  56. package/dist/cli.js.map +1 -1
  57. package/dist/core/behavior-preset.d.ts +60 -0
  58. package/dist/core/behavior-preset.d.ts.map +1 -0
  59. package/dist/core/behavior-preset.js +257 -0
  60. package/dist/core/behavior-preset.js.map +1 -0
  61. package/dist/core/customize.d.ts +3 -0
  62. package/dist/core/customize.d.ts.map +1 -1
  63. package/dist/core/customize.js +9 -0
  64. package/dist/core/customize.js.map +1 -1
  65. package/dist/core/footer-data-provider.d.ts +12 -1
  66. package/dist/core/footer-data-provider.d.ts.map +1 -1
  67. package/dist/core/footer-data-provider.js +70 -5
  68. package/dist/core/footer-data-provider.js.map +1 -1
  69. package/dist/core/keybindings.d.ts +2 -2
  70. package/dist/core/keybindings.d.ts.map +1 -1
  71. package/dist/core/keybindings.js +1 -1
  72. package/dist/core/keybindings.js.map +1 -1
  73. package/dist/core/model-tiers.d.ts +9 -0
  74. package/dist/core/model-tiers.d.ts.map +1 -1
  75. package/dist/core/model-tiers.js +16 -0
  76. package/dist/core/model-tiers.js.map +1 -1
  77. package/dist/core/settings-manager.d.ts +23 -0
  78. package/dist/core/settings-manager.d.ts.map +1 -1
  79. package/dist/core/settings-manager.js +66 -0
  80. package/dist/core/settings-manager.js.map +1 -1
  81. package/dist/core/tools/bash.d.ts.map +1 -1
  82. package/dist/core/tools/bash.js +1 -3
  83. package/dist/core/tools/bash.js.map +1 -1
  84. package/dist/core/update-check.d.ts +32 -0
  85. package/dist/core/update-check.d.ts.map +1 -0
  86. package/dist/core/update-check.js +112 -0
  87. package/dist/core/update-check.js.map +1 -0
  88. package/dist/core/usage-service.d.ts +24 -1
  89. package/dist/core/usage-service.d.ts.map +1 -1
  90. package/dist/core/usage-service.js +91 -14
  91. package/dist/core/usage-service.js.map +1 -1
  92. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  93. package/dist/gateway/agent-bridge.js +5 -1
  94. package/dist/gateway/agent-bridge.js.map +1 -1
  95. package/dist/gateway/cron.d.ts.map +1 -1
  96. package/dist/gateway/cron.js +5 -1
  97. package/dist/gateway/cron.js.map +1 -1
  98. package/dist/main.d.ts.map +1 -1
  99. package/dist/main.js +13 -1
  100. package/dist/main.js.map +1 -1
  101. package/dist/modes/interactive/components/assistant-message.d.ts +4 -0
  102. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  103. package/dist/modes/interactive/components/assistant-message.js +68 -10
  104. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  105. package/dist/modes/interactive/components/settings-selector.d.ts +13 -0
  106. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  107. package/dist/modes/interactive/components/settings-selector.js +157 -10
  108. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  109. package/dist/modes/interactive/components/tool-execution.d.ts +1 -0
  110. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  111. package/dist/modes/interactive/components/tool-execution.js +9 -0
  112. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  113. package/dist/modes/interactive/interactive-mode.d.ts +4 -1
  114. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  115. package/dist/modes/interactive/interactive-mode.js +82 -3
  116. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  117. package/docs/keybindings.md +1 -1
  118. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  119. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  120. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  121. package/examples/extensions/gondolin/package-lock.json +2 -2
  122. package/examples/extensions/gondolin/package.json +1 -1
  123. package/examples/extensions/sandbox/package-lock.json +2 -2
  124. package/examples/extensions/sandbox/package.json +1 -1
  125. package/examples/extensions/with-deps/package-lock.json +2 -2
  126. package/examples/extensions/with-deps/package.json +1 -1
  127. package/package.json +4 -4
@@ -1,4 +1,5 @@
1
1
  import { Container, getCapabilities, getKeybindings, Input, SelectList, SettingsList, Spacer, Text, } from "@ashx-j/lunr-tui";
2
+ import { detectBehaviorPreset, readBehaviorFile } from "../../../core/behavior-preset.js";
2
3
  import { getCustomizeBridge } from "../../../core/customize.js";
3
4
  import { formatHttpIdleTimeoutMs, HTTP_IDLE_TIMEOUT_CHOICES } from "../../../core/http-dispatcher.js";
4
5
  import { MEMORY_CHAR_CAP_DEFAULT, MEMORY_CHAR_CAP_MAX, MEMORY_CHAR_CAP_MIN } from "../../../core/memory-cap.js";
@@ -55,7 +56,11 @@ class ModelTiersSubmenu extends Container {
55
56
  light: modelTiers.light,
56
57
  standard: modelTiers.standard,
57
58
  heavy: modelTiers.heavy,
59
+ lightThinking: modelTiers.lightThinking,
60
+ standardThinking: modelTiers.standardThinking,
61
+ heavyThinking: modelTiers.heavyThinking,
58
62
  };
63
+ const thinkingKey = (tier) => tier === "light" ? "lightThinking" : tier === "standard" ? "standardThinking" : "heavyThinking";
59
64
  const items = [
60
65
  {
61
66
  id: "enabled",
@@ -64,16 +69,37 @@ class ModelTiersSubmenu extends Container {
64
69
  currentValue: this.state.enabled ? "on" : "off",
65
70
  values: ["on", "off"],
66
71
  },
67
- ...MODEL_TIER_ROWS.map((row) => {
72
+ ...MODEL_TIER_ROWS.flatMap((row) => {
68
73
  const tier = row.tier;
69
- return {
70
- id: tier,
71
- label: row.label,
72
- description: row.description,
73
- currentValue: this.state[tier] ?? "not set",
74
- disabled: () => !this.state.enabled,
75
- submenu: (_currentValue, done) => callbacks.createModelTierPicker(tier, this.state[tier], done),
76
- };
74
+ const tKey = thinkingKey(tier);
75
+ return [
76
+ {
77
+ id: tier,
78
+ label: row.label,
79
+ description: row.description,
80
+ currentValue: this.state[tier] ?? "not set",
81
+ disabled: () => !this.state.enabled,
82
+ submenu: (_currentValue, done) => callbacks.createModelTierPicker(tier, this.state[tier], done),
83
+ },
84
+ {
85
+ id: `${tier}-thinking`,
86
+ label: `${row.label.replace(" model", "")} thinking`,
87
+ description: "Reasoning depth for this tier. Inherit uses the parent session level.",
88
+ currentValue: this.state[tKey] ?? "inherit",
89
+ disabled: () => !this.state.enabled,
90
+ submenu: (_currentValue, done) => new SelectSubmenu(`${row.label} thinking`, "Unset inherits the parent session thinking level.", [
91
+ { value: "inherit", label: "inherit", description: "Use the parent session thinking level" },
92
+ ...callbacks.getTierThinkingLevels(tier).map((level) => ({
93
+ value: level,
94
+ label: level,
95
+ description: THINKING_DESCRIPTIONS[level],
96
+ })),
97
+ ], this.state[tKey] ?? "inherit", (value) => {
98
+ callbacks.onModelTierThinkingChange(tier, value === "inherit" ? undefined : value);
99
+ done(value);
100
+ }, () => done()),
101
+ },
102
+ ];
77
103
  }),
78
104
  ];
79
105
  this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
@@ -82,6 +108,12 @@ class ModelTiersSubmenu extends Container {
82
108
  callbacks.onModelTiersEnabledChange(this.state.enabled);
83
109
  return;
84
110
  }
111
+ if (id.endsWith("-thinking")) {
112
+ const tier = id.slice(0, -"-thinking".length);
113
+ const tKey = thinkingKey(tier);
114
+ this.state[tKey] = newValue === "inherit" ? undefined : newValue;
115
+ return;
116
+ }
85
117
  const tier = id;
86
118
  this.state[tier] = newValue;
87
119
  callbacks.onModelTierModelChange(tier, newValue);
@@ -126,6 +158,71 @@ class MemoryCharCapSubmenu extends Container {
126
158
  }
127
159
  }
128
160
  const SEARCH_CURATOR_VALUES = ["off", "on", "auto-summary"];
161
+ const BEHAVIOR_PRESET_ITEMS = [
162
+ {
163
+ value: "default",
164
+ label: "default",
165
+ description: "Empty built-in. Selecting this writes a blank behavior.md.",
166
+ },
167
+ {
168
+ value: "humanizer",
169
+ label: "humanizer",
170
+ description: "Write like a person. Strip AI tells. Skips the character cap.",
171
+ },
172
+ {
173
+ value: "concise",
174
+ label: "concise",
175
+ description: "Fragments, tables, numbered next steps last. Skips the character cap.",
176
+ },
177
+ {
178
+ value: "custom",
179
+ label: "custom",
180
+ description: "Keep the current behavior.md. Edit the file or use the behavior tools.",
181
+ },
182
+ ];
183
+ /**
184
+ * Built-in vs custom behavior.md picker.
185
+ * Selecting a built-in while the file no longer matches a template asks before overwrite.
186
+ * Custom never writes. No in-app editor; the file is the source of truth.
187
+ */
188
+ class BehaviorPresetSubmenu extends Container {
189
+ inner;
190
+ constructor(currentValue, done) {
191
+ super();
192
+ this.inner = this.buildList(currentValue, done);
193
+ this.addChild(this.inner);
194
+ }
195
+ buildList(currentValue, done) {
196
+ return new SelectSubmenu("Behavior preset", "Built-in options replace ~/.lunr/agent/behavior.md. Custom keeps the file. Cap skipped for built-ins.", BEHAVIOR_PRESET_ITEMS, currentValue, (value) => {
197
+ if (value === currentValue) {
198
+ done();
199
+ return;
200
+ }
201
+ if (value !== "custom" && detectBehaviorPreset(readBehaviorFile()) === "custom") {
202
+ this.showOverwriteConfirm(value, done);
203
+ return;
204
+ }
205
+ done(value);
206
+ }, () => done());
207
+ }
208
+ showOverwriteConfirm(preset, done) {
209
+ this.clear();
210
+ this.inner = new SelectSubmenu("Overwrite behavior.md", `Replace the custom behavior file with the ${preset} preset? This cannot be undone from settings.`, [
211
+ { value: "cancel", label: "Cancel" },
212
+ { value: "overwrite", label: `Overwrite with ${preset}` },
213
+ ], "cancel", (value) => {
214
+ if (value === "overwrite") {
215
+ done(preset);
216
+ return;
217
+ }
218
+ done();
219
+ }, () => done());
220
+ this.addChild(this.inner);
221
+ }
222
+ handleInput(data) {
223
+ this.inner.handleInput?.(data);
224
+ }
225
+ }
129
226
  // lunr: Customize submenu — toggles for the lunR TUI customize settings.
130
227
  class CustomizeSubmenu extends Container {
131
228
  settingsList;
@@ -184,6 +281,27 @@ class CustomizeSubmenu extends Container {
184
281
  currentValue: (bridge?.getFooterStatuses() ?? true) ? "on" : "off",
185
282
  values: ["on", "off"],
186
283
  },
284
+ {
285
+ id: "footer-git",
286
+ label: "Footer: git branch",
287
+ description: "Show the current git branch and added/removed line counts in the footer stats line.",
288
+ currentValue: (bridge?.getFooterGit() ?? true) ? "on" : "off",
289
+ values: ["on", "off"],
290
+ },
291
+ {
292
+ id: "footer-plan",
293
+ label: "Footer: plan usage",
294
+ description: "Show the live subscription usage percent when the current model is on a plan.",
295
+ currentValue: (bridge?.getFooterPlan() ?? true) ? "on" : "off",
296
+ values: ["on", "off"],
297
+ },
298
+ {
299
+ id: "footer-plan-bar",
300
+ label: "Footer: plan bar",
301
+ description: "Show the filled █░ bar next to the plan percent. Off keeps the percent only.",
302
+ currentValue: (bridge?.getFooterPlanBar() ?? true) ? "on" : "off",
303
+ values: ["on", "off"],
304
+ },
187
305
  ];
188
306
  this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
189
307
  switch (id) {
@@ -208,6 +326,15 @@ class CustomizeSubmenu extends Container {
208
326
  case "footer-statuses":
209
327
  callbacks.onFooterStatusesChange(newValue === "on");
210
328
  break;
329
+ case "footer-git":
330
+ callbacks.onFooterGitChange(newValue === "on");
331
+ break;
332
+ case "footer-plan":
333
+ callbacks.onFooterPlanChange(newValue === "on");
334
+ break;
335
+ case "footer-plan-bar":
336
+ callbacks.onFooterPlanBarChange(newValue === "on");
337
+ break;
211
338
  }
212
339
  }, () => done());
213
340
  this.addChild(this.settingsList);
@@ -827,10 +954,17 @@ export class SettingsSelectorComponent extends Container {
827
954
  {
828
955
  id: "memory-char-cap",
829
956
  label: "Memory character cap",
830
- description: `Max characters in the simple-pi-memory memory file AND the behavior file (${MEMORY_CHAR_CAP_MIN}-${MEMORY_CHAR_CAP_MAX}, default ${MEMORY_CHAR_CAP_DEFAULT}). Also settable via /memory-char-cap.`,
957
+ description: `Max characters in the simple-pi-memory memory file AND a custom behavior file (${MEMORY_CHAR_CAP_MIN}-${MEMORY_CHAR_CAP_MAX}, default ${MEMORY_CHAR_CAP_DEFAULT}). Built-in behavior presets skip the cap. Also settable via /memory-char-cap.`,
831
958
  currentValue: String(config.memoryCharCap),
832
959
  submenu: (currentValue, submenuDone) => new MemoryCharCapSubmenu(currentValue, submenuDone),
833
960
  },
961
+ {
962
+ id: "behavior-preset",
963
+ label: "Behavior preset",
964
+ description: "Built-in options replace ~/.lunr/agent/behavior.md (default / humanizer / concise). Custom keeps the file. Built-ins skip the character cap.",
965
+ currentValue: config.behaviorPreset,
966
+ submenu: (currentValue, submenuDone) => new BehaviorPresetSubmenu(currentValue, submenuDone),
967
+ },
834
968
  {
835
969
  id: "search-curator",
836
970
  label: "Search curator",
@@ -903,6 +1037,13 @@ export class SettingsSelectorComponent extends Container {
903
1037
  currentValue: config.modelTiers.enabled ? "on" : "off",
904
1038
  submenu: (currentValue, done) => new ModelTiersSubmenu(currentValue, config.modelTiers, callbacks, done),
905
1039
  },
1040
+ {
1041
+ id: "plan-usage-window",
1042
+ label: "Plan usage window",
1043
+ description: "Preferred subscription window for the footer bar. Missing 5h falls back to weekly.",
1044
+ currentValue: config.planUsageWindow,
1045
+ values: ["5h", "weekly"],
1046
+ },
906
1047
  // lunr: Customize submenu — lunR TUI toggles (rail, prompt symbol, footer segments)
907
1048
  {
908
1049
  id: "customize",
@@ -1095,9 +1236,15 @@ export class SettingsSelectorComponent extends Container {
1095
1236
  case "smooth-streaming":
1096
1237
  callbacks.onSmoothStreamingChange(newValue === "true");
1097
1238
  break;
1239
+ case "plan-usage-window":
1240
+ callbacks.onPlanUsageWindowChange(newValue === "5h" ? "5h" : "weekly");
1241
+ break;
1098
1242
  case "memory-char-cap":
1099
1243
  callbacks.onMemoryCharCapChange(parseInt(newValue, 10));
1100
1244
  break;
1245
+ case "behavior-preset":
1246
+ callbacks.onBehaviorPresetChange(newValue);
1247
+ break;
1101
1248
  case "search-curator":
1102
1249
  callbacks.onSearchCuratorChange(newValue);
1103
1250
  break;