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_cpp.cpp\"\n ],\n \"requested_canonical_paths\": [\n \"tests/fixtures/fixture_cpp.cpp\"\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\": 54,\n \"total_import_count\": 7,\n \"total_comment_count\": 75,\n \"total_standalone_comment_count\": 41,\n \"total_doxygen_field_count\": 78,\n \"symbol_kind_counts\": {\n \"CLASS\": 6,\n \"ENUM\": 5,\n \"FUNCTION\": 23,\n \"MACRO\": 5,\n \"NAMESPACE\": 5,\n \"STRUCT\": 5,\n \"TYPE_ALIAS\": 5\n }\n },\n \"repository\": {\n \"root_directory_path\": \"<ROOT>\",\n \"source_directory_paths\": [],\n \"file_count\": 1,\n \"file_canonical_paths\": [\n \"tests/fixtures/fixture_cpp.cpp\"\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_cpp.cpp\",\n \"relative_path\": \"tests/fixtures/fixture_cpp.cpp\",\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\": 407,\n \"line_range\": [\n 1,\n 407\n ],\n \"request_index\": 0,\n \"input_path\": \"tests/fixtures/fixture_cpp.cpp\",\n \"canonical_path\": \"tests/fixtures/fixture_cpp.cpp\",\n \"absolute_path\": \"<ROOT>/tests/fixtures/fixture_cpp.cpp\",\n \"file_name\": \"fixture_cpp.cpp\",\n \"file_extension\": \".cpp\",\n \"language_id\": \"cpp\",\n \"language_name\": \"C++\",\n \"status\": \"analyzed\",\n \"exists\": true,\n \"is_file\": true,\n \"import_count\": 7,\n \"symbol_count\": 54,\n \"comment_count\": 75,\n \"standalone_comment_count\": 41,\n \"doxygen_field_count\": 78,\n \"file_doxygen\": {\n \"brief\": [\n \"Comprehensive C++ test fixture for parser stress-testing.\"\n ],\n \"details\": [\n \"Covers templates, SFINAE, constexpr, lambdas, concepts, CRTP,\\noperator overloading, move semantics, nested namespaces, and\\nmodern C++20/23 constructs.\"\n ]\n },\n \"imports\": [\n {\n \"start_line_number\": 13,\n \"end_line_number\": 13,\n \"line_range\": [\n 13,\n 13\n ],\n \"import_name\": \"<concepts>\",\n \"statement_text\": \"#include <concepts>\"\n },\n {\n \"start_line_number\": 14,\n \"end_line_number\": 14,\n \"line_range\": [\n 14,\n 14\n ],\n \"import_name\": \"<functional>\",\n \"statement_text\": \"#include <functional>\"\n },\n {\n \"start_line_number\": 15,\n \"end_line_number\": 15,\n \"line_range\": [\n 15,\n 15\n ],\n \"import_name\": \"<iostream>\",\n \"statement_text\": \"#include <iostream>\"\n },\n {\n \"start_line_number\": 16,\n \"end_line_number\": 16,\n \"line_range\": [\n 16,\n 16\n ],\n \"import_name\": \"<memory>\",\n \"statement_text\": \"#include <memory>\"\n },\n {\n \"start_line_number\": 17,\n \"end_line_number\": 17,\n \"line_range\": [\n 17,\n 17\n ],\n \"import_name\": \"<optional>\",\n \"statement_text\": \"#include <optional>\"\n },\n {\n \"start_line_number\": 18,\n \"end_line_number\": 18,\n \"line_range\": [\n 18,\n 18\n ],\n \"import_name\": \"<string>\",\n \"statement_text\": \"#include <string>\"\n },\n {\n \"start_line_number\": 19,\n \"end_line_number\": 19,\n \"line_range\": [\n 19,\n 19\n ],\n \"import_name\": \"<vector>\",\n \"statement_text\": \"#include <vector>\"\n }\n ],\n \"symbols\": [\n {\n \"start_line_number\": 21,\n \"end_line_number\": 21,\n \"line_range\": [\n 21,\n 21\n ],\n \"declaration_order_index\": 0,\n \"symbol_name\": \"VERSION\",\n \"qualified_name\": \"VERSION\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"#define VERSION 2\",\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\": 24,\n \"end_line_number\": 24,\n \"line_range\": [\n 24,\n 24\n ],\n \"declaration_order_index\": 1,\n \"symbol_name\": \"LIKELY\",\n \"qualified_name\": \"LIKELY\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"#define LIKELY(x) __builtin_expect(!!(x), 1)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"@def LIKELY Branch prediction hint for hot paths.\",\n \"attached_comment_lines\": [\n \"@def LIKELY Branch prediction hint for hot paths.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 28,\n \"end_line_number\": 299,\n \"line_range\": [\n 28,\n 299\n ],\n \"declaration_order_index\": 2,\n \"symbol_name\": \"MyNS\",\n \"qualified_name\": \"MyNS\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace MyNS\",\n \"child_symbol_names\": [\n \"StringVec\",\n \"int\",\n \"Callback\",\n \"type_name\",\n \"f\",\n \"greet\",\n \"main\",\n \"t\"\n ],\n \"child_qualified_names\": [\n \"MyNS.StringVec\",\n \"MyNS.int\",\n \"MyNS.Callback\",\n \"MyNS.type_name\",\n \"MyNS.f\",\n \"MyNS.greet\",\n \"MyNS.main\",\n \"MyNS.t\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"── Namespace ──────────────────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Namespace ──────────────────────────────────────────────────────────\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 30,\n \"end_line_number\": 30,\n \"line_range\": [\n 30,\n 30\n ],\n \"text\": \"── Concepts (C++20) ───────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Concepts (C++20) ───────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 32,\n \"end_line_number\": 35,\n \"line_range\": [\n 32,\n 35\n ],\n \"text\": \"@concept Printable @brief Constrains types that support stream insertion via operator<<.\",\n \"text_lines\": [\n \"@concept Printable @brief Constrains types that support stream insertion via operator<<.\"\n ]\n },\n {\n \"start_line_number\": 41,\n \"end_line_number\": 44,\n \"line_range\": [\n 41,\n 44\n ],\n \"text\": \"@concept Numeric @brief Constrains types to integral or floating point.\",\n \"text_lines\": [\n \"@concept Numeric @brief Constrains types to integral or floating point.\"\n ]\n },\n {\n \"start_line_number\": 48,\n \"end_line_number\": 48,\n \"line_range\": [\n 48,\n 48\n ],\n \"text\": \"── Template class ─────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Template class ─────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 50,\n \"end_line_number\": 54,\n \"line_range\": [\n 50,\n 54\n ],\n \"text\": \"@class Container @brief Generic container with RAII semantics. @tparam T Element type; must satisfy Printable concept.\",\n \"text_lines\": [\n \"@class Container @brief Generic container with RAII semantics. @tparam T Element type; must satisfy Printable concept.\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"T value; /**< @brief Stored value of type T.\",\n \"text_lines\": [\n \"T value; /**< @brief Stored value of type T.\"\n ]\n },\n {\n \"start_line_number\": 59,\n \"end_line_number\": 62,\n \"line_range\": [\n 59,\n 62\n ],\n \"text\": \"@brief Construct container with an initial value. @param v The value to store.\",\n \"text_lines\": [\n \"@brief Construct container with an initial value. @param v The value to store.\"\n ]\n },\n {\n \"start_line_number\": 65,\n \"end_line_number\": 68,\n \"line_range\": [\n 65,\n 68\n ],\n \"text\": \"@brief Copy constructor performs deep copy. @param other Source container to copy from.\",\n \"text_lines\": [\n \"@brief Copy constructor performs deep copy. @param other Source container to copy from.\"\n ]\n },\n {\n \"start_line_number\": 71,\n \"end_line_number\": 74,\n \"line_range\": [\n 71,\n 74\n ],\n \"text\": \"@brief Move constructor transfers ownership. @param other Source container; left in valid but unspecified state.\",\n \"text_lines\": [\n \"@brief Move constructor transfers ownership. @param other Source container; left in valid but unspecified state.\"\n ]\n },\n {\n \"start_line_number\": 77,\n \"end_line_number\": 81,\n \"line_range\": [\n 77,\n 81\n ],\n \"text\": \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 84,\n \"end_line_number\": 88,\n \"line_range\": [\n 84,\n 88\n ],\n \"text\": \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 91,\n \"end_line_number\": 91,\n \"line_range\": [\n 91,\n 91\n ],\n \"text\": \"@brief Destructor; default cleanup.\",\n \"text_lines\": [\n \"@brief Destructor; default cleanup.\"\n ]\n },\n {\n \"start_line_number\": 94,\n \"end_line_number\": 99,\n \"line_range\": [\n 94,\n 99\n ],\n \"text\": \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. @return The output stream.\",\n \"text_lines\": [\n \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. @return The output stream.\"\n ]\n },\n {\n \"start_line_number\": 104,\n \"end_line_number\": 108,\n \"line_range\": [\n 104,\n 108\n ],\n \"text\": \"@brief Equality comparison between containers. @param other Container to compare with. @return True if values are equal.\",\n \"text_lines\": [\n \"@brief Equality comparison between containers. @param other Container to compare with. @return True if values are equal.\"\n ]\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 112,\n \"line_range\": [\n 112,\n 112\n ],\n \"text\": \"── Struct ─────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ─────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 114,\n \"end_line_number\": 117,\n \"line_range\": [\n 114,\n 117\n ],\n \"text\": \"@struct Point @brief 2D coordinate with constexpr arithmetic support.\",\n \"text_lines\": [\n \"@struct Point @brief 2D coordinate with constexpr arithmetic support.\"\n ]\n },\n {\n \"start_line_number\": 119,\n \"end_line_number\": 119,\n \"line_range\": [\n 119,\n 119\n ],\n \"text\": \"double x; /**< @brief X coordinate.\",\n \"text_lines\": [\n \"double x; /**< @brief X coordinate.\"\n ]\n },\n {\n \"start_line_number\": 120,\n \"end_line_number\": 120,\n \"line_range\": [\n 120,\n 120\n ],\n \"text\": \"double y; /**< @brief Y coordinate.\",\n \"text_lines\": [\n \"double y; /**< @brief Y coordinate.\"\n ]\n },\n {\n \"start_line_number\": 122,\n \"end_line_number\": 126,\n \"line_range\": [\n 122,\n 126\n ],\n \"text\": \"@brief Compute Euclidean distance squared to another point. @param other Target point. @return Distance squared (avoids sqrt overhead).\",\n \"text_lines\": [\n \"@brief Compute Euclidean distance squared to another point. @param other Target point. @return Distance squared (avoids sqrt overhead).\"\n ]\n },\n {\n \"start_line_number\": 128,\n \"end_line_number\": 128,\n \"line_range\": [\n 128,\n 128\n ],\n \"text\": \"Squared differences avoid floating-point sqrt\",\n \"text_lines\": [\n \"Squared differences avoid floating-point sqrt\"\n ]\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 138,\n \"line_range\": [\n 134,\n 138\n ],\n \"text\": \"@brief Add two points component-wise. @param rhs Right-hand operand. @return New Point with summed coordinates.\",\n \"text_lines\": [\n \"@brief Add two points component-wise. @param rhs Right-hand operand. @return New Point with summed coordinates.\"\n ]\n },\n {\n \"start_line_number\": 144,\n \"end_line_number\": 144,\n \"line_range\": [\n 144,\n 144\n ],\n \"text\": \"── Enum class ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Enum class ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 146,\n \"end_line_number\": 149,\n \"line_range\": [\n 146,\n 149\n ],\n \"text\": \"@enum Direction @brief Cardinal movement directions with strong typing.\",\n \"text_lines\": [\n \"@enum Direction @brief Cardinal movement directions with strong typing.\"\n ]\n },\n {\n \"start_line_number\": 151,\n \"end_line_number\": 151,\n \"line_range\": [\n 151,\n 151\n ],\n \"text\": \"Up, /**< @brief Move upward.\",\n \"text_lines\": [\n \"Up, /**< @brief Move upward.\"\n ]\n },\n {\n \"start_line_number\": 152,\n \"end_line_number\": 152,\n \"line_range\": [\n 152,\n 152\n ],\n \"text\": \"Down, /**< @brief Move downward.\",\n \"text_lines\": [\n \"Down, /**< @brief Move downward.\"\n ]\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 153,\n \"line_range\": [\n 153,\n 153\n ],\n \"text\": \"Left, /**< @brief Move left.\",\n \"text_lines\": [\n \"Left, /**< @brief Move left.\"\n ]\n },\n {\n \"start_line_number\": 154,\n \"end_line_number\": 154,\n \"line_range\": [\n 154,\n 154\n ],\n \"text\": \"Right /**< @brief Move right.\",\n \"text_lines\": [\n \"Right /**< @brief Move right.\"\n ]\n },\n {\n \"start_line_number\": 157,\n \"end_line_number\": 157,\n \"line_range\": [\n 157,\n 157\n ],\n \"text\": \"── Type aliases ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Type aliases ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 159,\n \"end_line_number\": 159,\n \"line_range\": [\n 159,\n 159\n ],\n \"text\": \"@typedef StringVec Convenience alias for string vectors.\",\n \"text_lines\": [\n \"@typedef StringVec Convenience alias for string vectors.\"\n ]\n },\n {\n \"start_line_number\": 162,\n \"end_line_number\": 162,\n \"line_range\": [\n 162,\n 162\n ],\n \"text\": \"@typedef my_int_t Legacy alias for integer type.\",\n \"text_lines\": [\n \"@typedef my_int_t Legacy alias for integer type.\"\n ]\n },\n {\n \"start_line_number\": 165,\n \"end_line_number\": 165,\n \"line_range\": [\n 165,\n 165\n ],\n \"text\": \"@typedef Callback Function wrapper for void callbacks.\",\n \"text_lines\": [\n \"@typedef Callback Function wrapper for void callbacks.\"\n ]\n },\n {\n \"start_line_number\": 168,\n \"end_line_number\": 168,\n \"line_range\": [\n 168,\n 168\n ],\n \"text\": \"── CRTP pattern ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── CRTP pattern ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 170,\n \"end_line_number\": 174,\n \"line_range\": [\n 170,\n 174\n ],\n \"text\": \"@class Cloneable @brief CRTP base providing a polymorphic clone method. @tparam Derived The concrete class inheriting this base.\",\n \"text_lines\": [\n \"@class Cloneable @brief CRTP base providing a polymorphic clone method. @tparam Derived The concrete class inheriting this base.\"\n ]\n },\n {\n \"start_line_number\": 177,\n \"end_line_number\": 180,\n \"line_range\": [\n 177,\n 180\n ],\n \"text\": \"@brief Create a heap-allocated copy of the derived object. @return Unique pointer to the cloned instance.\",\n \"text_lines\": [\n \"@brief Create a heap-allocated copy of the derived object. @return Unique pointer to the cloned instance.\"\n ]\n },\n {\n \"start_line_number\": 182,\n \"end_line_number\": 182,\n \"line_range\": [\n 182,\n 182\n ],\n \"text\": \"static_cast down to Derived is safe under CRTP contract\",\n \"text_lines\": [\n \"static_cast down to Derived is safe under CRTP contract\"\n ]\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"text\": \"── Virtual inheritance ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Virtual inheritance ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 189,\n \"end_line_number\": 192,\n \"line_range\": [\n 189,\n 192\n ],\n \"text\": \"@class Base @brief Abstract base with a pure virtual method.\",\n \"text_lines\": [\n \"@class Base @brief Abstract base with a pure virtual method.\"\n ]\n },\n {\n \"start_line_number\": 195,\n \"end_line_number\": 198,\n \"line_range\": [\n 195,\n 198\n ],\n \"text\": \"@brief Identify the concrete type at runtime. @return A non-owning string literal naming the type.\",\n \"text_lines\": [\n \"@brief Identify the concrete type at runtime. @return A non-owning string literal naming the type.\"\n ]\n },\n {\n \"start_line_number\": 203,\n \"end_line_number\": 206,\n \"line_range\": [\n 203,\n 206\n ],\n \"text\": \"@class DerivedA @brief First concrete implementation of Base.\",\n \"text_lines\": [\n \"@class DerivedA @brief First concrete implementation of Base.\"\n ]\n },\n {\n \"start_line_number\": 212,\n \"end_line_number\": 215,\n \"line_range\": [\n 212,\n 215\n ],\n \"text\": \"@class DerivedB @brief Second concrete implementation for diamond inheritance testing.\",\n \"text_lines\": [\n \"@class DerivedB @brief Second concrete implementation for diamond inheritance testing.\"\n ]\n },\n {\n \"start_line_number\": 221,\n \"end_line_number\": 224,\n \"line_range\": [\n 221,\n 224\n ],\n \"text\": \"@class Diamond @brief Diamond inheritance: inherits from both DerivedA and DerivedB.\",\n \"text_lines\": [\n \"@class Diamond @brief Diamond inheritance: inherits from both DerivedA and DerivedB.\"\n ]\n },\n {\n \"start_line_number\": 230,\n \"end_line_number\": 230,\n \"line_range\": [\n 230,\n 230\n ],\n \"text\": \"── Constexpr function ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Constexpr function ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 232,\n \"end_line_number\": 236,\n \"line_range\": [\n 232,\n 236\n ],\n \"text\": \"@brief Compute factorial at compile time. @param n Non-negative input. @return n! computed via recursive constexpr evaluation.\",\n \"text_lines\": [\n \"@brief Compute factorial at compile time. @param n Non-negative input. @return n! computed via recursive constexpr evaluation.\"\n ]\n },\n {\n \"start_line_number\": 238,\n \"end_line_number\": 238,\n \"line_range\": [\n 238,\n 238\n ],\n \"text\": \"Compile-time recursion terminates at n <= 1\",\n \"text_lines\": [\n \"Compile-time recursion terminates at n <= 1\"\n ]\n },\n {\n \"start_line_number\": 242,\n \"end_line_number\": 242,\n \"line_range\": [\n 242,\n 242\n ],\n \"text\": \"── Function with structured binding return ────────────────────────────\",\n \"text_lines\": [\n \"── Function with structured binding return ────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 244,\n \"end_line_number\": 248,\n \"line_range\": [\n 244,\n 248\n ],\n \"text\": \"@brief Parse a key=value string into its components. @param input String in \\\"key=value\\\" format. @return Pair of key and value; empty strings if malformed.\",\n \"text_lines\": [\n \"@brief Parse a key=value string into its components. @param input String in \\\"key=value\\\" format. @return Pair of key and value; empty strings if malformed.\"\n ]\n },\n {\n \"start_line_number\": 252,\n \"end_line_number\": 252,\n \"line_range\": [\n 252,\n 252\n ],\n \"text\": \"No delimiter found — return empty pair\",\n \"text_lines\": [\n \"No delimiter found — return empty pair\"\n ]\n },\n {\n \"start_line_number\": 258,\n \"end_line_number\": 258,\n \"line_range\": [\n 258,\n 258\n ],\n \"text\": \"── Free functions ─────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Free functions ─────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 260,\n \"end_line_number\": 263,\n \"line_range\": [\n 260,\n 263\n ],\n \"text\": \"@brief Greet a person by name on stdout. @param name The person's name to display.\",\n \"text_lines\": [\n \"@brief Greet a person by name on stdout. @param name The person's name to display.\"\n ]\n },\n {\n \"start_line_number\": 266,\n \"end_line_number\": 269,\n \"line_range\": [\n 266,\n 269\n ],\n \"text\": \"@brief Program entry point. @return 0 on success.\",\n \"text_lines\": [\n \"@brief Program entry point. @return 0 on success.\"\n ]\n },\n {\n \"start_line_number\": 271,\n \"end_line_number\": 271,\n \"line_range\": [\n 271,\n 271\n ],\n \"text\": \"Structured binding from parse_kv\",\n \"text_lines\": [\n \"Structured binding from parse_kv\"\n ]\n },\n {\n \"start_line_number\": 277,\n \"end_line_number\": 277,\n \"line_range\": [\n 277,\n 277\n ],\n \"text\": \"── Lambda stored in variable ──────────────────────────────────────────\",\n \"text_lines\": [\n \"── Lambda stored in variable ──────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 279,\n \"end_line_number\": 283,\n \"line_range\": [\n 279,\n 283\n ],\n \"text\": \"@brief Inline lambda for squaring values. Demonstrates constexpr lambda with auto parameter (C++20 generic lambda).\",\n \"text_lines\": [\n \"@brief Inline lambda for squaring values. Demonstrates constexpr lambda with auto parameter (C++20 generic lambda).\"\n ]\n },\n {\n \"start_line_number\": 286,\n \"end_line_number\": 286,\n \"line_range\": [\n 286,\n 286\n ],\n \"text\": \"── Nested namespace (C++17) ───────────────────────────────────────────\",\n \"text_lines\": [\n \"── Nested namespace (C++17) ───────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 290,\n \"end_line_number\": 294,\n \"line_range\": [\n 290,\n 294\n ],\n \"text\": \"@brief Internal helper formatting integers to strings. @param v The integer to format. @return Formatted string representation.\",\n \"text_lines\": [\n \"@brief Internal helper formatting integers to strings. @param v The integer to format. @return Formatted string representation.\"\n ]\n },\n {\n \"start_line_number\": 297,\n \"end_line_number\": 297,\n \"line_range\": [\n 297,\n 297\n ],\n \"text\": \"namespace Inner::Detail\",\n \"text_lines\": [\n \"namespace Inner::Detail\"\n ]\n },\n {\n \"start_line_number\": 299,\n \"end_line_number\": 299,\n \"line_range\": [\n 299,\n 299\n ],\n \"text\": \"namespace MyNS\",\n \"text_lines\": [\n \"namespace MyNS\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 101,\n \"text\": \"return os << c.value;\"\n },\n {\n \"line_number\": 131,\n \"text\": \"return dx * dx + dy * dy;\"\n },\n {\n \"line_number\": 140,\n \"text\": \"return {x + rhs.x, y + rhs.y};\"\n },\n {\n \"line_number\": 183,\n \"text\": \"return std::make_unique<Derived>(static_cast<const Derived &>(*this));\"\n },\n {\n \"line_number\": 239,\n \"text\": \"return n <= 1 ? 1ULL : n * constexpr_factorial(n - 1);\"\n },\n {\n \"line_number\": 253,\n \"text\": \"return {\\\"\\\", \\\"\\\"};\"\n },\n {\n \"line_number\": 255,\n \"text\": \"return {input.substr(0, pos), input.substr(pos + 1)};\"\n },\n {\n \"line_number\": 274,\n \"text\": \"return 0;\"\n }\n ]\n },\n {\n \"start_line_number\": 55,\n \"end_line_number\": 110,\n \"line_range\": [\n 55,\n 110\n ],\n \"declaration_order_index\": 3,\n \"symbol_name\": \"Container\",\n \"qualified_name\": \"Container\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"template <Printable T> class Container\",\n \"child_symbol_names\": [\n \"r\",\n \"r\",\n \"r\"\n ],\n \"child_qualified_names\": [\n \"Container.r\",\n \"Container.r\",\n \"Container.r\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Generic container with RAII semantics.\\n@tparam T Element type; must satisfy Printable concept.\",\n \"doxygen\": {\n \"brief\": [\n \"Generic container with RAII semantics.\\n@tparam T Element type; must satisfy Printable concept.\",\n \"Stored value of type T.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"T value; /**< @brief Stored value of type T.\",\n \"text_lines\": [\n \"T value; /**< @brief Stored value of type T.\"\n ]\n },\n {\n \"start_line_number\": 59,\n \"end_line_number\": 62,\n \"line_range\": [\n 59,\n 62\n ],\n \"text\": \"@brief Construct container with an initial value. @param v The value to store.\",\n \"text_lines\": [\n \"@brief Construct container with an initial value. @param v The value to store.\"\n ]\n },\n {\n \"start_line_number\": 65,\n \"end_line_number\": 68,\n \"line_range\": [\n 65,\n 68\n ],\n \"text\": \"@brief Copy constructor performs deep copy. @param other Source container to copy from.\",\n \"text_lines\": [\n \"@brief Copy constructor performs deep copy. @param other Source container to copy from.\"\n ]\n },\n {\n \"start_line_number\": 71,\n \"end_line_number\": 74,\n \"line_range\": [\n 71,\n 74\n ],\n \"text\": \"@brief Move constructor transfers ownership. @param other Source container; left in valid but unspecified state.\",\n \"text_lines\": [\n \"@brief Move constructor transfers ownership. @param other Source container; left in valid but unspecified state.\"\n ]\n },\n {\n \"start_line_number\": 77,\n \"end_line_number\": 81,\n \"line_range\": [\n 77,\n 81\n ],\n \"text\": \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 84,\n \"end_line_number\": 88,\n \"line_range\": [\n 84,\n 88\n ],\n \"text\": \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 91,\n \"end_line_number\": 91,\n \"line_range\": [\n 91,\n 91\n ],\n \"text\": \"@brief Destructor; default cleanup.\",\n \"text_lines\": [\n \"@brief Destructor; default cleanup.\"\n ]\n },\n {\n \"start_line_number\": 94,\n \"end_line_number\": 99,\n \"line_range\": [\n 94,\n 99\n ],\n \"text\": \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. @return The output stream.\",\n \"text_lines\": [\n \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. @return The output stream.\"\n ]\n },\n {\n \"start_line_number\": 104,\n \"end_line_number\": 108,\n \"line_range\": [\n 104,\n 108\n ],\n \"text\": \"@brief Equality comparison between containers. @param other Container to compare with. @return True if values are equal.\",\n \"text_lines\": [\n \"@brief Equality comparison between containers. @param other Container to compare with. @return True if values are equal.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 101,\n \"text\": \"return os << c.value;\"\n }\n ]\n },\n {\n \"start_line_number\": 63,\n \"end_line_number\": 63,\n \"line_range\": [\n 63,\n 63\n ],\n \"declaration_order_index\": 4,\n \"symbol_name\": \"r\",\n \"qualified_name\": \"Container.r\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"explicit Container(T v) : value(std::move(v)) {}\",\n \"parent_symbol_name\": \"Container\",\n \"parent_qualified_name\": \"Container\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Construct container with an initial value.\",\n \"doxygen\": {\n \"brief\": [\n \"Construct container with an initial value.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"v\",\n \"description\": \"The value to store.\"\n }\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 69,\n \"end_line_number\": 102,\n \"line_range\": [\n 69,\n 102\n ],\n \"declaration_order_index\": 5,\n \"symbol_name\": \"r\",\n \"qualified_name\": \"Container.r\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"Container(const Container &other) = default\",\n \"parent_symbol_name\": \"Container\",\n \"parent_qualified_name\": \"Container\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Copy constructor performs deep copy.\",\n \"doxygen\": {\n \"brief\": [\n \"Copy constructor performs deep copy.\",\n \"Move constructor transfers ownership.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"other\",\n \"description\": \"Source container to copy from.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"other\",\n \"description\": \"Source container; left in valid but unspecified state.\"\n }\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 71,\n \"end_line_number\": 74,\n \"line_range\": [\n 71,\n 74\n ],\n \"text\": \"@brief Move constructor transfers ownership. @param other Source container; left in valid but unspecified state.\",\n \"text_lines\": [\n \"@brief Move constructor transfers ownership. @param other Source container; left in valid but unspecified state.\"\n ]\n },\n {\n \"start_line_number\": 77,\n \"end_line_number\": 81,\n \"line_range\": [\n 77,\n 81\n ],\n \"text\": \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 84,\n \"end_line_number\": 88,\n \"line_range\": [\n 84,\n 88\n ],\n \"text\": \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 91,\n \"end_line_number\": 91,\n \"line_range\": [\n 91,\n 91\n ],\n \"text\": \"@brief Destructor; default cleanup.\",\n \"text_lines\": [\n \"@brief Destructor; default cleanup.\"\n ]\n },\n {\n \"start_line_number\": 94,\n \"end_line_number\": 99,\n \"line_range\": [\n 94,\n 99\n ],\n \"text\": \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. @return The output stream.\",\n \"text_lines\": [\n \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. @return The output stream.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 101,\n \"text\": \"return os << c.value;\"\n }\n ]\n },\n {\n \"start_line_number\": 75,\n \"end_line_number\": 102,\n \"line_range\": [\n 75,\n 102\n ],\n \"declaration_order_index\": 6,\n \"symbol_name\": \"r\",\n \"qualified_name\": \"Container.r\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"Container(Container &&other) noexcept = default\",\n \"parent_symbol_name\": \"Container\",\n \"parent_qualified_name\": \"Container\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Move constructor transfers ownership.\",\n \"doxygen\": {\n \"brief\": [\n \"Move constructor transfers ownership.\",\n \"Copy assignment operator.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"other\",\n \"description\": \"Source container; left in valid but unspecified state.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"other\",\n \"description\": \"Source container.\"\n }\n ],\n \"returns\": [\n \"Reference to this container.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 77,\n \"end_line_number\": 81,\n \"line_range\": [\n 77,\n 81\n ],\n \"text\": \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 84,\n \"end_line_number\": 88,\n \"line_range\": [\n 84,\n 88\n ],\n \"text\": \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 91,\n \"end_line_number\": 91,\n \"line_range\": [\n 91,\n 91\n ],\n \"text\": \"@brief Destructor; default cleanup.\",\n \"text_lines\": [\n \"@brief Destructor; default cleanup.\"\n ]\n },\n {\n \"start_line_number\": 94,\n \"end_line_number\": 99,\n \"line_range\": [\n 94,\n 99\n ],\n \"text\": \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. @return The output stream.\",\n \"text_lines\": [\n \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. @return The output stream.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 101,\n \"text\": \"return os << c.value;\"\n }\n ]\n },\n {\n \"start_line_number\": 118,\n \"end_line_number\": 142,\n \"line_range\": [\n 118,\n 142\n ],\n \"declaration_order_index\": 7,\n \"symbol_name\": \"Point\",\n \"qualified_name\": \"Point\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"struct Point\",\n \"child_symbol_names\": [\n \"dist_sq\"\n ],\n \"child_qualified_names\": [\n \"Point.dist_sq\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"2D coordinate with constexpr arithmetic support.\",\n \"doxygen\": {\n \"brief\": [\n \"2D coordinate with constexpr arithmetic support.\",\n \"X coordinate.\",\n \"Y coordinate.\"\n ]\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\": \"double x; /**< @brief X coordinate.\",\n \"text_lines\": [\n \"double x; /**< @brief X coordinate.\"\n ]\n },\n {\n \"start_line_number\": 120,\n \"end_line_number\": 120,\n \"line_range\": [\n 120,\n 120\n ],\n \"text\": \"double y; /**< @brief Y coordinate.\",\n \"text_lines\": [\n \"double y; /**< @brief Y coordinate.\"\n ]\n },\n {\n \"start_line_number\": 122,\n \"end_line_number\": 126,\n \"line_range\": [\n 122,\n 126\n ],\n \"text\": \"@brief Compute Euclidean distance squared to another point. @param other Target point. @return Distance squared (avoids sqrt overhead).\",\n \"text_lines\": [\n \"@brief Compute Euclidean distance squared to another point. @param other Target point. @return Distance squared (avoids sqrt overhead).\"\n ]\n },\n {\n \"start_line_number\": 128,\n \"end_line_number\": 128,\n \"line_range\": [\n 128,\n 128\n ],\n \"text\": \"Squared differences avoid floating-point sqrt\",\n \"text_lines\": [\n \"Squared differences avoid floating-point sqrt\"\n ]\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 138,\n \"line_range\": [\n 134,\n 138\n ],\n \"text\": \"@brief Add two points component-wise. @param rhs Right-hand operand. @return New Point with summed coordinates.\",\n \"text_lines\": [\n \"@brief Add two points component-wise. @param rhs Right-hand operand. @return New Point with summed coordinates.\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 131,\n \"text\": \"return dx * dx + dy * dy;\"\n },\n {\n \"line_number\": 140,\n \"text\": \"return {x + rhs.x, y + rhs.y};\"\n }\n ]\n },\n {\n \"start_line_number\": 127,\n \"end_line_number\": 132,\n \"line_range\": [\n 127,\n 132\n ],\n \"declaration_order_index\": 8,\n \"symbol_name\": \"dist_sq\",\n \"qualified_name\": \"Point.dist_sq\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"constexpr double dist_sq(const Point &other) const\",\n \"parent_symbol_name\": \"Point\",\n \"parent_qualified_name\": \"Point\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Compute Euclidean distance squared to another point.\",\n \"doxygen\": {\n \"brief\": [\n \"Compute Euclidean distance squared to another point.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"other\",\n \"description\": \"Target point.\"\n }\n ],\n \"returns\": [\n \"Distance squared (avoids sqrt overhead).\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 128,\n \"end_line_number\": 128,\n \"line_range\": [\n 128,\n 128\n ],\n \"text\": \"Squared differences avoid floating-point sqrt\",\n \"text_lines\": [\n \"Squared differences avoid floating-point sqrt\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 131,\n \"text\": \"return dx * dx + dy * dy;\"\n }\n ]\n },\n {\n \"start_line_number\": 150,\n \"end_line_number\": 155,\n \"line_range\": [\n 150,\n 155\n ],\n \"declaration_order_index\": 9,\n \"symbol_name\": \"Direction\",\n \"qualified_name\": \"Direction\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum class Direction\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Cardinal movement directions with strong typing.\",\n \"doxygen\": {\n \"brief\": [\n \"Cardinal movement directions with strong typing.\",\n \"Move upward.\",\n \"Move downward.\",\n \"Move left.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 151,\n \"end_line_number\": 151,\n \"line_range\": [\n 151,\n 151\n ],\n \"text\": \"Up, /**< @brief Move upward.\",\n \"text_lines\": [\n \"Up, /**< @brief Move upward.\"\n ]\n },\n {\n \"start_line_number\": 152,\n \"end_line_number\": 152,\n \"line_range\": [\n 152,\n 152\n ],\n \"text\": \"Down, /**< @brief Move downward.\",\n \"text_lines\": [\n \"Down, /**< @brief Move downward.\"\n ]\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 153,\n \"line_range\": [\n 153,\n 153\n ],\n \"text\": \"Left, /**< @brief Move left.\",\n \"text_lines\": [\n \"Left, /**< @brief Move left.\"\n ]\n },\n {\n \"start_line_number\": 154,\n \"end_line_number\": 154,\n \"line_range\": [\n 154,\n 154\n ],\n \"text\": \"Right /**< @brief Move right.\",\n \"text_lines\": [\n \"Right /**< @brief Move right.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 160,\n \"end_line_number\": 160,\n \"line_range\": [\n 160,\n 160\n ],\n \"declaration_order_index\": 10,\n \"symbol_name\": \"StringVec\",\n \"qualified_name\": \"MyNS.StringVec\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"using StringVec = std::vector<std::string>\",\n \"parent_symbol_name\": \"MyNS\",\n \"parent_qualified_name\": \"MyNS\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"── Type aliases ───────────────────────────────────────────────────────\",\n \"attached_comment_lines\": [\n \"── Type aliases ───────────────────────────────────────────────────────\",\n \"@typedef StringVec Convenience alias for string vectors.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 163,\n \"end_line_number\": 163,\n \"line_range\": [\n 163,\n 163\n ],\n \"declaration_order_index\": 11,\n \"symbol_name\": \"int\",\n \"qualified_name\": \"MyNS.int\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"typedef int my_int_t\",\n \"parent_symbol_name\": \"MyNS\",\n \"parent_qualified_name\": \"MyNS\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"@typedef my_int_t Legacy alias for integer type.\",\n \"attached_comment_lines\": [\n \"@typedef my_int_t Legacy alias for integer type.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 166,\n \"end_line_number\": 166,\n \"line_range\": [\n 166,\n 166\n ],\n \"declaration_order_index\": 12,\n \"symbol_name\": \"Callback\",\n \"qualified_name\": \"MyNS.Callback\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"using Callback = std::function<void(int)>\",\n \"parent_symbol_name\": \"MyNS\",\n \"parent_qualified_name\": \"MyNS\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"@typedef Callback Function wrapper for void callbacks.\",\n \"attached_comment_lines\": [\n \"@typedef Callback Function wrapper for void callbacks.\"\n ],\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 175,\n \"end_line_number\": 185,\n \"line_range\": [\n 175,\n 185\n ],\n \"declaration_order_index\": 13,\n \"symbol_name\": \"Cloneable\",\n \"qualified_name\": \"Cloneable\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"template <typename Derived> class Cloneable\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"CRTP base providing a polymorphic clone method.\\n@tparam Derived The concrete class inheriting this base.\",\n \"doxygen\": {\n \"brief\": [\n \"CRTP base providing a polymorphic clone method.\\n@tparam Derived The concrete class inheriting this base.\",\n \"Create a heap-allocated copy of the derived object.\"\n ],\n \"returns\": [\n \"Unique pointer to the cloned instance.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 177,\n \"end_line_number\": 180,\n \"line_range\": [\n 177,\n 180\n ],\n \"text\": \"@brief Create a heap-allocated copy of the derived object. @return Unique pointer to the cloned instance.\",\n \"text_lines\": [\n \"@brief Create a heap-allocated copy of the derived object. @return Unique pointer to the cloned instance.\"\n ]\n },\n {\n \"start_line_number\": 182,\n \"end_line_number\": 182,\n \"line_range\": [\n 182,\n 182\n ],\n \"text\": \"static_cast down to Derived is safe under CRTP contract\",\n \"text_lines\": [\n \"static_cast down to Derived is safe under CRTP contract\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 183,\n \"text\": \"return std::make_unique<Derived>(static_cast<const Derived &>(*this));\"\n }\n ]\n },\n {\n \"start_line_number\": 193,\n \"end_line_number\": 201,\n \"line_range\": [\n 193,\n 201\n ],\n \"declaration_order_index\": 14,\n \"symbol_name\": \"Base\",\n \"qualified_name\": \"Base\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Base\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Abstract base with a pure virtual method.\",\n \"doxygen\": {\n \"brief\": [\n \"Abstract base with a pure virtual method.\",\n \"Identify the concrete type at runtime.\"\n ],\n \"returns\": [\n \"A non-owning string literal naming the type.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 195,\n \"end_line_number\": 198,\n \"line_range\": [\n 195,\n 198\n ],\n \"text\": \"@brief Identify the concrete type at runtime. @return A non-owning string literal naming the type.\",\n \"text_lines\": [\n \"@brief Identify the concrete type at runtime. @return A non-owning string literal naming the type.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 199,\n \"end_line_number\": 207,\n \"line_range\": [\n 199,\n 207\n ],\n \"declaration_order_index\": 15,\n \"symbol_name\": \"type_name\",\n \"qualified_name\": \"MyNS.type_name\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"virtual const char *type_name() const = 0\",\n \"parent_symbol_name\": \"MyNS\",\n \"parent_qualified_name\": \"MyNS\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Identify the concrete type at runtime.\",\n \"doxygen\": {\n \"brief\": [\n \"Identify the concrete type at runtime.\"\n ],\n \"returns\": [\n \"A non-owning string literal naming the type.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 203,\n \"end_line_number\": 206,\n \"line_range\": [\n 203,\n 206\n ],\n \"text\": \"@class DerivedA @brief First concrete implementation of Base.\",\n \"text_lines\": [\n \"@class DerivedA @brief First concrete implementation of Base.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 207,\n \"end_line_number\": 210,\n \"line_range\": [\n 207,\n 210\n ],\n \"declaration_order_index\": 16,\n \"symbol_name\": \"DerivedA\",\n \"qualified_name\": \"DerivedA\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class DerivedA : public virtual Base\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"type_name\"\n ],\n \"child_qualified_names\": [\n \"DerivedA.type_name\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"public virtual Base\",\n \"attached_comment_summary_text\": \"First concrete implementation of Base.\",\n \"doxygen\": {\n \"brief\": [\n \"First concrete implementation of Base.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 209,\n \"end_line_number\": 209,\n \"line_range\": [\n 209,\n 209\n ],\n \"declaration_order_index\": 17,\n \"symbol_name\": \"type_name\",\n \"qualified_name\": \"DerivedA.type_name\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"const char *type_name() const override { return \\\"DerivedA\\\"; }\",\n \"parent_symbol_name\": \"DerivedA\",\n \"parent_qualified_name\": \"DerivedA\",\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\": 219,\n \"line_range\": [\n 216,\n 219\n ],\n \"declaration_order_index\": 18,\n \"symbol_name\": \"DerivedB\",\n \"qualified_name\": \"DerivedB\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class DerivedB : public virtual Base\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"type_name\"\n ],\n \"child_qualified_names\": [\n \"DerivedB.type_name\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"public virtual Base\",\n \"attached_comment_summary_text\": \"Second concrete implementation for diamond inheritance testing.\",\n \"doxygen\": {\n \"brief\": [\n \"Second concrete implementation for diamond inheritance testing.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 218,\n \"end_line_number\": 218,\n \"line_range\": [\n 218,\n 218\n ],\n \"declaration_order_index\": 19,\n \"symbol_name\": \"type_name\",\n \"qualified_name\": \"DerivedB.type_name\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"const char *type_name() const override { return \\\"DerivedB\\\"; }\",\n \"parent_symbol_name\": \"DerivedB\",\n \"parent_qualified_name\": \"DerivedB\",\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\": 225,\n \"end_line_number\": 228,\n \"line_range\": [\n 225,\n 228\n ],\n \"declaration_order_index\": 20,\n \"symbol_name\": \"Diamond\",\n \"qualified_name\": \"Diamond\",\n \"symbol_kind\": \"CLASS\",\n \"type_label\": \"CLASS\",\n \"signature_text\": \"class Diamond : public DerivedA, public DerivedB\",\n \"visibility\": \"pub\",\n \"child_symbol_names\": [\n \"type_name\"\n ],\n \"child_qualified_names\": [\n \"Diamond.type_name\"\n ],\n \"depth\": 0,\n \"inherits_text\": \"public DerivedA, public DerivedB\",\n \"attached_comment_summary_text\": \"Diamond inheritance: inherits from both DerivedA and DerivedB.\",\n \"doxygen\": {\n \"brief\": [\n \"Diamond inheritance: inherits from both DerivedA and DerivedB.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 227,\n \"end_line_number\": 227,\n \"line_range\": [\n 227,\n 227\n ],\n \"declaration_order_index\": 21,\n \"symbol_name\": \"type_name\",\n \"qualified_name\": \"Diamond.type_name\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"const char *type_name() const override { return \\\"Diamond\\\"; }\",\n \"parent_symbol_name\": \"Diamond\",\n \"parent_qualified_name\": \"Diamond\",\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\": 254,\n \"line_range\": [\n 251,\n 254\n ],\n \"declaration_order_index\": 22,\n \"symbol_name\": \"f\",\n \"qualified_name\": \"MyNS.f\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"if (pos == std::string::npos)\",\n \"parent_symbol_name\": \"MyNS\",\n \"parent_qualified_name\": \"MyNS\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Parse a key=value string into its components.\",\n \"doxygen\": {\n \"brief\": [\n \"Parse a key=value string into its components.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"input\",\n \"description\": \"String in \\\"key=value\\\" format.\"\n }\n ],\n \"returns\": [\n \"Pair of key and value; empty strings if malformed.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 252,\n \"end_line_number\": 252,\n \"line_range\": [\n 252,\n 252\n ],\n \"text\": \"No delimiter found — return empty pair\",\n \"text_lines\": [\n \"No delimiter found — return empty pair\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 253,\n \"text\": \"return {\\\"\\\", \\\"\\\"};\"\n }\n ]\n },\n {\n \"start_line_number\": 264,\n \"end_line_number\": 264,\n \"line_range\": [\n 264,\n 264\n ],\n \"declaration_order_index\": 23,\n \"symbol_name\": \"greet\",\n \"qualified_name\": \"MyNS.greet\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"void greet(std::string name) { std::cout << \\\"Hello, \\\" << name << \\\"\\\\n\\\"; }\",\n \"parent_symbol_name\": \"MyNS\",\n \"parent_qualified_name\": \"MyNS\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Greet a person by name on stdout.\",\n \"doxygen\": {\n \"brief\": [\n \"Greet a person by name on stdout.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"name\",\n \"description\": \"The person's name to display.\"\n }\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 270,\n \"end_line_number\": 275,\n \"line_range\": [\n 270,\n 275\n ],\n \"declaration_order_index\": 24,\n \"symbol_name\": \"main\",\n \"qualified_name\": \"MyNS.main\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"int main()\",\n \"parent_symbol_name\": \"MyNS\",\n \"parent_qualified_name\": \"MyNS\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Program entry point.\",\n \"doxygen\": {\n \"brief\": [\n \"Program entry point.\"\n ],\n \"returns\": [\n \"0 on success.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 271,\n \"end_line_number\": 271,\n \"line_range\": [\n 271,\n 271\n ],\n \"text\": \"Structured binding from parse_kv\",\n \"text_lines\": [\n \"Structured binding from parse_kv\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 274,\n \"text\": \"return 0;\"\n }\n ]\n },\n {\n \"start_line_number\": 273,\n \"end_line_number\": 284,\n \"line_range\": [\n 273,\n 284\n ],\n \"declaration_order_index\": 25,\n \"symbol_name\": \"t\",\n \"qualified_name\": \"MyNS.t\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"greet(key)\",\n \"parent_symbol_name\": \"MyNS\",\n \"parent_qualified_name\": \"MyNS\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Structured binding from parse_kv\",\n \"attached_comment_lines\": [\n \"Structured binding from parse_kv\"\n ],\n \"body_comment_entries\": [\n {\n \"start_line_number\": 277,\n \"end_line_number\": 277,\n \"line_range\": [\n 277,\n 277\n ],\n \"text\": \"── Lambda stored in variable ──────────────────────────────────────────\",\n \"text_lines\": [\n \"── Lambda stored in variable ──────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 279,\n \"end_line_number\": 283,\n \"line_range\": [\n 279,\n 283\n ],\n \"text\": \"@brief Inline lambda for squaring values. Demonstrates constexpr lambda with auto parameter (C++20 generic lambda).\",\n \"text_lines\": [\n \"@brief Inline lambda for squaring values. Demonstrates constexpr lambda with auto parameter (C++20 generic lambda).\"\n ]\n }\n ],\n \"exit_point_entries\": [\n {\n \"line_number\": 274,\n \"text\": \"return 0;\"\n }\n ]\n },\n {\n \"start_line_number\": 288,\n \"end_line_number\": 297,\n \"line_range\": [\n 288,\n 297\n ],\n \"declaration_order_index\": 26,\n \"symbol_name\": \"Inner\",\n \"qualified_name\": \"Inner\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace Inner::Detail\",\n \"child_symbol_names\": [\n \"format_int\"\n ],\n \"child_qualified_names\": [\n \"Inner.format_int\"\n ],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Internal helper formatting integers to strings.\",\n \"doxygen\": {\n \"brief\": [\n \"Internal helper formatting integers to strings.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"v\",\n \"description\": \"The integer to format.\"\n }\n ],\n \"returns\": [\n \"Formatted string representation.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 290,\n \"end_line_number\": 294,\n \"line_range\": [\n 290,\n 294\n ],\n \"text\": \"@brief Internal helper formatting integers to strings. @param v The integer to format. @return Formatted string representation.\",\n \"text_lines\": [\n \"@brief Internal helper formatting integers to strings. @param v The integer to format. @return Formatted string representation.\"\n ]\n },\n {\n \"start_line_number\": 297,\n \"end_line_number\": 297,\n \"line_range\": [\n 297,\n 297\n ],\n \"text\": \"namespace Inner::Detail\",\n \"text_lines\": [\n \"namespace Inner::Detail\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 295,\n \"end_line_number\": 295,\n \"line_range\": [\n 295,\n 295\n ],\n \"declaration_order_index\": 27,\n \"symbol_name\": \"format_int\",\n \"qualified_name\": \"Inner.format_int\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"inline std::string format_int(int v) { return std::to_string(v); }\",\n \"parent_symbol_name\": \"Inner\",\n \"parent_qualified_name\": \"Inner\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 1,\n \"attached_comment_summary_text\": \"Internal helper formatting integers to strings.\",\n \"doxygen\": {\n \"brief\": [\n \"Internal helper formatting integers to strings.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"v\",\n \"description\": \"The integer to format.\"\n }\n ],\n \"returns\": [\n \"Formatted string representation.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 310,\n \"end_line_number\": 318,\n \"line_range\": [\n 310,\n 318\n ],\n \"declaration_order_index\": 28,\n \"symbol_name\": \"std::to_string\",\n \"qualified_name\": \"std::to_string\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"return std::to_string(value)\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"SFINAE-enabled serialize function for Numeric types.\\n@tparam T Numeric type.\",\n \"doxygen\": {\n \"brief\": [\n \"SFINAE-enabled serialize function for Numeric types.\\n@tparam T Numeric type.\",\n \"Overload for string serialization (identity transform).\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"The numeric value to serialize.\"\n },\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"The string to serialize.\"\n }\n ],\n \"returns\": [\n \"String representation of the value.\",\n \"The input string unchanged.\"\n ]\n },\n \"body_comment_entries\": [\n {\n \"start_line_number\": 313,\n \"end_line_number\": 317,\n \"line_range\": [\n 313,\n 317\n ],\n \"text\": \"@brief Overload for string serialization (identity transform). @param value The string to serialize. @return The input string unchanged.\",\n \"text_lines\": [\n \"@brief Overload for string serialization (identity transform). @param value The string to serialize. @return The input string unchanged.\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 318,\n \"end_line_number\": 318,\n \"line_range\": [\n 318,\n 318\n ],\n \"declaration_order_index\": 29,\n \"symbol_name\": \"serialize\",\n \"qualified_name\": \"serialize\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"inline std::string serialize(const std::string &value) { return value; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Overload for string serialization (identity transform).\",\n \"doxygen\": {\n \"brief\": [\n \"Overload for string serialization (identity transform).\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"The string to serialize.\"\n }\n ],\n \"returns\": [\n \"The input string unchanged.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 321,\n \"end_line_number\": 325,\n \"line_range\": [\n 321,\n 325\n ],\n \"declaration_order_index\": 30,\n \"symbol_name\": \"Pixel\",\n \"qualified_name\": \"Pixel\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"struct Pixel\",\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\": 325,\n \"end_line_number\": 325,\n \"line_range\": [\n 325,\n 325\n ],\n \"text\": \"inline struct comment\",\n \"text_lines\": [\n \"inline struct comment\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 326,\n \"end_line_number\": 329,\n \"line_range\": [\n 326,\n 329\n ],\n \"declaration_order_index\": 31,\n \"symbol_name\": \"Size\",\n \"qualified_name\": \"Size\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"struct Size\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 330,\n \"end_line_number\": 335,\n \"line_range\": [\n 330,\n 335\n ],\n \"declaration_order_index\": 32,\n \"symbol_name\": \"Bounds\",\n \"qualified_name\": \"Bounds\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"struct Bounds\",\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\": 338,\n \"line_range\": [\n 336,\n 338\n ],\n \"declaration_order_index\": 33,\n \"symbol_name\": \"Marker\",\n \"qualified_name\": \"Marker\",\n \"symbol_kind\": \"STRUCT\",\n \"type_label\": \"STRUCT\",\n \"signature_text\": \"struct Marker\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 339,\n \"end_line_number\": 339,\n \"line_range\": [\n 339,\n 339\n ],\n \"declaration_order_index\": 34,\n \"symbol_name\": \"Mode\",\n \"qualified_name\": \"Mode\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum Mode { ModeA, ModeB }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 340,\n \"end_line_number\": 340,\n \"line_range\": [\n 340,\n 340\n ],\n \"declaration_order_index\": 35,\n \"symbol_name\": \"State\",\n \"qualified_name\": \"State\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum State { StateIdle, StateBusy }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 341,\n \"end_line_number\": 341,\n \"line_range\": [\n 341,\n 341\n ],\n \"declaration_order_index\": 36,\n \"symbol_name\": \"Grade\",\n \"qualified_name\": \"Grade\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum Grade { GradeA, GradeB }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 342,\n \"end_line_number\": 342,\n \"line_range\": [\n 342,\n 342\n ],\n \"declaration_order_index\": 37,\n \"symbol_name\": \"Severity\",\n \"qualified_name\": \"Severity\",\n \"symbol_kind\": \"ENUM\",\n \"type_label\": \"ENUM\",\n \"signature_text\": \"enum Severity { SevLow, SevHigh }\",\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\": 343,\n \"end_line_number\": 345,\n \"line_range\": [\n 343,\n 345\n ],\n \"declaration_order_index\": 38,\n \"symbol_name\": \"extns\",\n \"qualified_name\": \"extns\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace extns\",\n \"child_symbol_names\": [\n \"add_one\"\n ],\n \"child_qualified_names\": [\n \"extns.add_one\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 345,\n \"end_line_number\": 345,\n \"line_range\": [\n 345,\n 345\n ],\n \"text\": \"namespace extns\",\n \"text_lines\": [\n \"namespace extns\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 344,\n \"end_line_number\": 344,\n \"line_range\": [\n 344,\n 344\n ],\n \"declaration_order_index\": 39,\n \"symbol_name\": \"add_one\",\n \"qualified_name\": \"extns.add_one\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"inline int add_one(int v) { return v + 1; }\",\n \"parent_symbol_name\": \"extns\",\n \"parent_qualified_name\": \"extns\",\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\": 346,\n \"end_line_number\": 348,\n \"line_range\": [\n 346,\n 348\n ],\n \"declaration_order_index\": 40,\n \"symbol_name\": \"ext_alpha\",\n \"qualified_name\": \"ext_alpha\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace ext_alpha\",\n \"child_symbol_names\": [\n \"ping\"\n ],\n \"child_qualified_names\": [\n \"ext_alpha.ping\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 348,\n \"end_line_number\": 348,\n \"line_range\": [\n 348,\n 348\n ],\n \"text\": \"namespace ext_alpha\",\n \"text_lines\": [\n \"namespace ext_alpha\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 347,\n \"end_line_number\": 347,\n \"line_range\": [\n 347,\n 347\n ],\n \"declaration_order_index\": 41,\n \"symbol_name\": \"ping\",\n \"qualified_name\": \"ext_alpha.ping\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"inline int ping() { return 1; }\",\n \"parent_symbol_name\": \"ext_alpha\",\n \"parent_qualified_name\": \"ext_alpha\",\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\": 349,\n \"end_line_number\": 351,\n \"line_range\": [\n 349,\n 351\n ],\n \"declaration_order_index\": 42,\n \"symbol_name\": \"ext_beta\",\n \"qualified_name\": \"ext_beta\",\n \"symbol_kind\": \"NAMESPACE\",\n \"type_label\": \"NAMESPACE\",\n \"signature_text\": \"namespace ext_beta\",\n \"child_symbol_names\": [\n \"pong\"\n ],\n \"child_qualified_names\": [\n \"ext_beta.pong\"\n ],\n \"depth\": 0,\n \"body_comment_entries\": [\n {\n \"start_line_number\": 351,\n \"end_line_number\": 351,\n \"line_range\": [\n 351,\n 351\n ],\n \"text\": \"namespace ext_beta\",\n \"text_lines\": [\n \"namespace ext_beta\"\n ]\n }\n ],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 350,\n \"end_line_number\": 350,\n \"line_range\": [\n 350,\n 350\n ],\n \"declaration_order_index\": 43,\n \"symbol_name\": \"pong\",\n \"qualified_name\": \"ext_beta.pong\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"inline int pong() { return 2; }\",\n \"parent_symbol_name\": \"ext_beta\",\n \"parent_qualified_name\": \"ext_beta\",\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\": 352,\n \"end_line_number\": 352,\n \"line_range\": [\n 352,\n 352\n ],\n \"declaration_order_index\": 44,\n \"symbol_name\": \"FEATURE_ALPHA\",\n \"qualified_name\": \"FEATURE_ALPHA\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"#define FEATURE_ALPHA 1\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 353,\n \"end_line_number\": 353,\n \"line_range\": [\n 353,\n 353\n ],\n \"declaration_order_index\": 45,\n \"symbol_name\": \"FEATURE_BETA\",\n \"qualified_name\": \"FEATURE_BETA\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"#define FEATURE_BETA 2\",\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\": 354,\n \"end_line_number\": 354,\n \"line_range\": [\n 354,\n 354\n ],\n \"declaration_order_index\": 46,\n \"symbol_name\": \"FEATURE_GAMMA\",\n \"qualified_name\": \"FEATURE_GAMMA\",\n \"symbol_kind\": \"MACRO\",\n \"type_label\": \"MACRO\",\n \"signature_text\": \"#define FEATURE_GAMMA 3\",\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\": 355,\n \"end_line_number\": 355,\n \"line_range\": [\n 355,\n 355\n ],\n \"declaration_order_index\": 47,\n \"symbol_name\": \"NumberVec\",\n \"qualified_name\": \"NumberVec\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"using NumberVec = std::vector<int>\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 356,\n \"end_line_number\": 356,\n \"line_range\": [\n 356,\n 356\n ],\n \"declaration_order_index\": 48,\n \"symbol_name\": \"long\",\n \"qualified_name\": \"long\",\n \"symbol_kind\": \"TYPE_ALIAS\",\n \"type_label\": \"TYPE_ALIAS\",\n \"signature_text\": \"typedef long LongId\",\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\": 366,\n \"end_line_number\": 366,\n \"line_range\": [\n 366,\n 366\n ],\n \"declaration_order_index\": 49,\n \"symbol_name\": \"req_cover_cpp_1\",\n \"qualified_name\": \"req_cover_cpp_1\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"int req_cover_cpp_1(int value) { return value + 1; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 1.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 1.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 1.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 1.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 1.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 375,\n \"end_line_number\": 375,\n \"line_range\": [\n 375,\n 375\n ],\n \"declaration_order_index\": 50,\n \"symbol_name\": \"req_cover_cpp_2\",\n \"qualified_name\": \"req_cover_cpp_2\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"int req_cover_cpp_2(int value) { return value + 2; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 2.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 2.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 2.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 2.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 2.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 384,\n \"end_line_number\": 384,\n \"line_range\": [\n 384,\n 384\n ],\n \"declaration_order_index\": 51,\n \"symbol_name\": \"req_cover_cpp_3\",\n \"qualified_name\": \"req_cover_cpp_3\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"int req_cover_cpp_3(int value) { return value + 3; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 3.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 3.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 3.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 3.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 3.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 393,\n \"end_line_number\": 393,\n \"line_range\": [\n 393,\n 393\n ],\n \"declaration_order_index\": 52,\n \"symbol_name\": \"req_cover_cpp_4\",\n \"qualified_name\": \"req_cover_cpp_4\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"int req_cover_cpp_4(int value) { return value + 4; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 4.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 4.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 4.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 4.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 4.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n },\n {\n \"start_line_number\": 402,\n \"end_line_number\": 402,\n \"line_range\": [\n 402,\n 402\n ],\n \"declaration_order_index\": 53,\n \"symbol_name\": \"req_cover_cpp_5\",\n \"qualified_name\": \"req_cover_cpp_5\",\n \"symbol_kind\": \"FUNCTION\",\n \"type_label\": \"FUNCTION\",\n \"signature_text\": \"int req_cover_cpp_5(int value) { return value + 5; }\",\n \"child_symbol_names\": [],\n \"child_qualified_names\": [],\n \"depth\": 0,\n \"attached_comment_summary_text\": \"Coverage helper construct 5.\",\n \"doxygen\": {\n \"brief\": [\n \"Coverage helper construct 5.\"\n ],\n \"details\": [\n \"Provides deterministic fixture-level Doxygen coverage block 5.\"\n ],\n \"params\": [\n {\n \"direction\": \"unspecified\",\n \"parameter_name\": \"value\",\n \"description\": \"Input value for helper construct 5.\"\n }\n ],\n \"returns\": [\n \"Output value for helper construct 5.\"\n ]\n },\n \"body_comment_entries\": [],\n \"exit_point_entries\": []\n }\n ],\n \"standalone_comments\": [\n {\n \"start_line_number\": 2,\n \"end_line_number\": 2,\n \"line_range\": [\n 2,\n 2\n ],\n \"text\": \"cppcheck-suppress-begin passedByValue\",\n \"text_lines\": [\n \"cppcheck-suppress-begin passedByValue\"\n ]\n },\n {\n \"start_line_number\": 3,\n \"end_line_number\": 9,\n \"line_range\": [\n 3,\n 9\n ],\n \"text\": \"@file fixture_cpp.cpp @brief Comprehensive C++ test fixture for parser stress-testing. @details Covers templates, SFINAE, constexpr, lambdas, concepts, CRTP, ...\",\n \"text_lines\": [\n \"@file fixture_cpp.cpp\",\n \"@brief Comprehensive C++ test fixture for parser stress-testing.\",\n \"@details Covers templates, SFINAE, constexpr, lambdas, concepts, CRTP,\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 10,\n \"end_line_number\": 10,\n \"line_range\": [\n 10,\n 10\n ],\n \"text\": \"Single line comment\",\n \"text_lines\": [\n \"Single line comment\"\n ]\n },\n {\n \"start_line_number\": 11,\n \"end_line_number\": 12,\n \"line_range\": [\n 11,\n 12\n ],\n \"text\": \"Multi-line comment\",\n \"text_lines\": [\n \"Multi-line\",\n \"comment\"\n ]\n },\n {\n \"start_line_number\": 30,\n \"end_line_number\": 30,\n \"line_range\": [\n 30,\n 30\n ],\n \"text\": \"── Concepts (C++20) ───────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Concepts (C++20) ───────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 32,\n \"end_line_number\": 35,\n \"line_range\": [\n 32,\n 35\n ],\n \"text\": \"@concept Printable @brief Constrains types that support stream insertion via operator<<.\",\n \"text_lines\": [\n \"@concept Printable\",\n \"@brief Constrains types that support stream insertion via operator<<.\"\n ]\n },\n {\n \"start_line_number\": 41,\n \"end_line_number\": 44,\n \"line_range\": [\n 41,\n 44\n ],\n \"text\": \"@concept Numeric @brief Constrains types to integral or floating point.\",\n \"text_lines\": [\n \"@concept Numeric\",\n \"@brief Constrains types to integral or floating point.\"\n ]\n },\n {\n \"start_line_number\": 48,\n \"end_line_number\": 48,\n \"line_range\": [\n 48,\n 48\n ],\n \"text\": \"── Template class ─────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Template class ─────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 57,\n \"end_line_number\": 57,\n \"line_range\": [\n 57,\n 57\n ],\n \"text\": \"T value; /**< @brief Stored value of type T.\",\n \"text_lines\": [\n \"T value; /**< @brief Stored value of type T.\"\n ]\n },\n {\n \"start_line_number\": 77,\n \"end_line_number\": 81,\n \"line_range\": [\n 77,\n 81\n ],\n \"text\": \"@brief Copy assignment operator. @param other Source container. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Copy assignment operator.\",\n \"@param other Source container.\",\n \"@return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 84,\n \"end_line_number\": 88,\n \"line_range\": [\n 84,\n 88\n ],\n \"text\": \"@brief Move assignment operator. @param other Source container to move from. @return Reference to this container.\",\n \"text_lines\": [\n \"@brief Move assignment operator.\",\n \"@param other Source container to move from.\",\n \"@return Reference to this container.\"\n ]\n },\n {\n \"start_line_number\": 91,\n \"end_line_number\": 91,\n \"line_range\": [\n 91,\n 91\n ],\n \"text\": \"@brief Destructor; default cleanup.\",\n \"text_lines\": [\n \"@brief Destructor; default cleanup.\"\n ]\n },\n {\n \"start_line_number\": 94,\n \"end_line_number\": 99,\n \"line_range\": [\n 94,\n 99\n ],\n \"text\": \"@brief Stream insertion for this container. @param os Output stream. @param c Container to print. ...\",\n \"text_lines\": [\n \"@brief Stream insertion for this container.\",\n \"@param os Output stream.\",\n \"@param c Container to print.\",\n \"...\"\n ]\n },\n {\n \"start_line_number\": 104,\n \"end_line_number\": 108,\n \"line_range\": [\n 104,\n 108\n ],\n \"text\": \"@brief Equality comparison between containers. @param other Container to compare with. @return True if values are equal.\",\n \"text_lines\": [\n \"@brief Equality comparison between containers.\",\n \"@param other Container to compare with.\",\n \"@return True if values are equal.\"\n ]\n },\n {\n \"start_line_number\": 112,\n \"end_line_number\": 112,\n \"line_range\": [\n 112,\n 112\n ],\n \"text\": \"── Struct ─────────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Struct ─────────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 119,\n \"end_line_number\": 119,\n \"line_range\": [\n 119,\n 119\n ],\n \"text\": \"double x; /**< @brief X coordinate.\",\n \"text_lines\": [\n \"double x; /**< @brief X coordinate.\"\n ]\n },\n {\n \"start_line_number\": 120,\n \"end_line_number\": 120,\n \"line_range\": [\n 120,\n 120\n ],\n \"text\": \"double y; /**< @brief Y coordinate.\",\n \"text_lines\": [\n \"double y; /**< @brief Y coordinate.\"\n ]\n },\n {\n \"start_line_number\": 128,\n \"end_line_number\": 128,\n \"line_range\": [\n 128,\n 128\n ],\n \"text\": \"Squared differences avoid floating-point sqrt\",\n \"text_lines\": [\n \"Squared differences avoid floating-point sqrt\"\n ]\n },\n {\n \"start_line_number\": 134,\n \"end_line_number\": 138,\n \"line_range\": [\n 134,\n 138\n ],\n \"text\": \"@brief Add two points component-wise. @param rhs Right-hand operand. @return New Point with summed coordinates.\",\n \"text_lines\": [\n \"@brief Add two points component-wise.\",\n \"@param rhs Right-hand operand.\",\n \"@return New Point with summed coordinates.\"\n ]\n },\n {\n \"start_line_number\": 144,\n \"end_line_number\": 144,\n \"line_range\": [\n 144,\n 144\n ],\n \"text\": \"── Enum class ─────────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Enum class ─────────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 151,\n \"end_line_number\": 151,\n \"line_range\": [\n 151,\n 151\n ],\n \"text\": \"Up, /**< @brief Move upward.\",\n \"text_lines\": [\n \"Up, /**< @brief Move upward.\"\n ]\n },\n {\n \"start_line_number\": 152,\n \"end_line_number\": 152,\n \"line_range\": [\n 152,\n 152\n ],\n \"text\": \"Down, /**< @brief Move downward.\",\n \"text_lines\": [\n \"Down, /**< @brief Move downward.\"\n ]\n },\n {\n \"start_line_number\": 153,\n \"end_line_number\": 153,\n \"line_range\": [\n 153,\n 153\n ],\n \"text\": \"Left, /**< @brief Move left.\",\n \"text_lines\": [\n \"Left, /**< @brief Move left.\"\n ]\n },\n {\n \"start_line_number\": 154,\n \"end_line_number\": 154,\n \"line_range\": [\n 154,\n 154\n ],\n \"text\": \"Right /**< @brief Move right.\",\n \"text_lines\": [\n \"Right /**< @brief Move right.\"\n ]\n },\n {\n \"start_line_number\": 168,\n \"end_line_number\": 168,\n \"line_range\": [\n 168,\n 168\n ],\n \"text\": \"── CRTP pattern ───────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── CRTP pattern ───────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 177,\n \"end_line_number\": 180,\n \"line_range\": [\n 177,\n 180\n ],\n \"text\": \"@brief Create a heap-allocated copy of the derived object. @return Unique pointer to the cloned instance.\",\n \"text_lines\": [\n \"@brief Create a heap-allocated copy of the derived object.\",\n \"@return Unique pointer to the cloned instance.\"\n ]\n },\n {\n \"start_line_number\": 182,\n \"end_line_number\": 182,\n \"line_range\": [\n 182,\n 182\n ],\n \"text\": \"static_cast down to Derived is safe under CRTP contract\",\n \"text_lines\": [\n \"static_cast down to Derived is safe under CRTP contract\"\n ]\n },\n {\n \"start_line_number\": 187,\n \"end_line_number\": 187,\n \"line_range\": [\n 187,\n 187\n ],\n \"text\": \"── Virtual inheritance ────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Virtual inheritance ────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 230,\n \"end_line_number\": 230,\n \"line_range\": [\n 230,\n 230\n ],\n \"text\": \"── Constexpr function ─────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Constexpr function ─────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 232,\n \"end_line_number\": 236,\n \"line_range\": [\n 232,\n 236\n ],\n \"text\": \"@brief Compute factorial at compile time. @param n Non-negative input. @return n! computed via recursive constexpr evaluation.\",\n \"text_lines\": [\n \"@brief Compute factorial at compile time.\",\n \"@param n Non-negative input.\",\n \"@return n! computed via recursive constexpr evaluation.\"\n ]\n },\n {\n \"start_line_number\": 238,\n \"end_line_number\": 238,\n \"line_range\": [\n 238,\n 238\n ],\n \"text\": \"Compile-time recursion terminates at n <= 1\",\n \"text_lines\": [\n \"Compile-time recursion terminates at n <= 1\"\n ]\n },\n {\n \"start_line_number\": 242,\n \"end_line_number\": 242,\n \"line_range\": [\n 242,\n 242\n ],\n \"text\": \"── Function with structured binding return ────────────────────────────\",\n \"text_lines\": [\n \"── Function with structured binding return ────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 252,\n \"end_line_number\": 252,\n \"line_range\": [\n 252,\n 252\n ],\n \"text\": \"No delimiter found — return empty pair\",\n \"text_lines\": [\n \"No delimiter found — return empty pair\"\n ]\n },\n {\n \"start_line_number\": 258,\n \"end_line_number\": 258,\n \"line_range\": [\n 258,\n 258\n ],\n \"text\": \"── Free functions ─────────────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Free functions ─────────────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 277,\n \"end_line_number\": 277,\n \"line_range\": [\n 277,\n 277\n ],\n \"text\": \"── Lambda stored in variable ──────────────────────────────────────────\",\n \"text_lines\": [\n \"── Lambda stored in variable ──────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 279,\n \"end_line_number\": 283,\n \"line_range\": [\n 279,\n 283\n ],\n \"text\": \"@brief Inline lambda for squaring values. Demonstrates constexpr lambda with auto parameter (C++20 generic lambda).\",\n \"text_lines\": [\n \"@brief Inline lambda for squaring values.\",\n \"Demonstrates constexpr lambda with auto parameter (C++20 generic lambda).\"\n ]\n },\n {\n \"start_line_number\": 301,\n \"end_line_number\": 301,\n \"line_range\": [\n 301,\n 301\n ],\n \"text\": \"── Template with SFINAE ───────────────────────────────────────────────\",\n \"text_lines\": [\n \"── Template with SFINAE ───────────────────────────────────────────────\"\n ]\n },\n {\n \"start_line_number\": 358,\n \"end_line_number\": 358,\n \"line_range\": [\n 358,\n 358\n ],\n \"text\": \"REQ-COVER-SRS-231 START\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 START\"\n ]\n },\n {\n \"start_line_number\": 404,\n \"end_line_number\": 404,\n \"line_range\": [\n 404,\n 404\n ],\n \"text\": \"REQ-COVER-SRS-231 END\",\n \"text_lines\": [\n \"REQ-COVER-SRS-231 END\"\n ]\n },\n {\n \"start_line_number\": 406,\n \"end_line_number\": 406,\n \"line_range\": [\n 406,\n 406\n ],\n \"text\": \"cppcheck-suppress-end passedByValue\",\n \"text_lines\": [\n \"cppcheck-suppress-end passedByValue\"\n ]\n },\n {\n \"start_line_number\": 407,\n \"end_line_number\": 407,\n \"line_range\": [\n 407,\n 407\n ],\n \"text\": \"cppcheck-suppress-end unusedStructMember\",\n \"text_lines\": [\n \"cppcheck-suppress-end unusedStructMember\"\n ]\n }\n ]\n }\n ]\n}\n",
3
+ "stdout": "# fixture_cpp.cpp | C++ | 407L | 54 symbols | 7 imports | 75 comments\n> Path: `tests/fixtures/fixture_cpp.cpp`\n- @brief Comprehensive C++ test fixture for parser stress-testing.\n- @details Covers templates, SFINAE, constexpr, lambdas, concepts, CRTP,\noperator overloading, move semantics, nested namespaces, and\nmodern C++20/23 constructs.\n\n## Imports\n```\n#include <concepts>\n#include <functional>\n#include <iostream>\n#include <memory>\n#include <optional>\n#include <string>\n#include <vector>\n```\n\n## Definitions\n\n- macro `#define VERSION 2` (L21)\n- macro `#define LIKELY(x) __builtin_expect(!!(x), 1)` (L24)\n### ns `namespace MyNS` (L28-299)\n- type `using StringVec = std::vector<std::string>` (L160)\n- type `typedef int my_int_t` (L163)\n- type `using Callback = std::function<void(int)>` (L166)\n- fn `virtual const char *type_name() const = 0` (L199-207)\n - @brief Identify the concrete type at runtime.\n - @return A non-owning string literal naming the type.\n- fn `if (pos == std::string::npos)` (L251-254)\n - @brief Parse a key=value string into its components.\n - @param input String in \"key=value\" format.\n - @return Pair of key and value; empty strings if malformed.\n- fn `void greet(std::string name) { std::cout << \"Hello, \" << name << \"\\n\"; }` (L264)\n - @brief Greet a person by name on stdout.\n - @param name The person's name to display.\n- fn `int main()` (L270-275)\n - @brief Program entry point.\n - @return 0 on success.\n- fn `greet(key)` (L273-284)\n\n### class `template <Printable T> class Container` (L55-110)\n- @brief Generic container with RAII semantics.\n@tparam T Element type; must satisfy Printable concept.\n- @brief Stored value of type T.\n- fn `explicit Container(T v) : value(std::move(v)) {}` (L63)\n - @brief Construct container with an initial value.\n - @param v The value to store.\n- fn `Container(const Container &other) = default` (L69-102)\n - @brief Copy constructor performs deep copy.\n - @brief Move constructor transfers ownership.\n - @param other Source container to copy from.\n - @param other Source container; left in valid but unspecified state.\n- fn `Container(Container &&other) noexcept = default` (L75-102)\n - @brief Move constructor transfers ownership.\n - @brief Copy assignment operator.\n - @param other Source container; left in valid but unspecified state.\n - @param other Source container.\n - @return Reference to this container.\n\n### struct `struct Point` (L118-142)\n- @brief 2D coordinate with constexpr arithmetic support.\n- @brief X coordinate.\n- @brief Y coordinate.\n- fn `constexpr double dist_sq(const Point &other) const` (L127-132)\n - @brief Compute Euclidean distance squared to another point.\n - @param other Target point.\n - @return Distance squared (avoids sqrt overhead).\n\n### enum `enum class Direction` (L150-155)\n- @brief Cardinal movement directions with strong typing.\n- @brief Move upward.\n- @brief Move downward.\n- @brief Move left.\n\n### class `template <typename Derived> class Cloneable` (L175-185)\n- @brief CRTP base providing a polymorphic clone method.\n@tparam Derived The concrete class inheriting this base.\n- @brief Create a heap-allocated copy of the derived object.\n- @return Unique pointer to the cloned instance.\n\n### class `class Base` (L193-201)\n- @brief Abstract base with a pure virtual method.\n- @brief Identify the concrete type at runtime.\n- @return A non-owning string literal naming the type.\n\n### class `class DerivedA : public virtual Base` : public virtual Base (L207-210)\n- @brief First concrete implementation of Base.\n- fn `const char *type_name() const override { return \"DerivedA\"; }` (L209)\n\n### class `class DerivedB : public virtual Base` : public virtual Base (L216-219)\n- @brief Second concrete implementation for diamond inheritance testing.\n- fn `const char *type_name() const override { return \"DerivedB\"; }` (L218)\n\n### class `class Diamond : public DerivedA, public DerivedB` : public DerivedA, public DerivedB (L225-228)\n- @brief Diamond inheritance: inherits from both DerivedA and DerivedB.\n- fn `const char *type_name() const override { return \"Diamond\"; }` (L227)\n\n### ns `namespace Inner::Detail` (L288-297)\n- @brief Internal helper formatting integers to strings.\n- @param v The integer to format.\n- @return Formatted string representation.\n- fn `inline std::string format_int(int v) { return std::to_string(v); }` (L295)\n - @brief Internal helper formatting integers to strings.\n - @param v The integer to format.\n - @return Formatted string representation.\n\n### fn `return std::to_string(value)` (L310-318)\n- @brief SFINAE-enabled serialize function for Numeric types.\n@tparam T Numeric type.\n- @brief Overload for string serialization (identity transform).\n- @param value The numeric value to serialize.\n- @param value The string to serialize.\n- @return String representation of the value.\n- @return The input string unchanged.\n\n- fn `inline std::string serialize(const std::string &value) { return value; }` (L318)\n- @brief Overload for string serialization (identity transform).\n- @param value The string to serialize.\n- @return The input string unchanged.\n### struct `struct Pixel` (L321-325)\n\n### struct `struct Size` (L326-329)\n\n### struct `struct Bounds` (L330-335)\n\n### struct `struct Marker` (L336-338)\n\n- enum `enum Mode { ModeA, ModeB };` (L339)\n- enum `enum State { StateIdle, StateBusy };` (L340)\n- enum `enum Grade { GradeA, GradeB };` (L341)\n- enum `enum Severity { SevLow, SevHigh };` (L342)\n### ns `namespace extns` (L343-345)\n- fn `inline int add_one(int v) { return v + 1; }` (L344)\n\n### ns `namespace ext_alpha` (L346-348)\n- fn `inline int ping() { return 1; }` (L347)\n\n### ns `namespace ext_beta` (L349-351)\n- fn `inline int pong() { return 2; }` (L350)\n\n- macro `#define FEATURE_ALPHA 1` (L352)\n- macro `#define FEATURE_BETA 2` (L353)\n- macro `#define FEATURE_GAMMA 3` (L354)\n- type `using NumberVec = std::vector<int>;` (L355)\n- type `typedef long LongId;` (L356)\n- fn `int req_cover_cpp_1(int value) { return value + 1; }` (L366)\n- @brief Coverage helper construct 1.\n- @details Provides deterministic fixture-level Doxygen coverage block 1.\n- @param value Input value for helper construct 1.\n- @return Output value for helper construct 1.\n- fn `int req_cover_cpp_2(int value) { return value + 2; }` (L375)\n- @brief Coverage helper construct 2.\n- @details Provides deterministic fixture-level Doxygen coverage block 2.\n- @param value Input value for helper construct 2.\n- @return Output value for helper construct 2.\n- fn `int req_cover_cpp_3(int value) { return value + 3; }` (L384)\n- @brief Coverage helper construct 3.\n- @details Provides deterministic fixture-level Doxygen coverage block 3.\n- @param value Input value for helper construct 3.\n- @return Output value for helper construct 3.\n- fn `int req_cover_cpp_4(int value) { return value + 4; }` (L393)\n- @brief Coverage helper construct 4.\n- @details Provides deterministic fixture-level Doxygen coverage block 4.\n- @param value Input value for helper construct 4.\n- @return Output value for helper construct 4.\n- fn `int req_cover_cpp_5(int value) { return value + 5; }` (L402)\n- @brief Coverage helper construct 5.\n- @details Provides deterministic fixture-level Doxygen coverage block 5.\n- @param value Input value for helper construct 5.\n- @return Output value for helper construct 5.\n## Symbol Index\n|Symbol|Kind|Vis|Lines|Sig|\n|---|---|---|---|---|\n|`VERSION`|macro||21||\n|`LIKELY`|macro||24||\n|`MyNS`|ns||28-299||\n|`Container`|class||55-110|template <Printable T> class Container|\n|`Container.r`|fn||63|explicit Container(T v) : value(std::move(v)) {}|\n|`Container.r`|fn||69-102|Container(const Container &other) = default|\n|`Container.r`|fn||75-102|Container(Container &&other) noexcept = default|\n|`Point`|struct||118-142|struct Point|\n|`Point.dist_sq`|fn||127-132|constexpr double dist_sq(const Point &other) const|\n|`Direction`|enum||150-155|enum class Direction|\n|`MyNS.StringVec`|type||160||\n|`MyNS.int`|type||163||\n|`MyNS.Callback`|type||166||\n|`Cloneable`|class||175-185|template <typename Derived> class Cloneable|\n|`Base`|class||193-201|class Base|\n|`MyNS.type_name`|fn||199-207|virtual const char *type_name() const = 0|\n|`DerivedA`|class|pub|207-210|class DerivedA : public virtual Base|\n|`DerivedA.type_name`|fn||209|const char *type_name() const override { return \"DerivedA...|\n|`DerivedB`|class|pub|216-219|class DerivedB : public virtual Base|\n|`DerivedB.type_name`|fn||218|const char *type_name() const override { return \"DerivedB...|\n|`Diamond`|class|pub|225-228|class Diamond : public DerivedA, public DerivedB|\n|`Diamond.type_name`|fn||227|const char *type_name() const override { return \"Diamond\"; }|\n|`MyNS.f`|fn||251-254|if (pos == std::string::npos)|\n|`MyNS.greet`|fn||264|void greet(std::string name) { std::cout << \"Hello, \" << ...|\n|`MyNS.main`|fn||270-275|int main()|\n|`MyNS.t`|fn||273-284|greet(key)|\n|`Inner`|ns||288-297||\n|`Inner.format_int`|fn||295|inline std::string format_int(int v) { return std::to_str...|\n|`std::to_string`|fn||310-318|return std::to_string(value)|\n|`serialize`|fn||318|inline std::string serialize(const std::string &value) { ...|\n|`Pixel`|struct||321-325|struct Pixel|\n|`Size`|struct||326-329|struct Size|\n|`Bounds`|struct||330-335|struct Bounds|\n|`Marker`|struct||336-338|struct Marker|\n|`Mode`|enum||339|enum Mode { ModeA, ModeB }|\n|`State`|enum||340|enum State { StateIdle, StateBusy }|\n|`Grade`|enum||341|enum Grade { GradeA, GradeB }|\n|`Severity`|enum||342|enum Severity { SevLow, SevHigh }|\n|`extns`|ns||343-345||\n|`extns.add_one`|fn||344|inline int add_one(int v) { return v + 1; }|\n|`ext_alpha`|ns||346-348||\n|`ext_alpha.ping`|fn||347|inline int ping() { return 1; }|\n|`ext_beta`|ns||349-351||\n|`ext_beta.pong`|fn||350|inline int pong() { return 2; }|\n|`FEATURE_ALPHA`|macro||352||\n|`FEATURE_BETA`|macro||353||\n|`FEATURE_GAMMA`|macro||354||\n|`NumberVec`|type||355||\n|`long`|type||356||\n|`req_cover_cpp_1`|fn||366|int req_cover_cpp_1(int value) { return value + 1; }|\n|`req_cover_cpp_2`|fn||375|int req_cover_cpp_2(int value) { return value + 2; }|\n|`req_cover_cpp_3`|fn||384|int req_cover_cpp_3(int value) { return value + 3; }|\n|`req_cover_cpp_4`|fn||393|int req_cover_cpp_4(int value) { return value + 4; }|\n|`req_cover_cpp_5`|fn||402|int req_cover_cpp_5(int value) { return value + 5; }|\n\n",
4
4
  "stderr": ""
5
5
  }