pi-usereq 0.7.0 → 0.11.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 (773) hide show
  1. package/.gitignore +2 -0
  2. package/CHANGELOG.md +24 -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 +5214 -24470
  21. package/pi-usereq/docs/REQUIREMENTS.md +307 -170
  22. package/pi-usereq/docs/WORKFLOW.md +334 -316
  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 +314 -59
  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 +1816 -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/runtime-project-paths.ts +21 -1
  713. package/src/core/settings-menu.ts +12 -6
  714. package/src/core/source-analyzer.ts +27 -7
  715. package/src/core/token-counter.ts +6 -76
  716. package/src/core/tool-runner.ts +38 -317
  717. package/src/index.ts +2047 -947
  718. package/src/resources/instructions/git_commit.md +16 -0
  719. package/src/resources/instructions/git_read-only.md +2 -0
  720. package/src/resources/prompts/analyze.md +12 -13
  721. package/src/resources/prompts/change.md +21 -59
  722. package/src/resources/prompts/check.md +14 -16
  723. package/src/resources/prompts/cover.md +21 -59
  724. package/src/resources/prompts/create.md +5 -4
  725. package/src/resources/prompts/fix.md +20 -58
  726. package/src/resources/prompts/flowchart.md +14 -49
  727. package/src/resources/prompts/implement.md +14 -50
  728. package/src/resources/prompts/new.md +20 -58
  729. package/src/resources/prompts/readme.md +14 -50
  730. package/src/resources/prompts/recreate.md +14 -45
  731. package/src/resources/prompts/refactor.md +20 -58
  732. package/src/resources/prompts/references.md +7 -43
  733. package/src/resources/prompts/renumber.md +8 -39
  734. package/src/resources/prompts/workflow.md +14 -50
  735. package/src/resources/prompts/write.md +5 -4
  736. package/tests/attended-results-scenarios.ts +30 -136
  737. package/tests/cli-command-option-parity.test.ts +148 -192
  738. package/tests/debug-extension-harness.test.ts +77 -70
  739. package/tests/extension-registration.test.ts +3205 -658
  740. package/tests/fixtures_attended_results/project/compress-line-numbers.json +1 -1
  741. package/tests/fixtures_attended_results/project/compress.json +1 -1
  742. package/tests/fixtures_attended_results/project/find-line-numbers.json +1 -1
  743. package/tests/fixtures_attended_results/project/find.json +1 -1
  744. package/tests/fixtures_attended_results/project/references.json +2 -2
  745. package/tests/fixtures_attended_results/standalone/files-compress/fixture_go.go.json +1 -1
  746. package/tests/fixtures_attended_results/standalone/files-compress-line-numbers/fixture_go.go.json +1 -1
  747. package/tests/fixtures_attended_results/standalone/files-find/fixture_go.go.json +1 -1
  748. package/tests/fixtures_attended_results/standalone/files-find-line-numbers/fixture_go.go.json +1 -1
  749. package/tests/fixtures_attended_results/standalone/files-references/fixture_c.c.json +1 -1
  750. package/tests/fixtures_attended_results/standalone/files-references/fixture_cpp.cpp.json +1 -1
  751. package/tests/fixtures_attended_results/standalone/files-references/fixture_csharp.cs.json +1 -1
  752. package/tests/fixtures_attended_results/standalone/files-references/fixture_elixir.ex.json +1 -1
  753. package/tests/fixtures_attended_results/standalone/files-references/fixture_go.go.json +1 -1
  754. package/tests/fixtures_attended_results/standalone/files-references/fixture_haskell.hs.json +1 -1
  755. package/tests/fixtures_attended_results/standalone/files-references/fixture_java.java.json +1 -1
  756. package/tests/fixtures_attended_results/standalone/files-references/fixture_javascript.js.json +1 -1
  757. package/tests/fixtures_attended_results/standalone/files-references/fixture_kotlin.kt.json +1 -1
  758. package/tests/fixtures_attended_results/standalone/files-references/fixture_lua.lua.json +1 -1
  759. package/tests/fixtures_attended_results/standalone/files-references/fixture_perl.pl.json +1 -1
  760. package/tests/fixtures_attended_results/standalone/files-references/fixture_php.php.json +1 -1
  761. package/tests/fixtures_attended_results/standalone/files-references/fixture_python.py.json +1 -1
  762. package/tests/fixtures_attended_results/standalone/files-references/fixture_ruby.rb.json +1 -1
  763. package/tests/fixtures_attended_results/standalone/files-references/fixture_rust.rs.json +1 -1
  764. package/tests/fixtures_attended_results/standalone/files-references/fixture_scala.scala.json +1 -1
  765. package/tests/fixtures_attended_results/standalone/files-references/fixture_shell.sh.json +1 -1
  766. package/tests/fixtures_attended_results/standalone/files-references/fixture_swift.swift.json +1 -1
  767. package/tests/fixtures_attended_results/standalone/files-references/fixture_typescript.ts.json +1 -1
  768. package/tests/fixtures_attended_results/standalone/files-references/fixture_zig.zig.json +1 -1
  769. package/tests/helpers.ts +24 -15
  770. package/tests/oracle-project.test.ts +29 -30
  771. package/tests/oracle-standalone.test.ts +27 -1
  772. package/tests/prompt-rendering.test.ts +40 -9
  773. 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_elixir.ex\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_elixir.ex\"\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\": 66,\n \"total_import_count\": 5,\n \"total_comment_count\": 57,\n \"total_standalone_comment_count\": 26,\n \"total_doxygen_field_count\": 33,\n \"symbol_kind_counts\": {\n \"FUNCTION\": 40,\n \"IMPL\": 6,\n \"MODULE\": 9,\n \"PROTOCOL\": 5,\n \"STRUCT\": 6\n }\n },\n \"repository\": {\n \"root_directory_path\": \"<ROOT>\",\n \"source_directory_paths\": [],\n \"file_count\": 1,\n \"file_canonical_paths\": [\n \"tests/fixtures/fixture_elixir.ex\"\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_elixir.ex\",\n \"relative_path\": \"tests/fixtures/fixture_elixir.ex\",\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\": 409,\n \"line_range\": [\n 1,\n 409\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_elixir.ex\",\n \"canonical_path\": \"tests/fixtures/fixture_elixir.ex\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_elixir.ex\",\n \"file_name\": \"fixture_elixir.ex\",\n \"file_extension\": \".ex\",\n \"language_id\": \"elixir\",\n \"language_name\": \"Elixir\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 5,\n \"symbol_count\": 66,\n \"comment_count\": 57,\n \"standalone_comment_count\": 26,\n \"doxygen_field_count\": 33,\n \"file_description_text\": \"@file fixture_elixir.ex\",\n \"imports\": [\n {\n \"start_line_number\": 18,\n \"end_line_number\": 18,\n \"line_range\": [\n 18,\n 18\n ],\n \"import_name\": \"GenServer\",\n \"statement_text\": \"use GenServer\"\n },\n {\n \"start_line_number\": 19,\n \"end_line_number\": 19,\n \"line_range\": [\n 19,\n 19\n ],\n \"import_name\": \"Enum\",\n \"statement_text\": \"import Enum\"\n },\n {\n \"start_line_number\": 20,\n \"end_line_number\": 20,\n \"line_range\": [\n 20,\n 20\n ],\n \"import_name\": \"MyApp.Config\",\n \"statement_text\": \"alias MyApp.Config\"\n },\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"import_name\": \"MyApp.Server.State\",\n \"statement_text\": \"alias MyApp.Server.State\"\n },\n {\n \"start_line_number\": 22,\n \"end_line_number\": 22,\n \"line_range\": [\n 22,\n 22\n ],\n \"import_name\": \"Logger\",\n \"statement_text\": \"require Logger\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 10,\n \"end_line_number\": 183,\n \"line_range\": [\n 10,\n 183\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"MyApp.Server\",\n \"qualified_name\": \"MyApp.Server\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule MyApp.Server do\",\n \"child_symbol_names\": [\n \"add_item\",\n \"get_items\",\n \"notify\",\n \"via_tuple\",\n \"init\",\n \"handle_call\",\n \"handle_call\",\n \"handle_cast\",\n \"handle_info\",\n \"handle_internal\",\n \"my_macro\"\n ],\n \"child_qualified_names\": [\n \"MyApp.Server.add_item\",\n \"MyApp.Server.get_items\",\n \"MyApp.Server.notify\",\n \"MyApp.Server.via_tuple\",\n \"MyApp.Server.init\",\n \"MyApp.Server.handle_call\",\n \"MyApp.Server.handle_call\",\n \"MyApp.Server.handle_cast\",\n \"MyApp.Server.handle_info\",\n \"MyApp.Server.handle_internal\",\n \"MyApp.Server.my_macro\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Main module ───────────────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Main module ───────────────────────────────────────────────────────\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 26,\n \"end_line_number\": 26,\n \"line_range\": [\n 26,\n 26\n ],\n \"text\": \"── Constants ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Constants ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 28,\n \"end_line_number\": 28,\n \"line_range\": [\n 28,\n 28\n ],\n \"text\": \"@brief Default timeout for GenServer calls in milliseconds.\",\n \"text_lines\": [\n \"@brief Default timeout for GenServer calls in milliseconds.\"\n ]\n },\n {\n \"start_line_number\": 31,\n \"end_line_number\": 31,\n \"line_range\": [\n 31,\n 31\n ],\n \"text\": \"@brief Maximum items stored in server state.\",\n \"text_lines\": [\n \"@brief Maximum items stored in server state.\"\n ]\n },\n {\n \"start_line_number\": 34,\n \"end_line_number\": 34,\n \"line_range\": [\n 34,\n 34\n ],\n \"text\": \"── Struct ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"── Typespecs ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Typespecs ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"── Public API ──────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Public API ──────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 106,\n \"end_line_number\": 106,\n \"line_range\": [\n 106,\n 106\n ],\n \"text\": \"── Private helpers ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Private helpers ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 108,\n \"end_line_number\": 108,\n \"line_range\": [\n 108,\n 108\n ],\n \"text\": \"@brief Generate a via-tuple for process registration.\",\n \"text_lines\": [\n \"@brief Generate a via-tuple for process registration.\"\n ]\n },\n {\n \"start_line_number\": 109,\n \"end_line_number\": 109,\n \"line_range\": [\n 109,\n 109\n ],\n \"text\": \"@param name The server name.\",\n \"text_lines\": [\n \"@param name The server name.\"\n ]\n },\n {\n \"start_line_number\": 110,\n \"end_line_number\": 110,\n \"line_range\": [\n 110,\n 110\n ],\n \"text\": \"@return Via-tuple for Registry lookup.\",\n \"text_lines\": [\n \"@return Via-tuple for Registry lookup.\"\n ]\n },\n {\n \"start_line_number\": 115,\n \"end_line_number\": 115,\n \"line_range\": [\n 115,\n 115\n ],\n \"text\": \"── GenServer callbacks ─────────────────────────────────────────────\",\n \"text_lines\": [\n \"── GenServer callbacks ─────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 119,\n \"end_line_number\": 119,\n \"line_range\": [\n 119,\n 119\n ],\n \"text\": \"Validate required options\",\n \"text_lines\": [\n \"Validate required options\"\n ]\n },\n {\n \"start_line_number\": 135,\n \"end_line_number\": 135,\n \"line_range\": [\n 135,\n 135\n ],\n \"text\": \"Check capacity before adding\",\n \"text_lines\": [\n \"Check capacity before adding\"\n ]\n },\n {\n \"start_line_number\": 161,\n \"end_line_number\": 161,\n \"line_range\": [\n 161,\n 161\n ],\n \"text\": \"@brief Handle internal state cleanup and maintenance.\",\n \"text_lines\": [\n \"@brief Handle internal state cleanup and maintenance.\"\n ]\n },\n {\n \"start_line_number\": 162,\n \"end_line_number\": 162,\n \"line_range\": [\n 162,\n 162\n ],\n \"text\": \"@param state Current server state.\",\n \"text_lines\": [\n \"@param state Current server state.\"\n ]\n },\n {\n \"start_line_number\": 163,\n \"end_line_number\": 163,\n \"line_range\": [\n 163,\n 163\n ],\n \"text\": \"@return Updated state with pruned items.\",\n \"text_lines\": [\n \"@return Updated state with pruned items.\"\n ]\n },\n {\n \"start_line_number\": 165,\n \"end_line_number\": 165,\n \"line_range\": [\n 165,\n 165\n ],\n \"text\": \"Prune items exceeding max capacity\",\n \"text_lines\": [\n \"Prune items exceeding max capacity\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 44,\n \"end_line_number\": 69,\n \"line_range\": [\n 44,\n 69\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"[:name, :port, items: [], started_at: nil]\",\n \"qualified_name\": \"[:name, :port, items: [], started_at: nil]\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"defstruct [:name, :port, items: [], started_at: nil]\",\n \"child_symbol_names\": [\n \"start_link\"\n ],\n \"child_qualified_names\": [\n \"[:name, :port, items: [], started_at: nil].start_link\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Maximum items stored in server state.\",\n \"doxygen\": {\n \"brief\": [\n \"Maximum items stored in server state.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"── Typespecs ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Typespecs ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"── Public API ──────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Public API ──────────────────────────────────────────────────────\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 66,\n \"end_line_number\": 69,\n \"line_range\": [\n 66,\n 69\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"start_link\",\n \"qualified_name\": \"[:name, :port, items: [], started_at: nil].start_link\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def start_link(opts) do\",\n \"parent_symbol_name\": \"[:name, :port, items: [], started_at: nil]\",\n \"parent_qualified_name\": \"[:name, :port, items: [], started_at: nil]\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 79,\n \"end_line_number\": 81,\n \"line_range\": [\n 79,\n 81\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"add_item\",\n \"qualified_name\": \"MyApp.Server.add_item\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def add_item(server, item) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 90,\n \"end_line_number\": 92,\n \"line_range\": [\n 90,\n 92\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"get_items\",\n \"qualified_name\": \"MyApp.Server.get_items\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def get_items(server) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 102,\n \"end_line_number\": 104,\n \"line_range\": [\n 102,\n 104\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"notify\",\n \"qualified_name\": \"MyApp.Server.notify\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def notify(server, event) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 111,\n \"end_line_number\": 113,\n \"line_range\": [\n 111,\n 113\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"via_tuple\",\n \"qualified_name\": \"MyApp.Server.via_tuple\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"defp via_tuple(name) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Generate a via-tuple for process registration.\",\n \"doxygen\": {\n \"brief\": [\n \"Generate a via-tuple for process registration.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"name\",\n \"description\": \"The server name.\"\n }\n ],\n \"returns\": [\n \"Via-tuple for Registry lookup.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 118,\n \"end_line_number\": 131,\n \"line_range\": [\n 118,\n 131\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"init\",\n \"qualified_name\": \"MyApp.Server.init\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def init(opts) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"── GenServer callbacks ─────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── GenServer callbacks ─────────────────────────────────────────────\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 119,\n \"end_line_number\": 119,\n \"line_range\": [\n 119,\n 119\n ],\n \"text\": \"Validate required options\",\n \"text_lines\": [\n \"Validate required options\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 142,\n \"line_range\": [\n 134,\n 142\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"handle_call\",\n \"qualified_name\": \"MyApp.Server.handle_call\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def handle_call({:add_item, item}, _from, state) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\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\": \"Check capacity before adding\",\n \"text_lines\": [\n \"Check capacity before adding\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 145,\n \"end_line_number\": 147,\n \"line_range\": [\n 145,\n 147\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"handle_call\",\n \"qualified_name\": \"MyApp.Server.handle_call\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def handle_call(:get_items, _from, state) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 150,\n \"end_line_number\": 153,\n \"line_range\": [\n 150,\n 153\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"handle_cast\",\n \"qualified_name\": \"MyApp.Server.handle_cast\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def handle_cast({:notify, event}, state) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 156,\n \"end_line_number\": 159,\n \"line_range\": [\n 156,\n 159\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"handle_info\",\n \"qualified_name\": \"MyApp.Server.handle_info\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def handle_info(:timeout, state) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 164,\n \"end_line_number\": 168,\n \"line_range\": [\n 164,\n 168\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"handle_internal\",\n \"qualified_name\": \"MyApp.Server.handle_internal\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"defp handle_internal(state) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Handle internal state cleanup and maintenance.\",\n \"doxygen\": {\n \"brief\": [\n \"Handle internal state cleanup and maintenance.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"state\",\n \"description\": \"Current server state.\"\n }\n ],\n \"returns\": [\n \"Updated state with pruned items.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 165,\n \"end_line_number\": 165,\n \"line_range\": [\n 165,\n 165\n ],\n \"text\": \"Prune items exceeding max capacity\",\n \"text_lines\": [\n \"Prune items exceeding max capacity\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 176,\n \"end_line_number\": 182,\n \"line_range\": [\n 176,\n 182\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"my_macro\",\n \"qualified_name\": \"MyApp.Server.my_macro\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"defmacro my_macro(expr) do\",\n \"parent_symbol_name\": \"MyApp.Server\",\n \"parent_qualified_name\": \"MyApp.Server\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 200,\n \"line_range\": [\n 187,\n 200\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"Printable\",\n \"qualified_name\": \"Printable\",\n \"symbol_kind\": \"PROTOCOL\",\n \"type_label\": \"PROTOCOL\",\n \"signature_text\": \"defprotocol Printable do\",\n \"child_symbol_names\": [\n \"print\",\n \"print\",\n \"print\"\n ],\n \"child_qualified_names\": [\n \"Printable.print\",\n \"Printable.print\",\n \"Printable.print\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Protocol ──────────────────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Protocol ──────────────────────────────────────────────────────────\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 199,\n \"end_line_number\": 200,\n \"line_range\": [\n 199,\n 200\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"print\",\n \"qualified_name\": \"Printable.print\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def print(data)\",\n \"parent_symbol_name\": \"Printable\",\n \"parent_qualified_name\": \"Printable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 204,\n \"end_line_number\": 214,\n \"line_range\": [\n 204,\n 214\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"Printable\",\n \"qualified_name\": \"Printable\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"defimpl Printable, for: MyApp.Server do\",\n \"child_symbol_names\": [\n \"print\",\n \"print\",\n \"print\"\n ],\n \"child_qualified_names\": [\n \"Printable.print\",\n \"Printable.print\",\n \"Printable.print\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Protocol implementation ───────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Protocol implementation ───────────────────────────────────────────\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 211,\n \"end_line_number\": 213,\n \"line_range\": [\n 211,\n 213\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"print\",\n \"qualified_name\": \"Printable.print\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def print(server) do\",\n \"parent_symbol_name\": \"Printable\",\n \"parent_qualified_name\": \"Printable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 216,\n \"end_line_number\": 220,\n \"line_range\": [\n 216,\n 220\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"Printable\",\n \"qualified_name\": \"Printable\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"defimpl Printable, for: BitString do\",\n \"child_symbol_names\": [\n \"print\",\n \"print\",\n \"print\"\n ],\n \"child_qualified_names\": [\n \"Printable.print\",\n \"Printable.print\",\n \"Printable.print\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 217,\n \"end_line_number\": 219,\n \"line_range\": [\n 217,\n 219\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"print\",\n \"qualified_name\": \"Printable.print\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def print(str) do\",\n \"parent_symbol_name\": \"Printable\",\n \"parent_qualified_name\": \"Printable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 224,\n \"end_line_number\": 296,\n \"line_range\": [\n 224,\n 296\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"MyApp.Utils\",\n \"qualified_name\": \"MyApp.Utils\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule MyApp.Utils do\",\n \"child_symbol_names\": [\n \"classify\",\n \"classify\",\n \"classify\",\n \"classify\",\n \"classify\",\n \"classify\",\n \"process_list\",\n \"pythagorean_triples\",\n \"safe_divide\",\n \"safe_divide\",\n \"factorial\",\n \"factorial\"\n ],\n \"child_qualified_names\": [\n \"MyApp.Utils.classify\",\n \"MyApp.Utils.classify\",\n \"MyApp.Utils.classify\",\n \"MyApp.Utils.classify\",\n \"MyApp.Utils.classify\",\n \"MyApp.Utils.classify\",\n \"MyApp.Utils.process_list\",\n \"MyApp.Utils.pythagorean_triples\",\n \"MyApp.Utils.safe_divide\",\n \"MyApp.Utils.safe_divide\",\n \"MyApp.Utils.factorial\",\n \"MyApp.Utils.factorial\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Utility module with guards and pipes ──────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Utility module with guards and pipes ──────────────────────────────\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 237,\n \"end_line_number\": 258,\n \"line_range\": [\n 237,\n 258\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"classify\",\n \"qualified_name\": \"MyApp.Utils.classify\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def classify(value) when is_integer(value) and value > 0, do: :positive\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 238,\n \"end_line_number\": 258,\n \"line_range\": [\n 238,\n 258\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"classify\",\n \"qualified_name\": \"MyApp.Utils.classify\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def classify(value) when is_integer(value) and value < 0, do: :negative\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 239,\n \"end_line_number\": 258,\n \"line_range\": [\n 239,\n 258\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"classify\",\n \"qualified_name\": \"MyApp.Utils.classify\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def classify(0), do: :zero\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 240,\n \"end_line_number\": 258,\n \"line_range\": [\n 240,\n 258\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"classify\",\n \"qualified_name\": \"MyApp.Utils.classify\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def classify(value) when is_binary(value), do: :string\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 241,\n \"end_line_number\": 258,\n \"line_range\": [\n 241,\n 258\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"classify\",\n \"qualified_name\": \"MyApp.Utils.classify\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def classify(value) when is_list(value), do: :list\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 242,\n \"end_line_number\": 258,\n \"line_range\": [\n 242,\n 258\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"classify\",\n \"qualified_name\": \"MyApp.Utils.classify\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def classify(_), do: :unknown\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 251,\n \"end_line_number\": 258,\n \"line_range\": [\n 251,\n 258\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"process_list\",\n \"qualified_name\": \"MyApp.Utils.process_list\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def process_list(items) do\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 267,\n \"end_line_number\": 274,\n \"line_range\": [\n 267,\n 274\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"pythagorean_triples\",\n \"qualified_name\": \"MyApp.Utils.pythagorean_triples\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def pythagorean_triples(range) do\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 284,\n \"end_line_number\": 296,\n \"line_range\": [\n 284,\n 296\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"safe_divide\",\n \"qualified_name\": \"MyApp.Utils.safe_divide\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def safe_divide(_, 0), do: {:error, :division_by_zero}\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 285,\n \"end_line_number\": 296,\n \"line_range\": [\n 285,\n 296\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"safe_divide\",\n \"qualified_name\": \"MyApp.Utils.safe_divide\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def safe_divide(a, b), do: {:ok, a / b}\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 294,\n \"end_line_number\": 296,\n \"line_range\": [\n 294,\n 296\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"factorial\",\n \"qualified_name\": \"MyApp.Utils.factorial\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def factorial(0), do: 1\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 295,\n \"end_line_number\": 296,\n \"line_range\": [\n 295,\n 296\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"factorial\",\n \"qualified_name\": \"MyApp.Utils.factorial\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def factorial(n) when n > 0, do: n * factorial(n - 1)\",\n \"parent_symbol_name\": \"MyApp.Utils\",\n \"parent_qualified_name\": \"MyApp.Utils\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 300,\n \"end_line_number\": 315,\n \"line_range\": [\n 300,\n 315\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"MyApp.Plugin\",\n \"qualified_name\": \"MyApp.Plugin\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule MyApp.Plugin do\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Behaviour definition ─────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Behaviour definition ─────────────────────────────────────────────\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 318,\n \"end_line_number\": 321,\n \"line_range\": [\n 318,\n 321\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"MyApp.Extra\",\n \"qualified_name\": \"MyApp.Extra\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule MyApp.Extra do\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"coverage extension block\",\n \"attached_comment_lines\": [\n \"coverage extension block\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 319,\n \"end_line_number\": 319,\n \"line_range\": [\n 319,\n 319\n ],\n \"text\": \"inline module comment\",\n \"text_lines\": [\n \"inline module comment\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 320,\n \"end_line_number\": 321,\n \"line_range\": [\n 320,\n 321\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"[:name]\",\n \"qualified_name\": \"[:name]\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"defstruct [:name]\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"inline module comment\",\n \"attached_comment_lines\": [\n \"inline module comment\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 323,\n \"end_line_number\": 325,\n \"line_range\": [\n 323,\n 325\n ],\n \"declaration_order_index\": 36,\n \"symbol_name\": \"MyApp.Audit\",\n \"qualified_name\": \"MyApp.Audit\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule MyApp.Audit do\",\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\": 324,\n \"end_line_number\": 325,\n \"line_range\": [\n 324,\n 325\n ],\n \"declaration_order_index\": 37,\n \"symbol_name\": \"[:id]\",\n \"qualified_name\": \"[:id]\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"defstruct [:id]\",\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\": 329,\n \"line_range\": [\n 327,\n 329\n ],\n \"declaration_order_index\": 38,\n \"symbol_name\": \"MyApp.State\",\n \"qualified_name\": \"MyApp.State\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule MyApp.State do\",\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\": 329,\n \"line_range\": [\n 328,\n 329\n ],\n \"declaration_order_index\": 39,\n \"symbol_name\": \"[:status]\",\n \"qualified_name\": \"[:status]\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"defstruct [:status]\",\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\": 333,\n \"line_range\": [\n 331,\n 333\n ],\n \"declaration_order_index\": 40,\n \"symbol_name\": \"MyApp.Payload\",\n \"qualified_name\": \"MyApp.Payload\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule MyApp.Payload do\",\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\": 333,\n \"line_range\": [\n 332,\n 333\n ],\n \"declaration_order_index\": 41,\n \"symbol_name\": \"[:value]\",\n \"qualified_name\": \"[:value]\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"defstruct [:value]\",\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\": 337,\n \"line_range\": [\n 335,\n 337\n ],\n \"declaration_order_index\": 42,\n \"symbol_name\": \"MyApp.Context\",\n \"qualified_name\": \"MyApp.Context\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule MyApp.Context do\",\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\": 337,\n \"line_range\": [\n 336,\n 337\n ],\n \"declaration_order_index\": 43,\n \"symbol_name\": \"[:meta]\",\n \"qualified_name\": \"[:meta]\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"defstruct [:meta]\",\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\": 341,\n \"line_range\": [\n 339,\n 341\n ],\n \"declaration_order_index\": 44,\n \"symbol_name\": \"Auditable\",\n \"qualified_name\": \"Auditable\",\n \"symbol_kind\": \"PROTOCOL\",\n \"type_label\": \"PROTOCOL\",\n \"signature_text\": \"defprotocol Auditable do\",\n \"child_symbol_names\": [\n \"audit\",\n \"audit\"\n ],\n \"child_qualified_names\": [\n \"Auditable.audit\",\n \"Auditable.audit\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 340,\n \"end_line_number\": 341,\n \"line_range\": [\n 340,\n 341\n ],\n \"declaration_order_index\": 45,\n \"symbol_name\": \"audit\",\n \"qualified_name\": \"Auditable.audit\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def audit(data)\",\n \"parent_symbol_name\": \"Auditable\",\n \"parent_qualified_name\": \"Auditable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 343,\n \"end_line_number\": 345,\n \"line_range\": [\n 343,\n 345\n ],\n \"declaration_order_index\": 46,\n \"symbol_name\": \"Renderable\",\n \"qualified_name\": \"Renderable\",\n \"symbol_kind\": \"PROTOCOL\",\n \"type_label\": \"PROTOCOL\",\n \"signature_text\": \"defprotocol Renderable do\",\n \"child_symbol_names\": [\n \"render\",\n \"render\"\n ],\n \"child_qualified_names\": [\n \"Renderable.render\",\n \"Renderable.render\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 344,\n \"end_line_number\": 345,\n \"line_range\": [\n 344,\n 345\n ],\n \"declaration_order_index\": 47,\n \"symbol_name\": \"render\",\n \"qualified_name\": \"Renderable.render\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def render(data)\",\n \"parent_symbol_name\": \"Renderable\",\n \"parent_qualified_name\": \"Renderable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 347,\n \"end_line_number\": 349,\n \"line_range\": [\n 347,\n 349\n ],\n \"declaration_order_index\": 48,\n \"symbol_name\": \"Parsable\",\n \"qualified_name\": \"Parsable\",\n \"symbol_kind\": \"PROTOCOL\",\n \"type_label\": \"PROTOCOL\",\n \"signature_text\": \"defprotocol Parsable do\",\n \"child_symbol_names\": [\n \"parse\",\n \"parse\"\n ],\n \"child_qualified_names\": [\n \"Parsable.parse\",\n \"Parsable.parse\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 348,\n \"end_line_number\": 349,\n \"line_range\": [\n 348,\n 349\n ],\n \"declaration_order_index\": 49,\n \"symbol_name\": \"parse\",\n \"qualified_name\": \"Parsable.parse\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def parse(data)\",\n \"parent_symbol_name\": \"Parsable\",\n \"parent_qualified_name\": \"Parsable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 351,\n \"end_line_number\": 353,\n \"line_range\": [\n 351,\n 353\n ],\n \"declaration_order_index\": 50,\n \"symbol_name\": \"Validatable\",\n \"qualified_name\": \"Validatable\",\n \"symbol_kind\": \"PROTOCOL\",\n \"type_label\": \"PROTOCOL\",\n \"signature_text\": \"defprotocol Validatable do\",\n \"child_symbol_names\": [\n \"validate\",\n \"validate\"\n ],\n \"child_qualified_names\": [\n \"Validatable.validate\",\n \"Validatable.validate\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 352,\n \"end_line_number\": 353,\n \"line_range\": [\n 352,\n 353\n ],\n \"declaration_order_index\": 51,\n \"symbol_name\": \"validate\",\n \"qualified_name\": \"Validatable.validate\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def validate(data)\",\n \"parent_symbol_name\": \"Validatable\",\n \"parent_qualified_name\": \"Validatable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 355,\n \"end_line_number\": 357,\n \"line_range\": [\n 355,\n 357\n ],\n \"declaration_order_index\": 52,\n \"symbol_name\": \"Auditable\",\n \"qualified_name\": \"Auditable\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"defimpl Auditable, for: Any do\",\n \"child_symbol_names\": [\n \"audit\",\n \"audit\"\n ],\n \"child_qualified_names\": [\n \"Auditable.audit\",\n \"Auditable.audit\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 356,\n \"end_line_number\": 357,\n \"line_range\": [\n 356,\n 357\n ],\n \"declaration_order_index\": 53,\n \"symbol_name\": \"audit\",\n \"qualified_name\": \"Auditable.audit\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def audit(data), do: data\",\n \"parent_symbol_name\": \"Auditable\",\n \"parent_qualified_name\": \"Auditable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 359,\n \"end_line_number\": 361,\n \"line_range\": [\n 359,\n 361\n ],\n \"declaration_order_index\": 54,\n \"symbol_name\": \"Renderable\",\n \"qualified_name\": \"Renderable\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"defimpl Renderable, for: Any do\",\n \"child_symbol_names\": [\n \"render\",\n \"render\"\n ],\n \"child_qualified_names\": [\n \"Renderable.render\",\n \"Renderable.render\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 360,\n \"end_line_number\": 361,\n \"line_range\": [\n 360,\n 361\n ],\n \"declaration_order_index\": 55,\n \"symbol_name\": \"render\",\n \"qualified_name\": \"Renderable.render\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def render(data), do: data\",\n \"parent_symbol_name\": \"Renderable\",\n \"parent_qualified_name\": \"Renderable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 363,\n \"end_line_number\": 365,\n \"line_range\": [\n 363,\n 365\n ],\n \"declaration_order_index\": 56,\n \"symbol_name\": \"Parsable\",\n \"qualified_name\": \"Parsable\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"defimpl Parsable, for: Any do\",\n \"child_symbol_names\": [\n \"parse\",\n \"parse\"\n ],\n \"child_qualified_names\": [\n \"Parsable.parse\",\n \"Parsable.parse\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 364,\n \"end_line_number\": 365,\n \"line_range\": [\n 364,\n 365\n ],\n \"declaration_order_index\": 57,\n \"symbol_name\": \"parse\",\n \"qualified_name\": \"Parsable.parse\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def parse(data), do: data\",\n \"parent_symbol_name\": \"Parsable\",\n \"parent_qualified_name\": \"Parsable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 367,\n \"end_line_number\": 369,\n \"line_range\": [\n 367,\n 369\n ],\n \"declaration_order_index\": 58,\n \"symbol_name\": \"Validatable\",\n \"qualified_name\": \"Validatable\",\n \"symbol_kind\": \"IMPL\",\n \"type_label\": \"IMPL\",\n \"signature_text\": \"defimpl Validatable, for: Any do\",\n \"child_symbol_names\": [\n \"validate\",\n \"validate\"\n ],\n \"child_qualified_names\": [\n \"Validatable.validate\",\n \"Validatable.validate\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 368,\n \"end_line_number\": 369,\n \"line_range\": [\n 368,\n 369\n ],\n \"declaration_order_index\": 59,\n \"symbol_name\": \"validate\",\n \"qualified_name\": \"Validatable.validate\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def validate(data), do: data\",\n \"parent_symbol_name\": \"Validatable\",\n \"parent_qualified_name\": \"Validatable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 372,\n \"end_line_number\": 408,\n \"line_range\": [\n 372,\n 408\n ],\n \"declaration_order_index\": 60,\n \"symbol_name\": \"ReqCoverElixir\",\n \"qualified_name\": \"ReqCoverElixir\",\n \"symbol_kind\": \"MODULE\",\n \"type_label\": \"MODULE\",\n \"signature_text\": \"defmodule ReqCoverElixir do\",\n \"child_symbol_names\": [\n \"req_cover_elixir_1\",\n \"req_cover_elixir_2\",\n \"req_cover_elixir_3\",\n \"req_cover_elixir_4\",\n \"req_cover_elixir_5\"\n ],\n \"child_qualified_names\": [\n \"ReqCoverElixir.req_cover_elixir_1\",\n \"ReqCoverElixir.req_cover_elixir_2\",\n \"ReqCoverElixir.req_cover_elixir_3\",\n \"ReqCoverElixir.req_cover_elixir_4\",\n \"ReqCoverElixir.req_cover_elixir_5\"\n ],\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 },\n \"body_comment_entries\": [\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 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\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 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 375,\n \"end_line_number\": 375,\n \"line_range\": [\n 375,\n 375\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 1.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 1.\"\n ]\n },\n {\n \"start_line_number\": 376,\n \"end_line_number\": 376,\n \"line_range\": [\n 376,\n 376\n ],\n \"text\": \"@param value Input value for helper construct 1.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 377,\n \"end_line_number\": 377,\n \"line_range\": [\n 377,\n 377\n ],\n \"text\": \"@return Output value for helper construct 1.\",\n \"text_lines\": [\n \"@return Output value for helper construct 1.\"\n ]\n },\n {\n \"start_line_number\": 380,\n \"end_line_number\": 380,\n \"line_range\": [\n 380,\n 380\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\": 381,\n \"end_line_number\": 381,\n \"line_range\": [\n 381,\n 381\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 382,\n \"end_line_number\": 382,\n \"line_range\": [\n 382,\n 382\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 2.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 2.\"\n ]\n },\n {\n \"start_line_number\": 383,\n \"end_line_number\": 383,\n \"line_range\": [\n 383,\n 383\n ],\n \"text\": \"@param value Input value for helper construct 2.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 384,\n \"end_line_number\": 384,\n \"line_range\": [\n 384,\n 384\n ],\n \"text\": \"@return Output value for helper construct 2.\",\n \"text_lines\": [\n \"@return Output value for helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 387,\n \"end_line_number\": 387,\n \"line_range\": [\n 387,\n 387\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\": 388,\n \"end_line_number\": 388,\n \"line_range\": [\n 388,\n 388\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 389,\n \"end_line_number\": 389,\n \"line_range\": [\n 389,\n 389\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 3.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 3.\"\n ]\n },\n {\n \"start_line_number\": 390,\n \"end_line_number\": 390,\n \"line_range\": [\n 390,\n 390\n ],\n \"text\": \"@param value Input value for helper construct 3.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 391,\n \"end_line_number\": 391,\n \"line_range\": [\n 391,\n 391\n ],\n \"text\": \"@return Output value for helper construct 3.\",\n \"text_lines\": [\n \"@return Output value for helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 394,\n \"end_line_number\": 394,\n \"line_range\": [\n 394,\n 394\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\": 395,\n \"end_line_number\": 395,\n \"line_range\": [\n 395,\n 395\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 396,\n \"end_line_number\": 396,\n \"line_range\": [\n 396,\n 396\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 4.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 4.\"\n ]\n },\n {\n \"start_line_number\": 397,\n \"end_line_number\": 397,\n \"line_range\": [\n 397,\n 397\n ],\n \"text\": \"@param value Input value for helper construct 4.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 398,\n \"end_line_number\": 398,\n \"line_range\": [\n 398,\n 398\n ],\n \"text\": \"@return Output value for helper construct 4.\",\n \"text_lines\": [\n \"@return Output value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 401,\n \"end_line_number\": 401,\n \"line_range\": [\n 401,\n 401\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\": 402,\n \"end_line_number\": 402,\n \"line_range\": [\n 402,\n 402\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 403,\n \"end_line_number\": 403,\n \"line_range\": [\n 403,\n 403\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 5.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 5.\"\n ]\n },\n {\n \"start_line_number\": 404,\n \"end_line_number\": 404,\n \"line_range\": [\n 404,\n 404\n ],\n \"text\": \"@param value Input value for helper construct 5.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 405,\n \"end_line_number\": 405,\n \"line_range\": [\n 405,\n 405\n ],\n \"text\": \"@return Output value for helper construct 5.\",\n \"text_lines\": [\n \"@return Output value for helper construct 5.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 378,\n \"end_line_number\": 408,\n \"line_range\": [\n 378,\n 408\n ],\n \"declaration_order_index\": 61,\n \"symbol_name\": \"req_cover_elixir_1\",\n \"qualified_name\": \"ReqCoverElixir.req_cover_elixir_1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_elixir_1(value), do: value + 1\",\n \"parent_symbol_name\": \"ReqCoverElixir\",\n \"parent_qualified_name\": \"ReqCoverElixir\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 1.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 1.\",\n \"Coverage helper construct 2.\"\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 {\n \"start_line_number\": 380,\n \"end_line_number\": 380,\n \"line_range\": [\n 380,\n 380\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\": 381,\n \"end_line_number\": 381,\n \"line_range\": [\n 381,\n 381\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 382,\n \"end_line_number\": 382,\n \"line_range\": [\n 382,\n 382\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 2.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 2.\"\n ]\n },\n {\n \"start_line_number\": 383,\n \"end_line_number\": 383,\n \"line_range\": [\n 383,\n 383\n ],\n \"text\": \"@param value Input value for helper construct 2.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 384,\n \"end_line_number\": 384,\n \"line_range\": [\n 384,\n 384\n ],\n \"text\": \"@return Output value for helper construct 2.\",\n \"text_lines\": [\n \"@return Output value for helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 387,\n \"end_line_number\": 387,\n \"line_range\": [\n 387,\n 387\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\": 388,\n \"end_line_number\": 388,\n \"line_range\": [\n 388,\n 388\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 389,\n \"end_line_number\": 389,\n \"line_range\": [\n 389,\n 389\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 3.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 3.\"\n ]\n },\n {\n \"start_line_number\": 390,\n \"end_line_number\": 390,\n \"line_range\": [\n 390,\n 390\n ],\n \"text\": \"@param value Input value for helper construct 3.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 391,\n \"end_line_number\": 391,\n \"line_range\": [\n 391,\n 391\n ],\n \"text\": \"@return Output value for helper construct 3.\",\n \"text_lines\": [\n \"@return Output value for helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 394,\n \"end_line_number\": 394,\n \"line_range\": [\n 394,\n 394\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\": 395,\n \"end_line_number\": 395,\n \"line_range\": [\n 395,\n 395\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 396,\n \"end_line_number\": 396,\n \"line_range\": [\n 396,\n 396\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 4.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 4.\"\n ]\n },\n {\n \"start_line_number\": 397,\n \"end_line_number\": 397,\n \"line_range\": [\n 397,\n 397\n ],\n \"text\": \"@param value Input value for helper construct 4.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 398,\n \"end_line_number\": 398,\n \"line_range\": [\n 398,\n 398\n ],\n \"text\": \"@return Output value for helper construct 4.\",\n \"text_lines\": [\n \"@return Output value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 401,\n \"end_line_number\": 401,\n \"line_range\": [\n 401,\n 401\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\": 402,\n \"end_line_number\": 402,\n \"line_range\": [\n 402,\n 402\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 403,\n \"end_line_number\": 403,\n \"line_range\": [\n 403,\n 403\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 5.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 5.\"\n ]\n },\n {\n \"start_line_number\": 404,\n \"end_line_number\": 404,\n \"line_range\": [\n 404,\n 404\n ],\n \"text\": \"@param value Input value for helper construct 5.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 405,\n \"end_line_number\": 405,\n \"line_range\": [\n 405,\n 405\n ],\n \"text\": \"@return Output value for helper construct 5.\",\n \"text_lines\": [\n \"@return Output value for helper construct 5.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 385,\n \"end_line_number\": 408,\n \"line_range\": [\n 385,\n 408\n ],\n \"declaration_order_index\": 62,\n \"symbol_name\": \"req_cover_elixir_2\",\n \"qualified_name\": \"ReqCoverElixir.req_cover_elixir_2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_elixir_2(value), do: value + 2\",\n \"parent_symbol_name\": \"ReqCoverElixir\",\n \"parent_qualified_name\": \"ReqCoverElixir\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 2.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 2.\",\n \"Coverage helper construct 3.\"\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 {\n \"start_line_number\": 387,\n \"end_line_number\": 387,\n \"line_range\": [\n 387,\n 387\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\": 388,\n \"end_line_number\": 388,\n \"line_range\": [\n 388,\n 388\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 389,\n \"end_line_number\": 389,\n \"line_range\": [\n 389,\n 389\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 3.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 3.\"\n ]\n },\n {\n \"start_line_number\": 390,\n \"end_line_number\": 390,\n \"line_range\": [\n 390,\n 390\n ],\n \"text\": \"@param value Input value for helper construct 3.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 391,\n \"end_line_number\": 391,\n \"line_range\": [\n 391,\n 391\n ],\n \"text\": \"@return Output value for helper construct 3.\",\n \"text_lines\": [\n \"@return Output value for helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 394,\n \"end_line_number\": 394,\n \"line_range\": [\n 394,\n 394\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\": 395,\n \"end_line_number\": 395,\n \"line_range\": [\n 395,\n 395\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 396,\n \"end_line_number\": 396,\n \"line_range\": [\n 396,\n 396\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 4.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 4.\"\n ]\n },\n {\n \"start_line_number\": 397,\n \"end_line_number\": 397,\n \"line_range\": [\n 397,\n 397\n ],\n \"text\": \"@param value Input value for helper construct 4.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 398,\n \"end_line_number\": 398,\n \"line_range\": [\n 398,\n 398\n ],\n \"text\": \"@return Output value for helper construct 4.\",\n \"text_lines\": [\n \"@return Output value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 401,\n \"end_line_number\": 401,\n \"line_range\": [\n 401,\n 401\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\": 402,\n \"end_line_number\": 402,\n \"line_range\": [\n 402,\n 402\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 403,\n \"end_line_number\": 403,\n \"line_range\": [\n 403,\n 403\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 5.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 5.\"\n ]\n },\n {\n \"start_line_number\": 404,\n \"end_line_number\": 404,\n \"line_range\": [\n 404,\n 404\n ],\n \"text\": \"@param value Input value for helper construct 5.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 405,\n \"end_line_number\": 405,\n \"line_range\": [\n 405,\n 405\n ],\n \"text\": \"@return Output value for helper construct 5.\",\n \"text_lines\": [\n \"@return Output value for helper construct 5.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 392,\n \"end_line_number\": 408,\n \"line_range\": [\n 392,\n 408\n ],\n \"declaration_order_index\": 63,\n \"symbol_name\": \"req_cover_elixir_3\",\n \"qualified_name\": \"ReqCoverElixir.req_cover_elixir_3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_elixir_3(value), do: value + 3\",\n \"parent_symbol_name\": \"ReqCoverElixir\",\n \"parent_qualified_name\": \"ReqCoverElixir\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 3.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 3.\",\n \"Coverage helper construct 4.\"\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 {\n \"start_line_number\": 394,\n \"end_line_number\": 394,\n \"line_range\": [\n 394,\n 394\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\": 395,\n \"end_line_number\": 395,\n \"line_range\": [\n 395,\n 395\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 396,\n \"end_line_number\": 396,\n \"line_range\": [\n 396,\n 396\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 4.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 4.\"\n ]\n },\n {\n \"start_line_number\": 397,\n \"end_line_number\": 397,\n \"line_range\": [\n 397,\n 397\n ],\n \"text\": \"@param value Input value for helper construct 4.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 398,\n \"end_line_number\": 398,\n \"line_range\": [\n 398,\n 398\n ],\n \"text\": \"@return Output value for helper construct 4.\",\n \"text_lines\": [\n \"@return Output value for helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 401,\n \"end_line_number\": 401,\n \"line_range\": [\n 401,\n 401\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\": 402,\n \"end_line_number\": 402,\n \"line_range\": [\n 402,\n 402\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 403,\n \"end_line_number\": 403,\n \"line_range\": [\n 403,\n 403\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 5.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 5.\"\n ]\n },\n {\n \"start_line_number\": 404,\n \"end_line_number\": 404,\n \"line_range\": [\n 404,\n 404\n ],\n \"text\": \"@param value Input value for helper construct 5.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 405,\n \"end_line_number\": 405,\n \"line_range\": [\n 405,\n 405\n ],\n \"text\": \"@return Output value for helper construct 5.\",\n \"text_lines\": [\n \"@return Output value for helper construct 5.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 399,\n \"end_line_number\": 408,\n \"line_range\": [\n 399,\n 408\n ],\n \"declaration_order_index\": 64,\n \"symbol_name\": \"req_cover_elixir_4\",\n \"qualified_name\": \"ReqCoverElixir.req_cover_elixir_4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_elixir_4(value), do: value + 4\",\n \"parent_symbol_name\": \"ReqCoverElixir\",\n \"parent_qualified_name\": \"ReqCoverElixir\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Coverage helper construct 4.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 4.\",\n \"Coverage helper construct 5.\"\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 {\n \"start_line_number\": 401,\n \"end_line_number\": 401,\n \"line_range\": [\n 401,\n 401\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\": 402,\n \"end_line_number\": 402,\n \"line_range\": [\n 402,\n 402\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 403,\n \"end_line_number\": 403,\n \"line_range\": [\n 403,\n 403\n ],\n \"text\": \"@details Provides deterministic fixture-level Doxygen coverage block 5.\",\n \"text_lines\": [\n \"@details Provides deterministic fixture-level Doxygen coverage block 5.\"\n ]\n },\n {\n \"start_line_number\": 404,\n \"end_line_number\": 404,\n \"line_range\": [\n 404,\n 404\n ],\n \"text\": \"@param value Input value for helper construct 5.\",\n \"text_lines\": [\n \"@param value Input value for helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 405,\n \"end_line_number\": 405,\n \"line_range\": [\n 405,\n 405\n ],\n \"text\": \"@return Output value for helper construct 5.\",\n \"text_lines\": [\n \"@return Output value for helper construct 5.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 406,\n \"end_line_number\": 408,\n \"line_range\": [\n 406,\n 408\n ],\n \"declaration_order_index\": 65,\n \"symbol_name\": \"req_cover_elixir_5\",\n \"qualified_name\": \"ReqCoverElixir.req_cover_elixir_5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"def req_cover_elixir_5(value), do: value + 5\",\n \"parent_symbol_name\": \"ReqCoverElixir\",\n \"parent_qualified_name\": \"ReqCoverElixir\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\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 Elixir test fixture for parser validation.\",\n \"text_lines\": [\n \"@brief Comprehensive Elixir test fixture for parser validation.\"\n ]\n },\n {\n \"start_line_number\": 3,\n \"end_line_number\": 3,\n \"line_range\": [\n 3,\n 3\n ],\n \"text\": \"@details Covers pattern matching, guards, pipe operator, behaviours,\",\n \"text_lines\": [\n \"@details Covers pattern matching, guards, pipe operator, behaviours,\"\n ]\n },\n {\n \"start_line_number\": 4,\n \"end_line_number\": 4,\n \"line_range\": [\n 4,\n 4\n ],\n \"text\": \"GenServer callbacks, supervisors, comprehensions, sigils,\",\n \"text_lines\": [\n \"GenServer callbacks, supervisors, comprehensions, sigils,\"\n ]\n },\n {\n \"start_line_number\": 5,\n \"end_line_number\": 5,\n \"line_range\": [\n 5,\n 5\n ],\n \"text\": \"structs with enforce_keys, typespecs, and ExUnit testing.\",\n \"text_lines\": [\n \"structs with enforce_keys, typespecs, and ExUnit testing.\"\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\": 26,\n \"end_line_number\": 26,\n \"line_range\": [\n 26,\n 26\n ],\n \"text\": \"── Constants ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Constants ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 28,\n \"end_line_number\": 28,\n \"line_range\": [\n 28,\n 28\n ],\n \"text\": \"@brief Default timeout for GenServer calls in milliseconds.\",\n \"text_lines\": [\n \"@brief Default timeout for GenServer calls in milliseconds.\"\n ]\n },\n {\n \"start_line_number\": 31,\n \"end_line_number\": 31,\n \"line_range\": [\n 31,\n 31\n ],\n \"text\": \"@brief Maximum items stored in server state.\",\n \"text_lines\": [\n \"@brief Maximum items stored in server state.\"\n ]\n },\n {\n \"start_line_number\": 34,\n \"end_line_number\": 34,\n \"line_range\": [\n 34,\n 34\n ],\n \"text\": \"── Struct ──────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ──────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 46,\n \"end_line_number\": 46,\n \"line_range\": [\n 46,\n 46\n ],\n \"text\": \"── Typespecs ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Typespecs ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"── Public API ──────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Public API ──────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 106,\n \"end_line_number\": 106,\n \"line_range\": [\n 106,\n 106\n ],\n \"text\": \"── Private helpers ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Private helpers ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 119,\n \"end_line_number\": 119,\n \"line_range\": [\n 119,\n 119\n ],\n \"text\": \"Validate required options\",\n \"text_lines\": [\n \"Validate required options\"\n ]\n },\n {\n \"start_line_number\": 135,\n \"end_line_number\": 135,\n \"line_range\": [\n 135,\n 135\n ],\n \"text\": \"Check capacity before adding\",\n \"text_lines\": [\n \"Check capacity before adding\"\n ]\n },\n {\n \"start_line_number\": 165,\n \"end_line_number\": 165,\n \"line_range\": [\n 165,\n 165\n ],\n \"text\": \"Prune items exceeding max capacity\",\n \"text_lines\": [\n \"Prune items exceeding max capacity\"\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 1\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 1\"\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 1.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 1.\"\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 block 2\",\n \"text_lines\": [\n \"@REQ-COVER-SRS-231 block 2\"\n ]\n },\n {\n \"start_line_number\": 381,\n \"end_line_number\": 381,\n \"line_range\": [\n 381,\n 381\n ],\n \"text\": \"@brief Coverage helper construct 2.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 2.\"\n ]\n },\n {\n \"start_line_number\": 387,\n \"end_line_number\": 387,\n \"line_range\": [\n 387,\n 387\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\": 388,\n \"end_line_number\": 388,\n \"line_range\": [\n 388,\n 388\n ],\n \"text\": \"@brief Coverage helper construct 3.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 3.\"\n ]\n },\n {\n \"start_line_number\": 394,\n \"end_line_number\": 394,\n \"line_range\": [\n 394,\n 394\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\": 395,\n \"end_line_number\": 395,\n \"line_range\": [\n 395,\n 395\n ],\n \"text\": \"@brief Coverage helper construct 4.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 4.\"\n ]\n },\n {\n \"start_line_number\": 401,\n \"end_line_number\": 401,\n \"line_range\": [\n 401,\n 401\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\": 402,\n \"end_line_number\": 402,\n \"line_range\": [\n 402,\n 402\n ],\n \"text\": \"@brief Coverage helper construct 5.\",\n \"text_lines\": [\n \"@brief Coverage helper construct 5.\"\n ]\n },\n {\n \"start_line_number\": 409,\n \"end_line_number\": 409,\n \"line_range\": [\n 409,\n 409\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_elixir.ex | Elixir | 409L | 66 symbols | 5 imports | 57 comments\n> Path: `tests/fixtures/fixture_elixir.ex`\n\n## Imports\n```\nuse GenServer\nimport Enum\nalias MyApp.Config\nalias MyApp.Server.State\nrequire Logger\n```\n\n## Definitions\n\n### mod `defmodule MyApp.Server do` (L10-183)\n- fn `def add_item(server, item) do` (L79-81)\n- fn `def get_items(server) do` (L90-92)\n- fn `def notify(server, event) do` (L102-104)\n- fn `defp via_tuple(name) do` (L111-113)\n - @brief Generate a via-tuple for process registration.\n - @param name The server name.\n - @return Via-tuple for Registry lookup.\n- fn `def init(opts) do` (L118-131)\n- fn `def handle_call({:add_item, item}, _from, state) do` (L134-142)\n- fn `def handle_call(:get_items, _from, state) do` (L145-147)\n- fn `def handle_cast({:notify, event}, state) do` (L150-153)\n- fn `def handle_info(:timeout, state) do` (L156-159)\n- fn `defp handle_internal(state) do` (L164-168)\n - @brief Handle internal state cleanup and maintenance.\n - @param state Current server state.\n - @return Updated state with pruned items.\n- fn `defmacro my_macro(expr) do` (L176-182)\n\n### struct `defstruct [:name, :port, items: [], started_at: nil]` (L44-69)\n- @brief Maximum items stored in server state.\n- fn `def start_link(opts) do` (L66-69)\n\n### proto `defprotocol Printable do` (L187-200)\n- fn `def print(data)` (L199-200)\n\n### impl `defimpl Printable, for: MyApp.Server do` (L204-214)\n- fn `def print(server) do` (L211-213)\n\n### impl `defimpl Printable, for: BitString do` (L216-220)\n- fn `def print(str) do` (L217-219)\n\n### mod `defmodule MyApp.Utils do` (L224-296)\n- fn `def classify(value) when is_integer(value) and value > 0, do: :positive` (L237-258)\n- fn `def classify(value) when is_integer(value) and value < 0, do: :negative` (L238-258)\n- fn `def classify(0), do: :zero` (L239-258)\n- fn `def classify(value) when is_binary(value), do: :string` (L240-258)\n- fn `def classify(value) when is_list(value), do: :list` (L241-258)\n- fn `def classify(_), do: :unknown` (L242-258)\n- fn `def process_list(items) do` (L251-258)\n- fn `def pythagorean_triples(range) do` (L267-274)\n- fn `def safe_divide(_, 0), do: {:error, :division_by_zero}` (L284-296)\n- fn `def safe_divide(a, b), do: {:ok, a / b}` (L285-296)\n- fn `def factorial(0), do: 1` (L294-296)\n- fn `def factorial(n) when n > 0, do: n * factorial(n - 1)` (L295-296)\n\n### mod `defmodule MyApp.Plugin do` (L300-315)\n\n### mod `defmodule MyApp.Extra do` (L318-321)\n\n### struct `defstruct [:name]` (L320-321)\n\n### mod `defmodule MyApp.Audit do` (L323-325)\n\n### struct `defstruct [:id]` (L324-325)\n\n### mod `defmodule MyApp.State do` (L327-329)\n\n### struct `defstruct [:status]` (L328-329)\n\n### mod `defmodule MyApp.Payload do` (L331-333)\n\n### struct `defstruct [:value]` (L332-333)\n\n### mod `defmodule MyApp.Context do` (L335-337)\n\n### struct `defstruct [:meta]` (L336-337)\n\n### proto `defprotocol Auditable do` (L339-341)\n- fn `def audit(data)` (L340-341)\n\n### proto `defprotocol Renderable do` (L343-345)\n- fn `def render(data)` (L344-345)\n\n### proto `defprotocol Parsable do` (L347-349)\n- fn `def parse(data)` (L348-349)\n\n### proto `defprotocol Validatable do` (L351-353)\n- fn `def validate(data)` (L352-353)\n\n### impl `defimpl Auditable, for: Any do` (L355-357)\n- fn `def audit(data), do: data` (L356-357)\n\n### impl `defimpl Renderable, for: Any do` (L359-361)\n- fn `def render(data), do: data` (L360-361)\n\n### impl `defimpl Parsable, for: Any do` (L363-365)\n- fn `def parse(data), do: data` (L364-365)\n\n### impl `defimpl Validatable, for: Any do` (L367-369)\n- fn `def validate(data), do: data` (L368-369)\n\n### mod `defmodule ReqCoverElixir do` (L372-408)\n- @brief Coverage helper construct 1.\n- @details Provides deterministic fixture-level Doxygen coverage block 1.\n- fn `def req_cover_elixir_1(value), do: value + 1` (L378-408)\n - @brief Coverage helper construct 1.\n - @brief Coverage helper construct 2.\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 `def req_cover_elixir_2(value), do: value + 2` (L385-408)\n - @brief Coverage helper construct 2.\n - @brief Coverage helper construct 3.\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 `def req_cover_elixir_3(value), do: value + 3` (L392-408)\n - @brief Coverage helper construct 3.\n - @brief Coverage helper construct 4.\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 `def req_cover_elixir_4(value), do: value + 4` (L399-408)\n - @brief Coverage helper construct 4.\n - @brief Coverage helper construct 5.\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 `def req_cover_elixir_5(value), do: value + 5` (L406-408)\n - @brief Coverage helper construct 5.\n - @details Provides deterministic fixture-level Doxygen coverage block 5.\n - @param value Input value for helper construct 5.\n - @return Output value for helper construct 5.\n\n## Symbol Index\n|Symbol|Kind|Vis|Lines|Sig|\n|---|---|---|---|---|\n|`MyApp.Server`|mod||10-183||\n|`[:name, :port, items: [], started_at: nil]`|struct||44-69|defstruct [:name, :port, items: [], started_at: nil]|\n|`[:name, :port, items: [], started_at: nil].start_link`|fn||66-69|def start_link(opts) do|\n|`MyApp.Server.add_item`|fn||79-81|def add_item(server, item) do|\n|`MyApp.Server.get_items`|fn||90-92|def get_items(server) do|\n|`MyApp.Server.notify`|fn||102-104|def notify(server, event) do|\n|`MyApp.Server.via_tuple`|fn||111-113|defp via_tuple(name) do|\n|`MyApp.Server.init`|fn||118-131|def init(opts) do|\n|`MyApp.Server.handle_call`|fn||134-142|def handle_call({:add_item, item}, _from, state) do|\n|`MyApp.Server.handle_call`|fn||145-147|def handle_call(:get_items, _from, state) do|\n|`MyApp.Server.handle_cast`|fn||150-153|def handle_cast({:notify, event}, state) do|\n|`MyApp.Server.handle_info`|fn||156-159|def handle_info(:timeout, state) do|\n|`MyApp.Server.handle_internal`|fn||164-168|defp handle_internal(state) do|\n|`MyApp.Server.my_macro`|fn||176-182|defmacro my_macro(expr) do|\n|`Printable`|proto||187-200||\n|`Printable.print`|fn||199-200|def print(data)|\n|`Printable`|impl||204-214|defimpl Printable, for: MyApp.Server do|\n|`Printable.print`|fn||211-213|def print(server) do|\n|`Printable`|impl||216-220|defimpl Printable, for: BitString do|\n|`Printable.print`|fn||217-219|def print(str) do|\n|`MyApp.Utils`|mod||224-296||\n|`MyApp.Utils.classify`|fn||237-258|def classify(value) when is_integer(value) and value > 0,...|\n|`MyApp.Utils.classify`|fn||238-258|def classify(value) when is_integer(value) and value < 0,...|\n|`MyApp.Utils.classify`|fn||239-258|def classify(0), do: :zero|\n|`MyApp.Utils.classify`|fn||240-258|def classify(value) when is_binary(value), do: :string|\n|`MyApp.Utils.classify`|fn||241-258|def classify(value) when is_list(value), do: :list|\n|`MyApp.Utils.classify`|fn||242-258|def classify(_), do: :unknown|\n|`MyApp.Utils.process_list`|fn||251-258|def process_list(items) do|\n|`MyApp.Utils.pythagorean_triples`|fn||267-274|def pythagorean_triples(range) do|\n|`MyApp.Utils.safe_divide`|fn||284-296|def safe_divide(_, 0), do: {:error, :division_by_zero}|\n|`MyApp.Utils.safe_divide`|fn||285-296|def safe_divide(a, b), do: {:ok, a / b}|\n|`MyApp.Utils.factorial`|fn||294-296|def factorial(0), do: 1|\n|`MyApp.Utils.factorial`|fn||295-296|def factorial(n) when n > 0, do: n * factorial(n - 1)|\n|`MyApp.Plugin`|mod||300-315||\n|`MyApp.Extra`|mod||318-321||\n|`[:name]`|struct||320-321|defstruct [:name]|\n|`MyApp.Audit`|mod||323-325||\n|`[:id]`|struct||324-325|defstruct [:id]|\n|`MyApp.State`|mod||327-329||\n|`[:status]`|struct||328-329|defstruct [:status]|\n|`MyApp.Payload`|mod||331-333||\n|`[:value]`|struct||332-333|defstruct [:value]|\n|`MyApp.Context`|mod||335-337||\n|`[:meta]`|struct||336-337|defstruct [:meta]|\n|`Auditable`|proto||339-341||\n|`Auditable.audit`|fn||340-341|def audit(data)|\n|`Renderable`|proto||343-345||\n|`Renderable.render`|fn||344-345|def render(data)|\n|`Parsable`|proto||347-349||\n|`Parsable.parse`|fn||348-349|def parse(data)|\n|`Validatable`|proto||351-353||\n|`Validatable.validate`|fn||352-353|def validate(data)|\n|`Auditable`|impl||355-357|defimpl Auditable, for: Any do|\n|`Auditable.audit`|fn||356-357|def audit(data), do: data|\n|`Renderable`|impl||359-361|defimpl Renderable, for: Any do|\n|`Renderable.render`|fn||360-361|def render(data), do: data|\n|`Parsable`|impl||363-365|defimpl Parsable, for: Any do|\n|`Parsable.parse`|fn||364-365|def parse(data), do: data|\n|`Validatable`|impl||367-369|defimpl Validatable, for: Any do|\n|`Validatable.validate`|fn||368-369|def validate(data), do: data|\n|`ReqCoverElixir`|mod||372-408||\n|`ReqCoverElixir.req_cover_elixir_1`|fn||378-408|def req_cover_elixir_1(value), do: value + 1|\n|`ReqCoverElixir.req_cover_elixir_2`|fn||385-408|def req_cover_elixir_2(value), do: value + 2|\n|`ReqCoverElixir.req_cover_elixir_3`|fn||392-408|def req_cover_elixir_3(value), do: value + 3|\n|`ReqCoverElixir.req_cover_elixir_4`|fn||399-408|def req_cover_elixir_4(value), do: value + 4|\n|`ReqCoverElixir.req_cover_elixir_5`|fn||406-408|def req_cover_elixir_5(value), do: value + 5|\n\n",
4
4
  "stderr": ""
5
5
  }