pi-usereq 0.33.0 → 0.35.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.
@@ -177,7 +177,7 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
177
177
  - **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.
178
178
  - **REQ-118**: MUST obtain latest context-usage facts from `ctx.getContextUsage()` or an equivalent runtime API and store them in extension session state.
179
179
  - **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.
180
- - **REQ-120**: MUST render single-line status fields in this order: `status`, `branch`, `context`, `elapsed`, `sound`.
180
+ - **REQ-120**: MUST render single-line status fields in this order: `<extension>:v<version>`, `status`, `branch`, `context`, `elapsed`, `sound`, deriving `<extension>` and `<version>` from runtime extension package metadata.
181
181
  - **REQ-121**: MUST render `branch` immediately after `status` with separator ` • ` and the active git branch name.
182
182
  - **REQ-283**: MUST resolve `branch` from the current `context-path` git HEAD during every status-bar rebuild so worktree switches and base-path restoration update immediately.
183
183
  - **REQ-284**: MUST render `context` immediately after `branch` with separator ` • ` and one fixed-width gauge icon.
@@ -383,11 +383,11 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
383
383
  - **REQ-152**: MUST render a persistent bottom-line description for the currently selected configuration entry.
384
384
  - **REQ-153**: MUST use scrollable configuration menus when entry count exceeds the visible row budget.
385
385
  - **REQ-154**: MUST wrap configuration-menu selection from last-to-first and first-to-last entries.
386
- - **REQ-321**: MUST render `Enable debug commands for tools` in `Debug` after `Log file` and before `Log on status`.
386
+ - **REQ-321**: MUST render `Enable debug commands for tools` in `Debug` after `Debug`, before `Log file`, and before `Log on status`.
387
387
  - **REQ-322**: MUST persist `DEBUG_TOOL_COMMANDS_ENABLED` through the `Debug` submenu with immediate-save, reset, and focus-preserving re-render behavior.
388
- - **REQ-323**: MUST register `debug-compress`, `debug-references`, `debug-static-check`, and `debug-tokens` only when `DEBUG_TOOL_COMMANDS_ENABLED=enable`.
389
- - **REQ-324**: MUST make `debug-compress`, `debug-references`, `debug-static-check`, and `debug-tokens` reuse the `compress`, `references`, `static-check`, and `tokens` runner outputs and write `content[0].text` to the editor.
390
- - **REQ-325**: MUST reject `debug-compress`, `debug-references`, `debug-static-check`, and `debug-tokens` execution when `DEBUG_TOOL_COMMANDS_ENABLED=disable`.
388
+ - **REQ-323**: MUST register `debug-compress`, `debug-references`, `debug-static-check`, `debug-summarize`, and `debug-tokens` only when `DEBUG_TOOL_COMMANDS_ENABLED=enable`.
389
+ - **REQ-324**: MUST make `debug-compress`, `debug-references`, `debug-static-check`, `debug-summarize`, and `debug-tokens` reuse the `compress`, `references`, `static-check`, `summarize`, and `tokens` runner outputs and write `content[0].text` to the editor.
390
+ - **REQ-325**: MUST reject `debug-compress`, `debug-references`, `debug-static-check`, `debug-summarize`, and `debug-tokens` execution when `DEBUG_TOOL_COMMANDS_ENABLED=disable`.
391
391
 
392
392
  ## 4. Test Requirements
393
393
  - **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.
@@ -404,9 +404,9 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
404
404
  - **TST-112**: MUST verify `--enable-static-check` stores checker commands in global configuration and preserves local enablement according to the documented defaulting rules.
405
405
  - **TST-079**: MUST verify `files-static-check` and `static-check` execute zero checkers and expose empty configured-checker lists when the target language `enabled=disable`.
406
406
  - **TST-006**: MUST verify `session_start` activates configured startup tools, resets workflow state to `idle` for `startup|new|reload`, and updates the single-line `pi-usereq` status bar.
407
- - **TST-031**: MUST verify the status bar renders `status` before `branch`, omits `current-path`, `base`, `docs`, `src`, `tests`, `git`, and `tools`, and preserves documented field-value theme separation.
407
+ - **TST-031**: MUST verify the status bar renders runtime `<extension>:v<version>` before `status`, omits `current-path`, `base`, `docs`, `src`, `tests`, `git`, and `tools`, and preserves documented field-value theme separation.
408
408
  - **TST-032**: MUST verify extension registration installs wrappers for all documented lifecycle hooks and routes replayed hook payloads through `updateExtensionStatus`.
409
- - **TST-033**: MUST verify the status bar renders ordered `status`, `branch`, `context`, `elapsed`, and `sound` fields plus the documented icon-based `context` gauge thresholds.
409
+ - **TST-033**: MUST verify the status bar renders ordered `<extension>:v<version>`, `status`, `branch`, `context`, `elapsed`, and `sound` plus the documented icon-based `context` gauge thresholds.
410
410
  - **TST-037**: MUST verify the `Notifications` menu persists notification and boot-sound settings only in global configuration through `Notification events` and `Sound events` submenus using the documented labels and order.
411
411
  - **TST-038**: MUST verify the sound-toggle shortcut cycles only the active runtime sound level, leaves local and global configuration unchanged, and refreshes the status bar with the updated `sound` field.
412
412
  - **TST-097**: MUST verify `session_start` loads the active runtime sound level from persisted `notify-sound`.
@@ -414,7 +414,7 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
414
414
  - **TST-047**: MUST verify the `Notifications` menu exposes `Pushover events` before direct Pushover settings, keeps `Enable pushover` dimmed and locked until both credential fields are non-empty, and persists Pushover event and credential values only in global configuration.
415
415
  - **TST-072**: MUST verify `Pushover text` displays escaped control sequences in menus and decodes the documented escape sequences from input before persistence.
416
416
  - **TST-048**: MUST verify native Pushover requests honor global enable, completed/interrupted/failed Pushover toggles, credentials, priority, title, and text placeholder substitution including `%%RESULT%%` for enabled prompt-end outcomes.
417
- - **TST-049**: MUST verify the status bar renders ordered `status`, `branch`, `context`, `elapsed`, and `sound` fields and appends `sound:<level>`.
417
+ - **TST-049**: MUST verify the status bar renders ordered `<extension>:v<version>`, `status`, `branch`, `context`, `elapsed`, and `sound` fields and appends `sound:<level>`.
418
418
  - **TST-050**: MUST verify `PI_NOTIFY_CMD` placeholder substitution including `%%RESULT%%` and routing honor global notify enable plus completed/interrupted/failed notify toggles.
419
419
  - **TST-034**: MUST verify `ctx.getContextUsage()` snapshots refresh status updates and `elapsed` preserves `⚑` plus `⌛︎` across escape-triggered cancellation.
420
420
  - **TST-062**: MUST verify `Show local configuration` saves pending local and global config, closes the active configuration menu tree, and writes persisted `<base-path>/.pi-usereq.json` text into the editor.
@@ -461,7 +461,7 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
461
461
  - **TST-027**: MUST verify harness inspection surfaces `files-compress` and `compress` descriptions covering parameters, line-number behavior, monolithic markdown output, and failure details.
462
462
  - **TST-028**: MUST verify `files-static-check` and `static-check` agent-tool outputs place the monolithic static-check report in `content[0].text` and restrict `details` to execution metadata.
463
463
  - **TST-029**: MUST verify harness inspection surfaces `files-static-check` and `static-check` descriptions covering parameters, monolithic output, selection rules, and failure details.
464
- - **TST-039**: MUST verify `.github/workflows/release-npm.yml` keeps the existing tag filter, gates downstream release work on `origin/master`, uses Node.js `24.15.0`, runs npm publication, and creates the GitHub Release from generated changelog text.
464
+ - **TST-039**: MUST verify `.github/workflows/release-npm.yml` parses as YAML when `PyYAML` is available, keeps the existing tag filter, gates downstream release work on `origin/master`, uses Node.js `24.15.0`, runs npm publication, and creates the GitHub Release.
465
465
  - **TST-042**: MUST verify `package.json` keeps `name` equal to `pi-usereq` so npm publication resolves to `https://www.npmjs.com/package/pi-usereq`.
466
466
  - **TST-044**: MUST verify `package.json` keeps npm provenance metadata aligned to the canonical GitHub repository, issues URL, and README homepage.
467
467
  - **TST-040**: MUST verify local and global configuration files omit derived static and dynamic path fields while runtime path context and status rendering still derive them correctly.
@@ -500,10 +500,10 @@ PI-useReq is a TypeScript pi extension plus companion Node CLI and standalone ex
500
500
  - **TST-066**: MUST verify `req-<prompt>` commands keep working when extension custom-tool registrations are removed from the runtime inventory.
501
501
  - **TST-059**: MUST verify every agent-tool registration defines custom `renderResult` and that compact rendering shows essential invocation parameters while expanded rendering avoids fallback raw-content display.
502
502
  - **TST-086**: MUST verify bundled prompt-backed `req-<prompt>` commands abort before prompt dispatch when the persisted execution-session header cwd or `process.cwd()` differs from the expected execution path, and abort before merge when persisted execution-session header metadata or verified worktree artifacts diverge, while stale pre-switch context probes alone do not abort.
503
- - **TST-113**: MUST verify default local configuration persists `DEBUG_TOOL_COMMANDS_ENABLED=disable`, and the `Debug` submenu renders `Enable debug commands for tools` before `Log on status`.
503
+ - **TST-113**: MUST verify default local configuration persists `DEBUG_TOOL_COMMANDS_ENABLED=disable`, and the `Debug` submenu renders `Enable debug commands for tools` before `Log file`.
504
504
  - **TST-114**: MUST verify the `Debug` submenu persists `DEBUG_TOOL_COMMANDS_ENABLED` through immediate-save, reset, and focus-preserving re-render flows.
505
- - **TST-115**: MUST verify extension activation registers `debug-compress`, `debug-references`, `debug-static-check`, and `debug-tokens` only when `DEBUG_TOOL_COMMANDS_ENABLED=enable`.
506
- - **TST-116**: MUST verify `debug-compress`, `debug-references`, `debug-static-check`, and `debug-tokens` write the same `content[0].text` as `compress`, `references`, `static-check`, and `tokens`, and reject execution when disabled.
505
+ - **TST-115**: MUST verify extension activation registers `debug-compress`, `debug-references`, `debug-static-check`, `debug-summarize`, and `debug-tokens` only when `DEBUG_TOOL_COMMANDS_ENABLED=enable`.
506
+ - **TST-116**: MUST verify `debug-compress`, `debug-references`, `debug-static-check`, `debug-summarize`, and `debug-tokens` write the same `content[0].text` as `compress`, `references`, `static-check`, `summarize`, and `tokens`, and reject execution when disabled.
507
507
 
508
508
  ## 5. Observed Component Model
509
509
 
@@ -503,14 +503,16 @@
503
503
  - `shouldResetWorkflowStateOnSessionStart(...)`: detect `startup|new|reload` workflow-reset boundaries [`src/core/extension-status.ts`]
504
504
  - `persistElapsedState(...)`: mirror completed timers into process-scoped persistence [`src/core/extension-status.ts`]
505
505
  - `syncPiUsereqStatusTicker(...)`: start or stop the live elapsed ticker [`src/core/extension-status.ts`]
506
- - `renderPiUsereqStatus(...)`: refresh live context usage and render the status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
506
+ - `renderPiUsereqStatus(...)`: refresh live context usage and render the extension/status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
507
507
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
508
508
  - `resolveStatusBranchValue(...)`: resolve the active git branch from the current context cwd before footer rendering [`src/core/extension-status.ts`]
509
509
  - `resolveRuntimeGitBranchName(...)`: resolve the active git branch for the current execution path [`src/core/runtime-project-paths.ts`]
510
510
  - `resolveRuntimeGitPath(...)`: resolve the runtime git root for the active execution path [`src/core/runtime-project-paths.ts`]
511
511
  - `isInsideGitRepo(...)`: test git work-tree membership [`src/core/runtime-project-paths.ts`]
512
512
  - `resolveGitRoot(...)`: resolve repository root [`src/core/runtime-project-paths.ts`]
513
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
513
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with runtime extension identity, workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
514
+ - `formatExtensionIdentityStatusField(...)`: render the runtime extension name and version prefix using standard non-error status tokens [`src/core/extension-status.ts`]
515
+ - `getInstallationPackageMetadata(...)`: resolve cached runtime package name and version [`src/core/path-context.ts`]
514
516
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
515
517
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
516
518
  - `formatWorkflowStateValue(...)`: render the workflow-state value with error highlighting when required [`src/core/extension-status.ts`]
@@ -587,14 +589,16 @@
587
589
  - `getSettingsListSelectedIndex(...)`: expose the focused row for the offline bridge after inline toggle handling [`src/core/settings-menu.ts`]
588
590
  - `saveProjectConfig(...)`: persist split local/global menu updates [`src/index.ts`]
589
591
  - `setPiUsereqStatusConfig(...)`: cache the saved config for footer rendering [`src/core/extension-status.ts`]
590
- - `renderPiUsereqStatus(...)`: refresh live context usage and render the status/branch/context/elapsed/sound footer after save-and-close with CLI-theme token overlays [`src/core/extension-status.ts`]
592
+ - `renderPiUsereqStatus(...)`: refresh live context usage and render the extension/status/branch/context/elapsed/sound footer after save-and-close with CLI-theme token overlays [`src/core/extension-status.ts`]
591
593
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
592
594
  - `resolveStatusBranchValue(...)`: resolve the active git branch from the current context cwd before footer rendering [`src/core/extension-status.ts`]
593
595
  - `resolveRuntimeGitBranchName(...)`: resolve the active git branch for the current execution path [`src/core/runtime-project-paths.ts`]
594
596
  - `resolveRuntimeGitPath(...)`: resolve the runtime git root for the active execution path [`src/core/runtime-project-paths.ts`]
595
597
  - `isInsideGitRepo(...)`: test git work-tree membership [`src/core/runtime-project-paths.ts`]
596
598
  - `resolveGitRoot(...)`: resolve repository root [`src/core/runtime-project-paths.ts`]
597
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with workflow state, branch, context gauge, consolidated elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
599
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with runtime extension identity, workflow state, branch, context gauge, consolidated elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
600
+ - `formatExtensionIdentityStatusField(...)`: render the runtime extension name and version prefix using standard non-error status tokens [`src/core/extension-status.ts`]
601
+ - `getInstallationPackageMetadata(...)`: resolve cached runtime package name and version [`src/core/path-context.ts`]
598
602
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
599
603
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
600
604
  - `formatContextUsageBar(...)`: render the icon-based context gauge with the non-error status value token below 90 percent and `error` at or above 90 percent [`src/core/extension-status.ts`]
@@ -705,14 +709,16 @@
705
709
  - `normalizeEnabledPiUsereqTools(...)`: canonicalize startup tools [`src/core/pi-usereq-tools.ts`]
706
710
  - `setPiUsereqStatusConfig(...)`: cache docs/tests/src and pi-notify values for status rendering [`src/core/extension-status.ts`]
707
711
  - `setPiUsereqWorkflowState(...)`: update workflow state directly for running, idle, or error during `req-reset` execution [`src/core/extension-status.ts`]
708
- - `renderPiUsereqStatus(...)`: refresh live context usage and render the status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
712
+ - `renderPiUsereqStatus(...)`: refresh live context usage and render the extension/status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
709
713
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
710
714
  - `resolveStatusBranchValue(...)`: resolve the active git branch from the current context cwd before footer rendering [`src/core/extension-status.ts`]
711
715
  - `resolveRuntimeGitBranchName(...)`: resolve the active git branch for the current execution path [`src/core/runtime-project-paths.ts`]
712
716
  - `resolveRuntimeGitPath(...)`: resolve the runtime git root for the active execution path [`src/core/runtime-project-paths.ts`]
713
717
  - `isInsideGitRepo(...)`: test git work-tree membership [`src/core/runtime-project-paths.ts`]
714
718
  - `resolveGitRoot(...)`: resolve repository root [`src/core/runtime-project-paths.ts`]
715
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
719
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with runtime extension identity, workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
720
+ - `formatExtensionIdentityStatusField(...)`: render the runtime extension name and version prefix using standard non-error status tokens [`src/core/extension-status.ts`]
721
+ - `getInstallationPackageMetadata(...)`: resolve cached runtime package name and version [`src/core/path-context.ts`]
716
722
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
717
723
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
718
724
  - `formatWorkflowStateValue(...)`: render the workflow-state value with error highlighting when required [`src/core/extension-status.ts`]
@@ -749,14 +755,16 @@
749
755
  - `normalizeEnabledPiUsereqTools(...)`: canonicalize startup tools [`src/core/pi-usereq-tools.ts`]
750
756
  - `setPiUsereqStatusConfig(...)`: cache docs/tests/src and pi-notify values for status rendering [`src/core/extension-status.ts`]
751
757
  - `setPiUsereqWorkflowState(...)`: update workflow state directly for checking, running, idle, or error during `req-references` execution [`src/core/extension-status.ts`]
752
- - `renderPiUsereqStatus(...)`: refresh live context usage and render the status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
758
+ - `renderPiUsereqStatus(...)`: refresh live context usage and render the extension/status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
753
759
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
754
760
  - `resolveStatusBranchValue(...)`: resolve the active git branch from the current context cwd before footer rendering [`src/core/extension-status.ts`]
755
761
  - `resolveRuntimeGitBranchName(...)`: resolve the active git branch for the current execution path [`src/core/runtime-project-paths.ts`]
756
762
  - `resolveRuntimeGitPath(...)`: resolve the runtime git root for the active execution path [`src/core/runtime-project-paths.ts`]
757
763
  - `isInsideGitRepo(...)`: test git work-tree membership [`src/core/runtime-project-paths.ts`]
758
764
  - `resolveGitRoot(...)`: resolve repository root [`src/core/runtime-project-paths.ts`]
759
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
765
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with runtime extension identity, workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
766
+ - `formatExtensionIdentityStatusField(...)`: render the runtime extension name and version prefix using standard non-error status tokens [`src/core/extension-status.ts`]
767
+ - `getInstallationPackageMetadata(...)`: resolve cached runtime package name and version [`src/core/path-context.ts`]
760
768
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
761
769
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
762
770
  - `formatWorkflowStateValue(...)`: render the workflow-state value with error highlighting when required [`src/core/extension-status.ts`]
@@ -782,14 +790,16 @@
782
790
  - `transitionPromptWorkflowState(...)`: update workflow state and append gated `workflow_state` debug entries only after the transition completes [`src/index.ts`]
783
791
  - `setPiUsereqWorkflowState(...)`: update workflow state before prompt preflight, prompt handoff, or command-side failure [`src/core/extension-status.ts`]
784
792
  - `logPromptWorkflowStateChange(...)`: append selected prompt workflow-transition debug entries [`src/index.ts`]
785
- - `renderPiUsereqStatus(...)`: refresh live context usage and render the status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
793
+ - `renderPiUsereqStatus(...)`: refresh live context usage and render the extension/status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
786
794
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
787
795
  - `resolveStatusBranchValue(...)`: resolve the active git branch from the current context cwd before footer rendering [`src/core/extension-status.ts`]
788
796
  - `resolveRuntimeGitBranchName(...)`: resolve the active git branch for the current execution path [`src/core/runtime-project-paths.ts`]
789
797
  - `resolveRuntimeGitPath(...)`: resolve the runtime git root for the active execution path [`src/core/runtime-project-paths.ts`]
790
798
  - `isInsideGitRepo(...)`: test git work-tree membership [`src/core/runtime-project-paths.ts`]
791
799
  - `resolveGitRoot(...)`: resolve repository root [`src/core/runtime-project-paths.ts`]
792
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
800
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with runtime extension identity, workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
801
+ - `formatExtensionIdentityStatusField(...)`: render the runtime extension name and version prefix using standard non-error status tokens [`src/core/extension-status.ts`]
802
+ - `getInstallationPackageMetadata(...)`: resolve cached runtime package name and version [`src/core/path-context.ts`]
793
803
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
794
804
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
795
805
  - `formatWorkflowStateValue(...)`: render the workflow-state value with error highlighting when required [`src/core/extension-status.ts`]
@@ -888,7 +898,7 @@
888
898
  - `getProjectConfigPath(...)`: resolve config file path [`src/core/config.ts`]
889
899
  - `getDefaultConfig(...)`: build default config [`src/core/config.ts`]
890
900
  - `normalizeEnabledPiUsereqTools(...)`: canonicalize startup tools [`src/core/pi-usereq-tools.ts`]
891
- - `registerDebugToolCommands(...)`: register config-gated debug slash-command wrappers for `compress`, `references`, `static-check`, and `tokens` [`src/index.ts`]
901
+ - `registerDebugToolCommands(...)`: register config-gated debug slash-command wrappers for `compress`, `references`, `static-check`, `summarize`, and `tokens` [`src/index.ts`]
892
902
  - `registerAgentTools(...)`: register structured pi tools whose execute callbacks reuse internal runner families, the status-only references writer, token-optimized payload builders, and compact-plus-expanded custom result renderers [`src/index.ts`]
893
903
  - `ensureBundledResourcesAccessible(...)`: validate installation-owned bundled resources for tool executes that need bundled assets [`src/core/resources.ts`]
894
904
  - `getBundledResourceRoot(...)`: resolve installation-owned resource root [`src/core/resources.ts`]
@@ -994,14 +1004,16 @@
994
1004
  - `persistPromptCommandState(...)`: mirror workflow state plus pending or active prompt execution plans into process-scoped persistence [`src/core/extension-status.ts`]
995
1005
  - `writePersistedPromptCommandRuntimeState(...)`: store workflow state plus pending or active prompt execution plans on `globalThis` [`src/core/prompt-command-state.ts`]
996
1006
  - `syncPiUsereqStatusTicker(...)`: start or stop the live elapsed ticker [`src/core/extension-status.ts`]
997
- - `renderPiUsereqStatus(...)`: refresh live context usage and render the status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
1007
+ - `renderPiUsereqStatus(...)`: refresh live context usage and render the extension/status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
998
1008
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
999
1009
  - `resolveStatusBranchValue(...)`: resolve the active git branch from the current context cwd before footer rendering [`src/core/extension-status.ts`]
1000
1010
  - `resolveRuntimeGitBranchName(...)`: resolve the active git branch for the current execution path [`src/core/runtime-project-paths.ts`]
1001
1011
  - `resolveRuntimeGitPath(...)`: resolve the runtime git root for the active execution path [`src/core/runtime-project-paths.ts`]
1002
1012
  - `isInsideGitRepo(...)`: test git work-tree membership [`src/core/runtime-project-paths.ts`]
1003
1013
  - `resolveGitRoot(...)`: resolve repository root [`src/core/runtime-project-paths.ts`]
1004
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
1014
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with runtime extension identity, workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
1015
+ - `formatExtensionIdentityStatusField(...)`: render the runtime extension name and version prefix using standard non-error status tokens [`src/core/extension-status.ts`]
1016
+ - `getInstallationPackageMetadata(...)`: resolve cached runtime package name and version [`src/core/path-context.ts`]
1005
1017
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
1006
1018
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
1007
1019
  - `formatWorkflowStateValue(...)`: render the workflow-state value with error highlighting when required [`src/core/extension-status.ts`]
@@ -1054,7 +1066,7 @@
1054
1066
  - `logPromptWorkflowEvent(...)`: append selected workflow-closure and workflow-session-shutdown debug entries [`src/index.ts`]
1055
1067
  - `transitionPromptWorkflowState(...)`: transition workflow state for matched-success merge handling and final idle restoration, and append gated workflow-state debug entries immediately after each transition [`src/index.ts`]
1056
1068
  - `setPiUsereqWorkflowState(...)`: transition workflow state for matched-success merge handling and final idle restoration [`src/core/extension-status.ts`]
1057
- - `renderPiUsereqStatus(...)`: refresh live context usage and render the status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
1069
+ - `renderPiUsereqStatus(...)`: refresh live context usage and render the extension/status/branch/context/elapsed/sound footer with CLI-theme token overlays [`src/core/extension-status.ts`]
1058
1070
  - `logPromptWorkflowStateChange(...)`: append selected prompt workflow-transition debug entries [`src/index.ts`]
1059
1071
  - `finalizePromptCommandExecution(...)`: verify persisted execution-session header metadata plus live worktree artifacts, synchronize the successful execution transcript into the restored base session, restore the original session-backed base path through the persisted replacement-session context when lifecycle hooks omit `switchSession()`, execute the matched successful stash-assisted `base-path` merge sequence, delete the worktree and branch after merge success, and carry a warning-only closure result when restored `base-path` changes are reapplied [`src/core/prompt-command-runtime.ts`]
1060
1072
  - `verifyPromptCommandClosureArtifacts(...)`: verify execution-session header cwd, worktree registration, branch presence, and worktree-path existence without requiring worktree-session reactivation after prompt end [`src/core/prompt-command-runtime.ts`]
@@ -1141,14 +1153,16 @@
1141
1153
  - `writePersistedGlobalConfigToEditor(...)`: read the already-persisted global config file and write its exact text into the editor [`src/index.ts`]
1142
1154
  - `getGlobalConfigPath(...)`: resolve the persisted global config path [`src/core/config.ts`]
1143
1155
  - `setPiUsereqStatusConfig(...)`: cache the just-saved docs/tests/src and pi-notify values for status rendering [`src/core/extension-status.ts`]
1144
- - `renderPiUsereqStatus(...)`: refresh live context usage and render the status/branch/context/elapsed/sound footer after save-and-close with CLI-theme token overlays [`src/core/extension-status.ts`]
1156
+ - `renderPiUsereqStatus(...)`: refresh live context usage and render the extension/status/branch/context/elapsed/sound footer after save-and-close with CLI-theme token overlays [`src/core/extension-status.ts`]
1145
1157
  - `createStatusThemeAdapter(...)`: constrain status rendering to CLI-supported `accent`, `warning`, `dim`, and `error` theme tokens [`src/core/extension-status.ts`]
1146
1158
  - `resolveStatusBranchValue(...)`: resolve the active git branch from the current context cwd before footer rendering [`src/core/extension-status.ts`]
1147
1159
  - `resolveRuntimeGitBranchName(...)`: resolve the active git branch for the current execution path [`src/core/runtime-project-paths.ts`]
1148
1160
  - `resolveRuntimeGitPath(...)`: resolve the runtime git root for the active execution path [`src/core/runtime-project-paths.ts`]
1149
1161
  - `isInsideGitRepo(...)`: test git work-tree membership [`src/core/runtime-project-paths.ts`]
1150
1162
  - `resolveGitRoot(...)`: resolve repository root [`src/core/runtime-project-paths.ts`]
1151
- - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
1163
+ - `buildPiUsereqStatusText(...)`: compose the single-line footer payload with runtime extension identity, workflow state, branch, context gauge, elapsed semantics, and the active runtime sound status field [`src/core/extension-status.ts`]
1164
+ - `formatExtensionIdentityStatusField(...)`: render the runtime extension name and version prefix using standard non-error status tokens [`src/core/extension-status.ts`]
1165
+ - `getInstallationPackageMetadata(...)`: resolve cached runtime package name and version [`src/core/path-context.ts`]
1152
1166
  - `formatStatusField(...)`: render one colored text field [`src/core/extension-status.ts`]
1153
1167
  - `formatRenderedStatusField(...)`: render one pre-styled field [`src/core/extension-status.ts`]
1154
1168
  - `formatWorkflowStateValue(...)`: render the workflow-state value with error highlighting when required [`src/core/extension-status.ts`]
@@ -1193,10 +1207,10 @@
1193
1207
  - `buildPiUsereqToolToggleChoices(...)`: serialize per-tool startup-toggle rows plus the value-less terminal reset action [`src/index.ts`]
1194
1208
  - `buildTerminalSettingsMenuChoices(...)`: append the canonical value-less `Reset defaults` row to the selector menu [`src/index.ts`]
1195
1209
  - `configureDebugMenu(...)`: interactive debug editor with in-place enable or disable toggles, tool-wrapper command registration, workflow filters, reset confirmation, and per-tool plus per-prompt selectors [`src/index.ts`]
1196
- - `buildDebugMenuChoices(...)`: serialize global debug controls, the `Enable debug commands for tools` row, workflow-event toggles, canonical tool and prompt toggles, and the value-less terminal reset row [`src/index.ts`]
1210
+ - `buildDebugMenuChoices(...)`: serialize global debug controls with `Enable debug commands for tools` before `Log file`, workflow-event toggles, canonical tool and prompt toggles, and the value-less terminal reset row [`src/index.ts`]
1197
1211
  - `buildDebugMenuChoice(...)`: dim and disable locked debug rows while global debug is off [`src/index.ts`]
1198
1212
  - `getDebugToolToggleNames(...)`: enumerate debuggable tool names in canonical grouped order [`src/index.ts`]
1199
- - `registerDebugToolCommands(...)`: register debug slash-command wrappers immediately when the tool-wrapper row transitions to `enable` [`src/index.ts`]
1213
+ - `registerDebugToolCommands(...)`: register debug slash-command wrappers including `debug-summarize` immediately when the tool-wrapper row transitions to `enable` [`src/index.ts`]
1200
1214
  - `selectDebugLogOnStatus(...)`: select one explicit workflow-state filter or `any` [`src/index.ts`]
1201
1215
  - `confirmResetChanges(...)`: require explicit approval before applying reset mutations [`src/index.ts`]
1202
1216
  - `resetDebugConfigToDefaults(...)`: restore the debug configuration subtree to documented defaults [`src/index.ts`]
@@ -20,6 +20,7 @@ import {
20
20
  restorePersistedPromptCommandRuntimeStateForSession,
21
21
  writePersistedPromptCommandRuntimeState,
22
22
  } from "./prompt-command-state.js";
23
+ import { getInstallationPackageMetadata } from "./path-context.js";
23
24
  import { resolveRuntimeGitBranchName } from "./runtime-project-paths.js";
24
25
 
25
26
  /**
@@ -565,9 +566,23 @@ function resolvePiUsereqRuntimeSoundLevel(
565
566
  return state.runtimeSoundLevel ?? config?.["notify-sound"] ?? "none";
566
567
  }
567
568
 
569
+ /**
570
+ * @brief Formats the runtime extension identity prefix for the status bar.
571
+ * @details Reads cached installation package metadata and renders the package name plus `v<version>` using the same accent-label and warning-value token split used by standard non-error status fields. Runtime is O(n) in rendered text length. No external state is mutated.
572
+ * @param[in] theme {StatusThemeAdapter} Normalized status theme.
573
+ * @return {string} Rendered extension identity prefix.
574
+ * @satisfies REQ-112, REQ-120
575
+ */
576
+ function formatExtensionIdentityStatusField(
577
+ theme: StatusThemeAdapter,
578
+ ): string {
579
+ const metadata = getInstallationPackageMetadata();
580
+ return `${theme.label(metadata.name)}${theme.value(`v${metadata.version}`)}`;
581
+ }
582
+
568
583
  /**
569
584
  * @brief Builds the full single-line pi-usereq status-bar payload.
570
- * @details Renders status, branch, context, elapsed, and sound fields in the canonical order with dim bullet separators, workflow-state highlighting, the documented icon-based context gauge, and the active runtime sound level instead of the persisted boot value. Runtime is O(1). No external state is mutated.
585
+ * @details Renders the runtime extension identity prefix before status, then renders status, branch, context, elapsed, and sound fields with dim bullet separators, workflow-state highlighting, the documented icon-based context gauge, and the active runtime sound level instead of the persisted boot value. Runtime is O(1). No external state is mutated.
571
586
  * @param[in] config {UseReqConfig} Effective project configuration.
572
587
  * @param[in] theme {StatusThemeAdapter} Normalized status theme.
573
588
  * @param[in] state {PiUsereqStatusState} Mutable status state snapshot.
@@ -586,6 +601,7 @@ function buildPiUsereqStatusText(
586
601
  const elapsedText = formatElapsedStatusValue(state, nowMs);
587
602
  const soundText = resolvePiUsereqRuntimeSoundLevel(state, config);
588
603
  return [
604
+ formatExtensionIdentityStatusField(theme),
589
605
  formatRenderedStatusField(
590
606
  theme,
591
607
  "status",
@@ -723,7 +739,7 @@ export function setPiUsereqRuntimeSoundLevel(
723
739
 
724
740
  /**
725
741
  * @brief Renders the current pi-usereq status bar into the active UI context.
726
- * @details Updates the controller's latest context pointer, refreshes the live `getContextUsage()` snapshot for direct render call sites that do not pass through `updateExtensionStatus(...)`, and writes the single-line status text only when configuration is available, including the active branch field, documented icon-based context gauge, and active runtime sound level. When pi has already invalidated the supplied context after session replacement or reload, the helper clears the stale cached context and returns without surfacing the stale-instance exception. Runtime is O(1) plus git execution for branch refresh. Side effect: mutates `controller.state.contextUsage` and `ctx.ui` status when the context is still active.
742
+ * @details Updates the controller's latest context pointer, refreshes the live `getContextUsage()` snapshot for direct render call sites that do not pass through `updateExtensionStatus(...)`, and writes the single-line status text only when configuration is available, including the runtime extension identity prefix, active branch field, documented icon-based context gauge, and active runtime sound level. When pi has already invalidated the supplied context after session replacement or reload, the helper clears the stale cached context and returns without surfacing the stale-instance exception. Runtime is O(1) plus git execution for branch refresh. Side effect: mutates `controller.state.contextUsage` and `ctx.ui` status when the context is still active.
727
743
  * @param[in,out] controller {PiUsereqStatusController} Mutable status controller.
728
744
  * @param[in] ctx {ExtensionContext} Active extension context.
729
745
  * @return {void} No return value.
@@ -786,7 +802,7 @@ export function setPiUsereqWorkflowState(
786
802
 
787
803
  /**
788
804
  * @brief Updates mutable status state for one intercepted lifecycle hook.
789
- * @details Refreshes stored context usage on every hook, resets or restores persisted elapsed counters during `session_start`, loads the active runtime sound level from persisted config during `session_start`, restores persisted prompt-command metadata when the active session matches a forked execution session, resynchronizes that metadata on later lifecycle hooks so post-switch workflow transitions performed by the initiating command handler become visible to the replacement-session runtime, resets workflow state to `idle` for documented session-start reasons, starts run timing on `agent_start`, promotes pending prompt-request metadata into the active run, captures non-aborted run duration on `agent_end`, accumulates successful runtime into `Σ`, preserves in-memory prompt-command state plus process-scoped persistence across switch-triggered `session_shutdown`, tolerates stale post-replacement render contexts, synchronizes the live ticker, and re-renders the status bar when configuration is available. Runtime is O(n) in `agent_end` message count and otherwise O(1). Side effects include in-memory state mutation, interval scheduling, process-scoped persistence mutation, and footer-status updates.
805
+ * @details Refreshes stored context usage on every hook, resets or restores persisted elapsed counters during `session_start`, loads the active runtime sound level from persisted config during `session_start`, restores persisted prompt-command metadata when the active session matches a forked execution session, resynchronizes that metadata on later lifecycle hooks so post-switch workflow transitions performed by the initiating command handler become visible to the replacement-session runtime, resets workflow state to `idle` for documented session-start reasons, starts run timing on `agent_start`, promotes pending prompt-request metadata into the active run, captures non-aborted run duration on `agent_end`, accumulates successful runtime into `Σ`, preserves in-memory prompt-command state plus process-scoped persistence across switch-triggered `session_shutdown`, tolerates stale post-replacement render contexts, synchronizes the live ticker, and re-renders the status bar with the runtime extension identity prefix when configuration is available. Runtime is O(n) in `agent_end` message count and otherwise O(1). Side effects include in-memory state mutation, interval scheduling, process-scoped persistence mutation, and footer-status updates.
790
806
  * @param[in,out] controller {PiUsereqStatusController} Mutable status controller.
791
807
  * @param[in] hookName {PiUsereqStatusHookName} Intercepted hook name.
792
808
  * @param[in] event {unknown} Hook payload forwarded from the wrapper.
@@ -28,6 +28,30 @@ export const GLOBAL_CONFIG_RELATIVE_PATH = ".config/pi-usereq/config.json";
28
28
  */
29
29
  export const RESOURCE_ROOT_DIRNAME = "resources";
30
30
 
31
+ /**
32
+ * @brief Describes the installation package metadata used by runtime status rendering.
33
+ * @details Stores the resolved extension package name and semantic version read from the installation-owned `package.json`. The interface is compile-time only and introduces no runtime side effects.
34
+ */
35
+ export interface InstallationPackageMetadata {
36
+ name: string;
37
+ version: string;
38
+ }
39
+
40
+ /**
41
+ * @brief Defines the fallback installation package metadata used when `package.json` is unavailable.
42
+ * @details Preserves deterministic footer rendering if the installation-owned package manifest is missing or malformed at runtime. Access complexity is O(1).
43
+ */
44
+ const DEFAULT_INSTALLATION_PACKAGE_METADATA: InstallationPackageMetadata = {
45
+ name: "pi-usereq",
46
+ version: "unknown",
47
+ };
48
+
49
+ /**
50
+ * @brief Caches the parsed installation package metadata for the current process.
51
+ * @details Avoids repeated `package.json` reads while the footer ticker refreshes once per second during active prompt execution. Mutable module-local cache with O(1) access after first resolution.
52
+ */
53
+ let installationPackageMetadataCache: InstallationPackageMetadata | undefined;
54
+
31
55
  /**
32
56
  * @brief Stores the mutable runtime path state shared across extension callbacks.
33
57
  * @details Persists the static bootstrap `base-path`, the dynamic `context-path`, the optional repository-derived `git-path`, the derived `parent-path` and `base-dir`, and the optional active worktree facts. The interface is compile-time only and introduces no runtime cost.
@@ -105,6 +129,41 @@ export function getInstallationPath(): string {
105
129
  return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
106
130
  }
107
131
 
132
+ /**
133
+ * @brief Resolves the installation-owned extension package metadata.
134
+ * @details Reads `<installation-path>/../package.json` once per process, caches the parsed `name` and `version`, trims surrounding whitespace, and falls back to deterministic defaults when the manifest is missing, malformed, or incomplete. Runtime is O(n) on the first call in manifest size and O(1) on later calls. Side effects are limited to one filesystem read and module-local cache mutation.
135
+ * @return {InstallationPackageMetadata} Cached package name and version used by runtime status rendering.
136
+ */
137
+ export function getInstallationPackageMetadata(): InstallationPackageMetadata {
138
+ if (installationPackageMetadataCache !== undefined) {
139
+ return installationPackageMetadataCache;
140
+ }
141
+ const packageJsonPath = path.resolve(
142
+ getInstallationPath(),
143
+ "..",
144
+ "package.json",
145
+ );
146
+ try {
147
+ const packageJson = JSON.parse(
148
+ fs.readFileSync(packageJsonPath, "utf8"),
149
+ ) as { name?: unknown; version?: unknown };
150
+ const name = typeof packageJson.name === "string"
151
+ ? packageJson.name.trim()
152
+ : "";
153
+ const version = typeof packageJson.version === "string"
154
+ ? packageJson.version.trim()
155
+ : "";
156
+ if (name !== "" && version !== "") {
157
+ installationPackageMetadataCache = { name, version };
158
+ return installationPackageMetadataCache;
159
+ }
160
+ } catch {
161
+ // Fallback handled below.
162
+ }
163
+ installationPackageMetadataCache = { ...DEFAULT_INSTALLATION_PACKAGE_METADATA };
164
+ return installationPackageMetadataCache;
165
+ }
166
+
108
167
  /**
109
168
  * @brief Formats one path with slash separators.
110
169
  * @details Rewrites backslashes to `/` without changing semantic path identity so serialized payloads remain stable across operating systems. Runtime is O(p) in path length. No external state is mutated.
package/src/index.ts CHANGED
@@ -5,10 +5,10 @@
5
5
  */
6
6
 
7
7
  /**
8
- * @brief Declares the extension version string.
9
- * @details The value is exported for external inspection and packaging metadata alignment. Access complexity is O(1).
8
+ * @brief Declares the runtime extension version string.
9
+ * @details Reads the installed package metadata during module evaluation so exported version consumers stay aligned with the extension payload loaded by pi. Access complexity is O(1) after the cached metadata is initialized.
10
10
  */
11
- export const VERSION = "0.33.0";
11
+ export const VERSION = getInstallationPackageMetadata().version;
12
12
 
13
13
  import fs from "node:fs";
14
14
  import path from "node:path";
@@ -67,6 +67,7 @@ import {
67
67
  import {
68
68
  bootstrapRuntimePathState,
69
69
  formatRuntimePathForDisplay,
70
+ getInstallationPackageMetadata,
70
71
  getRuntimeBasePath,
71
72
  getRuntimeContextPath,
72
73
  setRuntimeGitPath,
@@ -347,8 +348,8 @@ function executeDebugToolCommand(
347
348
  }
348
349
 
349
350
  /**
350
- * @brief Registers config-gated debug slash-command wrappers for selected built-in analysis tools.
351
- * @details Registers `debug-compress`, `debug-references`, `debug-static-check`, and `debug-tokens` as extension commands that reuse the same runner paths as the corresponding agent tools and write the resulting monolithic text into the editor instead of the LLM content channel. Re-registering the same commands is idempotent because pi keeps the latest same-extension command definition per name. Runtime is O(1) for registration; handler cost depends on the selected runner. Side effects include command registration.
351
+ * @brief Registers config-gated debug slash-command wrappers for selected project analysis tools.
352
+ * @details Registers `debug-compress`, `debug-references`, `debug-static-check`, `debug-summarize`, and `debug-tokens` as extension commands that reuse the same runner paths as the corresponding agent tools and write the resulting monolithic text into the editor instead of the LLM content channel. Re-registering the same commands is idempotent because pi keeps the latest same-extension command definition per name. Runtime is O(1) for registration; handler cost depends on the selected runner. Side effects include command registration.
352
353
  * @param[in] pi {ExtensionAPI} Active extension API instance.
353
354
  * @return {void} No return value.
354
355
  * @satisfies DES-015, REQ-323, REQ-324, REQ-325
@@ -382,6 +383,11 @@ function registerDebugToolCommands(pi: ExtensionAPI): void {
382
383
  "Run static-check and write the tool output into the editor",
383
384
  (projectBase, config) => executeMonolithicTool(() => runProjectStaticCheck(projectBase, config)),
384
385
  );
386
+ registerDebugToolCommand(
387
+ "debug-summarize",
388
+ "Run summarize and write the tool output into the editor",
389
+ (projectBase, config) => executeMonolithicTool(() => runSummarize(projectBase, config)),
390
+ );
385
391
  registerDebugToolCommand(
386
392
  "debug-tokens",
387
393
  "Run tokens and write the tool output into the editor",
@@ -1643,20 +1649,20 @@ function buildDebugMenuChoices(config: UseReqConfig): PiUsereqSettingsMenuChoice
1643
1649
  },
1644
1650
  buildDebugMenuChoice(
1645
1651
  {
1646
- id: "debug-log-file",
1647
- label: "Log file",
1648
- value: config.DEBUG_LOG_FILE,
1649
- description: "Edit the JSON debug log file path. Relative paths resolve against the original project base.",
1652
+ id: "debug-tool-commands-enabled",
1653
+ label: "Enable debug commands for tools",
1654
+ value: normalizeDebugToolCommandsEnabled(config.DEBUG_TOOL_COMMANDS_ENABLED),
1655
+ values: ["enable", "disable"],
1656
+ description: "Enable or disable slash-command wrappers for `compress`, `references`, `static-check`, `summarize`, and `tokens`.",
1650
1657
  },
1651
1658
  debugEnabled,
1652
1659
  ),
1653
1660
  buildDebugMenuChoice(
1654
1661
  {
1655
- id: "debug-tool-commands-enabled",
1656
- label: "Enable debug commands for tools",
1657
- value: normalizeDebugToolCommandsEnabled(config.DEBUG_TOOL_COMMANDS_ENABLED),
1658
- values: ["enable", "disable"],
1659
- description: "Enable or disable slash-command wrappers for `compress`, `references`, `static-check`, and `tokens`.",
1662
+ id: "debug-log-file",
1663
+ label: "Log file",
1664
+ value: config.DEBUG_LOG_FILE,
1665
+ description: "Edit the JSON debug log file path. Relative paths resolve against the original project base.",
1660
1666
  },
1661
1667
  debugEnabled,
1662
1668
  ),