pi-usereq 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/.gitignore +3 -0
  2. package/CHANGELOG.md +31 -0
  3. package/README.md +1 -1
  4. package/package.json +1 -1
  5. package/{req → pi-usereq}/docs/REFERENCES.md +196 -159
  6. package/{req → pi-usereq}/docs/REQUIREMENTS.md +65 -44
  7. package/{req → pi-usereq}/docs/WORKFLOW.md +66 -73
  8. package/src/core/config.ts +39 -12
  9. package/src/core/extension-status.ts +94 -58
  10. package/src/core/pi-notify.ts +198 -11
  11. package/src/core/runtime-project-paths.ts +3 -32
  12. package/src/core/settings-menu.ts +9 -4
  13. package/src/core/static-check.ts +35 -171
  14. package/src/index.ts +281 -86
  15. package/tests/attended-results-scenarios.ts +3 -13
  16. package/tests/cli-command-option-parity.test.ts +21 -12
  17. package/tests/debug-extension-harness.test.ts +11 -7
  18. package/tests/extension-registration.test.ts +371 -71
  19. package/tests/oracle-project.test.ts +8 -3
  20. package/tests/oracle-standalone.test.ts +7 -13
  21. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_c.c.json +0 -5
  22. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_cpp.cpp.json +0 -5
  23. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_csharp.cs.json +0 -5
  24. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_elixir.ex.json +0 -5
  25. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_go.go.json +0 -5
  26. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_haskell.hs.json +0 -5
  27. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_java.java.json +0 -5
  28. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_javascript.js.json +0 -5
  29. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_kotlin.kt.json +0 -5
  30. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_lua.lua.json +0 -5
  31. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_perl.pl.json +0 -5
  32. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_php.php.json +0 -5
  33. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_python.py.json +0 -5
  34. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_ruby.rb.json +0 -5
  35. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_rust.rs.json +0 -5
  36. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_scala.scala.json +0 -5
  37. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_shell.sh.json +0 -5
  38. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_swift.swift.json +0 -5
  39. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_typescript.ts.json +0 -5
  40. package/tests/fixtures_attended_results/standalone/test-static-check-pylance/fixture_zig.zig.json +0 -5
  41. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_c.c.json +0 -5
  42. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_cpp.cpp.json +0 -5
  43. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_csharp.cs.json +0 -5
  44. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_elixir.ex.json +0 -5
  45. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_go.go.json +0 -5
  46. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_haskell.hs.json +0 -5
  47. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_java.java.json +0 -5
  48. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_javascript.js.json +0 -5
  49. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_kotlin.kt.json +0 -5
  50. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_lua.lua.json +0 -5
  51. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_perl.pl.json +0 -5
  52. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_php.php.json +0 -5
  53. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_python.py.json +0 -5
  54. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_ruby.rb.json +0 -5
  55. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_rust.rs.json +0 -5
  56. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_scala.scala.json +0 -5
  57. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_shell.sh.json +0 -5
  58. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_swift.swift.json +0 -5
  59. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_typescript.ts.json +0 -5
  60. package/tests/fixtures_attended_results/standalone/test-static-check-ruff/fixture_zig.zig.json +0 -5
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "PI-useReq Requirements"
3
3
  description: Software requirements specification
4
- version: "0.0.31"
4
+ version: "0.0.35"
5
5
  date: "2026-04-19"
6
6
  author: "OpenAI Codex"
7
7
  scope:
@@ -68,7 +68,7 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
68
68
  - **DES-001**: MUST implement the standalone executable in `src/cli.ts` as flag parsing plus dispatch to `tool-runner.ts` or `runStaticCheck`.
69
69
  - **DES-002**: MUST implement extension activation in `src/index.ts` by registering prompt commands, agent tools, configuration commands, and shared wrappers for supported pi CLI lifecycle hooks.
70
70
  - **DES-003**: MUST represent parsed source constructs as `SourceElement` instances produced by `SourceAnalyzer` and enriched with signatures, hierarchy, visibility, inheritance, body annotations, and Doxygen fields.
71
- - **DES-004**: MUST implement static-check execution through `StaticCheckBase`, `StaticCheckPylance`, `StaticCheckRuff`, and `StaticCheckCommand`, selected by `dispatchStaticCheckForFile`.
71
+ - **DES-004**: MUST implement modular static-check execution through debug-capable `StaticCheckBase` and user-facing `StaticCheckCommand`, selected by `dispatchStaticCheckForFile`.
72
72
  - **DES-005**: MUST centralize project file collection, token/reference/compress/find operations, git checks, docs checks, and worktree helpers in `src/core/tool-runner.ts`.
73
73
  - **DES-006**: MUST keep CLI compression and construct-search renderers as markdown blocks headed by `@@@ <path> | <language>`, while agent-tool compression and construct-search responses use dedicated JSON payload builders.
74
74
  - **DES-007**: MUST implement the standalone debug surface in `scripts/debug-extension.ts`, `scripts/pi-usereq-debug.sh`, and `scripts/lib/` recording and SDK-probe modules without altering extension runtime control flow.
@@ -110,10 +110,11 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
110
110
  - **REQ-066**: MUST omit `reset-context` and `context-reset` fields from persisted project configuration.
111
111
  - **REQ-067**: MUST send every rendered `req-<prompt>` payload into the current active session.
112
112
  - **REQ-068**: MUST use one prompt-delivery path that never creates replacement sessions or pre-reset flows.
113
- - **REQ-008**: MUST provide a static-check submenu that adds entries by guided language/module selection or raw spec, removes language entries, and shows supported languages and modules.
113
+ - **REQ-008**: MUST provide a static-check submenu that adds Command entries by guided language flow or raw spec, removes language entries, and shows supported languages.
114
+ - **REQ-160**: MUST hardcode `Command` as the only user-configurable static-check module and omit module-selection UI from static-check configuration menus.
115
+ - **REQ-161**: MUST hide `Dummy` from user-configurable static-check menus while preserving existing-config parsing and debug-driver support for `Dummy` entries.
114
116
  - **REQ-009**: MUST refresh shared runtime path context, apply configured startup tools, and publish single-line `pi-usereq` status text during `session_start`.
115
- - **REQ-109**: MUST make the single-line status bar render `git`, `base`, `docs`, `tests`, and `src` with explicit derived or configured path values, keeping every field name separate from its value.
116
- - **REQ-110**: MUST make the single-line status bar render `tools` as the count of active tools.
117
+ - **REQ-109**: MUST make the single-line status bar render the explicit runtime `base` path and omit `docs`, `src`, and `tests` path fields.
117
118
  - **REQ-111**: MUST omit prompt-delivery mode fields from the single-line status bar.
118
119
  - **REQ-112**: MUST render status-bar field names with the active theme `accent` token and field values with the active theme `warning` token.
119
120
  - **REQ-113**: MUST register shared event wrappers for `resources_discover`, `session_start`, `session_before_switch`, `session_before_fork`, `session_before_compact`, `session_compact`, and `session_shutdown`.
@@ -123,24 +124,35 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
123
124
  - **REQ-117**: MUST route every intercepted hook through `updateExtensionStatus` with the originating hook name and event payload, even when no hook-specific side effect exists.
124
125
  - **REQ-118**: MUST obtain latest context-usage facts from `ctx.getContextUsage()` or an equivalent runtime API and store them in extension session state.
125
126
  - **REQ-119**: MUST refresh stored context-usage facts during `session_start` and after intercepted events before rebuilding the status bar when newer data is available.
126
- - **REQ-120**: MUST render single-line status fields in this order: `git`, `base`, `docs`, `tests`, `src`, `tools`, `context`, `elapsed`, `last`, `beep`, `sound`.
127
- - **REQ-121**: MUST render `context` immediately after `tools` with separator ` • ` and a 5-cell bar using `▓` for filled cells.
128
- - **REQ-122**: MUST compute filled `context` cells by ceiling `usagePercent * 5 / 100`, except 0 percent MUST produce 0 filled cells.
129
- - **REQ-123**: MUST render `elapsed` immediately after `context`, showing `idle` when no prompt is running and `M:SS` for the active prompt duration.
130
- - **REQ-124**: MUST render `last` immediately after `elapsed`, showing `N/A` before any normally completed prompt run and otherwise the final `elapsed` value of the latest normally completed run.
131
- - **REQ-125**: MUST keep `elapsed` and `last` minutes unbounded above 59, zero-pad seconds to two digits, and preserve `last` when escape-triggered cancellation ends the active run.
127
+ - **REQ-120**: MUST render single-line status fields in this order: `base`, `context`, `elapsed`, `beep`, `sound`.
128
+ - **REQ-121**: MUST render `context` immediately after `base` with separator ` • ` and a 10-cell bar using `▓` for filled cells.
129
+ - **REQ-122**: MUST compute filled `context` cells by ceiling `usagePercent * 10 / 100`, except 0 percent MUST produce 0 filled cells.
130
+ - **REQ-123**: MUST render `elapsed` immediately after `context` as `⏱︎ <active> ⚑ <last> ⌛︎ <total>`.
131
+ - **REQ-124**: MUST render `⏱︎ --:--` when no prompt is active, and `⚑ --:--` plus `⌛︎ --:--` until the corresponding timers receive a normally completed prompt duration.
132
+ - **REQ-125**: MUST render timed `elapsed` segments as `M:SS`, keep minutes unbounded above 59, zero-pad seconds to two digits, and preserve `⚑` plus `⌛︎` when escape-triggered cancellation ends the active run.
132
133
  - **REQ-126**: MUST render `context` bar cells as theme `warning` `▓` glyphs on a background derived from the active theme `accent` token.
133
- - **REQ-127**: MUST overlay the literal `CLEAR` with the theme `warning` token on an `accent`-derived background when normalized context usage is unavailable or equals 0 percent.
134
- - **REQ-128**: MUST overlay the literal `FULL!` with the active theme `error` token on a theme `warning` background when normalized context usage exceeds 90 percent.
135
- - **REQ-129**: MUST persist independent terminal-beep flags for successful prompt completion, escape-triggered prompt abortion, and error-terminated prompt completion, defaulting each flag to disabled.
134
+ - **REQ-127**: MUST overlay the literal `◀ CLEAR ▶ ` with the theme `warning` token on an `accent`-derived background when normalized context usage is unavailable or equals 0 percent.
135
+ - **REQ-128**: MUST overlay the centered literal ` ◀ FULL ▶ ` with the active theme `error` token on a theme `warning` background when normalized context usage exceeds 90 percent.
136
+ - **REQ-129**: MUST persist independent terminal-beep flags for successful prompt completion, escape-triggered prompt abortion, and error-terminated prompt completion, defaulting each flag to enabled.
136
137
  - **REQ-130**: MUST dispatch enabled terminal-beep events through `notifyWindows`, `notifyOSC99`, `notifyOSC9`, or `notifyOSC777` when the matching prompt lifecycle outcome occurs.
137
138
  - **REQ-131**: MUST persist a successful-prompt external sound level with allowed values `none`, `low`, `mid`, and `high`, defaulting to `none`.
138
139
  - **REQ-132**: MUST execute the configured successful-prompt external sound command only when the prompt ends without abort or error and the sound level is not `none`.
139
140
  - **REQ-133**: MUST persist configurable shell-command strings for sound levels `low`, `mid`, and `high`, and MUST substitute `%%INSTALLATION_PATH%%` with the runtime extension installation path before execution.
140
141
  - **REQ-134**: MUST persist a configurable sound-level toggle shortcut, defaulting to `alt+s`, and MUST cycle sound levels in the order `none`, `low`, `mid`, `high`, `none`.
141
- - **REQ-135**: MUST render `beep` immediately after `last`, showing `none` or the comma-ordered enabled event tokens `end`, `esc`, and `err`.
142
+ - **REQ-135**: MUST render `beep` immediately after `et`, showing `none` or the comma-ordered enabled event tokens `end`, `esc`, and `err`.
142
143
  - **REQ-136**: MUST render `sound` immediately after `beep`, showing one of `none`, `low`, `mid`, or `high`.
143
144
  - **REQ-137**: MUST make the configuration UI expose controls for terminal-beep flags, selected notify command, sound toggle hotkey bind, and per-level notify commands.
145
+ - **REQ-163**: MUST persist successful-prompt Pushover settings `enabled=false`, `user=""`, `token=""`, and `priority=0` in project configuration.
146
+ - **REQ-164**: MUST make the notifications menu expose a `Pushover notifications` submenu immediately after the sound-notification submenu using the existing settings-list layout, navigation, descriptions, and value-column semantics.
147
+ - **REQ-165**: MUST make the Pushover submenu expose controls for successful-prompt enablement, `User Key/Delivery Group Key`, `Token/API Token Key`, and priority toggle `0=Normal` / `1=High Priority`.
148
+ - **REQ-166**: MUST suppress Pushover delivery whenever notification `global disable` is enabled, even when Pushover completion notifications remain enabled.
149
+ - **REQ-167**: MUST deliver successful-completion Pushover notifications through native Node HTTP or HTTPS requests to `https://api.pushover.net/1/messages.json` and MUST NOT invoke shell commands for Pushover delivery.
150
+ - **REQ-168**: MUST send a Pushover message only when the prompt completes successfully, Pushover completion notifications are enabled, and persisted `user` plus `token` values are non-empty.
151
+ - **REQ-169**: MUST send Pushover `title` as `<prompt> @ <base-path> [<time>]`, `message` as the prompt argument text used for `%%ARGS%%`, and `priority` as the persisted `0` or `1` value.
152
+ - **REQ-170**: MUST render single-line status fields in this order: `base`, `context`, `elapsed`, `beep`, `sound`, `pushover`.
153
+ - **REQ-171**: MUST render `pushover` immediately after `sound`, showing `on` or `off` from the Pushover successful-prompt enable setting.
154
+ - **REQ-172**: MUST make the Pushover submenu expose a `global disable` toggle that suppresses all Pushover delivery without mutating the successful-prompt enable setting.
155
+ - **REQ-159**: MUST increase `Σ` by each normally completed prompt duration and MUST NOT change `Σ` on escape-triggered cancellation.
144
156
  - **REQ-010**: MUST count tokens with `js-tiktoken` `cl100k_base`, count characters and lines, and make `files-tokens` emit agent-oriented JSON containing structured per-file metrics, extracted facts, and aggregate metrics.
145
157
  - **REQ-011**: MUST generate explicit-file references by analyzing supported source files and emitting agent-oriented JSON with per-file metadata, imports, symbol records, and optional residual text.
146
158
  - **REQ-012**: MUST compress supported source files by removing comments and blank lines, preserving indentation for Python, Haskell, and Elixir, and optionally preserving original line numbers.
@@ -183,11 +195,11 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
183
195
  - **REQ-100**: MUST encode quantitative facts as JSON numbers in unit-specific fields, keep textual fields free of decorative formatting and textual units, and avoid duplicating facts already exposed by specialized fields.
184
196
  - **REQ-101**: MUST register every agent tool with machine-oriented metadata describing purpose, required and optional parameters, configuration and invocation variants, output schema and format, specialized behaviors, and stable error conditions.
185
197
  - **REQ-102**: MUST make every structured agent-tool execute result mirror the same JSON object into `content[0].text` and `details`, nesting execution metadata under dedicated `execution` fields.
186
- - **REQ-018**: MUST expose the `test-static-check` driver only through standalone CLI `--test-static-check`, dispatching `dummy`, `pylance`, `ruff`, or `command` checker subcommands directly.
198
+ - **REQ-018**: MUST expose the `test-static-check` driver only through standalone CLI `--test-static-check`, dispatching `dummy` or `command` checker subcommands directly.
187
199
  - **REQ-019**: MUST resolve each explicit static-check file by extension and run every configured checker for that language while capturing only failing checker output.
188
- - **REQ-020**: MUST parse static-check enable specs in `LANG=MODULE[,CMD[,PARAM...]]` format and normalize supported language and module names case-insensitively.
189
- - **REQ-021**: MUST reject static-check enable specs with missing `=`, missing module, unknown language, unknown module, or `Command` entries without `cmd`.
190
- - **REQ-022**: MUST resolve Python checker executables in this preference order: `<project>/.venv/bin/python`, `PI_USEREQ_PYTHON`, `python3`, `python`.
200
+ - **REQ-020**: MUST parse user `--enable-static-check` specs in `LANG=Command,CMD[,PARAM...]` format and normalize supported language names plus `Command` case-insensitively.
201
+ - **REQ-021**: MUST reject user `--enable-static-check` specs with missing `=`, missing `Command`, missing `cmd`, unknown language, or any module other than `Command`.
202
+ - **REQ-022**: MUST preserve persisted `Dummy` static-check entries during config loading and execute them only when present in configuration or `--test-static-check dummy` input.
191
203
  - **REQ-023**: MUST require `Command`-module executables to exist on `PATH` before static-check execution.
192
204
  - **REQ-024**: MUST make `git-check` fail unless configured `git-path` exists, resolves inside a work tree, has no porcelain changes, and has a valid `HEAD`.
193
205
  - **REQ-025**: MUST make `docs-check` fail when `REQUIREMENTS.md`, `WORKFLOW.md`, or `REFERENCES.md` is missing and name the prompt command that should generate the missing file.
@@ -201,12 +213,13 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
201
213
  - **REQ-105**: MUST make `git-path` print the derived repository root only when it equals `base-path` or is an ancestor of `base-path`.
202
214
  - **REQ-106**: MUST make prompt `%%GUIDELINES_FILES%%`, `%%GUIDELINES_PATH%%`, and `%%TEMPLATE_PATH%%` resolve under `<installation-path>/resources`.
203
215
  - **REQ-107**: MUST express prompt-visible `installation-path`, `execution-path`, `base-path`, `config-path`, template paths, and guideline paths relative to user home using platform-native home environment variables.
204
- - **REQ-031**: MUST make the `pi-usereq` menu expose a `show-config` action between `Reset defaults` and `Save and close`, writing the current project configuration JSON to the editor.
216
+ - **REQ-031**: MUST make the `pi-usereq` menu expose a `show-config` action after `notifications` and before `Reset defaults`, writing the current project configuration JSON to the editor.
217
+ - **REQ-162**: MUST render the `show-config` current value as the user-home-relative extension config path using the settings-list `dim` value style.
205
218
  - **REQ-032**: MUST inject a pi.dev conformance block into rendered prompts when `docs/pi.dev/agent-document-manifest.json` exists under the project base.
206
219
  - **REQ-033**: MUST make that conformance block require manifest-guided document review before implementing or changing extension code that interfaces with pi CLI.
207
220
  - **REQ-034**: MUST make that conformance block require manifest-guided document review before validating, analyzing, or fixing extension code that interfaces with pi CLI.
208
221
  - **REQ-108**: MUST make that conformance block require API-level compliance with `docs/pi.dev/agent-document-manifest.json` for new or modified software that interfaces with the pi.dev CLI.
209
- - **REQ-035**: MUST parse repeatable `--enable-static-check LANG=MODULE[,CMD[,PARAM...]]` CLI options before command dispatch and merge resulting entries into persisted project configuration for the current project base.
222
+ - **REQ-035**: MUST parse repeatable `--enable-static-check LANG=Command,CMD[,PARAM...]` CLI options before command dispatch and merge resulting entries into persisted project configuration for the current project base.
210
223
  - **REQ-036**: MUST preserve existing `static-check` entries, append non-duplicate `--enable-static-check` entries in argument order, and treat canonical language, module, cmd, and params as the duplicate identity.
211
224
  - **REQ-037**: MUST reject `--enable-static-check` `Command` entries whose executable is unavailable on `PATH` and MUST NOT modify persisted project configuration when validation fails.
212
225
  - **REQ-038**: MUST honor `--verbose` only for `files-references`, `files-compress`, `files-find`, `references`, `compress`, and `find`, emitting command progress to stderr while leaving stdout payload format unchanged.
@@ -227,8 +240,7 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
227
240
  - **REQ-144**: MUST default `PI_NOTIFY_SOUND_HIGH_CMD` to `paplay --volume=65535 %%INSTALLATION_PATH%%/resources/sounds/Soft-high-tech-notification-sound-effect.mp3`.
228
241
  - **REQ-145**: MUST derive `git-path` only at runtime from the current working directory and repository ancestry rules, ignoring project-configuration JSON values.
229
242
  - **REQ-146**: MUST NOT read or persist `base-path` or `git-path` in project-configuration JSON.
230
- - **REQ-147**: MUST render status-bar `git` as the absolute runtime `git-path`, or an empty value when no repository root is resolved.
231
- - **REQ-148**: MUST render status-bar `base` as `.` when `base-path` equals or lacks `git-path`, otherwise as the path relative to `git-path`.
243
+ - **REQ-148**: MUST render status-bar `base` as the absolute runtime `base-path` with no git-relative shortening.
232
244
  - **REQ-149**: MUST label notification settings actions as `Selected notify command`, `Sound toggle hotkey bind`, `Notify command (low vol.)`, `Notify command (mid vol.)`, and `Notify command (high vol.)`.
233
245
  - **REQ-150**: MUST omit overview rows and reference-only actions from the main and notification configuration menus.
234
246
  - **REQ-151**: MUST render `pi-usereq`, notification, static-check, and startup-tool menus with left-aligned labels and right-aligned current values using the active CLI settings-list theme semantics.
@@ -240,18 +252,24 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
240
252
  ## 4. Test Requirements
241
253
  - **TST-001**: MUST verify extension activation registers every documented prompt command, agent tool, and configuration command while omitting tool-name slash commands, `test-static-check`, and the removed standalone config-viewer command.
242
254
  - **TST-002**: MUST verify installed bundled prompt, template, and guideline resources remain readable from `installation-path` and prompt rendering replaces all dynamic placeholders with runtime path context.
243
- - **TST-003**: MUST verify standalone CLI outputs for `files-tokens`, `files-compress`, `files-find`, and `--test-static-check` match the Python oracle for every fixture file.
244
- - **TST-004**: MUST verify project-scan CLI outputs for `compress`, `find`, `tokens`, `files-static-check`, `static-check`, `git-check`, `docs-check`, `git-path`, and `get-base-path` match the Python oracle.
245
- - **TST-005**: MUST verify the configuration menu persists `docs-dir`, disables startup tools, adds static-check entries, and omits prompt-delivery mode controls.
255
+ - **TST-003**: MUST verify standalone `files-*` CLI outputs match the Python oracle and `--test-static-check` dummy/command outputs match archived fixtures for every fixture file.
256
+ - **TST-004**: MUST verify project `compress`, `find`, `tokens`, `git-check`, `docs-check`, `git-path`, and `get-base-path` outputs match the Python oracle, and verify `files-static-check` plus `static-check` against archived fixtures.
257
+ - **TST-005**: MUST verify the configuration menu persists `docs-dir`, disables startup tools, adds Command static-check entries, and omits prompt-delivery mode controls.
258
+ - **TST-046**: MUST verify static-check menus omit module selection and hide `Dummy`, `Pylance`, and `Ruff` from user-configurable actions.
246
259
  - **TST-006**: MUST verify `session_start` activates configured startup tools and updates the single-line `pi-usereq` status bar.
247
- - **TST-031**: MUST verify the status bar renders explicit git/base/docs/tests/src paths, active-tool count, and active-theme `accent`/`warning` field-value token separation.
260
+ - **TST-031**: MUST verify the status bar renders the explicit base path, omits `docs`, `src`, `tests`, `git`, and `tools`, and preserves active-theme `accent`/`warning` field-value token separation.
248
261
  - **TST-032**: MUST verify extension registration installs wrappers for all documented lifecycle hooks and routes replayed hook payloads through `updateExtensionStatus`.
249
- - **TST-033**: MUST verify the status bar renders ordered `git`, `base`, `docs`, `tests`, `src`, `tools`, `context`, `elapsed`, `last`, `beep`, and `sound` fields plus the ceiling-based 5-cell context bar.
262
+ - **TST-033**: MUST verify the status bar renders ordered `base`, `context`, `elapsed`, `beep`, and `sound` fields plus the ceiling-based 10-cell context bar.
250
263
  - **TST-037**: MUST verify the configuration menu persists terminal-beep flags, selected notify command, sound toggle hotkey bind, and per-level notify commands using the documented menu labels.
251
264
  - **TST-038**: MUST verify the sound-toggle shortcut cycles persisted sound levels and refreshes the status bar with the updated `sound` field.
252
- - **TST-034**: MUST verify `ctx.getContextUsage()` snapshots refresh status updates and prompt timing preserves `last` across normal completion but not escape-triggered cancellation.
253
- - **TST-035**: MUST verify unavailable or 0-percent context usage renders the literal `CLEAR` with the theme `warning` token on the preserved `accent`-derived context-bar background.
254
- - **TST-036**: MUST verify context usage above 90 percent renders the literal `FULL!` with the theme `error` token on the preserved theme `warning` background.
265
+ - **TST-047**: MUST verify the notifications menu exposes the Pushover submenu after sound settings and persists Pushover enable, user key, token, and priority values.
266
+ - **TST-048**: MUST verify successful prompt completion sends one native Pushover request with the documented endpoint and payload, and suppresses delivery on abort, error, global disable, or missing credentials.
267
+ - **TST-049**: MUST verify the status bar renders ordered `base`, `context`, `elapsed`, `beep`, `sound`, and `pushover` fields and appends `pushover:on|off` using the Pushover enable setting.
268
+ - **TST-050**: MUST verify the Pushover `global disable` toggle suppresses delivery without changing the persisted successful-prompt enable setting.
269
+ - **TST-034**: MUST verify `ctx.getContextUsage()` snapshots refresh status updates and `elapsed` preserves `⚑` plus `⌛︎` across escape-triggered cancellation.
270
+ - **TST-045**: MUST verify default configuration enables terminal-beep flags `end`, `esc`, and `err` before user customization.
271
+ - **TST-035**: MUST verify unavailable or 0-percent context usage renders the literal `◀ CLEAR ▶ ` with the theme `warning` token on the preserved `accent`-derived context-bar background.
272
+ - **TST-036**: MUST verify context usage above 90 percent renders the literal ` ◀ FULL ▶ ` with the theme `error` token on the preserved theme `warning` background.
255
273
  - **TST-043**: MUST verify configuration menus reuse the active CLI settings-list theme semantics for labels, values, descriptions, cursor, and hints.
256
274
  - **TST-007**: MUST verify `git-path` output ignores stale stored values and resolves only a current repository root that is identical to or an ancestor of `base-path`.
257
275
  - **TST-008**: MUST verify `git-wt-create` and `git-wt-delete` create, configure, copy `.pi-usereq`, and remove the named worktree as observable filesystem side effects.
@@ -281,7 +299,7 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
281
299
  - **TST-042**: MUST verify `package.json` keeps `name` equal to `pi-usereq` so npm publication resolves to `https://www.npmjs.com/package/pi-usereq`.
282
300
  - **TST-044**: MUST verify `package.json` keeps npm provenance metadata aligned to the canonical GitHub repository, issues URL, and README homepage.
283
301
  - **TST-040**: MUST verify `.pi-usereq/config.json` omits `base-path` and `git-path`, while runtime path tools and status rendering still derive both values correctly.
284
- - **TST-041**: MUST verify the `pi-usereq` menu exposes `show-config` between `Reset defaults` and `Save and close`, and omits overview rows plus notification reference-only actions.
302
+ - **TST-041**: MUST verify the `pi-usereq` menu exposes `show-config` after `notifications` and before `Reset defaults`, shows the home-relative config path in the value column, and omits overview rows plus notification reference-only actions.
285
303
 
286
304
  ## 5. Observed Component Model
287
305
 
@@ -291,7 +309,7 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
291
309
  - `src/core/tool-runner.ts` orchestrates project file collection, markdown generation, compression, construct search, docs checks, git checks, and worktree lifecycle actions.
292
310
  - `src/core/source-analyzer.ts` defines `SourceElement`, language specs, extraction heuristics, Doxygen attachment, and Markdown rendering support.
293
311
  - `src/core/generate-markdown.ts`, `src/core/compress.ts`, and `src/core/find-constructs.ts` share analyzer and compressor logic to produce reusable Markdown outputs.
294
- - `src/core/static-check.ts` maps languages/extensions, parses enable specs, resolves inputs, and dispatches checker classes.
312
+ - `src/core/static-check.ts` maps languages/extensions, parses Command-only enable specs, preserves debug `Dummy` handling, resolves inputs, and dispatches modular checker classes.
295
313
  - `src/core/config.ts`, `src/core/resources.ts`, and `src/core/prompts.ts` provide config persistence, home-resource synchronization, and prompt rendering.
296
314
  - `src/core/doxygen-parser.ts` normalizes Doxygen tags reused by source references and construct search output.
297
315
  - `scripts/debug-extension.ts`, `scripts/pi-usereq-debug.sh`, and `scripts/lib/*.ts` provide the standalone extension debug harness, bash wrapper, recording adapters, offline replay, SDK parity probing, and usage-manual rendering.
@@ -379,8 +397,8 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
379
397
  ### 7.1 Covered Behaviors
380
398
  - `tests/extension-registration.test.ts` covers extension registration, config-menu persistence, startup-tool enablement, runtime `git-path` derivation, and static-check menu mutation flows.
381
399
  - `tests/prompt-rendering.test.ts` covers home-resource synchronization and placeholder replacement in rendered prompts.
382
- - `tests/oracle-standalone.test.ts` compares standalone `files-*` and `--test-static-check` outputs against the Python `usereq.cli` oracle across all fixture languages.
383
- - `tests/oracle-project.test.ts` compares project-scoped commands against the Python oracle on a temporary git repository and separately verifies worktree create/delete side effects.
400
+ - `tests/oracle-standalone.test.ts` compares standalone `files-*` outputs against the Python `usereq.cli` oracle and compares `--test-static-check` dummy/command outputs against archived fixtures.
401
+ - `tests/oracle-project.test.ts` compares unchanged project-scoped commands against the Python oracle, verifies archived `files-static-check` and `static-check` outputs, and separately verifies worktree create/delete side effects.
384
402
  - `tests/release-workflow.test.ts` verifies semver-tag gating, npm publication steps, and GitHub release creation directives in `.github/workflows/release-npm.yml`.
385
403
  - Test business logic focuses on parity with the Python oracle, persistent config mutation, startup-tool activation, worktree lifecycle correctness, and npm release workflow structure.
386
404
 
@@ -410,7 +428,7 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
410
428
  | DES-001 | `src/cli.ts` :: `parseArgs` and `main` :: parses flags then dispatches with branches such as `runReferences`, `runCompress`, `runFind`, `runProjectStaticCheck`, and `runStaticCheck`. |
411
429
  | DES-002 | `src/index.ts` :: `piUsereqExtension` :: calls `registerPromptCommands`, `registerToolWrapperCommands`, `registerAgentTools`, `registerConfigCommands`, then installs `pi.on("session_start", ...)`. |
412
430
  | DES-003 | `src/core/source-analyzer.ts` :: `class SourceElement`; `SourceAnalyzer.enrich` :: invokes `extractSignatures`, `detectHierarchy`, `extractVisibility`, `extractInheritance`, `extractBodyAnnotations`, and `extractDoxygenFields`. |
413
- | DES-004 | `src/core/static-check.ts` :: classes `StaticCheckBase`, `StaticCheckPylance`, `StaticCheckRuff`, `StaticCheckCommand`; `dispatchStaticCheckForFile` switch selects the implementation by module name. |
431
+ | DES-004 | `src/core/static-check.ts` :: `StaticCheckBase` and `StaticCheckCommand`; `dispatchStaticCheckForFile` switch selects the modular implementation by module name. |
414
432
  | DES-005 | `src/core/tool-runner.ts` :: exports `runFilesTokens`, `runReferences`, `runCompress`, `runFind`, `runProjectStaticCheck`, `runGitCheck`, `runDocsCheck`, `runGitWt*`, `runGitPath`, `runGetBasePath`. |
415
433
  | DES-006 | `src/core/compress-files.ts` :: `parts.push(\`@@@ ${outputPath} | ${language}\n> Lines: ...\`)`; `src/core/find-constructs.ts` :: `const header = \`@@@ ${filePath} | ${language}\``. |
416
434
  | DES-011 | `.github/workflows/release-npm.yml` :: release jobs validate semver tags and `origin/master`, publish with npm authentication, and create the GitHub Release. |
@@ -425,7 +443,9 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
425
443
  | REQ-005 | `src/index.ts` :: `runToolCommand`, `formatResultForEditor`, `showToolResult` :: writes combined output into the editor and notifies `completed` or `failed`. |
426
444
  | REQ-006 | `src/index.ts` :: `configurePiUsereq` :: edits docs/tests/src settings, invokes submenus, resets defaults, and persists with `saveProjectConfig`. |
427
445
  | REQ-007 | `src/index.ts` :: `configurePiUsereqToolsMenu` :: choices include `Show tool status`, `Toggle tool`, `Enable all`, `Disable all`, `Reset ... defaults`. |
428
- | REQ-008 | `src/index.ts` :: `configureStaticCheckMenu` :: supports guided language addition, raw-spec addition, language removal, and supported-language display. |
446
+ | REQ-008 | `src/index.ts` :: `configureStaticCheckMenu` :: supports Command-only guided addition, raw-spec addition, language removal, and supported-language display. |
447
+ | REQ-160 | `src/index.ts` :: `buildStaticCheckMenuChoices` and `configureStaticCheckMenu` :: omit user-facing module selection and hardcode `Command` for guided additions. |
448
+ | REQ-161 | `src/core/static-check.ts` :: `dispatchStaticCheckForFile` and `runStaticCheck` :: keep `Dummy` only for existing config entries and the debug driver. |
429
449
  | REQ-009 | `src/index.ts` :: `pi.on("session_start", ...)` :: calls `ensureHomeResources()`, `applyConfiguredPiUsereqTools`, and `ctx.ui.setStatus(...)`. |
430
450
  | REQ-010 | `src/core/token-counter.ts` :: `new TokenCounter("cl100k_base")`; `formatPackSummary`; `src/core/tool-runner.ts` :: `runFilesTokens` validates files and returns summary plus warnings. |
431
451
  | REQ-011 | `src/core/reference-payload.ts` :: `buildReferenceToolPayload` :: emits explicit-file JSON with per-file metadata, imports, symbol records, and structured comments/Doxygen fields. |
@@ -435,11 +455,11 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
435
455
  | REQ-015 | `src/core/tool-runner.ts` :: `runCompress` :: collects configured project files then returns `compressFiles(files, enableLineNumbers, verbose, base)`. |
436
456
  | REQ-016 | `src/core/tool-runner.ts` :: `runFind` :: collects configured project files and executes `findConstructsInFiles(files, tagFilter, pattern, ...)`. |
437
457
  | REQ-017 | `src/core/tool-runner.ts` :: `runTokens` :: `canonicalNames = ["REQUIREMENTS.md", "WORKFLOW.md", "REFERENCES.md"]` and fails if no canonical docs exist. |
438
- | REQ-018 | `src/cli.ts` :: `if (args.testStaticCheck) return runStaticCheck(args.testStaticCheck)`; `src/index.ts` :: registers `test-static-check`; `src/core/static-check.ts` :: `runStaticCheck` supports `dummy`, `pylance`, `ruff`, `command`. |
458
+ | REQ-018 | `src/cli.ts` :: `if (args.testStaticCheck) return runStaticCheck(args.testStaticCheck)`; `src/core/static-check.ts` :: `runStaticCheck` supports `dummy` and `command`. |
439
459
  | REQ-019 | `src/core/tool-runner.ts` :: `runFilesStaticCheck` :: resolves extension via `STATIC_CHECK_EXT_TO_LANG`, iterates configured checkers, and calls `dispatchStaticCheckForFile(..., { failOnly: true })`. |
440
- | REQ-020 | `src/core/static-check.ts` :: `parseEnableStaticCheck` :: parses `LANG=MODULE[,CMD[,PARAM...]]`, canonicalizes language/module names, and builds `StaticCheckEntry`. |
441
- | REQ-021 | `src/core/static-check.ts` :: `parseEnableStaticCheck` :: explicit `ReqError` branches for missing `=`, unknown language, missing module, unknown module, and missing `Command` cmd. |
442
- | REQ-022 | `src/core/static-check.ts` :: `detectPythonExecutable` :: candidate order is project `.venv/bin/python`, `PI_USEREQ_PYTHON`, `python3`, then `python`. |
460
+ | REQ-020 | `src/core/static-check.ts` :: `parseEnableStaticCheck` :: parses `LANG=Command,CMD[,PARAM...]`, canonicalizes language names, and builds `StaticCheckEntry`. |
461
+ | REQ-021 | `src/core/static-check.ts` :: `parseEnableStaticCheck` :: explicit `ReqError` branches reject missing `=`, missing `Command`, missing `cmd`, unknown language, and non-Command modules. |
462
+ | REQ-022 | `src/core/config.ts` :: `loadConfig` preserves persisted entries; `src/core/static-check.ts` :: `dispatchStaticCheckForFile` and `runStaticCheck` keep `Dummy` available only for existing config or debug-driver use. |
443
463
  | REQ-023 | `src/core/static-check.ts` :: `StaticCheckCommand` constructor :: `if (!findExecutable(cmd)) throw new ReqError(...)`. |
444
464
  | REQ-024 | `src/core/tool-runner.ts` :: `runGitCheck` :: bash command requires worktree membership, empty `git status --porcelain`, and symbolic or detached `HEAD`. |
445
465
  | REQ-025 | `src/core/tool-runner.ts` :: `runDocsCheck` :: maps missing docs files to `/req-write`, `/req-workflow`, and `/req-references` prompt guidance. |
@@ -459,9 +479,10 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
459
479
  | --- | --- |
460
480
  | TST-001 | `tests/extension-registration.test.ts` :: `extension registers all required prompt commands, tool wrappers, and agent tools` validates command and tool registration sets. |
461
481
  | TST-002 | `tests/prompt-rendering.test.ts` :: `embedded resources are copied ...` and `prompt rendering replaces all dynamic placeholders ...`. |
462
- | TST-003 | `tests/oracle-standalone.test.ts` :: `standalone command outputs match the Python oracle for every fixture` across `files-tokens`, `files-compress`, `files-find`, and `--test-static-check`. |
463
- | TST-004 | `tests/oracle-project.test.ts` :: `project-scan commands match the Python oracle on a git-backed fixture repository` for `compress`, `find`, `tokens`, `files-static-check`, `static-check`, `git-check`, `docs-check`, `git-path`, and `get-base-path`. |
464
- | TST-005 | `tests/extension-registration.test.ts` :: `configuration menu saves updated docs-dir`, `configuration menu can disable ... tools`, and both static-check menu addition tests. |
482
+ | TST-003 | `tests/oracle-standalone.test.ts` :: preserves Python-oracle coverage for `files-tokens`, `files-compress`, and `files-find`; `tests/attended-results-scenarios.ts` :: archives `test-static-check` dummy and command scenarios only. |
483
+ | TST-004 | `tests/oracle-project.test.ts` :: preserves Python-oracle coverage for `compress`, `find`, `tokens`, `git-check`, `docs-check`, `git-path`, and `get-base-path`; `tests/attended-results-scenarios.ts` :: archives `files-static-check` and `static-check`. |
484
+ | TST-005 | `tests/extension-registration.test.ts` :: `configuration menu saves updated docs-dir`, `configuration menu can disable ... tools`, and both Command-oriented static-check menu addition tests. |
485
+ | TST-046 | `tests/extension-registration.test.ts` :: `configuration menu hides removed static-check modules from user-facing actions`. |
465
486
  | TST-006 | `tests/extension-registration.test.ts` :: `session_start applies configured pi-usereq startup tools`. |
466
487
  | TST-007 | `tests/extension-registration.test.ts` :: `git-path dependent commands derive the repository root at runtime`. |
467
488
  | TST-008 | `tests/oracle-project.test.ts` :: `git worktree create/delete wrappers produce expected worktree side effects`. |
@@ -207,23 +207,13 @@
207
207
  - `formatResult(...)`: render compressed output [`src/core/compress.ts`]
208
208
  - `formatAvailableTags(...)`: render supported tag index for failure paths [`src/core/find-constructs.ts`]
209
209
  - `runStaticCheck(...)`: branch `--test-static-check`; invoke static-check test driver [`src/core/static-check.ts`]
210
- - `StaticCheckBase.run(...)`: iterate resolved files for dummy driver [`src/core/static-check.ts`]
210
+ - `StaticCheckBase.run(...)`: iterate resolved files for debug dummy driver [`src/core/static-check.ts`]
211
211
  - `StaticCheckBase.checkFile(...)`: emit success without external checker [`src/core/static-check.ts`]
212
212
  - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
213
213
  - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
214
- - `StaticCheckPylance.run(...)`: iterate resolved files for pyright path [`src/core/static-check.ts`]
215
- - `StaticCheckPylance.checkFile(...)`: run pyright-based validation [`src/core/static-check.ts`]
216
- - `detectPythonExecutable(...)`: resolve Python interpreter [`src/core/static-check.ts`]
217
- - `findExecutable(...)`: resolve executable on `PATH` [`src/core/static-check.ts`]
218
- - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
219
- - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
220
- - `StaticCheckRuff.run(...)`: iterate resolved files for ruff path [`src/core/static-check.ts`]
221
- - `StaticCheckRuff.checkFile(...)`: run ruff-based validation [`src/core/static-check.ts`]
222
- - `detectPythonExecutable(...)`: resolve Python interpreter [`src/core/static-check.ts`]
223
- - `findExecutable(...)`: resolve executable on `PATH` [`src/core/static-check.ts`]
224
- - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
225
- - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
226
- - `StaticCheckCommand.run(...)`: iterate resolved files for generic command path [`src/core/static-check.ts`]
214
+ - `StaticCheckCommand.run(...)`: iterate resolved files for external command path [`src/core/static-check.ts`]
215
+ - `findExecutable(...)`: resolve executable on `PATH` or explicit path [`src/core/static-check.ts`]
216
+ - `isExecutableFile(...)`: verify executable access bits [`src/core/static-check.ts`]
227
217
  - `StaticCheckCommand.checkFile(...)`: run external executable against one file [`src/core/static-check.ts`]
228
218
  - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
229
219
  - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
@@ -234,24 +224,14 @@
234
224
  - `getDefaultConfig(...)`: build default config [`src/core/config.ts`]
235
225
  - `normalizeEnabledPiUsereqTools(...)`: canonicalize startup tools [`src/core/pi-usereq-tools.ts`]
236
226
  - `dispatchStaticCheckForFile(...)`: instantiate checker by configured module [`src/core/static-check.ts`]
237
- - `formatStaticCheckModules(...)`: render valid module names for error paths [`src/core/static-check.ts`]
238
- - `StaticCheckBase.run(...)`: execute dummy checker [`src/core/static-check.ts`]
227
+ - `formatDispatchStaticCheckModules(...)`: render valid persisted modules for unknown-module failures [`src/core/static-check.ts`]
228
+ - `StaticCheckBase.run(...)`: execute debug dummy checker [`src/core/static-check.ts`]
239
229
  - `StaticCheckBase.checkFile(...)`: emit success without external checker [`src/core/static-check.ts`]
240
230
  - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
241
231
  - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
242
- - `StaticCheckPylance.run(...)`: execute pyright checker [`src/core/static-check.ts`]
243
- - `StaticCheckPylance.checkFile(...)`: run pyright-based validation [`src/core/static-check.ts`]
244
- - `detectPythonExecutable(...)`: resolve Python interpreter [`src/core/static-check.ts`]
245
- - `findExecutable(...)`: resolve executable on `PATH` [`src/core/static-check.ts`]
246
- - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
247
- - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
248
- - `StaticCheckRuff.run(...)`: execute ruff checker [`src/core/static-check.ts`]
249
- - `StaticCheckRuff.checkFile(...)`: run ruff-based validation [`src/core/static-check.ts`]
250
- - `detectPythonExecutable(...)`: resolve Python interpreter [`src/core/static-check.ts`]
251
- - `findExecutable(...)`: resolve executable on `PATH` [`src/core/static-check.ts`]
252
- - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
253
- - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
254
- - `StaticCheckCommand.run(...)`: execute generic command checker [`src/core/static-check.ts`]
232
+ - `StaticCheckCommand.run(...)`: execute external command checker [`src/core/static-check.ts`]
233
+ - `findExecutable(...)`: resolve executable on `PATH` or explicit path [`src/core/static-check.ts`]
234
+ - `isExecutableFile(...)`: verify executable access bits [`src/core/static-check.ts`]
255
235
  - `StaticCheckCommand.checkFile(...)`: run external executable against one file [`src/core/static-check.ts`]
256
236
  - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
257
237
  - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
@@ -388,24 +368,14 @@
388
368
  - `getDefaultConfig(...)`: build default config [`src/core/config.ts`]
389
369
  - `normalizeEnabledPiUsereqTools(...)`: canonicalize startup tools [`src/core/pi-usereq-tools.ts`]
390
370
  - `dispatchStaticCheckForFile(...)`: instantiate checker by configured module [`src/core/static-check.ts`]
391
- - `formatStaticCheckModules(...)`: render valid module names for error paths [`src/core/static-check.ts`]
392
- - `StaticCheckBase.run(...)`: execute dummy checker [`src/core/static-check.ts`]
371
+ - `formatDispatchStaticCheckModules(...)`: render valid persisted modules for unknown-module failures [`src/core/static-check.ts`]
372
+ - `StaticCheckBase.run(...)`: execute debug dummy checker [`src/core/static-check.ts`]
393
373
  - `StaticCheckBase.checkFile(...)`: emit success without external checker [`src/core/static-check.ts`]
394
374
  - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
395
375
  - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
396
- - `StaticCheckPylance.run(...)`: execute pyright checker [`src/core/static-check.ts`]
397
- - `StaticCheckPylance.checkFile(...)`: run pyright-based validation [`src/core/static-check.ts`]
398
- - `detectPythonExecutable(...)`: resolve Python interpreter [`src/core/static-check.ts`]
399
- - `findExecutable(...)`: resolve executable on `PATH` [`src/core/static-check.ts`]
400
- - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
401
- - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
402
- - `StaticCheckRuff.run(...)`: execute ruff checker [`src/core/static-check.ts`]
403
- - `StaticCheckRuff.checkFile(...)`: run ruff-based validation [`src/core/static-check.ts`]
404
- - `detectPythonExecutable(...)`: resolve Python interpreter [`src/core/static-check.ts`]
405
- - `findExecutable(...)`: resolve executable on `PATH` [`src/core/static-check.ts`]
406
- - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
407
- - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
408
- - `StaticCheckCommand.run(...)`: execute generic command checker [`src/core/static-check.ts`]
376
+ - `StaticCheckCommand.run(...)`: execute external command checker [`src/core/static-check.ts`]
377
+ - `findExecutable(...)`: resolve executable on `PATH` or explicit path [`src/core/static-check.ts`]
378
+ - `isExecutableFile(...)`: verify executable access bits [`src/core/static-check.ts`]
409
379
  - `StaticCheckCommand.checkFile(...)`: run external executable against one file [`src/core/static-check.ts`]
410
380
  - `StaticCheckBase.headerLine(...)`: format checker header [`src/core/static-check.ts`]
411
381
  - `StaticCheckBase.emitLine(...)`: write checker output [`src/core/static-check.ts`]
@@ -477,7 +447,7 @@
477
447
  - External Boundaries:
478
448
  - Node process APIs for argv, cwd, environment, stdout, stderr, and exit code.
479
449
  - Filesystem access for config, docs discovery, source reads, and bundled resources.
480
- - Git, bash, pyright, ruff, and arbitrary configured checker subprocesses via child-process execution.
450
+ - Git, bash, and arbitrary configured checker subprocesses via child-process execution.
481
451
 
482
452
  ### `PROC:req-debug`
483
453
  - Entrypoints:
@@ -587,19 +557,21 @@
587
557
  - `RecordingExtensionAPI.setActiveTools(...)`: replace active-tool set with runtime-visible names [`scripts/lib/recording-extension-api.ts`]
588
558
  - `RecordingExtensionAPI.getAllTools(...)`: expose supported builtin plus extension tool inventory [`scripts/lib/recording-extension-api.ts`]
589
559
  - `setPiUsereqStatusConfig(...)`: cache docs/tests/src and pi-notify values for later status renders [`src/core/extension-status.ts`]
590
- - `updateExtensionStatus(...)`: refresh stored context usage, timers, and rendered status text [`src/core/extension-status.ts`]
560
+ - `updateExtensionStatus(...)`: refresh stored context usage, elapsed timers, cumulative runtime, and rendered status text [`src/core/extension-status.ts`]
591
561
  - `refreshContextUsage(...)`: sync the latest context-usage snapshot [`src/core/extension-status.ts`]
592
562
  - `RecordingCommandContext.getContextUsage(...)`: return the offline context-usage placeholder [`scripts/lib/recording-extension-api.ts`]
593
- - `syncPiUsereqStatusTicker(...)`: start or stop the live elapsed-time ticker [`src/core/extension-status.ts`]
594
- - `renderPiUsereqStatus(...)`: render the git/base/docs/tests/src/tools/context/elapsed/last/beep/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
563
+ - `syncPiUsereqStatusTicker(...)`: start or stop the live elapsed ticker [`src/core/extension-status.ts`]
564
+ - `renderPiUsereqStatus(...)`: render the base/context/elapsed/beep/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
595
565
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
596
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with active-theme field and overlay semantics [`src/core/extension-status.ts`]
566
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with consolidated elapsed semantics [`src/core/extension-status.ts`]
597
567
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
598
568
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
599
- - `formatContextUsageBar(...)`: render the 5-cell context bar or threshold-specific overlay [`src/core/extension-status.ts`]
600
- - `resolveContextUsageOverlay(...)`: choose `CLEAR` or `FULL!` overlay states with CLI-supported theme tokens [`src/core/extension-status.ts`]
569
+ - `formatContextUsageBar(...)`: render the 10-cell context bar or threshold-specific overlay [`src/core/extension-status.ts`]
570
+ - `resolveContextUsageOverlay(...)`: choose `◀ CLEAR ▶ ` or ` ◀ FULL ▶ ` overlay states with CLI-supported theme tokens [`src/core/extension-status.ts`]
601
571
  - `formatContextUsageOverlay(...)`: paint the fixed-width overlay with preserved bar background [`src/core/extension-status.ts`]
602
- - `formatStatusDuration(...)`: render `M:SS` durations [`src/core/extension-status.ts`]
572
+ - `formatElapsedStatusValue(...)`: compose `⏱︎`, `⚑`, and `⌛︎` timer segments [`src/core/extension-status.ts`]
573
+ - `formatCompletedStatusDuration(...)`: render completed timers or the unset placeholder [`src/core/extension-status.ts`]
574
+ - `formatStatusDuration(...)`: render `M:SS` durations [`src/core/extension-status.ts`]
603
575
  - `formatPiNotifyBeepStatus(...)`: serialize enabled beep flags for the footer [`src/core/pi-notify.ts`]
604
576
  - `runPiNotifyEffects(...)`: dispatch configured terminal beeps and successful-run sound hooks on `agent_end` [`src/core/pi-notify.ts`]
605
577
  - `classifyPiNotifyOutcome(...)`: map assistant stop reasons to `end`, `esc`, or `err` [`src/core/pi-notify.ts`]
@@ -627,19 +599,24 @@
627
599
  - `deliverPromptCommand(...)`: dispatch prompt replay into the current recorded session [`src/index.ts`]
628
600
  - External boundaries: `RecordingExtensionAPI.sendUserMessage(...)` records the delivered prompt payload.
629
601
  - `configurePiUsereq(...)`: execute the interactive configuration menu [`src/index.ts`]
602
+ - `buildPiUsereqMenuChoices(...)`: serialize top-level settings actions plus the display-only config-path row [`src/index.ts`]
603
+ - `formatProjectConfigPathForMenu(...)`: format the current config path relative to the user home when possible [`src/index.ts`]
630
604
  - `showPiUsereqSettingsMenu(...)`: render the shared settings-menu UI for top-level and submenu actions [`src/core/settings-menu.ts`]
631
605
  - `formatPiUsereqSettingsMenuTitle(...)`: rebuild the menu title with active-theme semantics [`src/core/settings-menu.ts`]
632
606
  - `buildPiUsereqSettingsListTheme(...)`: prefer shared CLI settings-list theming and fall back during offline replay [`src/core/settings-menu.ts`]
633
607
  - `buildFallbackPiUsereqSettingsListTheme(...)`: mirror CLI settings-list token roles from the callback-local theme [`src/core/settings-menu.ts`]
608
+ - `buildSettingItems(...)`: map menu choices into settings-list rows and apply optional dim value tones [`src/core/settings-menu.ts`]
634
609
  - `saveProjectConfig(...)`: persist menu updates on save-and-close [`src/index.ts`]
635
610
  - `setPiUsereqStatusConfig(...)`: cache the saved config for footer rendering [`src/core/extension-status.ts`]
636
- - `renderPiUsereqStatus(...)`: render the docs/tests/src/tools/context/elapsed/last/beep/sound footer after save-and-close with CLI-theme token overlays [`src/core/extension-status.ts`]
611
+ - `renderPiUsereqStatus(...)`: render the base/context/elapsed/beep/sound footer after save-and-close with CLI-theme token overlays [`src/core/extension-status.ts`]
637
612
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
638
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with active-theme field and overlay semantics [`src/core/extension-status.ts`]
613
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with consolidated elapsed semantics [`src/core/extension-status.ts`]
639
614
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
640
615
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
641
- - `formatContextUsageBar(...)`: render the 5-cell context bar or threshold-specific overlay [`src/core/extension-status.ts`]
642
- - `formatStatusDuration(...)`: render `M:SS` durations [`src/core/extension-status.ts`]
616
+ - `formatContextUsageBar(...)`: render the 10-cell context bar or threshold-specific overlay [`src/core/extension-status.ts`]
617
+ - `formatElapsedStatusValue(...)`: compose `⏱︎`, `⚑`, and `⌛︎` timer segments [`src/core/extension-status.ts`]
618
+ - `formatCompletedStatusDuration(...)`: render completed timers or the unset placeholder [`src/core/extension-status.ts`]
619
+ - `formatStatusDuration(...)`: render `M:SS` durations [`src/core/extension-status.ts`]
643
620
  - `formatPiNotifyBeepStatus(...)`: serialize enabled beep flags for the footer [`src/core/pi-notify.ts`]
644
621
  - `configureStaticCheckMenu(...)`: interactive static-check editor [`src/index.ts`]
645
622
  - `configurePiUsereqToolsMenu(...)`: interactive active-tool editor [`src/index.ts`]
@@ -754,7 +731,7 @@
754
731
  - `ensureBundledResourcesAccessible(...)`: validate installation-owned bundled resources [`src/core/resources.ts`]
755
732
  - `getBundledResourceRoot(...)`: resolve installation-owned resource root [`src/core/resources.ts`]
756
733
  - `getInstallationPath(...)`: resolve the installed extension root from the executing module [`src/core/path-context.ts`]
757
- - `registerPromptCommands(...)`: register one command per prompt name [`src/index.ts`]
734
+ - `registerPromptCommands(...)`: register one command per prompt name and cache prompt metadata for later successful-completion notifications [`src/index.ts`]
758
735
  - `ensureBundledResourcesAccessible(...)`: validate installation-owned bundled resources before prompt render [`src/core/resources.ts`]
759
736
  - `getBundledResourceRoot(...)`: resolve installation-owned resource root [`src/core/resources.ts`]
760
737
  - `getInstallationPath(...)`: resolve the installed extension root from the executing module [`src/core/path-context.ts`]
@@ -786,6 +763,7 @@
786
763
  - `buildPiDevConformanceBlock(...)`: resolve manifest-gated pi.dev review and API-compliance rules [`src/core/prompts.ts`]
787
764
  - `adaptPromptForInternalTools(...)`: rewrite tool names for internal wrappers [`src/core/prompts.ts`]
788
765
  - `deliverPromptCommand(...)`: dispatch the rendered prompt into the current active session [`src/index.ts`]
766
+ - `statusController.state.pendingPromptRequest`: cache the prompt command name and raw `%%ARGS%%` payload for the next successful completion [`src/core/extension-status.ts`]
789
767
  - External boundaries: `pi.sendUserMessage(...)` delivers the rendered prompt payload.
790
768
  - `registerAgentTools(...)`: register structured pi tools whose execute callbacks reuse internal runner families and agent-oriented payload builders [`src/index.ts`]
791
769
  - `ensureBundledResourcesAccessible(...)`: validate installation-owned bundled resources for tool executes that need bundled assets [`src/core/resources.ts`]
@@ -911,20 +889,23 @@
911
889
  - `normalizeEnabledPiUsereqTools(...)`: canonicalize configurable active tools [`src/core/pi-usereq-tools.ts`]
912
890
  - `getPiUsereqStartupTools(...)`: enumerate configurable tools from runtime inventory [`src/index.ts`]
913
891
  - `setPiUsereqStatusConfig(...)`: cache docs/tests/src and pi-notify values for later status renders [`src/core/extension-status.ts`]
914
- - `updateExtensionStatus(...)`: refresh stored context usage, timers, and rendered status text [`src/core/extension-status.ts`]
892
+ - `updateExtensionStatus(...)`: refresh stored context usage, elapsed timers, prompt-request state, cumulative runtime, and rendered status text [`src/core/extension-status.ts`]
915
893
  - `refreshContextUsage(...)`: sync the latest context-usage snapshot [`src/core/extension-status.ts`]
916
- - `syncPiUsereqStatusTicker(...)`: start or stop the live elapsed-time ticker [`src/core/extension-status.ts`]
917
- - `renderPiUsereqStatus(...)`: render the docs/tests/src/tools/context/elapsed/last/beep/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
894
+ - `syncPiUsereqStatusTicker(...)`: start or stop the live elapsed ticker [`src/core/extension-status.ts`]
895
+ - `renderPiUsereqStatus(...)`: render the base/context/elapsed/beep/sound/pushover footer with CLI-theme token overlays [`src/core/extension-status.ts`]
918
896
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
919
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with active-theme field and overlay semantics [`src/core/extension-status.ts`]
897
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with consolidated elapsed semantics plus the Pushover enable field [`src/core/extension-status.ts`]
920
898
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
921
899
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
922
- - `formatContextUsageBar(...)`: render the 5-cell context bar or threshold-specific overlay [`src/core/extension-status.ts`]
923
- - `resolveContextUsageOverlay(...)`: choose `CLEAR` or `FULL!` overlay states with CLI-supported theme tokens [`src/core/extension-status.ts`]
900
+ - `formatContextUsageBar(...)`: render the 10-cell context bar or threshold-specific overlay [`src/core/extension-status.ts`]
901
+ - `resolveContextUsageOverlay(...)`: choose `◀ CLEAR ▶ ` or ` ◀ FULL ▶ ` overlay states with CLI-supported theme tokens [`src/core/extension-status.ts`]
924
902
  - `formatContextUsageOverlay(...)`: paint the fixed-width overlay with preserved bar background [`src/core/extension-status.ts`]
925
- - `formatStatusDuration(...)`: render `M:SS` durations [`src/core/extension-status.ts`]
903
+ - `formatElapsedStatusValue(...)`: compose `⏱︎`, `⚑`, and `⌛︎` timer segments [`src/core/extension-status.ts`]
904
+ - `formatCompletedStatusDuration(...)`: render completed timers or the unset placeholder [`src/core/extension-status.ts`]
905
+ - `formatStatusDuration(...)`: render `M:SS` durations [`src/core/extension-status.ts`]
926
906
  - `formatPiNotifyBeepStatus(...)`: serialize enabled beep flags for the footer [`src/core/pi-notify.ts`]
927
- - `runPiNotifyEffects(...)`: dispatch configured terminal beeps and successful-run sound hooks on `agent_end` [`src/core/pi-notify.ts`]
907
+ - `formatPiNotifyPushoverStatus(...)`: serialize the dedicated Pushover enable flag for the footer [`src/core/pi-notify.ts`]
908
+ - `runPiNotifyEffects(...)`: dispatch configured terminal beeps, successful-run sound hooks, and optional Pushover API requests on `agent_end` [`src/core/pi-notify.ts`]
928
909
  - `classifyPiNotifyOutcome(...)`: map assistant stop reasons to `end`, `esc`, or `err` [`src/core/pi-notify.ts`]
929
910
  - `hasAgentEndStopReason(...)`: scan assistant stop reasons inside the `agent_end` payload [`src/core/pi-notify.ts`]
930
911
  - `buildPiNotifyTitle(...)`: build the stable pi-notify title [`src/core/pi-notify.ts`]
@@ -939,6 +920,10 @@
939
920
  - `substitutePiNotifyInstallPath(...)`: replace `%%INSTALLATION_PATH%%` before shell execution [`src/core/pi-notify.ts`]
940
921
  - `quotePiNotifyInstallPath(...)`: quote the installation path for shell reuse [`src/core/pi-notify.ts`]
941
922
  - `getInstallationPath(...)`: resolve the installed extension root [`src/core/path-context.ts`]
923
+ - `runPiNotifyPushoverRequest(...)`: POST the successful prompt payload to the Pushover Message API when credentials and flags permit delivery [`src/core/pi-notify.ts`]
924
+ - `buildPiNotifyPushoverPayload(...)`: serialize token, user, title, priority, and message fields [`src/core/pi-notify.ts`]
925
+ - `buildPiNotifyPushoverTitle(...)`: compose `<prompt> @ <base-path> [<time>]` for successful completion [`src/core/pi-notify.ts`]
926
+ - `buildPiNotifyPushoverBody(...)`: reuse the raw prompt argument payload [`src/core/pi-notify.ts`]
942
927
  - `configurePiUsereq(...)`: interactive configuration menu runtime root [`src/index.ts`]
943
928
  - `loadProjectConfig(...)`: load config and normalize persisted directory paths for command context [`src/index.ts`]
944
929
  - `getProjectBase(...)`: resolve project base from command context cwd [`src/index.ts`]
@@ -951,24 +936,29 @@
951
936
  - `resolveGitRoot(...)`: resolve repository root [`src/core/tool-runner.ts`]
952
937
  - `runCapture(...)`: run git subprocess [`src/core/tool-runner.ts`]
953
938
  - `getProjectBase(...)`: resolve project base from command context cwd [`src/index.ts`]
939
+ - `buildPiUsereqMenuChoices(...)`: serialize top-level settings actions plus the display-only config-path row [`src/index.ts`]
940
+ - `formatProjectConfigPathForMenu(...)`: format the current config path relative to the user home when possible [`src/index.ts`]
954
941
  - `showPiUsereqSettingsMenu(...)`: render the shared settings-menu UI for top-level and submenu actions [`src/core/settings-menu.ts`]
955
942
  - `formatPiUsereqSettingsMenuTitle(...)`: rebuild the menu title with active-theme semantics [`src/core/settings-menu.ts`]
956
943
  - `buildPiUsereqSettingsListTheme(...)`: prefer shared CLI settings-list theming and fall back during offline replay [`src/core/settings-menu.ts`]
957
944
  - `buildFallbackPiUsereqSettingsListTheme(...)`: mirror CLI settings-list token roles from the callback-local theme [`src/core/settings-menu.ts`]
945
+ - `buildSettingItems(...)`: map menu choices into settings-list rows and apply optional dim value tones [`src/core/settings-menu.ts`]
958
946
  - `saveProjectConfig(...)`: persist config on save-and-close [`src/index.ts`]
959
947
  - `getProjectBase(...)`: resolve project base from command context cwd [`src/index.ts`]
960
948
  - `saveConfig(...)`: persist config JSON [`src/core/config.ts`]
961
949
  - `getProjectConfigPath(...)`: resolve config file path [`src/core/config.ts`]
962
950
  - `setPiUsereqStatusConfig(...)`: cache the just-saved docs/tests/src and pi-notify values for status rendering [`src/core/extension-status.ts`]
963
- - `renderPiUsereqStatus(...)`: render the git/base/docs/tests/src/tools/context/elapsed/last/beep/sound footer after save-and-close with CLI-theme token overlays [`src/core/extension-status.ts`]
951
+ - `renderPiUsereqStatus(...)`: render the base/context/elapsed/beep/sound/pushover footer after save-and-close with CLI-theme token overlays [`src/core/extension-status.ts`]
964
952
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
965
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with active-theme field and overlay semantics [`src/core/extension-status.ts`]
953
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with consolidated elapsed semantics plus the Pushover enable field [`src/core/extension-status.ts`]
966
954
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
967
955
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
968
- - `formatContextUsageBar(...)`: render the 5-cell context bar or threshold-specific overlay [`src/core/extension-status.ts`]
969
- - `resolveContextUsageOverlay(...)`: choose `CLEAR` or `FULL!` overlay states with CLI-supported theme tokens [`src/core/extension-status.ts`]
956
+ - `formatContextUsageBar(...)`: render the 10-cell context bar or threshold-specific overlay [`src/core/extension-status.ts`]
957
+ - `resolveContextUsageOverlay(...)`: choose `◀ CLEAR ▶ ` or ` ◀ FULL ▶ ` overlay states with CLI-supported theme tokens [`src/core/extension-status.ts`]
970
958
  - `formatContextUsageOverlay(...)`: paint the fixed-width overlay with preserved bar background [`src/core/extension-status.ts`]
971
- - `formatStatusDuration(...)`: render `M:SS` durations [`src/core/extension-status.ts`]
959
+ - `formatElapsedStatusValue(...)`: compose `⏱︎`, `⚑`, and `⌛︎` timer segments [`src/core/extension-status.ts`]
960
+ - `formatCompletedStatusDuration(...)`: render completed timers or the unset placeholder [`src/core/extension-status.ts`]
961
+ - `formatStatusDuration(...)`: render `M:SS` durations [`src/core/extension-status.ts`]
972
962
  - `formatPiNotifyBeepStatus(...)`: serialize enabled beep flags for the footer [`src/core/pi-notify.ts`]
973
963
  - `configureStaticCheckMenu(...)`: interactive static-check editor [`src/index.ts`]
974
964
  - `formatStaticCheckLanguagesSummary(...)`: summarize configured checker languages [`src/index.ts`]
@@ -979,9 +969,9 @@
979
969
  - `getSupportedStaticCheckLanguages(...)`: enumerate canonical supported languages [`src/core/static-check.ts`]
980
970
  - `buildSupportedStaticCheckLanguageChoices(...)`: serialize supported languages with configured counts [`src/index.ts`]
981
971
  - `shellSplit(...)`: parse optional parameter input [`src/core/utils.ts`]
982
- - `parseEnableStaticCheck(...)`: parse `LANG=MODULE[,CMD[,PARAM...]]` specification [`src/core/static-check.ts`]
972
+ - `parseEnableStaticCheck(...)`: parse `LANG=Command,CMD[,PARAM...]` specification [`src/core/static-check.ts`]
983
973
  - `splitCsvLikeTokens(...)`: split comma-like spec payload with quoting support [`src/core/static-check.ts`]
984
- - `formatStaticCheckModules(...)`: render valid module names for error paths [`src/core/static-check.ts`]
974
+ - `formatStaticCheckModules(...)`: render valid user modules for error paths [`src/core/static-check.ts`]
985
975
  - `configurePiUsereqToolsMenu(...)`: interactive active-tool editor [`src/index.ts`]
986
976
  - `applyConfiguredPiUsereqTools(...)`: enforce configured active-tool set [`src/index.ts`]
987
977
  - `getConfiguredEnabledPiUsereqTools(...)`: canonicalize configured enabled tools [`src/index.ts`]
@@ -1001,8 +991,11 @@
1001
991
  - `buildPiUsereqToolToggleChoices(...)`: serialize per-tool startup-toggle rows [`src/index.ts`]
1002
992
  - `getPiUsereqToolKind(...)`: classify builtin versus extension tools for UI rendering [`src/index.ts`]
1003
993
  - `configurePiNotifyMenu(...)`: interactive pi-notify editor [`src/index.ts`]
1004
- - `buildPiNotifyMenuChoices(...)`: serialize notification actions for the shared settings menu [`src/index.ts`]
994
+ - `buildPiNotifyMenuChoices(...)`: serialize notification actions plus the nested Pushover submenu entry for the shared settings menu [`src/index.ts`]
1005
995
  - `togglePiNotifyBeepFlag(...)`: toggle one prompt-end beep flag [`src/index.ts`]
996
+ - `configurePiNotifyPushoverMenu(...)`: interactive Pushover editor nested under the notifications menu [`src/index.ts`]
997
+ - `buildPiNotifyPushoverMenuChoices(...)`: serialize Pushover global-disable, enable, credential, and priority actions [`src/index.ts`]
998
+ - `selectPiNotifyPushoverPriority(...)`: present the `0=Normal` and `1=High Priority` selector [`src/index.ts`]
1006
999
  - `getDefaultConfig(...)`: restore default config on reset [`src/core/config.ts`]
1007
1000
  - `normalizeEnabledPiUsereqTools(...)`: canonicalize configurable active tools [`src/core/pi-usereq-tools.ts`]
1008
1001
  - `applyConfiguredPiUsereqTools(...)`: re-apply active tools after reset [`src/index.ts`]