pi-usereq 0.6.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 +44 -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 +2658 -2035
- package/pi-usereq/docs/REQUIREMENTS.md +345 -191
- package/pi-usereq/docs/WORKFLOW.md +387 -363
- 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 +546 -65
- package/src/core/debug-runtime.ts +542 -0
- package/src/core/extension-status.ts +324 -202
- 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 +585 -315
- 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 +33 -7
- package/src/core/source-analyzer.ts +27 -7
- package/src/core/token-counter.ts +61 -79
- package/src/core/tool-runner.ts +38 -317
- package/src/index.ts +2629 -1220
- package/src/resources/images/favicon.svg +21 -0
- package/src/resources/images/pi.dev.png +0 -0
- 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 +74 -73
- package/tests/extension-registration.test.ts +3626 -685
- 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_python.py\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_python.py\"\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\": 50,\n \"total_import_count\": 8,\n \"total_comment_count\": 90,\n \"total_standalone_comment_count\": 56,\n \"total_doxygen_field_count\": 120,\n \"symbol_kind_counts\": {\n \"CLASS\": 7,\n \"FUNCTION\": 37,\n \"VARIABLE\": 6\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_python.py\"\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_python.py\",\n \"relative_path\": \"tests/fixtures/fixture_python.py\",\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\": 502,\n \"line_range\": [\n 1,\n 502\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_python.py\",\n \"canonical_path\": \"tests/fixtures/fixture_python.py\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_python.py\",\n \"file_name\": \"fixture_python.py\",\n \"file_extension\": \".py\",\n \"language_id\": \"python\",\n \"language_name\": \"Python\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 8,\n \"symbol_count\": 50,\n \"comment_count\": 90,\n \"standalone_comment_count\": 56,\n \"doxygen_field_count\": 120,\n \"file_doxygen\": {\n \"brief\": [\n \"Comprehensive Python test fixture for parser validation.\"\n ],\n \"details\": [\n \"Covers classes, protocols, decorators, generators, async functions, and rich Doxygen-tagged constructs used to validate extraction workflows and deterministic parser behavior.\"\n ]\n },\n \"imports\": [\n {\n \"start_line_number\": 7,\n \"end_line_number\": 7,\n \"line_range\": [\n 7,\n 7\n ],\n \"import_name\": \"asyncio #!< @brief Async IO support. @details Used for async test fixtures. # noqa: F401\",\n \"statement_text\": \"import asyncio #!< @brief Async IO support. @details Used for async test fixtures. # noqa: F401\"\n },\n {\n \"start_line_number\": 8,\n \"end_line_number\": 8,\n \"line_range\": [\n 8,\n 8\n ],\n \"import_name\": \"os #!< @brief OS interface module. @details Provides OS-dependent functionality. # noqa: F401\",\n \"statement_text\": \"import os #!< @brief OS interface module. @details Provides OS-dependent functionality. # noqa: F401\"\n },\n {\n \"start_line_number\": 9,\n \"end_line_number\": 9,\n \"line_range\": [\n 9,\n 9\n ],\n \"import_name\": \"sys #!< @brief System-specific parameters. @see sys.exit() for exit handling.\",\n \"statement_text\": \"import sys #!< @brief System-specific parameters. @see sys.exit() for exit handling.\"\n },\n {\n \"start_line_number\": 10,\n \"end_line_number\": 10,\n \"line_range\": [\n 10,\n 10\n ],\n \"import_name\": \"Path #!< @brief Object-oriented filesystem paths. @note Preferred over os.path. # noqa: F401\",\n \"statement_text\": \"from pathlib import Path #!< @brief Object-oriented filesystem paths. @note Preferred over os.path. # noqa: F401\"\n },\n {\n \"start_line_number\": 11,\n \"end_line_number\": 11,\n \"line_range\": [\n 11,\n 11\n ],\n \"import_name\": \"(\",\n \"statement_text\": \"from typing import (\"\n },\n {\n \"start_line_number\": 15,\n \"end_line_number\": 15,\n \"line_range\": [\n 15,\n 15\n ],\n \"import_name\": \"dataclass, field\",\n \"statement_text\": \"from dataclasses import dataclass, field\"\n },\n {\n \"start_line_number\": 16,\n \"end_line_number\": 16,\n \"line_range\": [\n 16,\n 16\n ],\n \"import_name\": \"ABC, abstractmethod\",\n \"statement_text\": \"from abc import ABC, abstractmethod\"\n },\n {\n \"start_line_number\": 17,\n \"end_line_number\": 17,\n \"line_range\": [\n 17,\n 17\n ],\n \"import_name\": \"contextmanager\",\n \"statement_text\": \"from contextlib import contextmanager\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 19,\n \"end_line_number\": 19,\n \"line_range\": [\n 19,\n 19\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"MAX_RETRIES\",\n \"qualified_name\": \"MAX_RETRIES\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"MAX_RETRIES = 3 #!< @brief Maximum retry attempts. @details Applied to network operations. @warning Tune per use case. @satisfies retry-policy\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Maximum retry attempts.\",\n \"doxygen\": {\n \"brief\": [\n \"Maximum retry attempts.\"\n ],\n \"details\": [\n \"Applied to network operations.\"\n ],\n \"warnings\": [\n \"Tune per use case.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 20,\n \"end_line_number\": 20,\n \"line_range\": [\n 20,\n 20\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"DEFAULT_TIMEOUT\",\n \"qualified_name\": \"DEFAULT_TIMEOUT\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"DEFAULT_TIMEOUT = 30.0 #!< @brief Default timeout in seconds. @note For I/O operations.\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Default timeout in seconds.\",\n \"doxygen\": {\n \"brief\": [\n \"Default timeout in seconds.\"\n ],\n \"notes\": [\n \"For I/O operations.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 27,\n \"end_line_number\": 61,\n \"line_range\": [\n 27,\n 61\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"Config\",\n \"qualified_name\": \"Config\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Config\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"get\",\n \"__post_init__\"\n ],\n \"child_qualified_names\": [\n \"Config.get\",\n \"Config.__post_init__\"\n ],\n \"depth\": 0,\n \"decorator_text\": \"@dataclass(slots=True)\",\n \"attached_comment_summary_text\": \"Stores key-value pairs with optional default fallback.\",\n \"doxygen\": {\n \"brief\": [\n \"Stores key-value pairs with optional default fallback.\"\n ],\n \"details\": [\n \"Dataclass-based configuration with validation.\"\n ],\n \"notes\": [\n \"Immutable after creation when frozen=True is used.\"\n ],\n \"see_also\": [\n \"__post_init__() for validation logic.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 28,\n \"end_line_number\": 34,\n \"line_range\": [\n 28,\n 34\n ],\n \"text\": \"Configuration data holder for the application. @brief Stores key-value pairs with optional default fallback. @details Dataclass-based configuration with validation. @note Immutable after creation when frozen=True is used. @see __post_init__() for validation logic.\",\n \"text_lines\": [\n \"Configuration data holder for the application. @brief Stores key-value pairs with optional default fallback. @details Dataclass-based configuration with validation. @note Immutable after creation when frozen=True is used. @see __post_init__() for validation logic.\"\n ]\n },\n {\n \"start_line_number\": 40,\n \"end_line_number\": 45,\n \"line_range\": [\n 40,\n 45\n ],\n \"text\": \"Retrieve a configuration value by key. @param key The configuration key to look up. @param default Fallback value if key is missing. @return The configuration value or default.\",\n \"text_lines\": [\n \"Retrieve a configuration value by key. @param key The configuration key to look up. @param default Fallback value if key is missing. @return The configuration value or default.\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"Check primary values first\",\n \"text_lines\": [\n \"Check primary values first\"\n ]\n },\n {\n \"start_line_number\": 49,\n \"end_line_number\": 49,\n \"line_range\": [\n 49,\n 49\n ],\n \"text\": \"Fallback to default\",\n \"text_lines\": [\n \"Fallback to default\"\n ]\n },\n {\n \"start_line_number\": 53,\n \"end_line_number\": 57,\n \"line_range\": [\n 53,\n 57\n ],\n \"text\": \"Validate configuration after initialization. @brief Ensures name is non-empty and normalizes values. @raises ValueError If name is empty or whitespace.\",\n \"text_lines\": [\n \"Validate configuration after initialization. @brief Ensures name is non-empty and normalizes values. @raises ValueError If name is empty or whitespace.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 48,\n \"text\": \"return self.values[key]\"\n },\n {\n \"line_number\": 50,\n \"text\": \"return default\"\n },\n {\n \"line_number\": 59,\n \"text\": \"raise ValueError(\\\"Config name cannot be empty\\\")\"\n }\n ]\n },\n {\n \"start_line_number\": 39,\n \"end_line_number\": 51,\n \"line_range\": [\n 39,\n 51\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"get\",\n \"qualified_name\": \"Config.get\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def get(self, key: str, default: str = \\\"\\\") -> str\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Config\",\n \"parent_qualified_name\": \"Config\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Stores key-value pairs with optional default fallback.\",\n \"doxygen\": {\n \"brief\": [\n \"Stores key-value pairs with optional default fallback.\"\n ],\n \"details\": [\n \"Dataclass-based configuration with validation.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"key\",\n \"description\": \"The configuration key to look up.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"default\",\n \"description\": \"Fallback value if key is missing.\"\n }\n ],\n \"returns\": [\n \"The configuration value or default.\"\n ],\n \"notes\": [\n \"Immutable after creation when frozen=True is used.\"\n ],\n \"see_also\": [\n \"__post_init__() for validation logic.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 40,\n \"end_line_number\": 45,\n \"line_range\": [\n 40,\n 45\n ],\n \"text\": \"Retrieve a configuration value by key. @param key The configuration key to look up. @param default Fallback value if key is missing. @return The configuration value or default.\",\n \"text_lines\": [\n \"Retrieve a configuration value by key. @param key The configuration key to look up. @param default Fallback value if key is missing. @return The configuration value or default.\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"Check primary values first\",\n \"text_lines\": [\n \"Check primary values first\"\n ]\n },\n {\n \"start_line_number\": 49,\n \"end_line_number\": 49,\n \"line_range\": [\n 49,\n 49\n ],\n \"text\": \"Fallback to default\",\n \"text_lines\": [\n \"Fallback to default\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 48,\n \"text\": \"return self.values[key]\"\n },\n {\n \"line_number\": 50,\n \"text\": \"return default\"\n }\n ]\n },\n {\n \"start_line_number\": 52,\n \"end_line_number\": 61,\n \"line_range\": [\n 52,\n 61\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"__post_init__\",\n \"qualified_name\": \"Config.__post_init__\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def __post_init__(self) -> None\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"Config\",\n \"parent_qualified_name\": \"Config\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Ensures name is non-empty and normalizes values. @raises ValueError If name is empty or whitespace.\",\n \"doxygen\": {\n \"brief\": [\n \"Ensures name is non-empty and normalizes values. @raises ValueError If name is empty or whitespace.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 53,\n \"end_line_number\": 57,\n \"line_range\": [\n 53,\n 57\n ],\n \"text\": \"Validate configuration after initialization. @brief Ensures name is non-empty and normalizes values. @raises ValueError If name is empty or whitespace.\",\n \"text_lines\": [\n \"Validate configuration after initialization. @brief Ensures name is non-empty and normalizes values. @raises ValueError If name is empty or whitespace.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 59,\n \"text\": \"raise ValueError(\\\"Config name cannot be empty\\\")\"\n }\n ]\n },\n {\n \"start_line_number\": 62,\n \"end_line_number\": 167,\n \"line_range\": [\n 62,\n 167\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"MyClass\",\n \"qualified_name\": \"MyClass\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class MyClass\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"__init__\",\n \"name\",\n \"name\",\n \"create_default\",\n \"from_dict\",\n \"process\",\n \"compute\"\n ],\n \"child_qualified_names\": [\n \"MyClass.__init__\",\n \"MyClass.name\",\n \"MyClass.name\",\n \"MyClass.create_default\",\n \"MyClass.from_dict\",\n \"MyClass.process\",\n \"MyClass.compute\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Base class demonstrating various Python constructs.\",\n \"doxygen\": {\n \"brief\": [\n \"Base class demonstrating various Python constructs.\"\n ],\n \"details\": [\n \"Includes nested classes, properties, and static methods.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 63,\n \"end_line_number\": 67,\n \"line_range\": [\n 63,\n 67\n ],\n \"text\": \"Class docstring for MyClass. @brief Base class demonstrating various Python constructs. @details Includes nested classes, properties, and static methods.\",\n \"text_lines\": [\n \"Class docstring for MyClass. @brief Base class demonstrating various Python constructs. @details Includes nested classes, properties, and static methods.\"\n ]\n },\n {\n \"start_line_number\": 70,\n \"end_line_number\": 73,\n \"line_range\": [\n 70,\n 73\n ],\n \"text\": \"Nested helper class for internal data grouping. @brief Handles auxiliary computations within MyClass scope.\",\n \"text_lines\": [\n \"Nested helper class for internal data grouping. @brief Handles auxiliary computations within MyClass scope.\"\n ]\n },\n {\n \"start_line_number\": 75,\n \"end_line_number\": 78,\n \"line_range\": [\n 75,\n 78\n ],\n \"text\": \"Initialize the helper with a tag identifier. @param tag Short label for categorization.\",\n \"text_lines\": [\n \"Initialize the helper with a tag identifier. @param tag Short label for categorization.\"\n ]\n },\n {\n \"start_line_number\": 82,\n \"end_line_number\": 85,\n \"line_range\": [\n 82,\n 85\n ],\n \"text\": \"Return a formatted description of this helper. @return String combining class name and tag.\",\n \"text_lines\": [\n \"Return a formatted description of this helper. @return String combining class name and tag.\"\n ]\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 93,\n \"line_range\": [\n 89,\n 93\n ],\n \"text\": \"Initialize MyClass with a name and retry count. @param name Identifier for this instance. @param retries Maximum retry attempts; defaults to MAX_RETRIES.\",\n \"text_lines\": [\n \"Initialize MyClass with a name and retry count. @param name Identifier for this instance. @param retries Maximum retry attempts; defaults to MAX_RETRIES.\"\n ]\n },\n {\n \"start_line_number\": 96,\n \"end_line_number\": 96,\n \"line_range\": [\n 96,\n 96\n ],\n \"text\": \"Internal counter tracks invocation count\",\n \"text_lines\": [\n \"Internal counter tracks invocation count\"\n ]\n },\n {\n \"start_line_number\": 101,\n \"end_line_number\": 104,\n \"line_range\": [\n 101,\n 104\n ],\n \"text\": \"Read-only property exposing the instance name. @return The name string set during initialization.\",\n \"text_lines\": [\n \"Read-only property exposing the instance name. @return The name string set during initialization.\"\n ]\n },\n {\n \"start_line_number\": 109,\n \"end_line_number\": 113,\n \"line_range\": [\n 109,\n 113\n ],\n \"text\": \"Set the instance name after validation. @param value New name; must be non-empty. @raises ValueError If value is empty.\",\n \"text_lines\": [\n \"Set the instance name after validation. @param value New name; must be non-empty. @raises ValueError If value is empty.\"\n ]\n },\n {\n \"start_line_number\": 120,\n \"end_line_number\": 123,\n \"line_range\": [\n 120,\n 123\n ],\n \"text\": \"Factory method to build a MyClass with default settings. @return A new MyClass instance with name='default'.\",\n \"text_lines\": [\n \"Factory method to build a MyClass with default settings. @return A new MyClass instance with name='default'.\"\n ]\n },\n {\n \"start_line_number\": 128,\n \"end_line_number\": 133,\n \"line_range\": [\n 128,\n 133\n ],\n \"text\": \"Construct a MyClass from a dictionary payload. @param data Dictionary with 'name' and optional 'retries' keys. @return A new instance populated from data. @raises KeyError If 'name' key is missing.\",\n \"text_lines\": [\n \"Construct a MyClass from a dictionary payload. @param data Dictionary with 'name' and optional 'retries' keys. @return A new instance populated from data. @raises KeyError If 'name' key is missing.\"\n ]\n },\n {\n \"start_line_number\": 140,\n \"end_line_number\": 145,\n \"line_range\": [\n 140,\n 145\n ],\n \"text\": \"Process a list of string items with optional logging. @param items List of strings to process sequentially. @param verbose Enable detailed logging when True. @return The first valid item found or None if all are empty.\",\n \"text_lines\": [\n \"Process a list of string items with optional logging. @param items List of strings to process sequentially. @param verbose Enable detailed logging when True. @return The first valid item found or None if all are empty.\"\n ]\n },\n {\n \"start_line_number\": 148,\n \"end_line_number\": 148,\n \"line_range\": [\n 148,\n 148\n ],\n \"text\": \"Skip empty entries\",\n \"text_lines\": [\n \"Skip empty entries\"\n ]\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 153,\n \"line_range\": [\n 153,\n 153\n ],\n \"text\": \"Conditional return on first valid item\",\n \"text_lines\": [\n \"Conditional return on first valid item\"\n ]\n },\n {\n \"start_line_number\": 158,\n \"end_line_number\": 163,\n \"line_range\": [\n 158,\n 163\n ],\n \"text\": \"Compute a value using conditional assignment on return. @param x First operand. @param y Second operand. @return Sum if both positive, difference otherwise.\",\n \"text_lines\": [\n \"Compute a value using conditional assignment on return. @param x First operand. @param y Second operand. @return Sum if both positive, difference otherwise.\"\n ]\n },\n {\n \"start_line_number\": 164,\n \"end_line_number\": 164,\n \"line_range\": [\n 164,\n 164\n ],\n \"text\": \"Ternary return with compound condition\",\n \"text_lines\": [\n \"Ternary return with compound condition\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 86,\n \"text\": \"return f\\\"Helper({self.tag})\\\"\"\n },\n {\n \"line_number\": 105,\n \"text\": \"return self._name\"\n },\n {\n \"line_number\": 115,\n \"text\": \"raise ValueError(\\\"Name cannot be empty\\\")\"\n },\n {\n \"line_number\": 124,\n \"text\": \"return MyClass(\\\"default\\\")\"\n },\n {\n \"line_number\": 134,\n \"text\": \"return cls(\"\n },\n {\n \"line_number\": 154,\n \"text\": \"return item if len(item) > 1 else item.upper()\"\n },\n {\n \"line_number\": 155,\n \"text\": \"return None\"\n },\n {\n \"line_number\": 165,\n \"text\": \"return (x + y) if (x > 0 and y > 0) else abs(x - y)\"\n }\n ]\n },\n {\n \"start_line_number\": 69,\n \"end_line_number\": 87,\n \"line_range\": [\n 69,\n 87\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"InnerHelper\",\n \"qualified_name\": \"InnerHelper\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class InnerHelper\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"__init__\",\n \"describe\"\n ],\n \"child_qualified_names\": [\n \"InnerHelper.__init__\",\n \"InnerHelper.describe\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Base class demonstrating various Python constructs.\",\n \"doxygen\": {\n \"brief\": [\n \"Base class demonstrating various Python constructs.\",\n \"Handles auxiliary computations within MyClass scope.\"\n ],\n \"details\": [\n \"Includes nested classes, properties, and static methods.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 70,\n \"end_line_number\": 73,\n \"line_range\": [\n 70,\n 73\n ],\n \"text\": \"Nested helper class for internal data grouping. @brief Handles auxiliary computations within MyClass scope.\",\n \"text_lines\": [\n \"Nested helper class for internal data grouping. @brief Handles auxiliary computations within MyClass scope.\"\n ]\n },\n {\n \"start_line_number\": 75,\n \"end_line_number\": 78,\n \"line_range\": [\n 75,\n 78\n ],\n \"text\": \"Initialize the helper with a tag identifier. @param tag Short label for categorization.\",\n \"text_lines\": [\n \"Initialize the helper with a tag identifier. @param tag Short label for categorization.\"\n ]\n },\n {\n \"start_line_number\": 82,\n \"end_line_number\": 85,\n \"line_range\": [\n 82,\n 85\n ],\n \"text\": \"Return a formatted description of this helper. @return String combining class name and tag.\",\n \"text_lines\": [\n \"Return a formatted description of this helper. @return String combining class name and tag.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 86,\n \"text\": \"return f\\\"Helper({self.tag})\\\"\"\n }\n ]\n },\n {\n \"start_line_number\": 74,\n \"end_line_number\": 80,\n \"line_range\": [\n 74,\n 80\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"__init__\",\n \"qualified_name\": \"InnerHelper.__init__\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def __init__(self, tag: str)\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"InnerHelper\",\n \"parent_qualified_name\": \"InnerHelper\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Handles auxiliary computations within MyClass scope.\",\n \"doxygen\": {\n \"brief\": [\n \"Handles auxiliary computations within MyClass scope.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"tag\",\n \"description\": \"Short label for categorization.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 75,\n \"end_line_number\": 78,\n \"line_range\": [\n 75,\n 78\n ],\n \"text\": \"Initialize the helper with a tag identifier. @param tag Short label for categorization.\",\n \"text_lines\": [\n \"Initialize the helper with a tag identifier. @param tag Short label for categorization.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 81,\n \"end_line_number\": 87,\n \"line_range\": [\n 81,\n 87\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"describe\",\n \"qualified_name\": \"InnerHelper.describe\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def describe(self) -> str\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"InnerHelper\",\n \"parent_qualified_name\": \"InnerHelper\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Initialize the helper with a tag identifier. @param tag Short label for categorization.\",\n \"doxygen\": {\n \"returns\": [\n \"String combining class name and tag.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 82,\n \"end_line_number\": 85,\n \"line_range\": [\n 82,\n 85\n ],\n \"text\": \"Return a formatted description of this helper. @return String combining class name and tag.\",\n \"text_lines\": [\n \"Return a formatted description of this helper. @return String combining class name and tag.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 86,\n \"text\": \"return f\\\"Helper({self.tag})\\\"\"\n }\n ]\n },\n {\n \"start_line_number\": 88,\n \"end_line_number\": 98,\n \"line_range\": [\n 88,\n 98\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"__init__\",\n \"qualified_name\": \"MyClass.__init__\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def __init__(self, name: str, retries: int = MAX_RETRIES)\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"MyClass\",\n \"parent_qualified_name\": \"MyClass\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Return a formatted description of this helper. @return String combining class name and tag.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"name\",\n \"description\": \"Identifier for this instance.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"retries\",\n \"description\": \"Maximum retry attempts; defaults to MAX_RETRIES.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 89,\n \"end_line_number\": 93,\n \"line_range\": [\n 89,\n 93\n ],\n \"text\": \"Initialize MyClass with a name and retry count. @param name Identifier for this instance. @param retries Maximum retry attempts; defaults to MAX_RETRIES.\",\n \"text_lines\": [\n \"Initialize MyClass with a name and retry count. @param name Identifier for this instance. @param retries Maximum retry attempts; defaults to MAX_RETRIES.\"\n ]\n },\n {\n \"start_line_number\": 96,\n \"end_line_number\": 96,\n \"line_range\": [\n 96,\n 96\n ],\n \"text\": \"Internal counter tracks invocation count\",\n \"text_lines\": [\n \"Internal counter tracks invocation count\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 100,\n \"end_line_number\": 106,\n \"line_range\": [\n 100,\n 106\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"name\",\n \"qualified_name\": \"MyClass.name\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def name(self) -> str\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyClass\",\n \"parent_qualified_name\": \"MyClass\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"decorator_text\": \"@property\",\n \"doxygen\": {\n \"returns\": [\n \"The name string set during initialization.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 101,\n \"end_line_number\": 104,\n \"line_range\": [\n 101,\n 104\n ],\n \"text\": \"Read-only property exposing the instance name. @return The name string set during initialization.\",\n \"text_lines\": [\n \"Read-only property exposing the instance name. @return The name string set during initialization.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 105,\n \"text\": \"return self._name\"\n }\n ]\n },\n {\n \"start_line_number\": 108,\n \"end_line_number\": 117,\n \"line_range\": [\n 108,\n 117\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"name\",\n \"qualified_name\": \"MyClass.name\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def name(self, value: str) -> None\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyClass\",\n \"parent_qualified_name\": \"MyClass\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"decorator_text\": \"@name.setter\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"New name; must be non-empty. @raises ValueError If value is empty.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 109,\n \"end_line_number\": 113,\n \"line_range\": [\n 109,\n 113\n ],\n \"text\": \"Set the instance name after validation. @param value New name; must be non-empty. @raises ValueError If value is empty.\",\n \"text_lines\": [\n \"Set the instance name after validation. @param value New name; must be non-empty. @raises ValueError If value is empty.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 115,\n \"text\": \"raise ValueError(\\\"Name cannot be empty\\\")\"\n }\n ]\n },\n {\n \"start_line_number\": 119,\n \"end_line_number\": 125,\n \"line_range\": [\n 119,\n 125\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"create_default\",\n \"qualified_name\": \"MyClass.create_default\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def create_default() -> \\\"MyClass\\\"\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyClass\",\n \"parent_qualified_name\": \"MyClass\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"decorator_text\": \"@staticmethod\",\n \"doxygen\": {\n \"returns\": [\n \"A new MyClass instance with name='default'.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 120,\n \"end_line_number\": 123,\n \"line_range\": [\n 120,\n 123\n ],\n \"text\": \"Factory method to build a MyClass with default settings. @return A new MyClass instance with name='default'.\",\n \"text_lines\": [\n \"Factory method to build a MyClass with default settings. @return A new MyClass instance with name='default'.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 124,\n \"text\": \"return MyClass(\\\"default\\\")\"\n }\n ]\n },\n {\n \"start_line_number\": 127,\n \"end_line_number\": 138,\n \"line_range\": [\n 127,\n 138\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"from_dict\",\n \"qualified_name\": \"MyClass.from_dict\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def from_dict(cls, data: dict) -> \\\"MyClass\\\"\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyClass\",\n \"parent_qualified_name\": \"MyClass\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"decorator_text\": \"@classmethod\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"data\",\n \"description\": \"Dictionary with 'name' and optional 'retries' keys.\"\n }\n ],\n \"returns\": [\n \"A new instance populated from data. @raises KeyError If 'name' key is missing.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 128,\n \"end_line_number\": 133,\n \"line_range\": [\n 128,\n 133\n ],\n \"text\": \"Construct a MyClass from a dictionary payload. @param data Dictionary with 'name' and optional 'retries' keys. @return A new instance populated from data. @raises KeyError If 'name' key is missing.\",\n \"text_lines\": [\n \"Construct a MyClass from a dictionary payload. @param data Dictionary with 'name' and optional 'retries' keys. @return A new instance populated from data. @raises KeyError If 'name' key is missing.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 134,\n \"text\": \"return cls(\"\n }\n ]\n },\n {\n \"start_line_number\": 139,\n \"end_line_number\": 156,\n \"line_range\": [\n 139,\n 156\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"process\",\n \"qualified_name\": \"MyClass.process\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def process(self, items: List[str], *, verbose: bool = False) -> Optional[str]\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyClass\",\n \"parent_qualified_name\": \"MyClass\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"items\",\n \"description\": \"List of strings to process sequentially.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"verbose\",\n \"description\": \"Enable detailed logging when True.\"\n }\n ],\n \"returns\": [\n \"The first valid item found or None if all are empty.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 140,\n \"end_line_number\": 145,\n \"line_range\": [\n 140,\n 145\n ],\n \"text\": \"Process a list of string items with optional logging. @param items List of strings to process sequentially. @param verbose Enable detailed logging when True. @return The first valid item found or None if all are empty.\",\n \"text_lines\": [\n \"Process a list of string items with optional logging. @param items List of strings to process sequentially. @param verbose Enable detailed logging when True. @return The first valid item found or None if all are empty.\"\n ]\n },\n {\n \"start_line_number\": 148,\n \"end_line_number\": 148,\n \"line_range\": [\n 148,\n 148\n ],\n \"text\": \"Skip empty entries\",\n \"text_lines\": [\n \"Skip empty entries\"\n ]\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 153,\n \"line_range\": [\n 153,\n 153\n ],\n \"text\": \"Conditional return on first valid item\",\n \"text_lines\": [\n \"Conditional return on first valid item\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 154,\n \"text\": \"return item if len(item) > 1 else item.upper()\"\n },\n {\n \"line_number\": 155,\n \"text\": \"return None\"\n }\n ]\n },\n {\n \"start_line_number\": 157,\n \"end_line_number\": 167,\n \"line_range\": [\n 157,\n 167\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"compute\",\n \"qualified_name\": \"MyClass.compute\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def compute(self, x: int, y: int) -> int\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyClass\",\n \"parent_qualified_name\": \"MyClass\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"x\",\n \"description\": \"First operand.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"y\",\n \"description\": \"Second operand.\"\n }\n ],\n \"returns\": [\n \"Sum if both positive, difference otherwise.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 158,\n \"end_line_number\": 163,\n \"line_range\": [\n 158,\n 163\n ],\n \"text\": \"Compute a value using conditional assignment on return. @param x First operand. @param y Second operand. @return Sum if both positive, difference otherwise.\",\n \"text_lines\": [\n \"Compute a value using conditional assignment on return. @param x First operand. @param y Second operand. @return Sum if both positive, difference otherwise.\"\n ]\n },\n {\n \"start_line_number\": 164,\n \"end_line_number\": 164,\n \"line_range\": [\n 164,\n 164\n ],\n \"text\": \"Ternary return with compound condition\",\n \"text_lines\": [\n \"Ternary return with compound condition\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 165,\n \"text\": \"return (x + y) if (x > 0 and y > 0) else abs(x - y)\"\n }\n ]\n },\n {\n \"start_line_number\": 168,\n \"end_line_number\": 196,\n \"line_range\": [\n 168,\n 196\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"AbstractProcessor\",\n \"qualified_name\": \"AbstractProcessor\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class AbstractProcessor(ABC)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"execute\",\n \"execute_async\"\n ],\n \"child_qualified_names\": [\n \"AbstractProcessor.execute\",\n \"AbstractProcessor.execute_async\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"ABC\",\n \"attached_comment_summary_text\": \"Defines the interface that concrete processors must implement.\",\n \"doxygen\": {\n \"brief\": [\n \"Defines the interface that concrete processors must implement.\"\n ],\n \"details\": [\n \"ABC-based interface with abstract methods.\"\n ],\n \"notes\": [\n \"Subclasses must implement execute() and execute_async().\"\n ],\n \"see_also\": [\n \"ConcreteProcessor for a working implementation.\",\n \"ABC documentation for abstract base class patterns.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 169,\n \"end_line_number\": 176,\n \"line_range\": [\n 169,\n 176\n ],\n \"text\": \"Abstract base class for all data processors. @brief Defines the interface that concrete processors must implement. @details ABC-based interface with abstract methods. @note Subclasses must implement execute() and execute_async(). @see ConcreteProcessor for a working implementation. @sa ABC documentation for abstract base class patterns.\",\n \"text_lines\": [\n \"Abstract base class for all data processors. @brief Defines the interface that concrete processors must implement. @details ABC-based interface with abstract methods. @note Subclasses must implement execute() and execute_async(). @see ConcreteProcessor for a working implementation. @sa ABC documentation for abstract base class patterns.\"\n ]\n },\n {\n \"start_line_number\": 180,\n \"end_line_number\": 184,\n \"line_range\": [\n 180,\n 184\n ],\n \"text\": \"Execute processing on raw byte data. @param data The raw input bytes to process. @return True if processing succeeded, False otherwise.\",\n \"text_lines\": [\n \"Execute processing on raw byte data. @param data The raw input bytes to process. @return True if processing succeeded, False otherwise.\"\n ]\n },\n {\n \"start_line_number\": 189,\n \"end_line_number\": 193,\n \"line_range\": [\n 189,\n 193\n ],\n \"text\": \"Asynchronous variant of execute. @param data The raw input bytes to process. @return True if processing succeeded.\",\n \"text_lines\": [\n \"Asynchronous variant of execute. @param data The raw input bytes to process. @return True if processing succeeded.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 179,\n \"end_line_number\": 186,\n \"line_range\": [\n 179,\n 186\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"execute\",\n \"qualified_name\": \"AbstractProcessor.execute\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def execute(self, data: bytes) -> bool\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"AbstractProcessor\",\n \"parent_qualified_name\": \"AbstractProcessor\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"decorator_text\": \"@abstractmethod\",\n \"attached_comment_summary_text\": \"Abstract base class for all data processors. @brief Defines the interface that concrete processors must implement. @details ABC-based interface wit...\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"data\",\n \"description\": \"The raw input bytes to process.\"\n }\n ],\n \"returns\": [\n \"True if processing succeeded, False otherwise.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 180,\n \"end_line_number\": 184,\n \"line_range\": [\n 180,\n 184\n ],\n \"text\": \"Execute processing on raw byte data. @param data The raw input bytes to process. @return True if processing succeeded, False otherwise.\",\n \"text_lines\": [\n \"Execute processing on raw byte data. @param data The raw input bytes to process. @return True if processing succeeded, False otherwise.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 188,\n \"end_line_number\": 196,\n \"line_range\": [\n 188,\n 196\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"execute_async\",\n \"qualified_name\": \"AbstractProcessor.execute_async\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"async def execute_async(self, data: bytes) -> bool\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"AbstractProcessor\",\n \"parent_qualified_name\": \"AbstractProcessor\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"decorator_text\": \"@abstractmethod\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"data\",\n \"description\": \"The raw input bytes to process.\"\n }\n ],\n \"returns\": [\n \"True if processing succeeded.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 189,\n \"end_line_number\": 193,\n \"line_range\": [\n 189,\n 193\n ],\n \"text\": \"Asynchronous variant of execute. @param data The raw input bytes to process. @return True if processing succeeded.\",\n \"text_lines\": [\n \"Asynchronous variant of execute. @param data The raw input bytes to process. @return True if processing succeeded.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 197,\n \"end_line_number\": 231,\n \"line_range\": [\n 197,\n 231\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"ConcreteProcessor\",\n \"qualified_name\": \"ConcreteProcessor\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class ConcreteProcessor(AbstractProcessor)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"execute\",\n \"execute_async\"\n ],\n \"child_qualified_names\": [\n \"ConcreteProcessor.execute\",\n \"ConcreteProcessor.execute_async\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"AbstractProcessor\",\n \"attached_comment_summary_text\": \"Processes byte data by decoding and validating content.\",\n \"doxygen\": {\n \"brief\": [\n \"Processes byte data by decoding and validating content.\"\n ],\n \"details\": [\n \"Implements synchronous and async execute methods.\"\n ],\n \"notes\": [\n \"Thread-safe for read operations.\"\n ],\n \"see_also\": [\n \"AbstractProcessor for interface definition.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 198,\n \"end_line_number\": 204,\n \"line_range\": [\n 198,\n 204\n ],\n \"text\": \"Concrete implementation of AbstractProcessor. @brief Processes byte data by decoding and validating content. @details Implements synchronous and async execute methods. @note Thread-safe for read operations. @see AbstractProcessor for interface definition.\",\n \"text_lines\": [\n \"Concrete implementation of AbstractProcessor. @brief Processes byte data by decoding and validating content. @details Implements synchronous and async execute methods. @note Thread-safe for read operations. @see AbstractProcessor for interface definition.\"\n ]\n },\n {\n \"start_line_number\": 207,\n \"end_line_number\": 212,\n \"line_range\": [\n 207,\n 212\n ],\n \"text\": \"Decode and validate byte data synchronously. @param data Raw bytes, expected UTF-8 encoded text. @return True if decoding and validation succeed. @raises UnicodeDecodeError Propagated if data is not valid UTF-8.\",\n \"text_lines\": [\n \"Decode and validate byte data synchronously. @param data Raw bytes, expected UTF-8 encoded text. @return True if decoding and validation succeed. @raises UnicodeDecodeError Propagated if data is not valid UTF-8.\"\n ]\n },\n {\n \"start_line_number\": 215,\n \"end_line_number\": 215,\n \"line_range\": [\n 215,\n 215\n ],\n \"text\": \"Validate non-empty after decode\",\n \"text_lines\": [\n \"Validate non-empty after decode\"\n ]\n },\n {\n \"start_line_number\": 220,\n \"end_line_number\": 220,\n \"line_range\": [\n 220,\n 220\n ],\n \"text\": \"Ensure cleanup regardless of outcome\",\n \"text_lines\": [\n \"Ensure cleanup regardless of outcome\"\n ]\n },\n {\n \"start_line_number\": 224,\n \"end_line_number\": 228,\n \"line_range\": [\n 224,\n 228\n ],\n \"text\": \"Async decode and validate byte data. @param data Raw bytes to process asynchronously. @return True if valid content found.\",\n \"text_lines\": [\n \"Async decode and validate byte data. @param data Raw bytes to process asynchronously. @return True if valid content found.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 216,\n \"text\": \"return bool(text.strip())\"\n },\n {\n \"line_number\": 218,\n \"text\": \"return False\"\n },\n {\n \"line_number\": 229,\n \"text\": \"return self.execute(data)\"\n }\n ]\n },\n {\n \"start_line_number\": 206,\n \"end_line_number\": 222,\n \"line_range\": [\n 206,\n 222\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"execute\",\n \"qualified_name\": \"ConcreteProcessor.execute\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def execute(self, data: bytes) -> bool\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"ConcreteProcessor\",\n \"parent_qualified_name\": \"ConcreteProcessor\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Processes byte data by decoding and validating content.\",\n \"doxygen\": {\n \"brief\": [\n \"Processes byte data by decoding and validating content.\"\n ],\n \"details\": [\n \"Implements synchronous and async execute methods.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"data\",\n \"description\": \"Raw bytes, expected UTF-8 encoded text.\"\n }\n ],\n \"returns\": [\n \"True if decoding and validation succeed. @raises UnicodeDecodeError Propagated if data is not valid UTF-8.\"\n ],\n \"notes\": [\n \"Thread-safe for read operations.\"\n ],\n \"see_also\": [\n \"AbstractProcessor for interface definition.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 207,\n \"end_line_number\": 212,\n \"line_range\": [\n 207,\n 212\n ],\n \"text\": \"Decode and validate byte data synchronously. @param data Raw bytes, expected UTF-8 encoded text. @return True if decoding and validation succeed. @raises UnicodeDecodeError Propagated if data is not valid UTF-8.\",\n \"text_lines\": [\n \"Decode and validate byte data synchronously. @param data Raw bytes, expected UTF-8 encoded text. @return True if decoding and validation succeed. @raises UnicodeDecodeError Propagated if data is not valid UTF-8.\"\n ]\n },\n {\n \"start_line_number\": 215,\n \"end_line_number\": 215,\n \"line_range\": [\n 215,\n 215\n ],\n \"text\": \"Validate non-empty after decode\",\n \"text_lines\": [\n \"Validate non-empty after decode\"\n ]\n },\n {\n \"start_line_number\": 220,\n \"end_line_number\": 220,\n \"line_range\": [\n 220,\n 220\n ],\n \"text\": \"Ensure cleanup regardless of outcome\",\n \"text_lines\": [\n \"Ensure cleanup regardless of outcome\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 216,\n \"text\": \"return bool(text.strip())\"\n },\n {\n \"line_number\": 218,\n \"text\": \"return False\"\n }\n ]\n },\n {\n \"start_line_number\": 223,\n \"end_line_number\": 231,\n \"line_range\": [\n 223,\n 231\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"execute_async\",\n \"qualified_name\": \"ConcreteProcessor.execute_async\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"async def execute_async(self, data: bytes) -> bool\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"ConcreteProcessor\",\n \"parent_qualified_name\": \"ConcreteProcessor\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Ensure cleanup regardless of outcome\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"data\",\n \"description\": \"Raw bytes to process asynchronously.\"\n }\n ],\n \"returns\": [\n \"True if valid content found.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 224,\n \"end_line_number\": 228,\n \"line_range\": [\n 224,\n 228\n ],\n \"text\": \"Async decode and validate byte data. @param data Raw bytes to process asynchronously. @return True if valid content found.\",\n \"text_lines\": [\n \"Async decode and validate byte data. @param data Raw bytes to process asynchronously. @return True if valid content found.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 229,\n \"text\": \"return self.execute(data)\"\n }\n ]\n },\n {\n \"start_line_number\": 232,\n \"end_line_number\": 271,\n \"line_range\": [\n 232,\n 271\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"GenericContainer\",\n \"qualified_name\": \"GenericContainer\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class GenericContainer(Generic[T])\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"__init__\",\n \"add\",\n \"__iter__\",\n \"find\"\n ],\n \"child_qualified_names\": [\n \"GenericContainer.__init__\",\n \"GenericContainer.add\",\n \"GenericContainer.__iter__\",\n \"GenericContainer.find\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"Generic[T]\",\n \"attached_comment_summary_text\": \"Type-safe collection with iteration and lookup support.\",\n \"doxygen\": {\n \"brief\": [\n \"Type-safe collection with iteration and lookup support.\"\n ],\n \"details\": [\n \"Generic collection with find and iteration. @tparam T The element type stored in this container.\"\n ],\n \"notes\": [\n \"Implements __iter__ for iteration protocol.\"\n ],\n \"see_also\": [\n \"typing.Generic for generics documentation.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 233,\n \"end_line_number\": 240,\n \"line_range\": [\n 233,\n 240\n ],\n \"text\": \"Generic container holding items of type T. @brief Type-safe collection with iteration and lookup support. @details Generic collection with find and iteration. @tparam T The element type stored in this container. @note Implements __iter__ for iteration protocol. @see typing.Generic for generics documentation.\",\n \"text_lines\": [\n \"Generic container holding items of type T. @brief Type-safe collection with iteration and lookup support. @details Generic collection with find and iteration. @tparam T The element type stored in this container. @note Implements __iter__ for iteration protocol. @see typing.Generic for generics documentation.\"\n ]\n },\n {\n \"start_line_number\": 243,\n \"end_line_number\": 243,\n \"line_range\": [\n 243,\n 243\n ],\n \"text\": \"Initialize an empty container.\",\n \"text_lines\": [\n \"Initialize an empty container.\"\n ]\n },\n {\n \"start_line_number\": 247,\n \"end_line_number\": 250,\n \"line_range\": [\n 247,\n 250\n ],\n \"text\": \"Append an item to the container. @param item Element of type T to add.\",\n \"text_lines\": [\n \"Append an item to the container. @param item Element of type T to add.\"\n ]\n },\n {\n \"start_line_number\": 254,\n \"end_line_number\": 257,\n \"line_range\": [\n 254,\n 257\n ],\n \"text\": \"Iterate over contained items. @return Iterator yielding items of type T.\",\n \"text_lines\": [\n \"Iterate over contained items. @return Iterator yielding items of type T.\"\n ]\n },\n {\n \"start_line_number\": 261,\n \"end_line_number\": 265,\n \"line_range\": [\n 261,\n 265\n ],\n \"text\": \"Find the first item matching a predicate function. @param predicate Callable accepting T and returning bool. @return The first matching item or None.\",\n \"text_lines\": [\n \"Find the first item matching a predicate function. @param predicate Callable accepting T and returning bool. @return The first matching item or None.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 258,\n \"text\": \"yield from self._items\"\n },\n {\n \"line_number\": 268,\n \"text\": \"return item\"\n },\n {\n \"line_number\": 269,\n \"text\": \"return None\"\n }\n ]\n },\n {\n \"start_line_number\": 242,\n \"end_line_number\": 245,\n \"line_range\": [\n 242,\n 245\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"__init__\",\n \"qualified_name\": \"GenericContainer.__init__\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def __init__(self) -> None\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"GenericContainer\",\n \"parent_qualified_name\": \"GenericContainer\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Type-safe collection with iteration and lookup support.\",\n \"doxygen\": {\n \"brief\": [\n \"Type-safe collection with iteration and lookup support.\"\n ],\n \"details\": [\n \"Generic collection with find and iteration.\\n@tparam T The element type stored in this container.\"\n ],\n \"notes\": [\n \"Implements __iter__ for iteration protocol.\"\n ],\n \"see_also\": [\n \"typing.Generic for generics documentation.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 243,\n \"end_line_number\": 243,\n \"line_range\": [\n 243,\n 243\n ],\n \"text\": \"Initialize an empty container.\",\n \"text_lines\": [\n \"Initialize an empty container.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 246,\n \"end_line_number\": 252,\n \"line_range\": [\n 246,\n 252\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"add\",\n \"qualified_name\": \"GenericContainer.add\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def add(self, item: T) -> None\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"GenericContainer\",\n \"parent_qualified_name\": \"GenericContainer\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Initialize an empty container.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"item\",\n \"description\": \"Element of type T to add.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 247,\n \"end_line_number\": 250,\n \"line_range\": [\n 247,\n 250\n ],\n \"text\": \"Append an item to the container. @param item Element of type T to add.\",\n \"text_lines\": [\n \"Append an item to the container. @param item Element of type T to add.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 253,\n \"end_line_number\": 259,\n \"line_range\": [\n 253,\n 259\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"__iter__\",\n \"qualified_name\": \"GenericContainer.__iter__\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def __iter__(self) -> Iterator[T]\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"GenericContainer\",\n \"parent_qualified_name\": \"GenericContainer\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Append an item to the container. @param item Element of type T to add.\",\n \"doxygen\": {\n \"returns\": [\n \"Iterator yielding items of type T.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 254,\n \"end_line_number\": 257,\n \"line_range\": [\n 254,\n 257\n ],\n \"text\": \"Iterate over contained items. @return Iterator yielding items of type T.\",\n \"text_lines\": [\n \"Iterate over contained items. @return Iterator yielding items of type T.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 258,\n \"text\": \"yield from self._items\"\n }\n ]\n },\n {\n \"start_line_number\": 260,\n \"end_line_number\": 271,\n \"line_range\": [\n 260,\n 271\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"find\",\n \"qualified_name\": \"GenericContainer.find\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def find(self, predicate) -> Optional[T]\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"GenericContainer\",\n \"parent_qualified_name\": \"GenericContainer\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Iterate over contained items. @return Iterator yielding items of type T.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"predicate\",\n \"description\": \"Callable accepting T and returning bool.\"\n }\n ],\n \"returns\": [\n \"The first matching item or None.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 261,\n \"end_line_number\": 265,\n \"line_range\": [\n 261,\n 265\n ],\n \"text\": \"Find the first item matching a predicate function. @param predicate Callable accepting T and returning bool. @return The first matching item or None.\",\n \"text_lines\": [\n \"Find the first item matching a predicate function. @param predicate Callable accepting T and returning bool. @return The first matching item or None.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 268,\n \"text\": \"return item\"\n },\n {\n \"line_number\": 269,\n \"text\": \"return None\"\n }\n ]\n },\n {\n \"start_line_number\": 272,\n \"end_line_number\": 285,\n \"line_range\": [\n 272,\n 285\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"Renderable\",\n \"qualified_name\": \"Renderable\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Renderable(Protocol)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"render\"\n ],\n \"child_qualified_names\": [\n \"Renderable.render\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"Protocol\",\n \"attached_comment_summary_text\": \"Structural typing interface for render-capable objects.\",\n \"doxygen\": {\n \"brief\": [\n \"Structural typing interface for render-capable objects.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 273,\n \"end_line_number\": 276,\n \"line_range\": [\n 273,\n 276\n ],\n \"text\": \"Protocol defining objects that can render to string. @brief Structural typing interface for render-capable objects.\",\n \"text_lines\": [\n \"Protocol defining objects that can render to string. @brief Structural typing interface for render-capable objects.\"\n ]\n },\n {\n \"start_line_number\": 279,\n \"end_line_number\": 282,\n \"line_range\": [\n 279,\n 282\n ],\n \"text\": \"Produce a string representation. @return Rendered string output.\",\n \"text_lines\": [\n \"Produce a string representation. @return Rendered string output.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 278,\n \"end_line_number\": 285,\n \"line_range\": [\n 278,\n 285\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"render\",\n \"qualified_name\": \"Renderable.render\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def render(self) -> str\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"Renderable\",\n \"parent_qualified_name\": \"Renderable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Structural typing interface for render-capable objects.\",\n \"doxygen\": {\n \"brief\": [\n \"Structural typing interface for render-capable objects.\"\n ],\n \"returns\": [\n \"Rendered string output.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 279,\n \"end_line_number\": 282,\n \"line_range\": [\n 279,\n 282\n ],\n \"text\": \"Produce a string representation. @return Rendered string output.\",\n \"text_lines\": [\n \"Produce a string representation. @return Rendered string output.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 287,\n \"end_line_number\": 295,\n \"line_range\": [\n 287,\n 295\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"regular_function\",\n \"qualified_name\": \"regular_function\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def regular_function(x: int) -> int\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"@property # type: ignore[arg-type] #!< @brief Property decorator. @details Converts function to property.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"x\",\n \"description\": \"Input integer value.\"\n }\n ],\n \"returns\": [\n \"The input value unchanged.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 288,\n \"end_line_number\": 292,\n \"line_range\": [\n 288,\n 292\n ],\n \"text\": \"Simple function demonstrating decorator and return. @param x Input integer value. @return The input value unchanged.\",\n \"text_lines\": [\n \"Simple function demonstrating decorator and return. @param x Input integer value. @return The input value unchanged.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 293,\n \"text\": \"return x\"\n }\n ]\n },\n {\n \"start_line_number\": 296,\n \"end_line_number\": 307,\n \"line_range\": [\n 296,\n 307\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"function_with_walrus\",\n \"qualified_name\": \"function_with_walrus\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def function_with_walrus(data: List[int]) -> Optional[int]\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"data\",\n \"description\": \"List of integers to scan.\"\n }\n ],\n \"returns\": [\n \"The first value greater than 10, or None.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 297,\n \"end_line_number\": 301,\n \"line_range\": [\n 297,\n 301\n ],\n \"text\": \"Demonstrate the walrus operator in conditional expressions. @param data List of integers to scan. @return The first value greater than 10, or None.\",\n \"text_lines\": [\n \"Demonstrate the walrus operator in conditional expressions. @param data List of integers to scan. @return The first value greater than 10, or None.\"\n ]\n },\n {\n \"start_line_number\": 302,\n \"end_line_number\": 302,\n \"line_range\": [\n 302,\n 302\n ],\n \"text\": \"Walrus operator assigns and tests in one expression\",\n \"text_lines\": [\n \"Walrus operator assigns and tests in one expression\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 304,\n \"text\": \"return n\"\n },\n {\n \"line_number\": 305,\n \"text\": \"return None\"\n }\n ]\n },\n {\n \"start_line_number\": 308,\n \"end_line_number\": 325,\n \"line_range\": [\n 308,\n 325\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"multi_return_paths\",\n \"qualified_name\": \"multi_return_paths\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def multi_return_paths(value: int) -> Union[str, int, None]\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Integer selector for branching logic.\"\n }\n ],\n \"returns\": [\n \"A string, integer, or None depending on value.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 309,\n \"end_line_number\": 313,\n \"line_range\": [\n 309,\n 313\n ],\n \"text\": \"Function with multiple return paths and match statement. @param value Integer selector for branching logic. @return A string, integer, or None depending on value.\",\n \"text_lines\": [\n \"Function with multiple return paths and match statement. @param value Integer selector for branching logic. @return A string, integer, or None depending on value.\"\n ]\n },\n {\n \"start_line_number\": 318,\n \"end_line_number\": 318,\n \"line_range\": [\n 318,\n 318\n ],\n \"text\": \"Negative values return absolute\",\n \"text_lines\": [\n \"Negative values return absolute\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 316,\n \"text\": \"return \\\"zero\\\"\"\n },\n {\n \"line_number\": 319,\n \"text\": \"return abs(n)\"\n },\n {\n \"line_number\": 321,\n \"text\": \"return None\"\n },\n {\n \"line_number\": 323,\n \"text\": \"return str(value)\"\n }\n ]\n },\n {\n \"start_line_number\": 326,\n \"end_line_number\": 336,\n \"line_range\": [\n 326,\n 336\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"generator_function\",\n \"qualified_name\": \"generator_function\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def generator_function(limit: int) -> Iterator[int]\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"limit\",\n \"description\": \"Upper bound (exclusive) for generation. @yield Squared integers from 0 to limit-1.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 327,\n \"end_line_number\": 331,\n \"line_range\": [\n 327,\n 331\n ],\n \"text\": \"Generator yielding squared values up to a limit. @param limit Upper bound (exclusive) for generation. @yield Squared integers from 0 to limit-1.\",\n \"text_lines\": [\n \"Generator yielding squared values up to a limit. @param limit Upper bound (exclusive) for generation. @yield Squared integers from 0 to limit-1.\"\n ]\n },\n {\n \"start_line_number\": 333,\n \"end_line_number\": 333,\n \"line_range\": [\n 333,\n 333\n ],\n \"text\": \"Yield computed square\",\n \"text_lines\": [\n \"Yield computed square\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 334,\n \"text\": \"yield i * i\"\n }\n ]\n },\n {\n \"start_line_number\": 337,\n \"end_line_number\": 347,\n \"line_range\": [\n 337,\n 347\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"async_generator\",\n \"qualified_name\": \"async_generator\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"async def async_generator(items: List[str]) -> AsyncIterator[str]\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"items\",\n \"description\": \"Source strings to process. @yield Upper-cased non-empty strings.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 338,\n \"end_line_number\": 342,\n \"line_range\": [\n 338,\n 342\n ],\n \"text\": \"Async generator that yields processed strings. @param items Source strings to process. @yield Upper-cased non-empty strings.\",\n \"text_lines\": [\n \"Async generator that yields processed strings. @param items Source strings to process. @yield Upper-cased non-empty strings.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 345,\n \"text\": \"yield item.upper()\"\n }\n ]\n },\n {\n \"start_line_number\": 349,\n \"end_line_number\": 362,\n \"line_range\": [\n 349,\n 362\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"managed_resource\",\n \"qualified_name\": \"managed_resource\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def managed_resource(path: str)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"@contextmanager #!< @brief Context manager decorator. @see contextlib.contextmanager\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"path\",\n \"description\": \"File system path to the resource. @yield The opened file handle. @raises IOError If the resource cannot be opened.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 350,\n \"end_line_number\": 355,\n \"line_range\": [\n 350,\n 355\n ],\n \"text\": \"Context manager for safe resource acquisition and release. @param path File system path to the resource. @yield The opened file handle. @raises IOError If the resource cannot be opened.\",\n \"text_lines\": [\n \"Context manager for safe resource acquisition and release. @param path File system path to the resource. @yield The opened file handle. @raises IOError If the resource cannot be opened.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 358,\n \"text\": \"yield f\"\n }\n ]\n },\n {\n \"start_line_number\": 363,\n \"end_line_number\": 379,\n \"line_range\": [\n 363,\n 379\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"closure_factory\",\n \"qualified_name\": \"closure_factory\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def closure_factory(multiplier: int)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"multiplier\",\n \"description\": \"The fixed multiplier for the returned function.\"\n }\n ],\n \"returns\": [\n \"A callable that multiplies input by multiplier.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 364,\n \"end_line_number\": 368,\n \"line_range\": [\n 364,\n 368\n ],\n \"text\": \"Create a closure that multiplies its argument. @param multiplier The fixed multiplier for the returned function. @return A callable that multiplies input by multiplier.\",\n \"text_lines\": [\n \"Create a closure that multiplies its argument. @param multiplier The fixed multiplier for the returned function. @return A callable that multiplies input by multiplier.\"\n ]\n },\n {\n \"start_line_number\": 370,\n \"end_line_number\": 374,\n \"line_range\": [\n 370,\n 374\n ],\n \"text\": \"Inner closure performing the multiplication. @param x Value to multiply. @return Product of x and the captured multiplier.\",\n \"text_lines\": [\n \"Inner closure performing the multiplication. @param x Value to multiply. @return Product of x and the captured multiplier.\"\n ]\n },\n {\n \"start_line_number\": 375,\n \"end_line_number\": 375,\n \"line_range\": [\n 375,\n 375\n ],\n \"text\": \"Captures multiplier from enclosing scope\",\n \"text_lines\": [\n \"Captures multiplier from enclosing scope\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 376,\n \"text\": \"return x * multiplier\"\n },\n {\n \"line_number\": 377,\n \"text\": \"return inner\"\n }\n ]\n },\n {\n \"start_line_number\": 369,\n \"end_line_number\": 376,\n \"line_range\": [\n 369,\n 376\n ],\n \"declaration_order_index\": 36,\n \"symbol_name\": \"inner\",\n \"qualified_name\": \"inner\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def inner(x: int) -> int\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Create a closure that multiplies its argument. @param multiplier The fixed multiplier for the returned function. @return A callable that multiplies...\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"multiplier\",\n \"description\": \"The fixed multiplier for the returned function.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"x\",\n \"description\": \"Value to multiply.\"\n }\n ],\n \"returns\": [\n \"A callable that multiplies input by multiplier.\",\n \"Product of x and the captured multiplier.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 370,\n \"end_line_number\": 374,\n \"line_range\": [\n 370,\n 374\n ],\n \"text\": \"Inner closure performing the multiplication. @param x Value to multiply. @return Product of x and the captured multiplier.\",\n \"text_lines\": [\n \"Inner closure performing the multiplication. @param x Value to multiply. @return Product of x and the captured multiplier.\"\n ]\n },\n {\n \"start_line_number\": 375,\n \"end_line_number\": 375,\n \"line_range\": [\n 375,\n 375\n ],\n \"text\": \"Captures multiplier from enclosing scope\",\n \"text_lines\": [\n \"Captures multiplier from enclosing scope\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 376,\n \"text\": \"return x * multiplier\"\n }\n ]\n },\n {\n \"start_line_number\": 380,\n \"end_line_number\": 393,\n \"line_range\": [\n 380,\n 393\n ],\n \"declaration_order_index\": 37,\n \"symbol_name\": \"uses_unpacking\",\n \"qualified_name\": \"uses_unpacking\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def uses_unpacking(*args: int, **kwargs: str) -> Dict[str, Union[int, str]]\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"args\",\n \"description\": \"Positional integer arguments.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"kwargs\",\n \"description\": \"Named string arguments.\"\n }\n ],\n \"returns\": [\n \"Combined dictionary of all arguments.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 381,\n \"end_line_number\": 386,\n \"line_range\": [\n 381,\n 386\n ],\n \"text\": \"Demonstrate variadic arguments and unpacking. @param args Positional integer arguments. @param kwargs Named string arguments. @return Combined dictionary of all arguments.\",\n \"text_lines\": [\n \"Demonstrate variadic arguments and unpacking. @param args Positional integer arguments. @param kwargs Named string arguments. @return Combined dictionary of all arguments.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 391,\n \"text\": \"return result\"\n }\n ]\n },\n {\n \"start_line_number\": 398,\n \"end_line_number\": 398,\n \"line_range\": [\n 398,\n 398\n ],\n \"declaration_order_index\": 38,\n \"symbol_name\": \"EVEN_SQUARES\",\n \"qualified_name\": \"EVEN_SQUARES\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"EVEN_SQUARES = [x ** 2 for x in range(20) if x % 2 == 0]\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"List comprehension with conditional filtering\",\n \"attached_comment_lines\": [\n \"List comprehension with conditional filtering\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 401,\n \"end_line_number\": 408,\n \"line_range\": [\n 401,\n 408\n ],\n \"declaration_order_index\": 39,\n \"symbol_name\": \"async_function\",\n \"qualified_name\": \"async_function\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"async def async_function()\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Minimal async function for testing async detection.\",\n \"doxygen\": {\n \"brief\": [\n \"Minimal async function for testing async detection.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 402,\n \"end_line_number\": 405,\n \"line_range\": [\n 402,\n 405\n ],\n \"text\": \"Standalone async coroutine awaiting a no-op. @brief Minimal async function for testing async detection.\",\n \"text_lines\": [\n \"Standalone async coroutine awaiting a no-op. @brief Minimal async function for testing async detection.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 409,\n \"end_line_number\": 429,\n \"line_range\": [\n 409,\n 429\n ],\n \"declaration_order_index\": 40,\n \"symbol_name\": \"deeply_nested_logic\",\n \"qualified_name\": \"deeply_nested_logic\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def deeply_nested_logic(matrix: List[List[int]]) -> int\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"matrix\",\n \"description\": \"2D list of integers.\"\n }\n ],\n \"returns\": [\n \"Cumulative sum of positive even values.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 410,\n \"end_line_number\": 414,\n \"line_range\": [\n 410,\n 414\n ],\n \"text\": \"Process a matrix with deeply nested control flow. @param matrix 2D list of integers. @return Cumulative sum of positive even values.\",\n \"text_lines\": [\n \"Process a matrix with deeply nested control flow. @param matrix 2D list of integers. @return Cumulative sum of positive even values.\"\n ]\n },\n {\n \"start_line_number\": 420,\n \"end_line_number\": 420,\n \"line_range\": [\n 420,\n 420\n ],\n \"text\": \"Accumulate positive evens\",\n \"text_lines\": [\n \"Accumulate positive evens\"\n ]\n },\n {\n \"start_line_number\": 425,\n \"end_line_number\": 425,\n \"line_range\": [\n 425,\n 425\n ],\n \"text\": \"Skip non-positive values\",\n \"text_lines\": [\n \"Skip non-positive values\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 427,\n \"text\": \"return total\"\n }\n ]\n },\n {\n \"start_line_number\": 430,\n \"end_line_number\": 453,\n \"line_range\": [\n 430,\n 453\n ],\n \"declaration_order_index\": 41,\n \"symbol_name\": \"exception_handling_example\",\n \"qualified_name\": \"exception_handling_example\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def exception_handling_example(path: str) -> Optional[str]\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"path\",\n \"description\": \"File path to attempt reading.\"\n }\n ],\n \"returns\": [\n \"File contents or None on failure.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 431,\n \"end_line_number\": 435,\n \"line_range\": [\n 431,\n 435\n ],\n \"text\": \"Demonstrate comprehensive exception handling patterns. @param path File path to attempt reading. @return File contents or None on failure.\",\n \"text_lines\": [\n \"Demonstrate comprehensive exception handling patterns. @param path File path to attempt reading. @return File contents or None on failure.\"\n ]\n },\n {\n \"start_line_number\": 443,\n \"end_line_number\": 443,\n \"line_range\": [\n 443,\n 443\n ],\n \"text\": \"File does not exist\",\n \"text_lines\": [\n \"File does not exist\"\n ]\n },\n {\n \"start_line_number\": 445,\n \"end_line_number\": 445,\n \"line_range\": [\n 445,\n 445\n ],\n \"text\": \"noqa: F841\",\n \"text_lines\": [\n \"noqa: F841\"\n ]\n },\n {\n \"start_line_number\": 446,\n \"end_line_number\": 446,\n \"line_range\": [\n 446,\n 446\n ],\n \"text\": \"Access denied or OS-level error\",\n \"text_lines\": [\n \"Access denied or OS-level error\"\n ]\n },\n {\n \"start_line_number\": 451,\n \"end_line_number\": 451,\n \"line_range\": [\n 451,\n 451\n ],\n \"text\": \"Cleanup runs regardless of outcome\",\n \"text_lines\": [\n \"Cleanup runs regardless of outcome\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 440,\n \"text\": \"raise ValueError(\\\"Empty file\\\")\"\n },\n {\n \"line_number\": 441,\n \"text\": \"return content\"\n },\n {\n \"line_number\": 444,\n \"text\": \"return None\"\n },\n {\n \"line_number\": 447,\n \"text\": \"sys.exit(1)\"\n },\n {\n \"line_number\": 449,\n \"text\": \"raise\"\n }\n ]\n },\n {\n \"start_line_number\": 455,\n \"end_line_number\": 455,\n \"line_range\": [\n 455,\n 455\n ],\n \"declaration_order_index\": 42,\n \"symbol_name\": \"MAX_BATCH\",\n \"qualified_name\": \"MAX_BATCH\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"MAX_BATCH = 64 # inline extension comment\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"coverage extension pre-line comment\",\n \"attached_comment_lines\": [\n \"coverage extension pre-line comment\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 457,\n \"end_line_number\": 457,\n \"line_range\": [\n 457,\n 457\n ],\n \"declaration_order_index\": 43,\n \"symbol_name\": \"CACHE_LIMIT\",\n \"qualified_name\": \"CACHE_LIMIT\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"CACHE_LIMIT = 128\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"another variable comment\",\n \"attached_comment_lines\": [\n \"another variable comment\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 459,\n \"end_line_number\": 459,\n \"line_range\": [\n 459,\n 459\n ],\n \"declaration_order_index\": 44,\n \"symbol_name\": \"MAX_USERS\",\n \"qualified_name\": \"MAX_USERS\",\n \"symbol_kind\": \"VARIABLE\",\n \"type_label\": \"VARIABLE\",\n \"signature_text\": \"MAX_USERS = 500\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"coverage extension multiline comment for parser fixtures\",\n \"attached_comment_lines\": [\n \"coverage extension multiline comment for parser fixtures\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 467,\n \"end_line_number\": 469,\n \"line_range\": [\n 467,\n 469\n ],\n \"declaration_order_index\": 45,\n \"symbol_name\": \"req_cover_py_1\",\n \"qualified_name\": \"req_cover_py_1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_py_1(value: int) -> int\",\n \"visibility\": \"pub\",\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 \"line_number\": 468,\n \"text\": \"return value + 1\"\n }\n ]\n },\n {\n \"start_line_number\": 475,\n \"end_line_number\": 477,\n \"line_range\": [\n 475,\n 477\n ],\n \"declaration_order_index\": 46,\n \"symbol_name\": \"req_cover_py_2\",\n \"qualified_name\": \"req_cover_py_2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_py_2(value: int) -> int\",\n \"visibility\": \"pub\",\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 \"line_number\": 476,\n \"text\": \"return value + 2\"\n }\n ]\n },\n {\n \"start_line_number\": 483,\n \"end_line_number\": 485,\n \"line_range\": [\n 483,\n 485\n ],\n \"declaration_order_index\": 47,\n \"symbol_name\": \"req_cover_py_3\",\n \"qualified_name\": \"req_cover_py_3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_py_3(value: int) -> int\",\n \"visibility\": \"pub\",\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 \"line_number\": 484,\n \"text\": \"return value + 3\"\n }\n ]\n },\n {\n \"start_line_number\": 491,\n \"end_line_number\": 493,\n \"line_range\": [\n 491,\n 493\n ],\n \"declaration_order_index\": 48,\n \"symbol_name\": \"req_cover_py_4\",\n \"qualified_name\": \"req_cover_py_4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_py_4(value: int) -> int\",\n \"visibility\": \"pub\",\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 \"line_number\": 492,\n \"text\": \"return value + 4\"\n }\n ]\n },\n {\n \"start_line_number\": 499,\n \"end_line_number\": 501,\n \"line_range\": [\n 499,\n 501\n ],\n \"declaration_order_index\": 49,\n \"symbol_name\": \"req_cover_py_5\",\n \"qualified_name\": \"req_cover_py_5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_py_5(value: int) -> int\",\n \"visibility\": \"pub\",\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 \"line_number\": 500,\n \"text\": \"return value + 5\"\n }\n ]\n }\n ],\n \"standalone_comments\": [\n {\n \"start_line_number\": 2,\n \"end_line_number\": 6,\n \"line_range\": [\n 2,\n 6\n ],\n \"text\": \"! @file fixture_python.py @brief Comprehensive Python test fixture for parser validation. @details Covers classes, protocols, decorators, generators, async functions, and rich Doxygen-tagged constructs used to validate extraction workflows and deterministic parser behavior.\",\n \"text_lines\": [\n \"!\",\n \"@file fixture_python.py\",\n \"@brief Comprehensive Python test fixture for parser validation.\",\n \"@details Covers classes, protocols, decorators, generators, async functions, and rich Doxygen-tagged constructs used to validate extraction workflows and deterministic parser behavior.\"\n ]\n },\n {\n \"start_line_number\": 28,\n \"end_line_number\": 34,\n \"line_range\": [\n 28,\n 34\n ],\n \"text\": \"Configuration data holder for the application. @brief Stores key-value pairs with optional default fallback. @details Dataclass-based configuration with validation. ...\",\n \"text_lines\": [\n \"Configuration data holder for the application.\",\n \"@brief Stores key-value pairs with optional default fallback.\",\n \"@details Dataclass-based configuration with validation.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 40,\n \"end_line_number\": 45,\n \"line_range\": [\n 40,\n 45\n ],\n \"text\": \"Retrieve a configuration value by key. @param key The configuration key to look up. @param default Fallback value if key is missing. ...\",\n \"text_lines\": [\n \"Retrieve a configuration value by key.\",\n \"@param key The configuration key to look up.\",\n \"@param default Fallback value if key is missing.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"Check primary values first\",\n \"text_lines\": [\n \"Check primary values first\"\n ]\n },\n {\n \"start_line_number\": 53,\n \"end_line_number\": 57,\n \"line_range\": [\n 53,\n 57\n ],\n \"text\": \"Validate configuration after initialization. @brief Ensures name is non-empty and normalizes values. @raises ValueError If name is empty or whitespace.\",\n \"text_lines\": [\n \"Validate configuration after initialization.\",\n \"@brief Ensures name is non-empty and normalizes values.\",\n \"@raises ValueError If name is empty or whitespace.\"\n ]\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 93,\n \"line_range\": [\n 89,\n 93\n ],\n \"text\": \"Initialize MyClass with a name and retry count. @param name Identifier for this instance. @param retries Maximum retry attempts; defaults to MAX_RETRIES.\",\n \"text_lines\": [\n \"Initialize MyClass with a name and retry count.\",\n \"@param name Identifier for this instance.\",\n \"@param retries Maximum retry attempts; defaults to MAX_RETRIES.\"\n ]\n },\n {\n \"start_line_number\": 96,\n \"end_line_number\": 96,\n \"line_range\": [\n 96,\n 96\n ],\n \"text\": \"Internal counter tracks invocation count\",\n \"text_lines\": [\n \"Internal counter tracks invocation count\"\n ]\n },\n {\n \"start_line_number\": 101,\n \"end_line_number\": 104,\n \"line_range\": [\n 101,\n 104\n ],\n \"text\": \"Read-only property exposing the instance name. @return The name string set during initialization.\",\n \"text_lines\": [\n \"Read-only property exposing the instance name.\",\n \"@return The name string set during initialization.\"\n ]\n },\n {\n \"start_line_number\": 109,\n \"end_line_number\": 113,\n \"line_range\": [\n 109,\n 113\n ],\n \"text\": \"Set the instance name after validation. @param value New name; must be non-empty. @raises ValueError If value is empty.\",\n \"text_lines\": [\n \"Set the instance name after validation.\",\n \"@param value New name; must be non-empty.\",\n \"@raises ValueError If value is empty.\"\n ]\n },\n {\n \"start_line_number\": 120,\n \"end_line_number\": 123,\n \"line_range\": [\n 120,\n 123\n ],\n \"text\": \"Factory method to build a MyClass with default settings. @return A new MyClass instance with name='default'.\",\n \"text_lines\": [\n \"Factory method to build a MyClass with default settings.\",\n \"@return A new MyClass instance with name='default'.\"\n ]\n },\n {\n \"start_line_number\": 128,\n \"end_line_number\": 133,\n \"line_range\": [\n 128,\n 133\n ],\n \"text\": \"Construct a MyClass from a dictionary payload. @param data Dictionary with 'name' and optional 'retries' keys. @return A new instance populated from data. ...\",\n \"text_lines\": [\n \"Construct a MyClass from a dictionary payload.\",\n \"@param data Dictionary with 'name' and optional 'retries' keys.\",\n \"@return A new instance populated from data.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 140,\n \"end_line_number\": 145,\n \"line_range\": [\n 140,\n 145\n ],\n \"text\": \"Process a list of string items with optional logging. @param items List of strings to process sequentially. @param verbose Enable detailed logging when True. ...\",\n \"text_lines\": [\n \"Process a list of string items with optional logging.\",\n \"@param items List of strings to process sequentially.\",\n \"@param verbose Enable detailed logging when True.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 148,\n \"end_line_number\": 148,\n \"line_range\": [\n 148,\n 148\n ],\n \"text\": \"Skip empty entries\",\n \"text_lines\": [\n \"Skip empty entries\"\n ]\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 153,\n \"line_range\": [\n 153,\n 153\n ],\n \"text\": \"Conditional return on first valid item\",\n \"text_lines\": [\n \"Conditional return on first valid item\"\n ]\n },\n {\n \"start_line_number\": 158,\n \"end_line_number\": 163,\n \"line_range\": [\n 158,\n 163\n ],\n \"text\": \"Compute a value using conditional assignment on return. @param x First operand. @param y Second operand. ...\",\n \"text_lines\": [\n \"Compute a value using conditional assignment on return.\",\n \"@param x First operand.\",\n \"@param y Second operand.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 164,\n \"end_line_number\": 164,\n \"line_range\": [\n 164,\n 164\n ],\n \"text\": \"Ternary return with compound condition\",\n \"text_lines\": [\n \"Ternary return with compound condition\"\n ]\n },\n {\n \"start_line_number\": 180,\n \"end_line_number\": 184,\n \"line_range\": [\n 180,\n 184\n ],\n \"text\": \"Execute processing on raw byte data. @param data The raw input bytes to process. @return True if processing succeeded, False otherwise.\",\n \"text_lines\": [\n \"Execute processing on raw byte data.\",\n \"@param data The raw input bytes to process.\",\n \"@return True if processing succeeded, False otherwise.\"\n ]\n },\n {\n \"start_line_number\": 189,\n \"end_line_number\": 193,\n \"line_range\": [\n 189,\n 193\n ],\n \"text\": \"Asynchronous variant of execute. @param data The raw input bytes to process. @return True if processing succeeded.\",\n \"text_lines\": [\n \"Asynchronous variant of execute.\",\n \"@param data The raw input bytes to process.\",\n \"@return True if processing succeeded.\"\n ]\n },\n {\n \"start_line_number\": 207,\n \"end_line_number\": 212,\n \"line_range\": [\n 207,\n 212\n ],\n \"text\": \"Decode and validate byte data synchronously. @param data Raw bytes, expected UTF-8 encoded text. @return True if decoding and validation succeed. ...\",\n \"text_lines\": [\n \"Decode and validate byte data synchronously.\",\n \"@param data Raw bytes, expected UTF-8 encoded text.\",\n \"@return True if decoding and validation succeed.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 215,\n \"end_line_number\": 215,\n \"line_range\": [\n 215,\n 215\n ],\n \"text\": \"Validate non-empty after decode\",\n \"text_lines\": [\n \"Validate non-empty after decode\"\n ]\n },\n {\n \"start_line_number\": 224,\n \"end_line_number\": 228,\n \"line_range\": [\n 224,\n 228\n ],\n \"text\": \"Async decode and validate byte data. @param data Raw bytes to process asynchronously. @return True if valid content found.\",\n \"text_lines\": [\n \"Async decode and validate byte data.\",\n \"@param data Raw bytes to process asynchronously.\",\n \"@return True if valid content found.\"\n ]\n },\n {\n \"start_line_number\": 261,\n \"end_line_number\": 265,\n \"line_range\": [\n 261,\n 265\n ],\n \"text\": \"Find the first item matching a predicate function. @param predicate Callable accepting T and returning bool. @return The first matching item or None.\",\n \"text_lines\": [\n \"Find the first item matching a predicate function.\",\n \"@param predicate Callable accepting T and returning bool.\",\n \"@return The first matching item or None.\"\n ]\n },\n {\n \"start_line_number\": 279,\n \"end_line_number\": 282,\n \"line_range\": [\n 279,\n 282\n ],\n \"text\": \"Produce a string representation. @return Rendered string output.\",\n \"text_lines\": [\n \"Produce a string representation.\",\n \"@return Rendered string output.\"\n ]\n },\n {\n \"start_line_number\": 288,\n \"end_line_number\": 292,\n \"line_range\": [\n 288,\n 292\n ],\n \"text\": \"Simple function demonstrating decorator and return. @param x Input integer value. @return The input value unchanged.\",\n \"text_lines\": [\n \"Simple function demonstrating decorator and return.\",\n \"@param x Input integer value.\",\n \"@return The input value unchanged.\"\n ]\n },\n {\n \"start_line_number\": 297,\n \"end_line_number\": 301,\n \"line_range\": [\n 297,\n 301\n ],\n \"text\": \"Demonstrate the walrus operator in conditional expressions. @param data List of integers to scan. @return The first value greater than 10, or None.\",\n \"text_lines\": [\n \"Demonstrate the walrus operator in conditional expressions.\",\n \"@param data List of integers to scan.\",\n \"@return The first value greater than 10, or None.\"\n ]\n },\n {\n \"start_line_number\": 302,\n \"end_line_number\": 302,\n \"line_range\": [\n 302,\n 302\n ],\n \"text\": \"Walrus operator assigns and tests in one expression\",\n \"text_lines\": [\n \"Walrus operator assigns and tests in one expression\"\n ]\n },\n {\n \"start_line_number\": 309,\n \"end_line_number\": 313,\n \"line_range\": [\n 309,\n 313\n ],\n \"text\": \"Function with multiple return paths and match statement. @param value Integer selector for branching logic. @return A string, integer, or None depending on value.\",\n \"text_lines\": [\n \"Function with multiple return paths and match statement.\",\n \"@param value Integer selector for branching logic.\",\n \"@return A string, integer, or None depending on value.\"\n ]\n },\n {\n \"start_line_number\": 318,\n \"end_line_number\": 318,\n \"line_range\": [\n 318,\n 318\n ],\n \"text\": \"Negative values return absolute\",\n \"text_lines\": [\n \"Negative values return absolute\"\n ]\n },\n {\n \"start_line_number\": 327,\n \"end_line_number\": 331,\n \"line_range\": [\n 327,\n 331\n ],\n \"text\": \"Generator yielding squared values up to a limit. @param limit Upper bound (exclusive) for generation. @yield Squared integers from 0 to limit-1.\",\n \"text_lines\": [\n \"Generator yielding squared values up to a limit.\",\n \"@param limit Upper bound (exclusive) for generation.\",\n \"@yield Squared integers from 0 to limit-1.\"\n ]\n },\n {\n \"start_line_number\": 333,\n \"end_line_number\": 333,\n \"line_range\": [\n 333,\n 333\n ],\n \"text\": \"Yield computed square\",\n \"text_lines\": [\n \"Yield computed square\"\n ]\n },\n {\n \"start_line_number\": 338,\n \"end_line_number\": 342,\n \"line_range\": [\n 338,\n 342\n ],\n \"text\": \"Async generator that yields processed strings. @param items Source strings to process. @yield Upper-cased non-empty strings.\",\n \"text_lines\": [\n \"Async generator that yields processed strings.\",\n \"@param items Source strings to process.\",\n \"@yield Upper-cased non-empty strings.\"\n ]\n },\n {\n \"start_line_number\": 350,\n \"end_line_number\": 355,\n \"line_range\": [\n 350,\n 355\n ],\n \"text\": \"Context manager for safe resource acquisition and release. @param path File system path to the resource. @yield The opened file handle. ...\",\n \"text_lines\": [\n \"Context manager for safe resource acquisition and release.\",\n \"@param path File system path to the resource.\",\n \"@yield The opened file handle.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 370,\n \"end_line_number\": 374,\n \"line_range\": [\n 370,\n 374\n ],\n \"text\": \"Inner closure performing the multiplication. @param x Value to multiply. @return Product of x and the captured multiplier.\",\n \"text_lines\": [\n \"Inner closure performing the multiplication.\",\n \"@param x Value to multiply.\",\n \"@return Product of x and the captured multiplier.\"\n ]\n },\n {\n \"start_line_number\": 375,\n \"end_line_number\": 375,\n \"line_range\": [\n 375,\n 375\n ],\n \"text\": \"Captures multiplier from enclosing scope\",\n \"text_lines\": [\n \"Captures multiplier from enclosing scope\"\n ]\n },\n {\n \"start_line_number\": 381,\n \"end_line_number\": 386,\n \"line_range\": [\n 381,\n 386\n ],\n \"text\": \"Demonstrate variadic arguments and unpacking. @param args Positional integer arguments. @param kwargs Named string arguments. ...\",\n \"text_lines\": [\n \"Demonstrate variadic arguments and unpacking.\",\n \"@param args Positional integer arguments.\",\n \"@param kwargs Named string arguments.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 394,\n \"end_line_number\": 394,\n \"line_range\": [\n 394,\n 394\n ],\n \"text\": \"Lambda assigned to a variable for inline transforms\",\n \"text_lines\": [\n \"Lambda assigned to a variable for inline transforms\"\n ]\n },\n {\n \"start_line_number\": 402,\n \"end_line_number\": 405,\n \"line_range\": [\n 402,\n 405\n ],\n \"text\": \"Standalone async coroutine awaiting a no-op. @brief Minimal async function for testing async detection.\",\n \"text_lines\": [\n \"Standalone async coroutine awaiting a no-op.\",\n \"@brief Minimal async function for testing async detection.\"\n ]\n },\n {\n \"start_line_number\": 410,\n \"end_line_number\": 414,\n \"line_range\": [\n 410,\n 414\n ],\n \"text\": \"Process a matrix with deeply nested control flow. @param matrix 2D list of integers. @return Cumulative sum of positive even values.\",\n \"text_lines\": [\n \"Process a matrix with deeply nested control flow.\",\n \"@param matrix 2D list of integers.\",\n \"@return Cumulative sum of positive even values.\"\n ]\n },\n {\n \"start_line_number\": 420,\n \"end_line_number\": 420,\n \"line_range\": [\n 420,\n 420\n ],\n \"text\": \"Accumulate positive evens\",\n \"text_lines\": [\n \"Accumulate positive evens\"\n ]\n },\n {\n \"start_line_number\": 425,\n \"end_line_number\": 425,\n \"line_range\": [\n 425,\n 425\n ],\n \"text\": \"Skip non-positive values\",\n \"text_lines\": [\n \"Skip non-positive values\"\n ]\n },\n {\n \"start_line_number\": 431,\n \"end_line_number\": 435,\n \"line_range\": [\n 431,\n 435\n ],\n \"text\": \"Demonstrate comprehensive exception handling patterns. @param path File path to attempt reading. @return File contents or None on failure.\",\n \"text_lines\": [\n \"Demonstrate comprehensive exception handling patterns.\",\n \"@param path File path to attempt reading.\",\n \"@return File contents or None on failure.\"\n ]\n },\n {\n \"start_line_number\": 443,\n \"end_line_number\": 443,\n \"line_range\": [\n 443,\n 443\n ],\n \"text\": \"File does not exist\",\n \"text_lines\": [\n \"File does not exist\"\n ]\n },\n {\n \"start_line_number\": 446,\n \"end_line_number\": 446,\n \"line_range\": [\n 446,\n 446\n ],\n \"text\": \"Access denied or OS-level error\",\n \"text_lines\": [\n \"Access denied or OS-level error\"\n ]\n },\n {\n \"start_line_number\": 451,\n \"end_line_number\": 451,\n \"line_range\": [\n 451,\n 451\n ],\n \"text\": \"Cleanup runs regardless of outcome\",\n \"text_lines\": [\n \"Cleanup runs regardless of outcome\"\n ]\n },\n {\n \"start_line_number\": 461,\n \"end_line_number\": 461,\n \"line_range\": [\n 461,\n 461\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 462,\n \"end_line_number\": 462,\n \"line_range\": [\n 462,\n 462\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\": 463,\n \"end_line_number\": 463,\n \"line_range\": [\n 463,\n 463\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 470,\n \"end_line_number\": 470,\n \"line_range\": [\n 470,\n 470\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\": 471,\n \"end_line_number\": 471,\n \"line_range\": [\n 471,\n 471\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 478,\n \"end_line_number\": 478,\n \"line_range\": [\n 478,\n 478\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\": 479,\n \"end_line_number\": 479,\n \"line_range\": [\n 479,\n 479\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 486,\n \"end_line_number\": 486,\n \"line_range\": [\n 486,\n 486\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\": 487,\n \"end_line_number\": 487,\n \"line_range\": [\n 487,\n 487\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 494,\n \"end_line_number\": 494,\n \"line_range\": [\n 494,\n 494\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\": 495,\n \"end_line_number\": 495,\n \"line_range\": [\n 495,\n 495\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 502,\n \"end_line_number\": 502,\n \"line_range\": [\n 502,\n 502\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_python.py | Python | 502L | 50 symbols | 8 imports | 90 comments\n> Path: `tests/fixtures/fixture_python.py`\n- @brief Comprehensive Python test fixture for parser validation.\n- @details Covers classes, protocols, decorators, generators, async functions, and rich Doxygen-tagged constructs used to validate extraction workflows and deterministic parser behavior.\n\n## Imports\n```\nimport asyncio #!< @brief Async IO support. @details Used for async test fixtures. # noqa: F401\nimport os #!< @brief OS interface module. @details Provides OS-dependent functionality. # noqa: F401\nimport sys #!< @brief System-specific parameters. @see sys.exit() for exit handling.\nfrom pathlib import Path #!< @brief Object-oriented filesystem paths. @note Preferred over os.path. # noqa: F401\nfrom typing import (\nfrom dataclasses import dataclass, field\nfrom abc import ABC, abstractmethod\nfrom contextlib import contextmanager\n```\n\n## Definitions\n\n- var `MAX_RETRIES = 3 #!< @brief Maximum retry attempts. @details Applied to network operations. @warning Tune per use case. @satisfies retry-policy` (L19)\n- @brief Maximum retry attempts.\n- @details Applied to network operations.\n- @warning Tune per use case.\n- @satisfies retry-policy\n- var `DEFAULT_TIMEOUT = 30.0 #!< @brief Default timeout in seconds. @note For I/O operations.` (L20)\n- @brief Default timeout in seconds.\n- @note For I/O operations.\n### class `class Config` `@dataclass(slots=True)` (L27-61)\n- @brief Stores key-value pairs with optional default fallback.\n- @details Dataclass-based configuration with validation.\n- @note Immutable after creation when frozen=True is used.\n- @see __post_init__() for validation logic.\n- fn `def get(self, key: str, default: str = \"\") -> str` (L39-51)\n - @brief Stores key-value pairs with optional default fallback.\n - @details Dataclass-based configuration with validation.\n - @param key The configuration key to look up.\n - @param default Fallback value if key is missing.\n - @return The configuration value or default.\n - @note Immutable after creation when frozen=True is used.\n - @see __post_init__() for validation logic.\n- fn `def __post_init__(self) -> None` `priv` (L52-61)\n - @brief Ensures name is non-empty and normalizes values. @raises ValueError If name is empty or whitespace.\n\n### class `class MyClass` (L62-167)\n- @brief Base class demonstrating various Python constructs.\n- @details Includes nested classes, properties, and static methods.\n- fn `def __init__(self, name: str, retries: int = MAX_RETRIES)` `priv` (L88-98)\n - @param name Identifier for this instance.\n - @param retries Maximum retry attempts; defaults to MAX_RETRIES.\n- fn `def name(self) -> str` (L100-106)\n - @return The name string set during initialization.\n- fn `def name(self, value: str) -> None` (L108-117)\n - @param value New name; must be non-empty. @raises ValueError If value is empty.\n- fn `def create_default() -> \"MyClass\"` (L119-125)\n - @return A new MyClass instance with name='default'.\n- fn `def from_dict(cls, data: dict) -> \"MyClass\"` (L127-138)\n - @param data Dictionary with 'name' and optional 'retries' keys.\n - @return A new instance populated from data. @raises KeyError If 'name' key is missing.\n- fn `def process(self, items: List[str], *, verbose: bool = False) -> Optional[str]` (L139-156)\n - @param items List of strings to process sequentially.\n - @param verbose Enable detailed logging when True.\n - @return The first valid item found or None if all are empty.\n- fn `def compute(self, x: int, y: int) -> int` (L157-167)\n - @param x First operand.\n - @param y Second operand.\n - @return Sum if both positive, difference otherwise.\n\n### class `class InnerHelper` (L69-87)\n- @brief Base class demonstrating various Python constructs.\n- @brief Handles auxiliary computations within MyClass scope.\n- @details Includes nested classes, properties, and static methods.\n- fn `def __init__(self, tag: str)` `priv` (L74-80)\n - @brief Handles auxiliary computations within MyClass scope.\n - @param tag Short label for categorization.\n- fn `def describe(self) -> str` (L81-87)\n - @return String combining class name and tag.\n\n### class `class AbstractProcessor(ABC)` : ABC (L168-196)\n- @brief Defines the interface that concrete processors must implement.\n- @details ABC-based interface with abstract methods.\n- @note Subclasses must implement execute() and execute_async().\n- @see ConcreteProcessor for a working implementation.\n- @sa ABC documentation for abstract base class patterns.\n- fn `def execute(self, data: bytes) -> bool` (L179-186)\n - @param data The raw input bytes to process.\n - @return True if processing succeeded, False otherwise.\n- fn `async def execute_async(self, data: bytes) -> bool` (L188-196)\n - @param data The raw input bytes to process.\n - @return True if processing succeeded.\n\n### class `class ConcreteProcessor(AbstractProcessor)` : AbstractProcessor (L197-231)\n- @brief Processes byte data by decoding and validating content.\n- @details Implements synchronous and async execute methods.\n- @note Thread-safe for read operations.\n- @see AbstractProcessor for interface definition.\n- fn `def execute(self, data: bytes) -> bool` (L206-222)\n - @brief Processes byte data by decoding and validating content.\n - @details Implements synchronous and async execute methods.\n - @param data Raw bytes, expected UTF-8 encoded text.\n - @return True if decoding and validation succeed. @raises UnicodeDecodeError Propagated if data is not valid UTF-8.\n - @note Thread-safe for read operations.\n - @see AbstractProcessor for interface definition.\n- fn `async def execute_async(self, data: bytes) -> bool` (L223-231)\n - @param data Raw bytes to process asynchronously.\n - @return True if valid content found.\n\n### class `class GenericContainer(Generic[T])` : Generic[T] (L232-271)\n- @brief Type-safe collection with iteration and lookup support.\n- @details Generic collection with find and iteration. @tparam T The element type stored in this container.\n- @note Implements __iter__ for iteration protocol.\n- @see typing.Generic for generics documentation.\n- fn `def __init__(self) -> None` `priv` (L242-245)\n - @brief Type-safe collection with iteration and lookup support.\n - @details Generic collection with find and iteration.\n@tparam T The element type stored in this container.\n - @note Implements __iter__ for iteration protocol.\n - @see typing.Generic for generics documentation.\n- fn `def add(self, item: T) -> None` (L246-252)\n - @param item Element of type T to add.\n- fn `def __iter__(self) -> Iterator[T]` `priv` (L253-259)\n - @return Iterator yielding items of type T.\n- fn `def find(self, predicate) -> Optional[T]` (L260-271)\n - @param predicate Callable accepting T and returning bool.\n - @return The first matching item or None.\n\n### class `class Renderable(Protocol)` : Protocol (L272-285)\n- @brief Structural typing interface for render-capable objects.\n- fn `def render(self) -> str` (L278-285)\n - @brief Structural typing interface for render-capable objects.\n - @return Rendered string output.\n\n### fn `def regular_function(x: int) -> int` `@property # type: ignore[arg-type] #!< @brief Property decorator. @details Converts function to property.` (L287-295)\n- @param x Input integer value.\n- @return The input value unchanged.\n\n### fn `def function_with_walrus(data: List[int]) -> Optional[int]` (L296-307)\n- @param data List of integers to scan.\n- @return The first value greater than 10, or None.\n\n### fn `def multi_return_paths(value: int) -> Union[str, int, None]` (L308-325)\n- @param value Integer selector for branching logic.\n- @return A string, integer, or None depending on value.\n\n### fn `def generator_function(limit: int) -> Iterator[int]` (L326-336)\n- @param limit Upper bound (exclusive) for generation. @yield Squared integers from 0 to limit-1.\n\n### fn `async def async_generator(items: List[str]) -> AsyncIterator[str]` (L337-347)\n- @param items Source strings to process. @yield Upper-cased non-empty strings.\n\n### fn `def managed_resource(path: str)` `@contextmanager #!< @brief Context manager decorator. @see contextlib.contextmanager` (L349-362)\n- @param path File system path to the resource. @yield The opened file handle. @raises IOError If the resource cannot be opened.\n\n### fn `def closure_factory(multiplier: int)` (L363-379)\n- @param multiplier The fixed multiplier for the returned function.\n- @return A callable that multiplies input by multiplier.\n\n### fn `def inner(x: int) -> int` (L369-376)\n- @param multiplier The fixed multiplier for the returned function.\n- @param x Value to multiply.\n- @return A callable that multiplies input by multiplier.\n- @return Product of x and the captured multiplier.\n\n### fn `def uses_unpacking(*args: int, **kwargs: str) -> Dict[str, Union[int, str]]` (L380-393)\n- @param args Positional integer arguments.\n- @param kwargs Named string arguments.\n- @return Combined dictionary of all arguments.\n\n- var `EVEN_SQUARES = [x ** 2 for x in range(20) if x % 2 == 0]` (L398)\n### fn `async def async_function()` (L401-408)\n- @brief Minimal async function for testing async detection.\n\n### fn `def deeply_nested_logic(matrix: List[List[int]]) -> int` (L409-429)\n- @param matrix 2D list of integers.\n- @return Cumulative sum of positive even values.\n\n### fn `def exception_handling_example(path: str) -> Optional[str]` (L430-453)\n- @param path File path to attempt reading.\n- @return File contents or None on failure.\n\n- var `MAX_BATCH = 64 # inline extension comment` (L455)\n- var `CACHE_LIMIT = 128` (L457)\n- var `MAX_USERS = 500` (L459)\n### fn `def req_cover_py_1(value: int) -> int` (L467-469)\n- @brief Coverage helper construct 1.\n- @details Provides deterministic fixture-level Doxygen coverage block 1.\n- @param value Input value for helper construct 1.\n- @return Output value for helper construct 1.\n\n### fn `def req_cover_py_2(value: int) -> int` (L475-477)\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\n### fn `def req_cover_py_3(value: int) -> int` (L483-485)\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\n### fn `def req_cover_py_4(value: int) -> int` (L491-493)\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\n### fn `def req_cover_py_5(value: int) -> int` (L499-501)\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\n## Symbol Index\n|Symbol|Kind|Vis|Lines|Sig|\n|---|---|---|---|---|\n|`MAX_RETRIES`|var|pub|19||\n|`DEFAULT_TIMEOUT`|var|pub|20||\n|`Config`|class|pub|27-61|class Config|\n|`Config.get`|fn|pub|39-51|def get(self, key: str, default: str = \"\") -> str|\n|`Config.__post_init__`|fn|priv|52-61|def __post_init__(self) -> None|\n|`MyClass`|class|pub|62-167|class MyClass|\n|`InnerHelper`|class|pub|69-87|class InnerHelper|\n|`InnerHelper.__init__`|fn|priv|74-80|def __init__(self, tag: str)|\n|`InnerHelper.describe`|fn|pub|81-87|def describe(self) -> str|\n|`MyClass.__init__`|fn|priv|88-98|def __init__(self, name: str, retries: int = MAX_RETRIES)|\n|`MyClass.name`|fn|pub|100-106|def name(self) -> str|\n|`MyClass.name`|fn|pub|108-117|def name(self, value: str) -> None|\n|`MyClass.create_default`|fn|pub|119-125|def create_default() -> \"MyClass\"|\n|`MyClass.from_dict`|fn|pub|127-138|def from_dict(cls, data: dict) -> \"MyClass\"|\n|`MyClass.process`|fn|pub|139-156|def process(self, items: List[str], *, verbose: bool = Fa...|\n|`MyClass.compute`|fn|pub|157-167|def compute(self, x: int, y: int) -> int|\n|`AbstractProcessor`|class|pub|168-196|class AbstractProcessor(ABC)|\n|`AbstractProcessor.execute`|fn|pub|179-186|def execute(self, data: bytes) -> bool|\n|`AbstractProcessor.execute_async`|fn|pub|188-196|async def execute_async(self, data: bytes) -> bool|\n|`ConcreteProcessor`|class|pub|197-231|class ConcreteProcessor(AbstractProcessor)|\n|`ConcreteProcessor.execute`|fn|pub|206-222|def execute(self, data: bytes) -> bool|\n|`ConcreteProcessor.execute_async`|fn|pub|223-231|async def execute_async(self, data: bytes) -> bool|\n|`GenericContainer`|class|pub|232-271|class GenericContainer(Generic[T])|\n|`GenericContainer.__init__`|fn|priv|242-245|def __init__(self) -> None|\n|`GenericContainer.add`|fn|pub|246-252|def add(self, item: T) -> None|\n|`GenericContainer.__iter__`|fn|priv|253-259|def __iter__(self) -> Iterator[T]|\n|`GenericContainer.find`|fn|pub|260-271|def find(self, predicate) -> Optional[T]|\n|`Renderable`|class|pub|272-285|class Renderable(Protocol)|\n|`Renderable.render`|fn|pub|278-285|def render(self) -> str|\n|`regular_function`|fn|pub|287-295|def regular_function(x: int) -> int|\n|`function_with_walrus`|fn|pub|296-307|def function_with_walrus(data: List[int]) -> Optional[int]|\n|`multi_return_paths`|fn|pub|308-325|def multi_return_paths(value: int) -> Union[str, int, None]|\n|`generator_function`|fn|pub|326-336|def generator_function(limit: int) -> Iterator[int]|\n|`async_generator`|fn|pub|337-347|async def async_generator(items: List[str]) -> AsyncItera...|\n|`managed_resource`|fn|pub|349-362|def managed_resource(path: str)|\n|`closure_factory`|fn|pub|363-379|def closure_factory(multiplier: int)|\n|`inner`|fn|pub|369-376|def inner(x: int) -> int|\n|`uses_unpacking`|fn|pub|380-393|def uses_unpacking(*args: int, **kwargs: str) -> Dict[str...|\n|`EVEN_SQUARES`|var|pub|398||\n|`async_function`|fn|pub|401-408|async def async_function()|\n|`deeply_nested_logic`|fn|pub|409-429|def deeply_nested_logic(matrix: List[List[int]]) -> int|\n|`exception_handling_example`|fn|pub|430-453|def exception_handling_example(path: str) -> Optional[str]|\n|`MAX_BATCH`|var|pub|455||\n|`CACHE_LIMIT`|var|pub|457||\n|`MAX_USERS`|var|pub|459||\n|`req_cover_py_1`|fn|pub|467-469|def req_cover_py_1(value: int) -> int|\n|`req_cover_py_2`|fn|pub|475-477|def req_cover_py_2(value: int) -> int|\n|`req_cover_py_3`|fn|pub|483-485|def req_cover_py_3(value: int) -> int|\n|`req_cover_py_4`|fn|pub|491-493|def req_cover_py_4(value: int) -> int|\n|`req_cover_py_5`|fn|pub|499-501|def req_cover_py_5(value: int) -> int|\n\n",
|
|
4
4
|
"stderr": ""
|
|
5
5
|
}
|