@ashx-j/lunr 0.2.13 → 0.2.14

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 (211) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/README.md +6 -3
  3. package/dist/builtin-extensions/ashxj-tui.d.ts +16 -1
  4. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  5. package/dist/builtin-extensions/ashxj-tui.js +44 -20
  6. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  7. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -0
  8. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  9. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +27 -22
  10. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  11. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  12. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +5 -2
  13. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  14. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
  15. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +12 -1
  16. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
  17. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts +1 -0
  18. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -1
  19. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +3 -2
  20. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.d.ts.map +1 -1
  22. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js +1 -0
  23. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
  25. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +3 -0
  26. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
  27. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
  28. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js +3 -3
  29. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
  30. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  31. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js +2 -2
  32. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  34. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +3 -0
  35. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  36. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  37. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +7 -1
  38. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  40. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +2 -0
  41. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  42. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +1 -0
  43. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  44. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +19 -3
  45. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  46. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +10 -1
  47. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +19 -0
  49. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +1 -0
  51. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  53. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +2 -1
  54. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +17 -0
  56. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
  57. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +3 -1
  58. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +14 -3
  60. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +14 -0
  62. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  65. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +2 -2
  66. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  68. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +12 -10
  69. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  70. package/dist/catalog/models.json +1 -1
  71. package/dist/catalog/providers/amazon-bedrock.json +1 -1
  72. package/dist/catalog/providers/anthropic.json +1 -1
  73. package/dist/catalog/providers/azure-openai-responses.json +1 -1
  74. package/dist/catalog/providers/cloudflare-ai-gateway.json +1 -1
  75. package/dist/catalog/providers/fireworks.json +1 -1
  76. package/dist/catalog/providers/github-copilot.json +1 -1
  77. package/dist/catalog/providers/google-vertex.json +1 -1
  78. package/dist/catalog/providers/google.json +1 -1
  79. package/dist/catalog/providers/groq.json +1 -1
  80. package/dist/catalog/providers/huggingface.json +1 -1
  81. package/dist/catalog/providers/nvidia.json +1 -1
  82. package/dist/catalog/providers/openai-codex.json +1 -1
  83. package/dist/catalog/providers/openai.json +1 -1
  84. package/dist/catalog/providers/opencode-go.json +1 -1
  85. package/dist/catalog/providers/opencode.json +1 -1
  86. package/dist/catalog/providers/openrouter.json +1 -1
  87. package/dist/catalog/providers/vercel-ai-gateway.json +1 -1
  88. package/dist/catalog/publication.json +131 -3
  89. package/dist/cli/list-models.d.ts.map +1 -1
  90. package/dist/cli/list-models.js +1 -0
  91. package/dist/cli/list-models.js.map +1 -1
  92. package/dist/cli.d.ts.map +1 -1
  93. package/dist/cli.js +52 -27
  94. package/dist/cli.js.map +1 -1
  95. package/dist/core/catalog-cache-scope.d.ts +3 -0
  96. package/dist/core/catalog-cache-scope.d.ts.map +1 -0
  97. package/dist/core/catalog-cache-scope.js +12 -0
  98. package/dist/core/catalog-cache-scope.js.map +1 -0
  99. package/dist/core/catalog-merge.d.ts +2 -0
  100. package/dist/core/catalog-merge.d.ts.map +1 -1
  101. package/dist/core/catalog-merge.js +29 -2
  102. package/dist/core/catalog-merge.js.map +1 -1
  103. package/dist/core/catalog-refresh-polling.d.ts +8 -0
  104. package/dist/core/catalog-refresh-polling.d.ts.map +1 -0
  105. package/dist/core/catalog-refresh-polling.js +30 -0
  106. package/dist/core/catalog-refresh-polling.js.map +1 -0
  107. package/dist/core/codex-catalog.d.ts +3 -0
  108. package/dist/core/codex-catalog.d.ts.map +1 -0
  109. package/dist/core/codex-catalog.js +15 -0
  110. package/dist/core/codex-catalog.js.map +1 -0
  111. package/dist/core/customize.d.ts +2 -4
  112. package/dist/core/customize.d.ts.map +1 -1
  113. package/dist/core/customize.js +2 -8
  114. package/dist/core/customize.js.map +1 -1
  115. package/dist/core/footer-data-provider.d.ts +3 -4
  116. package/dist/core/footer-data-provider.d.ts.map +1 -1
  117. package/dist/core/footer-data-provider.js +54 -82
  118. package/dist/core/footer-data-provider.js.map +1 -1
  119. package/dist/core/live-catalog.d.ts +5 -2
  120. package/dist/core/live-catalog.d.ts.map +1 -1
  121. package/dist/core/live-catalog.js +108 -27
  122. package/dist/core/live-catalog.js.map +1 -1
  123. package/dist/core/model-runtime.d.ts +8 -0
  124. package/dist/core/model-runtime.d.ts.map +1 -1
  125. package/dist/core/model-runtime.js +64 -12
  126. package/dist/core/model-runtime.js.map +1 -1
  127. package/dist/core/official-catalog.d.ts +4 -0
  128. package/dist/core/official-catalog.d.ts.map +1 -1
  129. package/dist/core/official-catalog.js +86 -21
  130. package/dist/core/official-catalog.js.map +1 -1
  131. package/dist/core/settings-manager.d.ts +0 -6
  132. package/dist/core/settings-manager.d.ts.map +1 -1
  133. package/dist/core/settings-manager.js +0 -17
  134. package/dist/core/settings-manager.js.map +1 -1
  135. package/dist/core/slash-commands.d.ts.map +1 -1
  136. package/dist/core/slash-commands.js +1 -0
  137. package/dist/core/slash-commands.js.map +1 -1
  138. package/dist/main.d.ts +2 -0
  139. package/dist/main.d.ts.map +1 -1
  140. package/dist/main.js +106 -50
  141. package/dist/main.js.map +1 -1
  142. package/dist/migrations.d.ts +2 -0
  143. package/dist/migrations.d.ts.map +1 -1
  144. package/dist/migrations.js +14 -4
  145. package/dist/migrations.js.map +1 -1
  146. package/dist/modes/interactive/components/assistant-message.d.ts +1 -3
  147. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  148. package/dist/modes/interactive/components/assistant-message.js +4 -32
  149. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  150. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  151. package/dist/modes/interactive/components/custom-editor.js +2 -1
  152. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  153. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  154. package/dist/modes/interactive/components/model-selector.js +4 -1
  155. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  156. package/dist/modes/interactive/components/plan-message.d.ts +1 -3
  157. package/dist/modes/interactive/components/plan-message.d.ts.map +1 -1
  158. package/dist/modes/interactive/components/plan-message.js +1 -16
  159. package/dist/modes/interactive/components/plan-message.js.map +1 -1
  160. package/dist/modes/interactive/components/settings-selector.d.ts +0 -4
  161. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  162. package/dist/modes/interactive/components/settings-selector.js +10 -30
  163. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  164. package/dist/modes/interactive/components/user-message.d.ts +1 -3
  165. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  166. package/dist/modes/interactive/components/user-message.js +2 -19
  167. package/dist/modes/interactive/components/user-message.js.map +1 -1
  168. package/dist/modes/interactive/interactive-mode.d.ts +12 -1
  169. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  170. package/dist/modes/interactive/interactive-mode.js +137 -127
  171. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  172. package/dist/modes/interactive/theme/moon.json +0 -1
  173. package/dist/modes/interactive/theme/theme-schema.json +3 -3
  174. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  175. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  176. package/dist/modes/interactive/theme/theme.js +95 -90
  177. package/dist/modes/interactive/theme/theme.js.map +1 -1
  178. package/dist/startup/interactive-view.d.ts +55 -0
  179. package/dist/startup/interactive-view.d.ts.map +1 -0
  180. package/dist/startup/interactive-view.js +332 -0
  181. package/dist/startup/interactive-view.js.map +1 -0
  182. package/dist/startup/launch-routing.d.ts +8 -0
  183. package/dist/startup/launch-routing.d.ts.map +1 -0
  184. package/dist/startup/launch-routing.js +29 -0
  185. package/dist/startup/launch-routing.js.map +1 -0
  186. package/dist/startup/startup-milestones.d.ts +4 -0
  187. package/dist/startup/startup-milestones.d.ts.map +1 -0
  188. package/dist/startup/startup-milestones.js +14 -0
  189. package/dist/startup/startup-milestones.js.map +1 -0
  190. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  191. package/dist/utils/syntax-highlight.js +10 -4
  192. package/dist/utils/syntax-highlight.js.map +1 -1
  193. package/docs/features.md +2 -2
  194. package/docs/interactive-startup.md +58 -0
  195. package/docs/keybindings.md +1 -1
  196. package/docs/model-catalog.md +29 -0
  197. package/docs/quickstart.md +1 -1
  198. package/docs/settings.md +1 -3
  199. package/docs/terminal-setup.md +2 -2
  200. package/docs/usage.md +2 -1
  201. package/docs/windows.md +1 -1
  202. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  203. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  204. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  205. package/examples/extensions/gondolin/package-lock.json +2 -2
  206. package/examples/extensions/gondolin/package.json +1 -1
  207. package/examples/extensions/sandbox/package-lock.json +2 -2
  208. package/examples/extensions/sandbox/package.json +1 -1
  209. package/examples/extensions/with-deps/package-lock.json +2 -2
  210. package/examples/extensions/with-deps/package.json +1 -1
  211. package/package.json +16 -16
@@ -0,0 +1,58 @@
1
+ # Interactive startup plan
2
+
3
+ Paint the normal lunR interface before importing the agent runtime. Models,
4
+ resources, session restoration, extensions, and maintenance may take longer;
5
+ they must not determine when the user first sees the chatbox.
6
+
7
+ PR #41 starts a generic editor with a separate startup message, then changes the
8
+ layout and editor after hydration. Its first-frame marker also accepts terminal
9
+ setup writes. Keep its useful early routing and startup-dialog work, but replace
10
+ the temporary presentation and measure actual rendered content.
11
+
12
+ 1. Start a persistent view using the existing themed ChatboxEditor,
13
+ BootScreenComponent, and stats renderer. Read only local display preferences.
14
+ Reuse the terminal and editor when InteractiveMode attaches. Unknown runtime
15
+ data fills in later; no second startup screen or editor reset.
16
+ 2. Begin runtime imports after a complete TUI frame has been written. Keep
17
+ session selection and trust dialogs on that terminal. Preserve drafts,
18
+ cursor position, and pasted images while initialization proceeds.
19
+ 3. Hold submissions until session and extension initialization completes, then
20
+ dispatch through the normal command/message handler. Keep failures visible
21
+ and allow exit while loading. Defer session retention and other maintenance.
22
+ 4. Verify real frame content without a runtime, editor identity across binding,
23
+ delayed/failing initialization, command routing, and noninteractive launches.
24
+ Benchmark first content frame separately from runtime and feature readiness,
25
+ using isolated settings and both cold and warm compile caches.
26
+
27
+ This PR targets startup only. The permission, rollback, orchestrator, and release
28
+ changes in #41 remain separate. Custom extension themes/editors become available
29
+ when their resources load; the builtin moon interface is available immediately.
30
+
31
+ ## Validation
32
+
33
+ The Node CLI keeps one terminal and one moon editor through attachment. Enter
34
+ during loading holds the current draft. Edits continue to change that draft;
35
+ Escape cancels the pending submission. Commands run through the normal handler
36
+ after features are ready. A failed feature load preserves the draft and reports
37
+ the error instead of submitting it.
38
+
39
+ The shipped moon theme avoids loading the schema compiler and highlighter before
40
+ paint. Custom theme validation and syntax highlighting use the same implementations
41
+ on first use. Footer git discovery and diffs run asynchronously.
42
+
43
+ After the offline builds, run:
44
+
45
+ ```sh
46
+ node scripts/check-interactive-first-paint.mjs
47
+ node scripts/profile-coding-agent-node.mjs --mode tui --skip-build --isolated-agent-dir --runs 3
48
+ ```
49
+
50
+ The first command exercises the built CLI with runtime loading stalled or failed.
51
+ It verifies the real chatbox appears before hydration, accepts edits while
52
+ waiting, and restores the terminal on exit. The Vitest integration also checks
53
+ editor identity, cursor position, images, dialogs, and delayed command dispatch.
54
+
55
+ On Windows with Node 24.15.0 and moon, three fresh compile-cache runs wrote the
56
+ first complete frame in 94.8–95.3ms. Three warm runs measured 96.6–99.1ms. Feature
57
+ readiness came at 2.01–2.43s. Milestones include Node entry-module loading.
58
+ Terminal compositor latency and compiled Bun binaries were not measured.
@@ -87,7 +87,7 @@ Modifier combinations: `ctrl+shift+x`, `alt+ctrl+x`, `ctrl+shift+alt+x`, `ctrl+1
87
87
  | `app.exit` | `ctrl+d` | Exit (when editor empty) |
88
88
  | `app.suspend` | `ctrl+z` (none on Windows) | Suspend to background |
89
89
  | `app.editor.external` | `ctrl+g` | Open in external editor (`externalEditor`, `$VISUAL`, `$EDITOR`, Notepad on Windows, or `nano` elsewhere) |
90
- | `app.clipboard.pasteImage` | `ctrl+v` (`alt+v` on Windows) | Paste image from clipboard |
90
+ | `app.clipboard.pasteImage` | `ctrl+v` (`alt+v` on Windows) | Paste image from clipboard; `/paste-image` needs no shortcut |
91
91
 
92
92
  ### Sessions
93
93
 
@@ -0,0 +1,29 @@
1
+ # Model catalog maintenance
2
+
3
+ Routine catalog updates use HTTP requests and deterministic TypeScript normalization, with no AI inference or agent runs.
4
+
5
+ ## Discovery and precedence
6
+
7
+ The public generator combines models.dev, OpenRouter, Vercel, NVIDIA, OpenCode Zen/Go, and OpenAI's published Codex metadata. Codex model IDs come from that upstream document, not a handwritten list.
8
+
9
+ At runtime, supported providers also expose live discovery. Codex uses the authenticated account-specific `/codex/models` endpoint, including its client-version query and account header. The client version is resolved from official npm release metadata; only JSON metadata is fetched, never package code. If that lookup fails, discovery uses its last successful version or the bundled fallback.
10
+
11
+ Provider-supplied capability fields override older published metadata for the same model. Missing fields use existing exact-model metadata or conservative defaults; unknown prices are marked unavailable in the picker. Explicit `models.json` and extension model configuration are applied last. API-specific transport compatibility remains code-owned.
12
+
13
+ A successful Codex account list controls picker availability, including hidden models. Existing model records remain resolvable for saved sessions and explicit configuration. Codex context limits are route-specific: its default context is not necessarily the maximum advertised for the OpenAI API. Unknown reasoning levels are retained as metadata but are not offered or sent until lunR supports them. Server prompt templates are not imported.
14
+
15
+ ## Refresh and recovery
16
+
17
+ Interactive startup uses cached or bundled data without catalog network requests. After prompt readiness, an idle poll checks for refreshes; successful automatic refreshes are limited to once an hour per runtime/account configuration, with a one-minute retry delay on failure. Active turns retain their model object, and shutdown cancels the poll. `/refresh` bypasses the freshness gate. The model picker and CLI model listing also request a freshness check; unresolved explicit CLI models get a discovery attempt.
18
+
19
+ Live caches are scoped to provider, endpoint, and credential/account identity using a digest. A response from an account changed during the request is discarded. Legacy unscoped public provider caches remain readable; unscoped Codex account caches do not. A failed request retains the last good data for the same scope.
20
+
21
+ ## Publication
22
+
23
+ The hourly `publish-model-catalog.yml` workflow validates sources and publication contracts, then publishes data directly to the dedicated `model-catalog` branch. Application code still goes through normal review. Each publication has an immutable content-addressed snapshot, per-shard checksums, source fetch timestamps/status, and a manifest. Clients fetch the manifest and only the shards for providers with stored credentials; the old master-branch index remains a fallback during migration. Custom catalog mirrors retain the legacy index/shard format.
24
+
25
+ Source requests have bounded retries and a last-good cache. Invalid schemas and suspicious drops greater than 25% for a source/provider previously containing at least ten models reuse cached data and appear in the workflow summary/manifest. Other sources can still update. A first run without a valid source cache fails closed. The final bundle must contain at least 500 models and include Anthropic, OpenAI, Codex, and OpenRouter, with valid limits, inputs, and prices.
26
+
27
+ For an upstream outage, inspect the workflow summary and manifest source status; the timestamps describe when data was actually fetched. For a legitimate large removal caught by the guard, review the upstream change before invalidating that source's last-good Actions cache. New provider protocols or incompatible capability schemas still require adapter work; discovery cannot grant access an account does not have.
28
+
29
+ `npm run sync:model-catalog` regenerates the checked-in offline bundle. Normal release builds remain offline and copy that bundle into the CLI package. Deploying the runtime changes requires a new CLI release; the publication workflow becomes active after it lands on the default branch.
@@ -137,7 +137,7 @@ lunr @README.md "Summarize this"
137
137
  lunr @src/app.ts @src/app.test.ts "Review these together"
138
138
  ```
139
139
 
140
- Paste images with Ctrl+V (Alt+V on Windows). The editor inserts `[image_1]`, `[image_2]`, … chips instead of a temp path. Dragging images into supported terminals also works.
140
+ Paste images with Ctrl+V or Alt+V on Windows. VS Code owns those keys, so `/paste-image` pastes without a terminal shortcut. The editor inserts `[image_1]`, `[image_2]`, … chips instead of a temp path. Dragging images into supported terminals also works.
141
141
 
142
142
  ### Run shell commands
143
143
 
package/docs/settings.md CHANGED
@@ -224,8 +224,6 @@ When multiple sources specify a session directory, precedence is `--session-dir`
224
224
 
225
225
  | Setting | Type | Default | Description |
226
226
  |---------|------|---------|-------------|
227
- | `gutterRail` | boolean | `true` | Thin left rail around each turn |
228
- | `promptSymbol` | boolean | `true` | Show the ☾ › prompt glyph on the editor's first line |
229
227
  | `footerMcp` | boolean | `true` | Show MCP status in the footer |
230
228
  | `footerLsp` | boolean | `false` | Show LSP status in the footer |
231
229
  | `footerContext` | boolean | `true` | Show context-usage pct/window |
@@ -238,7 +236,7 @@ When multiple sources specify a session directory, precedence is `--session-dir`
238
236
  | `footerPlanBar` | boolean | `true` | Show the █░ fill; off keeps the percent only |
239
237
  | `planUsageWindow` | string | `"5h"` | Preferred plan window: `"5h"` or `"weekly"`. Missing 5h falls back to weekly |
240
238
 
241
- Customize these from `/settings` → Customize → Footer as well.
239
+ Customize these from `/settings` → Customize as well.
242
240
 
243
241
  ### Cron, rollback, subscriptions
244
242
 
@@ -97,7 +97,7 @@ Add to `keybindings.json`:
97
97
  }
98
98
  ```
99
99
 
100
- On Windows, lunR pastes clipboard images with `Alt+V` (`app.clipboard.pasteImage`). VS Code owns `Ctrl+V` and right-click paste (text only). VS Code also swallows `Alt+V` as the View menu mnemonic, so lunR never sees the key (no toast). Forward it with:
100
+ On Windows, VS Code owns `Ctrl+V` and uses `Alt+V` as the View menu mnemonic. Forward lunR's `Alt+V` image-paste binding explicitly:
101
101
 
102
102
  ```json
103
103
  {
@@ -108,7 +108,7 @@ On Windows, lunR pastes clipboard images with `Alt+V` (`app.clipboard.pasteImage
108
108
  }
109
109
  ```
110
110
 
111
- A successful paste toasts `Pasted [image_1]` and inserts that chip in the editor. Submit keeps the label in the chat card and attaches the image to the model. `Clipboard contains no image or text` means the key arrived but the OS clipboard had no image.
111
+ A successful paste toasts `Pasted [image_1]` and inserts that chip in the editor. If VS Code still owns the key, `/paste-image` invokes the same operation without depending on any terminal shortcut. Submit keeps the label in the chat card and attaches the image to the model. `Clipboard contains no image` means the command arrived but the OS clipboard had no image.
112
112
 
113
113
  ## Windows Terminal
114
114
 
package/docs/usage.md CHANGED
@@ -23,7 +23,7 @@ The editor can be replaced temporarily by built-in UI such as `/settings` or by
23
23
  | Path completion | Press Tab to complete paths |
24
24
  | Multi-line input | Shift+Enter, or Ctrl+Enter on Windows Terminal |
25
25
  | Copy response | Ctrl+X copies the last assistant message; in `/tree`, it copies the selected message |
26
- | Images | Paste with Ctrl+V, Alt+V on Windows, or drag into the terminal. Images insert `[image_n]` chips, not a temp path. |
26
+ | Images | Paste with Ctrl+V, Alt+V on Windows, `/paste-image`, or drag into the terminal. VS Code must forward Alt+V. Images insert `[image_n]` chips. |
27
27
  | Shell command | `!command` runs and sends output to the model |
28
28
  | Hidden shell command | `!!command` runs without sending output to the model |
29
29
  | External editor | Ctrl+G opens `externalEditor`, `$VISUAL`, `$EDITOR`, Notepad on Windows, or `nano` elsewhere |
@@ -46,6 +46,7 @@ Built-in commands (from `slash-commands.ts`):
46
46
  | `/import` | Import and resume a session from a JSONL file |
47
47
  | `/share` | Share session as a secret GitHub gist. HTML viewer still defaults to https://pi.dev/session/ (leftover, not lunR-hosted). Override with `PI_SHARE_VIEWER_URL`. |
48
48
  | `/copy` | Copy last agent message to clipboard |
49
+ | `/paste-image` | Paste an image from the clipboard |
49
50
  | `/name`, `/title` | Set session display name |
50
51
  | `/session` | Show session info and stats |
51
52
  | `/usage` | This-session token totals, context, and every stored subscription plan (no `/token-usage`) |
package/docs/windows.md CHANGED
@@ -18,7 +18,7 @@ For most users, [Git for Windows](https://git-scm.com/download/win) is sufficien
18
18
 
19
19
  ## Image paste
20
20
 
21
- Ctrl+V is the terminal's paste. lunR image paste is **Alt+V**. The editor inserts `[image_n]` chips, not a temp path. VS Code may eat Alt+V (View mnemonic); forward it with `sendSequence` `\u001b[118;3u`.
21
+ Ctrl+V is the terminal's paste. lunR image paste is **Alt+V**. The editor inserts `[image_n]` chips, not a temp path. VS Code must forward Alt+V with `sendSequence` `\u001b[118;3u`; `/paste-image` works without a terminal shortcut.
22
22
 
23
23
  ## LSP
24
24
 
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-custom-provider",
9
- "version": "0.2.13",
9
+ "version": "0.2.14",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.52.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.2.13",
4
+ "version": "0.2.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.2.13",
4
+ "version": "0.2.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-gondolin",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-gondolin",
9
- "version": "0.2.13",
9
+ "version": "0.2.14",
10
10
  "dependencies": {
11
11
  "@earendil-works/gondolin": "0.12.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-gondolin",
3
3
  "private": true,
4
- "version": "0.2.13",
4
+ "version": "0.2.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-sandbox",
9
- "version": "0.2.13",
9
+ "version": "0.2.14",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sandbox-runtime": "^0.0.26"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
3
  "private": true,
4
- "version": "0.2.13",
4
+ "version": "0.2.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "0.2.13",
9
+ "version": "0.2.14",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.2.13",
4
+ "version": "0.2.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ashx-j/lunr",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "description": "lunR — terminal coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -37,12 +37,12 @@
37
37
  "shrinkwrap": "node ../../scripts/generate-coding-agent-shrinkwrap.mjs"
38
38
  },
39
39
  "dependencies": {
40
- "@ashx-j/lunr-agent": "^0.2.13",
41
- "@ashx-j/lunr-ai": "^0.2.13",
42
- "@ashx-j/lunr-tui": "^0.2.13",
43
- "@modelcontextprotocol/ext-apps": "^1.7.4",
40
+ "@ashx-j/lunr-agent": "^0.2.14",
41
+ "@ashx-j/lunr-ai": "^0.2.14",
42
+ "@ashx-j/lunr-tui": "^0.2.14",
43
+ "@modelcontextprotocol/ext-apps": "1.7.4",
44
44
  "@modelcontextprotocol/sdk": "1.30.0",
45
- "@mozilla/readability": "^0.6.0",
45
+ "@mozilla/readability": "0.6.0",
46
46
  "@silvia-odwyer/photon-node": "0.3.4",
47
47
  "@sinclair/typebox": "npm:typebox@1.1.38",
48
48
  "chalk": "5.6.2",
@@ -55,23 +55,23 @@
55
55
  "hosted-git-info": "9.0.3",
56
56
  "ignore": "7.0.5",
57
57
  "jiti": "2.7.0",
58
- "linkedom": "^0.16.11",
58
+ "linkedom": "0.16.11",
59
59
  "minimatch": "10.2.5",
60
- "open": "^10.2.0",
61
- "p-limit": "^6.2.0",
60
+ "open": "10.2.0",
61
+ "p-limit": "6.2.0",
62
62
  "proper-lockfile": "4.1.2",
63
- "recheck": "^4.5.0",
63
+ "recheck": "4.5.0",
64
64
  "semver": "7.8.0",
65
- "tree-sitter-wasms": "^0.1.13",
66
- "turndown": "^7.2.4",
65
+ "tree-sitter-wasms": "0.1.13",
66
+ "turndown": "7.2.4",
67
67
  "typebox": "1.1.38",
68
68
  "undici": "8.5.0",
69
69
  "unicode-animations": "1.0.3",
70
- "unpdf": "^1.6.2",
71
- "vscode-languageserver-protocol": "^3.18.2",
72
- "web-tree-sitter": "^0.24.7",
70
+ "unpdf": "1.6.2",
71
+ "vscode-languageserver-protocol": "3.18.2",
72
+ "web-tree-sitter": "0.24.7",
73
73
  "yaml": "2.9.0",
74
- "zod": "^4.4.3"
74
+ "zod": "4.4.3"
75
75
  },
76
76
  "overrides": {
77
77
  "rimraf": "6.1.2",