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.
Files changed (774) hide show
  1. package/.gitignore +2 -0
  2. package/CHANGELOG.md +44 -0
  3. package/README.md +1 -1
  4. package/docs/pi.dev/coding-agent-docs/custom-provider.md +42 -1
  5. package/docs/pi.dev/coding-agent-docs/extensions.md +302 -28
  6. package/docs/pi.dev/coding-agent-docs/keybindings.md +23 -1
  7. package/docs/pi.dev/coding-agent-docs/models.md +3 -0
  8. package/docs/pi.dev/coding-agent-docs/packages.md +2 -2
  9. package/docs/pi.dev/coding-agent-docs/prompt-templates.md +21 -0
  10. package/docs/pi.dev/coding-agent-docs/providers.md +1 -0
  11. package/docs/pi.dev/coding-agent-docs/rpc.md +36 -6
  12. package/docs/pi.dev/coding-agent-docs/sdk.md +30 -5
  13. package/docs/pi.dev/coding-agent-docs/session.md +1 -1
  14. package/docs/pi.dev/coding-agent-docs/settings.md +2 -1
  15. package/docs/pi.dev/coding-agent-docs/skills.md +12 -12
  16. package/docs/pi.dev/coding-agent-docs/tree.md +2 -0
  17. package/docs/pi.dev/coding-agent-docs/tui.md +31 -0
  18. package/docs/pi.dev/mom-docs/new.md +4 -4
  19. package/package.json +1 -1
  20. package/pi-usereq/docs/REFERENCES.md +2658 -2035
  21. package/pi-usereq/docs/REQUIREMENTS.md +345 -191
  22. package/pi-usereq/docs/WORKFLOW.md +387 -363
  23. package/pi.dev-src/pi-mono/agent/src/agent-loop.ts +683 -0
  24. package/pi.dev-src/pi-mono/agent/src/agent.ts +543 -0
  25. package/pi.dev-src/pi-mono/agent/src/index.ts +8 -0
  26. package/pi.dev-src/pi-mono/agent/src/proxy.ts +367 -0
  27. package/pi.dev-src/pi-mono/agent/src/types.ts +364 -0
  28. package/pi.dev-src/pi-mono/agent/test/agent-loop.test.ts +1181 -0
  29. package/pi.dev-src/pi-mono/agent/test/agent.test.ts +463 -0
  30. package/pi.dev-src/pi-mono/agent/test/e2e.test.ts +404 -0
  31. package/pi.dev-src/pi-mono/agent/test/utils/calculate.ts +32 -0
  32. package/pi.dev-src/pi-mono/agent/test/utils/get-current-time.ts +46 -0
  33. package/pi.dev-src/pi-mono/agent/vitest.config.ts +9 -0
  34. package/pi.dev-src/pi-mono/ai/bedrock-provider.d.ts +1 -0
  35. package/pi.dev-src/pi-mono/ai/bedrock-provider.js +1 -0
  36. package/pi.dev-src/pi-mono/ai/scripts/generate-models.ts +1635 -0
  37. package/pi.dev-src/pi-mono/ai/scripts/generate-test-image.ts +34 -0
  38. package/pi.dev-src/pi-mono/ai/src/api-registry.ts +98 -0
  39. package/pi.dev-src/pi-mono/ai/src/bedrock-provider.ts +6 -0
  40. package/pi.dev-src/pi-mono/ai/src/cli.ts +133 -0
  41. package/pi.dev-src/pi-mono/ai/src/env-api-keys.ts +134 -0
  42. package/pi.dev-src/pi-mono/ai/src/index.ts +35 -0
  43. package/pi.dev-src/pi-mono/ai/src/models.generated.ts +14928 -0
  44. package/pi.dev-src/pi-mono/ai/src/models.ts +82 -0
  45. package/pi.dev-src/pi-mono/ai/src/oauth.ts +1 -0
  46. package/pi.dev-src/pi-mono/ai/src/providers/amazon-bedrock.ts +929 -0
  47. package/pi.dev-src/pi-mono/ai/src/providers/anthropic.ts +1125 -0
  48. package/pi.dev-src/pi-mono/ai/src/providers/azure-openai-responses.ts +253 -0
  49. package/pi.dev-src/pi-mono/ai/src/providers/faux.ts +499 -0
  50. package/pi.dev-src/pi-mono/ai/src/providers/github-copilot-headers.ts +37 -0
  51. package/pi.dev-src/pi-mono/ai/src/providers/google-gemini-cli.ts +996 -0
  52. package/pi.dev-src/pi-mono/ai/src/providers/google-shared.ts +354 -0
  53. package/pi.dev-src/pi-mono/ai/src/providers/google-vertex.ts +543 -0
  54. package/pi.dev-src/pi-mono/ai/src/providers/google.ts +500 -0
  55. package/pi.dev-src/pi-mono/ai/src/providers/mistral.ts +629 -0
  56. package/pi.dev-src/pi-mono/ai/src/providers/openai-codex-responses.ts +984 -0
  57. package/pi.dev-src/pi-mono/ai/src/providers/openai-completions.ts +1063 -0
  58. package/pi.dev-src/pi-mono/ai/src/providers/openai-responses-shared.ts +539 -0
  59. package/pi.dev-src/pi-mono/ai/src/providers/openai-responses.ts +264 -0
  60. package/pi.dev-src/pi-mono/ai/src/providers/register-builtins.ts +433 -0
  61. package/pi.dev-src/pi-mono/ai/src/providers/simple-options.ts +47 -0
  62. package/pi.dev-src/pi-mono/ai/src/providers/transform-messages.ts +220 -0
  63. package/pi.dev-src/pi-mono/ai/src/stream.ts +59 -0
  64. package/pi.dev-src/pi-mono/ai/src/types.ts +417 -0
  65. package/pi.dev-src/pi-mono/ai/src/utils/event-stream.ts +87 -0
  66. package/pi.dev-src/pi-mono/ai/src/utils/hash.ts +13 -0
  67. package/pi.dev-src/pi-mono/ai/src/utils/headers.ts +7 -0
  68. package/pi.dev-src/pi-mono/ai/src/utils/json-parse.ts +124 -0
  69. package/pi.dev-src/pi-mono/ai/src/utils/overflow.ts +138 -0
  70. package/pi.dev-src/pi-mono/ai/src/utils/sanitize-unicode.ts +25 -0
  71. package/pi.dev-src/pi-mono/ai/src/utils/typebox-helpers.ts +24 -0
  72. package/pi.dev-src/pi-mono/ai/src/utils/validation.ts +324 -0
  73. package/pi.dev-src/pi-mono/ai/test/abort.test.ts +260 -0
  74. package/pi.dev-src/pi-mono/ai/test/anthropic-oauth.test.ts +99 -0
  75. package/pi.dev-src/pi-mono/ai/test/anthropic-opus-4-7-smoke.test.ts +72 -0
  76. package/pi.dev-src/pi-mono/ai/test/anthropic-sse-parsing.test.ts +113 -0
  77. package/pi.dev-src/pi-mono/ai/test/anthropic-thinking-disable.test.ts +152 -0
  78. package/pi.dev-src/pi-mono/ai/test/anthropic-tool-name-normalization.test.ts +205 -0
  79. package/pi.dev-src/pi-mono/ai/test/azure-utils.ts +28 -0
  80. package/pi.dev-src/pi-mono/ai/test/bedrock-endpoint-resolution.test.ts +131 -0
  81. package/pi.dev-src/pi-mono/ai/test/bedrock-models.test.ts +66 -0
  82. package/pi.dev-src/pi-mono/ai/test/bedrock-thinking-payload.test.ts +107 -0
  83. package/pi.dev-src/pi-mono/ai/test/bedrock-utils.ts +18 -0
  84. package/pi.dev-src/pi-mono/ai/test/cache-retention.test.ts +335 -0
  85. package/pi.dev-src/pi-mono/ai/test/context-overflow.test.ts +714 -0
  86. package/pi.dev-src/pi-mono/ai/test/cross-provider-handoff.test.ts +458 -0
  87. package/pi.dev-src/pi-mono/ai/test/data/red-circle.png +0 -0
  88. package/pi.dev-src/pi-mono/ai/test/empty.test.ts +742 -0
  89. package/pi.dev-src/pi-mono/ai/test/faux-provider.test.ts +597 -0
  90. package/pi.dev-src/pi-mono/ai/test/fireworks-models.test.ts +49 -0
  91. package/pi.dev-src/pi-mono/ai/test/github-copilot-anthropic.test.ts +108 -0
  92. package/pi.dev-src/pi-mono/ai/test/github-copilot-oauth.test.ts +196 -0
  93. package/pi.dev-src/pi-mono/ai/test/google-gemini-cli-claude-thinking-header.test.ts +103 -0
  94. package/pi.dev-src/pi-mono/ai/test/google-gemini-cli-empty-stream.test.ts +108 -0
  95. package/pi.dev-src/pi-mono/ai/test/google-gemini-cli-retry-delay.test.ts +53 -0
  96. package/pi.dev-src/pi-mono/ai/test/google-shared-convert-tools.test.ts +187 -0
  97. package/pi.dev-src/pi-mono/ai/test/google-shared-gemini3-unsigned-tool-call.test.ts +172 -0
  98. package/pi.dev-src/pi-mono/ai/test/google-shared-image-tool-result-routing.test.ts +124 -0
  99. package/pi.dev-src/pi-mono/ai/test/google-thinking-disable.test.ts +183 -0
  100. package/pi.dev-src/pi-mono/ai/test/google-thinking-signature.test.ts +38 -0
  101. package/pi.dev-src/pi-mono/ai/test/google-tool-call-missing-args.test.ts +105 -0
  102. package/pi.dev-src/pi-mono/ai/test/google-vertex-api-key-resolution.test.ts +144 -0
  103. package/pi.dev-src/pi-mono/ai/test/image-tool-result.test.ts +481 -0
  104. package/pi.dev-src/pi-mono/ai/test/interleaved-thinking.test.ts +145 -0
  105. package/pi.dev-src/pi-mono/ai/test/lazy-module-load.test.ts +102 -0
  106. package/pi.dev-src/pi-mono/ai/test/mistral-reasoning-mode.test.ts +66 -0
  107. package/pi.dev-src/pi-mono/ai/test/mistral-tool-schema.test.ts +61 -0
  108. package/pi.dev-src/pi-mono/ai/test/oauth.ts +89 -0
  109. package/pi.dev-src/pi-mono/ai/test/openai-codex-cache-affinity-e2e.test.ts +36 -0
  110. package/pi.dev-src/pi-mono/ai/test/openai-codex-stream.test.ts +686 -0
  111. package/pi.dev-src/pi-mono/ai/test/openai-completions-cache-control-format.test.ts +189 -0
  112. package/pi.dev-src/pi-mono/ai/test/openai-completions-prompt-cache.test.ts +198 -0
  113. package/pi.dev-src/pi-mono/ai/test/openai-completions-thinking-as-text.test.ts +214 -0
  114. package/pi.dev-src/pi-mono/ai/test/openai-completions-tool-choice.test.ts +560 -0
  115. package/pi.dev-src/pi-mono/ai/test/openai-completions-tool-result-images.test.ts +101 -0
  116. package/pi.dev-src/pi-mono/ai/test/openai-responses-cache-affinity-e2e.test.ts +32 -0
  117. package/pi.dev-src/pi-mono/ai/test/openai-responses-copilot-provider.test.ts +128 -0
  118. package/pi.dev-src/pi-mono/ai/test/openai-responses-foreign-toolcall-id.test.ts +66 -0
  119. package/pi.dev-src/pi-mono/ai/test/openai-responses-partial-json-cleanup.test.ts +101 -0
  120. package/pi.dev-src/pi-mono/ai/test/openai-responses-reasoning-replay-e2e.test.ts +292 -0
  121. package/pi.dev-src/pi-mono/ai/test/openai-responses-tool-result-images.test.ts +200 -0
  122. package/pi.dev-src/pi-mono/ai/test/openrouter-cache-write-repro.test.ts +78 -0
  123. package/pi.dev-src/pi-mono/ai/test/overflow.test.ts +64 -0
  124. package/pi.dev-src/pi-mono/ai/test/responseid.test.ts +145 -0
  125. package/pi.dev-src/pi-mono/ai/test/stream.test.ts +1405 -0
  126. package/pi.dev-src/pi-mono/ai/test/supports-xhigh.test.ts +34 -0
  127. package/pi.dev-src/pi-mono/ai/test/tokens.test.ts +304 -0
  128. package/pi.dev-src/pi-mono/ai/test/tool-call-id-normalization.test.ts +291 -0
  129. package/pi.dev-src/pi-mono/ai/test/tool-call-without-result.test.ts +313 -0
  130. package/pi.dev-src/pi-mono/ai/test/total-tokens.test.ts +695 -0
  131. package/pi.dev-src/pi-mono/ai/test/transform-messages-copilot-openai-to-anthropic.test.ts +191 -0
  132. package/pi.dev-src/pi-mono/ai/test/unicode-surrogate.test.ts +754 -0
  133. package/pi.dev-src/pi-mono/ai/test/validation.test.ts +116 -0
  134. package/pi.dev-src/pi-mono/ai/test/xhigh.test.ts +71 -0
  135. package/pi.dev-src/pi-mono/ai/test/zen.test.ts +25 -0
  136. package/pi.dev-src/pi-mono/ai/vitest.config.ts +9 -0
  137. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/antigravity-image-gen.ts +418 -0
  138. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/auto-commit-on-exit.ts +49 -0
  139. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/bash-spawn-hook.ts +30 -0
  140. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/bookmark.ts +50 -0
  141. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/built-in-tool-renderer.ts +249 -0
  142. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/claude-rules.ts +86 -0
  143. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/commands.ts +72 -0
  144. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/confirm-destructive.ts +59 -0
  145. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-compaction.ts +127 -0
  146. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-footer.ts +64 -0
  147. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-header.ts +73 -0
  148. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  149. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  150. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  151. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  152. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
  153. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dirty-repo-guard.ts +56 -0
  154. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom/build.sh +152 -0
  155. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  156. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom-component.ts +132 -0
  157. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  158. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  159. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/index.ts +74 -0
  160. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  161. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-resources/SKILL.md +8 -0
  162. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-resources/dynamic.json +79 -0
  163. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-resources/dynamic.md +5 -0
  164. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-resources/index.ts +15 -0
  165. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/dynamic-tools.ts +74 -0
  166. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/event-bus.ts +43 -0
  167. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/file-trigger.ts +41 -0
  168. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/git-checkpoint.ts +53 -0
  169. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/github-issue-autocomplete.ts +185 -0
  170. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/handoff.ts +153 -0
  171. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/hello.ts +26 -0
  172. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/hidden-thinking-label.ts +53 -0
  173. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/inline-bash.ts +94 -0
  174. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/input-transform.ts +43 -0
  175. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/interactive-shell.ts +196 -0
  176. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/mac-system-theme.ts +47 -0
  177. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/message-renderer.ts +59 -0
  178. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/minimal-mode.ts +426 -0
  179. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/modal-editor.ts +85 -0
  180. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/model-status.ts +31 -0
  181. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/notify.ts +55 -0
  182. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/overlay-qa-tests.ts +1348 -0
  183. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/overlay-test.ts +150 -0
  184. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/permission-gate.ts +34 -0
  185. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/pirate.ts +47 -0
  186. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/plan-mode/index.ts +340 -0
  187. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/plan-mode/utils.ts +168 -0
  188. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/preset.ts +430 -0
  189. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/prompt-customizer.ts +97 -0
  190. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/protected-paths.ts +30 -0
  191. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/provider-payload.ts +18 -0
  192. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/qna.ts +122 -0
  193. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/question.ts +264 -0
  194. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/questionnaire.ts +427 -0
  195. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/rainbow-editor.ts +88 -0
  196. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/reload-runtime.ts +37 -0
  197. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/rpc-demo.ts +118 -0
  198. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/sandbox/index.ts +321 -0
  199. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/sandbox/package-lock.json +92 -0
  200. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/send-user-message.ts +97 -0
  201. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/session-name.ts +27 -0
  202. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/shutdown-command.ts +63 -0
  203. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/snake.ts +343 -0
  204. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/space-invaders.ts +560 -0
  205. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/ssh.ts +220 -0
  206. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/status-line.ts +32 -0
  207. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/structured-output.ts +65 -0
  208. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents/planner.md +37 -0
  209. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents/reviewer.md +35 -0
  210. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents/scout.md +50 -0
  211. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents/worker.md +24 -0
  212. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/agents.ts +126 -0
  213. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/index.ts +987 -0
  214. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  215. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/prompts/implement.md +10 -0
  216. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  217. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/summarize.ts +206 -0
  218. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/system-prompt-header.ts +17 -0
  219. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/tic-tac-toe.ts +1008 -0
  220. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/timed-confirm.ts +70 -0
  221. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/titlebar-spinner.ts +58 -0
  222. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/todo.ts +297 -0
  223. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/tool-override.ts +144 -0
  224. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/tools.ts +141 -0
  225. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/trigger-compact.ts +50 -0
  226. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/truncated-tool.ts +195 -0
  227. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/widget-placement.ts +9 -0
  228. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/with-deps/index.ts +32 -0
  229. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/with-deps/package-lock.json +31 -0
  230. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/working-indicator.ts +123 -0
  231. package/pi.dev-src/pi-mono/coding-agent/examples/extensions/working-message-test.ts +25 -0
  232. package/pi.dev-src/pi-mono/coding-agent/examples/rpc-extension-ui.ts +632 -0
  233. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/01-minimal.ts +22 -0
  234. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/02-custom-model.ts +49 -0
  235. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/03-custom-prompt.ts +62 -0
  236. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/04-skills.ts +55 -0
  237. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/05-tools.ts +44 -0
  238. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/06-extensions.ts +90 -0
  239. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/07-context-files.ts +42 -0
  240. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/08-prompt-templates.ts +51 -0
  241. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/09-api-keys-and-oauth.ts +48 -0
  242. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/10-settings.ts +53 -0
  243. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/11-sessions.ts +48 -0
  244. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/12-full-control.ts +73 -0
  245. package/pi.dev-src/pi-mono/coding-agent/examples/sdk/13-session-runtime.ts +67 -0
  246. package/pi.dev-src/pi-mono/coding-agent/scripts/migrate-sessions.sh +93 -0
  247. package/pi.dev-src/pi-mono/coding-agent/src/bun/cli.ts +6 -0
  248. package/pi.dev-src/pi-mono/coding-agent/src/bun/register-bedrock.ts +4 -0
  249. package/pi.dev-src/pi-mono/coding-agent/src/cli/args.ts +335 -0
  250. package/pi.dev-src/pi-mono/coding-agent/src/cli/config-selector.ts +52 -0
  251. package/pi.dev-src/pi-mono/coding-agent/src/cli/file-processor.ts +100 -0
  252. package/pi.dev-src/pi-mono/coding-agent/src/cli/initial-message.ts +43 -0
  253. package/pi.dev-src/pi-mono/coding-agent/src/cli/list-models.ts +110 -0
  254. package/pi.dev-src/pi-mono/coding-agent/src/cli/session-picker.ts +52 -0
  255. package/pi.dev-src/pi-mono/coding-agent/src/cli.ts +17 -0
  256. package/pi.dev-src/pi-mono/coding-agent/src/config.ts +261 -0
  257. package/pi.dev-src/pi-mono/coding-agent/src/core/agent-session-runtime.ts +394 -0
  258. package/pi.dev-src/pi-mono/coding-agent/src/core/agent-session-services.ts +196 -0
  259. package/pi.dev-src/pi-mono/coding-agent/src/core/agent-session.ts +3096 -0
  260. package/pi.dev-src/pi-mono/coding-agent/src/core/auth-storage.ts +493 -0
  261. package/pi.dev-src/pi-mono/coding-agent/src/core/bash-executor.ts +154 -0
  262. package/pi.dev-src/pi-mono/coding-agent/src/core/compaction/branch-summarization.ts +355 -0
  263. package/pi.dev-src/pi-mono/coding-agent/src/core/compaction/compaction.ts +839 -0
  264. package/pi.dev-src/pi-mono/coding-agent/src/core/compaction/index.ts +7 -0
  265. package/pi.dev-src/pi-mono/coding-agent/src/core/compaction/utils.ts +170 -0
  266. package/pi.dev-src/pi-mono/coding-agent/src/core/defaults.ts +3 -0
  267. package/pi.dev-src/pi-mono/coding-agent/src/core/diagnostics.ts +15 -0
  268. package/pi.dev-src/pi-mono/coding-agent/src/core/event-bus.ts +33 -0
  269. package/pi.dev-src/pi-mono/coding-agent/src/core/exec.ts +107 -0
  270. package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/ansi-to-html.ts +258 -0
  271. package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/index.ts +314 -0
  272. package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/template.css +1017 -0
  273. package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/template.html +55 -0
  274. package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/template.js +1770 -0
  275. package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/tool-renderer.ts +158 -0
  276. package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/vendor/highlight.min.js +1213 -0
  277. package/pi.dev-src/pi-mono/coding-agent/src/core/export-html/vendor/marked.min.js +6 -0
  278. package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/index.ts +171 -0
  279. package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/loader.ts +606 -0
  280. package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/runner.ts +1019 -0
  281. package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/types.ts +1542 -0
  282. package/pi.dev-src/pi-mono/coding-agent/src/core/extensions/wrapper.ts +30 -0
  283. package/pi.dev-src/pi-mono/coding-agent/src/core/footer-data-provider.ts +354 -0
  284. package/pi.dev-src/pi-mono/coding-agent/src/core/index.ts +77 -0
  285. package/pi.dev-src/pi-mono/coding-agent/src/core/keybindings.ts +370 -0
  286. package/pi.dev-src/pi-mono/coding-agent/src/core/messages.ts +195 -0
  287. package/pi.dev-src/pi-mono/coding-agent/src/core/model-registry.ts +858 -0
  288. package/pi.dev-src/pi-mono/coding-agent/src/core/model-resolver.ts +629 -0
  289. package/pi.dev-src/pi-mono/coding-agent/src/core/output-guard.ts +74 -0
  290. package/pi.dev-src/pi-mono/coding-agent/src/core/package-manager.ts +2408 -0
  291. package/pi.dev-src/pi-mono/coding-agent/src/core/prompt-templates.ts +296 -0
  292. package/pi.dev-src/pi-mono/coding-agent/src/core/resolve-config-value.ts +142 -0
  293. package/pi.dev-src/pi-mono/coding-agent/src/core/resource-loader.ts +917 -0
  294. package/pi.dev-src/pi-mono/coding-agent/src/core/sdk.ts +380 -0
  295. package/pi.dev-src/pi-mono/coding-agent/src/core/session-cwd.ts +59 -0
  296. package/pi.dev-src/pi-mono/coding-agent/src/core/session-manager.ts +1425 -0
  297. package/pi.dev-src/pi-mono/coding-agent/src/core/settings-manager.ts +999 -0
  298. package/pi.dev-src/pi-mono/coding-agent/src/core/skills.ts +508 -0
  299. package/pi.dev-src/pi-mono/coding-agent/src/core/slash-commands.ts +39 -0
  300. package/pi.dev-src/pi-mono/coding-agent/src/core/source-info.ts +40 -0
  301. package/pi.dev-src/pi-mono/coding-agent/src/core/system-prompt.ts +172 -0
  302. package/pi.dev-src/pi-mono/coding-agent/src/core/telemetry.ts +13 -0
  303. package/pi.dev-src/pi-mono/coding-agent/src/core/timings.ts +31 -0
  304. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/bash.ts +448 -0
  305. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/edit-diff.ts +445 -0
  306. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/edit.ts +487 -0
  307. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/file-mutation-queue.ts +39 -0
  308. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/find.ts +370 -0
  309. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/grep.ts +384 -0
  310. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/index.ts +196 -0
  311. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/ls.ts +229 -0
  312. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/path-utils.ts +94 -0
  313. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/read.ts +273 -0
  314. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/render-utils.ts +64 -0
  315. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/tool-definition-wrapper.ts +45 -0
  316. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/truncate.ts +265 -0
  317. package/pi.dev-src/pi-mono/coding-agent/src/core/tools/write.ts +281 -0
  318. package/pi.dev-src/pi-mono/coding-agent/src/index.ts +352 -0
  319. package/pi.dev-src/pi-mono/coding-agent/src/main.ts +731 -0
  320. package/pi.dev-src/pi-mono/coding-agent/src/migrations.ts +314 -0
  321. package/pi.dev-src/pi-mono/coding-agent/src/modes/index.ts +9 -0
  322. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/assets/clankolas.png +0 -0
  323. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/armin.ts +382 -0
  324. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/assistant-message.ts +147 -0
  325. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/bash-execution.ts +218 -0
  326. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/bordered-loader.ts +68 -0
  327. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/branch-summary-message.ts +58 -0
  328. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/compaction-summary-message.ts +59 -0
  329. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/config-selector.ts +592 -0
  330. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/countdown-timer.ts +38 -0
  331. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/custom-editor.ts +80 -0
  332. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/custom-message.ts +99 -0
  333. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/daxnuts.ts +164 -0
  334. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/diff.ts +147 -0
  335. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/dynamic-border.ts +25 -0
  336. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/earendil-announcement.ts +53 -0
  337. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/extension-editor.ts +147 -0
  338. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/extension-input.ts +87 -0
  339. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/extension-selector.ts +107 -0
  340. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/footer.ts +220 -0
  341. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/index.ts +32 -0
  342. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/keybinding-hints.ts +24 -0
  343. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/login-dialog.ts +178 -0
  344. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/model-selector.ts +338 -0
  345. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/oauth-selector.ts +121 -0
  346. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/scoped-models-selector.ts +355 -0
  347. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/session-selector-search.ts +194 -0
  348. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/session-selector.ts +1026 -0
  349. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/settings-selector.ts +456 -0
  350. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/show-images-selector.ts +50 -0
  351. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/skill-invocation-message.ts +55 -0
  352. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/theme-selector.ts +67 -0
  353. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/thinking-selector.ts +74 -0
  354. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/tool-execution.ts +352 -0
  355. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/tree-selector.ts +1246 -0
  356. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/user-message-selector.ts +155 -0
  357. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/user-message.ts +35 -0
  358. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/components/visual-truncate.ts +50 -0
  359. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/interactive-mode.ts +5155 -0
  360. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/theme/dark.json +85 -0
  361. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/theme/light.json +84 -0
  362. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/theme/theme-schema.json +335 -0
  363. package/pi.dev-src/pi-mono/coding-agent/src/modes/interactive/theme/theme.ts +1141 -0
  364. package/pi.dev-src/pi-mono/coding-agent/src/modes/print-mode.ts +158 -0
  365. package/pi.dev-src/pi-mono/coding-agent/src/modes/rpc/jsonl.ts +58 -0
  366. package/pi.dev-src/pi-mono/coding-agent/src/modes/rpc/rpc-client.ts +515 -0
  367. package/pi.dev-src/pi-mono/coding-agent/src/modes/rpc/rpc-mode.ts +745 -0
  368. package/pi.dev-src/pi-mono/coding-agent/src/modes/rpc/rpc-types.ts +264 -0
  369. package/pi.dev-src/pi-mono/coding-agent/src/package-manager-cli.ts +270 -0
  370. package/pi.dev-src/pi-mono/coding-agent/src/utils/changelog.ts +99 -0
  371. package/pi.dev-src/pi-mono/coding-agent/src/utils/child-process.ts +86 -0
  372. package/pi.dev-src/pi-mono/coding-agent/src/utils/clipboard-image.ts +300 -0
  373. package/pi.dev-src/pi-mono/coding-agent/src/utils/clipboard-native.ts +22 -0
  374. package/pi.dev-src/pi-mono/coding-agent/src/utils/clipboard.ts +81 -0
  375. package/pi.dev-src/pi-mono/coding-agent/src/utils/exif-orientation.ts +183 -0
  376. package/pi.dev-src/pi-mono/coding-agent/src/utils/frontmatter.ts +39 -0
  377. package/pi.dev-src/pi-mono/coding-agent/src/utils/fs-watch.ts +30 -0
  378. package/pi.dev-src/pi-mono/coding-agent/src/utils/git.ts +192 -0
  379. package/pi.dev-src/pi-mono/coding-agent/src/utils/image-convert.ts +41 -0
  380. package/pi.dev-src/pi-mono/coding-agent/src/utils/image-resize.ts +176 -0
  381. package/pi.dev-src/pi-mono/coding-agent/src/utils/mime.ts +30 -0
  382. package/pi.dev-src/pi-mono/coding-agent/src/utils/paths.ts +20 -0
  383. package/pi.dev-src/pi-mono/coding-agent/src/utils/photon.ts +139 -0
  384. package/pi.dev-src/pi-mono/coding-agent/src/utils/shell.ts +210 -0
  385. package/pi.dev-src/pi-mono/coding-agent/src/utils/sleep.ts +18 -0
  386. package/pi.dev-src/pi-mono/coding-agent/src/utils/tools-manager.ts +287 -0
  387. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-auto-compaction-queue.test.ts +437 -0
  388. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-branching.test.ts +156 -0
  389. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-compaction.test.ts +208 -0
  390. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-concurrent.test.ts +618 -0
  391. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-dynamic-provider.test.ts +117 -0
  392. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-dynamic-tools.test.ts +182 -0
  393. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-retry.test.ts +318 -0
  394. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-runtime-events.test.ts +208 -0
  395. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-stats.test.ts +143 -0
  396. package/pi.dev-src/pi-mono/coding-agent/test/agent-session-tree-navigation.test.ts +323 -0
  397. package/pi.dev-src/pi-mono/coding-agent/test/args.test.ts +328 -0
  398. package/pi.dev-src/pi-mono/coding-agent/test/assistant-message.test.ts +57 -0
  399. package/pi.dev-src/pi-mono/coding-agent/test/auth-storage.test.ts +462 -0
  400. package/pi.dev-src/pi-mono/coding-agent/test/bash-close-hang-windows.test.ts +126 -0
  401. package/pi.dev-src/pi-mono/coding-agent/test/bash-execution-width.test.ts +80 -0
  402. package/pi.dev-src/pi-mono/coding-agent/test/block-images.test.ts +120 -0
  403. package/pi.dev-src/pi-mono/coding-agent/test/clipboard-image-bmp-conversion.test.ts +88 -0
  404. package/pi.dev-src/pi-mono/coding-agent/test/clipboard-image.test.ts +136 -0
  405. package/pi.dev-src/pi-mono/coding-agent/test/compaction-extensions-example.test.ts +66 -0
  406. package/pi.dev-src/pi-mono/coding-agent/test/compaction-extensions.test.ts +415 -0
  407. package/pi.dev-src/pi-mono/coding-agent/test/compaction-serialization.test.ts +79 -0
  408. package/pi.dev-src/pi-mono/coding-agent/test/compaction-summary-reasoning.test.ts +118 -0
  409. package/pi.dev-src/pi-mono/coding-agent/test/compaction-thinking-model.test.ts +223 -0
  410. package/pi.dev-src/pi-mono/coding-agent/test/compaction.test.ts +550 -0
  411. package/pi.dev-src/pi-mono/coding-agent/test/config.test.ts +30 -0
  412. package/pi.dev-src/pi-mono/coding-agent/test/edit-tool-legacy-input.test.ts +116 -0
  413. package/pi.dev-src/pi-mono/coding-agent/test/edit-tool-no-full-redraw.test.ts +235 -0
  414. package/pi.dev-src/pi-mono/coding-agent/test/export-html-whitespace.test.ts +12 -0
  415. package/pi.dev-src/pi-mono/coding-agent/test/export-html-xss.test.ts +28 -0
  416. package/pi.dev-src/pi-mono/coding-agent/test/extensions-discovery.test.ts +463 -0
  417. package/pi.dev-src/pi-mono/coding-agent/test/extensions-input-event.test.ts +112 -0
  418. package/pi.dev-src/pi-mono/coding-agent/test/extensions-runner.test.ts +805 -0
  419. package/pi.dev-src/pi-mono/coding-agent/test/file-mutation-queue.test.ts +163 -0
  420. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/assistant-message-with-thinking-code.json +33 -0
  421. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/before-compaction.jsonl +1003 -0
  422. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/empty-agent/.gitkeep +0 -0
  423. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/empty-cwd/.gitkeep +0 -0
  424. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/large-session.jsonl +1019 -0
  425. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/consecutive-hyphens/SKILL.md +8 -0
  426. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/disable-model-invocation/SKILL.md +9 -0
  427. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/invalid-name-chars/SKILL.md +8 -0
  428. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/invalid-yaml/SKILL.md +8 -0
  429. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/long-name/SKILL.md +8 -0
  430. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/missing-description/SKILL.md +7 -0
  431. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/multiline-description/SKILL.md +11 -0
  432. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/name-mismatch/SKILL.md +8 -0
  433. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/nested/child-skill/SKILL.md +8 -0
  434. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/no-frontmatter/SKILL.md +3 -0
  435. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/root-skill-preferred/SKILL.md +3 -0
  436. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/root-skill-preferred/nested-child/SKILL.md +3 -0
  437. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/unknown-field/SKILL.md +10 -0
  438. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills/valid-skill/SKILL.md +8 -0
  439. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills-collision/first/calendar/SKILL.md +8 -0
  440. package/pi.dev-src/pi-mono/coding-agent/test/fixtures/skills-collision/second/calendar/SKILL.md +8 -0
  441. package/pi.dev-src/pi-mono/coding-agent/test/footer-data-provider.test.ts +265 -0
  442. package/pi.dev-src/pi-mono/coding-agent/test/footer-width.test.ts +115 -0
  443. package/pi.dev-src/pi-mono/coding-agent/test/frontmatter.test.ts +60 -0
  444. package/pi.dev-src/pi-mono/coding-agent/test/git-ssh-url.test.ts +78 -0
  445. package/pi.dev-src/pi-mono/coding-agent/test/git-update.test.ts +411 -0
  446. package/pi.dev-src/pi-mono/coding-agent/test/image-processing.test.ts +145 -0
  447. package/pi.dev-src/pi-mono/coding-agent/test/image-resize-callers.test.ts +53 -0
  448. package/pi.dev-src/pi-mono/coding-agent/test/initial-message.test.ts +48 -0
  449. package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-anthropic-warning.test.ts +73 -0
  450. package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-clone-command.test.ts +77 -0
  451. package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-compaction.test.ts +57 -0
  452. package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-import-command.test.ts +144 -0
  453. package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-status.test.ts +635 -0
  454. package/pi.dev-src/pi-mono/coding-agent/test/interactive-mode-suspend.test.ts +149 -0
  455. package/pi.dev-src/pi-mono/coding-agent/test/keybindings-migration.test.ts +88 -0
  456. package/pi.dev-src/pi-mono/coding-agent/test/model-registry.test.ts +1209 -0
  457. package/pi.dev-src/pi-mono/coding-agent/test/model-resolver.test.ts +436 -0
  458. package/pi.dev-src/pi-mono/coding-agent/test/package-command-paths.test.ts +144 -0
  459. package/pi.dev-src/pi-mono/coding-agent/test/package-manager-ssh.test.ts +97 -0
  460. package/pi.dev-src/pi-mono/coding-agent/test/package-manager.test.ts +1795 -0
  461. package/pi.dev-src/pi-mono/coding-agent/test/path-utils.test.ts +162 -0
  462. package/pi.dev-src/pi-mono/coding-agent/test/plan-mode-utils.test.ts +261 -0
  463. package/pi.dev-src/pi-mono/coding-agent/test/print-mode.test.ts +140 -0
  464. package/pi.dev-src/pi-mono/coding-agent/test/prompt-templates.test.ts +515 -0
  465. package/pi.dev-src/pi-mono/coding-agent/test/resource-loader.test.ts +576 -0
  466. package/pi.dev-src/pi-mono/coding-agent/test/rpc-client-clone.test.ts +29 -0
  467. package/pi.dev-src/pi-mono/coding-agent/test/rpc-example.ts +86 -0
  468. package/pi.dev-src/pi-mono/coding-agent/test/rpc-jsonl.test.ts +65 -0
  469. package/pi.dev-src/pi-mono/coding-agent/test/rpc-prompt-response-semantics.test.ts +285 -0
  470. package/pi.dev-src/pi-mono/coding-agent/test/rpc.test.ts +321 -0
  471. package/pi.dev-src/pi-mono/coding-agent/test/sdk-codex-cache-probe-tool-loop.ts +364 -0
  472. package/pi.dev-src/pi-mono/coding-agent/test/sdk-openrouter-attribution.test.ts +181 -0
  473. package/pi.dev-src/pi-mono/coding-agent/test/sdk-session-manager.test.ts +95 -0
  474. package/pi.dev-src/pi-mono/coding-agent/test/sdk-skills.test.ts +109 -0
  475. package/pi.dev-src/pi-mono/coding-agent/test/session-cwd.test.ts +91 -0
  476. package/pi.dev-src/pi-mono/coding-agent/test/session-info-modified-timestamp.test.ts +83 -0
  477. package/pi.dev-src/pi-mono/coding-agent/test/session-manager/build-context.test.ts +268 -0
  478. package/pi.dev-src/pi-mono/coding-agent/test/session-manager/custom-session-id.test.ts +109 -0
  479. package/pi.dev-src/pi-mono/coding-agent/test/session-manager/file-operations.test.ts +208 -0
  480. package/pi.dev-src/pi-mono/coding-agent/test/session-manager/labels.test.ts +198 -0
  481. package/pi.dev-src/pi-mono/coding-agent/test/session-manager/migration.test.ts +78 -0
  482. package/pi.dev-src/pi-mono/coding-agent/test/session-manager/save-entry.test.ts +55 -0
  483. package/pi.dev-src/pi-mono/coding-agent/test/session-manager/tree-traversal.test.ts +533 -0
  484. package/pi.dev-src/pi-mono/coding-agent/test/session-selector-path-delete.test.ts +315 -0
  485. package/pi.dev-src/pi-mono/coding-agent/test/session-selector-rename.test.ts +111 -0
  486. package/pi.dev-src/pi-mono/coding-agent/test/session-selector-search.test.ts +195 -0
  487. package/pi.dev-src/pi-mono/coding-agent/test/settings-manager-bug.test.ts +147 -0
  488. package/pi.dev-src/pi-mono/coding-agent/test/settings-manager.test.ts +319 -0
  489. package/pi.dev-src/pi-mono/coding-agent/test/skills.test.ts +432 -0
  490. package/pi.dev-src/pi-mono/coding-agent/test/stdout-cleanliness.test.ts +103 -0
  491. package/pi.dev-src/pi-mono/coding-agent/test/streaming-render-debug.ts +97 -0
  492. package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-bash-persistence.test.ts +242 -0
  493. package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-compaction.test.ts +343 -0
  494. package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-model-extension.test.ts +325 -0
  495. package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-prompt.test.ts +323 -0
  496. package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-queue.test.ts +422 -0
  497. package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-retry-events.test.ts +358 -0
  498. package/pi.dev-src/pi-mono/coding-agent/test/suite/agent-session-runtime.test.ts +553 -0
  499. package/pi.dev-src/pi-mono/coding-agent/test/suite/harness.ts +208 -0
  500. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2023-queued-slash-command-followup.test.ts +80 -0
  501. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2753-reload-stale-resource-settings.test.ts +100 -0
  502. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2781-skill-collision-precedence.test.ts +120 -0
  503. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2791-fswatch-error-crash.test.ts +106 -0
  504. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2835-tools-allowlist-filters-extension-tools.test.ts +94 -0
  505. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/2860-replaced-session-context.test.ts +274 -0
  506. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/3217-scoped-model-order.test.ts +104 -0
  507. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/3302-find-path-glob.test.ts +72 -0
  508. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/3303-find-nested-gitignore.test.ts +83 -0
  509. package/pi.dev-src/pi-mono/coding-agent/test/suite/regressions/3317-network-connection-lost-retry.test.ts +33 -0
  510. package/pi.dev-src/pi-mono/coding-agent/test/system-prompt.test.ts +102 -0
  511. package/pi.dev-src/pi-mono/coding-agent/test/test-harness.test.ts +321 -0
  512. package/pi.dev-src/pi-mono/coding-agent/test/test-harness.ts +446 -0
  513. package/pi.dev-src/pi-mono/coding-agent/test/test-theme-colors.ts +246 -0
  514. package/pi.dev-src/pi-mono/coding-agent/test/theme-export.test.ts +104 -0
  515. package/pi.dev-src/pi-mono/coding-agent/test/tool-execution-component.test.ts +331 -0
  516. package/pi.dev-src/pi-mono/coding-agent/test/tools.test.ts +889 -0
  517. package/pi.dev-src/pi-mono/coding-agent/test/tree-selector.test.ts +655 -0
  518. package/pi.dev-src/pi-mono/coding-agent/test/trigger-compact-extension.test.ts +57 -0
  519. package/pi.dev-src/pi-mono/coding-agent/test/truncate-to-width.test.ts +81 -0
  520. package/pi.dev-src/pi-mono/coding-agent/test/user-message.test.ts +25 -0
  521. package/pi.dev-src/pi-mono/coding-agent/test/utilities.ts +316 -0
  522. package/pi.dev-src/pi-mono/coding-agent/tsconfig.examples.json +16 -0
  523. package/pi.dev-src/pi-mono/coding-agent/vitest.config.ts +26 -0
  524. package/pi.dev-src/pi-mono/mom/dev.sh +30 -0
  525. package/pi.dev-src/pi-mono/mom/docker.sh +95 -0
  526. package/pi.dev-src/pi-mono/mom/scripts/migrate-timestamps.ts +121 -0
  527. package/pi.dev-src/pi-mono/mom/src/agent.ts +882 -0
  528. package/pi.dev-src/pi-mono/mom/src/context.ts +180 -0
  529. package/pi.dev-src/pi-mono/mom/src/download.ts +117 -0
  530. package/pi.dev-src/pi-mono/mom/src/events.ts +442 -0
  531. package/pi.dev-src/pi-mono/mom/src/fs-watch.ts +30 -0
  532. package/pi.dev-src/pi-mono/mom/src/log.ts +271 -0
  533. package/pi.dev-src/pi-mono/mom/src/main.ts +367 -0
  534. package/pi.dev-src/pi-mono/mom/src/sandbox.ts +221 -0
  535. package/pi.dev-src/pi-mono/mom/src/slack.ts +623 -0
  536. package/pi.dev-src/pi-mono/mom/src/store.ts +234 -0
  537. package/pi.dev-src/pi-mono/mom/src/tools/attach.ts +47 -0
  538. package/pi.dev-src/pi-mono/mom/src/tools/bash.ts +97 -0
  539. package/pi.dev-src/pi-mono/mom/src/tools/edit.ts +165 -0
  540. package/pi.dev-src/pi-mono/mom/src/tools/index.ts +19 -0
  541. package/pi.dev-src/pi-mono/mom/src/tools/read.ts +159 -0
  542. package/pi.dev-src/pi-mono/mom/src/tools/truncate.ts +236 -0
  543. package/pi.dev-src/pi-mono/mom/src/tools/write.ts +45 -0
  544. package/pi.dev-src/pi-mono/mom/test/events.test.ts +50 -0
  545. package/pi.dev-src/pi-mono/pods/scripts/model_run.sh +83 -0
  546. package/pi.dev-src/pi-mono/pods/scripts/pod_setup.sh +336 -0
  547. package/pi.dev-src/pi-mono/pods/src/cli.ts +360 -0
  548. package/pi.dev-src/pi-mono/pods/src/commands/models.ts +753 -0
  549. package/pi.dev-src/pi-mono/pods/src/commands/pods.ts +205 -0
  550. package/pi.dev-src/pi-mono/pods/src/commands/prompt.ts +84 -0
  551. package/pi.dev-src/pi-mono/pods/src/config.ts +80 -0
  552. package/pi.dev-src/pi-mono/pods/src/index.ts +2 -0
  553. package/pi.dev-src/pi-mono/pods/src/model-configs.ts +111 -0
  554. package/pi.dev-src/pi-mono/pods/src/models.json +295 -0
  555. package/pi.dev-src/pi-mono/pods/src/ssh.ts +151 -0
  556. package/pi.dev-src/pi-mono/pods/src/types.ts +27 -0
  557. package/pi.dev-src/pi-mono/tui/src/autocomplete.ts +783 -0
  558. package/pi.dev-src/pi-mono/tui/src/components/box.ts +137 -0
  559. package/pi.dev-src/pi-mono/tui/src/components/cancellable-loader.ts +40 -0
  560. package/pi.dev-src/pi-mono/tui/src/components/editor.ts +2280 -0
  561. package/pi.dev-src/pi-mono/tui/src/components/image.ts +104 -0
  562. package/pi.dev-src/pi-mono/tui/src/components/input.ts +503 -0
  563. package/pi.dev-src/pi-mono/tui/src/components/loader.ts +86 -0
  564. package/pi.dev-src/pi-mono/tui/src/components/markdown.ts +852 -0
  565. package/pi.dev-src/pi-mono/tui/src/components/select-list.ts +229 -0
  566. package/pi.dev-src/pi-mono/tui/src/components/settings-list.ts +250 -0
  567. package/pi.dev-src/pi-mono/tui/src/components/spacer.ts +28 -0
  568. package/pi.dev-src/pi-mono/tui/src/components/text.ts +106 -0
  569. package/pi.dev-src/pi-mono/tui/src/components/truncated-text.ts +65 -0
  570. package/pi.dev-src/pi-mono/tui/src/editor-component.ts +74 -0
  571. package/pi.dev-src/pi-mono/tui/src/fuzzy.ts +133 -0
  572. package/pi.dev-src/pi-mono/tui/src/index.ts +106 -0
  573. package/pi.dev-src/pi-mono/tui/src/keybindings.ts +244 -0
  574. package/pi.dev-src/pi-mono/tui/src/keys.ts +1400 -0
  575. package/pi.dev-src/pi-mono/tui/src/kill-ring.ts +46 -0
  576. package/pi.dev-src/pi-mono/tui/src/stdin-buffer.ts +386 -0
  577. package/pi.dev-src/pi-mono/tui/src/terminal-image.ts +414 -0
  578. package/pi.dev-src/pi-mono/tui/src/terminal.ts +373 -0
  579. package/pi.dev-src/pi-mono/tui/src/tui.ts +1243 -0
  580. package/pi.dev-src/pi-mono/tui/src/undo-stack.ts +28 -0
  581. package/pi.dev-src/pi-mono/tui/src/utils.ts +1085 -0
  582. package/pi.dev-src/pi-mono/tui/test/autocomplete.test.ts +542 -0
  583. package/pi.dev-src/pi-mono/tui/test/bug-regression-isimageline-startswith-bug.test.ts +237 -0
  584. package/pi.dev-src/pi-mono/tui/test/chat-simple.ts +129 -0
  585. package/pi.dev-src/pi-mono/tui/test/editor.test.ts +3812 -0
  586. package/pi.dev-src/pi-mono/tui/test/fuzzy.test.ts +98 -0
  587. package/pi.dev-src/pi-mono/tui/test/image-test.ts +56 -0
  588. package/pi.dev-src/pi-mono/tui/test/input.test.ts +580 -0
  589. package/pi.dev-src/pi-mono/tui/test/key-tester.ts +105 -0
  590. package/pi.dev-src/pi-mono/tui/test/keybindings.test.ts +38 -0
  591. package/pi.dev-src/pi-mono/tui/test/keys.test.ts +614 -0
  592. package/pi.dev-src/pi-mono/tui/test/markdown.test.ts +1236 -0
  593. package/pi.dev-src/pi-mono/tui/test/overlay-non-capturing.test.ts +609 -0
  594. package/pi.dev-src/pi-mono/tui/test/overlay-options.test.ts +538 -0
  595. package/pi.dev-src/pi-mono/tui/test/overlay-short-content.test.ts +56 -0
  596. package/pi.dev-src/pi-mono/tui/test/regression-regional-indicator-width.test.ts +52 -0
  597. package/pi.dev-src/pi-mono/tui/test/select-list.test.ts +116 -0
  598. package/pi.dev-src/pi-mono/tui/test/stdin-buffer.test.ts +422 -0
  599. package/pi.dev-src/pi-mono/tui/test/terminal-image.test.ts +279 -0
  600. package/pi.dev-src/pi-mono/tui/test/test-themes.ts +38 -0
  601. package/pi.dev-src/pi-mono/tui/test/truncate-to-width.test.ts +62 -0
  602. package/pi.dev-src/pi-mono/tui/test/truncated-text.test.ts +129 -0
  603. package/pi.dev-src/pi-mono/tui/test/tui-cell-size-input.test.ts +81 -0
  604. package/pi.dev-src/pi-mono/tui/test/tui-overlay-style-leak.test.ts +72 -0
  605. package/pi.dev-src/pi-mono/tui/test/tui-render.test.ts +509 -0
  606. package/pi.dev-src/pi-mono/tui/test/viewport-overwrite-repro.ts +106 -0
  607. package/pi.dev-src/pi-mono/tui/test/virtual-terminal.ts +218 -0
  608. package/pi.dev-src/pi-mono/tui/test/wrap-ansi.test.ts +207 -0
  609. package/pi.dev-src/pi-mono/tui/vitest.config.ts +7 -0
  610. package/pi.dev-src/pi-mono/web-ui/example/index.html +13 -0
  611. package/pi.dev-src/pi-mono/web-ui/example/src/app.css +1 -0
  612. package/pi.dev-src/pi-mono/web-ui/example/src/custom-messages.ts +99 -0
  613. package/pi.dev-src/pi-mono/web-ui/example/src/main.ts +421 -0
  614. package/pi.dev-src/pi-mono/web-ui/example/tsconfig.json +23 -0
  615. package/pi.dev-src/pi-mono/web-ui/example/vite.config.ts +6 -0
  616. package/pi.dev-src/pi-mono/web-ui/scripts/count-prompt-tokens.ts +88 -0
  617. package/pi.dev-src/pi-mono/web-ui/src/ChatPanel.ts +209 -0
  618. package/pi.dev-src/pi-mono/web-ui/src/app.css +68 -0
  619. package/pi.dev-src/pi-mono/web-ui/src/components/AgentInterface.ts +403 -0
  620. package/pi.dev-src/pi-mono/web-ui/src/components/AttachmentTile.ts +107 -0
  621. package/pi.dev-src/pi-mono/web-ui/src/components/ConsoleBlock.ts +72 -0
  622. package/pi.dev-src/pi-mono/web-ui/src/components/CustomProviderCard.ts +100 -0
  623. package/pi.dev-src/pi-mono/web-ui/src/components/ExpandableSection.ts +46 -0
  624. package/pi.dev-src/pi-mono/web-ui/src/components/Input.ts +113 -0
  625. package/pi.dev-src/pi-mono/web-ui/src/components/MessageEditor.ts +405 -0
  626. package/pi.dev-src/pi-mono/web-ui/src/components/MessageList.ts +98 -0
  627. package/pi.dev-src/pi-mono/web-ui/src/components/Messages.ts +383 -0
  628. package/pi.dev-src/pi-mono/web-ui/src/components/ProviderKeyInput.ts +153 -0
  629. package/pi.dev-src/pi-mono/web-ui/src/components/SandboxedIframe.ts +626 -0
  630. package/pi.dev-src/pi-mono/web-ui/src/components/StreamingMessageContainer.ts +103 -0
  631. package/pi.dev-src/pi-mono/web-ui/src/components/ThinkingBlock.ts +43 -0
  632. package/pi.dev-src/pi-mono/web-ui/src/components/message-renderer-registry.ts +28 -0
  633. package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/ArtifactsRuntimeProvider.ts +220 -0
  634. package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/AttachmentsRuntimeProvider.ts +66 -0
  635. package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts +186 -0
  636. package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/FileDownloadRuntimeProvider.ts +110 -0
  637. package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/RuntimeMessageBridge.ts +82 -0
  638. package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/RuntimeMessageRouter.ts +216 -0
  639. package/pi.dev-src/pi-mono/web-ui/src/components/sandbox/SandboxRuntimeProvider.ts +52 -0
  640. package/pi.dev-src/pi-mono/web-ui/src/dialogs/ApiKeyPromptDialog.ts +75 -0
  641. package/pi.dev-src/pi-mono/web-ui/src/dialogs/AttachmentOverlay.ts +636 -0
  642. package/pi.dev-src/pi-mono/web-ui/src/dialogs/CustomProviderDialog.ts +274 -0
  643. package/pi.dev-src/pi-mono/web-ui/src/dialogs/ModelSelector.ts +370 -0
  644. package/pi.dev-src/pi-mono/web-ui/src/dialogs/PersistentStorageDialog.ts +144 -0
  645. package/pi.dev-src/pi-mono/web-ui/src/dialogs/ProvidersModelsTab.ts +212 -0
  646. package/pi.dev-src/pi-mono/web-ui/src/dialogs/SessionListDialog.ts +150 -0
  647. package/pi.dev-src/pi-mono/web-ui/src/dialogs/SettingsDialog.ts +218 -0
  648. package/pi.dev-src/pi-mono/web-ui/src/index.ts +120 -0
  649. package/pi.dev-src/pi-mono/web-ui/src/prompts/prompts.ts +282 -0
  650. package/pi.dev-src/pi-mono/web-ui/src/storage/app-storage.ts +60 -0
  651. package/pi.dev-src/pi-mono/web-ui/src/storage/backends/indexeddb-storage-backend.ts +193 -0
  652. package/pi.dev-src/pi-mono/web-ui/src/storage/store.ts +33 -0
  653. package/pi.dev-src/pi-mono/web-ui/src/storage/stores/custom-providers-store.ts +62 -0
  654. package/pi.dev-src/pi-mono/web-ui/src/storage/stores/provider-keys-store.ts +33 -0
  655. package/pi.dev-src/pi-mono/web-ui/src/storage/stores/sessions-store.ts +136 -0
  656. package/pi.dev-src/pi-mono/web-ui/src/storage/stores/settings-store.ts +34 -0
  657. package/pi.dev-src/pi-mono/web-ui/src/storage/types.ts +206 -0
  658. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/ArtifactElement.ts +14 -0
  659. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/ArtifactPill.ts +26 -0
  660. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/Console.ts +93 -0
  661. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/DocxArtifact.ts +213 -0
  662. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/ExcelArtifact.ts +231 -0
  663. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/GenericArtifact.ts +117 -0
  664. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/HtmlArtifact.ts +195 -0
  665. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/ImageArtifact.ts +116 -0
  666. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/MarkdownArtifact.ts +82 -0
  667. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/PdfArtifact.ts +201 -0
  668. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/SvgArtifact.ts +119 -0
  669. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/TextArtifact.ts +148 -0
  670. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/artifacts-tool-renderer.ts +310 -0
  671. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/artifacts.ts +713 -0
  672. package/pi.dev-src/pi-mono/web-ui/src/tools/artifacts/index.ts +7 -0
  673. package/pi.dev-src/pi-mono/web-ui/src/tools/extract-document.ts +275 -0
  674. package/pi.dev-src/pi-mono/web-ui/src/tools/index.ts +46 -0
  675. package/pi.dev-src/pi-mono/web-ui/src/tools/javascript-repl.ts +293 -0
  676. package/pi.dev-src/pi-mono/web-ui/src/tools/renderer-registry.ts +130 -0
  677. package/pi.dev-src/pi-mono/web-ui/src/tools/renderers/BashRenderer.ts +52 -0
  678. package/pi.dev-src/pi-mono/web-ui/src/tools/renderers/CalculateRenderer.ts +58 -0
  679. package/pi.dev-src/pi-mono/web-ui/src/tools/renderers/DefaultRenderer.ts +103 -0
  680. package/pi.dev-src/pi-mono/web-ui/src/tools/renderers/GetCurrentTimeRenderer.ts +92 -0
  681. package/pi.dev-src/pi-mono/web-ui/src/tools/types.ts +15 -0
  682. package/pi.dev-src/pi-mono/web-ui/src/utils/attachment-utils.ts +472 -0
  683. package/pi.dev-src/pi-mono/web-ui/src/utils/auth-token.ts +22 -0
  684. package/pi.dev-src/pi-mono/web-ui/src/utils/format.ts +42 -0
  685. package/pi.dev-src/pi-mono/web-ui/src/utils/i18n.ts +653 -0
  686. package/pi.dev-src/pi-mono/web-ui/src/utils/model-discovery.ts +277 -0
  687. package/pi.dev-src/pi-mono/web-ui/src/utils/proxy-utils.ts +139 -0
  688. package/pi.dev-src/pi-mono/web-ui/src/utils/test-sessions.ts +2357 -0
  689. package/pi.dev-src/pi-mono/web-ui/tsconfig.json +7 -0
  690. package/scripts/lib/extension-debug-harness.ts +3 -10
  691. package/scripts/lib/recording-extension-api.ts +71 -2
  692. package/scripts/pi-usereq-debug.sh +1 -1
  693. package/scripts/tool-args-to-params.ts +4 -15
  694. package/src/cli.ts +24 -68
  695. package/src/core/agent-tool-json.ts +53 -239
  696. package/src/core/compress-payload.ts +4 -74
  697. package/src/core/compress.ts +26 -15
  698. package/src/core/config.ts +546 -65
  699. package/src/core/debug-runtime.ts +542 -0
  700. package/src/core/extension-status.ts +324 -202
  701. package/src/core/find-constructs.ts +3 -3
  702. package/src/core/find-payload.ts +26 -132
  703. package/src/core/path-context.ts +346 -81
  704. package/src/core/pi-notify.ts +585 -315
  705. package/src/core/pi-usereq-tools.ts +57 -19
  706. package/src/core/prompt-command-catalog.ts +46 -0
  707. package/src/core/prompt-command-runtime.ts +1650 -0
  708. package/src/core/prompt-command-state.ts +211 -0
  709. package/src/core/prompts.ts +173 -41
  710. package/src/core/reference-payload.ts +5 -63
  711. package/src/core/resources.ts +61 -5
  712. package/src/core/settings-menu.ts +33 -7
  713. package/src/core/source-analyzer.ts +27 -7
  714. package/src/core/token-counter.ts +61 -79
  715. package/src/core/tool-runner.ts +38 -317
  716. package/src/index.ts +2629 -1220
  717. package/src/resources/images/favicon.svg +21 -0
  718. package/src/resources/images/pi.dev.png +0 -0
  719. package/src/resources/instructions/git_commit.md +16 -0
  720. package/src/resources/instructions/git_read-only.md +2 -0
  721. package/src/resources/prompts/analyze.md +12 -13
  722. package/src/resources/prompts/change.md +21 -59
  723. package/src/resources/prompts/check.md +14 -16
  724. package/src/resources/prompts/cover.md +21 -59
  725. package/src/resources/prompts/create.md +5 -4
  726. package/src/resources/prompts/fix.md +20 -58
  727. package/src/resources/prompts/flowchart.md +14 -49
  728. package/src/resources/prompts/implement.md +14 -50
  729. package/src/resources/prompts/new.md +20 -58
  730. package/src/resources/prompts/readme.md +14 -50
  731. package/src/resources/prompts/recreate.md +14 -45
  732. package/src/resources/prompts/refactor.md +20 -58
  733. package/src/resources/prompts/references.md +7 -43
  734. package/src/resources/prompts/renumber.md +8 -39
  735. package/src/resources/prompts/workflow.md +14 -50
  736. package/src/resources/prompts/write.md +5 -4
  737. package/tests/attended-results-scenarios.ts +30 -136
  738. package/tests/cli-command-option-parity.test.ts +148 -192
  739. package/tests/debug-extension-harness.test.ts +74 -73
  740. package/tests/extension-registration.test.ts +3626 -685
  741. package/tests/fixtures_attended_results/project/compress-line-numbers.json +1 -1
  742. package/tests/fixtures_attended_results/project/compress.json +1 -1
  743. package/tests/fixtures_attended_results/project/find-line-numbers.json +1 -1
  744. package/tests/fixtures_attended_results/project/find.json +1 -1
  745. package/tests/fixtures_attended_results/project/references.json +2 -2
  746. package/tests/fixtures_attended_results/standalone/files-compress/fixture_go.go.json +1 -1
  747. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_go.go.json +1 -1
  748. package/tests/fixtures_attended_results/standalone/files-find/fixture_go.go.json +1 -1
  749. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_go.go.json +1 -1
  750. package/tests/fixtures_attended_results/standalone/files-references/fixture_c.c.json +1 -1
  751. package/tests/fixtures_attended_results/standalone/files-references/fixture_cpp.cpp.json +1 -1
  752. package/tests/fixtures_attended_results/standalone/files-references/fixture_csharp.cs.json +1 -1
  753. package/tests/fixtures_attended_results/standalone/files-references/fixture_elixir.ex.json +1 -1
  754. package/tests/fixtures_attended_results/standalone/files-references/fixture_go.go.json +1 -1
  755. package/tests/fixtures_attended_results/standalone/files-references/fixture_haskell.hs.json +1 -1
  756. package/tests/fixtures_attended_results/standalone/files-references/fixture_java.java.json +1 -1
  757. package/tests/fixtures_attended_results/standalone/files-references/fixture_javascript.js.json +1 -1
  758. package/tests/fixtures_attended_results/standalone/files-references/fixture_kotlin.kt.json +1 -1
  759. package/tests/fixtures_attended_results/standalone/files-references/fixture_lua.lua.json +1 -1
  760. package/tests/fixtures_attended_results/standalone/files-references/fixture_perl.pl.json +1 -1
  761. package/tests/fixtures_attended_results/standalone/files-references/fixture_php.php.json +1 -1
  762. package/tests/fixtures_attended_results/standalone/files-references/fixture_python.py.json +1 -1
  763. package/tests/fixtures_attended_results/standalone/files-references/fixture_ruby.rb.json +1 -1
  764. package/tests/fixtures_attended_results/standalone/files-references/fixture_rust.rs.json +1 -1
  765. package/tests/fixtures_attended_results/standalone/files-references/fixture_scala.scala.json +1 -1
  766. package/tests/fixtures_attended_results/standalone/files-references/fixture_shell.sh.json +1 -1
  767. package/tests/fixtures_attended_results/standalone/files-references/fixture_swift.swift.json +1 -1
  768. package/tests/fixtures_attended_results/standalone/files-references/fixture_typescript.ts.json +1 -1
  769. package/tests/fixtures_attended_results/standalone/files-references/fixture_zig.zig.json +1 -1
  770. package/tests/helpers.ts +24 -15
  771. package/tests/oracle-project.test.ts +29 -30
  772. package/tests/oracle-standalone.test.ts +27 -1
  773. package/tests/prompt-rendering.test.ts +40 -9
  774. 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_go.go\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_go.go\"\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\": 43,\n \"total_import_count\": 5,\n \"total_comment_count\": 113,\n \"total_standalone_comment_count\": 53,\n \"total_doxygen_field_count\": 35,\n \"symbol_kind_counts\": {\n \"CONSTANT\": 5,\n \"FUNCTION\": 13,\n \"INTERFACE\": 5,\n \"METHOD\": 5,\n \"MODULE\": 5,\n \"STRUCT\": 5,\n \"TYPE_ALIAS\": 5\n }\n },\n \"repository\": {\n \"root_directory_path\": \"<ROOT>\",\n \"source_directory_paths\": [],\n \"file_count\": 1,\n \"file_canonical_paths\": [\n \"tests/fixtures/fixture_go.go\"\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_go.go\",\n \"relative_path\": \"tests/fixtures/fixture_go.go\",\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\": 341,\n \"line_range\": [\n 1,\n 341\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_go.go\",\n \"canonical_path\": \"tests/fixtures/fixture_go.go\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_go.go\",\n \"file_name\": \"fixture_go.go\",\n \"file_extension\": \".go\",\n \"language_id\": \"go\",\n \"language_name\": \"Go\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 5,\n \"symbol_count\": 43,\n \"comment_count\": 113,\n \"standalone_comment_count\": 53,\n \"doxygen_field_count\": 35,\n \"file_description_text\": \"@file fixture_go.go\",\n \"imports\": [\n {\n \"start_line_number\": 14,\n \"end_line_number\": 14,\n \"line_range\": [\n 14,\n 14\n ],\n \"import_name\": \"(\",\n \"statement_text\": \"import (\"\n },\n {\n \"start_line_number\": 289,\n \"end_line_number\": 289,\n \"line_range\": [\n 289,\n 289\n ],\n \"import_name\": \"\\\"os\\\"\",\n \"statement_text\": \"import \\\"os\\\"\"\n },\n {\n \"start_line_number\": 290,\n \"end_line_number\": 290,\n \"line_range\": [\n 290,\n 290\n ],\n \"import_name\": \"\\\"time\\\"\",\n \"statement_text\": \"import \\\"time\\\"\"\n },\n {\n \"start_line_number\": 291,\n \"end_line_number\": 291,\n \"line_range\": [\n 291,\n 291\n ],\n \"import_name\": \"\\\"strings\\\"\",\n \"statement_text\": \"import \\\"strings\\\"\"\n },\n {\n \"start_line_number\": 292,\n \"end_line_number\": 292,\n \"line_range\": [\n 292,\n 292\n ],\n \"import_name\": \"\\\"bytes\\\"\",\n \"statement_text\": \"import \\\"bytes\\\"\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 12,\n \"end_line_number\": 48,\n \"line_range\": [\n 12,\n 48\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"main\",\n \"qualified_name\": \"main\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"package main\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [\n \"MaxSize\",\n \"globalVar\"\n ],\n \"child_qualified_names\": [\n \"main.MaxSize\",\n \"main.globalVar\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Package main is the entry point for the application.\",\n \"attached_comment_lines\": [\n \"Package main is the entry point for the application.\",\n \"It demonstrates Go-specific constructs including generics,\",\n \"goroutines, channels, embedded structs, and type switches.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"text\": \"── Constants and variables ────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Constants and variables ────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 23,\n \"end_line_number\": 23,\n \"line_range\": [\n 23,\n 23\n ],\n \"text\": \"MaxSize defines the upper bound for buffer allocation.\",\n \"text_lines\": [\n \"MaxSize defines the upper bound for buffer allocation.\"\n ]\n },\n {\n \"start_line_number\": 26,\n \"end_line_number\": 26,\n \"line_range\": [\n 26,\n 26\n ],\n \"text\": \"globalVar is a package-level mutable counter.\",\n \"text_lines\": [\n \"globalVar is a package-level mutable counter.\"\n ]\n },\n {\n \"start_line_number\": 29,\n \"end_line_number\": 29,\n \"line_range\": [\n 29,\n 29\n ],\n \"text\": \"Iota-based enum-like constants for log levels.\",\n \"text_lines\": [\n \"Iota-based enum-like constants for log levels.\"\n ]\n },\n {\n \"start_line_number\": 31,\n \"end_line_number\": 31,\n \"line_range\": [\n 31,\n 31\n ],\n \"text\": \"LogDebug is the most verbose logging level.\",\n \"text_lines\": [\n \"LogDebug is the most verbose logging level.\"\n ]\n },\n {\n \"start_line_number\": 33,\n \"end_line_number\": 33,\n \"line_range\": [\n 33,\n 33\n ],\n \"text\": \"LogInfo is the standard informational level.\",\n \"text_lines\": [\n \"LogInfo is the standard informational level.\"\n ]\n },\n {\n \"start_line_number\": 35,\n \"end_line_number\": 35,\n \"line_range\": [\n 35,\n 35\n ],\n \"text\": \"LogError logs only error conditions.\",\n \"text_lines\": [\n \"LogError logs only error conditions.\"\n ]\n },\n {\n \"start_line_number\": 39,\n \"end_line_number\": 39,\n \"line_range\": [\n 39,\n 39\n ],\n \"text\": \"── Struct definitions ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct definitions ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 41,\n \"end_line_number\": 41,\n \"line_range\": [\n 41,\n 41\n ],\n \"text\": \"Server represents an HTTP server with host and port configuration.\",\n \"text_lines\": [\n \"Server represents an HTTP server with host and port configuration.\"\n ]\n },\n {\n \"start_line_number\": 42,\n \"end_line_number\": 42,\n \"line_range\": [\n 42,\n 42\n ],\n \"text\": \"It embeds sync.Mutex for concurrent access protection.\",\n \"text_lines\": [\n \"It embeds sync.Mutex for concurrent access protection.\"\n ]\n },\n {\n \"start_line_number\": 44,\n \"end_line_number\": 44,\n \"line_range\": [\n 44,\n 44\n ],\n \"text\": \"Port number the server listens on.\",\n \"text_lines\": [\n \"Port number the server listens on.\"\n ]\n },\n {\n \"start_line_number\": 45,\n \"end_line_number\": 45,\n \"line_range\": [\n 45,\n 45\n ],\n \"text\": \"Hostname or IP address to bind to.\",\n \"text_lines\": [\n \"Hostname or IP address to bind to.\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"Embedded mutex for thread-safe operations.\",\n \"text_lines\": [\n \"Embedded mutex for thread-safe operations.\"\n ]\n },\n {\n \"start_line_number\": 47,\n \"end_line_number\": 47,\n \"line_range\": [\n 47,\n 47\n ],\n \"text\": \"Route handler registry.\",\n \"text_lines\": [\n \"Route handler registry.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 24,\n \"end_line_number\": 24,\n \"line_range\": [\n 24,\n 24\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"MaxSize\",\n \"qualified_name\": \"main.MaxSize\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"const MaxSize = 100\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"main\",\n \"parent_qualified_name\": \"main\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"── Constants and variables ────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Constants and variables ────────────────────────────────────────────\",\n \"MaxSize defines the upper bound for buffer allocation.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 27,\n \"end_line_number\": 27,\n \"line_range\": [\n 27,\n 27\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"globalVar\",\n \"qualified_name\": \"main.globalVar\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"var globalVar = 0\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"main\",\n \"parent_qualified_name\": \"main\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"globalVar is a package-level mutable counter.\",\n \"attached_comment_lines\": [\n \"globalVar is a package-level mutable counter.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 43,\n \"end_line_number\": 48,\n \"line_range\": [\n 43,\n 48\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"Server\",\n \"qualified_name\": \"Server\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"type Server struct\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Server represents an HTTP server with host and port configuration.\",\n \"attached_comment_lines\": [\n \"Server represents an HTTP server with host and port configuration.\",\n \"It embeds sync.Mutex for concurrent access protection.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 44,\n \"end_line_number\": 44,\n \"line_range\": [\n 44,\n 44\n ],\n \"text\": \"Port number the server listens on.\",\n \"text_lines\": [\n \"Port number the server listens on.\"\n ]\n },\n {\n \"start_line_number\": 45,\n \"end_line_number\": 45,\n \"line_range\": [\n 45,\n 45\n ],\n \"text\": \"Hostname or IP address to bind to.\",\n \"text_lines\": [\n \"Hostname or IP address to bind to.\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"Embedded mutex for thread-safe operations.\",\n \"text_lines\": [\n \"Embedded mutex for thread-safe operations.\"\n ]\n },\n {\n \"start_line_number\": 47,\n \"end_line_number\": 47,\n \"line_range\": [\n 47,\n 47\n ],\n \"text\": \"Route handler registry.\",\n \"text_lines\": [\n \"Route handler registry.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 51,\n \"end_line_number\": 51,\n \"line_range\": [\n 51,\n 51\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"HandlerFunc\",\n \"qualified_name\": \"HandlerFunc\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type HandlerFunc func(ctx context.Context, req []byte) ([]byte, error)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"HandlerFunc defines the signature for HTTP request handlers.\",\n \"attached_comment_lines\": [\n \"HandlerFunc defines the signature for HTTP request handlers.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 54,\n \"end_line_number\": 58,\n \"line_range\": [\n 54,\n 58\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"Address\",\n \"qualified_name\": \"Address\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"type Address struct\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Embedded struct demonstrating composition over inheritance.\",\n \"attached_comment_lines\": [\n \"Embedded struct demonstrating composition over inheritance.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 55,\n \"end_line_number\": 55,\n \"line_range\": [\n 55,\n 55\n ],\n \"text\": \"Street name and number.\",\n \"text_lines\": [\n \"Street name and number.\"\n ]\n },\n {\n \"start_line_number\": 56,\n \"end_line_number\": 56,\n \"line_range\": [\n 56,\n 56\n ],\n \"text\": \"City name.\",\n \"text_lines\": [\n \"City name.\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"Postal/ZIP code.\",\n \"text_lines\": [\n \"Postal/ZIP code.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 61,\n \"end_line_number\": 66,\n \"line_range\": [\n 61,\n 66\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"Employee\",\n \"qualified_name\": \"Employee\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"type Employee struct\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Employee composes Person-like fields with an embedded Address.\",\n \"attached_comment_lines\": [\n \"Employee composes Person-like fields with an embedded Address.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 62,\n \"end_line_number\": 62,\n \"line_range\": [\n 62,\n 62\n ],\n \"text\": \"Full name of the employee.\",\n \"text_lines\": [\n \"Full name of the employee.\"\n ]\n },\n {\n \"start_line_number\": 63,\n \"end_line_number\": 63,\n \"line_range\": [\n 63,\n 63\n ],\n \"text\": \"Age in years.\",\n \"text_lines\": [\n \"Age in years.\"\n ]\n },\n {\n \"start_line_number\": 64,\n \"end_line_number\": 64,\n \"line_range\": [\n 64,\n 64\n ],\n \"text\": \"Embedded address (promoted fields).\",\n \"text_lines\": [\n \"Embedded address (promoted fields).\"\n ]\n },\n {\n \"start_line_number\": 65,\n \"end_line_number\": 65,\n \"line_range\": [\n 65,\n 65\n ],\n \"text\": \"Optional reference to reporting manager.\",\n \"text_lines\": [\n \"Optional reference to reporting manager.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 71,\n \"end_line_number\": 74,\n \"line_range\": [\n 71,\n 74\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"Handler\",\n \"qualified_name\": \"Handler\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"type Handler interface\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Interface definitions ──────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Interface definitions ──────────────────────────────────────────────\",\n \"Handler defines the interface for request processing components.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 72,\n \"end_line_number\": 72,\n \"line_range\": [\n 72,\n 72\n ],\n \"text\": \"Handle processes a request and returns a response.\",\n \"text_lines\": [\n \"Handle processes a request and returns a response.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 77,\n \"end_line_number\": 81,\n \"line_range\": [\n 77,\n 81\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"ReadWriteCloser\",\n \"qualified_name\": \"ReadWriteCloser\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"type ReadWriteCloser interface\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"ReadWriteCloser composes standard io interfaces.\",\n \"attached_comment_lines\": [\n \"ReadWriteCloser composes standard io interfaces.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 86,\n \"end_line_number\": 86,\n \"line_range\": [\n 86,\n 86\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"MyInt\",\n \"qualified_name\": \"MyInt\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type MyInt int\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Type aliases and definitions ───────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Type aliases and definitions ───────────────────────────────────────\",\n \"MyInt is a custom integer type supporting additional methods.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 91,\n \"line_range\": [\n 89,\n 91\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"String\",\n \"qualified_name\": \"String\",\n \"symbol_kind\": \"METHOD\",\n \"type_label\": \"METHOD\",\n \"signature_text\": \"func (m MyInt) String() string\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"String returns the string representation of MyInt.\",\n \"attached_comment_lines\": [\n \"String returns the string representation of MyInt.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 90,\n \"text\": \"return fmt.Sprintf(\\\"MyInt(%d)\\\", int(m))\"\n }\n ]\n },\n {\n \"start_line_number\": 104,\n \"end_line_number\": 106,\n \"line_range\": [\n 104,\n 106\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"Ordered\",\n \"qualified_name\": \"Ordered\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"type Ordered interface\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Ordered constrains types that support comparison operators.\",\n \"attached_comment_lines\": [\n \"Ordered constrains types that support comparison operators.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 111,\n \"end_line_number\": 113,\n \"line_range\": [\n 111,\n 113\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"main\",\n \"qualified_name\": \"main\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func main()\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [\n \"MaxSize\",\n \"globalVar\"\n ],\n \"child_qualified_names\": [\n \"main.MaxSize\",\n \"main.globalVar\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Functions ──────────────────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Functions ──────────────────────────────────────────────────────────\",\n \"main is the application entry point.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 116,\n \"end_line_number\": 119,\n \"line_range\": [\n 116,\n 119\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"init\",\n \"qualified_name\": \"init\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func init()\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"init runs before main for package-level initialization.\",\n \"attached_comment_lines\": [\n \"init runs before main for package-level initialization.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 117,\n \"end_line_number\": 117,\n \"line_range\": [\n 117,\n 117\n ],\n \"text\": \"Package initialization — set default global state\",\n \"text_lines\": [\n \"Package initialization — set default global state\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 123,\n \"end_line_number\": 132,\n \"line_range\": [\n 123,\n 132\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"Start\",\n \"qualified_name\": \"Start\",\n \"symbol_kind\": \"METHOD\",\n \"type_label\": \"METHOD\",\n \"signature_text\": \"func (s *Server) Start() error\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Start begins listening on the configured host and port.\",\n \"attached_comment_lines\": [\n \"Start begins listening on the configured host and port.\",\n \"@receiver s Pointer to Server instance.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 126,\n \"end_line_number\": 126,\n \"line_range\": [\n 126,\n 126\n ],\n \"text\": \"Validate port before binding\",\n \"text_lines\": [\n \"Validate port before binding\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 128,\n \"text\": \"return fmt.Errorf(\\\"invalid port: %d\\\", s.Port)\"\n },\n {\n \"line_number\": 131,\n \"text\": \"return nil\"\n }\n ]\n },\n {\n \"start_line_number\": 138,\n \"end_line_number\": 143,\n \"line_range\": [\n 138,\n 143\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"Register\",\n \"qualified_name\": \"Register\",\n \"symbol_kind\": \"METHOD\",\n \"type_label\": \"METHOD\",\n \"signature_text\": \"func (s *Server) Register(path string, handler HandlerFunc)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@receiver s Pointer to Server.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"path\",\n \"description\": \"The URL path to register.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"handler\",\n \"description\": \"The function to invoke for this path.\"\n }\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 180,\n \"end_line_number\": 185,\n \"line_range\": [\n 180,\n 185\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"Divide\",\n \"qualified_name\": \"Divide\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func Divide(a, b int) (int, int, error)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param a Dividend.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"a\",\n \"description\": \"Dividend.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"b\",\n \"description\": \"Divisor; must not be zero.\"\n }\n ],\n \"returns\": [\n \"Quotient and remainder, or error if b is zero.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 182,\n \"text\": \"return 0, 0, fmt.Errorf(\\\"division by zero\\\")\"\n },\n {\n \"line_number\": 184,\n \"text\": \"return a / b, a % b, nil\"\n }\n ]\n },\n {\n \"start_line_number\": 192,\n \"end_line_number\": 200,\n \"line_range\": [\n 192,\n 200\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"ParseConfig\",\n \"qualified_name\": \"ParseConfig\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func ParseConfig(input string) (host string, port int, err error)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"ParseConfig extracts host and port from a config string.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"input\",\n \"description\": \"Configuration string in \\\"host:port\\\" format.\"\n }\n ],\n \"returns\": [\n \"Named host and port values, or error.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 193,\n \"end_line_number\": 193,\n \"line_range\": [\n 193,\n 193\n ],\n \"text\": \"Named returns allow bare return in simple cases\",\n \"text_lines\": [\n \"Named returns allow bare return in simple cases\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 197,\n \"text\": \"return\"\n },\n {\n \"line_number\": 199,\n \"text\": \"return\"\n }\n ]\n },\n {\n \"start_line_number\": 206,\n \"end_line_number\": 213,\n \"line_range\": [\n 206,\n 213\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"Counter\",\n \"qualified_name\": \"Counter\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func Counter() func() int\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Counter returns a closure that increments and returns a count.\",\n \"doxygen\": {\n \"returns\": [\n \"Closure yielding successive integer counts.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 209,\n \"end_line_number\": 209,\n \"line_range\": [\n 209,\n 209\n ],\n \"text\": \"Capture count from enclosing scope\",\n \"text_lines\": [\n \"Capture count from enclosing scope\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 208,\n \"text\": \"return func() int {\"\n },\n {\n \"line_number\": 211,\n \"text\": \"return count\"\n }\n ]\n },\n {\n \"start_line_number\": 221,\n \"end_line_number\": 243,\n \"line_range\": [\n 221,\n 243\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"FanOut\",\n \"qualified_name\": \"FanOut\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func FanOut(items []string, workers int) <-chan string\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param items Slice of strings to process.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"items\",\n \"description\": \"Slice of strings to process.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"workers\",\n \"description\": \"Number of concurrent worker goroutines.\"\n }\n ],\n \"returns\": [\n \"Channel delivering processed results.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 229,\n \"end_line_number\": 229,\n \"line_range\": [\n 229,\n 229\n ],\n \"text\": \"Each worker processes items from the slice\",\n \"text_lines\": [\n \"Each worker processes items from the slice\"\n ]\n },\n {\n \"start_line_number\": 236,\n \"end_line_number\": 236,\n \"line_range\": [\n 236,\n 236\n ],\n \"text\": \"Close channel when all workers finish\",\n \"text_lines\": [\n \"Close channel when all workers finish\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 242,\n \"text\": \"return results\"\n }\n ]\n },\n {\n \"start_line_number\": 223,\n \"end_line_number\": 223,\n \"line_range\": [\n 223,\n 223\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"wg\",\n \"qualified_name\": \"wg\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"var wg sync.WaitGroup\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 250,\n \"end_line_number\": 266,\n \"line_range\": [\n 250,\n 266\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"Describe\",\n \"qualified_name\": \"Describe\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func Describe(v interface{}) string\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Describe returns a description string for any value using type switch.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"v\",\n \"description\": \"Any value to describe.\"\n }\n ],\n \"returns\": [\n \"Human-readable type description.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 253,\n \"text\": \"return fmt.Sprintf(\\\"int: %d\\\", val)\"\n },\n {\n \"line_number\": 255,\n \"text\": \"return fmt.Sprintf(\\\"string: %q\\\", val)\"\n },\n {\n \"line_number\": 258,\n \"text\": \"return \\\"bool: true\\\"\"\n },\n {\n \"line_number\": 260,\n \"text\": \"return \\\"bool: false\\\"\"\n },\n {\n \"line_number\": 262,\n \"text\": \"return \\\"nil\\\"\"\n },\n {\n \"line_number\": 264,\n \"text\": \"return fmt.Sprintf(\\\"unknown: %T\\\", val)\"\n }\n ]\n },\n {\n \"start_line_number\": 273,\n \"end_line_number\": 282,\n \"line_range\": [\n 273,\n 282\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"SafeExecute\",\n \"qualified_name\": \"SafeExecute\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func SafeExecute(fn func()) (err error)\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"SafeExecute runs a function with panic recovery.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"fn\",\n \"description\": \"The function to execute safely.\"\n }\n ],\n \"returns\": [\n \"Error if fn panicked, nil otherwise.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 276,\n \"end_line_number\": 276,\n \"line_range\": [\n 276,\n 276\n ],\n \"text\": \"Convert panic to error\",\n \"text_lines\": [\n \"Convert panic to error\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 281,\n \"text\": \"return nil\"\n }\n ]\n },\n {\n \"start_line_number\": 285,\n \"end_line_number\": 293,\n \"line_range\": [\n 285,\n 293\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"utilx\",\n \"qualified_name\": \"utilx\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"package utilx\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"coverage extension block\",\n \"attached_comment_lines\": [\n \"coverage extension block\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 286,\n \"end_line_number\": 293,\n \"line_range\": [\n 286,\n 293\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"configx\",\n \"qualified_name\": \"configx\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"package configx\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 287,\n \"end_line_number\": 293,\n \"line_range\": [\n 287,\n 293\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"jobsx\",\n \"qualified_name\": \"jobsx\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"package jobsx\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 288,\n \"end_line_number\": 293,\n \"line_range\": [\n 288,\n 293\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"metricx\",\n \"qualified_name\": \"metricx\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"package metricx\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [\n \"Stop\"\n ],\n \"child_qualified_names\": [\n \"metricx.Stop\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 293,\n \"end_line_number\": 293,\n \"line_range\": [\n 293,\n 293\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"Stop\",\n \"qualified_name\": \"metricx.Stop\",\n \"symbol_kind\": \"METHOD\",\n \"type_label\": \"METHOD\",\n \"signature_text\": \"func (s *Server) Stop() {}\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"metricx\",\n \"parent_qualified_name\": \"metricx\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 294,\n \"end_line_number\": 294,\n \"line_range\": [\n 294,\n 294\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"Reset\",\n \"qualified_name\": \"Reset\",\n \"symbol_kind\": \"METHOD\",\n \"type_label\": \"METHOD\",\n \"signature_text\": \"func (s *Server) Reset() {}\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 295,\n \"end_line_number\": 295,\n \"line_range\": [\n 295,\n 295\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"Session\",\n \"qualified_name\": \"Session\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"type Session struct { Id string }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 296,\n \"end_line_number\": 296,\n \"line_range\": [\n 296,\n 296\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"Bucket\",\n \"qualified_name\": \"Bucket\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"type Bucket struct { Name string }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 297,\n \"end_line_number\": 297,\n \"line_range\": [\n 297,\n 297\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"Closer\",\n \"qualified_name\": \"Closer\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"type Closer interface { Close() error }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 298,\n \"end_line_number\": 298,\n \"line_range\": [\n 298,\n 298\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"Starter\",\n \"qualified_name\": \"Starter\",\n \"symbol_kind\": \"INTERFACE\",\n \"type_label\": \"INTERFACE\",\n \"signature_text\": \"type Starter interface { Start() error }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 299,\n \"end_line_number\": 299,\n \"line_range\": [\n 299,\n 299\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"UserAlias\",\n \"qualified_name\": \"UserAlias\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type UserAlias string\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 300,\n \"end_line_number\": 300,\n \"line_range\": [\n 300,\n 300\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"Amount\",\n \"qualified_name\": \"Amount\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type Amount int\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 301,\n \"end_line_number\": 301,\n \"line_range\": [\n 301,\n 301\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"Resolver\",\n \"qualified_name\": \"Resolver\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type Resolver func(string) error\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 302,\n \"end_line_number\": 302,\n \"line_range\": [\n 302,\n 302\n ],\n \"declaration_order_index\": 36,\n \"symbol_name\": \"RetryCount\",\n \"qualified_name\": \"RetryCount\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"const RetryCount = 3\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 303,\n \"end_line_number\": 303,\n \"line_range\": [\n 303,\n 303\n ],\n \"declaration_order_index\": 37,\n \"symbol_name\": \"LastError\",\n \"qualified_name\": \"LastError\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"var LastError error\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 311,\n \"end_line_number\": 311,\n \"line_range\": [\n 311,\n 311\n ],\n \"declaration_order_index\": 38,\n \"symbol_name\": \"reqCoverGo1\",\n \"qualified_name\": \"reqCoverGo1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func reqCoverGo1(value int) int { return value + 1 }\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 1.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 1.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 1.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 1.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 1.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 318,\n \"end_line_number\": 318,\n \"line_range\": [\n 318,\n 318\n ],\n \"declaration_order_index\": 39,\n \"symbol_name\": \"reqCoverGo2\",\n \"qualified_name\": \"reqCoverGo2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func reqCoverGo2(value int) int { return value + 2 }\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 2.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 2.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 2.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 2.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 2.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 325,\n \"end_line_number\": 325,\n \"line_range\": [\n 325,\n 325\n ],\n \"declaration_order_index\": 40,\n \"symbol_name\": \"reqCoverGo3\",\n \"qualified_name\": \"reqCoverGo3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func reqCoverGo3(value int) int { return value + 3 }\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 3.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 3.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 3.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 3.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 3.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 332,\n \"end_line_number\": 332,\n \"line_range\": [\n 332,\n 332\n ],\n \"declaration_order_index\": 41,\n \"symbol_name\": \"reqCoverGo4\",\n \"qualified_name\": \"reqCoverGo4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func reqCoverGo4(value int) int { return value + 4 }\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 4.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 4.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 4.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 4.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 4.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 339,\n \"end_line_number\": 339,\n \"line_range\": [\n 339,\n 339\n ],\n \"declaration_order_index\": 42,\n \"symbol_name\": \"reqCoverGo5\",\n \"qualified_name\": \"reqCoverGo5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"func reqCoverGo5(value int) int { return value + 5 }\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 5.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 5.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 5.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 5.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 5.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n }\n ],\n \"standalone_comments\": [\n {\n \"start_line_number\": 2,\n \"end_line_number\": 2,\n \"line_range\": [\n 2,\n 2\n ],\n \"text\": \"@brief Go language test fixture.\",\n \"text_lines\": [\n \"@brief Go language test fixture.\"\n ]\n },\n {\n \"start_line_number\": 3,\n \"end_line_number\": 3,\n \"line_range\": [\n 3,\n 3\n ],\n \"text\": \"@details Parser validation constructs.\",\n \"text_lines\": [\n \"@details Parser validation constructs.\"\n ]\n },\n {\n \"start_line_number\": 5,\n \"end_line_number\": 5,\n \"line_range\": [\n 5,\n 5\n ],\n \"text\": \"Single line comment\",\n \"text_lines\": [\n \"Single line comment\"\n ]\n },\n {\n \"start_line_number\": 6,\n \"end_line_number\": 7,\n \"line_range\": [\n 6,\n 7\n ],\n \"text\": \"Multi-line comment\",\n \"text_lines\": [\n \"Multi-line\",\n \"comment\"\n ]\n },\n {\n \"start_line_number\": 29,\n \"end_line_number\": 29,\n \"line_range\": [\n 29,\n 29\n ],\n \"text\": \"Iota-based enum-like constants for log levels.\",\n \"text_lines\": [\n \"Iota-based enum-like constants for log levels.\"\n ]\n },\n {\n \"start_line_number\": 31,\n \"end_line_number\": 31,\n \"line_range\": [\n 31,\n 31\n ],\n \"text\": \"LogDebug is the most verbose logging level.\",\n \"text_lines\": [\n \"LogDebug is the most verbose logging level.\"\n ]\n },\n {\n \"start_line_number\": 33,\n \"end_line_number\": 33,\n \"line_range\": [\n 33,\n 33\n ],\n \"text\": \"LogInfo is the standard informational level.\",\n \"text_lines\": [\n \"LogInfo is the standard informational level.\"\n ]\n },\n {\n \"start_line_number\": 35,\n \"end_line_number\": 35,\n \"line_range\": [\n 35,\n 35\n ],\n \"text\": \"LogError logs only error conditions.\",\n \"text_lines\": [\n \"LogError logs only error conditions.\"\n ]\n },\n {\n \"start_line_number\": 39,\n \"end_line_number\": 39,\n \"line_range\": [\n 39,\n 39\n ],\n \"text\": \"── Struct definitions ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct definitions ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 72,\n \"end_line_number\": 72,\n \"line_range\": [\n 72,\n 72\n ],\n \"text\": \"Handle processes a request and returns a response.\",\n \"text_lines\": [\n \"Handle processes a request and returns a response.\"\n ]\n },\n {\n \"start_line_number\": 93,\n \"end_line_number\": 93,\n \"line_range\": [\n 93,\n 93\n ],\n \"text\": \"── Generic types (Go 1.18+) ───────────────────────────────────────────\",\n \"text_lines\": [\n \"── Generic types (Go 1.18+) ───────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 95,\n \"end_line_number\": 95,\n \"line_range\": [\n 95,\n 95\n ],\n \"text\": \"Pair holds two values of potentially different types.\",\n \"text_lines\": [\n \"Pair holds two values of potentially different types.\"\n ]\n },\n {\n \"start_line_number\": 96,\n \"end_line_number\": 96,\n \"line_range\": [\n 96,\n 96\n ],\n \"text\": \"@tparam A The type of the first element.\",\n \"text_lines\": [\n \"@tparam A The type of the first element.\"\n ]\n },\n {\n \"start_line_number\": 97,\n \"end_line_number\": 97,\n \"line_range\": [\n 97,\n 97\n ],\n \"text\": \"@tparam B The type of the second element.\",\n \"text_lines\": [\n \"@tparam B The type of the second element.\"\n ]\n },\n {\n \"start_line_number\": 117,\n \"end_line_number\": 117,\n \"line_range\": [\n 117,\n 117\n ],\n \"text\": \"Package initialization — set default global state\",\n \"text_lines\": [\n \"Package initialization — set default global state\"\n ]\n },\n {\n \"start_line_number\": 126,\n \"end_line_number\": 126,\n \"line_range\": [\n 126,\n 126\n ],\n \"text\": \"Validate port before binding\",\n \"text_lines\": [\n \"Validate port before binding\"\n ]\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 134,\n \"line_range\": [\n 134,\n 134\n ],\n \"text\": \"Register adds a handler function for a specific route path.\",\n \"text_lines\": [\n \"Register adds a handler function for a specific route path.\"\n ]\n },\n {\n \"start_line_number\": 145,\n \"end_line_number\": 145,\n \"line_range\": [\n 145,\n 145\n ],\n \"text\": \"── Generic function ───────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Generic function ───────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 147,\n \"end_line_number\": 147,\n \"line_range\": [\n 147,\n 147\n ],\n \"text\": \"Max returns the larger of two ordered values.\",\n \"text_lines\": [\n \"Max returns the larger of two ordered values.\"\n ]\n },\n {\n \"start_line_number\": 148,\n \"end_line_number\": 148,\n \"line_range\": [\n 148,\n 148\n ],\n \"text\": \"@tparam T Type constrained to Ordered interface.\",\n \"text_lines\": [\n \"@tparam T Type constrained to Ordered interface.\"\n ]\n },\n {\n \"start_line_number\": 149,\n \"end_line_number\": 149,\n \"line_range\": [\n 149,\n 149\n ],\n \"text\": \"@param a First value.\",\n \"text_lines\": [\n \"@param a First value.\"\n ]\n },\n {\n \"start_line_number\": 150,\n \"end_line_number\": 150,\n \"line_range\": [\n 150,\n 150\n ],\n \"text\": \"@param b Second value.\",\n \"text_lines\": [\n \"@param b Second value.\"\n ]\n },\n {\n \"start_line_number\": 151,\n \"end_line_number\": 151,\n \"line_range\": [\n 151,\n 151\n ],\n \"text\": \"@return The greater of a and b.\",\n \"text_lines\": [\n \"@return The greater of a and b.\"\n ]\n },\n {\n \"start_line_number\": 159,\n \"end_line_number\": 159,\n \"line_range\": [\n 159,\n 159\n ],\n \"text\": \"Filter returns elements matching a predicate.\",\n \"text_lines\": [\n \"Filter returns elements matching a predicate.\"\n ]\n },\n {\n \"start_line_number\": 160,\n \"end_line_number\": 160,\n \"line_range\": [\n 160,\n 160\n ],\n \"text\": \"@tparam T Element type (any).\",\n \"text_lines\": [\n \"@tparam T Element type (any).\"\n ]\n },\n {\n \"start_line_number\": 161,\n \"end_line_number\": 161,\n \"line_range\": [\n 161,\n 161\n ],\n \"text\": \"@param items Slice of items to filter.\",\n \"text_lines\": [\n \"@param items Slice of items to filter.\"\n ]\n },\n {\n \"start_line_number\": 162,\n \"end_line_number\": 162,\n \"line_range\": [\n 162,\n 162\n ],\n \"text\": \"@param pred Predicate function returning true to keep element.\",\n \"text_lines\": [\n \"@param pred Predicate function returning true to keep element.\"\n ]\n },\n {\n \"start_line_number\": 163,\n \"end_line_number\": 163,\n \"line_range\": [\n 163,\n 163\n ],\n \"text\": \"@return Filtered slice.\",\n \"text_lines\": [\n \"@return Filtered slice.\"\n ]\n },\n {\n \"start_line_number\": 174,\n \"end_line_number\": 174,\n \"line_range\": [\n 174,\n 174\n ],\n \"text\": \"── Multiple return values ─────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Multiple return values ─────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 176,\n \"end_line_number\": 176,\n \"line_range\": [\n 176,\n 176\n ],\n \"text\": \"Divide performs safe integer division with error handling.\",\n \"text_lines\": [\n \"Divide performs safe integer division with error handling.\"\n ]\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"text\": \"── Named return values ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Named return values ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 193,\n \"end_line_number\": 193,\n \"line_range\": [\n 193,\n 193\n ],\n \"text\": \"Named returns allow bare return in simple cases\",\n \"text_lines\": [\n \"Named returns allow bare return in simple cases\"\n ]\n },\n {\n \"start_line_number\": 202,\n \"end_line_number\": 202,\n \"line_range\": [\n 202,\n 202\n ],\n \"text\": \"── Closure ────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Closure ────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 209,\n \"end_line_number\": 209,\n \"line_range\": [\n 209,\n 209\n ],\n \"text\": \"Capture count from enclosing scope\",\n \"text_lines\": [\n \"Capture count from enclosing scope\"\n ]\n },\n {\n \"start_line_number\": 215,\n \"end_line_number\": 215,\n \"line_range\": [\n 215,\n 215\n ],\n \"text\": \"── Goroutine and channels ─────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Goroutine and channels ─────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 217,\n \"end_line_number\": 217,\n \"line_range\": [\n 217,\n 217\n ],\n \"text\": \"FanOut distributes work across n goroutines via channels.\",\n \"text_lines\": [\n \"FanOut distributes work across n goroutines via channels.\"\n ]\n },\n {\n \"start_line_number\": 229,\n \"end_line_number\": 229,\n \"line_range\": [\n 229,\n 229\n ],\n \"text\": \"Each worker processes items from the slice\",\n \"text_lines\": [\n \"Each worker processes items from the slice\"\n ]\n },\n {\n \"start_line_number\": 236,\n \"end_line_number\": 236,\n \"line_range\": [\n 236,\n 236\n ],\n \"text\": \"Close channel when all workers finish\",\n \"text_lines\": [\n \"Close channel when all workers finish\"\n ]\n },\n {\n \"start_line_number\": 245,\n \"end_line_number\": 245,\n \"line_range\": [\n 245,\n 245\n ],\n \"text\": \"── Type switch ────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Type switch ────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 268,\n \"end_line_number\": 268,\n \"line_range\": [\n 268,\n 268\n ],\n \"text\": \"── Defer and panic recovery ───────────────────────────────────────────\",\n \"text_lines\": [\n \"── Defer and panic recovery ───────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 276,\n \"end_line_number\": 276,\n \"line_range\": [\n 276,\n 276\n ],\n \"text\": \"Convert panic to error\",\n \"text_lines\": [\n \"Convert panic to error\"\n ]\n },\n {\n \"start_line_number\": 305,\n \"end_line_number\": 305,\n \"line_range\": [\n 305,\n 305\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 306,\n \"end_line_number\": 306,\n \"line_range\": [\n 306,\n 306\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\": 307,\n \"end_line_number\": 307,\n \"line_range\": [\n 307,\n 307\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 313,\n \"end_line_number\": 313,\n \"line_range\": [\n 313,\n 313\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\": 314,\n \"end_line_number\": 314,\n \"line_range\": [\n 314,\n 314\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 320,\n \"end_line_number\": 320,\n \"line_range\": [\n 320,\n 320\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\": 321,\n \"end_line_number\": 321,\n \"line_range\": [\n 321,\n 321\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 327,\n \"end_line_number\": 327,\n \"line_range\": [\n 327,\n 327\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\": 328,\n \"end_line_number\": 328,\n \"line_range\": [\n 328,\n 328\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 334,\n \"end_line_number\": 334,\n \"line_range\": [\n 334,\n 334\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\": 335,\n \"end_line_number\": 335,\n \"line_range\": [\n 335,\n 335\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 341,\n \"end_line_number\": 341,\n \"line_range\": [\n 341,\n 341\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_go.go | Go | 341L | 43 symbols | 5 imports | 113 comments\n> Path: `tests/fixtures/fixture_go.go`\n\n## Imports\n```\nimport (\nimport \"os\"\nimport \"time\"\nimport \"strings\"\nimport \"bytes\"\n```\n\n## Definitions\n\n### mod `package main` `priv` (L12-48)\n- const `const MaxSize = 100` (L24)\n- const `var globalVar = 0` `priv` (L27)\n\n### struct `type Server struct` (L43-48)\n\n- type `type HandlerFunc func(ctx context.Context, req []byte) ([]byte, error)` (L51)\n### struct `type Address struct` (L54-58)\n\n### struct `type Employee struct` (L61-66)\n\n### iface `type Handler interface` (L71-74)\n\n### iface `type ReadWriteCloser interface` (L77-81)\n\n- type `type MyInt int` (L86)\n### method `func (m MyInt) String() string` (L89-91)\n\n### iface `type Ordered interface` (L104-106)\n\n### fn `func main()` `priv` (L111-113)\n\n### fn `func init()` `priv` (L116-119)\n\n### method `func (s *Server) Start() error` (L123-132)\n\n### method `func (s *Server) Register(path string, handler HandlerFunc)` (L138-143)\n- @param path The URL path to register.\n- @param handler The function to invoke for this path.\n\n### fn `func Divide(a, b int) (int, int, error)` (L180-185)\n- @param a Dividend.\n- @param b Divisor; must not be zero.\n- @return Quotient and remainder, or error if b is zero.\n\n### fn `func ParseConfig(input string) (host string, port int, err error)` (L192-200)\n- @param input Configuration string in \"host:port\" format.\n- @return Named host and port values, or error.\n\n### fn `func Counter() func() int` (L206-213)\n- @return Closure yielding successive integer counts.\n\n### fn `func FanOut(items []string, workers int) <-chan string` (L221-243)\n- @param items Slice of strings to process.\n- @param workers Number of concurrent worker goroutines.\n- @return Channel delivering processed results.\n\n- const `\tvar wg sync.WaitGroup` `priv` (L223)\n### fn `func Describe(v interface{}) string` (L250-266)\n- @param v Any value to describe.\n- @return Human-readable type description.\n\n### fn `func SafeExecute(fn func()) (err error)` (L273-282)\n- @param fn The function to execute safely.\n- @return Error if fn panicked, nil otherwise.\n\n### mod `package utilx` `priv` (L285-293)\n\n### mod `package configx` `priv` (L286-293)\n\n### mod `package jobsx` `priv` (L287-293)\n\n### mod `package metricx` `priv` (L288-293)\n- method `func (s *Server) Stop() {}` (L293)\n\n- method `func (s *Server) Reset() {}` (L294)\n- struct `type Session struct { Id string }` (L295)\n- struct `type Bucket struct { Name string }` (L296)\n- iface `type Closer interface { Close() error }` (L297)\n- iface `type Starter interface { Start() error }` (L298)\n- type `type UserAlias string` (L299)\n- type `type Amount int` (L300)\n- type `type Resolver func(string) error` (L301)\n- const `const RetryCount = 3` (L302)\n- const `var LastError error` (L303)\n- fn `func reqCoverGo1(value int) int { return value + 1 }` `priv` (L311)\n- @brief Coverage helper construct 1.\n- @details Provides deterministic fixture-level Doxygen coverage block 1.\n- @param value Input value for helper construct 1.\n- @return Output value for helper construct 1.\n- fn `func reqCoverGo2(value int) int { return value + 2 }` `priv` (L318)\n- @brief Coverage helper construct 2.\n- @details Provides deterministic fixture-level Doxygen coverage block 2.\n- @param value Input value for helper construct 2.\n- @return Output value for helper construct 2.\n- fn `func reqCoverGo3(value int) int { return value + 3 }` `priv` (L325)\n- @brief Coverage helper construct 3.\n- @details Provides deterministic fixture-level Doxygen coverage block 3.\n- @param value Input value for helper construct 3.\n- @return Output value for helper construct 3.\n- fn `func reqCoverGo4(value int) int { return value + 4 }` `priv` (L332)\n- @brief Coverage helper construct 4.\n- @details Provides deterministic fixture-level Doxygen coverage block 4.\n- @param value Input value for helper construct 4.\n- @return Output value for helper construct 4.\n- fn `func reqCoverGo5(value int) int { return value + 5 }` `priv` (L339)\n- @brief Coverage helper construct 5.\n- @details Provides deterministic fixture-level Doxygen coverage block 5.\n- @param value Input value for helper construct 5.\n- @return Output value for helper construct 5.\n## Symbol Index\n|Symbol|Kind|Vis|Lines|Sig|\n|---|---|---|---|---|\n|`main`|mod|priv|12-48||\n|`main.MaxSize`|const|pub|24||\n|`main.globalVar`|const|priv|27||\n|`Server`|struct|pub|43-48|type Server struct|\n|`HandlerFunc`|type|pub|51||\n|`Address`|struct|pub|54-58|type Address struct|\n|`Employee`|struct|pub|61-66|type Employee struct|\n|`Handler`|iface|pub|71-74|type Handler interface|\n|`ReadWriteCloser`|iface|pub|77-81|type ReadWriteCloser interface|\n|`MyInt`|type|pub|86||\n|`String`|method|pub|89-91|func (m MyInt) String() string|\n|`Ordered`|iface|pub|104-106|type Ordered interface|\n|`main`|fn|priv|111-113|func main()|\n|`init`|fn|priv|116-119|func init()|\n|`Start`|method|pub|123-132|func (s *Server) Start() error|\n|`Register`|method|pub|138-143|func (s *Server) Register(path string, handler HandlerFunc)|\n|`Divide`|fn|pub|180-185|func Divide(a, b int) (int, int, error)|\n|`ParseConfig`|fn|pub|192-200|func ParseConfig(input string) (host string, port int, er...|\n|`Counter`|fn|pub|206-213|func Counter() func() int|\n|`FanOut`|fn|pub|221-243|func FanOut(items []string, workers int) <-chan string|\n|`wg`|const|priv|223||\n|`Describe`|fn|pub|250-266|func Describe(v interface{}) string|\n|`SafeExecute`|fn|pub|273-282|func SafeExecute(fn func()) (err error)|\n|`utilx`|mod|priv|285-293||\n|`configx`|mod|priv|286-293||\n|`jobsx`|mod|priv|287-293||\n|`metricx`|mod|priv|288-293||\n|`metricx.Stop`|method|pub|293|func (s *Server) Stop() {}|\n|`Reset`|method|pub|294|func (s *Server) Reset() {}|\n|`Session`|struct|pub|295|type Session struct { Id string }|\n|`Bucket`|struct|pub|296|type Bucket struct { Name string }|\n|`Closer`|iface|pub|297|type Closer interface { Close() error }|\n|`Starter`|iface|pub|298|type Starter interface { Start() error }|\n|`UserAlias`|type|pub|299||\n|`Amount`|type|pub|300||\n|`Resolver`|type|pub|301||\n|`RetryCount`|const|pub|302||\n|`LastError`|const|pub|303||\n|`reqCoverGo1`|fn|priv|311|func reqCoverGo1(value int) int { return value + 1 }|\n|`reqCoverGo2`|fn|priv|318|func reqCoverGo2(value int) int { return value + 2 }|\n|`reqCoverGo3`|fn|priv|325|func reqCoverGo3(value int) int { return value + 3 }|\n|`reqCoverGo4`|fn|priv|332|func reqCoverGo4(value int) int { return value + 4 }|\n|`reqCoverGo5`|fn|priv|339|func reqCoverGo5(value int) int { return value + 5 }|\n\n",
4
4
  "stderr": ""
5
5
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "code": 0,
3
- "stdout": "{\n \"request\": {\n \"tool_name\": \"files-references\",\n \"scope\": \"explicit-files\",\n \"base_dir_path\": \"<ROOT>\",\n \"source_directory_count\": 0,\n \"source_directory_paths\": [],\n \"requested_file_count\": 1,\n \"requested_input_paths\": [\n \"tests/fixtures/fixture_haskell.hs\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_haskell.hs\"\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\": 36,\n \"total_import_count\": 5,\n \"total_comment_count\": 86,\n \"total_standalone_comment_count\": 31,\n \"total_doxygen_field_count\": 20,\n \"symbol_kind_counts\": {\n \"CLASS\": 5,\n \"FUNCTION\": 16,\n \"MODULE\": 5,\n \"STRUCT\": 5,\n \"TYPE_ALIAS\": 5\n }\n },\n \"repository\": {\n \"root_directory_path\": \"<ROOT>\",\n \"source_directory_paths\": [],\n \"file_count\": 1,\n \"file_canonical_paths\": [\n \"tests/fixtures/fixture_haskell.hs\"\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_haskell.hs\",\n \"relative_path\": \"tests/fixtures/fixture_haskell.hs\",\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\": 250,\n \"line_range\": [\n 1,\n 250\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_haskell.hs\",\n \"canonical_path\": \"tests/fixtures/fixture_haskell.hs\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_haskell.hs\",\n \"file_name\": \"fixture_haskell.hs\",\n \"file_extension\": \".hs\",\n \"language_id\": \"haskell\",\n \"language_name\": \"Haskell\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 5,\n \"symbol_count\": 36,\n \"comment_count\": 86,\n \"standalone_comment_count\": 31,\n \"doxygen_field_count\": 20,\n \"file_description_text\": \"@file fixture_haskell.hs\",\n \"imports\": [\n {\n \"start_line_number\": 22,\n \"end_line_number\": 22,\n \"line_range\": [\n 22,\n 22\n ],\n \"import_name\": \"Data.List (sort, nub, intercalate)\",\n \"statement_text\": \"import Data.List (sort, nub, intercalate)\"\n },\n {\n \"start_line_number\": 23,\n \"end_line_number\": 23,\n \"line_range\": [\n 23,\n 23\n ],\n \"import_name\": \"Data.Maybe (fromMaybe, isJust)\",\n \"statement_text\": \"import Data.Maybe (fromMaybe, isJust)\"\n },\n {\n \"start_line_number\": 24,\n \"end_line_number\": 24,\n \"line_range\": [\n 24,\n 24\n ],\n \"import_name\": \"Data.Map as Map\",\n \"statement_text\": \"import qualified Data.Map as Map\"\n },\n {\n \"start_line_number\": 25,\n \"end_line_number\": 25,\n \"line_range\": [\n 25,\n 25\n ],\n \"import_name\": \"Control.Monad (when, unless, forM_)\",\n \"statement_text\": \"import Control.Monad (when, unless, forM_)\"\n },\n {\n \"start_line_number\": 201,\n \"end_line_number\": 201,\n \"line_range\": [\n 201,\n 201\n ],\n \"import_name\": \"Data.Set as Set\",\n \"statement_text\": \"import qualified Data.Set as Set\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 11,\n \"end_line_number\": 21,\n \"line_range\": [\n 11,\n 21\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"MyModule\",\n \"qualified_name\": \"MyModule\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"module MyModule\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"{- Multi-line comment -}\",\n \"attached_comment_lines\": [\n \"{- Multi-line\",\n \"comment -}\",\n \"| Module declaration with explicit export list.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 30,\n \"end_line_number\": 30,\n \"line_range\": [\n 30,\n 30\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"Name\",\n \"qualified_name\": \"Name\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type Name = String\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Type aliases ───────────────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Type aliases ───────────────────────────────────────────────────────\",\n \"| Simple alias for human-readable name strings.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 33,\n \"end_line_number\": 33,\n \"line_range\": [\n 33,\n 33\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"Config\",\n \"qualified_name\": \"Config\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type Config = Map.Map String Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Mapping from string keys to integer values.\",\n \"attached_comment_lines\": [\n \"| Mapping from string keys to integer values.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 36,\n \"end_line_number\": 36,\n \"line_range\": [\n 36,\n 36\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"Transform\",\n \"qualified_name\": \"Transform\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type Transform a = a -> a\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Function type alias for transformations.\",\n \"attached_comment_lines\": [\n \"| Function type alias for transformations.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 42,\n \"end_line_number\": 46,\n \"line_range\": [\n 42,\n 46\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"Person\",\n \"qualified_name\": \"Person\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"data Person = Person\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Record type representing a person with name and age fields.\",\n \"attached_comment_lines\": [\n \"| Record type representing a person with name and age fields.\",\n \"Used as the primary entity throughout this module.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 43,\n \"end_line_number\": 43,\n \"line_range\": [\n 43,\n 43\n ],\n \"text\": \"^ Full name of the person.\",\n \"text_lines\": [\n \"^ Full name of the person.\"\n ]\n },\n {\n \"start_line_number\": 44,\n \"end_line_number\": 44,\n \"line_range\": [\n 44,\n 44\n ],\n \"text\": \"^ Age in years (non-negative).\",\n \"text_lines\": [\n \"^ Age in years (non-negative).\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 49,\n \"end_line_number\": 53,\n \"line_range\": [\n 49,\n 53\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"Tree\",\n \"qualified_name\": \"Tree\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"data Tree a\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Binary tree data structure with parameterized element type.\",\n \"attached_comment_lines\": [\n \"| Binary tree data structure with parameterized element type.\",\n \"Supports insertion, lookup, and fold operations.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 50,\n \"end_line_number\": 50,\n \"line_range\": [\n 50,\n 50\n ],\n \"text\": \"^ Empty tree (base case).\",\n \"text_lines\": [\n \"^ Empty tree (base case).\"\n ]\n },\n {\n \"start_line_number\": 51,\n \"end_line_number\": 51,\n \"line_range\": [\n 51,\n 51\n ],\n \"text\": \"^ Node with value and subtrees.\",\n \"text_lines\": [\n \"^ Node with value and subtrees.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 56,\n \"end_line_number\": 62,\n \"line_range\": [\n 56,\n 62\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"Expr\",\n \"qualified_name\": \"Expr\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"data Expr\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Expression AST for a simple calculator language.\",\n \"attached_comment_lines\": [\n \"| Expression AST for a simple calculator language.\",\n \"Demonstrates GADT-like pattern (standard ADT form).\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"^ Numeric literal.\",\n \"text_lines\": [\n \"^ Numeric literal.\"\n ]\n },\n {\n \"start_line_number\": 58,\n \"end_line_number\": 58,\n \"line_range\": [\n 58,\n 58\n ],\n \"text\": \"^ Addition of two expressions.\",\n \"text_lines\": [\n \"^ Addition of two expressions.\"\n ]\n },\n {\n \"start_line_number\": 59,\n \"end_line_number\": 59,\n \"line_range\": [\n 59,\n 59\n ],\n \"text\": \"^ Multiplication of two expressions.\",\n \"text_lines\": [\n \"^ Multiplication of two expressions.\"\n ]\n },\n {\n \"start_line_number\": 60,\n \"end_line_number\": 60,\n \"line_range\": [\n 60,\n 60\n ],\n \"text\": \"^ Negation of an expression.\",\n \"text_lines\": [\n \"^ Negation of an expression.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 64,\n \"end_line_number\": 68,\n \"line_range\": [\n 64,\n 68\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"Result\",\n \"qualified_name\": \"Result\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"data Result a\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Result type for operations that may fail.\",\n \"attached_comment_lines\": [\n \"| Result type for operations that may fail.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 65,\n \"end_line_number\": 65,\n \"line_range\": [\n 65,\n 65\n ],\n \"text\": \"^ Successful result carrying a value.\",\n \"text_lines\": [\n \"^ Successful result carrying a value.\"\n ]\n },\n {\n \"start_line_number\": 66,\n \"end_line_number\": 66,\n \"line_range\": [\n 66,\n 66\n ],\n \"text\": \"^ Error result with message.\",\n \"text_lines\": [\n \"^ Error result with message.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 72,\n \"end_line_number\": 79,\n \"line_range\": [\n 72,\n 79\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"Printable\",\n \"qualified_name\": \"Printable\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Printable a where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Typeclasses ────────────────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Typeclasses ────────────────────────────────────────────────────────\",\n \"| Typeclass for types that can be printed as formatted strings.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 73,\n \"end_line_number\": 73,\n \"line_range\": [\n 73,\n 73\n ],\n \"text\": \"| Convert a value to its formatted string representation.\",\n \"text_lines\": [\n \"| Convert a value to its formatted string representation.\"\n ]\n },\n {\n \"start_line_number\": 76,\n \"end_line_number\": 76,\n \"line_range\": [\n 76,\n 76\n ],\n \"text\": \"| Convert a value to a debug string (default implementation).\",\n \"text_lines\": [\n \"| Convert a value to a debug string (default implementation).\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 81,\n \"end_line_number\": 84,\n \"line_range\": [\n 81,\n 84\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"Serializable\",\n \"qualified_name\": \"Serializable\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Serializable a where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Typeclass for types that can be serialized to key-value pairs.\",\n \"attached_comment_lines\": [\n \"| Typeclass for types that can be serialized to key-value pairs.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 82,\n \"end_line_number\": 82,\n \"line_range\": [\n 82,\n 82\n ],\n \"text\": \"| Serialize a value to a list of key-value string pairs.\",\n \"text_lines\": [\n \"| Serialize a value to a list of key-value string pairs.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 112,\n \"line_range\": [\n 112,\n 112\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"greet\",\n \"qualified_name\": \"greet\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"greet :: String -> String\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@brief Produce a greeting string for a given name. @details Uses string concatenation with the (++) operator. @param name Input name value. @return...\",\n \"attached_comment_lines\": [\n \"@brief Produce a greeting string for a given name. @details Uses string concatenation with the (++) operator. @param name Input name value. @return Greeting message.\",\n \"Deterministic helper for basic string assembly.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 117,\n \"end_line_number\": 117,\n \"line_range\": [\n 117,\n 117\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"safeDiv\",\n \"qualified_name\": \"safeDiv\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"safeDiv :: Double -> Double -> Maybe Double\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@brief Safe division returning Nothing on division by zero. @details Demonstrates pattern guards for conditional logic. @param x Numerator value. @...\",\n \"attached_comment_lines\": [\n \"@brief Safe division returning Nothing on division by zero. @details Demonstrates pattern guards for conditional logic. @param x Numerator value. @return Maybe quotient.\",\n \"Returns Nothing when the denominator equals zero.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 123,\n \"end_line_number\": 123,\n \"line_range\": [\n 123,\n 123\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"eval\",\n \"qualified_name\": \"eval\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"eval :: Expr -> Double\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@brief Evaluate an expression AST to its numeric result. @details Recursively traverses the expression tree. @param expr Expression to evaluate. @r...\",\n \"attached_comment_lines\": [\n \"@brief Evaluate an expression AST to its numeric result. @details Recursively traverses the expression tree. @param expr Expression to evaluate. @return Numeric result.\",\n \"Handles literals, sums, products, and negations.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 131,\n \"end_line_number\": 131,\n \"line_range\": [\n 131,\n 131\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"processList\",\n \"qualified_name\": \"processList\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"processList :: [Int] -> [Int]\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@brief Process a list of integers with multiple filter stages. @details Removes duplicates, sorts, and filters positive values. @param xs Input int...\",\n \"attached_comment_lines\": [\n \"@brief Process a list of integers with multiple filter stages. @details Removes duplicates, sorts, and filters positive values. @param xs Input integer list. @return Processed integer list.\",\n \"Preserves deterministic ordering and positivity constraint.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 143,\n \"end_line_number\": 143,\n \"line_range\": [\n 143,\n 143\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"fibonacci\",\n \"qualified_name\": \"fibonacci\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fibonacci :: Int -> Integer\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@brief Compute the nth Fibonacci number using pattern matching. @details Uses accumulator recursion for efficiency. @param n Sequence index. @retur...\",\n \"attached_comment_lines\": [\n \"@brief Compute the nth Fibonacci number using pattern matching. @details Uses accumulator recursion for efficiency. @param n Sequence index. @return Fibonacci value at index n.\",\n \"Rejects negative input through an explicit error branch.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 155,\n \"end_line_number\": 155,\n \"line_range\": [\n 155,\n 155\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"insertTree\",\n \"qualified_name\": \"insertTree\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"insertTree :: (Ord a) => a -> Tree a -> Tree a\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Insert a value into a binary search tree.\",\n \"attached_comment_lines\": [\n \"| Insert a value into a binary search tree.\",\n \"Maintains BST ordering invariant.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 164,\n \"end_line_number\": 164,\n \"line_range\": [\n 164,\n 164\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"foldTree\",\n \"qualified_name\": \"foldTree\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"foldTree :: (b -> a -> b) -> b -> Tree a -> b\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Fold a tree to a single value using a combining function.\",\n \"attached_comment_lines\": [\n \"| Fold a tree to a single value using a combining function.\",\n \"Performs an in-order traversal.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 173,\n \"end_line_number\": 173,\n \"line_range\": [\n 173,\n 173\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"lookupConfig\",\n \"qualified_name\": \"lookupConfig\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"lookupConfig :: Config -> String -> Int -> Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Lookup a value in a config map with a default fallback.\",\n \"attached_comment_lines\": [\n \"| Lookup a value in a config map with a default fallback.\",\n \"Demonstrates Maybe handling with fromMaybe.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 178,\n \"end_line_number\": 178,\n \"line_range\": [\n 178,\n 178\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"applyN\",\n \"qualified_name\": \"applyN\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"applyN :: Int -> Transform a -> a -> a\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Apply a transformation function n times to an initial value.\",\n \"attached_comment_lines\": [\n \"| Apply a transformation function n times to an initial value.\",\n \"Higher-order function with explicit recursion.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 184,\n \"end_line_number\": 184,\n \"line_range\": [\n 184,\n 184\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"formatPersons\",\n \"qualified_name\": \"formatPersons\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"formatPersons :: (Printable a) => [a] -> String\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Format a list of persons as a comma-separated string.\",\n \"attached_comment_lines\": [\n \"| Format a list of persons as a comma-separated string.\",\n \"Combines typeclass method with list processing.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 189,\n \"end_line_number\": 189,\n \"line_range\": [\n 189,\n 189\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"safeCompute\",\n \"qualified_name\": \"safeCompute\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"safeCompute :: Double -> Double -> Double -> Maybe Double\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"| Monadic computation chaining multiple Maybe operations.\",\n \"attached_comment_lines\": [\n \"| Monadic computation chaining multiple Maybe operations.\",\n \"Returns Nothing if any step fails.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 197,\n \"end_line_number\": 197,\n \"line_range\": [\n 197,\n 197\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"Extra.One\",\n \"qualified_name\": \"Extra.One\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"module Extra.One where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"{- coverage extension block -}\",\n \"attached_comment_lines\": [\n \"{- coverage extension block -}\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 198,\n \"end_line_number\": 198,\n \"line_range\": [\n 198,\n 198\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"Extra.Two\",\n \"qualified_name\": \"Extra.Two\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"module Extra.Two where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 199,\n \"end_line_number\": 199,\n \"line_range\": [\n 199,\n 199\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"Extra.Three\",\n \"qualified_name\": \"Extra.Three\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"module Extra.Three where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 200,\n \"end_line_number\": 200,\n \"line_range\": [\n 200,\n 200\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"Extra.Four\",\n \"qualified_name\": \"Extra.Four\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"module Extra.Four where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 202,\n \"end_line_number\": 202,\n \"line_range\": [\n 202,\n 202\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"RequestId\",\n \"qualified_name\": \"RequestId\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type RequestId = Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 203,\n \"end_line_number\": 203,\n \"line_range\": [\n 203,\n 203\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"ResponseId\",\n \"qualified_name\": \"ResponseId\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type ResponseId = Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 204,\n \"end_line_number\": 204,\n \"line_range\": [\n 204,\n 204\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 a where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 205,\n \"end_line_number\": 205,\n \"line_range\": [\n 205,\n 205\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"Parsable\",\n \"qualified_name\": \"Parsable\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Parsable a where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 206,\n \"end_line_number\": 206,\n \"line_range\": [\n 206,\n 206\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"Executable\",\n \"qualified_name\": \"Executable\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Executable a where\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 207,\n \"end_line_number\": 208,\n \"line_range\": [\n 207,\n 208\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"Envelope\",\n \"qualified_name\": \"Envelope\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"data Envelope = Envelope String\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 215,\n \"end_line_number\": 215,\n \"line_range\": [\n 215,\n 215\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"reqCoverHaskell1\",\n \"qualified_name\": \"reqCoverHaskell1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"reqCoverHaskell1 :: Int -> Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 1.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 1.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 1.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 1.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 1.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 223,\n \"end_line_number\": 223,\n \"line_range\": [\n 223,\n 223\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"reqCoverHaskell2\",\n \"qualified_name\": \"reqCoverHaskell2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"reqCoverHaskell2 :: Int -> Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 2.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 2.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 2.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 2.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 2.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 231,\n \"end_line_number\": 231,\n \"line_range\": [\n 231,\n 231\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"reqCoverHaskell3\",\n \"qualified_name\": \"reqCoverHaskell3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"reqCoverHaskell3 :: Int -> Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 3.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 3.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 3.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 3.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 3.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 239,\n \"end_line_number\": 239,\n \"line_range\": [\n 239,\n 239\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"reqCoverHaskell4\",\n \"qualified_name\": \"reqCoverHaskell4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"reqCoverHaskell4 :: Int -> Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 4.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 4.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 4.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 4.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 4.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 247,\n \"end_line_number\": 247,\n \"line_range\": [\n 247,\n 247\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"reqCoverHaskell5\",\n \"qualified_name\": \"reqCoverHaskell5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"reqCoverHaskell5 :: Int -> Int\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 5.\\n--\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 5.\\n--\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 5.\\n--\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"text\": \"value Input value for helper construct 5.\\n--\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 5.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n }\n ],\n \"standalone_comments\": [\n {\n \"start_line_number\": 2,\n \"end_line_number\": 2,\n \"line_range\": [\n 2,\n 2\n ],\n \"text\": \"@brief Comprehensive Haskell test fixture for parser validation.\",\n \"text_lines\": [\n \"@brief Comprehensive Haskell test fixture for parser validation.\"\n ]\n },\n {\n \"start_line_number\": 3,\n \"end_line_number\": 3,\n \"line_range\": [\n 3,\n 3\n ],\n \"text\": \"@details Covers typeclasses with instances, GADTs, type families,\",\n \"text_lines\": [\n \"@details Covers typeclasses with instances, GADTs, type families,\"\n ]\n },\n {\n \"start_line_number\": 4,\n \"end_line_number\": 4,\n \"line_range\": [\n 4,\n 4\n ],\n \"text\": \"monadic computations, applicatives, pattern guards,\",\n \"text_lines\": [\n \"monadic computations, applicatives, pattern guards,\"\n ]\n },\n {\n \"start_line_number\": 5,\n \"end_line_number\": 5,\n \"line_range\": [\n 5,\n 5\n ],\n \"text\": \"where clauses, let bindings, and deriving strategies.\",\n \"text_lines\": [\n \"where clauses, let bindings, and deriving strategies.\"\n ]\n },\n {\n \"start_line_number\": 6,\n \"end_line_number\": 6,\n \"line_range\": [\n 6,\n 6\n ],\n \"text\": \"Single line comment\",\n \"text_lines\": [\n \"Single line comment\"\n ]\n },\n {\n \"start_line_number\": 38,\n \"end_line_number\": 38,\n \"line_range\": [\n 38,\n 38\n ],\n \"text\": \"── Data types ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Data types ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 73,\n \"end_line_number\": 73,\n \"line_range\": [\n 73,\n 73\n ],\n \"text\": \"| Convert a value to its formatted string representation.\",\n \"text_lines\": [\n \"| Convert a value to its formatted string representation.\"\n ]\n },\n {\n \"start_line_number\": 76,\n \"end_line_number\": 76,\n \"line_range\": [\n 76,\n 76\n ],\n \"text\": \"| Convert a value to a debug string (default implementation).\",\n \"text_lines\": [\n \"| Convert a value to a debug string (default implementation).\"\n ]\n },\n {\n \"start_line_number\": 82,\n \"end_line_number\": 82,\n \"line_range\": [\n 82,\n 82\n ],\n \"text\": \"| Serialize a value to a list of key-value string pairs.\",\n \"text_lines\": [\n \"| Serialize a value to a list of key-value string pairs.\"\n ]\n },\n {\n \"start_line_number\": 85,\n \"end_line_number\": 85,\n \"line_range\": [\n 85,\n 85\n ],\n \"text\": \"── Typeclass instances ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Typeclass instances ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 87,\n \"end_line_number\": 87,\n \"line_range\": [\n 87,\n 87\n ],\n \"text\": \"| Printable instance for Person; formats as \\\"Name (Age)\\\".\",\n \"text_lines\": [\n \"| Printable instance for Person; formats as \\\"Name (Age)\\\".\"\n ]\n },\n {\n \"start_line_number\": 91,\n \"end_line_number\": 91,\n \"line_range\": [\n 91,\n 91\n ],\n \"text\": \"| Serializable instance for Person.\",\n \"text_lines\": [\n \"| Serializable instance for Person.\"\n ]\n },\n {\n \"start_line_number\": 98,\n \"end_line_number\": 98,\n \"line_range\": [\n 98,\n 98\n ],\n \"text\": \"| Functor instance for Tree enabling fmap over tree nodes.\",\n \"text_lines\": [\n \"| Functor instance for Tree enabling fmap over tree nodes.\"\n ]\n },\n {\n \"start_line_number\": 103,\n \"end_line_number\": 103,\n \"line_range\": [\n 103,\n 103\n ],\n \"text\": \"| Functor instance for Result.\",\n \"text_lines\": [\n \"| Functor instance for Result.\"\n ]\n },\n {\n \"start_line_number\": 108,\n \"end_line_number\": 108,\n \"line_range\": [\n 108,\n 108\n ],\n \"text\": \"── Functions ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Functions ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 134,\n \"line_range\": [\n 134,\n 134\n ],\n \"text\": \"Remove duplicates first\",\n \"text_lines\": [\n \"Remove duplicates first\"\n ]\n },\n {\n \"start_line_number\": 136,\n \"end_line_number\": 136,\n \"line_range\": [\n 136,\n 136\n ],\n \"text\": \"Sort in ascending order\",\n \"text_lines\": [\n \"Sort in ascending order\"\n ]\n },\n {\n \"start_line_number\": 138,\n \"end_line_number\": 138,\n \"line_range\": [\n 138,\n 138\n ],\n \"text\": \"Keep only positive values\",\n \"text_lines\": [\n \"Keep only positive values\"\n ]\n },\n {\n \"start_line_number\": 191,\n \"end_line_number\": 191,\n \"line_range\": [\n 191,\n 191\n ],\n \"text\": \"Each step may fail (division by zero)\",\n \"text_lines\": [\n \"Each step may fail (division by zero)\"\n ]\n },\n {\n \"start_line_number\": 209,\n \"end_line_number\": 209,\n \"line_range\": [\n 209,\n 209\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 210,\n \"end_line_number\": 210,\n \"line_range\": [\n 210,\n 210\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\": 211,\n \"end_line_number\": 211,\n \"line_range\": [\n 211,\n 211\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 218,\n \"end_line_number\": 218,\n \"line_range\": [\n 218,\n 218\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\": 219,\n \"end_line_number\": 219,\n \"line_range\": [\n 219,\n 219\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 226,\n \"end_line_number\": 226,\n \"line_range\": [\n 226,\n 226\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\": 227,\n \"end_line_number\": 227,\n \"line_range\": [\n 227,\n 227\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 234,\n \"end_line_number\": 234,\n \"line_range\": [\n 234,\n 234\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\": 235,\n \"end_line_number\": 235,\n \"line_range\": [\n 235,\n 235\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 242,\n \"end_line_number\": 242,\n \"line_range\": [\n 242,\n 242\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\": 243,\n \"end_line_number\": 243,\n \"line_range\": [\n 243,\n 243\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 250,\n \"end_line_number\": 250,\n \"line_range\": [\n 250,\n 250\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_haskell.hs | Haskell | 250L | 36 symbols | 5 imports | 86 comments\n> Path: `tests/fixtures/fixture_haskell.hs`\n\n## Imports\n```\nimport Data.List (sort, nub, intercalate)\nimport Data.Maybe (fromMaybe, isJust)\nimport qualified Data.Map as Map\nimport Control.Monad (when, unless, forM_)\nimport qualified Data.Set as Set\n```\n\n## Definitions\n\n### mod `module MyModule` (L11-21)\n\n- type `type Name = String` (L30)\n- type `type Config = Map.Map String Int` (L33)\n- type `type Transform a = a -> a` (L36)\n### struct `data Person = Person` (L42-46)\n\n### struct `data Tree a` (L49-53)\n\n### struct `data Expr` (L56-62)\n\n### struct `data Result a` (L64-68)\n\n### class `class Printable a where` (L72-79)\n\n### class `class Serializable a where` (L81-84)\n\n- fn `greet :: String -> String` (L112)\n- fn `safeDiv :: Double -> Double -> Maybe Double` (L117)\n- fn `eval :: Expr -> Double` (L123)\n- fn `processList :: [Int] -> [Int]` (L131)\n- fn `fibonacci :: Int -> Integer` (L143)\n- fn `insertTree :: (Ord a) => a -> Tree a -> Tree a` (L155)\n- fn `foldTree :: (b -> a -> b) -> b -> Tree a -> b` (L164)\n- fn `lookupConfig :: Config -> String -> Int -> Int` (L173)\n- fn `applyN :: Int -> Transform a -> a -> a` (L178)\n- fn `formatPersons :: (Printable a) => [a] -> String` (L184)\n- fn `safeCompute :: Double -> Double -> Double -> Maybe Double` (L189)\n- mod `module Extra.One where` (L197)\n- mod `module Extra.Two where` (L198)\n- mod `module Extra.Three where` (L199)\n- mod `module Extra.Four where` (L200)\n- type `type RequestId = Int` (L202)\n- type `type ResponseId = Int` (L203)\n- class `class Renderable a where` (L204)\n- class `class Parsable a where` (L205)\n- class `class Executable a where` (L206)\n### struct `data Envelope = Envelope String` (L207-208)\n\n- fn `reqCoverHaskell1 :: Int -> Int` (L215)\n- @brief Coverage helper construct 1.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 1.\n--\n- @param value Input value for helper construct 1.\n--\n- @return Output value for helper construct 1.\n- fn `reqCoverHaskell2 :: Int -> Int` (L223)\n- @brief Coverage helper construct 2.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 2.\n--\n- @param value Input value for helper construct 2.\n--\n- @return Output value for helper construct 2.\n- fn `reqCoverHaskell3 :: Int -> Int` (L231)\n- @brief Coverage helper construct 3.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 3.\n--\n- @param value Input value for helper construct 3.\n--\n- @return Output value for helper construct 3.\n- fn `reqCoverHaskell4 :: Int -> Int` (L239)\n- @brief Coverage helper construct 4.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 4.\n--\n- @param value Input value for helper construct 4.\n--\n- @return Output value for helper construct 4.\n- fn `reqCoverHaskell5 :: Int -> Int` (L247)\n- @brief Coverage helper construct 5.\n--\n- @details Provides deterministic fixture-level Doxygen coverage block 5.\n--\n- @param value Input value for helper construct 5.\n--\n- @return Output value for helper construct 5.\n## Symbol Index\n|Symbol|Kind|Vis|Lines|Sig|\n|---|---|---|---|---|\n|`MyModule`|mod||11-21||\n|`Name`|type||30||\n|`Config`|type||33||\n|`Transform`|type||36||\n|`Person`|struct||42-46|data Person = Person|\n|`Tree`|struct||49-53|data Tree a|\n|`Expr`|struct||56-62|data Expr|\n|`Result`|struct||64-68|data Result a|\n|`Printable`|class||72-79|class Printable a where|\n|`Serializable`|class||81-84|class Serializable a where|\n|`greet`|fn||112|greet :: String -> String|\n|`safeDiv`|fn||117|safeDiv :: Double -> Double -> Maybe Double|\n|`eval`|fn||123|eval :: Expr -> Double|\n|`processList`|fn||131|processList :: [Int] -> [Int]|\n|`fibonacci`|fn||143|fibonacci :: Int -> Integer|\n|`insertTree`|fn||155|insertTree :: (Ord a) => a -> Tree a -> Tree a|\n|`foldTree`|fn||164|foldTree :: (b -> a -> b) -> b -> Tree a -> b|\n|`lookupConfig`|fn||173|lookupConfig :: Config -> String -> Int -> Int|\n|`applyN`|fn||178|applyN :: Int -> Transform a -> a -> a|\n|`formatPersons`|fn||184|formatPersons :: (Printable a) => [a] -> String|\n|`safeCompute`|fn||189|safeCompute :: Double -> Double -> Double -> Maybe Double|\n|`Extra.One`|mod||197||\n|`Extra.Two`|mod||198||\n|`Extra.Three`|mod||199||\n|`Extra.Four`|mod||200||\n|`RequestId`|type||202||\n|`ResponseId`|type||203||\n|`Renderable`|class||204|class Renderable a where|\n|`Parsable`|class||205|class Parsable a where|\n|`Executable`|class||206|class Executable a where|\n|`Envelope`|struct||207-208|data Envelope = Envelope String|\n|`reqCoverHaskell1`|fn||215|reqCoverHaskell1 :: Int -> Int|\n|`reqCoverHaskell2`|fn||223|reqCoverHaskell2 :: Int -> Int|\n|`reqCoverHaskell3`|fn||231|reqCoverHaskell3 :: Int -> Int|\n|`reqCoverHaskell4`|fn||239|reqCoverHaskell4 :: Int -> Int|\n|`reqCoverHaskell5`|fn||247|reqCoverHaskell5 :: Int -> Int|\n\n",
4
4
  "stderr": ""
5
5
  }