codna 0.1.0__py3-none-any.whl

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 (761) hide show
  1. codna/__init__.py +8 -0
  2. codna/_wheel_guard.py +28 -0
  3. codna/admission_control.py +275 -0
  4. codna/agent-core/CLINE_FORK.md +55 -0
  5. codna/agent-core/CLINE_SDK_AZ_INTEGRATION_PLAN.md +191 -0
  6. codna/agent-core/CLINE_SDK_INTERFACE.md +655 -0
  7. codna/agent-core/CLINE_SDK_RESEARCH.md +104 -0
  8. codna/agent-core/package.json +12 -0
  9. codna/agent-core/run-server.mjs +87 -0
  10. codna/agent-core/run-server.stub.mjs +149 -0
  11. codna/agent-core/vendor/cline/.gitignore +3 -0
  12. codna/agent-core/vendor/cline/LICENSE +201 -0
  13. codna/agent-core/vendor/cline/NOTICE +24 -0
  14. codna/agent-core/vendor/cline/UPSTREAM_COMMIT.txt +1 -0
  15. codna/agent-core/vendor/cline/algenta/README.md +27 -0
  16. codna/agent-core/vendor/cline/algenta/acp-editor.ts +176 -0
  17. codna/agent-core/vendor/cline/algenta/adapter.ts +452 -0
  18. codna/agent-core/vendor/cline/algenta/algenta-plugin.ts +30 -0
  19. codna/agent-core/vendor/cline/algenta/artifacts.test.ts +133 -0
  20. codna/agent-core/vendor/cline/algenta/execution.test.ts +63 -0
  21. codna/agent-core/vendor/cline/algenta/fallback.test.ts +73 -0
  22. codna/agent-core/vendor/cline/algenta/fallback.ts +83 -0
  23. codna/agent-core/vendor/cline/algenta/fix-runner.ts +27 -0
  24. codna/agent-core/vendor/cline/algenta/http.test.ts +48 -0
  25. codna/agent-core/vendor/cline/algenta/mojo-gate.test.ts +76 -0
  26. codna/agent-core/vendor/cline/algenta/mojo-gate.ts +151 -0
  27. codna/agent-core/vendor/cline/algenta/policy.test.ts +260 -0
  28. codna/agent-core/vendor/cline/algenta/postbuild.sh +31 -0
  29. codna/agent-core/vendor/cline/algenta/proof-artifacts.test.ts +55 -0
  30. codna/agent-core/vendor/cline/algenta/proof-provider.ts +301 -0
  31. codna/agent-core/vendor/cline/algenta/proofs.ts +311 -0
  32. codna/agent-core/vendor/cline/algenta/provider-key.test.ts +197 -0
  33. codna/agent-core/vendor/cline/algenta/run-server.ts +645 -0
  34. codna/agent-core/vendor/cline/algenta/scheduled-agents.ts +430 -0
  35. codna/agent-core/vendor/cline/algenta/server/artifacts.ts +532 -0
  36. codna/agent-core/vendor/cline/algenta/server/contracts.ts +254 -0
  37. codna/agent-core/vendor/cline/algenta/server/execution.ts +284 -0
  38. codna/agent-core/vendor/cline/algenta/server/http.ts +146 -0
  39. codna/agent-core/vendor/cline/algenta/server/policy.ts +391 -0
  40. codna/agent-core/vendor/cline/algenta/server/state.ts +21 -0
  41. codna/agent-core/vendor/cline/algenta/server/utils.ts +508 -0
  42. codna/agent-core/vendor/cline/algenta/task-policy.ts +82 -0
  43. codna/agent-core/vendor/cline/algenta/telys-localize.test.ts +416 -0
  44. codna/agent-core/vendor/cline/algenta/telys-localize.ts +608 -0
  45. codna/agent-core/vendor/cline/algenta/telys-worker.test.ts +99 -0
  46. codna/agent-core/vendor/cline/algenta/telys-worker.ts +245 -0
  47. codna/agent-core/vendor/cline/algenta/tools.test.ts +59 -0
  48. codna/agent-core/vendor/cline/algenta/tools.ts +196 -0
  49. codna/agent-core/vendor/cline/algenta/write-scope.test.ts +26 -0
  50. codna/agent-core/vendor/cline/algenta/write-scope.ts +60 -0
  51. codna/agent-core/vendor/cline/biome.json +19 -0
  52. codna/agent-core/vendor/cline/bun.lock +1179 -0
  53. codna/agent-core/vendor/cline/package.json +60 -0
  54. codna/agent-core/vendor/cline/sdk/.cline/rules/worktree_dependency_hygiene.md +15 -0
  55. codna/agent-core/vendor/cline/sdk/.cline/skills/plugin.md +892 -0
  56. codna/agent-core/vendor/cline/sdk/.gitignore +69 -0
  57. codna/agent-core/vendor/cline/sdk/AGENTS.md +109 -0
  58. codna/agent-core/vendor/cline/sdk/ARCHITECTURE.md +525 -0
  59. codna/agent-core/vendor/cline/sdk/CHANGELOG.md +32 -0
  60. codna/agent-core/vendor/cline/sdk/CONTRIBUTING.md +196 -0
  61. codna/agent-core/vendor/cline/sdk/README.md +273 -0
  62. codna/agent-core/vendor/cline/sdk/biome.json +140 -0
  63. codna/agent-core/vendor/cline/sdk/examples/README.md +196 -0
  64. codna/agent-core/vendor/cline/sdk/examples/cron/README.md +419 -0
  65. codna/agent-core/vendor/cline/sdk/examples/cron/changelog-generator.cron.md +37 -0
  66. codna/agent-core/vendor/cline/sdk/examples/cron/code-style-audit.cron.md +47 -0
  67. codna/agent-core/vendor/cline/sdk/examples/cron/daily-code-review.cron.md +28 -0
  68. codna/agent-core/vendor/cline/sdk/examples/cron/dead-code-finder.cron.md +58 -0
  69. codna/agent-core/vendor/cline/sdk/examples/cron/dependency-check.cron.md +35 -0
  70. codna/agent-core/vendor/cline/sdk/examples/cron/documentation-check.cron.md +66 -0
  71. codna/agent-core/vendor/cline/sdk/examples/cron/events/local-manual-test.event.md +28 -0
  72. codna/agent-core/vendor/cline/sdk/examples/cron/events/local-plugin-event.event.md +20 -0
  73. codna/agent-core/vendor/cline/sdk/examples/cron/events/pr-changelog-check.event.md +42 -0
  74. codna/agent-core/vendor/cline/sdk/examples/cron/events/pr-review.event.md +32 -0
  75. codna/agent-core/vendor/cline/sdk/examples/cron/events/pr-test-coverage.event.md +55 -0
  76. codna/agent-core/vendor/cline/sdk/examples/cron/performance-baseline.cron.md +45 -0
  77. codna/agent-core/vendor/cline/sdk/examples/cron/test-coverage-report.cron.md +41 -0
  78. codna/agent-core/vendor/cline/sdk/examples/cron/type-check-strict.cron.md +44 -0
  79. codna/agent-core/vendor/cline/sdk/examples/cron/weekly-metrics-summary.cron.md +67 -0
  80. codna/agent-core/vendor/cline/sdk/examples/hooks/PostToolUse.py +62 -0
  81. codna/agent-core/vendor/cline/sdk/examples/hooks/PostToolUse.sh +17 -0
  82. codna/agent-core/vendor/cline/sdk/examples/hooks/PostToolUse.ts +86 -0
  83. codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse.py +34 -0
  84. codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse.sh +16 -0
  85. codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse.ts +66 -0
  86. codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_BlockDestructive.sh +25 -0
  87. codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_InjectContext.py +116 -0
  88. codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_InjectFileContext.sh +57 -0
  89. codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_ModifyInput.ts +125 -0
  90. codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_RequireReview.sh +19 -0
  91. codna/agent-core/vendor/cline/sdk/examples/hooks/README.md +435 -0
  92. codna/agent-core/vendor/cline/sdk/examples/hooks/SessionShutdown.sh +14 -0
  93. codna/agent-core/vendor/cline/sdk/examples/hooks/TaskComplete.sh +27 -0
  94. codna/agent-core/vendor/cline/sdk/examples/hooks/TaskStart.sh +14 -0
  95. codna/agent-core/vendor/cline/sdk/examples/hooks/custom-compaction-hook.example.ts +246 -0
  96. codna/agent-core/vendor/cline/sdk/examples/package.json +19 -0
  97. codna/agent-core/vendor/cline/sdk/examples/plugins/README.md +203 -0
  98. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/README.md +122 -0
  99. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/agents/anvil.md +16 -0
  100. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/agents/inquisitor.md +18 -0
  101. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/agents/oracle.md +18 -0
  102. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/agents/phantom.md +17 -0
  103. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/index.ts +831 -0
  104. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/package.json +39 -0
  105. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/api-design.md +63 -0
  106. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/code-review.md +61 -0
  107. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/debugging.md +62 -0
  108. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/documentation.md +83 -0
  109. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/migration.md +77 -0
  110. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/refactoring.md +58 -0
  111. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/test-generation.md +76 -0
  112. codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/tsconfig.json +4 -0
  113. codna/agent-core/vendor/cline/sdk/examples/plugins/automation-events.ts +91 -0
  114. codna/agent-core/vendor/cline/sdk/examples/plugins/background-terminal.ts +444 -0
  115. codna/agent-core/vendor/cline/sdk/examples/plugins/custom-compaction.ts +225 -0
  116. codna/agent-core/vendor/cline/sdk/examples/plugins/env-blocker.ts +118 -0
  117. codna/agent-core/vendor/cline/sdk/examples/plugins/gitignore-read-files-guard.ts +270 -0
  118. codna/agent-core/vendor/cline/sdk/examples/plugins/mac-notify.ts +67 -0
  119. codna/agent-core/vendor/cline/sdk/examples/plugins/openrouter-provider.ts +144 -0
  120. codna/agent-core/vendor/cline/sdk/examples/plugins/typescript-lsp/README.md +106 -0
  121. codna/agent-core/vendor/cline/sdk/examples/plugins/typescript-lsp/index.ts +298 -0
  122. codna/agent-core/vendor/cline/sdk/examples/plugins/weather-metrics.ts +151 -0
  123. codna/agent-core/vendor/cline/sdk/examples/plugins/web-search.ts +324 -0
  124. codna/agent-core/vendor/cline/sdk/examples/tsconfig.json +58 -0
  125. codna/agent-core/vendor/cline/sdk/packages/README.md +44 -0
  126. codna/agent-core/vendor/cline/sdk/packages/agents/README.md +278 -0
  127. codna/agent-core/vendor/cline/sdk/packages/agents/bun.mts +29 -0
  128. codna/agent-core/vendor/cline/sdk/packages/agents/package.json +45 -0
  129. codna/agent-core/vendor/cline/sdk/packages/agents/src/agent-runtime.provider-form.test.ts +210 -0
  130. codna/agent-core/vendor/cline/sdk/packages/agents/src/agent-runtime.test.ts +1427 -0
  131. codna/agent-core/vendor/cline/sdk/packages/agents/src/agent-runtime.ts +1558 -0
  132. codna/agent-core/vendor/cline/sdk/packages/agents/src/index.ts +57 -0
  133. codna/agent-core/vendor/cline/sdk/packages/agents/tsconfig.build.json +13 -0
  134. codna/agent-core/vendor/cline/sdk/packages/agents/tsconfig.dev.json +13 -0
  135. codna/agent-core/vendor/cline/sdk/packages/agents/tsconfig.json +9 -0
  136. codna/agent-core/vendor/cline/sdk/packages/agents/vitest.config.ts +10 -0
  137. codna/agent-core/vendor/cline/sdk/packages/core/README.md +110 -0
  138. codna/agent-core/vendor/cline/sdk/packages/core/bun.mts +75 -0
  139. codna/agent-core/vendor/cline/sdk/packages/core/docs/messages-contract-v1.md +148 -0
  140. codna/agent-core/vendor/cline/sdk/packages/core/fixtures/messages/success.messages.json +72 -0
  141. codna/agent-core/vendor/cline/sdk/packages/core/package.json +80 -0
  142. codna/agent-core/vendor/cline/sdk/packages/core/scripts/telemetry-smoke-host.ts +204 -0
  143. codna/agent-core/vendor/cline/sdk/packages/core/scripts/telemetry-smoke.ts +431 -0
  144. codna/agent-core/vendor/cline/sdk/packages/core/src/ClineCore.test.ts +607 -0
  145. codna/agent-core/vendor/cline/sdk/packages/core/src/ClineCore.ts +566 -0
  146. codna/agent-core/vendor/cline/sdk/packages/core/src/account/cline-account-service.test.ts +217 -0
  147. codna/agent-core/vendor/cline/sdk/packages/core/src/account/cline-account-service.ts +338 -0
  148. codna/agent-core/vendor/cline/sdk/packages/core/src/account/featurebase-token.test.ts +175 -0
  149. codna/agent-core/vendor/cline/sdk/packages/core/src/account/index.ts +24 -0
  150. codna/agent-core/vendor/cline/sdk/packages/core/src/account/rpc.test.ts +63 -0
  151. codna/agent-core/vendor/cline/sdk/packages/core/src/account/rpc.ts +185 -0
  152. codna/agent-core/vendor/cline/sdk/packages/core/src/account/types.ts +108 -0
  153. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/bounded-ttl-cache.test.ts +38 -0
  154. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/bounded-ttl-cache.ts +53 -0
  155. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/client.test.ts +93 -0
  156. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/client.ts +50 -0
  157. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/cline.test.ts +233 -0
  158. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/cline.ts +722 -0
  159. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/codex.test.ts +170 -0
  160. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/codex.ts +491 -0
  161. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/oca.test.ts +340 -0
  162. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/oca.ts +588 -0
  163. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/server.test.ts +319 -0
  164. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/server.ts +265 -0
  165. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/types.ts +110 -0
  166. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/utils.test.ts +128 -0
  167. codna/agent-core/vendor/cline/sdk/packages/core/src/auth/utils.ts +247 -0
  168. codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/automation.ts +250 -0
  169. codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/runtime-services.ts +75 -0
  170. codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/start-input.ts +91 -0
  171. codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/telemetry.ts +39 -0
  172. codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/types.ts +274 -0
  173. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/events/cron-event-ingress.test.ts +255 -0
  174. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/events/cron-event-ingress.ts +357 -0
  175. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/events/index.ts +1 -0
  176. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/index.ts +7 -0
  177. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/reports/cron-report-writer.ts +153 -0
  178. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/reports/index.ts +1 -0
  179. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/cron-materializer.test.ts +152 -0
  180. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/cron-materializer.ts +100 -0
  181. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/cron-runner.test.ts +342 -0
  182. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/cron-runner.ts +547 -0
  183. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/index.ts +3 -0
  184. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/resource-limiter.ts +46 -0
  185. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/schedule/index.ts +1 -0
  186. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/schedule/scheduler.test.ts +16 -0
  187. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/schedule/scheduler.ts +373 -0
  188. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/cron-service.ts +163 -0
  189. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/index.ts +3 -0
  190. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/schedule-command-service.ts +198 -0
  191. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/schedule-service.test.ts +213 -0
  192. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/schedule-service.ts +416 -0
  193. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-reconciler.test.ts +138 -0
  194. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-reconciler.ts +241 -0
  195. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-spec-parser.test.ts +198 -0
  196. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-spec-parser.ts +489 -0
  197. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-watcher.test.ts +87 -0
  198. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-watcher.ts +102 -0
  199. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/index.ts +3 -0
  200. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/store/cron-schema.ts +127 -0
  201. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/store/index.ts +2 -0
  202. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/store/sqlite-cron-store.test.ts +354 -0
  203. codna/agent-core/vendor/cline/sdk/packages/core/src/cron/store/sqlite-cron-store.ts +1552 -0
  204. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/index.ts +46 -0
  205. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/runtime-commands.test.ts +185 -0
  206. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/runtime-commands.ts +92 -0
  207. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/skill-frontmatter-toggle.test.ts +109 -0
  208. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/skill-frontmatter-toggle.ts +83 -0
  209. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/unified-config-file-watcher.test.ts +193 -0
  210. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/unified-config-file-watcher.ts +496 -0
  211. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/user-instruction-config-loader.test.ts +424 -0
  212. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/user-instruction-config-loader.ts +628 -0
  213. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/user-instruction-plugin.ts +277 -0
  214. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/user-instruction-service.ts +128 -0
  215. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/agentic-compaction.ts +153 -0
  216. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/basic-compaction.ts +419 -0
  217. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/compaction-shared.ts +511 -0
  218. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/compaction.live.test.ts +346 -0
  219. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/compaction.test.ts +1729 -0
  220. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/compaction.ts +430 -0
  221. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/index.ts +19 -0
  222. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/client.ts +579 -0
  223. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/config-loader.test.ts +402 -0
  224. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/config-loader.ts +446 -0
  225. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/index.ts +57 -0
  226. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/manager.test.ts +105 -0
  227. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/manager.ts +260 -0
  228. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/name-transform.ts +33 -0
  229. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/oauth.test.ts +79 -0
  230. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/oauth.ts +401 -0
  231. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/policies.ts +47 -0
  232. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/tools.ts +47 -0
  233. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/types.ts +135 -0
  234. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-config-loader.test.ts +480 -0
  235. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-config-loader.ts +313 -0
  236. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-load-report.ts +20 -0
  237. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-loader.test.ts +473 -0
  238. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-loader.ts +214 -0
  239. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-module-import.ts +682 -0
  240. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-sandbox-bootstrap.ts +781 -0
  241. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-sandbox.test.ts +810 -0
  242. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-sandbox.ts +640 -0
  243. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-targeting.ts +32 -0
  244. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/constants.ts +37 -0
  245. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/definitions.test.ts +1408 -0
  246. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/definitions.ts +863 -0
  247. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/apply-patch-parser.ts +520 -0
  248. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/apply-patch.test.ts +147 -0
  249. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/apply-patch.ts +348 -0
  250. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/bash.test.ts +108 -0
  251. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/bash.ts +211 -0
  252. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/editor.test.ts +113 -0
  253. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/editor.ts +220 -0
  254. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/file-read.test.ts +167 -0
  255. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/file-read.ts +140 -0
  256. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/index.ts +87 -0
  257. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/search.ts +471 -0
  258. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/web-fetch.ts +259 -0
  259. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/helpers.ts +126 -0
  260. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/index.ts +183 -0
  261. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/model-tool-routing.test.ts +86 -0
  262. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/model-tool-routing.ts +134 -0
  263. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/presets.test.ts +72 -0
  264. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/presets.ts +190 -0
  265. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/runtime.test.ts +74 -0
  266. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/runtime.ts +261 -0
  267. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/schemas.ts +345 -0
  268. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/delegated-agent.ts +136 -0
  269. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/index.ts +5 -0
  270. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/multi-agent.lifecycle.test.ts +649 -0
  271. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/multi-agent.ts +1845 -0
  272. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/projections.ts +283 -0
  273. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/runtime.ts +54 -0
  274. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/spawn-agent-tool.test.ts +378 -0
  275. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/spawn-agent-tool.ts +203 -0
  276. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/subagent-prompts.ts +41 -0
  277. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/team-tools.test.ts +991 -0
  278. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/team-tools.ts +912 -0
  279. codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/types.ts +358 -0
  280. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/checkpoint-hooks.test.ts +276 -0
  281. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/checkpoint-hooks.ts +291 -0
  282. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-extension.ts +15 -0
  283. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-file-config.test.ts +17 -0
  284. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-file-config.ts +117 -0
  285. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-file-hooks.test.ts +593 -0
  286. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-file-hooks.ts +1140 -0
  287. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/index.ts +34 -0
  288. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/subprocess-runner.ts +196 -0
  289. codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/subprocess.ts +543 -0
  290. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/connect.test.ts +74 -0
  291. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/connect.ts +187 -0
  292. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/index.test.ts +994 -0
  293. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/index.ts +1087 -0
  294. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/session-client.test.ts +310 -0
  295. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/session-client.ts +734 -0
  296. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/ui-client.ts +128 -0
  297. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/entry.ts +129 -0
  298. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/index.test.ts +357 -0
  299. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/index.ts +345 -0
  300. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/runtime-handlers.ts +144 -0
  301. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/start-shared-server.ts +61 -0
  302. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/defaults.test.ts +122 -0
  303. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/defaults.ts +70 -0
  304. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/index.test.ts +91 -0
  305. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/index.ts +260 -0
  306. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/workspace.ts +19 -0
  307. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/index.ts +37 -0
  308. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/runtime-host/hub-runtime-host.test.ts +1485 -0
  309. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/runtime-host/hub-runtime-host.ts +1948 -0
  310. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/runtime-host/remote-runtime-host.ts +27 -0
  311. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/boundary.test.ts +1142 -0
  312. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/browser-websocket.test.ts +173 -0
  313. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/browser-websocket.ts +295 -0
  314. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/command-transport.ts +14 -0
  315. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/fetch-wiring.test.ts +102 -0
  316. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/approval-handlers.ts +133 -0
  317. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/capability-handlers.ts +278 -0
  318. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/client-handlers.ts +86 -0
  319. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/context.ts +211 -0
  320. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/run-handlers.test.ts +186 -0
  321. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/run-handlers.ts +337 -0
  322. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/session-event-projector.ts +355 -0
  323. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/session-handlers.ts +842 -0
  324. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-capability-tool-executors.test.ts +215 -0
  325. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-client-contributions.ts +687 -0
  326. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-notifications.ts +94 -0
  327. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-schedule-events.ts +20 -0
  328. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-server-logging.ts +69 -0
  329. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-server-options.ts +66 -0
  330. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-server-transport.ts +593 -0
  331. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-session-records.ts +99 -0
  332. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-websocket-server.ts +562 -0
  333. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/index.test.ts +358 -0
  334. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/index.ts +4 -0
  335. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/native-transport.ts +31 -0
  336. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/notification.test.ts +21 -0
  337. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/ui-events.test.ts +232 -0
  338. codna/agent-core/vendor/cline/sdk/packages/core/src/hub/settings.test.ts +143 -0
  339. codna/agent-core/vendor/cline/sdk/packages/core/src/index.ts +789 -0
  340. codna/agent-core/vendor/cline/sdk/packages/core/src/remote-config/integration.ts +133 -0
  341. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/capabilities/index.ts +2 -0
  342. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/capabilities/normalize-runtime-capabilities.ts +33 -0
  343. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/capabilities/runtime-capabilities.ts +9 -0
  344. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/config/agent-message-codec.test.ts +171 -0
  345. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/config/agent-message-codec.ts +301 -0
  346. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/config/agent-runtime-config-builder.test.ts +268 -0
  347. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/config/agent-runtime-config-builder.ts +181 -0
  348. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/history.test.ts +573 -0
  349. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/history.ts +516 -0
  350. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/host.test.ts +297 -0
  351. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/host.ts +248 -0
  352. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/agent-event-bridge.ts +231 -0
  353. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/session-record.ts +52 -0
  354. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/session-service-invoker.ts +40 -0
  355. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/spawn-tool.ts +162 -0
  356. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/user-files.ts +18 -0
  357. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local-runtime-host.e2e.test.ts +576 -0
  358. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local-runtime-host.test.ts +5167 -0
  359. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local-runtime-host.ts +1755 -0
  360. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/runtime-host-support.test.ts +55 -0
  361. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/runtime-host-support.ts +140 -0
  362. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/runtime-host.ts +323 -0
  363. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/index.ts +24 -0
  364. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-builder.team-persistence.test.ts +290 -0
  365. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-builder.test.ts +887 -0
  366. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-builder.ts +637 -0
  367. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-event-adapter.test.ts +901 -0
  368. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-event-adapter.ts +426 -0
  369. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-oauth-token-manager.test.ts +137 -0
  370. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-oauth-token-manager.ts +269 -0
  371. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-parity.test.ts +165 -0
  372. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/session-runtime-orchestrator.test.ts +1900 -0
  373. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/session-runtime-orchestrator.ts +1334 -0
  374. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/session-runtime.ts +73 -0
  375. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/user-input-builder.ts +159 -0
  376. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/safety/loop-detection.ts +162 -0
  377. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/safety/mistake-tracker.ts +221 -0
  378. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/safety/rules.test.ts +22 -0
  379. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/safety/rules.ts +49 -0
  380. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/tools/subprocess-sandbox.test.ts +81 -0
  381. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/tools/subprocess-sandbox.ts +333 -0
  382. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/tools/tool-approval.ts +102 -0
  383. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/turn-queue/pending-prompt-service.test.ts +168 -0
  384. codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/turn-queue/pending-prompt-service.ts +381 -0
  385. codna/agent-core/vendor/cline/sdk/packages/core/src/services/agent-events.ts +321 -0
  386. codna/agent-core/vendor/cline/sdk/packages/core/src/services/config.ts +5 -0
  387. codna/agent-core/vendor/cline/sdk/packages/core/src/services/global-settings.test.ts +352 -0
  388. codna/agent-core/vendor/cline/sdk/packages/core/src/services/global-settings.ts +324 -0
  389. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/apihandler-agent-model-adapter.test.ts +229 -0
  390. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/apihandler-agent-model-adapter.ts +170 -0
  391. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/cline-recommended-models.ts +168 -0
  392. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/configured-provider-registry.ts +193 -0
  393. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/handler-factory.test.ts +288 -0
  394. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/handler-factory.ts +197 -0
  395. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/provider-defaults.test.ts +260 -0
  396. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/provider-defaults.ts +887 -0
  397. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/provider-settings.test.ts +26 -0
  398. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/provider-settings.ts +322 -0
  399. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/runtime-config.ts +43 -0
  400. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/runtime-registry.ts +172 -0
  401. codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/runtime-types.ts +121 -0
  402. codna/agent-core/vendor/cline/sdk/packages/core/src/services/local-runtime-bootstrap.startup.test.ts +249 -0
  403. codna/agent-core/vendor/cline/sdk/packages/core/src/services/local-runtime-bootstrap.test.ts +543 -0
  404. codna/agent-core/vendor/cline/sdk/packages/core/src/services/local-runtime-bootstrap.ts +470 -0
  405. codna/agent-core/vendor/cline/sdk/packages/core/src/services/plugin-tools.ts +230 -0
  406. codna/agent-core/vendor/cline/sdk/packages/core/src/services/plugin-uninstall.test.ts +165 -0
  407. codna/agent-core/vendor/cline/sdk/packages/core/src/services/plugin-uninstall.ts +425 -0
  408. codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/local-provider-registry.ts +468 -0
  409. codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/local-provider-service.test.ts +1358 -0
  410. codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/local-provider-service.ts +948 -0
  411. codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/model-source.ts +105 -0
  412. codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/provider-config-fields.test.ts +137 -0
  413. codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/provider-config-fields.ts +211 -0
  414. codna/agent-core/vendor/cline/sdk/packages/core/src/services/session-artifacts.ts +138 -0
  415. codna/agent-core/vendor/cline/sdk/packages/core/src/services/session-data.test.ts +307 -0
  416. codna/agent-core/vendor/cline/sdk/packages/core/src/services/session-data.ts +405 -0
  417. codna/agent-core/vendor/cline/sdk/packages/core/src/services/session-telemetry.ts +89 -0
  418. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/artifact-store.ts +1 -0
  419. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/file-team-store.ts +250 -0
  420. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/index.ts +11 -0
  421. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/provider-settings-legacy-migration.test.ts +656 -0
  422. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/provider-settings-legacy-migration.ts +798 -0
  423. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/provider-settings-manager.test.ts +354 -0
  424. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/provider-settings-manager.ts +194 -0
  425. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/session-store.ts +1 -0
  426. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/sqlite-session-store.ts +272 -0
  427. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/sqlite-team-store.ts +537 -0
  428. codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/team-store.ts +36 -0
  429. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/ITelemetryAdapter.ts +94 -0
  430. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/OpenTelemetryAdapter.test.ts +157 -0
  431. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/OpenTelemetryAdapter.ts +348 -0
  432. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/OpenTelemetryProvider.test.ts +401 -0
  433. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/OpenTelemetryProvider.ts +545 -0
  434. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/TelemetryLoggerSink.test.ts +42 -0
  435. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/TelemetryLoggerSink.ts +121 -0
  436. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/TelemetryService.test.ts +134 -0
  437. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/TelemetryService.ts +139 -0
  438. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/core-events.test.ts +696 -0
  439. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/core-events.ts +680 -0
  440. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/distinct-id.test.ts +57 -0
  441. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/distinct-id.ts +69 -0
  442. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/index.ts +22 -0
  443. codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/tool-context.ts +15 -0
  444. codna/agent-core/vendor/cline/sdk/packages/core/src/services/usage.test.ts +75 -0
  445. codna/agent-core/vendor/cline/sdk/packages/core/src/services/usage.ts +87 -0
  446. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/file-indexer.test.ts +156 -0
  447. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/file-indexer.ts +362 -0
  448. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/index.ts +7 -0
  449. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/mention-enricher.test.ts +106 -0
  450. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/mention-enricher.ts +122 -0
  451. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/workspace-manager.ts +100 -0
  452. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/workspace-manifest.ts +129 -0
  453. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/workspace-telemetry.test.ts +166 -0
  454. codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/workspace-telemetry.ts +70 -0
  455. codna/agent-core/vendor/cline/sdk/packages/core/src/session/checkpoint-restore.test.ts +154 -0
  456. codna/agent-core/vendor/cline/sdk/packages/core/src/session/checkpoint-restore.ts +189 -0
  457. codna/agent-core/vendor/cline/sdk/packages/core/src/session/index.ts +32 -0
  458. codna/agent-core/vendor/cline/sdk/packages/core/src/session/models/session-graph.ts +92 -0
  459. codna/agent-core/vendor/cline/sdk/packages/core/src/session/models/session-manifest.ts +29 -0
  460. codna/agent-core/vendor/cline/sdk/packages/core/src/session/models/session-row.ts +199 -0
  461. codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/file-session-service.ts +284 -0
  462. codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/message-builder.test.ts +375 -0
  463. codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/message-builder.ts +976 -0
  464. codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/persistence-service.test.ts +553 -0
  465. codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/persistence-service.ts +582 -0
  466. codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/session-service.team-persistence.test.ts +48 -0
  467. codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/session-service.ts +326 -0
  468. codna/agent-core/vendor/cline/sdk/packages/core/src/session/session-snapshot.ts +208 -0
  469. codna/agent-core/vendor/cline/sdk/packages/core/src/session/session-versioning-service.test.ts +195 -0
  470. codna/agent-core/vendor/cline/sdk/packages/core/src/session/session-versioning-service.ts +245 -0
  471. codna/agent-core/vendor/cline/sdk/packages/core/src/session/stores/conversation-store.ts +77 -0
  472. codna/agent-core/vendor/cline/sdk/packages/core/src/session/stores/session-manifest-store.ts +160 -0
  473. codna/agent-core/vendor/cline/sdk/packages/core/src/session/stores/team-persistence-store.ts +176 -0
  474. codna/agent-core/vendor/cline/sdk/packages/core/src/session/team/index.ts +12 -0
  475. codna/agent-core/vendor/cline/sdk/packages/core/src/session/team/team-child-session-manager.ts +415 -0
  476. codna/agent-core/vendor/cline/sdk/packages/core/src/session/team/team-session-coordinator.ts +240 -0
  477. codna/agent-core/vendor/cline/sdk/packages/core/src/settings/index.ts +15 -0
  478. codna/agent-core/vendor/cline/sdk/packages/core/src/settings/settings-service.test.ts +303 -0
  479. codna/agent-core/vendor/cline/sdk/packages/core/src/settings/settings-service.ts +317 -0
  480. codna/agent-core/vendor/cline/sdk/packages/core/src/settings/types.ts +67 -0
  481. codna/agent-core/vendor/cline/sdk/packages/core/src/types/chat-schema.ts +90 -0
  482. codna/agent-core/vendor/cline/sdk/packages/core/src/types/common.ts +54 -0
  483. codna/agent-core/vendor/cline/sdk/packages/core/src/types/config.ts +220 -0
  484. codna/agent-core/vendor/cline/sdk/packages/core/src/types/events.ts +88 -0
  485. codna/agent-core/vendor/cline/sdk/packages/core/src/types/index.ts +26 -0
  486. codna/agent-core/vendor/cline/sdk/packages/core/src/types/provider-settings.ts +56 -0
  487. codna/agent-core/vendor/cline/sdk/packages/core/src/types/session.ts +134 -0
  488. codna/agent-core/vendor/cline/sdk/packages/core/src/types/sessions.ts +45 -0
  489. codna/agent-core/vendor/cline/sdk/packages/core/src/types/storage.ts +56 -0
  490. codna/agent-core/vendor/cline/sdk/packages/core/src/types.ts +184 -0
  491. codna/agent-core/vendor/cline/sdk/packages/core/src/version.ts +3 -0
  492. codna/agent-core/vendor/cline/sdk/packages/core/tsconfig.build.json +18 -0
  493. codna/agent-core/vendor/cline/sdk/packages/core/tsconfig.dev.json +8 -0
  494. codna/agent-core/vendor/cline/sdk/packages/core/tsconfig.json +24 -0
  495. codna/agent-core/vendor/cline/sdk/packages/core/tsconfig.smoke.json +18 -0
  496. codna/agent-core/vendor/cline/sdk/packages/core/vitest.config.ts +9 -0
  497. codna/agent-core/vendor/cline/sdk/packages/core/vitest.e2e.config.ts +10 -0
  498. codna/agent-core/vendor/cline/sdk/packages/llms/AGENTS.md +39 -0
  499. codna/agent-core/vendor/cline/sdk/packages/llms/README.md +227 -0
  500. codna/agent-core/vendor/cline/sdk/packages/llms/bun.mts +49 -0
  501. codna/agent-core/vendor/cline/sdk/packages/llms/fixtures/usage.json +308 -0
  502. codna/agent-core/vendor/cline/sdk/packages/llms/package.json +73 -0
  503. codna/agent-core/vendor/cline/sdk/packages/llms/scripts/fix-esm-imports.ts +109 -0
  504. codna/agent-core/vendor/cline/sdk/packages/llms/scripts/generate-models.ts +136 -0
  505. codna/agent-core/vendor/cline/sdk/packages/llms/scripts/models/generate-models-dev.ts +24 -0
  506. codna/agent-core/vendor/cline/sdk/packages/llms/scripts/tsconfig.json +14 -0
  507. codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/README.md +165 -0
  508. codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/catalog-live.test.ts +275 -0
  509. codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/catalog-live.ts +186 -0
  510. codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/catalog.generated-access.ts +41 -0
  511. codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/catalog.generated.ts +22756 -0
  512. codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/types.ts +97 -0
  513. codna/agent-core/vendor/cline/sdk/packages/llms/src/index.browser.ts +33 -0
  514. codna/agent-core/vendor/cline/sdk/packages/llms/src/index.ts +74 -0
  515. codna/agent-core/vendor/cline/sdk/packages/llms/src/models.ts +31 -0
  516. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/ai-sdk.test.ts +371 -0
  517. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/ai-sdk.ts +1012 -0
  518. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/async.ts +7 -0
  519. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/billing.test.ts +28 -0
  520. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/billing.ts +23 -0
  521. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/builtins-runtime.ts +101 -0
  522. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/builtins.test.ts +137 -0
  523. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/builtins.ts +1084 -0
  524. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/compat.test.ts +562 -0
  525. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/compat.ts +669 -0
  526. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/config.ts +429 -0
  527. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/factory-registry.ts +161 -0
  528. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/format.test.ts +43 -0
  529. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/format.ts +70 -0
  530. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/gateway.test.ts +3575 -0
  531. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/gateway.ts +310 -0
  532. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/handler.ts +91 -0
  533. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/http.ts +121 -0
  534. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/ids.test.ts +143 -0
  535. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/ids.ts +95 -0
  536. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/messages.ts +17 -0
  537. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/middleware/split-tool-images.test.ts +504 -0
  538. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/middleware/split-tool-images.ts +293 -0
  539. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/model-facts.ts +270 -0
  540. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/model-registry.ts +122 -0
  541. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/openai-codex-models.ts +35 -0
  542. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/provider-keys.ts +153 -0
  543. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/registry.ts +279 -0
  544. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/anthropic-compatible.test.ts +503 -0
  545. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/anthropic-compatible.ts +602 -0
  546. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/generic-compatible.ts +151 -0
  547. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/glm-thinking.ts +106 -0
  548. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/minimax-thinking.ts +78 -0
  549. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/provider-option-rules.ts +546 -0
  550. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/provider-options-types.ts +92 -0
  551. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/provider-options.test.ts +1872 -0
  552. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/provider-options.ts +119 -0
  553. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/reasoning-codecs.ts +40 -0
  554. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/utils.ts +47 -0
  555. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/stream.ts +117 -0
  556. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/types.ts +77 -0
  557. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/anthropic.test.ts +90 -0
  558. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/anthropic.ts +39 -0
  559. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/bedrock.test.ts +201 -0
  560. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/bedrock.ts +171 -0
  561. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/community.test.ts +55 -0
  562. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/community.ts +207 -0
  563. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/google.ts +61 -0
  564. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/minimax-thinking.test.ts +69 -0
  565. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/minimax-thinking.ts +104 -0
  566. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/mistral.ts +31 -0
  567. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/openai-compatible.ts +49 -0
  568. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/openai.ts +24 -0
  569. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/types.ts +141 -0
  570. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/vertex.test.ts +125 -0
  571. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/vertex.ts +56 -0
  572. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers.browser.ts +5 -0
  573. codna/agent-core/vendor/cline/sdk/packages/llms/src/providers.ts +106 -0
  574. codna/agent-core/vendor/cline/sdk/packages/llms/src/services/langfuse-telemetry.test.ts +90 -0
  575. codna/agent-core/vendor/cline/sdk/packages/llms/src/services/langfuse-telemetry.ts +187 -0
  576. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.example.json +254 -0
  577. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.openai-codex.example.json +19 -0
  578. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.openai-codex.reasoning.example.json +22 -0
  579. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.reasoning-disabled.example.json +423 -0
  580. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.reasoning.example.json +349 -0
  581. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.tools.example.json +199 -0
  582. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-config.test.ts +98 -0
  583. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-config.ts +193 -0
  584. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-minimax-routing.test.ts +264 -0
  585. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-reasoning.test.ts +290 -0
  586. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-runner.ts +47 -0
  587. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-tools.test.ts +265 -0
  588. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live.test.ts +350 -0
  589. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/README.md +31 -0
  590. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/anthropic-claude-sonnet-4-6.json +12 -0
  591. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/cline-anthropic-sonnet.json +12 -0
  592. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/openai-codex-gpt-5-4.json +11 -0
  593. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/openai-compatible-deepseek-v4-pro.json +12 -0
  594. codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr.test.ts +450 -0
  595. codna/agent-core/vendor/cline/sdk/packages/llms/tsconfig.build.json +19 -0
  596. codna/agent-core/vendor/cline/sdk/packages/llms/tsconfig.dev.json +12 -0
  597. codna/agent-core/vendor/cline/sdk/packages/llms/tsconfig.json +11 -0
  598. codna/agent-core/vendor/cline/sdk/packages/llms/vitest.config.ts +24 -0
  599. codna/agent-core/vendor/cline/sdk/packages/sdk/bun.mts +18 -0
  600. codna/agent-core/vendor/cline/sdk/packages/sdk/package.json +37 -0
  601. codna/agent-core/vendor/cline/sdk/packages/sdk/src/index.ts +1 -0
  602. codna/agent-core/vendor/cline/sdk/packages/sdk/tsconfig.build.json +12 -0
  603. codna/agent-core/vendor/cline/sdk/packages/sdk/tsconfig.json +11 -0
  604. codna/agent-core/vendor/cline/sdk/packages/shared/README.md +47 -0
  605. codna/agent-core/vendor/cline/sdk/packages/shared/bun.mts +70 -0
  606. codna/agent-core/vendor/cline/sdk/packages/shared/package.json +63 -0
  607. codna/agent-core/vendor/cline/sdk/packages/shared/src/agent.ts +561 -0
  608. codna/agent-core/vendor/cline/sdk/packages/shared/src/agents/index.ts +1 -0
  609. codna/agent-core/vendor/cline/sdk/packages/shared/src/agents/types.ts +1055 -0
  610. codna/agent-core/vendor/cline/sdk/packages/shared/src/automation/index.ts +31 -0
  611. codna/agent-core/vendor/cline/sdk/packages/shared/src/automation/schemas.ts +99 -0
  612. codna/agent-core/vendor/cline/sdk/packages/shared/src/automation/types.ts +187 -0
  613. codna/agent-core/vendor/cline/sdk/packages/shared/src/connectors/events.ts +73 -0
  614. codna/agent-core/vendor/cline/sdk/packages/shared/src/connectors/options.ts +190 -0
  615. codna/agent-core/vendor/cline/sdk/packages/shared/src/cron/cron-spec-types.ts +104 -0
  616. codna/agent-core/vendor/cline/sdk/packages/shared/src/cron/index.ts +13 -0
  617. codna/agent-core/vendor/cline/sdk/packages/shared/src/db/index.ts +14 -0
  618. codna/agent-core/vendor/cline/sdk/packages/shared/src/db/sqlite-db.test.ts +155 -0
  619. codna/agent-core/vendor/cline/sdk/packages/shared/src/db/sqlite-db.ts +381 -0
  620. codna/agent-core/vendor/cline/sdk/packages/shared/src/dispose.ts +31 -0
  621. codna/agent-core/vendor/cline/sdk/packages/shared/src/extensions/context.ts +92 -0
  622. codna/agent-core/vendor/cline/sdk/packages/shared/src/extensions/contribution-registry.test.ts +156 -0
  623. codna/agent-core/vendor/cline/sdk/packages/shared/src/extensions/contribution-registry.ts +524 -0
  624. codna/agent-core/vendor/cline/sdk/packages/shared/src/extensions/plugin.ts +1 -0
  625. codna/agent-core/vendor/cline/sdk/packages/shared/src/hooks/contracts.ts +9 -0
  626. codna/agent-core/vendor/cline/sdk/packages/shared/src/hooks/events.ts +327 -0
  627. codna/agent-core/vendor/cline/sdk/packages/shared/src/hub.ts +723 -0
  628. codna/agent-core/vendor/cline/sdk/packages/shared/src/index.browser.ts +355 -0
  629. codna/agent-core/vendor/cline/sdk/packages/shared/src/index.ts +405 -0
  630. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/ai-sdk-format.test.ts +898 -0
  631. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/ai-sdk-format.ts +389 -0
  632. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/gateway.ts +202 -0
  633. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/messages.ts +168 -0
  634. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/model-info.ts +94 -0
  635. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/reasoning-effort.ts +73 -0
  636. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/requests.ts +12 -0
  637. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/tokens.ts +12 -0
  638. codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/tools.ts +96 -0
  639. codna/agent-core/vendor/cline/sdk/packages/shared/src/logging/logger.ts +45 -0
  640. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/error.ts +18 -0
  641. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/headers/utils.ts +28 -0
  642. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/json.test.ts +14 -0
  643. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/json.ts +86 -0
  644. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/shell.test.ts +46 -0
  645. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/shell.ts +32 -0
  646. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/string.ts +29 -0
  647. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/time.ts +39 -0
  648. codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/zod.ts +23 -0
  649. codna/agent-core/vendor/cline/sdk/packages/shared/src/prompt/cline.ts +117 -0
  650. codna/agent-core/vendor/cline/sdk/packages/shared/src/prompt/format.test.ts +39 -0
  651. codna/agent-core/vendor/cline/sdk/packages/shared/src/prompt/format.ts +99 -0
  652. codna/agent-core/vendor/cline/sdk/packages/shared/src/prompt/system.ts +64 -0
  653. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/artifact-store.ts +70 -0
  654. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/blob-storage.ts +416 -0
  655. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/bundle.ts +181 -0
  656. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/constants.ts +5 -0
  657. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/index.ts +9 -0
  658. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/materializer.ts +165 -0
  659. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/paths.ts +33 -0
  660. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/runtime.test.ts +102 -0
  661. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/runtime.ts +236 -0
  662. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/schema.test.ts +977 -0
  663. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/schema.ts +262 -0
  664. codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/telemetry.ts +124 -0
  665. codna/agent-core/vendor/cline/sdk/packages/shared/src/rpc/index.ts +5 -0
  666. codna/agent-core/vendor/cline/sdk/packages/shared/src/rpc/runtime.ts +429 -0
  667. codna/agent-core/vendor/cline/sdk/packages/shared/src/rpc/team-progress.ts +71 -0
  668. codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/build-env.test.ts +115 -0
  669. codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/build-env.ts +183 -0
  670. codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/cline-environment.test.ts +106 -0
  671. codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/cline-environment.ts +88 -0
  672. codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/hub-daemon-env.test.ts +20 -0
  673. codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/hub-daemon-env.ts +7 -0
  674. codna/agent-core/vendor/cline/sdk/packages/shared/src/services/telemetry-config.ts +58 -0
  675. codna/agent-core/vendor/cline/sdk/packages/shared/src/services/telemetry.test.ts +66 -0
  676. codna/agent-core/vendor/cline/sdk/packages/shared/src/services/telemetry.ts +295 -0
  677. codna/agent-core/vendor/cline/sdk/packages/shared/src/session/hook-context.ts +45 -0
  678. codna/agent-core/vendor/cline/sdk/packages/shared/src/session/index.ts +6 -0
  679. codna/agent-core/vendor/cline/sdk/packages/shared/src/session/records.ts +41 -0
  680. codna/agent-core/vendor/cline/sdk/packages/shared/src/session/runtime-config.ts +69 -0
  681. codna/agent-core/vendor/cline/sdk/packages/shared/src/session/runtime-env.ts +8 -0
  682. codna/agent-core/vendor/cline/sdk/packages/shared/src/session/workspace.ts +45 -0
  683. codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/index.ts +47 -0
  684. codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/path-resolution.test.ts +63 -0
  685. codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/path-resolution.ts +114 -0
  686. codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/paths.home-dir.test.ts +61 -0
  687. codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/paths.test.ts +180 -0
  688. codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/paths.ts +588 -0
  689. codna/agent-core/vendor/cline/sdk/packages/shared/src/team/index.ts +2 -0
  690. codna/agent-core/vendor/cline/sdk/packages/shared/src/team/schema.ts +452 -0
  691. codna/agent-core/vendor/cline/sdk/packages/shared/src/team/types.ts +235 -0
  692. codna/agent-core/vendor/cline/sdk/packages/shared/src/tools/create.test.ts +201 -0
  693. codna/agent-core/vendor/cline/sdk/packages/shared/src/tools/create.ts +130 -0
  694. codna/agent-core/vendor/cline/sdk/packages/shared/src/types/auth.ts +41 -0
  695. codna/agent-core/vendor/cline/sdk/packages/shared/src/types/index.ts +2 -0
  696. codna/agent-core/vendor/cline/sdk/packages/shared/src/types/vcr.ts +14 -0
  697. codna/agent-core/vendor/cline/sdk/packages/shared/src/vcr.test.ts +229 -0
  698. codna/agent-core/vendor/cline/sdk/packages/shared/src/vcr.ts +900 -0
  699. codna/agent-core/vendor/cline/sdk/packages/shared/tsconfig.build.json +7 -0
  700. codna/agent-core/vendor/cline/sdk/packages/shared/tsconfig.json +9 -0
  701. codna/agent-core/vendor/cline/sdk/packages/shared/vitest.config.ts +9 -0
  702. codna/agent-core/vendor/cline/sdk/packages/tsconfig.base.json +22 -0
  703. codna/agent-core/vendor/cline/sdk/scripts/check-publish.ts +351 -0
  704. codna/agent-core/vendor/cline/sdk/scripts/ci-node-smoke.ts +155 -0
  705. codna/agent-core/vendor/cline/sdk/scripts/clean.ts +91 -0
  706. codna/agent-core/vendor/cline/sdk/scripts/release.ts +548 -0
  707. codna/agent-core/vendor/cline/sdk/scripts/run-vendored-tests.sh +44 -0
  708. codna/agent-core/vendor/cline/sdk/scripts/version.ts +120 -0
  709. codna/agent-core/vendor/cline/sdk/tsconfig.json +53 -0
  710. codna/agent_core_runtime.py +816 -0
  711. codna/cli.py +921 -0
  712. codna/cli_errors.py +50 -0
  713. codna/cline_agent.py +90 -0
  714. codna/codeunits.py +221 -0
  715. codna/codeunits_treesitter.py +148 -0
  716. codna/doctor.py +212 -0
  717. codna/doctor_output.py +61 -0
  718. codna/engine.py +149 -0
  719. codna/evasion.py +192 -0
  720. codna/evidence.py +163 -0
  721. codna/findings.py +272 -0
  722. codna/gate.py +132 -0
  723. codna/gitpush.py +57 -0
  724. codna/local_client.py +932 -0
  725. codna/local_mojo_daemon.py +568 -0
  726. codna/local_mojo_pool.py +861 -0
  727. codna/local_repository_shims.py +419 -0
  728. codna/local_runtime.py +650 -0
  729. codna/localfix.py +121 -0
  730. codna/manifest.py +164 -0
  731. codna/mcp_server.py +155 -0
  732. codna/memory.py +885 -0
  733. codna/netjail.py +68 -0
  734. codna/packaged_agent_runner.py +354 -0
  735. codna/packaged_git.py +378 -0
  736. codna/packaged_repository_advanced.py +618 -0
  737. codna/packaged_repository_backend.py +887 -0
  738. codna/patchgen.py +115 -0
  739. codna/policy.py +85 -0
  740. codna/refengine.py +132 -0
  741. codna/repo_backend.py +78 -0
  742. codna/repository_artifacts.py +291 -0
  743. codna/runtime/__init__.py +17 -0
  744. codna/runtime/config.py +394 -0
  745. codna/runtime/health.py +130 -0
  746. codna/runtime/local_stack.py +978 -0
  747. codna/runtime/ports.py +137 -0
  748. codna/runtime/processes.py +199 -0
  749. codna/runtime_config.py +94 -0
  750. codna/sandbox.py +111 -0
  751. codna/sarif.py +610 -0
  752. codna/secure.py +250 -0
  753. codna/supervisor.py +108 -0
  754. codna/worker.py +161 -0
  755. codna/worktree.py +73 -0
  756. codna/writer.py +169 -0
  757. codna-0.1.0.dist-info/METADATA +153 -0
  758. codna-0.1.0.dist-info/RECORD +761 -0
  759. codna-0.1.0.dist-info/WHEEL +5 -0
  760. codna-0.1.0.dist-info/entry_points.txt +2 -0
  761. codna-0.1.0.dist-info/top_level.txt +1 -0
codna/cli.py ADDED
@@ -0,0 +1,921 @@
1
+ """The `codna` command. Codna understands and fixes your repository.
2
+
3
+ Normal local topology: codna calls the local Algenta repository-intelligence SDK/core
4
+ in-process, writes local Arrow/Parquet artifacts, and starts the sidecar-only agent
5
+ core when verified planning needs model execution. Remote engine URLs remain supported
6
+ only when explicitly provided through the real shell environment.
7
+ """
8
+ from __future__ import annotations
9
+
10
+ import argparse
11
+ from itertools import count
12
+ import json
13
+ import os
14
+ from pathlib import Path
15
+ from pathlib import PurePosixPath
16
+ import re
17
+ import subprocess
18
+ import sys
19
+ import time
20
+ from typing import Any
21
+
22
+ import httpx
23
+
24
+ from . import __version__
25
+ from .agent_core_runtime import ensure_agent_core_running, inspect_agent_core_runtime, stop_agent_core_runtime
26
+ from .cli_errors import format_cli_error
27
+ from .local_mojo_pool import legacy_global_mojo_worker_diagnostics, mojo_worker_diagnostics
28
+ from .runtime import LocalRuntimeError, ensure_running
29
+ from .runtime.config import API_KEY_KEYS, RuntimeConfigError, parse_keys_file_values, resolve_runtime_config
30
+
31
+ _CONNECTOR_NAME_COUNTER = count()
32
+ _FOCUS_PATH_PATTERNS = (
33
+ re.compile(r'File\s+"([^"]+)"(?:,\s*line\s*\d+)?', re.I),
34
+ re.compile(r"\b(?:Target file|Path):\s*`?([^`\s]+)`?", re.I),
35
+ )
36
+
37
+
38
+ class CodnaError(Exception):
39
+ """User-facing CLI error that can be surfaced without terminating embedded callers."""
40
+
41
+
42
+ def _die(msg: str) -> None:
43
+ raise CodnaError(msg)
44
+
45
+
46
+ def _structured_error(exc: BaseException) -> dict[str, object] | None:
47
+ code = getattr(exc, "code", None)
48
+ if not code:
49
+ return None
50
+ details = getattr(exc, "details", {})
51
+ return {
52
+ "error": {
53
+ "code": str(code),
54
+ "message": str(exc),
55
+ "details": details if isinstance(details, dict) else {},
56
+ }
57
+ }
58
+
59
+
60
+ def _keys_file_path() -> Path:
61
+ return Path(os.environ.get("CODNA_KEYS_FILE") or (Path(__file__).resolve().parents[2] / "keys.txt"))
62
+
63
+
64
+ def _runtime_keys():
65
+ path = _keys_file_path().expanduser()
66
+ return parse_keys_file_values(path) if path.is_file() else {}
67
+
68
+
69
+ def _api_key(keys) -> str | None:
70
+ for name in API_KEY_KEYS:
71
+ value = os.environ.get(name)
72
+ if value:
73
+ return value
74
+ for name in API_KEY_KEYS:
75
+ config_value = keys.get(name)
76
+ if config_value and config_value.value:
77
+ return config_value.value
78
+ return None
79
+
80
+
81
+ class _HttpCodnaClient:
82
+ """Explicit remote/compatibility client for the repository-intelligence API."""
83
+
84
+ _RETRYABLE_STATUS = {429, 500, 502, 503, 504}
85
+ _DEFAULT_MAX_RETRIES = 2
86
+ _BACKOFF_BASE_S = 0.25
87
+
88
+ def __init__(
89
+ self,
90
+ *,
91
+ api_key: str,
92
+ base_url: str,
93
+ timeout: float,
94
+ max_retries: int | None = None,
95
+ ) -> None:
96
+ if not api_key:
97
+ _die("no API key — set CODNA_API_KEY (your codna key).")
98
+ if not base_url:
99
+ _die("no engine URL resolved — run `codna doctor --start-stack` for local runtime diagnostics.")
100
+ self._max_retries = self._resolve_max_retries(max_retries)
101
+ self._client = httpx.Client(
102
+ base_url=base_url.rstrip("/"),
103
+ timeout=timeout,
104
+ headers={
105
+ "Authorization": f"Bearer {api_key}",
106
+ "Content-Type": "application/json",
107
+ "User-Agent": f"codna-cli/{__version__}",
108
+ },
109
+ )
110
+
111
+ @classmethod
112
+ def _resolve_max_retries(cls, max_retries: int | None) -> int:
113
+ raw = str(
114
+ max_retries
115
+ if max_retries is not None
116
+ else os.environ.get("CODNA_HTTP_MAX_RETRIES", cls._DEFAULT_MAX_RETRIES)
117
+ )
118
+ try:
119
+ value = int(raw)
120
+ except ValueError as exc:
121
+ raise CodnaError("CODNA_HTTP_MAX_RETRIES must be an integer.") from exc
122
+ if value < 0:
123
+ raise CodnaError("CODNA_HTTP_MAX_RETRIES must be >= 0.")
124
+ return value
125
+
126
+ def _request(
127
+ self,
128
+ method: str,
129
+ path: str,
130
+ *,
131
+ json_payload: dict[str, Any] | None = None,
132
+ json: dict[str, Any] | None = None,
133
+ params: dict[str, Any] | None = None,
134
+ ) -> dict[str, Any]:
135
+ if json_payload is not None and json is not None:
136
+ raise CodnaError("internal client received both json_payload and json.")
137
+ body = json_payload if json_payload is not None else json
138
+ last_error: Exception | None = None
139
+ for attempt in range(self._max_retries + 1):
140
+ try:
141
+ response = self._client.request(method, path, json=body, params=params)
142
+ except httpx.HTTPError as exc:
143
+ last_error = exc
144
+ if attempt < self._max_retries:
145
+ self._sleep_before_retry(attempt)
146
+ continue
147
+ raise CodnaError(f"engine {method} {path} failed: {exc}") from exc
148
+ if response.status_code in self._RETRYABLE_STATUS and attempt < self._max_retries:
149
+ self._sleep_before_retry(attempt)
150
+ continue
151
+ return self._parse_response(method, path, response)
152
+ raise CodnaError(f"engine {method} {path} failed: {last_error}")
153
+
154
+ def _sleep_before_retry(self, attempt: int) -> None:
155
+ time.sleep(self._BACKOFF_BASE_S * (attempt + 1))
156
+
157
+ @staticmethod
158
+ def _parse_response(method: str, path: str, response: httpx.Response) -> dict[str, Any]:
159
+ payload: Any = {}
160
+ if response.content:
161
+ try:
162
+ payload = response.json()
163
+ except ValueError:
164
+ payload = {"raw": response.text[:1000]}
165
+ if 200 <= response.status_code < 300:
166
+ if isinstance(payload, dict):
167
+ return payload
168
+ raise CodnaError(f"engine {method} {path} returned non-object JSON.")
169
+ message, details = _extract_engine_error(payload)
170
+ request_id = response.headers.get("x-request-id") or response.headers.get("x-codna-request-id")
171
+ suffix = f" request_id={request_id}" if request_id else ""
172
+ detail_text = f" details={json.dumps(details, sort_keys=True)}" if details else ""
173
+ raise CodnaError(
174
+ f"engine {method} {path} failed: status={response.status_code} "
175
+ f"message={message}{suffix}{detail_text}"
176
+ )
177
+
178
+ def create_connector(
179
+ self,
180
+ *,
181
+ name: str,
182
+ connector_type: str,
183
+ config: dict[str, Any] | None = None,
184
+ description: str | None = None,
185
+ visibility: str | None = None,
186
+ ) -> dict[str, Any]:
187
+ payload: dict[str, Any] = {"name": name, "connector_type": connector_type, "config": config or {}}
188
+ if description is not None:
189
+ payload["description"] = description
190
+ if visibility is not None:
191
+ payload["visibility"] = visibility
192
+ return self._request("POST", "/v1/connectors", json_payload=payload)
193
+
194
+ def get_repository_intelligence_capabilities(self) -> dict[str, Any]:
195
+ return self._request("GET", "/v1/repositories/capabilities")
196
+
197
+ def create_repository_snapshot(self, repository_id: str, request: dict[str, Any]) -> dict[str, Any]:
198
+ return self._request("POST", f"/v1/repositories/{repository_id}/snapshots", json_payload=request)
199
+
200
+ def get_repository_snapshot(self, repository_id: str, snapshot_id: str) -> dict[str, Any]:
201
+ return self._request("GET", f"/v1/repositories/{repository_id}/snapshots/{snapshot_id}")
202
+
203
+ def triage_repository(self, repository_id: str, request: dict[str, Any]) -> dict[str, Any]:
204
+ return self._request("POST", f"/v1/repositories/{repository_id}/triage", json_payload=request)
205
+
206
+ def create_repository_decision_plan(self, repository_id: str, request: dict[str, Any]) -> dict[str, Any]:
207
+ return self._request("POST", f"/v1/repositories/{repository_id}/decision-plans", json_payload=request)
208
+
209
+ def query_repository_graph(self, repository_id: str, request: dict[str, Any]) -> dict[str, Any]:
210
+ return self._request("POST", f"/v1/repositories/{repository_id}/graph-query", json_payload=request)
211
+
212
+ def simulate_repository(self, repository_id: str, request: dict[str, Any]) -> dict[str, Any]:
213
+ return self._request("POST", f"/v1/repositories/{repository_id}/simulate", json_payload=request)
214
+
215
+ def apply_repository(self, repository_id: str, request: dict[str, Any]) -> dict[str, Any]:
216
+ return self._request("POST", f"/v1/repositories/{repository_id}/apply", json_payload=request)
217
+
218
+
219
+ def _extract_engine_error(payload: Any) -> tuple[str, dict[str, Any]]:
220
+ if not isinstance(payload, dict):
221
+ return "engine returned a non-object error response", {}
222
+ error = payload.get("error")
223
+ if isinstance(error, dict):
224
+ msg = error.get("message") or error.get("code") or "engine request failed"
225
+ details = error.get("details") if isinstance(error.get("details"), dict) else {}
226
+ return str(msg), details
227
+ msg = payload.get("message") or payload.get("detail") or payload.get("raw") or "engine request failed"
228
+ return str(msg), {}
229
+
230
+
231
+ def _engine_url_key():
232
+ """Resolve engine URL + API key.
233
+
234
+ Remote explicit env wins. Otherwise the owned local runtime is ensured for
235
+ legacy HTTP-only surfaces. Normal repository triage/fix uses _client(), which
236
+ defaults to the in-process local SDK path and does not call this function.
237
+ """
238
+ keys = _runtime_keys()
239
+ config = resolve_runtime_config(keys=keys)
240
+ if config.remote_engine_url:
241
+ return config.remote_engine_url.rstrip("/"), _api_key(keys)
242
+ endpoint = ensure_running(keys=keys)
243
+ url = endpoint.engine_url
244
+ return url.rstrip("/"), _api_key(keys)
245
+
246
+
247
+ def _client():
248
+ keys = _runtime_keys()
249
+ config = resolve_runtime_config(keys=keys)
250
+ if not config.remote_engine_url:
251
+ from .local_client import LocalCodnaRuntimeClient
252
+
253
+ return LocalCodnaRuntimeClient(keys=keys)
254
+
255
+ url = config.remote_engine_url
256
+ key = _api_key(keys)
257
+ if not key:
258
+ _die("no API key — set CODNA_API_KEY (your codna key).")
259
+ timeout = float(os.environ.get("CODNA_TIMEOUT_S", "1800"))
260
+ return _HttpCodnaClient(api_key=key, base_url=url, timeout=timeout)
261
+
262
+
263
+ def _dump(x):
264
+ return x.model_dump() if hasattr(x, "model_dump") else x
265
+
266
+
267
+ def _connector_name(prefix: str = "codna") -> str:
268
+ return f"{prefix}-{time.time_ns()}-{next(_CONNECTOR_NAME_COUNTER)}"
269
+
270
+
271
+ def _clean_git_head(local_path: str) -> str | None:
272
+ try:
273
+ head = subprocess.run(
274
+ ["git", "rev-parse", "--verify", "HEAD"],
275
+ cwd=local_path,
276
+ capture_output=True,
277
+ text=True,
278
+ check=False,
279
+ timeout=10,
280
+ )
281
+ if head.returncode != 0:
282
+ return None
283
+ revision = head.stdout.strip().lower()
284
+ if len(revision) != 40 or any(char not in "0123456789abcdef" for char in revision):
285
+ return None
286
+ status = subprocess.run(
287
+ ["git", "status", "--porcelain=v1", "-z", "--untracked-files=all"],
288
+ cwd=local_path,
289
+ capture_output=True,
290
+ check=False,
291
+ timeout=30,
292
+ )
293
+ if status.returncode != 0 or status.stdout:
294
+ return None
295
+ return revision
296
+ except (OSError, subprocess.SubprocessError):
297
+ return None
298
+
299
+
300
+ def _local_repo_connector_config(local_path: str) -> dict[str, object]:
301
+ config: dict[str, object] = {"path": local_path}
302
+ clean_head = _clean_git_head(local_path)
303
+ if clean_head is not None:
304
+ config["assume_clean_git_clone"] = True
305
+ config["resolved_revision"] = clean_head
306
+ return config
307
+
308
+
309
+ def _normalize_focus_path(local_path: str, raw_path: str) -> str | None:
310
+ repo_root = Path(local_path).expanduser().resolve()
311
+ candidate = raw_path.strip().strip("`'\"")
312
+ candidate = candidate.lstrip("<([{")
313
+ candidate = candidate.rstrip(">)]},:;")
314
+ candidate = candidate.replace("\\", "/")
315
+ if not candidate:
316
+ return None
317
+ candidate_path = Path(candidate)
318
+ if candidate_path.is_absolute():
319
+ try:
320
+ relative = candidate_path.resolve().relative_to(repo_root)
321
+ except ValueError:
322
+ return None
323
+ else:
324
+ relative = Path(PurePosixPath(candidate))
325
+ if ".." in relative.parts or relative.is_absolute():
326
+ return None
327
+ normalized = PurePosixPath(relative.as_posix())
328
+ if normalized.as_posix() in {"", "."}:
329
+ return None
330
+ if not (repo_root / normalized.as_posix()).is_file():
331
+ return None
332
+ return normalized.as_posix()
333
+
334
+
335
+ def _issue_focus_paths(local_path: str, issue: str | None) -> list[str]:
336
+ if not issue:
337
+ return []
338
+ output: list[str] = []
339
+ seen: set[str] = set()
340
+ for pattern in _FOCUS_PATH_PATTERNS:
341
+ for match in pattern.finditer(issue):
342
+ normalized = _normalize_focus_path(local_path, match.group(1))
343
+ if normalized is None or normalized in seen:
344
+ continue
345
+ seen.add(normalized)
346
+ output.append(normalized)
347
+ if len(output) >= 8:
348
+ return output
349
+ return output
350
+
351
+
352
+ def _register(
353
+ c,
354
+ repo: str,
355
+ ref: str | None,
356
+ github_token: str | None = None,
357
+ focus_paths: list[str] | None = None,
358
+ ):
359
+ local = os.path.abspath(os.path.expanduser(repo))
360
+ if os.path.isdir(local) and not github_token:
361
+ # the user's own repo on this machine (local SDK/core reads it directly)
362
+ conn = _dump(c.create_connector(name=_connector_name(),
363
+ connector_type="local_repo",
364
+ config=_local_repo_connector_config(local)))
365
+ elif repo.startswith(("http://", "https://")) or repo.endswith(".git"):
366
+ cfg = {"repository_url": repo}
367
+ if github_token: # write scope, needed to push a branch + open a PR
368
+ cfg["access_token"] = github_token
369
+ conn = _dump(c.create_connector(name=_connector_name(),
370
+ connector_type="github_repo", config=cfg))
371
+ else:
372
+ _die(f"'{repo}': not a local directory or a git URL.")
373
+ rid = conn.get("id") or conn.get("connector_id")
374
+ req = {"focus_paths": list(dict.fromkeys(focus_paths or []))}
375
+ if ref:
376
+ req["ref"] = ref
377
+ snap = _dump(c.create_repository_snapshot(rid, req))
378
+ return rid, snap
379
+
380
+
381
+ def cmd_triage(args) -> None:
382
+ c = _client()
383
+ print(f"codna: understanding {args.repo} …")
384
+ t = time.perf_counter()
385
+ local = os.path.abspath(os.path.expanduser(args.repo))
386
+ issue = args.issue or "Map this repository and locate its most relevant code."
387
+ focus_paths = _issue_focus_paths(local, issue) if os.path.isdir(local) else []
388
+ rid, snap = _register(c, args.repo, args.ref, focus_paths=focus_paths)
389
+ sig = {"issue_text": issue}
390
+ if focus_paths:
391
+ sig["changed_files"] = focus_paths
392
+ tri = _dump(c.triage_repository(rid, {"snapshot_id": snap["snapshot_id"], "signals": sig}))
393
+ dt = time.perf_counter() - t
394
+ files = snap.get("snapshot_file_count") or snap.get("file_count")
395
+ raw = tri.get("raw_repo_token_estimate") or 0
396
+ bundle = tri.get("evidence_bundle_token_count") or 0
397
+ rr = tri.get("reduction_ratio")
398
+ print(f"\n✓ codna understood {files} files in {dt:.1f}s")
399
+ print(f" suspect files : {', '.join(tri.get('suspect_files') or []) or '(none)'}")
400
+ if rr:
401
+ print(f" context : {raw:,} → {bundle:,} tokens ({rr:.0f}× smaller for the agent)")
402
+
403
+
404
+ def _from_junit(path: str):
405
+ """Turn a JUnit/pytest XML report into (issue_text, [failing_test_ids])."""
406
+ import xml.etree.ElementTree as ET
407
+ try:
408
+ root = ET.parse(os.path.expanduser(path)).getroot()
409
+ except Exception as exc: # noqa: BLE001
410
+ _die(f"could not read JUnit report {path}: {exc}")
411
+ failing = []
412
+ for case in root.iter("testcase"):
413
+ if case.find("failure") is not None or case.find("error") is not None:
414
+ name = case.get("name", "")
415
+ cls = case.get("classname", "")
416
+ failing.append(f"{cls}::{name}" if cls else name)
417
+ if not failing:
418
+ return None, []
419
+ return f"{len(failing)} failing test(s): " + "; ".join(failing[:8]), failing
420
+
421
+
422
+ def _resolve_issue(args):
423
+ if args.from_junit:
424
+ issue, failing = _from_junit(args.from_junit)
425
+ if args.issue:
426
+ issue = args.issue
427
+ return issue, failing
428
+ return args.issue, (args.failing_test or [])
429
+
430
+
431
+ def _sim_id(sim: dict):
432
+ # /simulate returns a DecisionEnvelope; the simulation id is surfaced in
433
+ # validated_inputs.simulation_id (see engine execution_workflow ~L499).
434
+ vi = sim.get("validated_inputs") or {}
435
+ if vi.get("simulation_id"):
436
+ return vi["simulation_id"]
437
+ for k in ("simulation_id", "id"):
438
+ if sim.get(k):
439
+ return sim[k]
440
+ for nest in ("envelope", "decision_plan", "result"):
441
+ v = (sim.get(nest) or {})
442
+ if isinstance(v, dict) and v.get("simulation_id"):
443
+ return v["simulation_id"]
444
+ return None
445
+
446
+
447
+ def _pr_body(issue, ra, plan):
448
+ dp = plan.get("decision_plan") or {}
449
+ lines = ["Automated fix by **codna**.", "", f"**Issue:** {issue}"]
450
+ if ra.get("root_cause"):
451
+ lines.append(f"**Root cause:** {ra['root_cause']}")
452
+ if ra.get("impacted_symbols"):
453
+ lines.append(f"**Symbols:** {', '.join(ra['impacted_symbols'])}")
454
+ if dp.get("confidence") is not None:
455
+ lines.append(f"**Confidence:** {int(dp['confidence'] * 100)}%")
456
+ lines += ["", "_Review before merging._"]
457
+ return "\n".join(lines)
458
+
459
+
460
+ def cmd_fix(args) -> None:
461
+ c = _client()
462
+ issue, failing = _resolve_issue(args)
463
+ if not issue:
464
+ _die("`codna fix` needs --issue (or --from-junit) describing what's broken.")
465
+ gh_token = (args.github_token or os.environ.get("CODNA_GITHUB_TOKEN")
466
+ or os.environ.get("GITHUB_TOKEN"))
467
+ if args.open_pr:
468
+ if os.path.isdir(os.path.abspath(os.path.expanduser(args.repo))):
469
+ _die("--open-pr needs a git URL (a local path has no remote to push to).")
470
+ if not gh_token:
471
+ _die("--open-pr needs a write token: pass --github-token or set GITHUB_TOKEN.")
472
+ print(f"codna: fixing {args.repo} …")
473
+ t = time.perf_counter()
474
+ local = os.path.abspath(os.path.expanduser(args.repo))
475
+ focus_paths = _issue_focus_paths(local, issue) if os.path.isdir(local) else []
476
+ rid, snap = _register(
477
+ c,
478
+ args.repo,
479
+ args.ref,
480
+ github_token=gh_token if args.open_pr else None,
481
+ focus_paths=focus_paths,
482
+ )
483
+ sig = {"issue_text": issue, "failing_tests": failing}
484
+ if focus_paths:
485
+ sig["changed_files"] = focus_paths
486
+ try:
487
+ tri = _dump(c.triage_repository(rid, {"snapshot_id": snap["snapshot_id"], "signals": sig}))
488
+ plan = _dump(c.create_repository_decision_plan(rid, {
489
+ "snapshot_id": snap["snapshot_id"],
490
+ "workspace_evidence_bundle_ref": tri.get("workspace_evidence_bundle_ref"),
491
+ "signals": sig,
492
+ "model": args.model,
493
+ }))
494
+ except CodnaError:
495
+ raise
496
+ except Exception as exc: # noqa: BLE001
497
+ if exc.__class__.__module__.startswith("codna."):
498
+ raise
499
+ raise CodnaError(f"fix failed: {format_cli_error(exc)}") from exc
500
+ dt = time.perf_counter() - t
501
+ dp = plan.get("decision_plan") or {}
502
+ ra = dp.get("repository_analysis") or {}
503
+ usage = plan.get("planner_usage") or {}
504
+ tr = ra.get("token_reduction_metrics") or {}
505
+ risk = dp.get("risk") or {}
506
+ cost = usage.get("cost_usd")
507
+ print(f"\n✓ codna fixed {args.repo} in {dt:.0f}s")
508
+ print(f" root cause : {ra.get('root_cause','?')}")
509
+ if ra.get("impacted_symbols"):
510
+ print(f" symbol : {', '.join(ra['impacted_symbols'])} (blast radius: {ra.get('blast_radius','?')})")
511
+ print(f" confidence : {int((dp.get('confidence') or 0)*100)}%"
512
+ + (f" · regression risk: {int((risk.get('probability_of_loss') or 0)*100)}%" if risk else ""))
513
+ if tr.get("reduction_ratio"):
514
+ print(f" context : {int(tr.get('raw_repo_token_estimate',0)):,} → "
515
+ f"{int(tr.get('evidence_bundle_token_count',0)):,} tokens ({tr['reduction_ratio']:.0f}× smaller)")
516
+ out_tok, in_tok = usage.get("output_tokens"), usage.get("input_tokens")
517
+ have_tokens = isinstance(out_tok, (int, float)) and isinstance(in_tok, (int, float))
518
+ print(f" agent : {plan.get('runtime_model','?')} via codna"
519
+ + (f" · tokens: {int(in_tok):,} in / {int(out_tok):,} out" if have_tokens else "")
520
+ + (f" · cost: ${cost:.3f}" if cost is not None else ""))
521
+ pref = ra.get("generated_patch_ref")
522
+ if not (args.open_pr or args.apply):
523
+ print(f" patch : {pref} (--apply for a local branch · --open-pr to open a PR)")
524
+ return
525
+ # apply requires a simulation id — run the deterministic risk gate first
526
+ try:
527
+ sim = _dump(c.simulate_repository(rid, {"snapshot_id": snap["snapshot_id"],
528
+ "decision_plan_id": plan.get("decision_plan_id")}))
529
+ sid = _sim_id(sim)
530
+ if not sid:
531
+ _die(f"no simulation id in simulate() response (keys: {list(sim)[:8]})")
532
+ if args.open_pr:
533
+ res = _dump(c.apply_repository(rid, {
534
+ "mode": "remote_pr", "write_permission": True,
535
+ "decision_plan_id": plan.get("decision_plan_id"), "simulation_id": sid,
536
+ **({"base_branch": args.base_branch} if args.base_branch else {}),
537
+ "pull_request_title": args.pr_title or f"codna: fix {(ra.get('root_cause') or 'bug')[:60]}",
538
+ "pull_request_body": args.pr_body or _pr_body(issue, ra, plan),
539
+ }))
540
+ url = res.get("pull_request_url")
541
+ print(f"\n✓ opened pull request: {url}" if url
542
+ else f" applied (no PR url): {res.get('status', res)}")
543
+ else:
544
+ res = _dump(c.apply_repository(rid, {
545
+ "mode": "local_branch", "write_permission": True,
546
+ "decision_plan_id": plan.get("decision_plan_id"), "simulation_id": sid}))
547
+ print(f" applied : branch {res.get('branch_name')} "
548
+ f"@ {res.get('local_checkout_path') or res.get('commit_sha')}")
549
+ except Exception as exc: # noqa: BLE001
550
+ raise CodnaError(
551
+ f"apply failed: {format_cli_error(exc)}"
552
+ + (f" (patch ref: {pref})" if pref else "")
553
+ ) from exc
554
+
555
+
556
+ def cmd_secure(args) -> None:
557
+ """Ingest a scanner's SARIF, prove reachability via the engine, and report which findings
558
+ are exploitable/reachable and autofix-eligible (Tier-1: read-only, 0 LLM tokens). With
559
+ --fix/--open-pr, runs the sandboxed worker + PR writer to remediate eligible findings."""
560
+ from .engine import EngineAdapter, http_post_factory
561
+ from .policy import Policy
562
+ from .sarif import ingest_sarif
563
+
564
+ if not args.from_sarif:
565
+ _die("`codna secure` needs --from-sarif <results.sarif>.")
566
+ if args.open_pr and not args.verification:
567
+ _die("--open-pr needs --verification <codna-security.yaml> (pinned scanner + build/test commands).")
568
+ if args.fix and args.engine != "local" and not args.verification:
569
+ _die("--fix needs --verification <codna-security.yaml> (scanner + build/test commands); "
570
+ "or use --engine local for a scanner-less local fix.")
571
+
572
+ policy = Policy()
573
+ config_digest = None
574
+ manifest = None
575
+ if args.verification:
576
+ from .manifest import load_manifest, ManifestError
577
+ manifest = load_manifest(args.verification)
578
+ policy, config_digest = manifest.policy, manifest.scanner.configuration_digest
579
+ if args.open_pr:
580
+ try:
581
+ manifest.require_resolved_for_pr()
582
+ except ManifestError as exc:
583
+ _die(str(exc))
584
+
585
+ ingest = ingest_sarif(args.from_sarif)
586
+ if not ingest.provenance_valid:
587
+ _die("SARIF provenance incomplete: " + "; ".join(ingest.provenance_errors))
588
+
589
+ rid = snap = url = key = None
590
+ if args.engine == "local":
591
+ # Bounded, self-hostable reference engine — never claims 'exploitable'.
592
+ from .refengine import LocalReferenceEngine
593
+ engine = LocalReferenceEngine()
594
+ else:
595
+ c = _client()
596
+ print(f"codna: understanding {args.repo} for security analysis …")
597
+ rid, snap = _register(c, args.repo, args.ref)
598
+ url, key = _engine_url_key()
599
+ model_pack = os.environ.get("CODNA_MODEL_PACK_DIGEST", "sha256:" + "0" * 64)
600
+ engine = EngineAdapter(
601
+ http_post_factory(url, key),
602
+ repository_id=rid, snapshot_id=snap["snapshot_id"],
603
+ policy_digest=policy.digest, model_pack_digest=model_pack,
604
+ configuration_digest=config_digest,
605
+ )
606
+
607
+ from .secure import classify_only
608
+ report = classify_only(ingest, engine=engine, policy=policy)
609
+ print(f"\n✓ analyzed {len(report.rows)} finding(s) from {args.from_sarif}")
610
+ for r in report.rows:
611
+ mark = "→" if r.eligible else "·"
612
+ note = "autofix-eligible" if r.eligible else r.reason
613
+ print(f" {mark} [{r.classification}] {r.rule_id} ({r.finding_kind}) {note}")
614
+ counts = ", ".join(f"{k}={v}" for k, v in sorted(report.counts().items()))
615
+ print(f" summary: {counts} · autofix-eligible: {report.eligible}")
616
+
617
+ if not (args.open_pr or args.fix):
618
+ return
619
+ if args.engine == "local":
620
+ # Self-hosted detect→fix→verify→close via the agentic Cline SDK; report-only.
621
+ if args.open_pr:
622
+ _die("--open-pr needs the privilege-separated writer + a scoped token; "
623
+ "`--engine local --fix` is report-only (it proves the fix but opens no PR).")
624
+ _run_local_fix(args, ingest=ingest, engine=engine, policy=policy, manifest=manifest)
625
+ else:
626
+ _run_remediation(args, ingest=ingest, rid=rid, snapshot_id=snap["snapshot_id"],
627
+ url=url, key=key, policy=policy, manifest=manifest)
628
+
629
+
630
+ def _repo_slug(repo_dir: str, override: str | None) -> str:
631
+ if override:
632
+ return override
633
+ import re
634
+ import subprocess
635
+ out = subprocess.run(["git", "-C", repo_dir, "remote", "get-url", "origin"],
636
+ capture_output=True, text=True).stdout.strip()
637
+ m = re.search(r"github\.com[:/]([^/]+/[^/.]+)", out)
638
+ if not m:
639
+ _die("could not derive owner/repo from the git remote; pass --repo-slug owner/repo.")
640
+ return m.group(1)
641
+
642
+
643
+ class _NoWriter:
644
+ """Report-only writer for `--fix` (no PR): local tree, never opens anything."""
645
+
646
+ def base_unchanged(self, ingest) -> bool:
647
+ return True
648
+
649
+ def open_draft_pr(self, finding, patch, attestation): # pragma: no cover - never called
650
+ raise RuntimeError("report-only mode does not open PRs")
651
+
652
+
653
+ def _run_local_fix(args, *, ingest, engine, policy, manifest) -> None:
654
+ """`--engine local --fix`: detect (refengine) → fix (Cline SDK) → verify (manifest
655
+ build/tests) → re-prove closure (refengine). Report-only; opens no PR."""
656
+ import os
657
+
658
+ from .localfix import run_local_fix
659
+ from .patchgen import ClinePatchGenerator
660
+ from .sarif import validate_commit_binding
661
+
662
+ repo_dir = os.path.abspath(os.path.expanduser(args.repo))
663
+ if not os.path.isdir(repo_dir):
664
+ _die("--fix needs a local repo checkout (pass a local path, not a URL).")
665
+ commit = validate_commit_binding(ingest)
666
+ test_cmds = (manifest.build + manifest.tests) if manifest else []
667
+ model = os.environ.get("CODNA_FIX_MODEL")
668
+
669
+ print("\ncodna: remediating eligible findings with the agentic Cline SDK (local engine) …")
670
+ report = run_local_fix(
671
+ ingest, engine=engine, patch_generator=ClinePatchGenerator(model=model),
672
+ repo_dir=repo_dir, commit=commit, policy=policy, test_cmds=test_cmds,
673
+ )
674
+
675
+ print(f"\n✓ local fix: {report.eligible} eligible finding(s) processed")
676
+ for o in report.outcomes:
677
+ if not o.eligible:
678
+ continue
679
+ if o.remediated:
680
+ tag = ("tests pass" if o.tests_passed else
681
+ "no tests configured" if o.tests_passed is None else "")
682
+ status = f"REMEDIATED — closure={o.closure}" + (f", {tag}" if tag else "")
683
+ elif not o.integrity_ok:
684
+ status = f"blocked: patch integrity ({o.integrity_reason})"
685
+ elif o.tests_passed is False:
686
+ status = f"blocked: tests failed (closure={o.closure})"
687
+ else:
688
+ status = f"blocked: obligation not closed (closure={o.closure})"
689
+ print(f" [{o.classification}] {o.rule_id} {status}")
690
+ print(f" remediated: {len(report.remediated)}/{report.eligible}")
691
+
692
+
693
+ def _run_remediation(args, *, ingest, rid, snapshot_id, url, key, policy, manifest) -> None:
694
+ import os
695
+
696
+ from .engine import EngineAdapter, http_post_factory
697
+ from .evidence import HmacSigner
698
+ from .patchgen import EnginePatchGenerator
699
+ from .sarif import validate_commit_binding
700
+ from .secure import run_secure
701
+ from .worker import LocalWorker
702
+ from .writer import GitHubWriter, gh_head_resolver_factory, git_push_create_pr_factory
703
+
704
+ repo_dir = os.path.abspath(os.path.expanduser(args.repo))
705
+ if not os.path.isdir(repo_dir):
706
+ _die("remediation needs a local repo checkout (pass a local path, not a URL).")
707
+ commit = validate_commit_binding(ingest)
708
+ post = http_post_factory(url, key)
709
+ signer = HmacSigner((os.environ.get("CODNA_ATTESTATION_KEY") or "").encode() or os.urandom(32),
710
+ key_id="codna-worker")
711
+ worker = LocalWorker(
712
+ repo_dir=repo_dir, commit=commit, manifest=manifest, signer=signer,
713
+ patch_generator=EnginePatchGenerator(post, repository_id=rid, snapshot_id=snapshot_id),
714
+ base_env=dict(os.environ),
715
+ )
716
+ engine = EngineAdapter(post, repository_id=rid, snapshot_id=snapshot_id,
717
+ policy_digest=policy.digest,
718
+ model_pack_digest=os.environ.get("CODNA_MODEL_PACK_DIGEST", "sha256:" + "0" * 64),
719
+ configuration_digest=manifest.scanner.configuration_digest)
720
+ if args.open_pr:
721
+ gh = args.github_token or os.environ.get("CODNA_GITHUB_TOKEN") or os.environ.get("GITHUB_TOKEN")
722
+ if not gh:
723
+ _die("--open-pr needs a write token: --github-token or $GITHUB_TOKEN.")
724
+ slug = _repo_slug(repo_dir, getattr(args, "repo_slug", None))
725
+ writer = GitHubWriter(trusted_signers={signer.key_id: signer},
726
+ create_pr=git_push_create_pr_factory(repo_dir, slug, gh),
727
+ head_resolver=gh_head_resolver_factory(slug, gh),
728
+ base_branch=args.base_branch or "main")
729
+ else:
730
+ writer = _NoWriter()
731
+
732
+ try:
733
+ report = run_secure(ingest, engine=engine, worker=worker, writer=writer,
734
+ policy=policy, open_pr=args.open_pr)
735
+ finally:
736
+ worker.close()
737
+
738
+ print(f"\n✓ remediation: {report.eligible} eligible finding(s) processed")
739
+ for d in report.decisions:
740
+ if d.gate is None:
741
+ continue
742
+ if d.opened:
743
+ status = f"opened {d.pr_url}"
744
+ elif d.gate.should_open_pr:
745
+ status = "would open (report-only)"
746
+ else:
747
+ status = "blocked: " + ",".join(d.gate.failed)
748
+ print(f" [{d.classification.value}] {d.canonical_id[:20]}… {status}")
749
+
750
+
751
+ def cmd_secure_open_pr(args) -> None:
752
+ """Writer domain: verify a worker's signed evidence bundle and open the draft PR. Runs no
753
+ repository code. Used by the two-job Action so the write token lives only in this step."""
754
+ import os
755
+
756
+ from .evidence import HmacSigner, read_evidence
757
+ from .findings import NormalizedFinding
758
+ from .secure import Patch
759
+ from .writer import GitHubWriter, gh_create_pr_factory, gh_head_resolver_factory
760
+
761
+ att, diff, desc = read_evidence(args.evidence)
762
+ if not desc:
763
+ _die("evidence is missing finding.json (cannot derive the branch).")
764
+ key_bytes = (os.environ.get("CODNA_ATTESTATION_KEY") or "").encode()
765
+ if not key_bytes:
766
+ _die("set CODNA_ATTESTATION_KEY (shared with the worker) to verify the attestation.")
767
+ gh = args.github_token or os.environ.get("GITHUB_TOKEN")
768
+ if not gh:
769
+ _die("secure-open-pr needs a write token: --github-token or $GITHUB_TOKEN.")
770
+ if not args.repo_slug:
771
+ _die("secure-open-pr needs --repo-slug owner/repo.")
772
+
773
+ signer = HmacSigner(key_bytes, key_id=att.signer_id)
774
+ finding = NormalizedFinding.minimal(canonical_id=desc["canonical_id"], rule_id=desc["rule_id"],
775
+ finding_kind=desc["finding_kind"])
776
+ writer = GitHubWriter(trusted_signers={signer.key_id: signer},
777
+ create_pr=gh_create_pr_factory(args.repo_slug, gh),
778
+ head_resolver=gh_head_resolver_factory(args.repo_slug, gh),
779
+ base_branch=args.base_branch or "main")
780
+ try:
781
+ url = writer.open_draft_pr(finding, Patch(att.payload["patch_digest"], diff=diff), att)
782
+ except Exception as exc: # noqa: BLE001
783
+ _die(f"writer refused to open the PR: {exc}")
784
+ print(f"✓ opened draft PR: {url}")
785
+
786
+
787
+ def cmd_mcp(args) -> None:
788
+ from .mcp_server import main as mcp_main
789
+ mcp_main()
790
+
791
+
792
+ def cmd_doctor(args) -> int:
793
+ keys = _runtime_keys()
794
+ try:
795
+ start_stack = bool(getattr(args, "start_stack", False))
796
+ stop_stack = bool(getattr(args, "stop_stack", False))
797
+ if start_stack and stop_stack:
798
+ _die("--start-stack and --stop-stack are mutually exclusive")
799
+ if stop_stack:
800
+ payload = stop_agent_core_runtime(keys=keys)
801
+ payload["mojo_workers"] = _doctor_mojo_worker_diagnostics(keys)
802
+ print(json.dumps(payload, indent=2))
803
+ return 0
804
+ if start_stack:
805
+ endpoint = ensure_agent_core_running(keys=keys)
806
+ payload = inspect_agent_core_runtime(keys=keys)
807
+ payload["started"] = {
808
+ "url": endpoint.url,
809
+ "port": endpoint.port,
810
+ "runtime_id": endpoint.runtime_id,
811
+ "pid": endpoint.pid,
812
+ }
813
+ else:
814
+ payload = inspect_agent_core_runtime(keys=keys)
815
+ except LocalRuntimeError as exc:
816
+ print(json.dumps(exc.to_dict(), indent=2))
817
+ return 1
818
+ payload["mojo_workers"] = _doctor_mojo_worker_diagnostics(keys)
819
+ print(json.dumps(payload, indent=2))
820
+ return 0
821
+
822
+
823
+ def _doctor_mojo_worker_diagnostics(keys) -> dict[str, object]:
824
+ try:
825
+ config = resolve_runtime_config(keys=keys)
826
+ except RuntimeConfigError as exc:
827
+ owned_local = {
828
+ "status": "unavailable",
829
+ "owned_by_current_runtime": True,
830
+ "reason": str(exc),
831
+ "error_code": exc.code,
832
+ "details": exc.details,
833
+ }
834
+ else:
835
+ return mojo_worker_diagnostics(config)
836
+ return {
837
+ "owned_local": owned_local,
838
+ "legacy_global": legacy_global_mojo_worker_diagnostics(),
839
+ }
840
+
841
+
842
+ def build_parser() -> argparse.ArgumentParser:
843
+ p = argparse.ArgumentParser(prog="codna", description="Codna — understand, fix & secure your repo.")
844
+ p.add_argument("--version", action="version", version=f"codna {__version__}")
845
+ sub = p.add_subparsers(dest="cmd")
846
+
847
+ pt = sub.add_parser("triage", help="Understand a repo + locate relevant code (fast, deterministic).")
848
+ pt.add_argument("repo", nargs="?", default=".", help="local path or git URL (default: current dir)")
849
+ pt.add_argument("--ref", help="branch/tag/commit")
850
+ pt.add_argument("--issue", help="optional: what you're looking for")
851
+ pt.set_defaults(func=cmd_triage)
852
+
853
+ pf = sub.add_parser("fix", help="Find and fix a bug in a repo.")
854
+ pf.add_argument("repo", nargs="?", default=".", help="local path or git URL (default: current dir)")
855
+ pf.add_argument("--issue", required=False, help="what's broken (e.g. the failing test)")
856
+ pf.add_argument("--failing-test", action="append", help="failing test id (repeatable)")
857
+ pf.add_argument("--from-junit", help="read failing tests from a JUnit/pytest XML report")
858
+ pf.add_argument("--ref", help="branch/tag/commit")
859
+ pf.add_argument("--model", default="repository.verified_agentic_v1",
860
+ help="planner model (default: the codna agent planner)")
861
+ pf.add_argument("--apply", action="store_true", help="apply the patch to a local branch")
862
+ pf.add_argument("--open-pr", dest="open_pr", action="store_true",
863
+ help="push a branch and open a pull request (git URL + write token)")
864
+ pf.add_argument("--github-token", help="write token for --open-pr (or env GITHUB_TOKEN)")
865
+ pf.add_argument("--base-branch", help="PR base branch (default: repo default)")
866
+ pf.add_argument("--pr-title", help="pull request title")
867
+ pf.add_argument("--pr-body", help="pull request body")
868
+ pf.set_defaults(func=cmd_fix)
869
+
870
+ pd = sub.add_parser("doctor", help="Inspect the owned local Codna runtime and optionally start agent-core.")
871
+ pd.add_argument("--start-stack", action="store_true", help="Ensure the fixed local agent-core runtime is running.")
872
+ pd.add_argument("--stop-stack", action="store_true", help="Stop the fixed local agent-core runtime.")
873
+ pd.set_defaults(func=cmd_doctor)
874
+
875
+ ps = sub.add_parser("secure", help="Prove which scanner findings are reachable (ingest SARIF, 0 LLM tokens).")
876
+ ps.add_argument("repo", nargs="?", default=".", help="local path or git URL (default: current dir)")
877
+ ps.add_argument("--from-sarif", dest="from_sarif", required=True,
878
+ help="path to the scanner's SARIF output (CodeQL/Semgrep/Snyk/Trivy)")
879
+ ps.add_argument("--ref", help="branch/tag/commit")
880
+ ps.add_argument("--engine", choices=["remote", "local"], default="remote",
881
+ help="reachability engine: 'remote' (decision-engine) or 'local' (bounded self-host reference)")
882
+ ps.add_argument("--verification", help="codna-security.yaml manifest (required for --open-pr)")
883
+ ps.add_argument("--open-pr", dest="open_pr", action="store_true",
884
+ help="open a fix PR per reachable finding (requires a resolved manifest)")
885
+ ps.add_argument("--fix", action="store_true", help="remediate eligible findings (report-only, no PR)")
886
+ ps.add_argument("--github-token", help="write token for --open-pr (or env GITHUB_TOKEN)")
887
+ ps.add_argument("--base-branch", help="PR base branch (default: repo default)")
888
+ ps.add_argument("--repo-slug", dest="repo_slug", help="owner/repo for --open-pr (else derived from the git remote)")
889
+ ps.set_defaults(func=cmd_secure)
890
+
891
+ po = sub.add_parser("secure-open-pr", help="Writer domain: verify a signed evidence bundle and open the draft PR.")
892
+ po.add_argument("--evidence", required=True, help="evidence dir (attestation.json + patch.diff + finding.json)")
893
+ po.add_argument("--repo-slug", dest="repo_slug", required=True, help="owner/repo")
894
+ po.add_argument("--github-token", help="write token (or env GITHUB_TOKEN)")
895
+ po.add_argument("--base-branch", help="PR base branch (default: main)")
896
+ po.set_defaults(func=cmd_secure_open_pr)
897
+
898
+ pm = sub.add_parser("mcp", help="Run codna as an MCP server (Cursor / Claude Desktop).")
899
+ pm.set_defaults(func=cmd_mcp)
900
+ return p
901
+
902
+
903
+ def main(argv=None) -> int:
904
+ p = build_parser()
905
+ args = p.parse_args(argv)
906
+ if not getattr(args, "func", None):
907
+ p.print_help()
908
+ return 0
909
+ try:
910
+ result = args.func(args)
911
+ except Exception as exc: # noqa: BLE001
912
+ payload = _structured_error(exc)
913
+ if payload is None:
914
+ raise
915
+ print(json.dumps(payload, indent=2), file=sys.stderr)
916
+ return 1
917
+ return int(result) if isinstance(result, int) else 0
918
+
919
+
920
+ if __name__ == "__main__":
921
+ sys.exit(main())