pi-usereq 0.7.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (772) hide show
  1. package/.gitignore +2 -0
  2. package/CHANGELOG.md +6 -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 +5184 -24470
  21. package/pi-usereq/docs/REQUIREMENTS.md +300 -166
  22. package/pi-usereq/docs/WORKFLOW.md +303 -314
  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 +468 -42
  699. package/src/core/debug-runtime.ts +542 -0
  700. package/src/core/extension-status.ts +296 -46
  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 +115 -5
  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 +12 -6
  713. package/src/core/source-analyzer.ts +27 -7
  714. package/src/core/token-counter.ts +6 -76
  715. package/src/core/tool-runner.ts +38 -317
  716. package/src/index.ts +2062 -950
  717. package/src/resources/instructions/git_commit.md +16 -0
  718. package/src/resources/instructions/git_read-only.md +2 -0
  719. package/src/resources/prompts/analyze.md +12 -13
  720. package/src/resources/prompts/change.md +21 -59
  721. package/src/resources/prompts/check.md +14 -16
  722. package/src/resources/prompts/cover.md +21 -59
  723. package/src/resources/prompts/create.md +5 -4
  724. package/src/resources/prompts/fix.md +20 -58
  725. package/src/resources/prompts/flowchart.md +14 -49
  726. package/src/resources/prompts/implement.md +14 -50
  727. package/src/resources/prompts/new.md +20 -58
  728. package/src/resources/prompts/readme.md +14 -50
  729. package/src/resources/prompts/recreate.md +14 -45
  730. package/src/resources/prompts/refactor.md +20 -58
  731. package/src/resources/prompts/references.md +7 -43
  732. package/src/resources/prompts/renumber.md +8 -39
  733. package/src/resources/prompts/workflow.md +14 -50
  734. package/src/resources/prompts/write.md +5 -4
  735. package/tests/attended-results-scenarios.ts +30 -136
  736. package/tests/cli-command-option-parity.test.ts +148 -192
  737. package/tests/debug-extension-harness.test.ts +69 -68
  738. package/tests/extension-registration.test.ts +3118 -657
  739. package/tests/fixtures_attended_results/project/compress-line-numbers.json +1 -1
  740. package/tests/fixtures_attended_results/project/compress.json +1 -1
  741. package/tests/fixtures_attended_results/project/find-line-numbers.json +1 -1
  742. package/tests/fixtures_attended_results/project/find.json +1 -1
  743. package/tests/fixtures_attended_results/project/references.json +2 -2
  744. package/tests/fixtures_attended_results/standalone/files-compress/fixture_go.go.json +1 -1
  745. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_go.go.json +1 -1
  746. package/tests/fixtures_attended_results/standalone/files-find/fixture_go.go.json +1 -1
  747. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_go.go.json +1 -1
  748. package/tests/fixtures_attended_results/standalone/files-references/fixture_c.c.json +1 -1
  749. package/tests/fixtures_attended_results/standalone/files-references/fixture_cpp.cpp.json +1 -1
  750. package/tests/fixtures_attended_results/standalone/files-references/fixture_csharp.cs.json +1 -1
  751. package/tests/fixtures_attended_results/standalone/files-references/fixture_elixir.ex.json +1 -1
  752. package/tests/fixtures_attended_results/standalone/files-references/fixture_go.go.json +1 -1
  753. package/tests/fixtures_attended_results/standalone/files-references/fixture_haskell.hs.json +1 -1
  754. package/tests/fixtures_attended_results/standalone/files-references/fixture_java.java.json +1 -1
  755. package/tests/fixtures_attended_results/standalone/files-references/fixture_javascript.js.json +1 -1
  756. package/tests/fixtures_attended_results/standalone/files-references/fixture_kotlin.kt.json +1 -1
  757. package/tests/fixtures_attended_results/standalone/files-references/fixture_lua.lua.json +1 -1
  758. package/tests/fixtures_attended_results/standalone/files-references/fixture_perl.pl.json +1 -1
  759. package/tests/fixtures_attended_results/standalone/files-references/fixture_php.php.json +1 -1
  760. package/tests/fixtures_attended_results/standalone/files-references/fixture_python.py.json +1 -1
  761. package/tests/fixtures_attended_results/standalone/files-references/fixture_ruby.rb.json +1 -1
  762. package/tests/fixtures_attended_results/standalone/files-references/fixture_rust.rs.json +1 -1
  763. package/tests/fixtures_attended_results/standalone/files-references/fixture_scala.scala.json +1 -1
  764. package/tests/fixtures_attended_results/standalone/files-references/fixture_shell.sh.json +1 -1
  765. package/tests/fixtures_attended_results/standalone/files-references/fixture_swift.swift.json +1 -1
  766. package/tests/fixtures_attended_results/standalone/files-references/fixture_typescript.ts.json +1 -1
  767. package/tests/fixtures_attended_results/standalone/files-references/fixture_zig.zig.json +1 -1
  768. package/tests/helpers.ts +24 -15
  769. package/tests/oracle-project.test.ts +29 -30
  770. package/tests/oracle-standalone.test.ts +27 -1
  771. package/tests/prompt-rendering.test.ts +40 -9
  772. 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_rust.rs\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_rust.rs\"\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\": 65,\n \"total_import_count\": 5,\n \"total_comment_count\": 158,\n \"total_standalone_comment_count\": 59,\n \"total_doxygen_field_count\": 73,\n \"symbol_kind_counts\": {\n \"CONSTANT\": 5,\n \"ENUM\": 5,\n \"FUNCTION\": 23,\n \"IMPL\": 7,\n \"MACRO\": 5,\n \"MODULE\": 5,\n \"STRUCT\": 5,\n \"TRAIT\": 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_rust.rs\"\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_rust.rs\",\n \"relative_path\": \"tests/fixtures/fixture_rust.rs\",\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\": 380,\n \"line_range\": [\n 1,\n 380\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_rust.rs\",\n \"canonical_path\": \"tests/fixtures/fixture_rust.rs\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_rust.rs\",\n \"file_name\": \"fixture_rust.rs\",\n \"file_extension\": \".rs\",\n \"language_id\": \"rust\",\n \"language_name\": \"Rust\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 5,\n \"symbol_count\": 65,\n \"comment_count\": 158,\n \"standalone_comment_count\": 59,\n \"doxygen_field_count\": 73,\n \"file_description_text\": \"@file fixture_rust.rs\",\n \"imports\": [\n {\n \"start_line_number\": 9,\n \"end_line_number\": 9,\n \"line_range\": [\n 9,\n 9\n ],\n \"import_name\": \"std::io\",\n \"statement_text\": \"use std::io;\"\n },\n {\n \"start_line_number\": 10,\n \"end_line_number\": 10,\n \"line_range\": [\n 10,\n 10\n ],\n \"import_name\": \"std::collections::HashMap\",\n \"statement_text\": \"use std::collections::HashMap;\"\n },\n {\n \"start_line_number\": 11,\n \"end_line_number\": 11,\n \"line_range\": [\n 11,\n 11\n ],\n \"import_name\": \"std::fmt::{self, Display, Formatter}\",\n \"statement_text\": \"use std::fmt::{self, Display, Formatter};\"\n },\n {\n \"start_line_number\": 12,\n \"end_line_number\": 12,\n \"line_range\": [\n 12,\n 12\n ],\n \"import_name\": \"std::sync::{Arc, Mutex}\",\n \"statement_text\": \"use std::sync::{Arc, Mutex};\"\n },\n {\n \"start_line_number\": 318,\n \"end_line_number\": 318,\n \"line_range\": [\n 318,\n 318\n ],\n \"import_name\": \"std::time::Duration\",\n \"statement_text\": \"use std::time::Duration;\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 20,\n \"end_line_number\": 23,\n \"line_range\": [\n 20,\n 23\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"MyStruct\",\n \"qualified_name\": \"MyStruct\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"pub struct MyStruct\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"new\",\n \"with_value\",\n \"value\",\n \"try_update\",\n \"do_work\",\n \"fmt\"\n ],\n \"child_qualified_names\": [\n \"MyStruct.new\",\n \"MyStruct.with_value\",\n \"MyStruct.value\",\n \"MyStruct.try_update\",\n \"MyStruct.do_work\",\n \"MyStruct.fmt\"\n ],\n \"depth\": 0,\n \"decorator_text\": \"#[derive(Debug, Clone, PartialEq)]\",\n \"attached_comment_summary_text\": \"Primary integer field.\",\n \"doxygen\": {\n \"brief\": [\n \"Primary integer field.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"text\": \"@brief Primary integer field.\",\n \"text_lines\": [\n \"@brief Primary integer field.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 30,\n \"end_line_number\": 35,\n \"line_range\": [\n 30,\n 35\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"BorrowedData\",\n \"qualified_name\": \"BorrowedData\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"pub struct BorrowedData<'a>\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"#[derive(Debug)]\",\n \"attached_comment_summary_text\": \"Reference to externally-owned string data.\",\n \"doxygen\": {\n \"brief\": [\n \"Reference to externally-owned string data.\",\n \"Numeric tag for identification.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 31,\n \"end_line_number\": 31,\n \"line_range\": [\n 31,\n 31\n ],\n \"text\": \"@brief Reference to externally-owned string data.\",\n \"text_lines\": [\n \"@brief Reference to externally-owned string data.\"\n ]\n },\n {\n \"start_line_number\": 33,\n \"end_line_number\": 33,\n \"line_range\": [\n 33,\n 33\n ],\n \"text\": \"@brief Numeric tag for identification.\",\n \"text_lines\": [\n \"@brief Numeric tag for identification.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 41,\n \"end_line_number\": 44,\n \"line_range\": [\n 41,\n 44\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"TypedMap\",\n \"qualified_name\": \"TypedMap\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"pub struct TypedMap<K: std::hash::Hash + Eq, V: Clone>\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"insert\",\n \"get_or_default\"\n ],\n \"child_qualified_names\": [\n \"TypedMap.insert\",\n \"TypedMap.get_or_default\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Internal hash map storage.\",\n \"doxygen\": {\n \"brief\": [\n \"Internal hash map storage.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 42,\n \"end_line_number\": 42,\n \"line_range\": [\n 42,\n 42\n ],\n \"text\": \"@brief Internal hash map storage.\",\n \"text_lines\": [\n \"@brief Internal hash map storage.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 51,\n \"end_line_number\": 58,\n \"line_range\": [\n 51,\n 58\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"MyEnum\",\n \"qualified_name\": \"MyEnum\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"pub enum MyEnum\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Represents either structured data, a simple flag, or a pair.\",\n \"doxygen\": {\n \"brief\": [\n \"Represents either structured data, a simple flag, or a pair.\",\n \"Unit variant carrying no data.\",\n \"Tuple variant holding a string payload.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 52,\n \"end_line_number\": 52,\n \"line_range\": [\n 52,\n 52\n ],\n \"text\": \"@brief Unit variant carrying no data.\",\n \"text_lines\": [\n \"@brief Unit variant carrying no data.\"\n ]\n },\n {\n \"start_line_number\": 54,\n \"end_line_number\": 54,\n \"line_range\": [\n 54,\n 54\n ],\n \"text\": \"@brief Tuple variant holding a string payload.\",\n \"text_lines\": [\n \"@brief Tuple variant holding a string payload.\"\n ]\n },\n {\n \"start_line_number\": 56,\n \"end_line_number\": 56,\n \"line_range\": [\n 56,\n 56\n ],\n \"text\": \"@brief Struct variant with named fields.\",\n \"text_lines\": [\n \"@brief Struct variant with named fields.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 65,\n \"end_line_number\": 79,\n \"line_range\": [\n 65,\n 79\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"MyTrait\",\n \"qualified_name\": \"MyTrait\",\n \"symbol_kind\": \"TRAIT\",\n \"type_label\": \"TRAIT\",\n \"signature_text\": \"pub trait MyTrait\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"do_work\",\n \"do_work_with_ctx\"\n ],\n \"child_qualified_names\": [\n \"MyTrait.do_work\",\n \"MyTrait.do_work_with_ctx\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Implementors must provide both sync and optional async execution.\",\n \"doxygen\": {\n \"brief\": [\n \"Implementors must provide both sync and optional async execution.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 66,\n \"end_line_number\": 66,\n \"line_range\": [\n 66,\n 66\n ],\n \"text\": \"Execute a unit of work synchronously.\",\n \"text_lines\": [\n \"Execute a unit of work synchronously.\"\n ]\n },\n {\n \"start_line_number\": 69,\n \"end_line_number\": 69,\n \"line_range\": [\n 69,\n 69\n ],\n \"text\": \"Execute work with a context parameter.\",\n \"text_lines\": [\n \"Execute work with a context parameter.\"\n ]\n },\n {\n \"start_line_number\": 71,\n \"end_line_number\": 71,\n \"line_range\": [\n 71,\n 71\n ],\n \"text\": \"@param ctx Contextual string passed to the implementation.\",\n \"text_lines\": [\n \"@param ctx Contextual string passed to the implementation.\"\n ]\n },\n {\n \"start_line_number\": 72,\n \"end_line_number\": 72,\n \"line_range\": [\n 72,\n 72\n ],\n \"text\": \"@return True if work completed successfully.\",\n \"text_lines\": [\n \"@return True if work completed successfully.\"\n ]\n },\n {\n \"start_line_number\": 74,\n \"end_line_number\": 74,\n \"line_range\": [\n 74,\n 74\n ],\n \"text\": \"Default implementation logs and delegates\",\n \"text_lines\": [\n \"Default implementation logs and delegates\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 67,\n \"end_line_number\": 78,\n \"line_range\": [\n 67,\n 78\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"do_work\",\n \"qualified_name\": \"MyTrait.do_work\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn do_work(&self)\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"MyTrait\",\n \"parent_qualified_name\": \"MyTrait\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Execute a unit of work synchronously.\",\n \"attached_comment_lines\": [\n \"Execute a unit of work synchronously.\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 69,\n \"end_line_number\": 69,\n \"line_range\": [\n 69,\n 69\n ],\n \"text\": \"Execute work with a context parameter.\",\n \"text_lines\": [\n \"Execute work with a context parameter.\"\n ]\n },\n {\n \"start_line_number\": 71,\n \"end_line_number\": 71,\n \"line_range\": [\n 71,\n 71\n ],\n \"text\": \"@param ctx Contextual string passed to the implementation.\",\n \"text_lines\": [\n \"@param ctx Contextual string passed to the implementation.\"\n ]\n },\n {\n \"start_line_number\": 72,\n \"end_line_number\": 72,\n \"line_range\": [\n 72,\n 72\n ],\n \"text\": \"@return True if work completed successfully.\",\n \"text_lines\": [\n \"@return True if work completed successfully.\"\n ]\n },\n {\n \"start_line_number\": 74,\n \"end_line_number\": 74,\n \"line_range\": [\n 74,\n 74\n ],\n \"text\": \"Default implementation logs and delegates\",\n \"text_lines\": [\n \"Default implementation logs and delegates\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 73,\n \"end_line_number\": 78,\n \"line_range\": [\n 73,\n 78\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"do_work_with_ctx\",\n \"qualified_name\": \"MyTrait.do_work_with_ctx\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn do_work_with_ctx(&self, ctx: &str) -> bool\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"MyTrait\",\n \"parent_qualified_name\": \"MyTrait\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"@param ctx Contextual string passed to the implementation.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"ctx\",\n \"description\": \"Contextual string passed to the implementation.\"\n }\n ],\n \"returns\": [\n \"True if work completed successfully.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 74,\n \"end_line_number\": 74,\n \"line_range\": [\n 74,\n 74\n ],\n \"text\": \"Default implementation logs and delegates\",\n \"text_lines\": [\n \"Default implementation logs and delegates\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 85,\n \"end_line_number\": 94,\n \"line_range\": [\n 85,\n 94\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"Parser\",\n \"qualified_name\": \"Parser\",\n \"symbol_kind\": \"TRAIT\",\n \"type_label\": \"TRAIT\",\n \"signature_text\": \"pub trait Parser<'a>\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"Output\"\n ],\n \"child_qualified_names\": [\n \"Parser.Output\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"The output type produced by parsing.\",\n \"doxygen\": {\n \"brief\": [\n \"The output type produced by parsing.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 86,\n \"end_line_number\": 86,\n \"line_range\": [\n 86,\n 86\n ],\n \"text\": \"@brief The output type produced by parsing.\",\n \"text_lines\": [\n \"@brief The output type produced by parsing.\"\n ]\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 89,\n \"line_range\": [\n 89,\n 89\n ],\n \"text\": \"Parse input bytes into the associated output type.\",\n \"text_lines\": [\n \"Parse input bytes into the associated output type.\"\n ]\n },\n {\n \"start_line_number\": 91,\n \"end_line_number\": 91,\n \"line_range\": [\n 91,\n 91\n ],\n \"text\": \"@param input Byte slice to parse.\",\n \"text_lines\": [\n \"@param input Byte slice to parse.\"\n ]\n },\n {\n \"start_line_number\": 92,\n \"end_line_number\": 92,\n \"line_range\": [\n 92,\n 92\n ],\n \"text\": \"@return Parsed output or an IO error.\",\n \"text_lines\": [\n \"@return Parsed output or an IO error.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 87,\n \"end_line_number\": 87,\n \"line_range\": [\n 87,\n 87\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"Output\",\n \"qualified_name\": \"Parser.Output\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type Output\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"Parser\",\n \"parent_qualified_name\": \"Parser\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"The output type produced by parsing.\",\n \"doxygen\": {\n \"brief\": [\n \"The output type produced by parsing.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 93,\n \"end_line_number\": 96,\n \"line_range\": [\n 93,\n 96\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"parse\",\n \"qualified_name\": \"parse\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn parse(&self, input: &'a [u8]) -> Result<Self::Output, io::Error>\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param input Byte slice to parse.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"input\",\n \"description\": \"Byte slice to parse.\"\n }\n ],\n \"returns\": [\n \"Parsed output or an IO error.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 96,\n \"end_line_number\": 132,\n \"line_range\": [\n 96,\n 132\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"MyStruct\",\n \"qualified_name\": \"MyStruct\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"impl MyStruct\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [\n \"new\",\n \"with_value\",\n \"value\",\n \"try_update\",\n \"do_work\",\n \"fmt\"\n ],\n \"child_qualified_names\": [\n \"MyStruct.new\",\n \"MyStruct.with_value\",\n \"MyStruct.value\",\n \"MyStruct.try_update\",\n \"MyStruct.do_work\",\n \"MyStruct.fmt\"\n ],\n \"depth\": 0,\n \"doxygen\": {\n \"returns\": [\n \"A MyStruct with field initialized to 0.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 97,\n \"end_line_number\": 97,\n \"line_range\": [\n 97,\n 97\n ],\n \"text\": \"Create a new MyStruct with default field value.\",\n \"text_lines\": [\n \"Create a new MyStruct with default field value.\"\n ]\n },\n {\n \"start_line_number\": 99,\n \"end_line_number\": 99,\n \"line_range\": [\n 99,\n 99\n ],\n \"text\": \"@return A MyStruct with field initialized to 0.\",\n \"text_lines\": [\n \"@return A MyStruct with field initialized to 0.\"\n ]\n },\n {\n \"start_line_number\": 104,\n \"end_line_number\": 104,\n \"line_range\": [\n 104,\n 104\n ],\n \"text\": \"Create a MyStruct with a specific value.\",\n \"text_lines\": [\n \"Create a MyStruct with a specific value.\"\n ]\n },\n {\n \"start_line_number\": 106,\n \"end_line_number\": 106,\n \"line_range\": [\n 106,\n 106\n ],\n \"text\": \"@param val The initial field value.\",\n \"text_lines\": [\n \"@param val The initial field value.\"\n ]\n },\n {\n \"start_line_number\": 107,\n \"end_line_number\": 107,\n \"line_range\": [\n 107,\n 107\n ],\n \"text\": \"@return A new MyStruct.\",\n \"text_lines\": [\n \"@return A new MyStruct.\"\n ]\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 112,\n \"line_range\": [\n 112,\n 112\n ],\n \"text\": \"Get the current field value.\",\n \"text_lines\": [\n \"Get the current field value.\"\n ]\n },\n {\n \"start_line_number\": 114,\n \"end_line_number\": 114,\n \"line_range\": [\n 114,\n 114\n ],\n \"text\": \"@return The stored integer.\",\n \"text_lines\": [\n \"@return The stored integer.\"\n ]\n },\n {\n \"start_line_number\": 119,\n \"end_line_number\": 119,\n \"line_range\": [\n 119,\n 119\n ],\n \"text\": \"Conditionally update the field.\",\n \"text_lines\": [\n \"Conditionally update the field.\"\n ]\n },\n {\n \"start_line_number\": 121,\n \"end_line_number\": 121,\n \"line_range\": [\n 121,\n 121\n ],\n \"text\": \"@param new_val New value to set.\",\n \"text_lines\": [\n \"@param new_val New value to set.\"\n ]\n },\n {\n \"start_line_number\": 122,\n \"end_line_number\": 122,\n \"line_range\": [\n 122,\n 122\n ],\n \"text\": \"@return Old value if updated, None if new_val equals current.\",\n \"text_lines\": [\n \"@return Old value if updated, None if new_val equals current.\"\n ]\n },\n {\n \"start_line_number\": 129,\n \"end_line_number\": 129,\n \"line_range\": [\n 129,\n 129\n ],\n \"text\": \"Return the previous value wrapped in Some\",\n \"text_lines\": [\n \"Return the previous value wrapped in Some\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 125,\n \"text\": \"return None;\"\n }\n ]\n },\n {\n \"start_line_number\": 100,\n \"end_line_number\": 102,\n \"line_range\": [\n 100,\n 102\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"new\",\n \"qualified_name\": \"MyStruct.new\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn new() -> Self\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"MyStruct\",\n \"parent_qualified_name\": \"MyStruct\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Create a new MyStruct with default field value.\",\n \"doxygen\": {\n \"returns\": [\n \"A MyStruct with field initialized to 0.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 108,\n \"end_line_number\": 110,\n \"line_range\": [\n 108,\n 110\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"with_value\",\n \"qualified_name\": \"MyStruct.with_value\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn with_value(val: i32) -> Self\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyStruct\",\n \"parent_qualified_name\": \"MyStruct\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"@param val The initial field value.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"val\",\n \"description\": \"The initial field value.\"\n }\n ],\n \"returns\": [\n \"A new MyStruct.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 115,\n \"end_line_number\": 117,\n \"line_range\": [\n 115,\n 117\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"value\",\n \"qualified_name\": \"MyStruct.value\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn value(&self) -> i32\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyStruct\",\n \"parent_qualified_name\": \"MyStruct\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Get the current field value.\",\n \"doxygen\": {\n \"returns\": [\n \"The stored integer.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 123,\n \"end_line_number\": 131,\n \"line_range\": [\n 123,\n 131\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"try_update\",\n \"qualified_name\": \"MyStruct.try_update\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn try_update(&mut self, new_val: i32) -> Option<i32>\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"MyStruct\",\n \"parent_qualified_name\": \"MyStruct\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"@param new_val New value to set.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"new_val\",\n \"description\": \"New value to set.\"\n }\n ],\n \"returns\": [\n \"Old value if updated, None if new_val equals current.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 129,\n \"end_line_number\": 129,\n \"line_range\": [\n 129,\n 129\n ],\n \"text\": \"Return the previous value wrapped in Some\",\n \"text_lines\": [\n \"Return the previous value wrapped in Some\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 125,\n \"text\": \"return None;\"\n }\n ]\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 139,\n \"line_range\": [\n 134,\n 139\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"MyStruct\",\n \"qualified_name\": \"MyStruct\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"impl MyTrait for MyStruct\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [\n \"new\",\n \"with_value\",\n \"value\",\n \"try_update\",\n \"do_work\",\n \"fmt\"\n ],\n \"child_qualified_names\": [\n \"MyStruct.new\",\n \"MyStruct.with_value\",\n \"MyStruct.value\",\n \"MyStruct.try_update\",\n \"MyStruct.do_work\",\n \"MyStruct.fmt\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 135,\n \"end_line_number\": 135,\n \"line_range\": [\n 135,\n 135\n ],\n \"text\": \"Concrete implementation printing the struct.\",\n \"text_lines\": [\n \"Concrete implementation printing the struct.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 136,\n \"end_line_number\": 138,\n \"line_range\": [\n 136,\n 138\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"do_work\",\n \"qualified_name\": \"MyStruct.do_work\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn do_work(&self)\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"MyStruct\",\n \"parent_qualified_name\": \"MyStruct\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Concrete implementation printing the struct.\",\n \"attached_comment_lines\": [\n \"Concrete implementation printing the struct.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 141,\n \"end_line_number\": 149,\n \"line_range\": [\n 141,\n 149\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"MyStruct\",\n \"qualified_name\": \"MyStruct\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"impl Display for MyStruct\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [\n \"new\",\n \"with_value\",\n \"value\",\n \"try_update\",\n \"do_work\",\n \"fmt\"\n ],\n \"child_qualified_names\": [\n \"MyStruct.new\",\n \"MyStruct.with_value\",\n \"MyStruct.value\",\n \"MyStruct.try_update\",\n \"MyStruct.do_work\",\n \"MyStruct.fmt\"\n ],\n \"depth\": 0,\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"f\",\n \"description\": \"Formatter to write into.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 142,\n \"end_line_number\": 142,\n \"line_range\": [\n 142,\n 142\n ],\n \"text\": \"Format MyStruct for user-facing display.\",\n \"text_lines\": [\n \"Format MyStruct for user-facing display.\"\n ]\n },\n {\n \"start_line_number\": 144,\n \"end_line_number\": 144,\n \"line_range\": [\n 144,\n 144\n ],\n \"text\": \"@param f Formatter to write into.\",\n \"text_lines\": [\n \"@param f Formatter to write into.\"\n ]\n },\n {\n \"start_line_number\": 145,\n \"end_line_number\": 145,\n \"line_range\": [\n 145,\n 145\n ],\n \"text\": \"@return fmt::Result indicating success or failure.\",\n \"text_lines\": [\n \"@return fmt::Result indicating success or failure.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 146,\n \"end_line_number\": 148,\n \"line_range\": [\n 146,\n 148\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"fmt\",\n \"qualified_name\": \"MyStruct.fmt\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result\",\n \"visibility\": \"priv\",\n \"parent_symbol_name\": \"MyStruct\",\n \"parent_qualified_name\": \"MyStruct\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"@param f Formatter to write into.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"f\",\n \"description\": \"Formatter to write into.\"\n }\n ],\n \"returns\": [\n \"fmt::Result indicating success or failure.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 177,\n \"line_range\": [\n 153,\n 177\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"TypedMap\",\n \"qualified_name\": \"TypedMap\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"impl<K, V> TypedMap<K, V>\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [\n \"insert\",\n \"get_or_default\"\n ],\n \"child_qualified_names\": [\n \"TypedMap.insert\",\n \"TypedMap.get_or_default\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Generic impl with where clause ─────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Generic impl with where clause ─────────────────────────────────────\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 158,\n \"end_line_number\": 158,\n \"line_range\": [\n 158,\n 158\n ],\n \"text\": \"Insert a key-value pair, returning the old value if present.\",\n \"text_lines\": [\n \"Insert a key-value pair, returning the old value if present.\"\n ]\n },\n {\n \"start_line_number\": 160,\n \"end_line_number\": 160,\n \"line_range\": [\n 160,\n 160\n ],\n \"text\": \"@param key The lookup key.\",\n \"text_lines\": [\n \"@param key The lookup key.\"\n ]\n },\n {\n \"start_line_number\": 161,\n \"end_line_number\": 161,\n \"line_range\": [\n 161,\n 161\n ],\n \"text\": \"@param value The value to associate with the key.\",\n \"text_lines\": [\n \"@param value The value to associate with the key.\"\n ]\n },\n {\n \"start_line_number\": 162,\n \"end_line_number\": 162,\n \"line_range\": [\n 162,\n 162\n ],\n \"text\": \"@return Previous value for this key, or None.\",\n \"text_lines\": [\n \"@return Previous value for this key, or None.\"\n ]\n },\n {\n \"start_line_number\": 167,\n \"end_line_number\": 167,\n \"line_range\": [\n 167,\n 167\n ],\n \"text\": \"Get a cloned value by key reference.\",\n \"text_lines\": [\n \"Get a cloned value by key reference.\"\n ]\n },\n {\n \"start_line_number\": 169,\n \"end_line_number\": 169,\n \"line_range\": [\n 169,\n 169\n ],\n \"text\": \"@param key The key to look up.\",\n \"text_lines\": [\n \"@param key The key to look up.\"\n ]\n },\n {\n \"start_line_number\": 170,\n \"end_line_number\": 170,\n \"line_range\": [\n 170,\n 170\n ],\n \"text\": \"@return Cloned value if found, or the default for V.\",\n \"text_lines\": [\n \"@return Cloned value if found, or the default for V.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 163,\n \"end_line_number\": 165,\n \"line_range\": [\n 163,\n 165\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"insert\",\n \"qualified_name\": \"TypedMap.insert\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn insert(&mut self, key: K, value: V) -> Option<V>\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"TypedMap\",\n \"parent_qualified_name\": \"TypedMap\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"@param key The lookup key.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"key\",\n \"description\": \"The lookup key.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"The value to associate with the key.\"\n }\n ],\n \"returns\": [\n \"Previous value for this key, or None.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 171,\n \"end_line_number\": 176,\n \"line_range\": [\n 171,\n 176\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"get_or_default\",\n \"qualified_name\": \"TypedMap.get_or_default\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn get_or_default(&self, key: &K) -> V\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"TypedMap\",\n \"parent_qualified_name\": \"TypedMap\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"@param key The key to look up.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"key\",\n \"description\": \"The key to look up.\"\n }\n ],\n \"returns\": [\n \"Cloned value if found, or the default for V.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 182,\n \"end_line_number\": 189,\n \"line_range\": [\n 182,\n 189\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"my_module\",\n \"qualified_name\": \"my_module\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"pub mod my_module\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Sub-module containing utility helpers.\",\n \"doxygen\": {\n \"brief\": [\n \"Sub-module containing utility helpers.\",\n \"Inline module with pub(crate) scoped items.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 184,\n \"end_line_number\": 184,\n \"line_range\": [\n 184,\n 184\n ],\n \"text\": \"@brief Inline module with pub(crate) scoped items.\",\n \"text_lines\": [\n \"@brief Inline module with pub(crate) scoped items.\"\n ]\n },\n {\n \"start_line_number\": 186,\n \"end_line_number\": 186,\n \"line_range\": [\n 186,\n 186\n ],\n \"text\": \"Internal counter not exposed outside the crate.\",\n \"text_lines\": [\n \"Internal counter not exposed outside the crate.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 185,\n \"end_line_number\": 189,\n \"line_range\": [\n 185,\n 189\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"internal\",\n \"qualified_name\": \"internal\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"pub(crate) mod internal\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"COUNTER\"\n ],\n \"child_qualified_names\": [\n \"internal.COUNTER\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Inline module with pub(crate) scoped items.\",\n \"doxygen\": {\n \"brief\": [\n \"Inline module with pub(crate) scoped items.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 186,\n \"end_line_number\": 186,\n \"line_range\": [\n 186,\n 186\n ],\n \"text\": \"Internal counter not exposed outside the crate.\",\n \"text_lines\": [\n \"Internal counter not exposed outside the crate.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"COUNTER\",\n \"qualified_name\": \"internal.COUNTER\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"pub(crate) static COUNTER: std::sync::atomic::AtomicUsize =\",\n \"visibility\": \"pub\",\n \"parent_symbol_name\": \"internal\",\n \"parent_qualified_name\": \"internal\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Internal counter not exposed outside the crate.\",\n \"attached_comment_lines\": [\n \"Internal counter not exposed outside the crate.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 196,\n \"end_line_number\": 196,\n \"line_range\": [\n 196,\n 196\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"hashmap\",\n \"qualified_name\": \"hashmap\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"macro_rules! hashmap\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Usage: `hashmap!{ \\\"a\\\" => 1, \\\"b\\\" => 2 }`.\",\n \"doxygen\": {\n \"brief\": [\n \"Usage: `hashmap!{ \\\"a\\\" => 1, \\\"b\\\" => 2 }`.\"\n ]\n },\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\": 26,\n \"symbol_name\": \"my_macro\",\n \"qualified_name\": \"my_macro\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"macro_rules! my_macro\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Macro with multiple match arms for different patterns.\",\n \"attached_comment_lines\": [\n \"Macro with multiple match arms for different patterns.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 217,\n \"end_line_number\": 217,\n \"line_range\": [\n 217,\n 217\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"MY_CONST\",\n \"qualified_name\": \"MY_CONST\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"const MY_CONST: i32 = 42\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Compile-time constant for maximum retry attempts.\",\n \"doxygen\": {\n \"brief\": [\n \"Compile-time constant for maximum retry attempts.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 220,\n \"end_line_number\": 220,\n \"line_range\": [\n 220,\n 220\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"MY_STATIC\",\n \"qualified_name\": \"MY_STATIC\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"static MY_STATIC: i32 = 0\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Mutable static requiring unsafe access.\",\n \"doxygen\": {\n \"brief\": [\n \"Mutable static requiring unsafe access.\"\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\": 29,\n \"symbol_name\": \"CONFIG\",\n \"qualified_name\": \"CONFIG\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"static CONFIG: std::sync::LazyLock<HashMap<String, String>> =\",\n \"visibility\": \"priv\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Thread-safe lazy-initialized global configuration.\",\n \"doxygen\": {\n \"brief\": [\n \"Thread-safe lazy-initialized global configuration.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 229,\n \"end_line_number\": 229,\n \"line_range\": [\n 229,\n 229\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"IoResult\",\n \"qualified_name\": \"IoResult\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"pub type IoResult<T> = Result<T, io::Error>\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Alias for a common Result type with IO errors.\",\n \"doxygen\": {\n \"brief\": [\n \"Alias for a common Result type with IO errors.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 232,\n \"end_line_number\": 232,\n \"line_range\": [\n 232,\n 232\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"MyAlias\",\n \"qualified_name\": \"MyAlias\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"pub type MyAlias = i32\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Simple integer alias.\",\n \"doxygen\": {\n \"brief\": [\n \"Simple integer alias.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 240,\n \"end_line_number\": 249,\n \"line_range\": [\n 240,\n 249\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"my_function\",\n \"qualified_name\": \"my_function\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn my_function(input: Option<&str>) -> String\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param input Optional string to evaluate.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"input\",\n \"description\": \"Optional string to evaluate.\"\n }\n ],\n \"returns\": [\n \"Processed string or a fallback default.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 241,\n \"end_line_number\": 241,\n \"line_range\": [\n 241,\n 241\n ],\n \"text\": \"Early return on None\",\n \"text_lines\": [\n \"Early return on None\"\n ]\n },\n {\n \"start_line_number\": 247,\n \"end_line_number\": 247,\n \"line_range\": [\n 247,\n 247\n ],\n \"text\": \"Transform and return\",\n \"text_lines\": [\n \"Transform and return\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 254,\n \"end_line_number\": 257,\n \"line_range\": [\n 254,\n 257\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"async_function\",\n \"qualified_name\": \"async_function\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub async fn async_function() -> String\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Async function performing simulated IO.\",\n \"doxygen\": {\n \"returns\": [\n \"A greeting string after async computation.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 255,\n \"end_line_number\": 255,\n \"line_range\": [\n 255,\n 255\n ],\n \"text\": \"Simulate async work\",\n \"text_lines\": [\n \"Simulate async work\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 264,\n \"end_line_number\": 269,\n \"line_range\": [\n 264,\n 269\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"filter_with\",\n \"qualified_name\": \"filter_with\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn filter_with<F>(items: &[i32], predicate: F) -> Vec<i32>\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param items Slice of integers to filter.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"items\",\n \"description\": \"Slice of integers to filter.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"predicate\",\n \"description\": \"Closure returning true for items to keep.\"\n }\n ],\n \"returns\": [\n \"Vector of items passing the predicate.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 275,\n \"end_line_number\": 281,\n \"line_range\": [\n 275,\n 281\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"create_worker\",\n \"qualified_name\": \"create_worker\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn create_worker(use_struct: bool) -> Box<dyn MyTrait>\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param use_struct If true, returns MyStruct; otherwise panics.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"use_struct\",\n \"description\": \"If true, returns MyStruct; otherwise panics.\"\n }\n ],\n \"returns\": [\n \"A heap-allocated trait object implementing MyTrait.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": [\n {\n \"line_number\": 279,\n \"text\": \"panic!(\\\"No alternative implementation available\\\");\"\n }\n ]\n },\n {\n \"start_line_number\": 288,\n \"end_line_number\": 291,\n \"line_range\": [\n 288,\n 291\n ],\n \"declaration_order_index\": 36,\n \"symbol_name\": \"read_raw\",\n \"qualified_name\": \"read_raw\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub unsafe fn read_raw(ptr: *const i32) -> i32\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param ptr Raw pointer to an i32 value.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"ptr\",\n \"description\": \"Raw pointer to an i32 value.\"\n }\n ],\n \"returns\": [\n \"The value pointed to by ptr.\"\n ],\n \"see_also\": [\n \"fety Caller must ensure ptr is valid and aligned.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 289,\n \"end_line_number\": 289,\n \"line_range\": [\n 289,\n 289\n ],\n \"text\": \"Dereference raw pointer under unsafe contract\",\n \"text_lines\": [\n \"Dereference raw pointer under unsafe contract\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 297,\n \"end_line_number\": 299,\n \"line_range\": [\n 297,\n 299\n ],\n \"declaration_order_index\": 37,\n \"symbol_name\": \"ffi_double\",\n \"qualified_name\": \"ffi_double\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub extern \\\"C\\\" fn ffi_double(x: i32) -> i32\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param x Integer to double.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"x\",\n \"description\": \"Integer to double.\"\n }\n ],\n \"returns\": [\n \"The input multiplied by 2.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 305,\n \"end_line_number\": 315,\n \"line_range\": [\n 305,\n 315\n ],\n \"declaration_order_index\": 38,\n \"symbol_name\": \"describe_enum\",\n \"qualified_name\": \"describe_enum\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"pub fn describe_enum(val: &MyEnum) -> String\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@param val An enum variant to match against.\",\n \"doxygen\": {\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"val\",\n \"description\": \"An enum variant to match against.\"\n }\n ],\n \"returns\": [\n \"A description string for the matched variant.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 310,\n \"end_line_number\": 310,\n \"line_range\": [\n 310,\n 310\n ],\n \"text\": \"Compute magnitude for struct variant\",\n \"text_lines\": [\n \"Compute magnitude for struct variant\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 319,\n \"end_line_number\": 319,\n \"line_range\": [\n 319,\n 319\n ],\n \"declaration_order_index\": 39,\n \"symbol_name\": \"ext_tools\",\n \"qualified_name\": \"ext_tools\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"pub mod ext_tools { pub fn id() -> i32 { 1 } }\",\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\": 320,\n \"end_line_number\": 320,\n \"line_range\": [\n 320,\n 320\n ],\n \"declaration_order_index\": 40,\n \"symbol_name\": \"ext_local\",\n \"qualified_name\": \"ext_local\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"mod ext_local { pub fn ping() -> i32 { 2 } }\",\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\": 321,\n \"end_line_number\": 321,\n \"line_range\": [\n 321,\n 321\n ],\n \"declaration_order_index\": 41,\n \"symbol_name\": \"ext_api\",\n \"qualified_name\": \"ext_api\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"pub mod ext_api { pub fn pong() -> i32 { 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\": 325,\n \"end_line_number\": 325,\n \"line_range\": [\n 325,\n 325\n ],\n \"declaration_order_index\": 42,\n \"symbol_name\": \"Status\",\n \"qualified_name\": \"Status\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"pub enum Status { Ready, Busy }\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"decorator_text\": \"#[cfg(test)]\",\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 326,\n \"end_line_number\": 326,\n \"line_range\": [\n 326,\n 326\n ],\n \"declaration_order_index\": 43,\n \"symbol_name\": \"Mode\",\n \"qualified_name\": \"Mode\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"pub enum Mode { Alpha, Beta }\",\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\": 327,\n \"end_line_number\": 327,\n \"line_range\": [\n 327,\n 327\n ],\n \"declaration_order_index\": 44,\n \"symbol_name\": \"Signal\",\n \"qualified_name\": \"Signal\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"pub enum Signal { On, Off }\",\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\": 328,\n \"end_line_number\": 328,\n \"line_range\": [\n 328,\n 328\n ],\n \"declaration_order_index\": 45,\n \"symbol_name\": \"ErrorKind\",\n \"qualified_name\": \"ErrorKind\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"pub enum ErrorKind { Io, Parse }\",\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\": 329,\n \"end_line_number\": 329,\n \"line_range\": [\n 329,\n 329\n ],\n \"declaration_order_index\": 46,\n \"symbol_name\": \"ExtraNode\",\n \"qualified_name\": \"ExtraNode\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"pub struct ExtraNode { pub id: i32 }\",\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\": 330,\n \"end_line_number\": 330,\n \"line_range\": [\n 330,\n 330\n ],\n \"declaration_order_index\": 47,\n \"symbol_name\": \"InnerNode\",\n \"qualified_name\": \"InnerNode\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"struct InnerNode { id: i32 }\",\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\": 331,\n \"end_line_number\": 331,\n \"line_range\": [\n 331,\n 331\n ],\n \"declaration_order_index\": 48,\n \"symbol_name\": \"Inspectable\",\n \"qualified_name\": \"Inspectable\",\n \"symbol_kind\": \"TRAIT\",\n \"type_label\": \"TRAIT\",\n \"signature_text\": \"pub trait Inspectable { fn inspect(&self) -> i32; }\",\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\": 332,\n \"end_line_number\": 332,\n \"line_range\": [\n 332,\n 332\n ],\n \"declaration_order_index\": 49,\n \"symbol_name\": \"Named\",\n \"qualified_name\": \"Named\",\n \"symbol_kind\": \"TRAIT\",\n \"type_label\": \"TRAIT\",\n \"signature_text\": \"trait Named { fn name(&self) -> &'static str; }\",\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\": 333,\n \"end_line_number\": 333,\n \"line_range\": [\n 333,\n 333\n ],\n \"declaration_order_index\": 50,\n \"symbol_name\": \"Executable\",\n \"qualified_name\": \"Executable\",\n \"symbol_kind\": \"TRAIT\",\n \"type_label\": \"TRAIT\",\n \"signature_text\": \"pub trait Executable { fn exec(&self) -> i32; }\",\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\": 334,\n \"end_line_number\": 334,\n \"line_range\": [\n 334,\n 334\n ],\n \"declaration_order_index\": 51,\n \"symbol_name\": \"ExtraNode\",\n \"qualified_name\": \"ExtraNode\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"impl Inspectable for ExtraNode { fn inspect(&self) -> i32 { self.id } }\",\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\": 335,\n \"end_line_number\": 335,\n \"line_range\": [\n 335,\n 335\n ],\n \"declaration_order_index\": 52,\n \"symbol_name\": \"InnerNode\",\n \"qualified_name\": \"InnerNode\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"impl Named for InnerNode { fn name(&self) -> &'static str { \\\"inner\\\" } }\",\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\": 336,\n \"end_line_number\": 336,\n \"line_range\": [\n 336,\n 336\n ],\n \"declaration_order_index\": 53,\n \"symbol_name\": \"MyEnum\",\n \"qualified_name\": \"MyEnum\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"impl Executable for MyEnum { fn exec(&self) -> i32 { 1 } }\",\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\": 337,\n \"end_line_number\": 337,\n \"line_range\": [\n 337,\n 337\n ],\n \"declaration_order_index\": 54,\n \"symbol_name\": \"ext_macro\",\n \"qualified_name\": \"ext_macro\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"macro_rules! ext_macro { () => { 42 } }\",\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\": 338,\n \"end_line_number\": 338,\n \"line_range\": [\n 338,\n 338\n ],\n \"declaration_order_index\": 55,\n \"symbol_name\": \"trace_macro\",\n \"qualified_name\": \"trace_macro\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"macro_rules! trace_macro { ($v:expr) => { $v }; }\",\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\": 339,\n \"end_line_number\": 339,\n \"line_range\": [\n 339,\n 339\n ],\n \"declaration_order_index\": 56,\n \"symbol_name\": \"build_pair\",\n \"qualified_name\": \"build_pair\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"macro_rules! build_pair { ($a:expr,$b:expr) => { ($a,$b) }; }\",\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\": 340,\n \"end_line_number\": 340,\n \"line_range\": [\n 340,\n 340\n ],\n \"declaration_order_index\": 57,\n \"symbol_name\": \"LIMIT\",\n \"qualified_name\": \"LIMIT\",\n \"symbol_kind\": \"CONSTANT\",\n \"type_label\": \"CONSTANT\",\n \"signature_text\": \"pub const LIMIT: usize = 8\",\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\": 341,\n \"end_line_number\": 341,\n \"line_range\": [\n 341,\n 341\n ],\n \"declaration_order_index\": 58,\n \"symbol_name\": \"ItemId\",\n \"qualified_name\": \"ItemId\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"pub type ItemId = u64\",\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\": 342,\n \"end_line_number\": 342,\n \"line_range\": [\n 342,\n 342\n ],\n \"declaration_order_index\": 59,\n \"symbol_name\": \"AliasValue\",\n \"qualified_name\": \"AliasValue\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"type AliasValue = i32\",\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\": 350,\n \"end_line_number\": 350,\n \"line_range\": [\n 350,\n 350\n ],\n \"declaration_order_index\": 60,\n \"symbol_name\": \"req_cover_rust_1\",\n \"qualified_name\": \"req_cover_rust_1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn req_cover_rust_1(value: i32) -> i32 { 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\": 357,\n \"end_line_number\": 357,\n \"line_range\": [\n 357,\n 357\n ],\n \"declaration_order_index\": 61,\n \"symbol_name\": \"req_cover_rust_2\",\n \"qualified_name\": \"req_cover_rust_2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn req_cover_rust_2(value: i32) -> i32 { 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\": 364,\n \"end_line_number\": 364,\n \"line_range\": [\n 364,\n 364\n ],\n \"declaration_order_index\": 62,\n \"symbol_name\": \"req_cover_rust_3\",\n \"qualified_name\": \"req_cover_rust_3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn req_cover_rust_3(value: i32) -> i32 { 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\": 371,\n \"end_line_number\": 371,\n \"line_range\": [\n 371,\n 371\n ],\n \"declaration_order_index\": 63,\n \"symbol_name\": \"req_cover_rust_4\",\n \"qualified_name\": \"req_cover_rust_4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn req_cover_rust_4(value: i32) -> i32 { 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\": 378,\n \"end_line_number\": 378,\n \"line_range\": [\n 378,\n 378\n ],\n \"declaration_order_index\": 64,\n \"symbol_name\": \"req_cover_rust_5\",\n \"qualified_name\": \"req_cover_rust_5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"fn req_cover_rust_5(value: i32) -> i32 { 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 Comprehensive Rust test fixture for parser stress-testing.\",\n \"text_lines\": [\n \"@brief Comprehensive Rust test fixture for parser stress-testing.\"\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 lifetimes, closures, trait objects, async traits,\",\n \"text_lines\": [\n \"@details Covers lifetimes, closures, trait objects, async traits,\"\n ]\n },\n {\n \"start_line_number\": 4,\n \"end_line_number\": 4,\n \"line_range\": [\n 4,\n 4\n ],\n \"text\": \"unsafe blocks, pattern matching, generic impls, where clauses,\",\n \"text_lines\": [\n \"unsafe blocks, pattern matching, generic impls, where clauses,\"\n ]\n },\n {\n \"start_line_number\": 5,\n \"end_line_number\": 5,\n \"line_range\": [\n 5,\n 5\n ],\n \"text\": \"pub(crate) visibility, and advanced macro rules.\",\n \"text_lines\": [\n \"pub(crate) visibility, and advanced macro rules.\"\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\": 7,\n \"end_line_number\": 8,\n \"line_range\": [\n 7,\n 8\n ],\n \"text\": \"Multi-line comment\",\n \"text_lines\": [\n \"Multi-line\",\n \"comment\"\n ]\n },\n {\n \"start_line_number\": 14,\n \"end_line_number\": 14,\n \"line_range\": [\n 14,\n 14\n ],\n \"text\": \"── Struct with derive and lifetimes ───────────────────────────────────\",\n \"text_lines\": [\n \"── Struct with derive and lifetimes ───────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 16,\n \"end_line_number\": 16,\n \"line_range\": [\n 16,\n 16\n ],\n \"text\": \"A simple struct for testing derive macros and field parsing.\",\n \"text_lines\": [\n \"A simple struct for testing derive macros and field parsing.\"\n ]\n },\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"text\": \"@brief Primary integer field.\",\n \"text_lines\": [\n \"@brief Primary integer field.\"\n ]\n },\n {\n \"start_line_number\": 25,\n \"end_line_number\": 25,\n \"line_range\": [\n 25,\n 25\n ],\n \"text\": \"Struct with lifetime parameter for borrowed data.\",\n \"text_lines\": [\n \"Struct with lifetime parameter for borrowed data.\"\n ]\n },\n {\n \"start_line_number\": 26,\n \"end_line_number\": 26,\n \"line_range\": [\n 26,\n 26\n ],\n \"text\": \"\",\n \"text_lines\": []\n },\n {\n \"start_line_number\": 31,\n \"end_line_number\": 31,\n \"line_range\": [\n 31,\n 31\n ],\n \"text\": \"@brief Reference to externally-owned string data.\",\n \"text_lines\": [\n \"@brief Reference to externally-owned string data.\"\n ]\n },\n {\n \"start_line_number\": 33,\n \"end_line_number\": 33,\n \"line_range\": [\n 33,\n 33\n ],\n \"text\": \"@brief Numeric tag for identification.\",\n \"text_lines\": [\n \"@brief Numeric tag for identification.\"\n ]\n },\n {\n \"start_line_number\": 37,\n \"end_line_number\": 37,\n \"line_range\": [\n 37,\n 37\n ],\n \"text\": \"Generic struct with multiple type parameters and bounds.\",\n \"text_lines\": [\n \"Generic struct with multiple type parameters and bounds.\"\n ]\n },\n {\n \"start_line_number\": 42,\n \"end_line_number\": 42,\n \"line_range\": [\n 42,\n 42\n ],\n \"text\": \"@brief Internal hash map storage.\",\n \"text_lines\": [\n \"@brief Internal hash map storage.\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"── Enum with data variants ────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Enum with data variants ────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 52,\n \"end_line_number\": 52,\n \"line_range\": [\n 52,\n 52\n ],\n \"text\": \"@brief Unit variant carrying no data.\",\n \"text_lines\": [\n \"@brief Unit variant carrying no data.\"\n ]\n },\n {\n \"start_line_number\": 54,\n \"end_line_number\": 54,\n \"line_range\": [\n 54,\n 54\n ],\n \"text\": \"@brief Tuple variant holding a string payload.\",\n \"text_lines\": [\n \"@brief Tuple variant holding a string payload.\"\n ]\n },\n {\n \"start_line_number\": 56,\n \"end_line_number\": 56,\n \"line_range\": [\n 56,\n 56\n ],\n \"text\": \"@brief Struct variant with named fields.\",\n \"text_lines\": [\n \"@brief Struct variant with named fields.\"\n ]\n },\n {\n \"start_line_number\": 60,\n \"end_line_number\": 60,\n \"line_range\": [\n 60,\n 60\n ],\n \"text\": \"── Trait and impls ────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Trait and impls ────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 69,\n \"end_line_number\": 69,\n \"line_range\": [\n 69,\n 69\n ],\n \"text\": \"Execute work with a context parameter.\",\n \"text_lines\": [\n \"Execute work with a context parameter.\"\n ]\n },\n {\n \"start_line_number\": 74,\n \"end_line_number\": 74,\n \"line_range\": [\n 74,\n 74\n ],\n \"text\": \"Default implementation logs and delegates\",\n \"text_lines\": [\n \"Default implementation logs and delegates\"\n ]\n },\n {\n \"start_line_number\": 81,\n \"end_line_number\": 81,\n \"line_range\": [\n 81,\n 81\n ],\n \"text\": \"Trait with associated type and lifetime.\",\n \"text_lines\": [\n \"Trait with associated type and lifetime.\"\n ]\n },\n {\n \"start_line_number\": 89,\n \"end_line_number\": 89,\n \"line_range\": [\n 89,\n 89\n ],\n \"text\": \"Parse input bytes into the associated output type.\",\n \"text_lines\": [\n \"Parse input bytes into the associated output type.\"\n ]\n },\n {\n \"start_line_number\": 104,\n \"end_line_number\": 104,\n \"line_range\": [\n 104,\n 104\n ],\n \"text\": \"Create a MyStruct with a specific value.\",\n \"text_lines\": [\n \"Create a MyStruct with a specific value.\"\n ]\n },\n {\n \"start_line_number\": 119,\n \"end_line_number\": 119,\n \"line_range\": [\n 119,\n 119\n ],\n \"text\": \"Conditionally update the field.\",\n \"text_lines\": [\n \"Conditionally update the field.\"\n ]\n },\n {\n \"start_line_number\": 129,\n \"end_line_number\": 129,\n \"line_range\": [\n 129,\n 129\n ],\n \"text\": \"Return the previous value wrapped in Some\",\n \"text_lines\": [\n \"Return the previous value wrapped in Some\"\n ]\n },\n {\n \"start_line_number\": 142,\n \"end_line_number\": 142,\n \"line_range\": [\n 142,\n 142\n ],\n \"text\": \"Format MyStruct for user-facing display.\",\n \"text_lines\": [\n \"Format MyStruct for user-facing display.\"\n ]\n },\n {\n \"start_line_number\": 158,\n \"end_line_number\": 158,\n \"line_range\": [\n 158,\n 158\n ],\n \"text\": \"Insert a key-value pair, returning the old value if present.\",\n \"text_lines\": [\n \"Insert a key-value pair, returning the old value if present.\"\n ]\n },\n {\n \"start_line_number\": 159,\n \"end_line_number\": 159,\n \"line_range\": [\n 159,\n 159\n ],\n \"text\": \"\",\n \"text_lines\": []\n },\n {\n \"start_line_number\": 167,\n \"end_line_number\": 167,\n \"line_range\": [\n 167,\n 167\n ],\n \"text\": \"Get a cloned value by key reference.\",\n \"text_lines\": [\n \"Get a cloned value by key reference.\"\n ]\n },\n {\n \"start_line_number\": 191,\n \"end_line_number\": 191,\n \"line_range\": [\n 191,\n 191\n ],\n \"text\": \"── Macro rules ────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Macro rules ────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 234,\n \"end_line_number\": 234,\n \"line_range\": [\n 234,\n 234\n ],\n \"text\": \"── Functions ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Functions ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 236,\n \"end_line_number\": 236,\n \"line_range\": [\n 236,\n 236\n ],\n \"text\": \"Top-level function demonstrating multiple return paths.\",\n \"text_lines\": [\n \"Top-level function demonstrating multiple return paths.\"\n ]\n },\n {\n \"start_line_number\": 241,\n \"end_line_number\": 241,\n \"line_range\": [\n 241,\n 241\n ],\n \"text\": \"Early return on None\",\n \"text_lines\": [\n \"Early return on None\"\n ]\n },\n {\n \"start_line_number\": 247,\n \"end_line_number\": 247,\n \"line_range\": [\n 247,\n 247\n ],\n \"text\": \"Transform and return\",\n \"text_lines\": [\n \"Transform and return\"\n ]\n },\n {\n \"start_line_number\": 255,\n \"end_line_number\": 255,\n \"line_range\": [\n 255,\n 255\n ],\n \"text\": \"Simulate async work\",\n \"text_lines\": [\n \"Simulate async work\"\n ]\n },\n {\n \"start_line_number\": 259,\n \"end_line_number\": 259,\n \"line_range\": [\n 259,\n 259\n ],\n \"text\": \"Function accepting a closure with trait bounds.\",\n \"text_lines\": [\n \"Function accepting a closure with trait bounds.\"\n ]\n },\n {\n \"start_line_number\": 260,\n \"end_line_number\": 260,\n \"line_range\": [\n 260,\n 260\n ],\n \"text\": \"\",\n \"text_lines\": []\n },\n {\n \"start_line_number\": 271,\n \"end_line_number\": 271,\n \"line_range\": [\n 271,\n 271\n ],\n \"text\": \"Function returning a boxed trait object.\",\n \"text_lines\": [\n \"Function returning a boxed trait object.\"\n ]\n },\n {\n \"start_line_number\": 283,\n \"end_line_number\": 283,\n \"line_range\": [\n 283,\n 283\n ],\n \"text\": \"Unsafe function wrapping raw pointer dereference.\",\n \"text_lines\": [\n \"Unsafe function wrapping raw pointer dereference.\"\n ]\n },\n {\n \"start_line_number\": 284,\n \"end_line_number\": 284,\n \"line_range\": [\n 284,\n 284\n ],\n \"text\": \"\",\n \"text_lines\": []\n },\n {\n \"start_line_number\": 289,\n \"end_line_number\": 289,\n \"line_range\": [\n 289,\n 289\n ],\n \"text\": \"Dereference raw pointer under unsafe contract\",\n \"text_lines\": [\n \"Dereference raw pointer under unsafe contract\"\n ]\n },\n {\n \"start_line_number\": 293,\n \"end_line_number\": 293,\n \"line_range\": [\n 293,\n 293\n ],\n \"text\": \"Extern \\\"C\\\" function for FFI interoperability.\",\n \"text_lines\": [\n \"Extern \\\"C\\\" function for FFI interoperability.\"\n ]\n },\n {\n \"start_line_number\": 301,\n \"end_line_number\": 301,\n \"line_range\": [\n 301,\n 301\n ],\n \"text\": \"Function demonstrating exhaustive pattern matching.\",\n \"text_lines\": [\n \"Function demonstrating exhaustive pattern matching.\"\n ]\n },\n {\n \"start_line_number\": 310,\n \"end_line_number\": 310,\n \"line_range\": [\n 310,\n 310\n ],\n \"text\": \"Compute magnitude for struct variant\",\n \"text_lines\": [\n \"Compute magnitude for struct variant\"\n ]\n },\n {\n \"start_line_number\": 317,\n \"end_line_number\": 317,\n \"line_range\": [\n 317,\n 317\n ],\n \"text\": \"coverage extension block\",\n \"text_lines\": [\n \"coverage extension block\"\n ]\n },\n {\n \"start_line_number\": 344,\n \"end_line_number\": 344,\n \"line_range\": [\n 344,\n 344\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 345,\n \"end_line_number\": 345,\n \"line_range\": [\n 345,\n 345\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\": 346,\n \"end_line_number\": 346,\n \"line_range\": [\n 346,\n 346\n ],\n \"text\": \"@brief Coverage helper construct 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"text\": \"@REQ-COVER-SRS-231 block 2\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 2\"\n ]\n },\n {\n \"start_line_number\": 353,\n \"end_line_number\": 353,\n \"line_range\": [\n 353,\n 353\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 359,\n \"end_line_number\": 359,\n \"line_range\": [\n 359,\n 359\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\": 360,\n \"end_line_number\": 360,\n \"line_range\": [\n 360,\n 360\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 366,\n \"end_line_number\": 366,\n \"line_range\": [\n 366,\n 366\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\": 367,\n \"end_line_number\": 367,\n \"line_range\": [\n 367,\n 367\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 373,\n \"end_line_number\": 373,\n \"line_range\": [\n 373,\n 373\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\": 374,\n \"end_line_number\": 374,\n \"line_range\": [\n 374,\n 374\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 380,\n \"end_line_number\": 380,\n \"line_range\": [\n 380,\n 380\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_rust.rs | Rust | 380L | 65 symbols | 5 imports | 158 comments\n> Path: `tests/fixtures/fixture_rust.rs`\n\n## Imports\n```\nuse std::io;\nuse std::collections::HashMap;\nuse std::fmt::{self, Display, Formatter};\nuse std::sync::{Arc, Mutex};\nuse std::time::Duration;\n```\n\n## Definitions\n\n### struct `pub struct MyStruct` `#[derive(Debug, Clone, PartialEq)]` (L20-23)\n- @brief Primary integer field.\n\n### struct `pub struct BorrowedData<'a>` `#[derive(Debug)]` (L30-35)\n- @brief Reference to externally-owned string data.\n- @brief Numeric tag for identification.\n\n### struct `pub struct TypedMap<K: std::hash::Hash + Eq, V: Clone>` (L41-44)\n- @brief Internal hash map storage.\n\n### enum `pub enum MyEnum` (L51-58)\n- @brief Represents either structured data, a simple flag, or a pair.\n- @brief Unit variant carrying no data.\n- @brief Tuple variant holding a string payload.\n\n### trait `pub trait MyTrait` (L65-79)\n- @brief Implementors must provide both sync and optional async execution.\n- fn `fn do_work(&self)` `priv` (L67-78)\n- fn `fn do_work_with_ctx(&self, ctx: &str) -> bool` `priv` (L73-78)\n - @param ctx Contextual string passed to the implementation.\n - @return True if work completed successfully.\n\n### trait `pub trait Parser<'a>` (L85-94)\n- @brief The output type produced by parsing.\n- type `type Output` `priv` (L87)\n - @brief The output type produced by parsing.\n\n### fn `fn parse(&self, input: &'a [u8]) -> Result<Self::Output, io::Error>` `priv` (L93-96)\n- @param input Byte slice to parse.\n- @return Parsed output or an IO error.\n\n### impl `impl MyStruct` `priv` (L96-132)\n- @return A MyStruct with field initialized to 0.\n- fn `fn new() -> Self` `priv` (L100-102)\n - @return A MyStruct with field initialized to 0.\n- fn `pub fn with_value(val: i32) -> Self` (L108-110)\n - @param val The initial field value.\n - @return A new MyStruct.\n- fn `pub fn value(&self) -> i32` (L115-117)\n - @return The stored integer.\n- fn `pub fn try_update(&mut self, new_val: i32) -> Option<i32>` (L123-131)\n - @param new_val New value to set.\n - @return Old value if updated, None if new_val equals current.\n\n### impl `impl MyTrait for MyStruct` `priv` (L134-139)\n- fn `fn do_work(&self)` `priv` (L136-138)\n\n### impl `impl Display for MyStruct` `priv` (L141-149)\n- @param f Formatter to write into.\n- fn `fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result` `priv` (L146-148)\n - @param f Formatter to write into.\n - @return fmt::Result indicating success or failure.\n\n### impl `impl<K, V> TypedMap<K, V>` `priv` (L153-177)\n- fn `pub fn insert(&mut self, key: K, value: V) -> Option<V>` (L163-165)\n - @param key The lookup key.\n - @param value The value to associate with the key.\n - @return Previous value for this key, or None.\n- fn `pub fn get_or_default(&self, key: &K) -> V` (L171-176)\n - @param key The key to look up.\n - @return Cloned value if found, or the default for V.\n\n### mod `pub mod my_module` (L182-189)\n- @brief Sub-module containing utility helpers.\n- @brief Inline module with pub(crate) scoped items.\n\n### mod `pub(crate) mod internal` (L185-189)\n- @brief Inline module with pub(crate) scoped items.\n- const `pub(crate) static COUNTER: std::sync::atomic::AtomicUsize =` (L187)\n\n- macro `macro_rules! hashmap {` `priv` (L196)\n- @brief Usage: `hashmap!{ \"a\" => 1, \"b\" => 2 }`.\n- macro `macro_rules! my_macro {` `priv` (L205)\n- const `const MY_CONST: i32 = 42;` `priv` (L217)\n- @brief Compile-time constant for maximum retry attempts.\n- const `static MY_STATIC: i32 = 0;` `priv` (L220)\n- @brief Mutable static requiring unsafe access.\n- const `static CONFIG: std::sync::LazyLock<HashMap<String, String>> =` `priv` (L223)\n- @brief Thread-safe lazy-initialized global configuration.\n- type `pub type IoResult<T> = Result<T, io::Error>;` (L229)\n- @brief Alias for a common Result type with IO errors.\n- type `pub type MyAlias = i32;` (L232)\n- @brief Simple integer alias.\n### fn `pub fn my_function(input: Option<&str>) -> String` (L240-249)\n- @param input Optional string to evaluate.\n- @return Processed string or a fallback default.\n\n### fn `pub async fn async_function() -> String` (L254-257)\n- @return A greeting string after async computation.\n\n### fn `pub fn filter_with<F>(items: &[i32], predicate: F) -> Vec<i32>` (L264-269)\n- @param items Slice of integers to filter.\n- @param predicate Closure returning true for items to keep.\n- @return Vector of items passing the predicate.\n\n### fn `pub fn create_worker(use_struct: bool) -> Box<dyn MyTrait>` (L275-281)\n- @param use_struct If true, returns MyStruct; otherwise panics.\n- @return A heap-allocated trait object implementing MyTrait.\n\n### fn `pub unsafe fn read_raw(ptr: *const i32) -> i32` (L288-291)\n- @param ptr Raw pointer to an i32 value.\n- @return The value pointed to by ptr.\n- @sa fety Caller must ensure ptr is valid and aligned.\n\n### fn `pub extern \"C\" fn ffi_double(x: i32) -> i32` (L297-299)\n- @param x Integer to double.\n- @return The input multiplied by 2.\n\n### fn `pub fn describe_enum(val: &MyEnum) -> String` (L305-315)\n- @param val An enum variant to match against.\n- @return A description string for the matched variant.\n\n- mod `pub mod ext_tools { pub fn id() -> i32 { 1 } }` (L319)\n- mod `mod ext_local { pub fn ping() -> i32 { 2 } }` `priv` (L320)\n- mod `pub mod ext_api { pub fn pong() -> i32 { 3 } }` (L321)\n- enum `pub enum Status { Ready, Busy }` (L325)\n- enum `pub enum Mode { Alpha, Beta }` (L326)\n- enum `pub enum Signal { On, Off }` (L327)\n- enum `pub enum ErrorKind { Io, Parse }` (L328)\n- struct `pub struct ExtraNode { pub id: i32 }` (L329)\n- struct `struct InnerNode { id: i32 }` `priv` (L330)\n- trait `pub trait Inspectable { fn inspect(&self) -> i32; }` (L331)\n- trait `trait Named { fn name(&self) -> &'static str; }` `priv` (L332)\n- trait `pub trait Executable { fn exec(&self) -> i32; }` (L333)\n- impl `impl Inspectable for ExtraNode { fn inspect(&self) -> i32 { self.id } }` `priv` (L334)\n- impl `impl Named for InnerNode { fn name(&self) -> &'static str { \"inner\" } }` `priv` (L335)\n- impl `impl Executable for MyEnum { fn exec(&self) -> i32 { 1 } }` `priv` (L336)\n- macro `macro_rules! ext_macro { () => { 42 } }` `priv` (L337)\n- macro `macro_rules! trace_macro { ($v:expr) => { $v }; }` `priv` (L338)\n- macro `macro_rules! build_pair { ($a:expr,$b:expr) => { ($a,$b) }; }` `priv` (L339)\n- const `pub const LIMIT: usize = 8;` (L340)\n- type `pub type ItemId = u64;` (L341)\n- type `type AliasValue = i32;` `priv` (L342)\n- fn `fn req_cover_rust_1(value: i32) -> i32 { value + 1 }` `priv` (L350)\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 `fn req_cover_rust_2(value: i32) -> i32 { value + 2 }` `priv` (L357)\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 `fn req_cover_rust_3(value: i32) -> i32 { value + 3 }` `priv` (L364)\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 `fn req_cover_rust_4(value: i32) -> i32 { value + 4 }` `priv` (L371)\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 `fn req_cover_rust_5(value: i32) -> i32 { value + 5 }` `priv` (L378)\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|`MyStruct`|struct|pub|20-23|pub struct MyStruct|\n|`BorrowedData`|struct|pub|30-35|pub struct BorrowedData<'a>|\n|`TypedMap`|struct|pub|41-44|pub struct TypedMap<K: std::hash::Hash + Eq, V: Clone>|\n|`MyEnum`|enum|pub|51-58|pub enum MyEnum|\n|`MyTrait`|trait|pub|65-79|pub trait MyTrait|\n|`MyTrait.do_work`|fn|priv|67-78|fn do_work(&self)|\n|`MyTrait.do_work_with_ctx`|fn|priv|73-78|fn do_work_with_ctx(&self, ctx: &str) -> bool|\n|`Parser`|trait|pub|85-94|pub trait Parser<'a>|\n|`Parser.Output`|type|priv|87||\n|`parse`|fn|priv|93-96|fn parse(&self, input: &'a [u8]) -> Result<Self::Output, ...|\n|`MyStruct`|impl|priv|96-132|impl MyStruct|\n|`MyStruct.new`|fn|priv|100-102|fn new() -> Self|\n|`MyStruct.with_value`|fn|pub|108-110|pub fn with_value(val: i32) -> Self|\n|`MyStruct.value`|fn|pub|115-117|pub fn value(&self) -> i32|\n|`MyStruct.try_update`|fn|pub|123-131|pub fn try_update(&mut self, new_val: i32) -> Option<i32>|\n|`MyStruct`|impl|priv|134-139|impl MyTrait for MyStruct|\n|`MyStruct.do_work`|fn|priv|136-138|fn do_work(&self)|\n|`MyStruct`|impl|priv|141-149|impl Display for MyStruct|\n|`MyStruct.fmt`|fn|priv|146-148|fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result|\n|`TypedMap`|impl|priv|153-177|impl<K, V> TypedMap<K, V>|\n|`TypedMap.insert`|fn|pub|163-165|pub fn insert(&mut self, key: K, value: V) -> Option<V>|\n|`TypedMap.get_or_default`|fn|pub|171-176|pub fn get_or_default(&self, key: &K) -> V|\n|`my_module`|mod|pub|182-189||\n|`internal`|mod|pub|185-189||\n|`internal.COUNTER`|const|pub|187||\n|`hashmap`|macro|priv|196||\n|`my_macro`|macro|priv|205||\n|`MY_CONST`|const|priv|217||\n|`MY_STATIC`|const|priv|220||\n|`CONFIG`|const|priv|223||\n|`IoResult`|type|pub|229||\n|`MyAlias`|type|pub|232||\n|`my_function`|fn|pub|240-249|pub fn my_function(input: Option<&str>) -> String|\n|`async_function`|fn|pub|254-257|pub async fn async_function() -> String|\n|`filter_with`|fn|pub|264-269|pub fn filter_with<F>(items: &[i32], predicate: F) -> Vec...|\n|`create_worker`|fn|pub|275-281|pub fn create_worker(use_struct: bool) -> Box<dyn MyTrait>|\n|`read_raw`|fn|pub|288-291|pub unsafe fn read_raw(ptr: *const i32) -> i32|\n|`ffi_double`|fn|pub|297-299|pub extern \"C\" fn ffi_double(x: i32) -> i32|\n|`describe_enum`|fn|pub|305-315|pub fn describe_enum(val: &MyEnum) -> String|\n|`ext_tools`|mod|pub|319||\n|`ext_local`|mod|priv|320||\n|`ext_api`|mod|pub|321||\n|`Status`|enum|pub|325|pub enum Status { Ready, Busy }|\n|`Mode`|enum|pub|326|pub enum Mode { Alpha, Beta }|\n|`Signal`|enum|pub|327|pub enum Signal { On, Off }|\n|`ErrorKind`|enum|pub|328|pub enum ErrorKind { Io, Parse }|\n|`ExtraNode`|struct|pub|329|pub struct ExtraNode { pub id: i32 }|\n|`InnerNode`|struct|priv|330|struct InnerNode { id: i32 }|\n|`Inspectable`|trait|pub|331|pub trait Inspectable { fn inspect(&self) -> i32; }|\n|`Named`|trait|priv|332|trait Named { fn name(&self) -> &'static str; }|\n|`Executable`|trait|pub|333|pub trait Executable { fn exec(&self) -> i32; }|\n|`ExtraNode`|impl|priv|334|impl Inspectable for ExtraNode { fn inspect(&self) -> i32...|\n|`InnerNode`|impl|priv|335|impl Named for InnerNode { fn name(&self) -> &'static str...|\n|`MyEnum`|impl|priv|336|impl Executable for MyEnum { fn exec(&self) -> i32 { 1 } }|\n|`ext_macro`|macro|priv|337||\n|`trace_macro`|macro|priv|338||\n|`build_pair`|macro|priv|339||\n|`LIMIT`|const|pub|340||\n|`ItemId`|type|pub|341||\n|`AliasValue`|type|priv|342||\n|`req_cover_rust_1`|fn|priv|350|fn req_cover_rust_1(value: i32) -> i32 { value + 1 }|\n|`req_cover_rust_2`|fn|priv|357|fn req_cover_rust_2(value: i32) -> i32 { value + 2 }|\n|`req_cover_rust_3`|fn|priv|364|fn req_cover_rust_3(value: i32) -> i32 { value + 3 }|\n|`req_cover_rust_4`|fn|priv|371|fn req_cover_rust_4(value: i32) -> i32 { value + 4 }|\n|`req_cover_rust_5`|fn|priv|378|fn req_cover_rust_5(value: i32) -> i32 { value + 5 }|\n\n",
4
4
  "stderr": ""
5
5
  }