pi-usereq 0.7.0 → 0.10.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.
- package/.gitignore +2 -0
- package/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/docs/pi.dev/coding-agent-docs/custom-provider.md +42 -1
- package/docs/pi.dev/coding-agent-docs/extensions.md +302 -28
- package/docs/pi.dev/coding-agent-docs/keybindings.md +23 -1
- package/docs/pi.dev/coding-agent-docs/models.md +3 -0
- package/docs/pi.dev/coding-agent-docs/packages.md +2 -2
- package/docs/pi.dev/coding-agent-docs/prompt-templates.md +21 -0
- package/docs/pi.dev/coding-agent-docs/providers.md +1 -0
- package/docs/pi.dev/coding-agent-docs/rpc.md +36 -6
- package/docs/pi.dev/coding-agent-docs/sdk.md +30 -5
- package/docs/pi.dev/coding-agent-docs/session.md +1 -1
- package/docs/pi.dev/coding-agent-docs/settings.md +2 -1
- package/docs/pi.dev/coding-agent-docs/skills.md +12 -12
- package/docs/pi.dev/coding-agent-docs/tree.md +2 -0
- package/docs/pi.dev/coding-agent-docs/tui.md +31 -0
- package/docs/pi.dev/mom-docs/new.md +4 -4
- package/package.json +1 -1
- package/pi-usereq/docs/REFERENCES.md +5184 -24470
- package/pi-usereq/docs/REQUIREMENTS.md +300 -166
- package/pi-usereq/docs/WORKFLOW.md +303 -314
- package/pi.dev-src/pi-mono/agent/src/agent-loop.ts +683 -0
- package/pi.dev-src/pi-mono/agent/src/agent.ts +543 -0
- package/pi.dev-src/pi-mono/agent/src/index.ts +8 -0
- package/pi.dev-src/pi-mono/agent/src/proxy.ts +367 -0
- package/pi.dev-src/pi-mono/agent/src/types.ts +364 -0
- package/pi.dev-src/pi-mono/agent/test/agent-loop.test.ts +1181 -0
- package/pi.dev-src/pi-mono/agent/test/agent.test.ts +463 -0
- package/pi.dev-src/pi-mono/agent/test/e2e.test.ts +404 -0
- package/pi.dev-src/pi-mono/agent/test/utils/calculate.ts +32 -0
- package/pi.dev-src/pi-mono/agent/test/utils/get-current-time.ts +46 -0
- package/pi.dev-src/pi-mono/agent/vitest.config.ts +9 -0
- package/pi.dev-src/pi-mono/ai/bedrock-provider.d.ts +1 -0
- package/pi.dev-src/pi-mono/ai/bedrock-provider.js +1 -0
- package/pi.dev-src/pi-mono/ai/scripts/generate-models.ts +1635 -0
- package/pi.dev-src/pi-mono/ai/scripts/generate-test-image.ts +34 -0
- package/pi.dev-src/pi-mono/ai/src/api-registry.ts +98 -0
- package/pi.dev-src/pi-mono/ai/src/bedrock-provider.ts +6 -0
- package/pi.dev-src/pi-mono/ai/src/cli.ts +133 -0
- package/pi.dev-src/pi-mono/ai/src/env-api-keys.ts +134 -0
- package/pi.dev-src/pi-mono/ai/src/index.ts +35 -0
- package/pi.dev-src/pi-mono/ai/src/models.generated.ts +14928 -0
- package/pi.dev-src/pi-mono/ai/src/models.ts +82 -0
- package/pi.dev-src/pi-mono/ai/src/oauth.ts +1 -0
- package/pi.dev-src/pi-mono/ai/src/providers/amazon-bedrock.ts +929 -0
- package/pi.dev-src/pi-mono/ai/src/providers/anthropic.ts +1125 -0
- package/pi.dev-src/pi-mono/ai/src/providers/azure-openai-responses.ts +253 -0
- package/pi.dev-src/pi-mono/ai/src/providers/faux.ts +499 -0
- package/pi.dev-src/pi-mono/ai/src/providers/github-copilot-headers.ts +37 -0
- package/pi.dev-src/pi-mono/ai/src/providers/google-gemini-cli.ts +996 -0
- package/pi.dev-src/pi-mono/ai/src/providers/google-shared.ts +354 -0
- package/pi.dev-src/pi-mono/ai/src/providers/google-vertex.ts +543 -0
- package/pi.dev-src/pi-mono/ai/src/providers/google.ts +500 -0
- package/pi.dev-src/pi-mono/ai/src/providers/mistral.ts +629 -0
- package/pi.dev-src/pi-mono/ai/src/providers/openai-codex-responses.ts +984 -0
- package/pi.dev-src/pi-mono/ai/src/providers/openai-completions.ts +1063 -0
- package/pi.dev-src/pi-mono/ai/src/providers/openai-responses-shared.ts +539 -0
- package/pi.dev-src/pi-mono/ai/src/providers/openai-responses.ts +264 -0
- package/pi.dev-src/pi-mono/ai/src/providers/register-builtins.ts +433 -0
- package/pi.dev-src/pi-mono/ai/src/providers/simple-options.ts +47 -0
- package/pi.dev-src/pi-mono/ai/src/providers/transform-messages.ts +220 -0
- package/pi.dev-src/pi-mono/ai/src/stream.ts +59 -0
- package/pi.dev-src/pi-mono/ai/src/types.ts +417 -0
- package/pi.dev-src/pi-mono/ai/src/utils/event-stream.ts +87 -0
- package/pi.dev-src/pi-mono/ai/src/utils/hash.ts +13 -0
- package/pi.dev-src/pi-mono/ai/src/utils/headers.ts +7 -0
- package/pi.dev-src/pi-mono/ai/src/utils/json-parse.ts +124 -0
- package/pi.dev-src/pi-mono/ai/src/utils/overflow.ts +138 -0
- package/pi.dev-src/pi-mono/ai/src/utils/sanitize-unicode.ts +25 -0
- package/pi.dev-src/pi-mono/ai/src/utils/typebox-helpers.ts +24 -0
- package/pi.dev-src/pi-mono/ai/src/utils/validation.ts +324 -0
- package/pi.dev-src/pi-mono/ai/test/abort.test.ts +260 -0
- package/pi.dev-src/pi-mono/ai/test/anthropic-oauth.test.ts +99 -0
- package/pi.dev-src/pi-mono/ai/test/anthropic-opus-4-7-smoke.test.ts +72 -0
- package/pi.dev-src/pi-mono/ai/test/anthropic-sse-parsing.test.ts +113 -0
- package/pi.dev-src/pi-mono/ai/test/anthropic-thinking-disable.test.ts +152 -0
- package/pi.dev-src/pi-mono/ai/test/anthropic-tool-name-normalization.test.ts +205 -0
- package/pi.dev-src/pi-mono/ai/test/azure-utils.ts +28 -0
- package/pi.dev-src/pi-mono/ai/test/bedrock-endpoint-resolution.test.ts +131 -0
- package/pi.dev-src/pi-mono/ai/test/bedrock-models.test.ts +66 -0
- package/pi.dev-src/pi-mono/ai/test/bedrock-thinking-payload.test.ts +107 -0
- package/pi.dev-src/pi-mono/ai/test/bedrock-utils.ts +18 -0
- package/pi.dev-src/pi-mono/ai/test/cache-retention.test.ts +335 -0
- package/pi.dev-src/pi-mono/ai/test/context-overflow.test.ts +714 -0
- package/pi.dev-src/pi-mono/ai/test/cross-provider-handoff.test.ts +458 -0
- package/pi.dev-src/pi-mono/ai/test/data/red-circle.png +0 -0
- package/pi.dev-src/pi-mono/ai/test/empty.test.ts +742 -0
- package/pi.dev-src/pi-mono/ai/test/faux-provider.test.ts +597 -0
- package/pi.dev-src/pi-mono/ai/test/fireworks-models.test.ts +49 -0
- package/pi.dev-src/pi-mono/ai/test/github-copilot-anthropic.test.ts +108 -0
- package/pi.dev-src/pi-mono/ai/test/github-copilot-oauth.test.ts +196 -0
- package/pi.dev-src/pi-mono/ai/test/google-gemini-cli-claude-thinking-header.test.ts +103 -0
- package/pi.dev-src/pi-mono/ai/test/google-gemini-cli-empty-stream.test.ts +108 -0
- package/pi.dev-src/pi-mono/ai/test/google-gemini-cli-retry-delay.test.ts +53 -0
- package/pi.dev-src/pi-mono/ai/test/google-shared-convert-tools.test.ts +187 -0
- package/pi.dev-src/pi-mono/ai/test/google-shared-gemini3-unsigned-tool-call.test.ts +172 -0
- package/pi.dev-src/pi-mono/ai/test/google-shared-image-tool-result-routing.test.ts +124 -0
- package/pi.dev-src/pi-mono/ai/test/google-thinking-disable.test.ts +183 -0
- package/pi.dev-src/pi-mono/ai/test/google-thinking-signature.test.ts +38 -0
- package/pi.dev-src/pi-mono/ai/test/google-tool-call-missing-args.test.ts +105 -0
- package/pi.dev-src/pi-mono/ai/test/google-vertex-api-key-resolution.test.ts +144 -0
- package/pi.dev-src/pi-mono/ai/test/image-tool-result.test.ts +481 -0
- package/pi.dev-src/pi-mono/ai/test/interleaved-thinking.test.ts +145 -0
- package/pi.dev-src/pi-mono/ai/test/lazy-module-load.test.ts +102 -0
- package/pi.dev-src/pi-mono/ai/test/mistral-reasoning-mode.test.ts +66 -0
- package/pi.dev-src/pi-mono/ai/test/mistral-tool-schema.test.ts +61 -0
- package/pi.dev-src/pi-mono/ai/test/oauth.ts +89 -0
- package/pi.dev-src/pi-mono/ai/test/openai-codex-cache-affinity-e2e.test.ts +36 -0
- package/pi.dev-src/pi-mono/ai/test/openai-codex-stream.test.ts +686 -0
- package/pi.dev-src/pi-mono/ai/test/openai-completions-cache-control-format.test.ts +189 -0
- package/pi.dev-src/pi-mono/ai/test/openai-completions-prompt-cache.test.ts +198 -0
- package/pi.dev-src/pi-mono/ai/test/openai-completions-thinking-as-text.test.ts +214 -0
- package/pi.dev-src/pi-mono/ai/test/openai-completions-tool-choice.test.ts +560 -0
- package/pi.dev-src/pi-mono/ai/test/openai-completions-tool-result-images.test.ts +101 -0
- package/pi.dev-src/pi-mono/ai/test/openai-responses-cache-affinity-e2e.test.ts +32 -0
- package/pi.dev-src/pi-mono/ai/test/openai-responses-copilot-provider.test.ts +128 -0
- package/pi.dev-src/pi-mono/ai/test/openai-responses-foreign-toolcall-id.test.ts +66 -0
- package/pi.dev-src/pi-mono/ai/test/openai-responses-partial-json-cleanup.test.ts +101 -0
- package/pi.dev-src/pi-mono/ai/test/openai-responses-reasoning-replay-e2e.test.ts +292 -0
- package/pi.dev-src/pi-mono/ai/test/openai-responses-tool-result-images.test.ts +200 -0
- package/pi.dev-src/pi-mono/ai/test/openrouter-cache-write-repro.test.ts +78 -0
- package/pi.dev-src/pi-mono/ai/test/overflow.test.ts +64 -0
- package/pi.dev-src/pi-mono/ai/test/responseid.test.ts +145 -0
- package/pi.dev-src/pi-mono/ai/test/stream.test.ts +1405 -0
- package/pi.dev-src/pi-mono/ai/test/supports-xhigh.test.ts +34 -0
- package/pi.dev-src/pi-mono/ai/test/tokens.test.ts +304 -0
- package/pi.dev-src/pi-mono/ai/test/tool-call-id-normalization.test.ts +291 -0
- package/pi.dev-src/pi-mono/ai/test/tool-call-without-result.test.ts +313 -0
- package/pi.dev-src/pi-mono/ai/test/total-tokens.test.ts +695 -0
- package/pi.dev-src/pi-mono/ai/test/transform-messages-copilot-openai-to-anthropic.test.ts +191 -0
- package/pi.dev-src/pi-mono/ai/test/unicode-surrogate.test.ts +754 -0
- package/pi.dev-src/pi-mono/ai/test/validation.test.ts +116 -0
- package/pi.dev-src/pi-mono/ai/test/xhigh.test.ts +71 -0
- package/pi.dev-src/pi-mono/ai/test/zen.test.ts +25 -0
- package/pi.dev-src/pi-mono/ai/vitest.config.ts +9 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/antigravity-image-gen.ts +418 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/bash-spawn-hook.ts +30 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/bookmark.ts +50 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/built-in-tool-renderer.ts +249 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/claude-rules.ts +86 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/commands.ts +72 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/confirm-destructive.ts +59 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-compaction.ts +127 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-footer.ts +64 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-header.ts +73 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-anthropic/index.ts +604 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dirty-repo-guard.ts +56 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/index.ts +74 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-resources/index.ts +15 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-tools.ts +74 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/event-bus.ts +43 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/file-trigger.ts +41 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/git-checkpoint.ts +53 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/github-issue-autocomplete.ts +185 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/handoff.ts +153 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/hello.ts +26 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/hidden-thinking-label.ts +53 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/inline-bash.ts +94 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/input-transform.ts +43 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/interactive-shell.ts +196 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/mac-system-theme.ts +47 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/message-renderer.ts +59 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/minimal-mode.ts +426 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/modal-editor.ts +85 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/model-status.ts +31 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/notify.ts +55 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/overlay-qa-tests.ts +1348 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/overlay-test.ts +150 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/permission-gate.ts +34 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/pirate.ts +47 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/plan-mode/index.ts +340 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/plan-mode/utils.ts +168 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/preset.ts +430 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/prompt-customizer.ts +97 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/protected-paths.ts +30 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/provider-payload.ts +18 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/qna.ts +122 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/question.ts +264 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/questionnaire.ts +427 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/rainbow-editor.ts +88 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/reload-runtime.ts +37 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/rpc-demo.ts +118 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/sandbox/index.ts +321 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/sandbox/package-lock.json +92 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/send-user-message.ts +97 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/session-name.ts +27 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/shutdown-command.ts +63 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/snake.ts +343 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/space-invaders.ts +560 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/ssh.ts +220 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/status-line.ts +32 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/structured-output.ts +65 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents/planner.md +37 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents/scout.md +50 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents/worker.md +24 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents.ts +126 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/index.ts +987 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/prompts/implement.md +10 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/summarize.ts +206 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/system-prompt-header.ts +17 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/tic-tac-toe.ts +1008 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/timed-confirm.ts +70 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/titlebar-spinner.ts +58 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/todo.ts +297 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/tool-override.ts +144 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/tools.ts +141 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/trigger-compact.ts +50 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/truncated-tool.ts +195 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/widget-placement.ts +9 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/with-deps/index.ts +32 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/with-deps/package-lock.json +31 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/working-indicator.ts +123 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/extensions/working-message-test.ts +25 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/rpc-extension-ui.ts +632 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/01-minimal.ts +22 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/02-custom-model.ts +49 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/03-custom-prompt.ts +62 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/04-skills.ts +55 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/05-tools.ts +44 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/06-extensions.ts +90 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/07-context-files.ts +42 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/08-prompt-templates.ts +51 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/10-settings.ts +53 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/11-sessions.ts +48 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/12-full-control.ts +73 -0
- package/pi.dev-src/pi-mono/coding-agent/examples/sdk/13-session-runtime.ts +67 -0
- package/pi.dev-src/pi-mono/coding-agent/scripts/migrate-sessions.sh +93 -0
- package/pi.dev-src/pi-mono/coding-agent/src/bun/cli.ts +6 -0
- package/pi.dev-src/pi-mono/coding-agent/src/bun/register-bedrock.ts +4 -0
- package/pi.dev-src/pi-mono/coding-agent/src/cli/args.ts +335 -0
- package/pi.dev-src/pi-mono/coding-agent/src/cli/config-selector.ts +52 -0
- package/pi.dev-src/pi-mono/coding-agent/src/cli/file-processor.ts +100 -0
- package/pi.dev-src/pi-mono/coding-agent/src/cli/initial-message.ts +43 -0
- package/pi.dev-src/pi-mono/coding-agent/src/cli/list-models.ts +110 -0
- package/pi.dev-src/pi-mono/coding-agent/src/cli/session-picker.ts +52 -0
- package/pi.dev-src/pi-mono/coding-agent/src/cli.ts +17 -0
- package/pi.dev-src/pi-mono/coding-agent/src/config.ts +261 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/agent-session-runtime.ts +394 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/agent-session-services.ts +196 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/agent-session.ts +3096 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/auth-storage.ts +493 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/bash-executor.ts +154 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/compaction/branch-summarization.ts +355 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/compaction/compaction.ts +839 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/compaction/index.ts +7 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/compaction/utils.ts +170 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/defaults.ts +3 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/diagnostics.ts +15 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/event-bus.ts +33 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/exec.ts +107 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/ansi-to-html.ts +258 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/index.ts +314 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/template.css +1017 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/template.html +55 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/template.js +1770 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/tool-renderer.ts +158 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/vendor/highlight.min.js +1213 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/vendor/marked.min.js +6 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/index.ts +171 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/loader.ts +606 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/runner.ts +1019 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/types.ts +1542 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/wrapper.ts +30 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/footer-data-provider.ts +354 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/index.ts +77 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/keybindings.ts +370 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/messages.ts +195 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/model-registry.ts +858 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/model-resolver.ts +629 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/output-guard.ts +74 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/package-manager.ts +2408 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/prompt-templates.ts +296 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/resolve-config-value.ts +142 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/resource-loader.ts +917 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/sdk.ts +380 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/session-cwd.ts +59 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/session-manager.ts +1425 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/settings-manager.ts +999 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/skills.ts +508 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/slash-commands.ts +39 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/source-info.ts +40 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/system-prompt.ts +172 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/telemetry.ts +13 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/timings.ts +31 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/bash.ts +448 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/edit-diff.ts +445 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/edit.ts +487 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/file-mutation-queue.ts +39 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/find.ts +370 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/grep.ts +384 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/index.ts +196 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/ls.ts +229 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/path-utils.ts +94 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/read.ts +273 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/render-utils.ts +64 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/tool-definition-wrapper.ts +45 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/truncate.ts +265 -0
- package/pi.dev-src/pi-mono/coding-agent/src/core/tools/write.ts +281 -0
- package/pi.dev-src/pi-mono/coding-agent/src/index.ts +352 -0
- package/pi.dev-src/pi-mono/coding-agent/src/main.ts +731 -0
- package/pi.dev-src/pi-mono/coding-agent/src/migrations.ts +314 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/index.ts +9 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/assets/clankolas.png +0 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/armin.ts +382 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/assistant-message.ts +147 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/bash-execution.ts +218 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/bordered-loader.ts +68 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/branch-summary-message.ts +58 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/compaction-summary-message.ts +59 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/config-selector.ts +592 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/countdown-timer.ts +38 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/custom-editor.ts +80 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/custom-message.ts +99 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/daxnuts.ts +164 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/diff.ts +147 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/dynamic-border.ts +25 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/earendil-announcement.ts +53 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/extension-editor.ts +147 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/extension-input.ts +87 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/extension-selector.ts +107 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/footer.ts +220 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/index.ts +32 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/keybinding-hints.ts +24 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/login-dialog.ts +178 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/model-selector.ts +338 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/oauth-selector.ts +121 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/scoped-models-selector.ts +355 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/session-selector-search.ts +194 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/session-selector.ts +1026 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/settings-selector.ts +456 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/show-images-selector.ts +50 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/skill-invocation-message.ts +55 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/theme-selector.ts +67 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/thinking-selector.ts +74 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/tool-execution.ts +352 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/tree-selector.ts +1246 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/user-message-selector.ts +155 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/user-message.ts +35 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/visual-truncate.ts +50 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/interactive-mode.ts +5155 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/theme/dark.json +85 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/theme/light.json +84 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/theme/theme-schema.json +335 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/theme/theme.ts +1141 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/print-mode.ts +158 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/rpc/jsonl.ts +58 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/rpc/rpc-client.ts +515 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/rpc/rpc-mode.ts +745 -0
- package/pi.dev-src/pi-mono/coding-agent/src/modes/rpc/rpc-types.ts +264 -0
- package/pi.dev-src/pi-mono/coding-agent/src/package-manager-cli.ts +270 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/changelog.ts +99 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/child-process.ts +86 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/clipboard-image.ts +300 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/clipboard-native.ts +22 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/clipboard.ts +81 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/exif-orientation.ts +183 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/frontmatter.ts +39 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/fs-watch.ts +30 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/git.ts +192 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/image-convert.ts +41 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/image-resize.ts +176 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/mime.ts +30 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/paths.ts +20 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/photon.ts +139 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/shell.ts +210 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/sleep.ts +18 -0
- package/pi.dev-src/pi-mono/coding-agent/src/utils/tools-manager.ts +287 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-auto-compaction-queue.test.ts +437 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-branching.test.ts +156 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-compaction.test.ts +208 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-concurrent.test.ts +618 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-dynamic-provider.test.ts +117 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-dynamic-tools.test.ts +182 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-retry.test.ts +318 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-runtime-events.test.ts +208 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-stats.test.ts +143 -0
- package/pi.dev-src/pi-mono/coding-agent/test/agent-session-tree-navigation.test.ts +323 -0
- package/pi.dev-src/pi-mono/coding-agent/test/args.test.ts +328 -0
- package/pi.dev-src/pi-mono/coding-agent/test/assistant-message.test.ts +57 -0
- package/pi.dev-src/pi-mono/coding-agent/test/auth-storage.test.ts +462 -0
- package/pi.dev-src/pi-mono/coding-agent/test/bash-close-hang-windows.test.ts +126 -0
- package/pi.dev-src/pi-mono/coding-agent/test/bash-execution-width.test.ts +80 -0
- package/pi.dev-src/pi-mono/coding-agent/test/block-images.test.ts +120 -0
- package/pi.dev-src/pi-mono/coding-agent/test/clipboard-image-bmp-conversion.test.ts +88 -0
- package/pi.dev-src/pi-mono/coding-agent/test/clipboard-image.test.ts +136 -0
- package/pi.dev-src/pi-mono/coding-agent/test/compaction-extensions-example.test.ts +66 -0
- package/pi.dev-src/pi-mono/coding-agent/test/compaction-extensions.test.ts +415 -0
- package/pi.dev-src/pi-mono/coding-agent/test/compaction-serialization.test.ts +79 -0
- package/pi.dev-src/pi-mono/coding-agent/test/compaction-summary-reasoning.test.ts +118 -0
- package/pi.dev-src/pi-mono/coding-agent/test/compaction-thinking-model.test.ts +223 -0
- package/pi.dev-src/pi-mono/coding-agent/test/compaction.test.ts +550 -0
- package/pi.dev-src/pi-mono/coding-agent/test/config.test.ts +30 -0
- package/pi.dev-src/pi-mono/coding-agent/test/edit-tool-legacy-input.test.ts +116 -0
- package/pi.dev-src/pi-mono/coding-agent/test/edit-tool-no-full-redraw.test.ts +235 -0
- package/pi.dev-src/pi-mono/coding-agent/test/export-html-whitespace.test.ts +12 -0
- package/pi.dev-src/pi-mono/coding-agent/test/export-html-xss.test.ts +28 -0
- package/pi.dev-src/pi-mono/coding-agent/test/extensions-discovery.test.ts +463 -0
- package/pi.dev-src/pi-mono/coding-agent/test/extensions-input-event.test.ts +112 -0
- package/pi.dev-src/pi-mono/coding-agent/test/extensions-runner.test.ts +805 -0
- package/pi.dev-src/pi-mono/coding-agent/test/file-mutation-queue.test.ts +163 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/assistant-message-with-thinking-code.json +33 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/before-compaction.jsonl +1003 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/empty-agent/.gitkeep +0 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/empty-cwd/.gitkeep +0 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/large-session.jsonl +1019 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/consecutive-hyphens/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/disable-model-invocation/SKILL.md +9 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/invalid-name-chars/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/invalid-yaml/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/long-name/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/missing-description/SKILL.md +7 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/multiline-description/SKILL.md +11 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/name-mismatch/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/nested/child-skill/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/no-frontmatter/SKILL.md +3 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/root-skill-preferred/SKILL.md +3 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/root-skill-preferred/nested-child/SKILL.md +3 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/unknown-field/SKILL.md +10 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/valid-skill/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills-collision/first/calendar/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills-collision/second/calendar/SKILL.md +8 -0
- package/pi.dev-src/pi-mono/coding-agent/test/footer-data-provider.test.ts +265 -0
- package/pi.dev-src/pi-mono/coding-agent/test/footer-width.test.ts +115 -0
- package/pi.dev-src/pi-mono/coding-agent/test/frontmatter.test.ts +60 -0
- package/pi.dev-src/pi-mono/coding-agent/test/git-ssh-url.test.ts +78 -0
- package/pi.dev-src/pi-mono/coding-agent/test/git-update.test.ts +411 -0
- package/pi.dev-src/pi-mono/coding-agent/test/image-processing.test.ts +145 -0
- package/pi.dev-src/pi-mono/coding-agent/test/image-resize-callers.test.ts +53 -0
- package/pi.dev-src/pi-mono/coding-agent/test/initial-message.test.ts +48 -0
- package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-anthropic-warning.test.ts +73 -0
- package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-clone-command.test.ts +77 -0
- package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-compaction.test.ts +57 -0
- package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-import-command.test.ts +144 -0
- package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-status.test.ts +635 -0
- package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-suspend.test.ts +149 -0
- package/pi.dev-src/pi-mono/coding-agent/test/keybindings-migration.test.ts +88 -0
- package/pi.dev-src/pi-mono/coding-agent/test/model-registry.test.ts +1209 -0
- package/pi.dev-src/pi-mono/coding-agent/test/model-resolver.test.ts +436 -0
- package/pi.dev-src/pi-mono/coding-agent/test/package-command-paths.test.ts +144 -0
- package/pi.dev-src/pi-mono/coding-agent/test/package-manager-ssh.test.ts +97 -0
- package/pi.dev-src/pi-mono/coding-agent/test/package-manager.test.ts +1795 -0
- package/pi.dev-src/pi-mono/coding-agent/test/path-utils.test.ts +162 -0
- package/pi.dev-src/pi-mono/coding-agent/test/plan-mode-utils.test.ts +261 -0
- package/pi.dev-src/pi-mono/coding-agent/test/print-mode.test.ts +140 -0
- package/pi.dev-src/pi-mono/coding-agent/test/prompt-templates.test.ts +515 -0
- package/pi.dev-src/pi-mono/coding-agent/test/resource-loader.test.ts +576 -0
- package/pi.dev-src/pi-mono/coding-agent/test/rpc-client-clone.test.ts +29 -0
- package/pi.dev-src/pi-mono/coding-agent/test/rpc-example.ts +86 -0
- package/pi.dev-src/pi-mono/coding-agent/test/rpc-jsonl.test.ts +65 -0
- package/pi.dev-src/pi-mono/coding-agent/test/rpc-prompt-response-semantics.test.ts +285 -0
- package/pi.dev-src/pi-mono/coding-agent/test/rpc.test.ts +321 -0
- package/pi.dev-src/pi-mono/coding-agent/test/sdk-codex-cache-probe-tool-loop.ts +364 -0
- package/pi.dev-src/pi-mono/coding-agent/test/sdk-openrouter-attribution.test.ts +181 -0
- package/pi.dev-src/pi-mono/coding-agent/test/sdk-session-manager.test.ts +95 -0
- package/pi.dev-src/pi-mono/coding-agent/test/sdk-skills.test.ts +109 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-cwd.test.ts +91 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-info-modified-timestamp.test.ts +83 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-manager/build-context.test.ts +268 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-manager/custom-session-id.test.ts +109 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-manager/file-operations.test.ts +208 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-manager/labels.test.ts +198 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-manager/migration.test.ts +78 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-manager/save-entry.test.ts +55 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-manager/tree-traversal.test.ts +533 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-selector-path-delete.test.ts +315 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-selector-rename.test.ts +111 -0
- package/pi.dev-src/pi-mono/coding-agent/test/session-selector-search.test.ts +195 -0
- package/pi.dev-src/pi-mono/coding-agent/test/settings-manager-bug.test.ts +147 -0
- package/pi.dev-src/pi-mono/coding-agent/test/settings-manager.test.ts +319 -0
- package/pi.dev-src/pi-mono/coding-agent/test/skills.test.ts +432 -0
- package/pi.dev-src/pi-mono/coding-agent/test/stdout-cleanliness.test.ts +103 -0
- package/pi.dev-src/pi-mono/coding-agent/test/streaming-render-debug.ts +97 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-bash-persistence.test.ts +242 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-compaction.test.ts +343 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-model-extension.test.ts +325 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-prompt.test.ts +323 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-queue.test.ts +422 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-retry-events.test.ts +358 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-runtime.test.ts +553 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/harness.ts +208 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2023-queued-slash-command-followup.test.ts +80 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2753-reload-stale-resource-settings.test.ts +100 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2781-skill-collision-precedence.test.ts +120 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2791-fswatch-error-crash.test.ts +106 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2835-tools-allowlist-filters-extension-tools.test.ts +94 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2860-replaced-session-context.test.ts +274 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/3217-scoped-model-order.test.ts +104 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/3302-find-path-glob.test.ts +72 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/3303-find-nested-gitignore.test.ts +83 -0
- package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/3317-network-connection-lost-retry.test.ts +33 -0
- package/pi.dev-src/pi-mono/coding-agent/test/system-prompt.test.ts +102 -0
- package/pi.dev-src/pi-mono/coding-agent/test/test-harness.test.ts +321 -0
- package/pi.dev-src/pi-mono/coding-agent/test/test-harness.ts +446 -0
- package/pi.dev-src/pi-mono/coding-agent/test/test-theme-colors.ts +246 -0
- package/pi.dev-src/pi-mono/coding-agent/test/theme-export.test.ts +104 -0
- package/pi.dev-src/pi-mono/coding-agent/test/tool-execution-component.test.ts +331 -0
- package/pi.dev-src/pi-mono/coding-agent/test/tools.test.ts +889 -0
- package/pi.dev-src/pi-mono/coding-agent/test/tree-selector.test.ts +655 -0
- package/pi.dev-src/pi-mono/coding-agent/test/trigger-compact-extension.test.ts +57 -0
- package/pi.dev-src/pi-mono/coding-agent/test/truncate-to-width.test.ts +81 -0
- package/pi.dev-src/pi-mono/coding-agent/test/user-message.test.ts +25 -0
- package/pi.dev-src/pi-mono/coding-agent/test/utilities.ts +316 -0
- package/pi.dev-src/pi-mono/coding-agent/tsconfig.examples.json +16 -0
- package/pi.dev-src/pi-mono/coding-agent/vitest.config.ts +26 -0
- package/pi.dev-src/pi-mono/mom/dev.sh +30 -0
- package/pi.dev-src/pi-mono/mom/docker.sh +95 -0
- package/pi.dev-src/pi-mono/mom/scripts/migrate-timestamps.ts +121 -0
- package/pi.dev-src/pi-mono/mom/src/agent.ts +882 -0
- package/pi.dev-src/pi-mono/mom/src/context.ts +180 -0
- package/pi.dev-src/pi-mono/mom/src/download.ts +117 -0
- package/pi.dev-src/pi-mono/mom/src/events.ts +442 -0
- package/pi.dev-src/pi-mono/mom/src/fs-watch.ts +30 -0
- package/pi.dev-src/pi-mono/mom/src/log.ts +271 -0
- package/pi.dev-src/pi-mono/mom/src/main.ts +367 -0
- package/pi.dev-src/pi-mono/mom/src/sandbox.ts +221 -0
- package/pi.dev-src/pi-mono/mom/src/slack.ts +623 -0
- package/pi.dev-src/pi-mono/mom/src/store.ts +234 -0
- package/pi.dev-src/pi-mono/mom/src/tools/attach.ts +47 -0
- package/pi.dev-src/pi-mono/mom/src/tools/bash.ts +97 -0
- package/pi.dev-src/pi-mono/mom/src/tools/edit.ts +165 -0
- package/pi.dev-src/pi-mono/mom/src/tools/index.ts +19 -0
- package/pi.dev-src/pi-mono/mom/src/tools/read.ts +159 -0
- package/pi.dev-src/pi-mono/mom/src/tools/truncate.ts +236 -0
- package/pi.dev-src/pi-mono/mom/src/tools/write.ts +45 -0
- package/pi.dev-src/pi-mono/mom/test/events.test.ts +50 -0
- package/pi.dev-src/pi-mono/pods/scripts/model_run.sh +83 -0
- package/pi.dev-src/pi-mono/pods/scripts/pod_setup.sh +336 -0
- package/pi.dev-src/pi-mono/pods/src/cli.ts +360 -0
- package/pi.dev-src/pi-mono/pods/src/commands/models.ts +753 -0
- package/pi.dev-src/pi-mono/pods/src/commands/pods.ts +205 -0
- package/pi.dev-src/pi-mono/pods/src/commands/prompt.ts +84 -0
- package/pi.dev-src/pi-mono/pods/src/config.ts +80 -0
- package/pi.dev-src/pi-mono/pods/src/index.ts +2 -0
- package/pi.dev-src/pi-mono/pods/src/model-configs.ts +111 -0
- package/pi.dev-src/pi-mono/pods/src/models.json +295 -0
- package/pi.dev-src/pi-mono/pods/src/ssh.ts +151 -0
- package/pi.dev-src/pi-mono/pods/src/types.ts +27 -0
- package/pi.dev-src/pi-mono/tui/src/autocomplete.ts +783 -0
- package/pi.dev-src/pi-mono/tui/src/components/box.ts +137 -0
- package/pi.dev-src/pi-mono/tui/src/components/cancellable-loader.ts +40 -0
- package/pi.dev-src/pi-mono/tui/src/components/editor.ts +2280 -0
- package/pi.dev-src/pi-mono/tui/src/components/image.ts +104 -0
- package/pi.dev-src/pi-mono/tui/src/components/input.ts +503 -0
- package/pi.dev-src/pi-mono/tui/src/components/loader.ts +86 -0
- package/pi.dev-src/pi-mono/tui/src/components/markdown.ts +852 -0
- package/pi.dev-src/pi-mono/tui/src/components/select-list.ts +229 -0
- package/pi.dev-src/pi-mono/tui/src/components/settings-list.ts +250 -0
- package/pi.dev-src/pi-mono/tui/src/components/spacer.ts +28 -0
- package/pi.dev-src/pi-mono/tui/src/components/text.ts +106 -0
- package/pi.dev-src/pi-mono/tui/src/components/truncated-text.ts +65 -0
- package/pi.dev-src/pi-mono/tui/src/editor-component.ts +74 -0
- package/pi.dev-src/pi-mono/tui/src/fuzzy.ts +133 -0
- package/pi.dev-src/pi-mono/tui/src/index.ts +106 -0
- package/pi.dev-src/pi-mono/tui/src/keybindings.ts +244 -0
- package/pi.dev-src/pi-mono/tui/src/keys.ts +1400 -0
- package/pi.dev-src/pi-mono/tui/src/kill-ring.ts +46 -0
- package/pi.dev-src/pi-mono/tui/src/stdin-buffer.ts +386 -0
- package/pi.dev-src/pi-mono/tui/src/terminal-image.ts +414 -0
- package/pi.dev-src/pi-mono/tui/src/terminal.ts +373 -0
- package/pi.dev-src/pi-mono/tui/src/tui.ts +1243 -0
- package/pi.dev-src/pi-mono/tui/src/undo-stack.ts +28 -0
- package/pi.dev-src/pi-mono/tui/src/utils.ts +1085 -0
- package/pi.dev-src/pi-mono/tui/test/autocomplete.test.ts +542 -0
- package/pi.dev-src/pi-mono/tui/test/bug-regression-isimageline-startswith-bug.test.ts +237 -0
- package/pi.dev-src/pi-mono/tui/test/chat-simple.ts +129 -0
- package/pi.dev-src/pi-mono/tui/test/editor.test.ts +3812 -0
- package/pi.dev-src/pi-mono/tui/test/fuzzy.test.ts +98 -0
- package/pi.dev-src/pi-mono/tui/test/image-test.ts +56 -0
- package/pi.dev-src/pi-mono/tui/test/input.test.ts +580 -0
- package/pi.dev-src/pi-mono/tui/test/key-tester.ts +105 -0
- package/pi.dev-src/pi-mono/tui/test/keybindings.test.ts +38 -0
- package/pi.dev-src/pi-mono/tui/test/keys.test.ts +614 -0
- package/pi.dev-src/pi-mono/tui/test/markdown.test.ts +1236 -0
- package/pi.dev-src/pi-mono/tui/test/overlay-non-capturing.test.ts +609 -0
- package/pi.dev-src/pi-mono/tui/test/overlay-options.test.ts +538 -0
- package/pi.dev-src/pi-mono/tui/test/overlay-short-content.test.ts +56 -0
- package/pi.dev-src/pi-mono/tui/test/regression-regional-indicator-width.test.ts +52 -0
- package/pi.dev-src/pi-mono/tui/test/select-list.test.ts +116 -0
- package/pi.dev-src/pi-mono/tui/test/stdin-buffer.test.ts +422 -0
- package/pi.dev-src/pi-mono/tui/test/terminal-image.test.ts +279 -0
- package/pi.dev-src/pi-mono/tui/test/test-themes.ts +38 -0
- package/pi.dev-src/pi-mono/tui/test/truncate-to-width.test.ts +62 -0
- package/pi.dev-src/pi-mono/tui/test/truncated-text.test.ts +129 -0
- package/pi.dev-src/pi-mono/tui/test/tui-cell-size-input.test.ts +81 -0
- package/pi.dev-src/pi-mono/tui/test/tui-overlay-style-leak.test.ts +72 -0
- package/pi.dev-src/pi-mono/tui/test/tui-render.test.ts +509 -0
- package/pi.dev-src/pi-mono/tui/test/viewport-overwrite-repro.ts +106 -0
- package/pi.dev-src/pi-mono/tui/test/virtual-terminal.ts +218 -0
- package/pi.dev-src/pi-mono/tui/test/wrap-ansi.test.ts +207 -0
- package/pi.dev-src/pi-mono/tui/vitest.config.ts +7 -0
- package/pi.dev-src/pi-mono/web-ui/example/index.html +13 -0
- package/pi.dev-src/pi-mono/web-ui/example/src/app.css +1 -0
- package/pi.dev-src/pi-mono/web-ui/example/src/custom-messages.ts +99 -0
- package/pi.dev-src/pi-mono/web-ui/example/src/main.ts +421 -0
- package/pi.dev-src/pi-mono/web-ui/example/tsconfig.json +23 -0
- package/pi.dev-src/pi-mono/web-ui/example/vite.config.ts +6 -0
- package/pi.dev-src/pi-mono/web-ui/scripts/count-prompt-tokens.ts +88 -0
- package/pi.dev-src/pi-mono/web-ui/src/ChatPanel.ts +209 -0
- package/pi.dev-src/pi-mono/web-ui/src/app.css +68 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/AgentInterface.ts +403 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/AttachmentTile.ts +107 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/ConsoleBlock.ts +72 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/CustomProviderCard.ts +100 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/ExpandableSection.ts +46 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/Input.ts +113 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/MessageEditor.ts +405 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/MessageList.ts +98 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/Messages.ts +383 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/ProviderKeyInput.ts +153 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/SandboxedIframe.ts +626 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/StreamingMessageContainer.ts +103 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/ThinkingBlock.ts +43 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/message-renderer-registry.ts +28 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/ArtifactsRuntimeProvider.ts +220 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/AttachmentsRuntimeProvider.ts +66 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts +186 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/FileDownloadRuntimeProvider.ts +110 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/RuntimeMessageBridge.ts +82 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/RuntimeMessageRouter.ts +216 -0
- package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/SandboxRuntimeProvider.ts +52 -0
- package/pi.dev-src/pi-mono/web-ui/src/dialogs/ApiKeyPromptDialog.ts +75 -0
- package/pi.dev-src/pi-mono/web-ui/src/dialogs/AttachmentOverlay.ts +636 -0
- package/pi.dev-src/pi-mono/web-ui/src/dialogs/CustomProviderDialog.ts +274 -0
- package/pi.dev-src/pi-mono/web-ui/src/dialogs/ModelSelector.ts +370 -0
- package/pi.dev-src/pi-mono/web-ui/src/dialogs/PersistentStorageDialog.ts +144 -0
- package/pi.dev-src/pi-mono/web-ui/src/dialogs/ProvidersModelsTab.ts +212 -0
- package/pi.dev-src/pi-mono/web-ui/src/dialogs/SessionListDialog.ts +150 -0
- package/pi.dev-src/pi-mono/web-ui/src/dialogs/SettingsDialog.ts +218 -0
- package/pi.dev-src/pi-mono/web-ui/src/index.ts +120 -0
- package/pi.dev-src/pi-mono/web-ui/src/prompts/prompts.ts +282 -0
- package/pi.dev-src/pi-mono/web-ui/src/storage/app-storage.ts +60 -0
- package/pi.dev-src/pi-mono/web-ui/src/storage/backends/indexeddb-storage-backend.ts +193 -0
- package/pi.dev-src/pi-mono/web-ui/src/storage/store.ts +33 -0
- package/pi.dev-src/pi-mono/web-ui/src/storage/stores/custom-providers-store.ts +62 -0
- package/pi.dev-src/pi-mono/web-ui/src/storage/stores/provider-keys-store.ts +33 -0
- package/pi.dev-src/pi-mono/web-ui/src/storage/stores/sessions-store.ts +136 -0
- package/pi.dev-src/pi-mono/web-ui/src/storage/stores/settings-store.ts +34 -0
- package/pi.dev-src/pi-mono/web-ui/src/storage/types.ts +206 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/ArtifactElement.ts +14 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/ArtifactPill.ts +26 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/Console.ts +93 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/DocxArtifact.ts +213 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/ExcelArtifact.ts +231 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/GenericArtifact.ts +117 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/HtmlArtifact.ts +195 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/ImageArtifact.ts +116 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/MarkdownArtifact.ts +82 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/PdfArtifact.ts +201 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/SvgArtifact.ts +119 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/TextArtifact.ts +148 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/artifacts-tool-renderer.ts +310 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/artifacts.ts +713 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/index.ts +7 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/extract-document.ts +275 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/index.ts +46 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/javascript-repl.ts +293 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/renderer-registry.ts +130 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/renderers/BashRenderer.ts +52 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/renderers/CalculateRenderer.ts +58 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/renderers/DefaultRenderer.ts +103 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/renderers/GetCurrentTimeRenderer.ts +92 -0
- package/pi.dev-src/pi-mono/web-ui/src/tools/types.ts +15 -0
- package/pi.dev-src/pi-mono/web-ui/src/utils/attachment-utils.ts +472 -0
- package/pi.dev-src/pi-mono/web-ui/src/utils/auth-token.ts +22 -0
- package/pi.dev-src/pi-mono/web-ui/src/utils/format.ts +42 -0
- package/pi.dev-src/pi-mono/web-ui/src/utils/i18n.ts +653 -0
- package/pi.dev-src/pi-mono/web-ui/src/utils/model-discovery.ts +277 -0
- package/pi.dev-src/pi-mono/web-ui/src/utils/proxy-utils.ts +139 -0
- package/pi.dev-src/pi-mono/web-ui/src/utils/test-sessions.ts +2357 -0
- package/pi.dev-src/pi-mono/web-ui/tsconfig.json +7 -0
- package/scripts/lib/extension-debug-harness.ts +3 -10
- package/scripts/lib/recording-extension-api.ts +71 -2
- package/scripts/pi-usereq-debug.sh +1 -1
- package/scripts/tool-args-to-params.ts +4 -15
- package/src/cli.ts +24 -68
- package/src/core/agent-tool-json.ts +53 -239
- package/src/core/compress-payload.ts +4 -74
- package/src/core/compress.ts +26 -15
- package/src/core/config.ts +468 -42
- package/src/core/debug-runtime.ts +542 -0
- package/src/core/extension-status.ts +296 -46
- package/src/core/find-constructs.ts +3 -3
- package/src/core/find-payload.ts +26 -132
- package/src/core/path-context.ts +346 -81
- package/src/core/pi-notify.ts +115 -5
- package/src/core/pi-usereq-tools.ts +57 -19
- package/src/core/prompt-command-catalog.ts +46 -0
- package/src/core/prompt-command-runtime.ts +1650 -0
- package/src/core/prompt-command-state.ts +211 -0
- package/src/core/prompts.ts +173 -41
- package/src/core/reference-payload.ts +5 -63
- package/src/core/resources.ts +61 -5
- package/src/core/settings-menu.ts +12 -6
- package/src/core/source-analyzer.ts +27 -7
- package/src/core/token-counter.ts +6 -76
- package/src/core/tool-runner.ts +38 -317
- package/src/index.ts +2062 -950
- package/src/resources/instructions/git_commit.md +16 -0
- package/src/resources/instructions/git_read-only.md +2 -0
- package/src/resources/prompts/analyze.md +12 -13
- package/src/resources/prompts/change.md +21 -59
- package/src/resources/prompts/check.md +14 -16
- package/src/resources/prompts/cover.md +21 -59
- package/src/resources/prompts/create.md +5 -4
- package/src/resources/prompts/fix.md +20 -58
- package/src/resources/prompts/flowchart.md +14 -49
- package/src/resources/prompts/implement.md +14 -50
- package/src/resources/prompts/new.md +20 -58
- package/src/resources/prompts/readme.md +14 -50
- package/src/resources/prompts/recreate.md +14 -45
- package/src/resources/prompts/refactor.md +20 -58
- package/src/resources/prompts/references.md +7 -43
- package/src/resources/prompts/renumber.md +8 -39
- package/src/resources/prompts/workflow.md +14 -50
- package/src/resources/prompts/write.md +5 -4
- package/tests/attended-results-scenarios.ts +30 -136
- package/tests/cli-command-option-parity.test.ts +148 -192
- package/tests/debug-extension-harness.test.ts +69 -68
- package/tests/extension-registration.test.ts +3118 -657
- package/tests/fixtures_attended_results/project/compress-line-numbers.json +1 -1
- package/tests/fixtures_attended_results/project/compress.json +1 -1
- package/tests/fixtures_attended_results/project/find-line-numbers.json +1 -1
- package/tests/fixtures_attended_results/project/find.json +1 -1
- package/tests/fixtures_attended_results/project/references.json +2 -2
- package/tests/fixtures_attended_results/standalone/files-compress/fixture_go.go.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_go.go.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-find/fixture_go.go.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_go.go.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_c.c.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_cpp.cpp.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_csharp.cs.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_elixir.ex.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_go.go.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_haskell.hs.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_java.java.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_javascript.js.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_kotlin.kt.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_lua.lua.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_perl.pl.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_php.php.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_python.py.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_ruby.rb.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_rust.rs.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_scala.scala.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_shell.sh.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_swift.swift.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_typescript.ts.json +1 -1
- package/tests/fixtures_attended_results/standalone/files-references/fixture_zig.zig.json +1 -1
- package/tests/helpers.ts +24 -15
- package/tests/oracle-project.test.ts +29 -30
- package/tests/oracle-standalone.test.ts +27 -1
- package/tests/prompt-rendering.test.ts +40 -9
- package/tests/python_oracle_stubs/tiktoken.py +76 -0
package/tests/fixtures_attended_results/standalone/files-references/fixture_javascript.js.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"code": 0,
|
|
3
|
-
"stdout": "{\n \"request\": {\n \"tool_name\": \"files-references\",\n \"scope\": \"explicit-files\",\n \"base_dir_path\": \"<ROOT>\",\n \"source_directory_count\": 0,\n \"source_directory_paths\": [],\n \"requested_file_count\": 1,\n \"requested_input_paths\": [\n \"tests/fixtures/fixture_javascript.js\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_javascript.js\"\n ]\n },\n \"summary\": {\n \"processable_file_count\": 1,\n \"analyzed_file_count\": 1,\n \"error_file_count\": 0,\n \"skipped_file_count\": 0,\n \"total_symbol_count\": 39,\n \"total_import_count\": 5,\n \"total_comment_count\": 88,\n \"total_standalone_comment_count\": 50,\n \"total_doxygen_field_count\": 65,\n \"symbol_kind_counts\": {\n \"CLASS\": 5,\n \"COMPONENT\": 5,\n \"CONSTANT\": 5,\n \"FUNCTION\": 19,\n \"MODULE\": 5\n }\n },\n \"repository\": {\n \"root_directory_path\": \"<ROOT>\",\n \"source_directory_paths\": [],\n \"file_count\": 1,\n \"file_canonical_paths\": [\n \"tests/fixtures/fixture_javascript.js\"\n ],\n \"directory_tree\": {\n \"node_name\": \".\",\n \"relative_path\": \".\",\n \"node_kind\": \"directory\",\n \"child_count\": 1,\n \"children\": [\n {\n \"node_name\": \"tests\",\n \"relative_path\": \"tests\",\n \"node_kind\": \"directory\",\n \"child_count\": 1,\n \"children\": [\n {\n \"node_name\": \"fixtures\",\n \"relative_path\": \"tests/fixtures\",\n \"node_kind\": \"directory\",\n \"child_count\": 1,\n \"children\": [\n {\n \"node_name\": \"fixture_javascript.js\",\n \"relative_path\": \"tests/fixtures/fixture_javascript.js\",\n \"node_kind\": \"file\",\n \"child_count\": 0,\n \"children\": []\n }\n ]\n }\n ]\n }\n ]\n }\n },\n \"files\": [\n {\n \"start_line_number\": 1,\n \"end_line_number\": 383,\n \"line_range\": [\n 1,\n 383\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_javascript.js\",\n \"canonical_path\": \"tests/fixtures/fixture_javascript.js\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_javascript.js\",\n \"file_name\": \"fixture_javascript.js\",\n \"file_extension\": \".js\",\n \"language_id\": \"javascript\",\n \"language_name\": \"JavaScript\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 5,\n \"symbol_count\": 39,\n \"comment_count\": 88,\n \"standalone_comment_count\": 50,\n \"doxygen_field_count\": 65,\n \"file_doxygen\": {\n \"brief\": [\n \"Comprehensive JavaScript test fixture for parser validation.\"\n ],\n \"details\": [\n \"Covers classes with private fields, generators, async generators,\\nproxies, symbols, IIFE, dynamic imports, destructuring, computed\\nproperties, and chained promise patterns.\"\n ]\n },\n \"imports\": [\n {\n \"start_line_number\": 11,\n \"end_line_number\": 11,\n \"line_range\": [\n 11,\n 11\n ],\n \"import_name\": \"React from 'react';\",\n \"statement_text\": \"import React from 'react';\"\n },\n {\n \"start_line_number\": 12,\n \"end_line_number\": 12,\n \"line_range\": [\n 12,\n 12\n ],\n \"import_name\": \"{ useState, useEffect } from 'react';\",\n \"statement_text\": \"import { useState, useEffect } from 'react';\"\n },\n {\n \"start_line_number\": 329,\n \"end_line_number\": 329,\n \"line_range\": [\n 329,\n 329\n ],\n \"import_name\": \"fs from 'fs';\",\n \"statement_text\": \"import fs from 'fs';\"\n },\n {\n \"start_line_number\": 330,\n \"end_line_number\": 330,\n \"line_range\": [\n 330,\n 330\n ],\n \"import_name\": \"path from 'path';\",\n \"statement_text\": \"import path from 'path';\"\n },\n {\n \"start_line_number\": 331,\n \"end_line_number\": 331,\n \"line_range\": [\n 331,\n 331\n ],\n \"import_name\": \"url from 'url';\",\n \"statement_text\": \"import url from 'url';\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 20,\n \"end_line_number\": 66,\n \"line_range\": [\n 20,\n 66\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"MyComponent\",\n \"qualified_name\": \"MyComponent\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class MyComponent\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"React-like component with private fields and static initialization.\",\n \"doxygen\": {\n \"brief\": [\n \"React-like component with private fields and static initialization.\",\n \"Private instance counter, not accessible outside the class.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"text\": \"@brief Private instance counter, not accessible outside the class.\",\n \"text_lines\": [\n \"@brief Private instance counter, not accessible outside the class.\"\n ]\n },\n {\n \"start_line_number\": 24,\n \"end_line_number\": 24,\n \"line_range\": [\n 24,\n 24\n ],\n \"text\": \"@brief Static registry of all component instances.\",\n \"text_lines\": [\n \"@brief Static registry of all component instances.\"\n ]\n },\n {\n \"start_line_number\": 27,\n \"end_line_number\": 27,\n \"line_range\": [\n 27,\n 27\n ],\n \"text\": \"Static initialization block (ES2022)\",\n \"text_lines\": [\n \"Static initialization block (ES2022)\"\n ]\n },\n {\n \"start_line_number\": 32,\n \"end_line_number\": 35,\n \"line_range\": [\n 32,\n 35\n ],\n \"text\": \"@brief Construct a new component with an optional ID. @param {number} [id=0] Unique identifier for this instance.\",\n \"text_lines\": [\n \"@brief Construct a new component with an optional ID. @param {number} [id=0] Unique identifier for this instance.\"\n ]\n },\n {\n \"start_line_number\": 41,\n \"end_line_number\": 44,\n \"line_range\": [\n 41,\n 44\n ],\n \"text\": \"@brief Render the component output. @return {null} Placeholder render returning null.\",\n \"text_lines\": [\n \"@brief Render the component output. @return {null} Placeholder render returning null.\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"Delegate to internal render pipeline\",\n \"text_lines\": [\n \"Delegate to internal render pipeline\"\n ]\n },\n {\n \"start_line_number\": 50,\n \"end_line_number\": 53,\n \"line_range\": [\n 50,\n 53\n ],\n \"text\": \"@brief Retrieve the private instance ID. @return {number} The instance identifier.\",\n \"text_lines\": [\n \"@brief Retrieve the private instance ID. @return {number} The instance identifier.\"\n ]\n },\n {\n \"start_line_number\": 58,\n \"end_line_number\": 62,\n \"line_range\": [\n 58,\n 62\n ],\n \"text\": \"@brief Check if an ID exists in the static registry. @param {number} id The ID to look up. @return {boolean} True if the ID is registered.\",\n \"text_lines\": [\n \"@brief Check if an ID exists in the static registry. @param {number} id The ID to look up. @return {boolean} True if the ID is registered.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 47,\n \"text\": \"return null;\"\n },\n {\n \"line_number\": 55,\n \"text\": \"return this.#instanceId;\"\n },\n {\n \"line_number\": 64,\n \"text\": \"return MyComponent.#registry.has(id);\"\n }\n ]\n },\n {\n \"start_line_number\": 75,\n \"end_line_number\": 93,\n \"line_range\": [\n 75,\n 93\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"EnhancedComponent\",\n \"qualified_name\": \"EnhancedComponent\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class EnhancedComponent extends MyComponent\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"inherits_text\": \"MyComponent\",\n \"attached_comment_summary_text\": \"Extended component with lifecycle hooks.\",\n \"doxygen\": {\n \"brief\": [\n \"Extended component with lifecycle hooks.\",\n \"Override render to return a div element.\"\n ],\n \"returns\": [\n \"{Object} A simple virtual DOM node.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 76,\n \"end_line_number\": 79,\n \"line_range\": [\n 76,\n 79\n ],\n \"text\": \"@brief Override render to return a div element. @return {Object} A simple virtual DOM node.\",\n \"text_lines\": [\n \"@brief Override render to return a div element. @return {Object} A simple virtual DOM node.\"\n ]\n },\n {\n \"start_line_number\": 81,\n \"end_line_number\": 81,\n \"line_range\": [\n 81,\n 81\n ],\n \"text\": \"Call super for side effects then override output\",\n \"text_lines\": [\n \"Call super for side effects then override output\"\n ]\n },\n {\n \"start_line_number\": 86,\n \"end_line_number\": 89,\n \"line_range\": [\n 86,\n 89\n ],\n \"text\": \"@brief Lifecycle method called after mounting. @return {void}\",\n \"text_lines\": [\n \"@brief Lifecycle method called after mounting. @return {void}\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 83,\n \"text\": \"return { type: 'div', children: [] };\"\n }\n ]\n },\n {\n \"start_line_number\": 103,\n \"end_line_number\": 105,\n \"line_range\": [\n 103,\n 105\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"greet\",\n \"qualified_name\": \"greet\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function greet(name)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Greet a person by name.\",\n \"doxygen\": {\n \"brief\": [\n \"Greet a person by name.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"name\",\n \"value_type\": \"string\",\n \"description\": \"The person's name.\"\n }\n ],\n \"returns\": [\n \"{string} Greeting message.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 104,\n \"text\": \"return \\\"Hello \\\" + name;\"\n }\n ]\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 115,\n \"line_range\": [\n 112,\n 115\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"fetchData\",\n \"qualified_name\": \"fetchData\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"async function fetchData()\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Fetch data from the API endpoint asynchronously.\",\n \"doxygen\": {\n \"brief\": [\n \"Fetch data from the API endpoint asynchronously.\"\n ],\n \"returns\": [\n \"{Promise<Response>} The fetch response promise.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 113,\n \"end_line_number\": 113,\n \"line_range\": [\n 113,\n 113\n ],\n \"text\": \"Await the fetch and return result\",\n \"text_lines\": [\n \"Await the fetch and return result\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 114,\n \"text\": \"return await fetch('/api');\"\n }\n ]\n },\n {\n \"start_line_number\": 122,\n \"end_line_number\": 126,\n \"line_range\": [\n 122,\n 126\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"handler\",\n \"qualified_name\": \"handler\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"const handler = (event) =>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Event handler arrow function for UI events.\",\n \"doxygen\": {\n \"brief\": [\n \"Event handler arrow function for UI events.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"event\",\n \"value_type\": \"Event\",\n \"description\": \"The DOM event object.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 123,\n \"end_line_number\": 123,\n \"line_range\": [\n 123,\n 123\n ],\n \"text\": \"Log and prevent default browser behavior\",\n \"text_lines\": [\n \"Log and prevent default browser behavior\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 136,\n \"line_range\": [\n 134,\n 136\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"processItems\",\n \"qualified_name\": \"processItems\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"const processItems = ({ items, count }) =>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Arrow function with destructuring parameter.\",\n \"doxygen\": {\n \"brief\": [\n \"Arrow function with destructuring parameter.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"{{ items: Array, count: number }} param0 Destructured config.\"\n }\n ],\n \"returns\": [\n \"{Array} Processed item list.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 135,\n \"text\": \"return items.slice(0, count).map(i => i.toUpperCase());\"\n }\n ]\n },\n {\n \"start_line_number\": 141,\n \"end_line_number\": 141,\n \"line_range\": [\n 141,\n 141\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"MAX_SIZE\",\n \"qualified_name\": \"MAX_SIZE\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"const MAX_SIZE = 100\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Constants ──────────────────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Constants ──────────────────────────────────────────────────────────\",\n \"@constant {number} MAX_SIZE Upper bound for buffer allocation.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 144,\n \"end_line_number\": 144,\n \"line_range\": [\n 144,\n 144\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"PLUGIN_KEY\",\n \"qualified_name\": \"PLUGIN_KEY\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"const PLUGIN_KEY = Symbol('plugin')\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@constant {Symbol} PLUGIN_KEY Unique symbol for plugin registration.\",\n \"attached_comment_lines\": [\n \"@constant {Symbol} PLUGIN_KEY Unique symbol for plugin registration.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 155,\n \"line_range\": [\n 153,\n 155\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"MyWrapped\",\n \"qualified_name\": \"MyWrapped\",\n \"symbol_kind\": \"COMPONENT\",\n \"type_label\": \"COMPONENT\",\n \"signature_text\": \"const MyWrapped = React.memo(() =>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Memoized functional component demonstrating React.memo usage.\",\n \"doxygen\": {\n \"brief\": [\n \"Memoized functional component demonstrating React.memo usage.\"\n ],\n \"returns\": [\n \"{null} Renders nothing; serves as a parser test case.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 154,\n \"text\": \"return null;\"\n }\n ]\n },\n {\n \"start_line_number\": 164,\n \"end_line_number\": 170,\n \"line_range\": [\n 164,\n 170\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"idGenerator\",\n \"qualified_name\": \"idGenerator\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function* idGenerator()\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Infinite generator producing sequential integer IDs.\\n@yields {number} The next unique ID.\",\n \"doxygen\": {\n \"brief\": [\n \"Infinite generator producing sequential integer IDs.\\n@yields {number} The next unique ID.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 167,\n \"end_line_number\": 167,\n \"line_range\": [\n 167,\n 167\n ],\n \"text\": \"Yield incremented ID indefinitely\",\n \"text_lines\": [\n \"Yield incremented ID indefinitely\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 168,\n \"text\": \"yield id++;\"\n }\n ]\n },\n {\n \"start_line_number\": 179,\n \"end_line_number\": 183,\n \"line_range\": [\n 179,\n 183\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"rangeGenerator\",\n \"qualified_name\": \"rangeGenerator\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function* rangeGenerator(start, end)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Generator yielding integers in a bounded range.\",\n \"doxygen\": {\n \"brief\": [\n \"Generator yielding integers in a bounded range.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"start\",\n \"value_type\": \"number\",\n \"description\": \"Inclusive lower bound.\"\n },\n {\n \"direction\": \"unspecified\",\n \"text\": \"{number} end Exclusive upper bound.\\n@yields {number} Each integer from start to end-1.\"\n }\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 181,\n \"text\": \"yield i;\"\n }\n ]\n },\n {\n \"start_line_number\": 194,\n \"end_line_number\": 206,\n \"line_range\": [\n 194,\n 206\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"asyncDataStream\",\n \"qualified_name\": \"asyncDataStream\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"async function* asyncDataStream(url)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Asynchronously yield paginated API results.\",\n \"doxygen\": {\n \"brief\": [\n \"Asynchronously yield paginated API results.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"{string} url Base URL for pagination.\\n@yields {Object} Each page's parsed JSON data.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 200,\n \"end_line_number\": 200,\n \"line_range\": [\n 200,\n 200\n ],\n \"text\": \"No more pages — terminate stream\",\n \"text_lines\": [\n \"No more pages — terminate stream\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 201,\n \"text\": \"return;\"\n },\n {\n \"line_number\": 203,\n \"text\": \"yield data;\"\n }\n ]\n },\n {\n \"start_line_number\": 213,\n \"end_line_number\": 217,\n \"line_range\": [\n 213,\n 217\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"initResult\",\n \"qualified_name\": \"initResult\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"const initResult = (() =>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Immediately invoked function expression for module initialization.\",\n \"doxygen\": {\n \"brief\": [\n \"Immediately invoked function expression for module initialization.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 214,\n \"end_line_number\": 214,\n \"line_range\": [\n 214,\n 214\n ],\n \"text\": \"Self-contained initialization logic\",\n \"text_lines\": [\n \"Self-contained initialization logic\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 216,\n \"text\": \"return Object.freeze(config);\"\n }\n ]\n },\n {\n \"start_line_number\": 227,\n \"end_line_number\": 240,\n \"line_range\": [\n 227,\n 240\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"createProxy\",\n \"qualified_name\": \"createProxy\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function createProxy(target)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Create a logging proxy around any target object.\",\n \"doxygen\": {\n \"brief\": [\n \"Create a logging proxy around any target object.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"target\",\n \"value_type\": \"Object\",\n \"description\": \"The object to wrap with proxy traps.\"\n }\n ],\n \"returns\": [\n \"{Proxy} Proxied object that logs property access.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 230,\n \"end_line_number\": 230,\n \"line_range\": [\n 230,\n 230\n ],\n \"text\": \"Log every property access\",\n \"text_lines\": [\n \"Log every property access\"\n ]\n },\n {\n \"start_line_number\": 235,\n \"end_line_number\": 235,\n \"line_range\": [\n 235,\n 235\n ],\n \"text\": \"Log every property mutation\",\n \"text_lines\": [\n \"Log every property mutation\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 228,\n \"text\": \"return new Proxy(target, {\"\n },\n {\n \"line_number\": 232,\n \"text\": \"return Reflect.get(obj, prop);\"\n },\n {\n \"line_number\": 237,\n \"text\": \"return Reflect.set(obj, prop, value);\"\n }\n ]\n },\n {\n \"start_line_number\": 250,\n \"end_line_number\": 258,\n \"line_range\": [\n 250,\n 258\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"buildDynamic\",\n \"qualified_name\": \"buildDynamic\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function buildDynamic(prefix)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Build an object with computed property keys.\",\n \"doxygen\": {\n \"brief\": [\n \"Build an object with computed property keys.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"prefix\",\n \"value_type\": \"string\",\n \"description\": \"Key prefix for dynamic properties.\"\n }\n ],\n \"returns\": [\n \"{Object} Object with dynamically named properties.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 251,\n \"text\": \"return {\"\n },\n {\n \"line_number\": 255,\n \"text\": \"return hint === 'string' ? prefix : 0;\"\n }\n ]\n },\n {\n \"start_line_number\": 268,\n \"end_line_number\": 280,\n \"line_range\": [\n 268,\n 280\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"fetchAndProcess\",\n \"qualified_name\": \"fetchAndProcess\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function fetchAndProcess(url)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Demonstrate chained promise pattern with error recovery.\",\n \"doxygen\": {\n \"brief\": [\n \"Demonstrate chained promise pattern with error recovery.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"url\",\n \"value_type\": \"string\",\n \"description\": \"The resource URL to fetch.\"\n }\n ],\n \"returns\": [\n \"{Promise<Object>} Processed data or fallback on error.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 272,\n \"end_line_number\": 272,\n \"line_range\": [\n 272,\n 272\n ],\n \"text\": \"Transform the response payload\",\n \"text_lines\": [\n \"Transform the response payload\"\n ]\n },\n {\n \"start_line_number\": 276,\n \"end_line_number\": 276,\n \"line_range\": [\n 276,\n 276\n ],\n \"text\": \"Fallback on fetch failure\",\n \"text_lines\": [\n \"Fallback on fetch failure\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 269,\n \"text\": \"return fetch(url)\"\n },\n {\n \"line_number\": 273,\n \"text\": \"return { ...data, processed: true };\"\n },\n {\n \"line_number\": 278,\n \"text\": \"return { error: true, processed: false };\"\n }\n ]\n },\n {\n \"start_line_number\": 290,\n \"end_line_number\": 292,\n \"line_range\": [\n 290,\n 292\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"configureApp\",\n \"qualified_name\": \"configureApp\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function configureApp({ host = 'localhost', port = 3000, db: { url: dbUrl = 'sqlite://' } = {} } = {})\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Configure application with deep destructuring defaults.\",\n \"doxygen\": {\n \"brief\": [\n \"Configure application with deep destructuring defaults.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"options\",\n \"value_type\": \"Object\",\n \"description\": \"Configuration object with nested defaults.\"\n }\n ],\n \"returns\": [\n \"{Object} Resolved configuration.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 291,\n \"text\": \"return { host, port, dbUrl };\"\n }\n ]\n },\n {\n \"start_line_number\": 297,\n \"end_line_number\": 307,\n \"line_range\": [\n 297,\n 307\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"fs\",\n \"qualified_name\": \"fs\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"const fs = require('fs')\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Load the Node.js filesystem module via CommonJS. */\",\n \"doxygen\": {\n \"brief\": [\n \"Load the Node.js filesystem module via CommonJS. */\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 299,\n \"end_line_number\": 299,\n \"line_range\": [\n 299,\n 299\n ],\n \"text\": \"── WeakMap for private state ──────────────────────────────────────────\",\n \"text_lines\": [\n \"── WeakMap for private state ──────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 301,\n \"end_line_number\": 301,\n \"line_range\": [\n 301,\n 301\n ],\n \"text\": \"@brief WeakMap storing private state keyed by object reference.\",\n \"text_lines\": [\n \"@brief WeakMap storing private state keyed by object reference.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 310,\n \"end_line_number\": 312,\n \"line_range\": [\n 310,\n 312\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"setPrivate\",\n \"qualified_name\": \"setPrivate\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function setPrivate(obj, data)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Store private data associated with an object.\",\n \"doxygen\": {\n \"brief\": [\n \"Store private data associated with an object.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"obj\",\n \"value_type\": \"Object\",\n \"description\": \"The key object.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"data\",\n \"value_type\": \"*\",\n \"description\": \"The private data to associate.\"\n }\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 322,\n \"end_line_number\": 326,\n \"line_range\": [\n 322,\n 326\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"loadPlugin\",\n \"qualified_name\": \"loadPlugin\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"async function loadPlugin(name)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Dynamically import a module at runtime.\",\n \"doxygen\": {\n \"brief\": [\n \"Dynamically import a module at runtime.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"name\",\n \"value_type\": \"string\",\n \"description\": \"Module specifier to import.\"\n }\n ],\n \"returns\": [\n \"{Promise<Module>} The loaded module namespace.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 323,\n \"end_line_number\": 323,\n \"line_range\": [\n 323,\n 323\n ],\n \"text\": \"Dynamic import for code-splitting\",\n \"text_lines\": [\n \"Dynamic import for code-splitting\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 325,\n \"text\": \"return mod;\"\n }\n ]\n },\n {\n \"start_line_number\": 332,\n \"end_line_number\": 332,\n \"line_range\": [\n 332,\n 332\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"ExtraService\",\n \"qualified_name\": \"ExtraService\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"export class ExtraService { constructor() { this.ready = true; } }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 333,\n \"end_line_number\": 333,\n \"line_range\": [\n 333,\n 333\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"HelperComponent\",\n \"qualified_name\": \"HelperComponent\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class HelperComponent { render() { return null; } }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 334,\n \"end_line_number\": 334,\n \"line_range\": [\n 334,\n 334\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"WidgetFactory\",\n \"qualified_name\": \"WidgetFactory\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"export default class WidgetFactory { create() { return {}; } }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 335,\n \"end_line_number\": 336,\n \"line_range\": [\n 335,\n 336\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"BoundComponent\",\n \"qualified_name\": \"BoundComponent\",\n \"symbol_kind\": \"COMPONENT\",\n \"type_label\": \"COMPONENT\",\n \"signature_text\": \"const BoundComponent = React.memo(() => null)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 336,\n \"end_line_number\": 336,\n \"line_range\": [\n 336,\n 336\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"ForwardedWidget\",\n \"qualified_name\": \"ForwardedWidget\",\n \"symbol_kind\": \"COMPONENT\",\n \"type_label\": \"COMPONENT\",\n \"signature_text\": \"const ForwardedWidget = React.forwardRef((_, ref) => ({ ref }))\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 337,\n \"end_line_number\": 353,\n \"line_range\": [\n 337,\n 353\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"LazyWidget\",\n \"qualified_name\": \"LazyWidget\",\n \"symbol_kind\": \"COMPONENT\",\n \"type_label\": \"COMPONENT\",\n \"signature_text\": \"const LazyWidget = React.lazy(() => import('./Widget'))\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 347,\n \"end_line_number\": 347,\n \"line_range\": [\n 347,\n 347\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 348,\n \"end_line_number\": 348,\n \"line_range\": [\n 348,\n 348\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 349,\n \"end_line_number\": 349,\n \"line_range\": [\n 349,\n 349\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 350,\n \"end_line_number\": 350,\n \"line_range\": [\n 350,\n 350\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 1.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n {\n \"start_line_number\": 351,\n \"end_line_number\": 351,\n \"line_range\": [\n 351,\n 351\n ],\n \"text\": \"@param value Input value for helper construct 1.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"text\": \"@return Output value for helper construct 1.\",\n \"text_lines\": [\n \"@return Output value for helper construct 1.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 338,\n \"end_line_number\": 353,\n \"line_range\": [\n 338,\n 353\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"MemoPanel\",\n \"qualified_name\": \"MemoPanel\",\n \"symbol_kind\": \"COMPONENT\",\n \"type_label\": \"COMPONENT\",\n \"signature_text\": \"const MemoPanel = memo(() => null)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 347,\n \"end_line_number\": 347,\n \"line_range\": [\n 347,\n 347\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 348,\n \"end_line_number\": 348,\n \"line_range\": [\n 348,\n 348\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 349,\n \"end_line_number\": 349,\n \"line_range\": [\n 349,\n 349\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 350,\n \"end_line_number\": 350,\n \"line_range\": [\n 350,\n 350\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 1.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n {\n \"start_line_number\": 351,\n \"end_line_number\": 351,\n \"line_range\": [\n 351,\n 351\n ],\n \"text\": \"@param value Input value for helper construct 1.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"text\": \"@return Output value for helper construct 1.\",\n \"text_lines\": [\n \"@return Output value for helper construct 1.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 339,\n \"end_line_number\": 339,\n \"line_range\": [\n 339,\n 339\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"API_TOKEN\",\n \"qualified_name\": \"API_TOKEN\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"const API_TOKEN = 'tok'\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 340,\n \"end_line_number\": 340,\n \"line_range\": [\n 340,\n 340\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"CACHE_SIZE\",\n \"qualified_name\": \"CACHE_SIZE\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"const CACHE_SIZE = 128\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 341,\n \"end_line_number\": 341,\n \"line_range\": [\n 341,\n 341\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"RETRY_LIMIT\",\n \"qualified_name\": \"RETRY_LIMIT\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"const RETRY_LIMIT = 5\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 342,\n \"end_line_number\": 353,\n \"line_range\": [\n 342,\n 353\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"pathMod\",\n \"qualified_name\": \"pathMod\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"const pathMod = require('path')\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 347,\n \"end_line_number\": 347,\n \"line_range\": [\n 347,\n 347\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 348,\n \"end_line_number\": 348,\n \"line_range\": [\n 348,\n 348\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 349,\n \"end_line_number\": 349,\n \"line_range\": [\n 349,\n 349\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 350,\n \"end_line_number\": 350,\n \"line_range\": [\n 350,\n 350\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 1.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n {\n \"start_line_number\": 351,\n \"end_line_number\": 351,\n \"line_range\": [\n 351,\n 351\n ],\n \"text\": \"@param value Input value for helper construct 1.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"text\": \"@return Output value for helper construct 1.\",\n \"text_lines\": [\n \"@return Output value for helper construct 1.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 343,\n \"end_line_number\": 353,\n \"line_range\": [\n 343,\n 353\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"cryptoMod\",\n \"qualified_name\": \"cryptoMod\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"const cryptoMod = require('crypto')\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 347,\n \"end_line_number\": 347,\n \"line_range\": [\n 347,\n 347\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 348,\n \"end_line_number\": 348,\n \"line_range\": [\n 348,\n 348\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 349,\n \"end_line_number\": 349,\n \"line_range\": [\n 349,\n 349\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 350,\n \"end_line_number\": 350,\n \"line_range\": [\n 350,\n 350\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 1.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n {\n \"start_line_number\": 351,\n \"end_line_number\": 351,\n \"line_range\": [\n 351,\n 351\n ],\n \"text\": \"@param value Input value for helper construct 1.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"text\": \"@return Output value for helper construct 1.\",\n \"text_lines\": [\n \"@return Output value for helper construct 1.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 344,\n \"end_line_number\": 353,\n \"line_range\": [\n 344,\n 353\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"utilMod\",\n \"qualified_name\": \"utilMod\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"const utilMod = require('util')\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 347,\n \"end_line_number\": 347,\n \"line_range\": [\n 347,\n 347\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 348,\n \"end_line_number\": 348,\n \"line_range\": [\n 348,\n 348\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 349,\n \"end_line_number\": 349,\n \"line_range\": [\n 349,\n 349\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 350,\n \"end_line_number\": 350,\n \"line_range\": [\n 350,\n 350\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 1.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n {\n \"start_line_number\": 351,\n \"end_line_number\": 351,\n \"line_range\": [\n 351,\n 351\n ],\n \"text\": \"@param value Input value for helper construct 1.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"text\": \"@return Output value for helper construct 1.\",\n \"text_lines\": [\n \"@return Output value for helper construct 1.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 345,\n \"end_line_number\": 353,\n \"line_range\": [\n 345,\n 353\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"osMod\",\n \"qualified_name\": \"osMod\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"const osMod = require('os')\",\n \"child_symbol_names\": [\n \"reqCoverJs1\"\n ],\n \"child_qualified_names\": [\n \"osMod.reqCoverJs1\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 347,\n \"end_line_number\": 347,\n \"line_range\": [\n 347,\n 347\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 348,\n \"end_line_number\": 348,\n \"line_range\": [\n 348,\n 348\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 349,\n \"end_line_number\": 349,\n \"line_range\": [\n 349,\n 349\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 350,\n \"end_line_number\": 350,\n \"line_range\": [\n 350,\n 350\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 1.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n {\n \"start_line_number\": 351,\n \"end_line_number\": 351,\n \"line_range\": [\n 351,\n 351\n ],\n \"text\": \"@param value Input value for helper construct 1.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"text\": \"@return Output value for helper construct 1.\",\n \"text_lines\": [\n \"@return Output value for helper construct 1.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 353,\n \"end_line_number\": 353,\n \"line_range\": [\n 353,\n 353\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"reqCoverJs1\",\n \"qualified_name\": \"osMod.reqCoverJs1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function reqCoverJs1(value) { return value + 1; }\",\n \"parent_symbol_name\": \"osMod\",\n \"parent_qualified_name\": \"osMod\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 1.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 1.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 1.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 1.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 1.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 360,\n \"end_line_number\": 360,\n \"line_range\": [\n 360,\n 360\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"reqCoverJs2\",\n \"qualified_name\": \"reqCoverJs2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function reqCoverJs2(value) { return value + 2; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 2.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 2.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 2.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 2.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 2.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 367,\n \"end_line_number\": 367,\n \"line_range\": [\n 367,\n 367\n ],\n \"declaration_order_index\": 36,\n \"symbol_name\": \"reqCoverJs3\",\n \"qualified_name\": \"reqCoverJs3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function reqCoverJs3(value) { return value + 3; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 3.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 3.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 3.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 3.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 3.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 374,\n \"end_line_number\": 374,\n \"line_range\": [\n 374,\n 374\n ],\n \"declaration_order_index\": 37,\n \"symbol_name\": \"reqCoverJs4\",\n \"qualified_name\": \"reqCoverJs4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function reqCoverJs4(value) { return value + 4; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 4.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 4.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 4.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 4.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 4.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 381,\n \"end_line_number\": 381,\n \"line_range\": [\n 381,\n 381\n ],\n \"declaration_order_index\": 38,\n \"symbol_name\": \"reqCoverJs5\",\n \"qualified_name\": \"reqCoverJs5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function reqCoverJs5(value) { return value + 5; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 5.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 5.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 5.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 5.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 5.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n }\n ],\n \"standalone_comments\": [\n {\n \"start_line_number\": 8,\n \"end_line_number\": 8,\n \"line_range\": [\n 8,\n 8\n ],\n \"text\": \"Single line comment\",\n \"text_lines\": [\n \"Single line comment\"\n ]\n },\n {\n \"start_line_number\": 9,\n \"end_line_number\": 10,\n \"line_range\": [\n 9,\n 10\n ],\n \"text\": \"Multi-line comment\",\n \"text_lines\": [\n \"Multi-line\",\n \"comment\"\n ]\n },\n {\n \"start_line_number\": 14,\n \"end_line_number\": 14,\n \"line_range\": [\n 14,\n 14\n ],\n \"text\": \"── Class with private fields and static blocks ───────────────────────\",\n \"text_lines\": [\n \"── Class with private fields and static blocks ───────────────────────\"\n ]\n },\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"text\": \"@brief Private instance counter, not accessible outside the class.\",\n \"text_lines\": [\n \"@brief Private instance counter, not accessible outside the class.\"\n ]\n },\n {\n \"start_line_number\": 24,\n \"end_line_number\": 24,\n \"line_range\": [\n 24,\n 24\n ],\n \"text\": \"@brief Static registry of all component instances.\",\n \"text_lines\": [\n \"@brief Static registry of all component instances.\"\n ]\n },\n {\n \"start_line_number\": 27,\n \"end_line_number\": 27,\n \"line_range\": [\n 27,\n 27\n ],\n \"text\": \"Static initialization block (ES2022)\",\n \"text_lines\": [\n \"Static initialization block (ES2022)\"\n ]\n },\n {\n \"start_line_number\": 32,\n \"end_line_number\": 35,\n \"line_range\": [\n 32,\n 35\n ],\n \"text\": \"@brief Construct a new component with an optional ID. @param {number} [id=0] Unique identifier for this instance.\",\n \"text_lines\": [\n \"@brief Construct a new component with an optional ID.\",\n \"@param {number} [id=0] Unique identifier for this instance.\"\n ]\n },\n {\n \"start_line_number\": 41,\n \"end_line_number\": 44,\n \"line_range\": [\n 41,\n 44\n ],\n \"text\": \"@brief Render the component output. @return {null} Placeholder render returning null.\",\n \"text_lines\": [\n \"@brief Render the component output.\",\n \"@return {null} Placeholder render returning null.\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"Delegate to internal render pipeline\",\n \"text_lines\": [\n \"Delegate to internal render pipeline\"\n ]\n },\n {\n \"start_line_number\": 50,\n \"end_line_number\": 53,\n \"line_range\": [\n 50,\n 53\n ],\n \"text\": \"@brief Retrieve the private instance ID. @return {number} The instance identifier.\",\n \"text_lines\": [\n \"@brief Retrieve the private instance ID.\",\n \"@return {number} The instance identifier.\"\n ]\n },\n {\n \"start_line_number\": 58,\n \"end_line_number\": 62,\n \"line_range\": [\n 58,\n 62\n ],\n \"text\": \"@brief Check if an ID exists in the static registry. @param {number} id The ID to look up. @return {boolean} True if the ID is registered.\",\n \"text_lines\": [\n \"@brief Check if an ID exists in the static registry.\",\n \"@param {number} id The ID to look up.\",\n \"@return {boolean} True if the ID is registered.\"\n ]\n },\n {\n \"start_line_number\": 68,\n \"end_line_number\": 68,\n \"line_range\": [\n 68,\n 68\n ],\n \"text\": \"── Subclass with method override ──────────────────────────────────────\",\n \"text_lines\": [\n \"── Subclass with method override ──────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 76,\n \"end_line_number\": 79,\n \"line_range\": [\n 76,\n 79\n ],\n \"text\": \"@brief Override render to return a div element. @return {Object} A simple virtual DOM node.\",\n \"text_lines\": [\n \"@brief Override render to return a div element.\",\n \"@return {Object} A simple virtual DOM node.\"\n ]\n },\n {\n \"start_line_number\": 81,\n \"end_line_number\": 81,\n \"line_range\": [\n 81,\n 81\n ],\n \"text\": \"Call super for side effects then override output\",\n \"text_lines\": [\n \"Call super for side effects then override output\"\n ]\n },\n {\n \"start_line_number\": 86,\n \"end_line_number\": 89,\n \"line_range\": [\n 86,\n 89\n ],\n \"text\": \"@brief Lifecycle method called after mounting. @return {void}\",\n \"text_lines\": [\n \"@brief Lifecycle method called after mounting.\",\n \"@return {void}\"\n ]\n },\n {\n \"start_line_number\": 95,\n \"end_line_number\": 95,\n \"line_range\": [\n 95,\n 95\n ],\n \"text\": \"── Regular and arrow functions ────────────────────────────────────────\",\n \"text_lines\": [\n \"── Regular and arrow functions ────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 113,\n \"end_line_number\": 113,\n \"line_range\": [\n 113,\n 113\n ],\n \"text\": \"Await the fetch and return result\",\n \"text_lines\": [\n \"Await the fetch and return result\"\n ]\n },\n {\n \"start_line_number\": 123,\n \"end_line_number\": 123,\n \"line_range\": [\n 123,\n 123\n ],\n \"text\": \"Log and prevent default browser behavior\",\n \"text_lines\": [\n \"Log and prevent default browser behavior\"\n ]\n },\n {\n \"start_line_number\": 146,\n \"end_line_number\": 146,\n \"line_range\": [\n 146,\n 146\n ],\n \"text\": \"── React HOC wrapper ──────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── React HOC wrapper ──────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 157,\n \"end_line_number\": 157,\n \"line_range\": [\n 157,\n 157\n ],\n \"text\": \"── Generator function ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Generator function ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 167,\n \"end_line_number\": 167,\n \"line_range\": [\n 167,\n 167\n ],\n \"text\": \"Yield incremented ID indefinitely\",\n \"text_lines\": [\n \"Yield incremented ID indefinitely\"\n ]\n },\n {\n \"start_line_number\": 185,\n \"end_line_number\": 185,\n \"line_range\": [\n 185,\n 185\n ],\n \"text\": \"── Async generator ────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Async generator ────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 200,\n \"end_line_number\": 200,\n \"line_range\": [\n 200,\n 200\n ],\n \"text\": \"No more pages — terminate stream\",\n \"text_lines\": [\n \"No more pages — terminate stream\"\n ]\n },\n {\n \"start_line_number\": 208,\n \"end_line_number\": 208,\n \"line_range\": [\n 208,\n 208\n ],\n \"text\": \"── IIFE for isolated scope ────────────────────────────────────────────\",\n \"text_lines\": [\n \"── IIFE for isolated scope ────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 214,\n \"end_line_number\": 214,\n \"line_range\": [\n 214,\n 214\n ],\n \"text\": \"Self-contained initialization logic\",\n \"text_lines\": [\n \"Self-contained initialization logic\"\n ]\n },\n {\n \"start_line_number\": 219,\n \"end_line_number\": 219,\n \"line_range\": [\n 219,\n 219\n ],\n \"text\": \"── Proxy ──────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Proxy ──────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 230,\n \"end_line_number\": 230,\n \"line_range\": [\n 230,\n 230\n ],\n \"text\": \"Log every property access\",\n \"text_lines\": [\n \"Log every property access\"\n ]\n },\n {\n \"start_line_number\": 235,\n \"end_line_number\": 235,\n \"line_range\": [\n 235,\n 235\n ],\n \"text\": \"Log every property mutation\",\n \"text_lines\": [\n \"Log every property mutation\"\n ]\n },\n {\n \"start_line_number\": 242,\n \"end_line_number\": 242,\n \"line_range\": [\n 242,\n 242\n ],\n \"text\": \"── Computed property names ────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Computed property names ────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 260,\n \"end_line_number\": 260,\n \"line_range\": [\n 260,\n 260\n ],\n \"text\": \"── Promise chain ──────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Promise chain ──────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 272,\n \"end_line_number\": 272,\n \"line_range\": [\n 272,\n 272\n ],\n \"text\": \"Transform the response payload\",\n \"text_lines\": [\n \"Transform the response payload\"\n ]\n },\n {\n \"start_line_number\": 276,\n \"end_line_number\": 276,\n \"line_range\": [\n 276,\n 276\n ],\n \"text\": \"Fallback on fetch failure\",\n \"text_lines\": [\n \"Fallback on fetch failure\"\n ]\n },\n {\n \"start_line_number\": 282,\n \"end_line_number\": 282,\n \"line_range\": [\n 282,\n 282\n ],\n \"text\": \"── Destructuring and defaults ─────────────────────────────────────────\",\n \"text_lines\": [\n \"── Destructuring and defaults ─────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 299,\n \"end_line_number\": 299,\n \"line_range\": [\n 299,\n 299\n ],\n \"text\": \"── WeakMap for private state ──────────────────────────────────────────\",\n \"text_lines\": [\n \"── WeakMap for private state ──────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 301,\n \"end_line_number\": 301,\n \"line_range\": [\n 301,\n 301\n ],\n \"text\": \"@brief WeakMap storing private state keyed by object reference.\",\n \"text_lines\": [\n \"@brief WeakMap storing private state keyed by object reference.\"\n ]\n },\n {\n \"start_line_number\": 314,\n \"end_line_number\": 314,\n \"line_range\": [\n 314,\n 314\n ],\n \"text\": \"── Dynamic import ─────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Dynamic import ─────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 323,\n \"end_line_number\": 323,\n \"line_range\": [\n 323,\n 323\n ],\n \"text\": \"Dynamic import for code-splitting\",\n \"text_lines\": [\n \"Dynamic import for code-splitting\"\n ]\n },\n {\n \"start_line_number\": 328,\n \"end_line_number\": 328,\n \"line_range\": [\n 328,\n 328\n ],\n \"text\": \"coverage extension block\",\n \"text_lines\": [\n \"coverage extension block\"\n ]\n },\n {\n \"start_line_number\": 347,\n \"end_line_number\": 347,\n \"line_range\": [\n 347,\n 347\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 348,\n \"end_line_number\": 348,\n \"line_range\": [\n 348,\n 348\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\n ]\n },\n {\n \"start_line_number\": 349,\n \"end_line_number\": 349,\n \"line_range\": [\n 349,\n 349\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 355,\n \"end_line_number\": 355,\n \"line_range\": [\n 355,\n 355\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 2\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 2\"\n ]\n },\n {\n \"start_line_number\": 356,\n \"end_line_number\": 356,\n \"line_range\": [\n 356,\n 356\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 362,\n \"end_line_number\": 362,\n \"line_range\": [\n 362,\n 362\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 3\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 3\"\n ]\n },\n {\n \"start_line_number\": 363,\n \"end_line_number\": 363,\n \"line_range\": [\n 363,\n 363\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 369,\n \"end_line_number\": 369,\n \"line_range\": [\n 369,\n 369\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 4\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 4\"\n ]\n },\n {\n \"start_line_number\": 370,\n \"end_line_number\": 370,\n \"line_range\": [\n 370,\n 370\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 376,\n \"end_line_number\": 376,\n \"line_range\": [\n 376,\n 376\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 5\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 5\"\n ]\n },\n {\n \"start_line_number\": 377,\n \"end_line_number\": 377,\n \"line_range\": [\n 377,\n 377\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 383,\n \"end_line_number\": 383,\n \"line_range\": [\n 383,\n 383\n ],\n \"text\": \"REQ-COVER-SRS-231 END\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 END\"\n ]\n }\n ]\n }\n ]\n}\n",
|
|
3
|
+
"stdout": "# fixture_javascript.js | JavaScript | 383L | 39 symbols | 5 imports | 88 comments\n> Path: `tests/fixtures/fixture_javascript.js`\n- @brief Comprehensive JavaScript test fixture for parser validation.\n- @details Covers classes with private fields, generators, async generators,\nproxies, symbols, IIFE, dynamic imports, destructuring, computed\nproperties, and chained promise patterns.\n\n## Imports\n```\nimport React from 'react';\nimport { useState, useEffect } from 'react';\nimport fs from 'fs';\nimport path from 'path';\nimport url from 'url';\n```\n\n## Definitions\n\n### class `class MyComponent` (L20-66)\n- @brief React-like component with private fields and static initialization.\n- @brief Private instance counter, not accessible outside the class.\n\n### class `class EnhancedComponent extends MyComponent` : MyComponent (L75-93)\n- @brief Extended component with lifecycle hooks.\n- @brief Override render to return a div element.\n- @return {Object} A simple virtual DOM node.\n\n### fn `function greet(name)` (L103-105)\n- @brief Greet a person by name.\n- @param {string} name The person's name.\n- @return {string} Greeting message.\n\n### fn `async function fetchData()` (L112-115)\n- @brief Fetch data from the API endpoint asynchronously.\n- @return {Promise<Response>} The fetch response promise.\n\n### fn `const handler = (event) =>` (L122-126)\n- @brief Event handler arrow function for UI events.\n- @param {Event} event The DOM event object.\n\n### fn `const processItems = ({ items, count }) =>` (L134-136)\n- @brief Arrow function with destructuring parameter.\n- @param {{ items: Array, count: number }} param0 Destructured config.\n- @return {Array} Processed item list.\n\n- const `const MAX_SIZE = 100;` (L141)\n- const `const PLUGIN_KEY = Symbol('plugin');` (L144)\n### comp `const MyWrapped = React.memo(() =>` (L153-155)\n- @brief Memoized functional component demonstrating React.memo usage.\n- @return {null} Renders nothing; serves as a parser test case.\n\n### fn `function* idGenerator()` (L164-170)\n- @brief Infinite generator producing sequential integer IDs.\n@yields {number} The next unique ID.\n\n### fn `function* rangeGenerator(start, end)` (L179-183)\n- @brief Generator yielding integers in a bounded range.\n- @param {number} start Inclusive lower bound.\n- @param {number} end Exclusive upper bound.\n@yields {number} Each integer from start to end-1.\n\n### fn `async function* asyncDataStream(url)` (L194-206)\n- @brief Asynchronously yield paginated API results.\n- @param {string} url Base URL for pagination.\n@yields {Object} Each page's parsed JSON data.\n\n### fn `const initResult = (() =>` (L213-217)\n- @brief Immediately invoked function expression for module initialization.\n\n### fn `function createProxy(target)` (L227-240)\n- @brief Create a logging proxy around any target object.\n- @param {Object} target The object to wrap with proxy traps.\n- @return {Proxy} Proxied object that logs property access.\n\n### fn `function buildDynamic(prefix)` (L250-258)\n- @brief Build an object with computed property keys.\n- @param {string} prefix Key prefix for dynamic properties.\n- @return {Object} Object with dynamically named properties.\n\n### fn `function fetchAndProcess(url)` (L268-280)\n- @brief Demonstrate chained promise pattern with error recovery.\n- @param {string} url The resource URL to fetch.\n- @return {Promise<Object>} Processed data or fallback on error.\n\n### fn `function configureApp({ host = 'localhost', port = 3000, db: { url: dbUrl = 'sqlite://' } = {} } = {})` (L290-292)\n- @brief Configure application with deep destructuring defaults.\n- @param {Object} options Configuration object with nested defaults.\n- @return {Object} Resolved configuration.\n\n### mod `const fs = require('fs')` (L297-307)\n- @brief Load the Node.js filesystem module via CommonJS. */\n\n### fn `function setPrivate(obj, data)` (L310-312)\n- @brief Store private data associated with an object.\n- @param {Object} obj The key object.\n- @param {*} data The private data to associate.\n\n### fn `async function loadPlugin(name)` (L322-326)\n- @brief Dynamically import a module at runtime.\n- @param {string} name Module specifier to import.\n- @return {Promise<Module>} The loaded module namespace.\n\n- class `export class ExtraService { constructor() { this.ready = true; } }` (L332)\n- class `class HelperComponent { render() { return null; } }` (L333)\n- class `export default class WidgetFactory { create() { return {}; } }` (L334)\n### comp `const BoundComponent = React.memo(() => null)` (L335-336)\n\n- comp `const ForwardedWidget = React.forwardRef((_, ref) => ({ ref }));` (L336)\n### comp `const LazyWidget = React.lazy(() => import('./Widget'))` (L337-353)\n\n### comp `const MemoPanel = memo(() => null)` (L338-353)\n\n- const `const API_TOKEN = 'tok';` (L339)\n- const `const CACHE_SIZE = 128;` (L340)\n- const `const RETRY_LIMIT = 5;` (L341)\n### mod `const pathMod = require('path')` (L342-353)\n\n### mod `const cryptoMod = require('crypto')` (L343-353)\n\n### mod `const utilMod = require('util')` (L344-353)\n\n### mod `const osMod = require('os')` (L345-353)\n- fn `function reqCoverJs1(value) { return value + 1; }` (L353)\n - @brief Coverage helper construct 1.\n - @details Provides deterministic fixture-level Doxygen coverage block 1.\n - @param value Input value for helper construct 1.\n - @return Output value for helper construct 1.\n\n- fn `function reqCoverJs2(value) { return value + 2; }` (L360)\n- @brief Coverage helper construct 2.\n- @details Provides deterministic fixture-level Doxygen coverage block 2.\n- @param value Input value for helper construct 2.\n- @return Output value for helper construct 2.\n- fn `function reqCoverJs3(value) { return value + 3; }` (L367)\n- @brief Coverage helper construct 3.\n- @details Provides deterministic fixture-level Doxygen coverage block 3.\n- @param value Input value for helper construct 3.\n- @return Output value for helper construct 3.\n- fn `function reqCoverJs4(value) { return value + 4; }` (L374)\n- @brief Coverage helper construct 4.\n- @details Provides deterministic fixture-level Doxygen coverage block 4.\n- @param value Input value for helper construct 4.\n- @return Output value for helper construct 4.\n- fn `function reqCoverJs5(value) { return value + 5; }` (L381)\n- @brief Coverage helper construct 5.\n- @details Provides deterministic fixture-level Doxygen coverage block 5.\n- @param value Input value for helper construct 5.\n- @return Output value for helper construct 5.\n## Symbol Index\n|Symbol|Kind|Vis|Lines|Sig|\n|---|---|---|---|---|\n|`MyComponent`|class||20-66|class MyComponent|\n|`EnhancedComponent`|class||75-93|class EnhancedComponent extends MyComponent|\n|`greet`|fn||103-105|function greet(name)|\n|`fetchData`|fn||112-115|async function fetchData()|\n|`handler`|fn||122-126|const handler = (event) =>|\n|`processItems`|fn||134-136|const processItems = ({ items, count }) =>|\n|`MAX_SIZE`|const||141||\n|`PLUGIN_KEY`|const||144||\n|`MyWrapped`|comp||153-155||\n|`idGenerator`|fn||164-170|function* idGenerator()|\n|`rangeGenerator`|fn||179-183|function* rangeGenerator(start, end)|\n|`asyncDataStream`|fn||194-206|async function* asyncDataStream(url)|\n|`initResult`|fn||213-217|const initResult = (() =>|\n|`createProxy`|fn||227-240|function createProxy(target)|\n|`buildDynamic`|fn||250-258|function buildDynamic(prefix)|\n|`fetchAndProcess`|fn||268-280|function fetchAndProcess(url)|\n|`configureApp`|fn||290-292|function configureApp({ host = 'localhost', port = 3000, ...|\n|`fs`|mod||297-307||\n|`setPrivate`|fn||310-312|function setPrivate(obj, data)|\n|`loadPlugin`|fn||322-326|async function loadPlugin(name)|\n|`ExtraService`|class||332|export class ExtraService { constructor() { this.ready = ...|\n|`HelperComponent`|class||333|class HelperComponent { render() { return null; } }|\n|`WidgetFactory`|class||334|export default class WidgetFactory { create() { return {}...|\n|`BoundComponent`|comp||335-336||\n|`ForwardedWidget`|comp||336||\n|`LazyWidget`|comp||337-353||\n|`MemoPanel`|comp||338-353||\n|`API_TOKEN`|const||339||\n|`CACHE_SIZE`|const||340||\n|`RETRY_LIMIT`|const||341||\n|`pathMod`|mod||342-353||\n|`cryptoMod`|mod||343-353||\n|`utilMod`|mod||344-353||\n|`osMod`|mod||345-353||\n|`osMod.reqCoverJs1`|fn||353|function reqCoverJs1(value) { return value + 1; }|\n|`reqCoverJs2`|fn||360|function reqCoverJs2(value) { return value + 2; }|\n|`reqCoverJs3`|fn||367|function reqCoverJs3(value) { return value + 3; }|\n|`reqCoverJs4`|fn||374|function reqCoverJs4(value) { return value + 4; }|\n|`reqCoverJs5`|fn||381|function reqCoverJs5(value) { return value + 5; }|\n\n",
|
|
4
4
|
"stderr": ""
|
|
5
5
|
}
|