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
|
@@ -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_kotlin.kt\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_kotlin.kt\"\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\": 58,\n \"total_import_count\": 5,\n \"total_comment_count\": 77,\n \"total_standalone_comment_count\": 32,\n \"total_doxygen_field_count\": 124,\n \"symbol_kind_counts\": {\n \"CLASS\": 9,\n \"CONSTANT\": 9,\n \"ENUM\": 5,\n \"FUNCTION\": 20,\n \"INTERFACE\": 5,\n \"MODULE\": 5,\n \"VARIABLE\": 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_kotlin.kt\"\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_kotlin.kt\",\n \"relative_path\": \"tests/fixtures/fixture_kotlin.kt\",\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\": 451,\n \"line_range\": [\n 1,\n 451\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_kotlin.kt\",\n \"canonical_path\": \"tests/fixtures/fixture_kotlin.kt\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_kotlin.kt\",\n \"file_name\": \"fixture_kotlin.kt\",\n \"file_extension\": \".kt\",\n \"language_id\": \"kotlin\",\n \"language_name\": \"Kotlin\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 5,\n \"symbol_count\": 58,\n \"comment_count\": 77,\n \"standalone_comment_count\": 32,\n \"doxygen_field_count\": 124,\n \"file_doxygen\": {\n \"brief\": [\n \"Comprehensive Kotlin test fixture for parser validation.\"\n ],\n \"details\": [\n \"Covers extension functions, inline/reified generics, DSL builders,\\ndelegation, coroutine scope, destructuring, sealed interfaces,\\nvalue classes, operator overloading, and lateinit.\"\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\": \"kotlin.collections.List\",\n \"statement_text\": \"import kotlin.collections.List\"\n },\n {\n \"start_line_number\": 12,\n \"end_line_number\": 12,\n \"line_range\": [\n 12,\n 12\n ],\n \"import_name\": \"kotlinx.coroutines.flow.Flow\",\n \"statement_text\": \"import kotlinx.coroutines.flow.Flow\"\n },\n {\n \"start_line_number\": 13,\n \"end_line_number\": 13,\n \"line_range\": [\n 13,\n 13\n ],\n \"import_name\": \"kotlinx.coroutines.flow.flow\",\n \"statement_text\": \"import kotlinx.coroutines.flow.flow\"\n },\n {\n \"start_line_number\": 388,\n \"end_line_number\": 388,\n \"line_range\": [\n 388,\n 388\n ],\n \"import_name\": \"kotlin.math.max\",\n \"statement_text\": \"import kotlin.math.max\"\n },\n {\n \"start_line_number\": 389,\n \"end_line_number\": 389,\n \"line_range\": [\n 389,\n 389\n ],\n \"import_name\": \"kotlin.math.min\",\n \"statement_text\": \"import kotlin.math.min\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 19,\n \"end_line_number\": 61,\n \"line_range\": [\n 19,\n 61\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"User\",\n \"qualified_name\": \"User\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"data class User(val name: String, val age: Int = 0)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"@Deprecated(\\\"Use UserV2 instead\\\", replaceWith = ReplaceWith(\\\"UserV2\\\"))\",\n \"attached_comment_summary_text\": \"@brief Marks a class or function as deprecated with migration path.\",\n \"attached_comment_lines\": [\n \"@brief Marks a class or function as deprecated with migration path.\"\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\": \"── Sealed class hierarchy ─────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Sealed class hierarchy ─────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 23,\n \"end_line_number\": 27,\n \"line_range\": [\n 23,\n 27\n ],\n \"text\": \"@class Result @brief Sealed class representing success/failure outcomes. @tparam T The success value type.\",\n \"text_lines\": [\n \"@class Result @brief Sealed class representing success/failure outcomes. @tparam T The success value type.\"\n ]\n },\n {\n \"start_line_number\": 29,\n \"end_line_number\": 33,\n \"line_range\": [\n 29,\n 33\n ],\n \"text\": \"@class Success @brief Successful outcome holding a value. @param value The result data.\",\n \"text_lines\": [\n \"@class Success @brief Successful outcome holding a value. @param value The result data.\"\n ]\n },\n {\n \"start_line_number\": 36,\n \"end_line_number\": 41,\n \"line_range\": [\n 36,\n 41\n ],\n \"text\": \"@class Error @brief Failed outcome holding an error message. @param message Description of the failure. @param cause Optional underlying exception.\",\n \"text_lines\": [\n \"@class Error @brief Failed outcome holding an error message. @param message Description of the failure. @param cause Optional underlying exception.\"\n ]\n },\n {\n \"start_line_number\": 44,\n \"end_line_number\": 47,\n \"line_range\": [\n 44,\n 47\n ],\n \"text\": \"@object Loading @brief Singleton state representing an in-progress operation.\",\n \"text_lines\": [\n \"@object Loading @brief Singleton state representing an in-progress operation.\"\n ]\n },\n {\n \"start_line_number\": 50,\n \"end_line_number\": 55,\n \"line_range\": [\n 50,\n 55\n ],\n \"text\": \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\",\n \"text_lines\": [\n \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 28,\n \"end_line_number\": 61,\n \"line_range\": [\n 28,\n 61\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"Result\",\n \"qualified_name\": \"Result\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"sealed class Result<out T>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Sealed class representing success/failure outcomes.\\n@tparam T The success value type.\",\n \"doxygen\": {\n \"brief\": [\n \"Sealed class representing success/failure outcomes.\\n@tparam T The success value type.\",\n \"Successful outcome holding a value.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"The result data.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 29,\n \"end_line_number\": 33,\n \"line_range\": [\n 29,\n 33\n ],\n \"text\": \"@class Success @brief Successful outcome holding a value. @param value The result data.\",\n \"text_lines\": [\n \"@class Success @brief Successful outcome holding a value. @param value The result data.\"\n ]\n },\n {\n \"start_line_number\": 36,\n \"end_line_number\": 41,\n \"line_range\": [\n 36,\n 41\n ],\n \"text\": \"@class Error @brief Failed outcome holding an error message. @param message Description of the failure. @param cause Optional underlying exception.\",\n \"text_lines\": [\n \"@class Error @brief Failed outcome holding an error message. @param message Description of the failure. @param cause Optional underlying exception.\"\n ]\n },\n {\n \"start_line_number\": 44,\n \"end_line_number\": 47,\n \"line_range\": [\n 44,\n 47\n ],\n \"text\": \"@object Loading @brief Singleton state representing an in-progress operation.\",\n \"text_lines\": [\n \"@object Loading @brief Singleton state representing an in-progress operation.\"\n ]\n },\n {\n \"start_line_number\": 50,\n \"end_line_number\": 55,\n \"line_range\": [\n 50,\n 55\n ],\n \"text\": \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\",\n \"text_lines\": [\n \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 34,\n \"end_line_number\": 60,\n \"line_range\": [\n 34,\n 60\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"Success\",\n \"qualified_name\": \"Success\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"data class Success<T>(val value: T) : Result<T>()\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Successful outcome holding a value.\",\n \"doxygen\": {\n \"brief\": [\n \"Successful outcome holding a value.\",\n \"Failed outcome holding an error message.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"The result data.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"message\",\n \"description\": \"Description of the failure.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"cause\",\n \"description\": \"Optional underlying exception.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 36,\n \"end_line_number\": 41,\n \"line_range\": [\n 36,\n 41\n ],\n \"text\": \"@class Error @brief Failed outcome holding an error message. @param message Description of the failure. @param cause Optional underlying exception.\",\n \"text_lines\": [\n \"@class Error @brief Failed outcome holding an error message. @param message Description of the failure. @param cause Optional underlying exception.\"\n ]\n },\n {\n \"start_line_number\": 44,\n \"end_line_number\": 47,\n \"line_range\": [\n 44,\n 47\n ],\n \"text\": \"@object Loading @brief Singleton state representing an in-progress operation.\",\n \"text_lines\": [\n \"@object Loading @brief Singleton state representing an in-progress operation.\"\n ]\n },\n {\n \"start_line_number\": 50,\n \"end_line_number\": 55,\n \"line_range\": [\n 50,\n 55\n ],\n \"text\": \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\",\n \"text_lines\": [\n \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 42,\n \"end_line_number\": 60,\n \"line_range\": [\n 42,\n 60\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"Error\",\n \"qualified_name\": \"Error\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"data class Error(val message: String, val cause: Throwable? = null) : Result<Nothing>()\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"inherits_text\": \"Result<Nothing>()\",\n \"attached_comment_summary_text\": \"Failed outcome holding an error message.\",\n \"doxygen\": {\n \"brief\": [\n \"Failed outcome holding an error message.\",\n \"Singleton state representing an in-progress operation.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"message\",\n \"description\": \"Description of the failure.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"cause\",\n \"description\": \"Optional underlying exception.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 44,\n \"end_line_number\": 47,\n \"line_range\": [\n 44,\n 47\n ],\n \"text\": \"@object Loading @brief Singleton state representing an in-progress operation.\",\n \"text_lines\": [\n \"@object Loading @brief Singleton state representing an in-progress operation.\"\n ]\n },\n {\n \"start_line_number\": 50,\n \"end_line_number\": 55,\n \"line_range\": [\n 50,\n 55\n ],\n \"text\": \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\",\n \"text_lines\": [\n \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 48,\n \"end_line_number\": 60,\n \"line_range\": [\n 48,\n 60\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"Loading\",\n \"qualified_name\": \"Loading\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"object Loading : Result<Nothing>()\",\n \"child_symbol_names\": [\n \"map\"\n ],\n \"child_qualified_names\": [\n \"Loading.map\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Singleton state representing an in-progress operation.\",\n \"doxygen\": {\n \"brief\": [\n \"Singleton state representing an in-progress operation.\",\n \"Map the success value using a transform function. @tparam R The target type after transformation.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"transform\",\n \"description\": \"Function converting T to R.\"\n }\n ],\n \"returns\": [\n \"Transformed Result or original error/loading state.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 50,\n \"end_line_number\": 55,\n \"line_range\": [\n 50,\n 55\n ],\n \"text\": \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\",\n \"text_lines\": [\n \"@brief Map the success value using a transform function. @tparam R The target type after transformation. @param transform Function converting T to R. @return Transformed Result or original error/loading state.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 56,\n \"end_line_number\": 60,\n \"line_range\": [\n 56,\n 60\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"map\",\n \"qualified_name\": \"Loading.map\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun <R> map(transform: (T) -> R): Result<R> = when (this)\",\n \"parent_symbol_name\": \"Loading\",\n \"parent_qualified_name\": \"Loading\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Map the success value using a transform function.\\n@tparam R The target type after transformation.\",\n \"doxygen\": {\n \"brief\": [\n \"Map the success value using a transform function.\\n@tparam R The target type after transformation.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"transform\",\n \"description\": \"Function converting T to R.\"\n }\n ],\n \"returns\": [\n \"Transformed Result or original error/loading state.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 70,\n \"end_line_number\": 90,\n \"line_range\": [\n 70,\n 90\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"Repository\",\n \"qualified_name\": \"Repository\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"interface Repository<T>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Generic CRUD repository interface.\\n@tparam T Entity type managed by this repository.\",\n \"doxygen\": {\n \"brief\": [\n \"Generic CRUD repository interface.\\n@tparam T Entity type managed by this repository.\",\n \"Find an entity by its unique identifier.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"id\",\n \"description\": \"Entity ID.\"\n }\n ],\n \"returns\": [\n \"The entity or null if not found.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 71,\n \"end_line_number\": 75,\n \"line_range\": [\n 71,\n 75\n ],\n \"text\": \"@brief Find an entity by its unique identifier. @param id Entity ID. @return The entity or null if not found.\",\n \"text_lines\": [\n \"@brief Find an entity by its unique identifier. @param id Entity ID. @return The entity or null if not found.\"\n ]\n },\n {\n \"start_line_number\": 78,\n \"end_line_number\": 82,\n \"line_range\": [\n 78,\n 82\n ],\n \"text\": \"@brief Persist an entity. @param entity The entity to save. @return True if save succeeded.\",\n \"text_lines\": [\n \"@brief Persist an entity. @param entity The entity to save. @return True if save succeeded.\"\n ]\n },\n {\n \"start_line_number\": 85,\n \"end_line_number\": 88,\n \"line_range\": [\n 85,\n 88\n ],\n \"text\": \"@brief Retrieve all entities as a Flow stream. @return Flow emitting all stored entities.\",\n \"text_lines\": [\n \"@brief Retrieve all entities as a Flow stream. @return Flow emitting all stored entities.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 76,\n \"end_line_number\": 96,\n \"line_range\": [\n 76,\n 96\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"findById\",\n \"qualified_name\": \"findById\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun findById(id: Int): T?\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Find an entity by its unique identifier.\",\n \"doxygen\": {\n \"brief\": [\n \"Find an entity by its unique identifier.\",\n \"Persist an entity.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"id\",\n \"description\": \"Entity ID.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"entity\",\n \"description\": \"The entity to save.\"\n }\n ],\n \"returns\": [\n \"The entity or null if not found.\",\n \"True if save succeeded.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 78,\n \"end_line_number\": 82,\n \"line_range\": [\n 78,\n 82\n ],\n \"text\": \"@brief Persist an entity. @param entity The entity to save. @return True if save succeeded.\",\n \"text_lines\": [\n \"@brief Persist an entity. @param entity The entity to save. @return True if save succeeded.\"\n ]\n },\n {\n \"start_line_number\": 85,\n \"end_line_number\": 88,\n \"line_range\": [\n 85,\n 88\n ],\n \"text\": \"@brief Retrieve all entities as a Flow stream. @return Flow emitting all stored entities.\",\n \"text_lines\": [\n \"@brief Retrieve all entities as a Flow stream. @return Flow emitting all stored entities.\"\n ]\n },\n {\n \"start_line_number\": 92,\n \"end_line_number\": 95,\n \"line_range\": [\n 92,\n 95\n ],\n \"text\": \"@interface Identifiable @brief Sealed interface requiring an ID property.\",\n \"text_lines\": [\n \"@interface Identifiable @brief Sealed interface requiring an ID property.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 83,\n \"end_line_number\": 96,\n \"line_range\": [\n 83,\n 96\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"save\",\n \"qualified_name\": \"save\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun save(entity: T): Boolean\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Persist an entity.\",\n \"doxygen\": {\n \"brief\": [\n \"Persist an entity.\",\n \"Retrieve all entities as a Flow stream.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"entity\",\n \"description\": \"The entity to save.\"\n }\n ],\n \"returns\": [\n \"True if save succeeded.\",\n \"Flow emitting all stored entities.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 85,\n \"end_line_number\": 88,\n \"line_range\": [\n 85,\n 88\n ],\n \"text\": \"@brief Retrieve all entities as a Flow stream. @return Flow emitting all stored entities.\",\n \"text_lines\": [\n \"@brief Retrieve all entities as a Flow stream. @return Flow emitting all stored entities.\"\n ]\n },\n {\n \"start_line_number\": 92,\n \"end_line_number\": 95,\n \"line_range\": [\n 92,\n 95\n ],\n \"text\": \"@interface Identifiable @brief Sealed interface requiring an ID property.\",\n \"text_lines\": [\n \"@interface Identifiable @brief Sealed interface requiring an ID property.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 96,\n \"line_range\": [\n 89,\n 96\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"findAll\",\n \"qualified_name\": \"findAll\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun findAll(): Flow<T>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Retrieve all entities as a Flow stream.\",\n \"doxygen\": {\n \"brief\": [\n \"Retrieve all entities as a Flow stream.\",\n \"Sealed interface requiring an ID property.\"\n ],\n \"returns\": [\n \"Flow emitting all stored entities.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 92,\n \"end_line_number\": 95,\n \"line_range\": [\n 92,\n 95\n ],\n \"text\": \"@interface Identifiable @brief Sealed interface requiring an ID property.\",\n \"text_lines\": [\n \"@interface Identifiable @brief Sealed interface requiring an ID property.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 98,\n \"end_line_number\": 98,\n \"line_range\": [\n 98,\n 98\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"id\",\n \"qualified_name\": \"id\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val id: Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Unique entity identifier. */\",\n \"doxygen\": {\n \"brief\": [\n \"Unique entity identifier. */\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 107,\n \"end_line_number\": 123,\n \"line_range\": [\n 107,\n 123\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"Color\",\n \"qualified_name\": \"Color\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum class Color(val hex: String)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Color enum with hex value property and companion factory.\",\n \"doxygen\": {\n \"brief\": [\n \"Color enum with hex value property and companion factory.\",\n \"Red color channel.\",\n \"Green color channel.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 108,\n \"end_line_number\": 108,\n \"line_range\": [\n 108,\n 108\n ],\n \"text\": \"@brief Red color channel.\",\n \"text_lines\": [\n \"@brief Red color channel.\"\n ]\n },\n {\n \"start_line_number\": 110,\n \"end_line_number\": 110,\n \"line_range\": [\n 110,\n 110\n ],\n \"text\": \"@brief Green color channel.\",\n \"text_lines\": [\n \"@brief Green color channel.\"\n ]\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 112,\n \"line_range\": [\n 112,\n 112\n ],\n \"text\": \"@brief Blue color channel.\",\n \"text_lines\": [\n \"@brief Blue color channel.\"\n ]\n },\n {\n \"start_line_number\": 116,\n \"end_line_number\": 120,\n \"line_range\": [\n 116,\n 120\n ],\n \"text\": \"@brief Parse a color from its hex string. @param hex Hex color code including '#' prefix. @return Matching Color or null.\",\n \"text_lines\": [\n \"@brief Parse a color from its hex string. @param hex Hex color code including '#' prefix. @return Matching Color or null.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 115,\n \"end_line_number\": 122,\n \"line_range\": [\n 115,\n 122\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"companion object\",\n \"qualified_name\": \"companion object\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"companion object\",\n \"child_symbol_names\": [\n \"fromHex\"\n ],\n \"child_qualified_names\": [\n \"companion object.fromHex\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Blue color channel. */\",\n \"doxygen\": {\n \"brief\": [\n \"Blue color channel. */\",\n \"Parse a color from its hex string.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"hex\",\n \"description\": \"Hex color code including '#' prefix.\"\n }\n ],\n \"returns\": [\n \"Matching Color or null.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 116,\n \"end_line_number\": 120,\n \"line_range\": [\n 116,\n 120\n ],\n \"text\": \"@brief Parse a color from its hex string. @param hex Hex color code including '#' prefix. @return Matching Color or null.\",\n \"text_lines\": [\n \"@brief Parse a color from its hex string. @param hex Hex color code including '#' prefix. @return Matching Color or null.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 121,\n \"end_line_number\": 121,\n \"line_range\": [\n 121,\n 121\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"fromHex\",\n \"qualified_name\": \"companion object.fromHex\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun fromHex(hex: String): Color? = values().find { it.hex == hex }\",\n \"parent_symbol_name\": \"companion object\",\n \"parent_qualified_name\": \"companion object\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Parse a color from its hex string.\",\n \"doxygen\": {\n \"brief\": [\n \"Parse a color from its hex string.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"hex\",\n \"description\": \"Hex color code including '#' prefix.\"\n }\n ],\n \"returns\": [\n \"Matching Color or null.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 155,\n \"line_range\": [\n 134,\n 155\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"Entity\",\n \"qualified_name\": \"Entity\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"data class Entity(\",\n \"child_symbol_names\": [\n \"name\",\n \"status\",\n \"domain\"\n ],\n \"child_qualified_names\": [\n \"Entity.name\",\n \"Entity.status\",\n \"Entity.domain\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Data class combining Identifiable with named properties.\",\n \"doxygen\": {\n \"brief\": [\n \"Data class combining Identifiable with named properties.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"id\",\n \"description\": \"Unique identifier.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"name\",\n \"description\": \"Entity display name.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"status\",\n \"description\": \"Current lifecycle status.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 140,\n \"end_line_number\": 140,\n \"line_range\": [\n 140,\n 140\n ],\n \"text\": \"── Value class (inline class) ─────────────────────────────────────────\",\n \"text_lines\": [\n \"── Value class (inline class) ─────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 142,\n \"end_line_number\": 146,\n \"line_range\": [\n 142,\n 146\n ],\n \"text\": \"@class EmailAddress @brief Inline value class wrapping a validated email string. @param value The raw email address string.\",\n \"text_lines\": [\n \"@class EmailAddress @brief Inline value class wrapping a validated email string. @param value The raw email address string.\"\n ]\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 153,\n \"line_range\": [\n 153,\n 153\n ],\n \"text\": \"@brief Extract the domain part of the email.\",\n \"text_lines\": [\n \"@brief Extract the domain part of the email.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 136,\n \"end_line_number\": 136,\n \"line_range\": [\n 136,\n 136\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"name\",\n \"qualified_name\": \"Entity.name\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val name: String,\",\n \"parent_symbol_name\": \"Entity\",\n \"parent_qualified_name\": \"Entity\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 137,\n \"end_line_number\": 137,\n \"line_range\": [\n 137,\n 137\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"status\",\n \"qualified_name\": \"Entity.status\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val status: String = \\\"active\\\",\",\n \"parent_symbol_name\": \"Entity\",\n \"parent_qualified_name\": \"Entity\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 154,\n \"end_line_number\": 154,\n \"line_range\": [\n 154,\n 154\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"domain\",\n \"qualified_name\": \"Entity.domain\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val domain: String get() = value.substringAfter('@')\",\n \"parent_symbol_name\": \"Entity\",\n \"parent_qualified_name\": \"Entity\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Extract the domain part of the email. */\",\n \"doxygen\": {\n \"brief\": [\n \"Extract the domain part of the email. */\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 165,\n \"end_line_number\": 167,\n \"line_range\": [\n 165,\n 167\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"greet\",\n \"qualified_name\": \"greet\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun greet(name: String): String\",\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 \"description\": \"The person's name.\"\n }\n ],\n \"returns\": [\n \"Greeting message string.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 166,\n \"text\": \"return \\\"Hello $name\\\"\"\n }\n ]\n },\n {\n \"start_line_number\": 174,\n \"end_line_number\": 177,\n \"line_range\": [\n 174,\n 177\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"fetchData\",\n \"qualified_name\": \"fetchData\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"suspend fun fetchData(): String\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Suspend function simulating async data retrieval.\",\n \"doxygen\": {\n \"brief\": [\n \"Suspend function simulating async data retrieval.\"\n ],\n \"returns\": [\n \"Retrieved data as a string.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 175,\n \"end_line_number\": 175,\n \"line_range\": [\n 175,\n 175\n ],\n \"text\": \"Simulate network delay\",\n \"text_lines\": [\n \"Simulate network delay\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 176,\n \"text\": \"return \\\"data\\\"\"\n }\n ]\n },\n {\n \"start_line_number\": 186,\n \"end_line_number\": 188,\n \"line_range\": [\n 186,\n 188\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"processItems\",\n \"qualified_name\": \"processItems\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun processItems(items: List<String>, transform: (String) -> String): List<String>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Higher-order function with trailing lambda syntax.\",\n \"doxygen\": {\n \"brief\": [\n \"Higher-order function with trailing lambda syntax.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"items\",\n \"description\": \"List of strings to process.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"transform\",\n \"description\": \"Function applied to each item.\"\n }\n ],\n \"returns\": [\n \"List of transformed results.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 187,\n \"text\": \"return items.map(transform)\"\n }\n ]\n },\n {\n \"start_line_number\": 205,\n \"end_line_number\": 205,\n \"line_range\": [\n 205,\n 205\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"String\",\n \"qualified_name\": \"String\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val String.lastChar: Char?\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Extension property returning the last character or null.\\n@receiver String The string to inspect.\",\n \"doxygen\": {\n \"brief\": [\n \"Extension property returning the last character or null.\\n@receiver String The string to inspect.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 229,\n \"end_line_number\": 249,\n \"line_range\": [\n 229,\n 249\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"Vector2\",\n \"qualified_name\": \"Vector2\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"data class Vector2(val x: Double, val y: Double)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"2D vector with operator overloading for arithmetic.\",\n \"doxygen\": {\n \"brief\": [\n \"2D vector with operator overloading for arithmetic.\",\n \"Add two vectors component-wise.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"x\",\n \"description\": \"Horizontal component.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"y\",\n \"description\": \"Vertical component.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"other\",\n \"description\": \"The vector to add.\"\n }\n ],\n \"returns\": [\n \"Resulting sum vector.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 230,\n \"end_line_number\": 234,\n \"line_range\": [\n 230,\n 234\n ],\n \"text\": \"@brief Add two vectors component-wise. @param other The vector to add. @return Resulting sum vector.\",\n \"text_lines\": [\n \"@brief Add two vectors component-wise. @param other The vector to add. @return Resulting sum vector.\"\n ]\n },\n {\n \"start_line_number\": 237,\n \"end_line_number\": 240,\n \"line_range\": [\n 237,\n 240\n ],\n \"text\": \"@brief Negate the vector (unary minus). @return Vector with negated components.\",\n \"text_lines\": [\n \"@brief Negate the vector (unary minus). @return Vector with negated components.\"\n ]\n },\n {\n \"start_line_number\": 243,\n \"end_line_number\": 247,\n \"line_range\": [\n 243,\n 247\n ],\n \"text\": \"@brief Compute dot product via times operator. @param other The other vector. @return Scalar dot product.\",\n \"text_lines\": [\n \"@brief Compute dot product via times operator. @param other The other vector. @return Scalar dot product.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 254,\n \"end_line_number\": 254,\n \"line_range\": [\n 254,\n 254\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"PI\",\n \"qualified_name\": \"PI\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val PI = 3.14159265\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Mathematical constant Pi. */\",\n \"doxygen\": {\n \"brief\": [\n \"Mathematical constant Pi. */\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 257,\n \"end_line_number\": 257,\n \"line_range\": [\n 257,\n 257\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"counter\",\n \"qualified_name\": \"counter\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"var counter = 0\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Mutable package-level counter. */\",\n \"doxygen\": {\n \"brief\": [\n \"Mutable package-level counter. */\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 265,\n \"end_line_number\": 286,\n \"line_range\": [\n 265,\n 286\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"Singleton\",\n \"qualified_name\": \"Singleton\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"object Singleton\",\n \"child_symbol_names\": [\n \"set\"\n ],\n \"child_qualified_names\": [\n \"Singleton.set\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Application-wide singleton for configuration management.\",\n \"doxygen\": {\n \"brief\": [\n \"Application-wide singleton for configuration management.\",\n \"Mutable configuration map.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 266,\n \"end_line_number\": 266,\n \"line_range\": [\n 266,\n 266\n ],\n \"text\": \"@brief Mutable configuration map.\",\n \"text_lines\": [\n \"@brief Mutable configuration map.\"\n ]\n },\n {\n \"start_line_number\": 269,\n \"end_line_number\": 273,\n \"line_range\": [\n 269,\n 273\n ],\n \"text\": \"@brief Store a configuration value. @param key Configuration key. @param value Configuration value.\",\n \"text_lines\": [\n \"@brief Store a configuration value. @param key Configuration key. @param value Configuration value.\"\n ]\n },\n {\n \"start_line_number\": 278,\n \"end_line_number\": 283,\n \"line_range\": [\n 278,\n 283\n ],\n \"text\": \"@brief Retrieve a typed configuration value. @tparam T Expected value type. @param key Configuration key. @return The value cast to T, or null.\",\n \"text_lines\": [\n \"@brief Retrieve a typed configuration value. @tparam T Expected value type. @param key Configuration key. @return The value cast to T, or null.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 274,\n \"end_line_number\": 276,\n \"line_range\": [\n 274,\n 276\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"set\",\n \"qualified_name\": \"Singleton.set\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun set(key: String, value: Any)\",\n \"parent_symbol_name\": \"Singleton\",\n \"parent_qualified_name\": \"Singleton\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Store a configuration value.\",\n \"doxygen\": {\n \"brief\": [\n \"Store a configuration value.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"key\",\n \"description\": \"Configuration key.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Configuration value.\"\n }\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 285,\n \"end_line_number\": 292,\n \"line_range\": [\n 285,\n 292\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"get\",\n \"qualified_name\": \"get\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun <T> get(key: String): T? = config[key] as? T\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"@Suppress(\\\"UNCHECKED_CAST\\\")\",\n \"attached_comment_summary_text\": \"Companion object pattern for factory construction.\",\n \"doxygen\": {\n \"brief\": [\n \"Companion object pattern for factory construction.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 288,\n \"end_line_number\": 291,\n \"line_range\": [\n 288,\n 291\n ],\n \"text\": \"@object Factory @brief Companion object pattern for factory construction.\",\n \"text_lines\": [\n \"@object Factory @brief Companion object pattern for factory construction.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 292,\n \"end_line_number\": 293,\n \"line_range\": [\n 292,\n 293\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"Factory\",\n \"qualified_name\": \"Factory\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"companion object Factory\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Companion object pattern for factory construction.\",\n \"doxygen\": {\n \"brief\": [\n \"Companion object pattern for factory construction.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 303,\n \"end_line_number\": 316,\n \"line_range\": [\n 303,\n 316\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"DelegatingList\",\n \"qualified_name\": \"DelegatingList\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class DelegatingList<T>(private val inner: MutableList<T>) : List<T> by inner\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [\n \"accessCount\"\n ],\n \"child_qualified_names\": [\n \"DelegatingList.accessCount\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"List implementation delegating to an inner mutable list.\\n@tparam T Element type.\",\n \"doxygen\": {\n \"brief\": [\n \"List implementation delegating to an inner mutable list.\\n@tparam T Element type.\",\n \"Count of accesses to the delegated list.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"inner\",\n \"description\": \"The backing list.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 304,\n \"end_line_number\": 304,\n \"line_range\": [\n 304,\n 304\n ],\n \"text\": \"@brief Count of accesses to the delegated list.\",\n \"text_lines\": [\n \"@brief Count of accesses to the delegated list.\"\n ]\n },\n {\n \"start_line_number\": 308,\n \"end_line_number\": 310,\n \"line_range\": [\n 308,\n 310\n ],\n \"text\": \"@brief Override size to track access and delegate.\",\n \"text_lines\": [\n \"@brief Override size to track access and delegate.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 314,\n \"text\": \"return inner.size\"\n }\n ]\n },\n {\n \"start_line_number\": 305,\n \"end_line_number\": 305,\n \"line_range\": [\n 305,\n 305\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"accessCount\",\n \"qualified_name\": \"DelegatingList.accessCount\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"var accessCount = 0\",\n \"parent_symbol_name\": \"DelegatingList\",\n \"parent_qualified_name\": \"DelegatingList\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Count of accesses to the delegated list. */\",\n \"doxygen\": {\n \"brief\": [\n \"Count of accesses to the delegated list. */\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 324,\n \"end_line_number\": 339,\n \"line_range\": [\n 324,\n 339\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"Service\",\n \"qualified_name\": \"Service\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Service\",\n \"child_symbol_names\": [\n \"resource\"\n ],\n \"child_qualified_names\": [\n \"Service.resource\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Service class demonstrating lateinit and lazy initialization.\",\n \"doxygen\": {\n \"brief\": [\n \"Service class demonstrating lateinit and lazy initialization.\",\n \"Late-initialized dependency, set after construction.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 325,\n \"end_line_number\": 325,\n \"line_range\": [\n 325,\n 325\n ],\n \"text\": \"@brief Late-initialized dependency, set after construction.\",\n \"text_lines\": [\n \"@brief Late-initialized dependency, set after construction.\"\n ]\n },\n {\n \"start_line_number\": 328,\n \"end_line_number\": 328,\n \"line_range\": [\n 328,\n 328\n ],\n \"text\": \"@brief Lazily computed expensive resource.\",\n \"text_lines\": [\n \"@brief Lazily computed expensive resource.\"\n ]\n },\n {\n \"start_line_number\": 330,\n \"end_line_number\": 330,\n \"line_range\": [\n 330,\n 330\n ],\n \"text\": \"Computed on first access\",\n \"text_lines\": [\n \"Computed on first access\"\n ]\n },\n {\n \"start_line_number\": 334,\n \"end_line_number\": 337,\n \"line_range\": [\n 334,\n 337\n ],\n \"text\": \"@brief Check if the dependency has been initialized. @return True if dependency is set.\",\n \"text_lines\": [\n \"@brief Check if the dependency has been initialized. @return True if dependency is set.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 329,\n \"end_line_number\": 329,\n \"line_range\": [\n 329,\n 329\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"resource\",\n \"qualified_name\": \"Service.resource\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val resource: String by lazy\",\n \"parent_symbol_name\": \"Service\",\n \"parent_qualified_name\": \"Service\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Lazily computed expensive resource. */\",\n \"doxygen\": {\n \"brief\": [\n \"Lazily computed expensive resource. */\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 338,\n \"end_line_number\": 347,\n \"line_range\": [\n 338,\n 347\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"isReady\",\n \"qualified_name\": \"isReady\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun isReady(): Boolean = ::dependency.isInitialized\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Check if the dependency has been initialized.\",\n \"doxygen\": {\n \"brief\": [\n \"Check if the dependency has been initialized.\"\n ],\n \"returns\": [\n \"True if dependency is set.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 341,\n \"end_line_number\": 341,\n \"line_range\": [\n 341,\n 341\n ],\n \"text\": \"── DSL builder pattern ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── DSL builder pattern ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 343,\n \"end_line_number\": 346,\n \"line_range\": [\n 343,\n 346\n ],\n \"text\": \"@class HtmlBuilder @brief Simple DSL for building HTML strings.\",\n \"text_lines\": [\n \"@class HtmlBuilder @brief Simple DSL for building HTML strings.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 347,\n \"end_line_number\": 373,\n \"line_range\": [\n 347,\n 373\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"HtmlBuilder\",\n \"qualified_name\": \"HtmlBuilder\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class HtmlBuilder\",\n \"child_symbol_names\": [\n \"div\",\n \"inner\",\n \"text\"\n ],\n \"child_qualified_names\": [\n \"HtmlBuilder.div\",\n \"HtmlBuilder.inner\",\n \"HtmlBuilder.text\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Simple DSL for building HTML strings.\",\n \"doxygen\": {\n \"brief\": [\n \"Simple DSL for building HTML strings.\",\n \"Add a div element with content from a lambda.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"block\",\n \"description\": \"Lambda providing the div content.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 350,\n \"end_line_number\": 353,\n \"line_range\": [\n 350,\n 353\n ],\n \"text\": \"@brief Add a div element with content from a lambda. @param block Lambda providing the div content.\",\n \"text_lines\": [\n \"@brief Add a div element with content from a lambda. @param block Lambda providing the div content.\"\n ]\n },\n {\n \"start_line_number\": 360,\n \"end_line_number\": 363,\n \"line_range\": [\n 360,\n 363\n ],\n \"text\": \"@brief Add a text node. @param text The text content.\",\n \"text_lines\": [\n \"@brief Add a text node. @param text The text content.\"\n ]\n },\n {\n \"start_line_number\": 368,\n \"end_line_number\": 371,\n \"line_range\": [\n 368,\n 371\n ],\n \"text\": \"@brief Build the accumulated HTML string. @return Concatenated HTML output.\",\n \"text_lines\": [\n \"@brief Build the accumulated HTML string. @return Concatenated HTML output.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 354,\n \"end_line_number\": 358,\n \"line_range\": [\n 354,\n 358\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"div\",\n \"qualified_name\": \"HtmlBuilder.div\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun div(block: HtmlBuilder.() -> Unit)\",\n \"parent_symbol_name\": \"HtmlBuilder\",\n \"parent_qualified_name\": \"HtmlBuilder\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Add a div element with content from a lambda.\",\n \"doxygen\": {\n \"brief\": [\n \"Add a div element with content from a lambda.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"block\",\n \"description\": \"Lambda providing the div content.\"\n }\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 355,\n \"end_line_number\": 355,\n \"line_range\": [\n 355,\n 355\n ],\n \"declaration_order_index\": 36,\n \"symbol_name\": \"inner\",\n \"qualified_name\": \"HtmlBuilder.inner\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val inner = HtmlBuilder()\",\n \"parent_symbol_name\": \"HtmlBuilder\",\n \"parent_qualified_name\": \"HtmlBuilder\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 364,\n \"end_line_number\": 366,\n \"line_range\": [\n 364,\n 366\n ],\n \"declaration_order_index\": 37,\n \"symbol_name\": \"text\",\n \"qualified_name\": \"HtmlBuilder.text\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun text(text: String)\",\n \"parent_symbol_name\": \"HtmlBuilder\",\n \"parent_qualified_name\": \"HtmlBuilder\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Add a text node.\",\n \"doxygen\": {\n \"brief\": [\n \"Add a text node.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"text\",\n \"description\": \"The text content.\"\n }\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 372,\n \"end_line_number\": 381,\n \"line_range\": [\n 372,\n 381\n ],\n \"declaration_order_index\": 38,\n \"symbol_name\": \"build\",\n \"qualified_name\": \"build\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun build(): String = elements.joinToString(\\\"\\\")\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Build the accumulated HTML string.\",\n \"doxygen\": {\n \"brief\": [\n \"Build the accumulated HTML string.\",\n \"DSL entry point for building HTML content.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"block\",\n \"description\": \"Builder lambda receiving HtmlBuilder scope.\"\n }\n ],\n \"returns\": [\n \"Concatenated HTML output.\",\n \"Complete HTML string.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 375,\n \"end_line_number\": 380,\n \"line_range\": [\n 375,\n 380\n ],\n \"text\": \"@function html @brief DSL entry point for building HTML content. @param block Builder lambda receiving HtmlBuilder scope. @return Complete HTML string.\",\n \"text_lines\": [\n \"@function html @brief DSL entry point for building HTML content. @param block Builder lambda receiving HtmlBuilder scope. @return Complete HTML string.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 381,\n \"end_line_number\": 385,\n \"line_range\": [\n 381,\n 385\n ],\n \"declaration_order_index\": 39,\n \"symbol_name\": \"html\",\n \"qualified_name\": \"html\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun html(block: HtmlBuilder.() -> Unit): String\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"DSL entry point for building HTML content.\",\n \"doxygen\": {\n \"brief\": [\n \"DSL entry point for building HTML content.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"block\",\n \"description\": \"Builder lambda receiving HtmlBuilder scope.\"\n }\n ],\n \"returns\": [\n \"Complete HTML string.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 384,\n \"text\": \"return builder.build()\"\n }\n ]\n },\n {\n \"start_line_number\": 382,\n \"end_line_number\": 382,\n \"line_range\": [\n 382,\n 382\n ],\n \"declaration_order_index\": 40,\n \"symbol_name\": \"builder\",\n \"qualified_name\": \"builder\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"val builder = HtmlBuilder()\",\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\": 390,\n \"end_line_number\": 394,\n \"line_range\": [\n 390,\n 394\n ],\n \"declaration_order_index\": 41,\n \"symbol_name\": \"Logger\",\n \"qualified_name\": \"Logger\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"interface Logger\",\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\": 391,\n \"end_line_number\": 394,\n \"line_range\": [\n 391,\n 394\n ],\n \"declaration_order_index\": 42,\n \"symbol_name\": \"Parser\",\n \"qualified_name\": \"Parser\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"interface Parser\",\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\": 392,\n \"end_line_number\": 394,\n \"line_range\": [\n 392,\n 394\n ],\n \"declaration_order_index\": 43,\n \"symbol_name\": \"Emitter\",\n \"qualified_name\": \"Emitter\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"interface Emitter\",\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\": 393,\n \"end_line_number\": 394,\n \"line_range\": [\n 393,\n 394\n ],\n \"declaration_order_index\": 44,\n \"symbol_name\": \"Formatter\",\n \"qualified_name\": \"Formatter\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"interface Formatter\",\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\": 394,\n \"end_line_number\": 394,\n \"line_range\": [\n 394,\n 394\n ],\n \"declaration_order_index\": 45,\n \"symbol_name\": \"ModeKt\",\n \"qualified_name\": \"ModeKt\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum class ModeKt { FAST, SAFE }\",\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\": 395,\n \"end_line_number\": 395,\n \"line_range\": [\n 395,\n 395\n ],\n \"declaration_order_index\": 46,\n \"symbol_name\": \"PhaseKt\",\n \"qualified_name\": \"PhaseKt\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum class PhaseKt { INIT, RUN }\",\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\": 396,\n \"end_line_number\": 396,\n \"line_range\": [\n 396,\n 396\n ],\n \"declaration_order_index\": 47,\n \"symbol_name\": \"StatusKt\",\n \"qualified_name\": \"StatusKt\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum class StatusKt { READY, WAITING }\",\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\": 397,\n \"end_line_number\": 397,\n \"line_range\": [\n 397,\n 397\n ],\n \"declaration_order_index\": 48,\n \"symbol_name\": \"SignalKt\",\n \"qualified_name\": \"SignalKt\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum class SignalKt { ON, OFF }\",\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\": 400,\n \"end_line_number\": 400,\n \"line_range\": [\n 400,\n 400\n ],\n \"declaration_order_index\": 49,\n \"symbol_name\": \"CacheStore\",\n \"qualified_name\": \"CacheStore\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"object CacheStore\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"@PublishedApi\",\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 401,\n \"end_line_number\": 401,\n \"line_range\": [\n 401,\n 401\n ],\n \"declaration_order_index\": 50,\n \"symbol_name\": \"retries\",\n \"qualified_name\": \"retries\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"var retries = 0\",\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\": 402,\n \"end_line_number\": 402,\n \"line_range\": [\n 402,\n 402\n ],\n \"declaration_order_index\": 51,\n \"symbol_name\": \"attempts\",\n \"qualified_name\": \"attempts\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"var attempts = 0\",\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\": 403,\n \"end_line_number\": 403,\n \"line_range\": [\n 403,\n 403\n ],\n \"declaration_order_index\": 52,\n \"symbol_name\": \"state\",\n \"qualified_name\": \"state\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"var state = \\\"idle\\\"\",\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\": 413,\n \"end_line_number\": 413,\n \"line_range\": [\n 413,\n 413\n ],\n \"declaration_order_index\": 53,\n \"symbol_name\": \"reqCoverKotlin1\",\n \"qualified_name\": \"reqCoverKotlin1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun reqCoverKotlin1(value: Int): Int = value + 1\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\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\": 422,\n \"end_line_number\": 422,\n \"line_range\": [\n 422,\n 422\n ],\n \"declaration_order_index\": 54,\n \"symbol_name\": \"reqCoverKotlin2\",\n \"qualified_name\": \"reqCoverKotlin2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun reqCoverKotlin2(value: Int): Int = 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\": 431,\n \"end_line_number\": 431,\n \"line_range\": [\n 431,\n 431\n ],\n \"declaration_order_index\": 55,\n \"symbol_name\": \"reqCoverKotlin3\",\n \"qualified_name\": \"reqCoverKotlin3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun reqCoverKotlin3(value: Int): Int = 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\": 440,\n \"end_line_number\": 440,\n \"line_range\": [\n 440,\n 440\n ],\n \"declaration_order_index\": 56,\n \"symbol_name\": \"reqCoverKotlin4\",\n \"qualified_name\": \"reqCoverKotlin4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun reqCoverKotlin4(value: Int): Int = 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\": 449,\n \"end_line_number\": 449,\n \"line_range\": [\n 449,\n 449\n ],\n \"declaration_order_index\": 57,\n \"symbol_name\": \"reqCoverKotlin5\",\n \"qualified_name\": \"reqCoverKotlin5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fun reqCoverKotlin5(value: Int): Int = 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\": 15,\n \"end_line_number\": 15,\n \"line_range\": [\n 15,\n 15\n ],\n \"text\": \"── Annotations ────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Annotations ────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"text\": \"── Sealed class hierarchy ─────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Sealed class hierarchy ─────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 63,\n \"end_line_number\": 63,\n \"line_range\": [\n 63,\n 63\n ],\n \"text\": \"── Interface ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Interface ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 101,\n \"end_line_number\": 101,\n \"line_range\": [\n 101,\n 101\n ],\n \"text\": \"── Enum class ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Enum class ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 108,\n \"end_line_number\": 108,\n \"line_range\": [\n 108,\n 108\n ],\n \"text\": \"@brief Red color channel.\",\n \"text_lines\": [\n \"@brief Red color channel.\"\n ]\n },\n {\n \"start_line_number\": 110,\n \"end_line_number\": 110,\n \"line_range\": [\n 110,\n 110\n ],\n \"text\": \"@brief Green color channel.\",\n \"text_lines\": [\n \"@brief Green color channel.\"\n ]\n },\n {\n \"start_line_number\": 125,\n \"end_line_number\": 125,\n \"line_range\": [\n 125,\n 125\n ],\n \"text\": \"── Data class implementing interface ──────────────────────────────────\",\n \"text_lines\": [\n \"── Data class implementing interface ──────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 140,\n \"end_line_number\": 140,\n \"line_range\": [\n 140,\n 140\n ],\n \"text\": \"── Value class (inline class) ─────────────────────────────────────────\",\n \"text_lines\": [\n \"── Value class (inline class) ─────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 142,\n \"end_line_number\": 146,\n \"line_range\": [\n 142,\n 146\n ],\n \"text\": \"@class EmailAddress @brief Inline value class wrapping a validated email string. @param value The raw email address string.\",\n \"text_lines\": [\n \"@class EmailAddress\",\n \"@brief Inline value class wrapping a validated email string.\",\n \"@param value The raw email address string.\"\n ]\n },\n {\n \"start_line_number\": 157,\n \"end_line_number\": 157,\n \"line_range\": [\n 157,\n 157\n ],\n \"text\": \"── Functions ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Functions ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 175,\n \"end_line_number\": 175,\n \"line_range\": [\n 175,\n 175\n ],\n \"text\": \"Simulate network delay\",\n \"text_lines\": [\n \"Simulate network delay\"\n ]\n },\n {\n \"start_line_number\": 190,\n \"end_line_number\": 190,\n \"line_range\": [\n 190,\n 190\n ],\n \"text\": \"── Extension functions ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Extension functions ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 192,\n \"end_line_number\": 196,\n \"line_range\": [\n 192,\n 196\n ],\n \"text\": \"@brief Extension function adding word count to String. @receiver String The string to count words in. @return Number of whitespace-separated words.\",\n \"text_lines\": [\n \"@brief Extension function adding word count to String.\",\n \"@receiver String The string to count words in.\",\n \"@return Number of whitespace-separated words.\"\n ]\n },\n {\n \"start_line_number\": 208,\n \"end_line_number\": 208,\n \"line_range\": [\n 208,\n 208\n ],\n \"text\": \"── Inline function with reified type ──────────────────────────────────\",\n \"text_lines\": [\n \"── Inline function with reified type ──────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 210,\n \"end_line_number\": 216,\n \"line_range\": [\n 210,\n 216\n ],\n \"text\": \"@function filterByType @brief Filter list elements by reified type parameter. @tparam T The target type to filter for. ...\",\n \"text_lines\": [\n \"@function filterByType\",\n \"@brief Filter list elements by reified type parameter.\",\n \"@tparam T The target type to filter for.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 221,\n \"end_line_number\": 221,\n \"line_range\": [\n 221,\n 221\n ],\n \"text\": \"── Operator overloading ───────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Operator overloading ───────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 230,\n \"end_line_number\": 234,\n \"line_range\": [\n 230,\n 234\n ],\n \"text\": \"@brief Add two vectors component-wise. @param other The vector to add. @return Resulting sum vector.\",\n \"text_lines\": [\n \"@brief Add two vectors component-wise.\",\n \"@param other The vector to add.\",\n \"@return Resulting sum vector.\"\n ]\n },\n {\n \"start_line_number\": 237,\n \"end_line_number\": 240,\n \"line_range\": [\n 237,\n 240\n ],\n \"text\": \"@brief Negate the vector (unary minus). @return Vector with negated components.\",\n \"text_lines\": [\n \"@brief Negate the vector (unary minus).\",\n \"@return Vector with negated components.\"\n ]\n },\n {\n \"start_line_number\": 243,\n \"end_line_number\": 247,\n \"line_range\": [\n 243,\n 247\n ],\n \"text\": \"@brief Compute dot product via times operator. @param other The other vector. @return Scalar dot product.\",\n \"text_lines\": [\n \"@brief Compute dot product via times operator.\",\n \"@param other The other vector.\",\n \"@return Scalar dot product.\"\n ]\n },\n {\n \"start_line_number\": 259,\n \"end_line_number\": 259,\n \"line_range\": [\n 259,\n 259\n ],\n \"text\": \"── Object (singleton) ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Object (singleton) ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 266,\n \"end_line_number\": 266,\n \"line_range\": [\n 266,\n 266\n ],\n \"text\": \"@brief Mutable configuration map.\",\n \"text_lines\": [\n \"@brief Mutable configuration map.\"\n ]\n },\n {\n \"start_line_number\": 295,\n \"end_line_number\": 295,\n \"line_range\": [\n 295,\n 295\n ],\n \"text\": \"── Delegation ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Delegation ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 308,\n \"end_line_number\": 310,\n \"line_range\": [\n 308,\n 310\n ],\n \"text\": \"@brief Override size to track access and delegate.\",\n \"text_lines\": [\n \"@brief Override size to track access and delegate.\"\n ]\n },\n {\n \"start_line_number\": 318,\n \"end_line_number\": 318,\n \"line_range\": [\n 318,\n 318\n ],\n \"text\": \"── Class with lateinit ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Class with lateinit ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 325,\n \"end_line_number\": 325,\n \"line_range\": [\n 325,\n 325\n ],\n \"text\": \"@brief Late-initialized dependency, set after construction.\",\n \"text_lines\": [\n \"@brief Late-initialized dependency, set after construction.\"\n ]\n },\n {\n \"start_line_number\": 330,\n \"end_line_number\": 330,\n \"line_range\": [\n 330,\n 330\n ],\n \"text\": \"Computed on first access\",\n \"text_lines\": [\n \"Computed on first access\"\n ]\n },\n {\n \"start_line_number\": 341,\n \"end_line_number\": 341,\n \"line_range\": [\n 341,\n 341\n ],\n \"text\": \"── DSL builder pattern ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── DSL builder pattern ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 387,\n \"end_line_number\": 387,\n \"line_range\": [\n 387,\n 387\n ],\n \"text\": \"coverage extension block\",\n \"text_lines\": [\n \"coverage extension block\"\n ]\n },\n {\n \"start_line_number\": 405,\n \"end_line_number\": 405,\n \"line_range\": [\n 405,\n 405\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 451,\n \"end_line_number\": 451,\n \"line_range\": [\n 451,\n 451\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_kotlin.kt | Kotlin | 451L | 58 symbols | 5 imports | 77 comments\n> Path: `tests/fixtures/fixture_kotlin.kt`\n- @brief Comprehensive Kotlin test fixture for parser validation.\n- @details Covers extension functions, inline/reified generics, DSL builders,\ndelegation, coroutine scope, destructuring, sealed interfaces,\nvalue classes, operator overloading, and lateinit.\n\n## Imports\n```\nimport kotlin.collections.List\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.flow\nimport kotlin.math.max\nimport kotlin.math.min\n```\n\n## Definitions\n\n### class `data class User(val name: String, val age: Int = 0)` `@Deprecated(\"Use UserV2 instead\", replaceWith = ReplaceWith(\"UserV2\"))` (L19-61)\n\n### class `sealed class Result<out T>` (L28-61)\n- @brief Sealed class representing success/failure outcomes.\n@tparam T The success value type.\n- @brief Successful outcome holding a value.\n- @param value The result data.\n\n### class `data class Success<T>(val value: T) : Result<T>()` (L34-60)\n- @brief Successful outcome holding a value.\n- @brief Failed outcome holding an error message.\n- @param value The result data.\n- @param message Description of the failure.\n- @param cause Optional underlying exception.\n\n### class `data class Error(val message: String, val cause: Throwable? = null) : Result<Nothing>()` : Result<Nothing>() (L42-60)\n- @brief Failed outcome holding an error message.\n- @brief Singleton state representing an in-progress operation.\n- @param message Description of the failure.\n- @param cause Optional underlying exception.\n\n### mod `object Loading : Result<Nothing>()` (L48-60)\n- @brief Singleton state representing an in-progress operation.\n- @brief Map the success value using a transform function. @tparam R The target type after transformation.\n- @param transform Function converting T to R.\n- @return Transformed Result or original error/loading state.\n- fn `fun <R> map(transform: (T) -> R): Result<R> = when (this)` (L56-60)\n - @brief Map the success value using a transform function.\n@tparam R The target type after transformation.\n - @param transform Function converting T to R.\n - @return Transformed Result or original error/loading state.\n\n### iface `interface Repository<T>` (L70-90)\n- @brief Generic CRUD repository interface.\n@tparam T Entity type managed by this repository.\n- @brief Find an entity by its unique identifier.\n- @param id Entity ID.\n- @return The entity or null if not found.\n\n### fn `fun findById(id: Int): T?` (L76-96)\n- @brief Find an entity by its unique identifier.\n- @brief Persist an entity.\n- @param id Entity ID.\n- @param entity The entity to save.\n- @return The entity or null if not found.\n- @return True if save succeeded.\n\n### fn `fun save(entity: T): Boolean` (L83-96)\n- @brief Persist an entity.\n- @brief Retrieve all entities as a Flow stream.\n- @param entity The entity to save.\n- @return True if save succeeded.\n- @return Flow emitting all stored entities.\n\n### fn `fun findAll(): Flow<T>` (L89-96)\n- @brief Retrieve all entities as a Flow stream.\n- @brief Sealed interface requiring an ID property.\n- @return Flow emitting all stored entities.\n\n- const `val id: Int` (L98)\n- @brief Unique entity identifier. */\n### enum `enum class Color(val hex: String)` (L107-123)\n- @brief Color enum with hex value property and companion factory.\n- @brief Red color channel.\n- @brief Green color channel.\n\n### mod `companion object` (L115-122)\n- @brief Blue color channel. */\n- @brief Parse a color from its hex string.\n- @param hex Hex color code including '#' prefix.\n- @return Matching Color or null.\n- fn `fun fromHex(hex: String): Color? = values().find { it.hex == hex }` (L121)\n - @brief Parse a color from its hex string.\n - @param hex Hex color code including '#' prefix.\n - @return Matching Color or null.\n\n### class `data class Entity(` (L134-155)\n- @brief Data class combining Identifiable with named properties.\n- @param id Unique identifier.\n- @param name Entity display name.\n- @param status Current lifecycle status.\n- const `val name: String,` (L136)\n- const `val status: String = \"active\",` (L137)\n- const `val domain: String get() = value.substringAfter('@')` (L154)\n - @brief Extract the domain part of the email. */\n\n### fn `fun greet(name: String): String` (L165-167)\n- @brief Greet a person by name.\n- @param name The person's name.\n- @return Greeting message string.\n\n### fn `suspend fun fetchData(): String` (L174-177)\n- @brief Suspend function simulating async data retrieval.\n- @return Retrieved data as a string.\n\n### fn `fun processItems(items: List<String>, transform: (String) -> String): List<String>` (L186-188)\n- @brief Higher-order function with trailing lambda syntax.\n- @param items List of strings to process.\n- @param transform Function applied to each item.\n- @return List of transformed results.\n\n- const `val String.lastChar: Char?` (L205)\n- @brief Extension property returning the last character or null.\n@receiver String The string to inspect.\n### class `data class Vector2(val x: Double, val y: Double)` (L229-249)\n- @brief 2D vector with operator overloading for arithmetic.\n- @brief Add two vectors component-wise.\n- @param x Horizontal component.\n- @param y Vertical component.\n- @param other The vector to add.\n- @return Resulting sum vector.\n\n- const `val PI = 3.14159265` (L254)\n- @brief Mathematical constant Pi. */\n- var `var counter = 0` (L257)\n- @brief Mutable package-level counter. */\n### mod `object Singleton` (L265-286)\n- @brief Application-wide singleton for configuration management.\n- @brief Mutable configuration map.\n- fn `fun set(key: String, value: Any)` (L274-276)\n - @brief Store a configuration value.\n - @param key Configuration key.\n - @param value Configuration value.\n\n### fn `fun <T> get(key: String): T? = config[key] as? T` `@Suppress(\"UNCHECKED_CAST\")` (L285-292)\n- @brief Companion object pattern for factory construction.\n\n### mod `companion object Factory` (L292-293)\n- @brief Companion object pattern for factory construction.\n\n### class `class DelegatingList<T>(private val inner: MutableList<T>) : List<T> by inner` `priv` (L303-316)\n- @brief List implementation delegating to an inner mutable list.\n@tparam T Element type.\n- @brief Count of accesses to the delegated list.\n- @param inner The backing list.\n- var `var accessCount = 0` (L305)\n - @brief Count of accesses to the delegated list. */\n\n### class `class Service` (L324-339)\n- @brief Service class demonstrating lateinit and lazy initialization.\n- @brief Late-initialized dependency, set after construction.\n- const `val resource: String by lazy` (L329)\n - @brief Lazily computed expensive resource. */\n\n### fn `fun isReady(): Boolean = ::dependency.isInitialized` (L338-347)\n- @brief Check if the dependency has been initialized.\n- @return True if dependency is set.\n\n### class `class HtmlBuilder` (L347-373)\n- @brief Simple DSL for building HTML strings.\n- @brief Add a div element with content from a lambda.\n- @param block Lambda providing the div content.\n- fn `fun div(block: HtmlBuilder.() -> Unit)` (L354-358)\n - @brief Add a div element with content from a lambda.\n - @param block Lambda providing the div content.\n- const `val inner = HtmlBuilder()` (L355)\n- fn `fun text(text: String)` (L364-366)\n - @brief Add a text node.\n - @param text The text content.\n\n### fn `fun build(): String = elements.joinToString(\"\")` (L372-381)\n- @brief Build the accumulated HTML string.\n- @brief DSL entry point for building HTML content.\n- @param block Builder lambda receiving HtmlBuilder scope.\n- @return Concatenated HTML output.\n- @return Complete HTML string.\n\n### fn `fun html(block: HtmlBuilder.() -> Unit): String` (L381-385)\n- @brief DSL entry point for building HTML content.\n- @param block Builder lambda receiving HtmlBuilder scope.\n- @return Complete HTML string.\n\n- const `val builder = HtmlBuilder()` (L382)\n### iface `interface Logger` (L390-394)\n\n### iface `interface Parser` (L391-394)\n\n### iface `interface Emitter` (L392-394)\n\n### iface `interface Formatter` (L393-394)\n\n- enum `enum class ModeKt { FAST, SAFE }` (L394)\n- enum `enum class PhaseKt { INIT, RUN }` (L395)\n- enum `enum class StatusKt { READY, WAITING }` (L396)\n- enum `enum class SignalKt { ON, OFF }` (L397)\n- mod `object CacheStore` (L400)\n- var `var retries = 0` (L401)\n- var `var attempts = 0` (L402)\n- var `var state = \"idle\"` (L403)\n- fn `fun reqCoverKotlin1(value: Int): Int = value + 1` (L413)\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- fn `fun reqCoverKotlin2(value: Int): Int = value + 2` (L422)\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 `fun reqCoverKotlin3(value: Int): Int = value + 3` (L431)\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 `fun reqCoverKotlin4(value: Int): Int = value + 4` (L440)\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 `fun reqCoverKotlin5(value: Int): Int = value + 5` (L449)\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|`User`|class||19-61|data class User(val name: String, val age: Int = 0)|\n|`Result`|class||28-61|sealed class Result<out T>|\n|`Success`|class||34-60|data class Success<T>(val value: T) : Result<T>()|\n|`Error`|class||42-60|data class Error(val message: String, val cause: Throwabl...|\n|`Loading`|mod||48-60||\n|`Loading.map`|fn||56-60|fun <R> map(transform: (T) -> R): Result<R> = when (this)|\n|`Repository`|iface||70-90|interface Repository<T>|\n|`findById`|fn||76-96|fun findById(id: Int): T?|\n|`save`|fn||83-96|fun save(entity: T): Boolean|\n|`findAll`|fn||89-96|fun findAll(): Flow<T>|\n|`id`|const||98||\n|`Color`|enum||107-123|enum class Color(val hex: String)|\n|`companion object`|mod||115-122||\n|`companion object.fromHex`|fn||121|fun fromHex(hex: String): Color? = values().find { it.hex...|\n|`Entity`|class||134-155|data class Entity(|\n|`Entity.name`|const||136||\n|`Entity.status`|const||137||\n|`Entity.domain`|const||154||\n|`greet`|fn||165-167|fun greet(name: String): String|\n|`fetchData`|fn||174-177|suspend fun fetchData(): String|\n|`processItems`|fn||186-188|fun processItems(items: List<String>, transform: (String)...|\n|`String`|const||205||\n|`Vector2`|class||229-249|data class Vector2(val x: Double, val y: Double)|\n|`PI`|const||254||\n|`counter`|var||257||\n|`Singleton`|mod||265-286||\n|`Singleton.set`|fn||274-276|fun set(key: String, value: Any)|\n|`get`|fn||285-292|fun <T> get(key: String): T? = config[key] as? T|\n|`Factory`|mod||292-293||\n|`DelegatingList`|class|priv|303-316|class DelegatingList<T>(private val inner: MutableList<T>...|\n|`DelegatingList.accessCount`|var||305||\n|`Service`|class||324-339|class Service|\n|`Service.resource`|const||329||\n|`isReady`|fn||338-347|fun isReady(): Boolean = ::dependency.isInitialized|\n|`HtmlBuilder`|class||347-373|class HtmlBuilder|\n|`HtmlBuilder.div`|fn||354-358|fun div(block: HtmlBuilder.() -> Unit)|\n|`HtmlBuilder.inner`|const||355||\n|`HtmlBuilder.text`|fn||364-366|fun text(text: String)|\n|`build`|fn||372-381|fun build(): String = elements.joinToString(\"\")|\n|`html`|fn||381-385|fun html(block: HtmlBuilder.() -> Unit): String|\n|`builder`|const||382||\n|`Logger`|iface||390-394|interface Logger|\n|`Parser`|iface||391-394|interface Parser|\n|`Emitter`|iface||392-394|interface Emitter|\n|`Formatter`|iface||393-394|interface Formatter|\n|`ModeKt`|enum||394|enum class ModeKt { FAST, SAFE }|\n|`PhaseKt`|enum||395|enum class PhaseKt { INIT, RUN }|\n|`StatusKt`|enum||396|enum class StatusKt { READY, WAITING }|\n|`SignalKt`|enum||397|enum class SignalKt { ON, OFF }|\n|`CacheStore`|mod||400||\n|`retries`|var||401||\n|`attempts`|var||402||\n|`state`|var||403||\n|`reqCoverKotlin1`|fn||413|fun reqCoverKotlin1(value: Int): Int = value + 1|\n|`reqCoverKotlin2`|fn||422|fun reqCoverKotlin2(value: Int): Int = value + 2|\n|`reqCoverKotlin3`|fn||431|fun reqCoverKotlin3(value: Int): Int = value + 3|\n|`reqCoverKotlin4`|fn||440|fun reqCoverKotlin4(value: Int): Int = value + 4|\n|`reqCoverKotlin5`|fn||449|fun reqCoverKotlin5(value: Int): Int = value + 5|\n\n",
|
|
4
4
|
"stderr": ""
|
|
5
5
|
}
|
|
@@ -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_lua.lua\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_lua.lua\"\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\": 34,\n \"total_import_count\": 0,\n \"total_comment_count\": 110,\n \"total_standalone_comment_count\": 40,\n \"total_doxygen_field_count\": 53,\n \"symbol_kind_counts\": {\n \"FUNCTION\": 21,\n \"VARIABLE\": 13\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_lua.lua\"\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_lua.lua\",\n \"relative_path\": \"tests/fixtures/fixture_lua.lua\",\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\": 276,\n \"line_range\": [\n 1,\n 276\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_lua.lua\",\n \"canonical_path\": \"tests/fixtures/fixture_lua.lua\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_lua.lua\",\n \"file_name\": \"fixture_lua.lua\",\n \"file_extension\": \".lua\",\n \"language_id\": \"lua\",\n \"language_name\": \"Lua\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 0,\n \"symbol_count\": 34,\n \"comment_count\": 110,\n \"standalone_comment_count\": 40,\n \"doxygen_field_count\": 53,\n \"file_description_text\": \"- @file fixture_lua.lua\",\n \"imports\": [],\n \"symbols\": [\n {\n \"start_line_number\": 14,\n \"end_line_number\": 16,\n \"line_range\": [\n 14,\n 16\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"globalFunc\",\n \"qualified_name\": \"globalFunc\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function globalFunc(x)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Compute the successor of a number.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"x number The input value.\\n---\"\n }\n ],\n \"returns\": [\n \"number The input incremented by one.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 15,\n \"text\": \"return x + 1\"\n }\n ]\n },\n {\n \"start_line_number\": 22,\n \"end_line_number\": 28,\n \"line_range\": [\n 22,\n 28\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"localFunc\",\n \"qualified_name\": \"localFunc\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"local function localFunc(y)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- @param y number The input value; must be a number.\",\n \"attached_comment_lines\": [\n \"- @param y number The input value; must be a number.\",\n \"- @return number The doubled value.\",\n \"- @raise error If y is not a number.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 26,\n \"end_line_number\": 26,\n \"line_range\": [\n 26,\n 26\n ],\n \"text\": \"Perform the multiplication\",\n \"text_lines\": [\n \"Perform the multiplication\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 27,\n \"text\": \"return y * 2\"\n }\n ]\n },\n {\n \"start_line_number\": 33,\n \"end_line_number\": 41,\n \"line_range\": [\n 33,\n 41\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"sumAll\",\n \"qualified_name\": \"sumAll\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"local function sumAll(...)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Variadic function summing all arguments.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"... number Variable number of numeric arguments.\\n---\"\n }\n ],\n \"returns\": [\n \"number Sum of all provided values.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 37,\n \"end_line_number\": 37,\n \"line_range\": [\n 37,\n 37\n ],\n \"text\": \"Accumulate each argument\",\n \"text_lines\": [\n \"Accumulate each argument\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 40,\n \"text\": \"return total\"\n }\n ]\n },\n {\n \"start_line_number\": 34,\n \"end_line_number\": 34,\n \"line_range\": [\n 34,\n 34\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"total\",\n \"qualified_name\": \"total\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local total = 0\",\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\": 35,\n \"end_line_number\": 35,\n \"line_range\": [\n 35,\n 35\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"args\",\n \"qualified_name\": \"args\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local args = {...}\",\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\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"myVar\",\n \"qualified_name\": \"myVar\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local myVar = 42\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Module-level constant for retry limits.\",\n \"doxygen\": {\n \"brief\": [\n \"Module-level constant for retry limits.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 49,\n \"end_line_number\": 49,\n \"line_range\": [\n 49,\n 49\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"config\",\n \"qualified_name\": \"config\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local config =\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Configuration table with default settings.\",\n \"doxygen\": {\n \"brief\": [\n \"Configuration table with default settings.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 59,\n \"end_line_number\": 66,\n \"line_range\": [\n 59,\n 66\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"handler\",\n \"qualified_name\": \"handler\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"local handler = function(event)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Event handler for UI callbacks.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"event\",\n \"description\": \"table Event object containing type and data fields.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 60,\n \"end_line_number\": 60,\n \"line_range\": [\n 60,\n 60\n ],\n \"text\": \"Dispatch based on event type\",\n \"text_lines\": [\n \"Dispatch based on event type\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 72,\n \"end_line_number\": 72,\n \"line_range\": [\n 72,\n 72\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"MyModule\",\n \"qualified_name\": \"MyModule\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local MyModule = {}\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Table-based module using method syntax.\",\n \"doxygen\": {\n \"brief\": [\n \"Table-based module using method syntax.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 78,\n \"end_line_number\": 83,\n \"line_range\": [\n 78,\n 83\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"MyModule.new\",\n \"qualified_name\": \"MyModule.new\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function MyModule.new(name)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Create a new module instance with a name.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"name string Instance identifier.\\n---\"\n }\n ],\n \"returns\": [\n \"table New MyModule instance.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 82,\n \"text\": \"return self\"\n }\n ]\n },\n {\n \"start_line_number\": 79,\n \"end_line_number\": 79,\n \"line_range\": [\n 79,\n 79\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"self\",\n \"qualified_name\": \"self\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local self = setmetatable({}, MyModule)\",\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\": 88,\n \"end_line_number\": 90,\n \"line_range\": [\n 88,\n 90\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"MyModule.method\",\n \"qualified_name\": \"MyModule.method\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"MyModule.method = function(self)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Get the module instance name using colon method syntax.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"self table The MyModule instance.\\n---\"\n }\n ],\n \"returns\": [\n \"string The instance name.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 89,\n \"text\": \"return self.name\"\n }\n ]\n },\n {\n \"start_line_number\": 94,\n \"end_line_number\": 97,\n \"line_range\": [\n 94,\n 97\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"MyModule:addItem\",\n \"qualified_name\": \"MyModule:addItem\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function MyModule:addItem(item)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Add an item to the internal collection.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"item\",\n \"description\": \"any The item to store.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 95,\n \"end_line_number\": 95,\n \"line_range\": [\n 95,\n 95\n ],\n \"text\": \"Append to internal list\",\n \"text_lines\": [\n \"Append to internal list\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 101,\n \"end_line_number\": 103,\n \"line_range\": [\n 101,\n 103\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"MyModule:count\",\n \"qualified_name\": \"MyModule:count\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function MyModule:count()\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Get count of stored items.\",\n \"doxygen\": {\n \"returns\": [\n \"number Number of items.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 102,\n \"text\": \"return #self._items\"\n }\n ]\n },\n {\n \"start_line_number\": 109,\n \"end_line_number\": 109,\n \"line_range\": [\n 109,\n 109\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"Animal\",\n \"qualified_name\": \"Animal\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local Animal = {}\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Base class using metatables for inheritance.\",\n \"doxygen\": {\n \"brief\": [\n \"Base class using metatables for inheritance.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 115,\n \"end_line_number\": 119,\n \"line_range\": [\n 115,\n 119\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"Animal.new\",\n \"qualified_name\": \"Animal.new\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function Animal.new(species)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Create a new Animal with a species name.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"species string The animal's species.\\n---\"\n }\n ],\n \"returns\": [\n \"table New Animal instance.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 118,\n \"text\": \"return self\"\n }\n ]\n },\n {\n \"start_line_number\": 116,\n \"end_line_number\": 116,\n \"line_range\": [\n 116,\n 116\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"self\",\n \"qualified_name\": \"self\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local self = setmetatable({}, Animal)\",\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\": 123,\n \"end_line_number\": 125,\n \"line_range\": [\n 123,\n 125\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"Animal:speak\",\n \"qualified_name\": \"Animal:speak\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function Animal:speak()\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Produce the animal's sound.\",\n \"doxygen\": {\n \"returns\": [\n \"string Sound description.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 124,\n \"text\": \"return self.species .. \\\" says ...\\\"\"\n }\n ]\n },\n {\n \"start_line_number\": 129,\n \"end_line_number\": 129,\n \"line_range\": [\n 129,\n 129\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"Dog\",\n \"qualified_name\": \"Dog\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local Dog = setmetatable({}, { __index = Animal })\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Dog subclass inheriting from Animal.\",\n \"doxygen\": {\n \"brief\": [\n \"Dog subclass inheriting from Animal.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 135,\n \"end_line_number\": 140,\n \"line_range\": [\n 135,\n 140\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"Dog.new\",\n \"qualified_name\": \"Dog.new\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function Dog.new(name)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Create a new Dog instance.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"name string The dog's name.\\n---\"\n }\n ],\n \"returns\": [\n \"table New Dog instance.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 139,\n \"text\": \"return self\"\n }\n ]\n },\n {\n \"start_line_number\": 136,\n \"end_line_number\": 136,\n \"line_range\": [\n 136,\n 136\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"self\",\n \"qualified_name\": \"self\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local self = Animal.new(\\\"Dog\\\")\",\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\": 144,\n \"end_line_number\": 146,\n \"line_range\": [\n 144,\n 146\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"Dog:speak\",\n \"qualified_name\": \"Dog:speak\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function Dog:speak()\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Override speak for dog-specific behavior.\",\n \"doxygen\": {\n \"returns\": [\n \"string The dog's vocalization.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 145,\n \"text\": \"return self.dogName .. \\\" says Woof!\\\"\"\n }\n ]\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 160,\n \"line_range\": [\n 153,\n 160\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"makeCounter\",\n \"qualified_name\": \"makeCounter\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"local function makeCounter(step)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Create a counter closure with step increment.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"step number Increment amount per call.\\n---\"\n }\n ],\n \"returns\": [\n \"function Closure returning successive counts.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 156,\n \"end_line_number\": 156,\n \"line_range\": [\n 156,\n 156\n ],\n \"text\": \"Capture and mutate the upvalue\",\n \"text_lines\": [\n \"Capture and mutate the upvalue\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 155,\n \"text\": \"return function()\"\n },\n {\n \"line_number\": 158,\n \"text\": \"return count\"\n }\n ]\n },\n {\n \"start_line_number\": 154,\n \"end_line_number\": 154,\n \"line_range\": [\n 154,\n 154\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"count\",\n \"qualified_name\": \"count\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local count = 0\",\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\": 167,\n \"end_line_number\": 176,\n \"line_range\": [\n 167,\n 176\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"fibonacci\",\n \"qualified_name\": \"fibonacci\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"local function fibonacci(limit)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- Generator coroutine yielding Fibonacci numbers.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"limit number Maximum number of values to yield.\\n---\"\n }\n ],\n \"returns\": [\n \"function Coroutine wrap function.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 172,\n \"end_line_number\": 172,\n \"line_range\": [\n 172,\n 172\n ],\n \"text\": \"Advance to next Fibonacci number\",\n \"text_lines\": [\n \"Advance to next Fibonacci number\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 168,\n \"text\": \"return coroutine.wrap(function()\"\n }\n ]\n },\n {\n \"start_line_number\": 184,\n \"end_line_number\": 192,\n \"line_range\": [\n 184,\n 192\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"safeCall\",\n \"qualified_name\": \"safeCall\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"local function safeCall(fn, ...)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- @param fn function The function to execute.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"fn function The function to execute.\\n---\"\n },\n {\n \"direction\": \"unspecified\",\n \"text\": \"... any Arguments to pass to fn.\\n---\"\n }\n ],\n \"returns\": [\n \"boolean, any Success flag and result or error message.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"text\": \"Log error and return nil\",\n \"text_lines\": [\n \"Log error and return nil\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 189,\n \"text\": \"return false, nil\"\n },\n {\n \"line_number\": 191,\n \"text\": \"return true, result\"\n }\n ]\n },\n {\n \"start_line_number\": 197,\n \"end_line_number\": 197,\n \"line_range\": [\n 197,\n 197\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"mixedTable\",\n \"qualified_name\": \"mixedTable\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local mixedTable =\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Complex table demonstrating all key types.\",\n \"doxygen\": {\n \"brief\": [\n \"Complex table demonstrating all key types.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 219,\n \"end_line_number\": 228,\n \"line_range\": [\n 219,\n 228\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"range\",\n \"qualified_name\": \"range\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"local function range(from, to)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"- @param from number Start of range (inclusive).\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"from number Start of range (inclusive).\\n---\"\n },\n {\n \"direction\": \"unspecified\",\n \"text\": \"to number End of range (inclusive).\\n---\"\n }\n ],\n \"returns\": [\n \"function Iterator function.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 226,\n \"end_line_number\": 226,\n \"line_range\": [\n 226,\n 226\n ],\n \"text\": \"Implicit nil return terminates iteration\",\n \"text_lines\": [\n \"Implicit nil return terminates iteration\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 221,\n \"text\": \"return function()\"\n },\n {\n \"line_number\": 224,\n \"text\": \"return i\"\n }\n ]\n },\n {\n \"start_line_number\": 220,\n \"end_line_number\": 220,\n \"line_range\": [\n 220,\n 220\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"i\",\n \"qualified_name\": \"i\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"local i = from - 1\",\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\": 236,\n \"end_line_number\": 238,\n \"line_range\": [\n 236,\n 238\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"req_cover_lua_1\",\n \"qualified_name\": \"req_cover_lua_1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function req_cover_lua_1(value)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 1.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 1.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 1.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 1.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 1.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 237,\n \"text\": \"return value + 1\"\n }\n ]\n },\n {\n \"start_line_number\": 245,\n \"end_line_number\": 247,\n \"line_range\": [\n 245,\n 247\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"req_cover_lua_2\",\n \"qualified_name\": \"req_cover_lua_2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function req_cover_lua_2(value)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 2.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 2.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 2.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 2.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 2.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 246,\n \"text\": \"return value + 2\"\n }\n ]\n },\n {\n \"start_line_number\": 254,\n \"end_line_number\": 256,\n \"line_range\": [\n 254,\n 256\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"req_cover_lua_3\",\n \"qualified_name\": \"req_cover_lua_3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function req_cover_lua_3(value)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 3.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 3.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 3.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 3.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 3.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 255,\n \"text\": \"return value + 3\"\n }\n ]\n },\n {\n \"start_line_number\": 263,\n \"end_line_number\": 265,\n \"line_range\": [\n 263,\n 265\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"req_cover_lua_4\",\n \"qualified_name\": \"req_cover_lua_4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function req_cover_lua_4(value)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 4.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 4.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 4.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 4.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 4.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 264,\n \"text\": \"return value + 4\"\n }\n ]\n },\n {\n \"start_line_number\": 272,\n \"end_line_number\": 274,\n \"line_range\": [\n 272,\n 274\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"req_cover_lua_5\",\n \"qualified_name\": \"req_cover_lua_5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"function req_cover_lua_5(value)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 5.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 5.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 5.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 5.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 5.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 273,\n \"text\": \"return value + 5\"\n }\n ]\n }\n ],\n \"standalone_comments\": [\n {\n \"start_line_number\": 2,\n \"end_line_number\": 2,\n \"line_range\": [\n 2,\n 2\n ],\n \"text\": \"- @brief Comprehensive Lua test fixture for parser validation.\",\n \"text_lines\": [\n \"- @brief Comprehensive Lua test fixture for parser validation.\"\n ]\n },\n {\n \"start_line_number\": 3,\n \"end_line_number\": 3,\n \"line_range\": [\n 3,\n 3\n ],\n \"text\": \"- @details Covers metatables, coroutines, closures, OOP patterns,\",\n \"text_lines\": [\n \"- @details Covers metatables, coroutines, closures, OOP patterns,\"\n ]\n },\n {\n \"start_line_number\": 4,\n \"end_line_number\": 4,\n \"line_range\": [\n 4,\n 4\n ],\n \"text\": \"- module pattern, varargs, error handling, and table constructors.\",\n \"text_lines\": [\n \"- module pattern, varargs, error handling, and table constructors.\"\n ]\n },\n {\n \"start_line_number\": 5,\n \"end_line_number\": 5,\n \"line_range\": [\n 5,\n 5\n ],\n \"text\": \"Single line comment\",\n \"text_lines\": [\n \"Single line comment\"\n ]\n },\n {\n \"start_line_number\": 6,\n \"end_line_number\": 7,\n \"line_range\": [\n 6,\n 7\n ],\n \"text\": \"[[ Multi-line comment ]]\",\n \"text_lines\": [\n \"[[ Multi-line\",\n \"comment ]]\"\n ]\n },\n {\n \"start_line_number\": 9,\n \"end_line_number\": 9,\n \"line_range\": [\n 9,\n 9\n ],\n \"text\": \"── Standard functions ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Standard functions ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 18,\n \"end_line_number\": 18,\n \"line_range\": [\n 18,\n 18\n ],\n \"text\": \"- Multiply a value by two with validation.\",\n \"text_lines\": [\n \"- Multiply a value by two with validation.\"\n ]\n },\n {\n \"start_line_number\": 26,\n \"end_line_number\": 26,\n \"line_range\": [\n 26,\n 26\n ],\n \"text\": \"Perform the multiplication\",\n \"text_lines\": [\n \"Perform the multiplication\"\n ]\n },\n {\n \"start_line_number\": 37,\n \"end_line_number\": 37,\n \"line_range\": [\n 37,\n 37\n ],\n \"text\": \"Accumulate each argument\",\n \"text_lines\": [\n \"Accumulate each argument\"\n ]\n },\n {\n \"start_line_number\": 55,\n \"end_line_number\": 55,\n \"line_range\": [\n 55,\n 55\n ],\n \"text\": \"── Function assigned to variable ──────────────────────────────────────\",\n \"text_lines\": [\n \"── Function assigned to variable ──────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 60,\n \"end_line_number\": 60,\n \"line_range\": [\n 60,\n 60\n ],\n \"text\": \"Dispatch based on event type\",\n \"text_lines\": [\n \"Dispatch based on event type\"\n ]\n },\n {\n \"start_line_number\": 68,\n \"end_line_number\": 68,\n \"line_range\": [\n 68,\n 68\n ],\n \"text\": \"── Module method pattern ──────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Module method pattern ──────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 95,\n \"end_line_number\": 95,\n \"line_range\": [\n 95,\n 95\n ],\n \"text\": \"Append to internal list\",\n \"text_lines\": [\n \"Append to internal list\"\n ]\n },\n {\n \"start_line_number\": 105,\n \"end_line_number\": 105,\n \"line_range\": [\n 105,\n 105\n ],\n \"text\": \"── Metatable-based OOP ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Metatable-based OOP ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 148,\n \"end_line_number\": 148,\n \"line_range\": [\n 148,\n 148\n ],\n \"text\": \"── Closure factory ────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Closure factory ────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 156,\n \"end_line_number\": 156,\n \"line_range\": [\n 156,\n 156\n ],\n \"text\": \"Capture and mutate the upvalue\",\n \"text_lines\": [\n \"Capture and mutate the upvalue\"\n ]\n },\n {\n \"start_line_number\": 162,\n \"end_line_number\": 162,\n \"line_range\": [\n 162,\n 162\n ],\n \"text\": \"── Coroutine ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Coroutine ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 172,\n \"end_line_number\": 172,\n \"line_range\": [\n 172,\n 172\n ],\n \"text\": \"Advance to next Fibonacci number\",\n \"text_lines\": [\n \"Advance to next Fibonacci number\"\n ]\n },\n {\n \"start_line_number\": 178,\n \"end_line_number\": 178,\n \"line_range\": [\n 178,\n 178\n ],\n \"text\": \"── Error handling with pcall ──────────────────────────────────────────\",\n \"text_lines\": [\n \"── Error handling with pcall ──────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 180,\n \"end_line_number\": 180,\n \"line_range\": [\n 180,\n 180\n ],\n \"text\": \"- Safely execute a function, catching any errors.\",\n \"text_lines\": [\n \"- Safely execute a function, catching any errors.\"\n ]\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"text\": \"Log error and return nil\",\n \"text_lines\": [\n \"Log error and return nil\"\n ]\n },\n {\n \"start_line_number\": 198,\n \"end_line_number\": 198,\n \"line_range\": [\n 198,\n 198\n ],\n \"text\": \"Array part\",\n \"text_lines\": [\n \"Array part\"\n ]\n },\n {\n \"start_line_number\": 201,\n \"end_line_number\": 201,\n \"line_range\": [\n 201,\n 201\n ],\n \"text\": \"Hash part with string keys\",\n \"text_lines\": [\n \"Hash part with string keys\"\n ]\n },\n {\n \"start_line_number\": 204,\n \"end_line_number\": 204,\n \"line_range\": [\n 204,\n 204\n ],\n \"text\": \"Computed key\",\n \"text_lines\": [\n \"Computed key\"\n ]\n },\n {\n \"start_line_number\": 206,\n \"end_line_number\": 206,\n \"line_range\": [\n 206,\n 206\n ],\n \"text\": \"Nested table\",\n \"text_lines\": [\n \"Nested table\"\n ]\n },\n {\n \"start_line_number\": 213,\n \"end_line_number\": 213,\n \"line_range\": [\n 213,\n 213\n ],\n \"text\": \"── Iterator pattern ───────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Iterator pattern ───────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 215,\n \"end_line_number\": 215,\n \"line_range\": [\n 215,\n 215\n ],\n \"text\": \"- Create a stateful iterator over a range.\",\n \"text_lines\": [\n \"- Create a stateful iterator over a range.\"\n ]\n },\n {\n \"start_line_number\": 226,\n \"end_line_number\": 226,\n \"line_range\": [\n 226,\n 226\n ],\n \"text\": \"Implicit nil return terminates iteration\",\n \"text_lines\": [\n \"Implicit nil return terminates iteration\"\n ]\n },\n {\n \"start_line_number\": 230,\n \"end_line_number\": 230,\n \"line_range\": [\n 230,\n 230\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 231,\n \"end_line_number\": 231,\n \"line_range\": [\n 231,\n 231\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\": 232,\n \"end_line_number\": 232,\n \"line_range\": [\n 232,\n 232\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 240,\n \"end_line_number\": 240,\n \"line_range\": [\n 240,\n 240\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\": 241,\n \"end_line_number\": 241,\n \"line_range\": [\n 241,\n 241\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 249,\n \"end_line_number\": 249,\n \"line_range\": [\n 249,\n 249\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\": 250,\n \"end_line_number\": 250,\n \"line_range\": [\n 250,\n 250\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 258,\n \"end_line_number\": 258,\n \"line_range\": [\n 258,\n 258\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\": 259,\n \"end_line_number\": 259,\n \"line_range\": [\n 259,\n 259\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 267,\n \"end_line_number\": 267,\n \"line_range\": [\n 267,\n 267\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\": 268,\n \"end_line_number\": 268,\n \"line_range\": [\n 268,\n 268\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 276,\n \"end_line_number\": 276,\n \"line_range\": [\n 276,\n 276\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_lua.lua | Lua | 276L | 34 symbols | 0 imports | 110 comments\n> Path: `tests/fixtures/fixture_lua.lua`\n\n## Definitions\n\n### fn `function globalFunc(x)` (L14-16)\n- @param x number The input value.\n---\n- @return number The input incremented by one.\n\n### fn `local function localFunc(y)` (L22-28)\n\n### fn `local function sumAll(...)` (L33-41)\n- @param ... number Variable number of numeric arguments.\n---\n- @return number Sum of all provided values.\n\n- var `local total = 0` (L34)\n- var `local args = {...}` (L35)\n- var `local myVar = 42` (L46)\n- @brief Module-level constant for retry limits.\n- var `local config = {` (L49)\n- @brief Configuration table with default settings.\n### fn `local handler = function(event)` (L59-66)\n- @param event table Event object containing type and data fields.\n\n- var `local MyModule = {}` (L72)\n- @brief Table-based module using method syntax.\n### fn `function MyModule.new(name)` (L78-83)\n- @param name string Instance identifier.\n---\n- @return table New MyModule instance.\n\n- var `local self = setmetatable({}, MyModule)` (L79)\n### fn `MyModule.method = function(self)` (L88-90)\n- @param self table The MyModule instance.\n---\n- @return string The instance name.\n\n### fn `function MyModule:addItem(item)` (L94-97)\n- @param item any The item to store.\n\n### fn `function MyModule:count()` (L101-103)\n- @return number Number of items.\n\n- var `local Animal = {}` (L109)\n- @brief Base class using metatables for inheritance.\n### fn `function Animal.new(species)` (L115-119)\n- @param species string The animal's species.\n---\n- @return table New Animal instance.\n\n- var `local self = setmetatable({}, Animal)` (L116)\n### fn `function Animal:speak()` (L123-125)\n- @return string Sound description.\n\n- var `local Dog = setmetatable({}, { __index = Animal })` (L129)\n- @brief Dog subclass inheriting from Animal.\n### fn `function Dog.new(name)` (L135-140)\n- @param name string The dog's name.\n---\n- @return table New Dog instance.\n\n- var `local self = Animal.new(\"Dog\")` (L136)\n### fn `function Dog:speak()` (L144-146)\n- @return string The dog's vocalization.\n\n### fn `local function makeCounter(step)` (L153-160)\n- @param step number Increment amount per call.\n---\n- @return function Closure returning successive counts.\n\n- var `local count = 0` (L154)\n### fn `local function fibonacci(limit)` (L167-176)\n- @param limit number Maximum number of values to yield.\n---\n- @return function Coroutine wrap function.\n\n### fn `local function safeCall(fn, ...)` (L184-192)\n- @param fn function The function to execute.\n---\n- @param ... any Arguments to pass to fn.\n---\n- @return boolean, any Success flag and result or error message.\n\n- var `local mixedTable = {` (L197)\n- @brief Complex table demonstrating all key types.\n### fn `local function range(from, to)` (L219-228)\n- @param from number Start of range (inclusive).\n---\n- @param to number End of range (inclusive).\n---\n- @return function Iterator function.\n\n- var `local i = from - 1` (L220)\n### fn `function req_cover_lua_1(value)` (L236-238)\n- @brief Coverage helper construct 1.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 1.\n--\n- @param value Input value for helper construct 1.\n--\n- @return Output value for helper construct 1.\n\n### fn `function req_cover_lua_2(value)` (L245-247)\n- @brief Coverage helper construct 2.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 2.\n--\n- @param value Input value for helper construct 2.\n--\n- @return Output value for helper construct 2.\n\n### fn `function req_cover_lua_3(value)` (L254-256)\n- @brief Coverage helper construct 3.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 3.\n--\n- @param value Input value for helper construct 3.\n--\n- @return Output value for helper construct 3.\n\n### fn `function req_cover_lua_4(value)` (L263-265)\n- @brief Coverage helper construct 4.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 4.\n--\n- @param value Input value for helper construct 4.\n--\n- @return Output value for helper construct 4.\n\n### fn `function req_cover_lua_5(value)` (L272-274)\n- @brief Coverage helper construct 5.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 5.\n--\n- @param value Input value for helper construct 5.\n--\n- @return Output value for helper construct 5.\n\n## Symbol Index\n|Symbol|Kind|Vis|Lines|Sig|\n|---|---|---|---|---|\n|`globalFunc`|fn||14-16|function globalFunc(x)|\n|`localFunc`|fn||22-28|local function localFunc(y)|\n|`sumAll`|fn||33-41|local function sumAll(...)|\n|`total`|var||34||\n|`args`|var||35||\n|`myVar`|var||46||\n|`config`|var||49||\n|`handler`|fn||59-66|local handler = function(event)|\n|`MyModule`|var||72||\n|`MyModule.new`|fn||78-83|function MyModule.new(name)|\n|`self`|var||79||\n|`MyModule.method`|fn||88-90|MyModule.method = function(self)|\n|`MyModule:addItem`|fn||94-97|function MyModule:addItem(item)|\n|`MyModule:count`|fn||101-103|function MyModule:count()|\n|`Animal`|var||109||\n|`Animal.new`|fn||115-119|function Animal.new(species)|\n|`self`|var||116||\n|`Animal:speak`|fn||123-125|function Animal:speak()|\n|`Dog`|var||129||\n|`Dog.new`|fn||135-140|function Dog.new(name)|\n|`self`|var||136||\n|`Dog:speak`|fn||144-146|function Dog:speak()|\n|`makeCounter`|fn||153-160|local function makeCounter(step)|\n|`count`|var||154||\n|`fibonacci`|fn||167-176|local function fibonacci(limit)|\n|`safeCall`|fn||184-192|local function safeCall(fn, ...)|\n|`mixedTable`|var||197||\n|`range`|fn||219-228|local function range(from, to)|\n|`i`|var||220||\n|`req_cover_lua_1`|fn||236-238|function req_cover_lua_1(value)|\n|`req_cover_lua_2`|fn||245-247|function req_cover_lua_2(value)|\n|`req_cover_lua_3`|fn||254-256|function req_cover_lua_3(value)|\n|`req_cover_lua_4`|fn||263-265|function req_cover_lua_4(value)|\n|`req_cover_lua_5`|fn||272-274|function req_cover_lua_5(value)|\n\n",
|
|
4
4
|
"stderr": ""
|
|
5
5
|
}
|