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/memory.py ADDED
@@ -0,0 +1,885 @@
1
+ """Codna's local, in-process code memory — a thin consumer seam over Telys.
2
+
3
+ Telys is an OPTIONAL dependency: the public SDK distribution is ``telys`` and the on-device runtime
4
+ distribution is ``telys-runtime`` (import package ``memengine``). Install it with
5
+ ``pip install 'codna[memory]'``. Codna resolves the native kernel from explicit ``$TELYS_KERNEL`` /
6
+ ``$AME_KERNEL``, a packaged ``codna/_telys_runtime`` artifact, ``$CODNA_TELYS_INSTALL_ROOT``,
7
+ ``build/local-telys`` in a source checkout, or a verified ``telys runtime install``. Core codna never
8
+ imports it — every telys import here is lazy, so ``from codna.memory import CodeMemory`` works without
9
+ the extra and only fails (with a friendly message) when you actually use it.
10
+
11
+ OEM license handling is explicit and secret-safe: Codna reads ``CODNA_TELYS_LICENSE_JWT`` or
12
+ ``CODNA_TELYS_LICENSE_PATH`` when configured, verifies it offline through Telys, and stores only metadata.
13
+ Set ``CODNA_TELYS_LICENSE_REQUIRED=1`` in production channels that must fail closed without the license.
14
+
15
+ The embedder is resolved in :func:`_embedder`: when an engine URL + API key are configured, recall uses
16
+ the **API-key-gated engine** ``/v1/embeddings`` for REAL semantic vectors (the model auto-tracks the LLM
17
+ used to fix the code — ``ALGENTA_AGENT_PROVIDER`` — overridable via ``CODNA_MEMORY_EMBED_MODEL``). With no
18
+ engine/key (or ``CODNA_MEMORY_EMBED=local``) it falls back to the in-process ``AlgentaMultigramEmbedder``
19
+ stand-in (384-d unigram+bigram+trigram fusion, lexical, zero network — the MC-validated upgrade over the
20
+ old bigram default). Switching embedders changes the ``space_id`` → re-index required.
21
+
22
+ Precision rerank (ON by default): the top-k pool is reordered by a lexical-heavy BLEND of the lexical
23
+ recall score and an on-device WordLlama semantic score (``alpha*lexical + (1-alpha)*wordllama``, alpha=0.7
24
+ — the best-measured config). Tune/disable via ``CODNA_MEMORY_RERANK`` (``blend`` default | ``wordllama`` |
25
+ ``lexical``/``off``) and ``CODNA_MEMORY_RERANK_ALPHA``. WordLlama ships in the ``[memory]`` extra; if it's
26
+ somehow absent the blend falls back to lexical (never hard-fails).
27
+ """
28
+ from __future__ import annotations
29
+
30
+ import hashlib
31
+ import json
32
+ import os
33
+ from pathlib import Path
34
+ import platform
35
+ import re
36
+ import shutil
37
+ import subprocess
38
+ import sys
39
+ import time
40
+
41
+ from .codeunits import FILTER_COLUMNS, UnsupportedLanguageError, extract_repo, resolve_languages
42
+
43
+ COLLECTION = "repo_symbols"
44
+ DEFAULT_DB_DIRNAME = ".codna-memory"
45
+ META_FILENAME = "codna_memory.json"
46
+ HASH_FILENAME = "content_hashes.json" # local id->content-hash manifest for incremental re-index (Merkle-style)
47
+ _LICENSE_ENV_NAMES = ("CODNA_TELYS_LICENSE_JWT", "TELYS_LICENSE_JWT")
48
+ _LICENSE_PATH_ENV_NAMES = ("CODNA_TELYS_LICENSE_PATH", "TELYS_LICENSE_PATH")
49
+ _LICENSE_REQUIRED_ENV = "CODNA_TELYS_LICENSE_REQUIRED"
50
+ _KERNEL_ENV_NAMES = ("TELYS_KERNEL", "AME_KERNEL")
51
+ _CODNA_KERNEL_ENV_NAME = "CODNA_TELYS_KERNEL"
52
+ _CODNA_INSTALL_ROOT_ENV_NAME = "CODNA_TELYS_INSTALL_ROOT"
53
+ _PACKAGE_RUNTIME_DIRNAME = "_telys_runtime"
54
+ _PACKAGE_RUNTIME_MANIFEST = "manifest.json"
55
+ _PACKAGE_RUNTIME_SCHEMA_VERSION = 1
56
+ _LAST_KERNEL_RESOLUTION: dict | None = None
57
+
58
+
59
+ class CodeMemoryError(Exception):
60
+ """A codna-memory error surfaced to the user (missing extra / kernel / usage).
61
+
62
+ Deliberately NOT named ``MemoryError`` — that is a Python builtin and shadowing it would make
63
+ ``except MemoryError`` ambiguous. The CLI maps this to ``_die`` and the MCP tool to an error string.
64
+ """
65
+
66
+
67
+ def _kernel_filename() -> str:
68
+ if sys.platform == "darwin":
69
+ return "libame_kernel.dylib"
70
+ if sys.platform.startswith("win"):
71
+ return "libame_kernel.dll"
72
+ return "libame_kernel.so"
73
+
74
+
75
+ def _source_checkout_root() -> Path:
76
+ return Path(__file__).resolve().parents[2]
77
+
78
+
79
+ def _runtime_platform_tag() -> str:
80
+ machine = platform.machine().lower() or "unknown"
81
+ if sys.platform == "darwin":
82
+ return f"macos-{machine}"
83
+ if sys.platform.startswith("linux"):
84
+ return f"linux-{machine}"
85
+ if sys.platform.startswith("win"):
86
+ return f"windows-{machine}"
87
+ return f"{sys.platform}-{machine}"
88
+
89
+
90
+ def _sha256_file(path: Path) -> str:
91
+ digest = hashlib.sha256()
92
+ with path.open("rb") as handle:
93
+ for chunk in iter(lambda: handle.read(1024 * 1024), b""):
94
+ digest.update(chunk)
95
+ return digest.hexdigest()
96
+
97
+
98
+ def _package_runtime_dir() -> Path:
99
+ return Path(__file__).resolve().parent / _PACKAGE_RUNTIME_DIRNAME
100
+
101
+
102
+ def _load_package_runtime_manifest(path: Path) -> dict:
103
+ try:
104
+ payload = json.loads(path.read_text(encoding="utf-8"))
105
+ except FileNotFoundError as exc:
106
+ raise CodeMemoryError(f"Codna packaged Telys runtime manifest is missing: {path}") from exc
107
+ except json.JSONDecodeError as exc:
108
+ raise CodeMemoryError(f"Codna packaged Telys runtime manifest is invalid JSON: {path}") from exc
109
+ if not isinstance(payload, dict):
110
+ raise CodeMemoryError(f"Codna packaged Telys runtime manifest must be a JSON object: {path}")
111
+ return payload
112
+
113
+
114
+ def _validate_package_runtime_manifest(runtime_dir: Path, manifest: dict) -> dict:
115
+ expected_artifact = _kernel_filename()
116
+ if manifest.get("schema_version") != _PACKAGE_RUNTIME_SCHEMA_VERSION:
117
+ raise CodeMemoryError("Codna packaged Telys runtime manifest has unsupported schema_version")
118
+ if manifest.get("artifact") != expected_artifact:
119
+ raise CodeMemoryError(
120
+ f"Codna packaged Telys runtime artifact must be {expected_artifact}; "
121
+ f"manifest has {manifest.get('artifact')!r}"
122
+ )
123
+ if manifest.get("platform") != _runtime_platform_tag():
124
+ raise CodeMemoryError(
125
+ f"Codna packaged Telys runtime platform mismatch: {manifest.get('platform')!r}"
126
+ )
127
+ for key in ("sha256", "size_bytes", "source_basename"):
128
+ if key not in manifest:
129
+ raise CodeMemoryError(f"Codna packaged Telys runtime manifest is missing {key}")
130
+ if "source_path" in manifest:
131
+ raise CodeMemoryError("Codna packaged Telys runtime manifest must not store source_path")
132
+ artifact = runtime_dir / expected_artifact
133
+ if not artifact.is_file():
134
+ raise CodeMemoryError(f"Codna packaged Telys runtime kernel is missing: {artifact}")
135
+ if artifact.stat().st_size != manifest["size_bytes"]:
136
+ raise CodeMemoryError("Codna packaged Telys runtime kernel size does not match manifest")
137
+ if _sha256_file(artifact) != manifest["sha256"]:
138
+ raise CodeMemoryError("Codna packaged Telys runtime kernel sha256 does not match manifest")
139
+ return {
140
+ "manifest_path": str((runtime_dir / _PACKAGE_RUNTIME_MANIFEST).resolve()),
141
+ "sha256": manifest["sha256"],
142
+ "size_bytes": manifest["size_bytes"],
143
+ "platform": manifest["platform"],
144
+ }
145
+
146
+
147
+ def _package_runtime_candidate() -> tuple[Path, dict] | None:
148
+ runtime_dir = _package_runtime_dir()
149
+ manifest_path = runtime_dir / _PACKAGE_RUNTIME_MANIFEST
150
+ kernels = sorted(runtime_dir.glob("libame_kernel.*")) if runtime_dir.is_dir() else []
151
+ if not manifest_path.exists() and not kernels:
152
+ return None
153
+ expected = _kernel_filename()
154
+ unexpected = [path.name for path in kernels if path.name != expected]
155
+ if unexpected:
156
+ raise CodeMemoryError(
157
+ "Codna packaged Telys runtime contains unsupported kernel artifact(s): "
158
+ + ", ".join(unexpected)
159
+ )
160
+ manifest = _load_package_runtime_manifest(manifest_path)
161
+ metadata = _validate_package_runtime_manifest(runtime_dir, manifest)
162
+ return runtime_dir / expected, metadata
163
+
164
+
165
+ def _candidate_codna_install_roots() -> list[tuple[str, Path]]:
166
+ roots: list[tuple[str, Path]] = []
167
+ raw = os.environ.get(_CODNA_INSTALL_ROOT_ENV_NAME)
168
+ if raw and raw.strip():
169
+ roots.append((f"env:{_CODNA_INSTALL_ROOT_ENV_NAME}", Path(raw).expanduser()))
170
+ roots.append(("codna:source-build", _source_checkout_root() / "build" / "local-telys"))
171
+ return roots
172
+
173
+
174
+ def _candidate_kernel_paths() -> list[tuple[str, Path]]:
175
+ filename = _kernel_filename()
176
+ candidates: list[tuple[str, Path]] = []
177
+ raw_kernel = os.environ.get(_CODNA_KERNEL_ENV_NAME)
178
+ if raw_kernel and raw_kernel.strip():
179
+ candidates.append((f"env:{_CODNA_KERNEL_ENV_NAME}", Path(raw_kernel).expanduser()))
180
+ packaged = _package_runtime_candidate()
181
+ if packaged is not None:
182
+ candidates.append(("codna:package-runtime", packaged[0]))
183
+ for source, root in _candidate_codna_install_roots():
184
+ candidates.append((source, root / "kernel" / filename))
185
+ try:
186
+ from telys.paths import AME_KERNEL_STEM, installed_lib_path
187
+
188
+ installed = installed_lib_path(AME_KERNEL_STEM)
189
+ if installed:
190
+ candidates.append(("telys:installed-runtime", Path(installed)))
191
+ except Exception: # noqa: BLE001 - kernel diagnostics must not mask the real runtime import error.
192
+ pass
193
+ return candidates
194
+
195
+
196
+ def _explicit_kernel_env() -> tuple[str, str] | None:
197
+ for name in _KERNEL_ENV_NAMES:
198
+ if name in os.environ:
199
+ return name, os.environ.get(name, "")
200
+ return None
201
+
202
+
203
+ def _resolve_telys_kernel(*, configure_env: bool) -> dict:
204
+ explicit = _explicit_kernel_env()
205
+ if explicit is not None:
206
+ name, raw = explicit
207
+ if not raw.strip():
208
+ raise CodeMemoryError(f"{name} is set but empty")
209
+ path = Path(raw).expanduser().resolve()
210
+ if not path.is_file():
211
+ raise CodeMemoryError(f"Telys kernel path from {name} does not exist or is not a file: {path}")
212
+ return {"found": True, "source": f"env:{name}", "path": str(path)}
213
+
214
+ checked: list[str] = []
215
+ for source, raw_path in _candidate_kernel_paths():
216
+ path = raw_path.expanduser().resolve()
217
+ checked.append(f"{source}:{path}")
218
+ if path.is_file():
219
+ if configure_env:
220
+ os.environ["TELYS_KERNEL"] = str(path)
221
+ result = {"found": True, "source": source, "path": str(path)}
222
+ if source == "codna:package-runtime":
223
+ _, metadata = _package_runtime_candidate() or (path, {})
224
+ result.update(metadata)
225
+ return result
226
+ return {"found": False, "source": "missing", "path": None, "checked": checked}
227
+
228
+
229
+ def _configure_telys_kernel_env() -> dict:
230
+ global _LAST_KERNEL_RESOLUTION
231
+ _LAST_KERNEL_RESOLUTION = _resolve_telys_kernel(configure_env=True)
232
+ return dict(_LAST_KERNEL_RESOLUTION)
233
+
234
+
235
+ def _current_kernel_resolution() -> dict:
236
+ if _LAST_KERNEL_RESOLUTION is not None:
237
+ return dict(_LAST_KERNEL_RESOLUTION)
238
+ return _resolve_telys_kernel(configure_env=False)
239
+
240
+
241
+ def _kernel_hint() -> str:
242
+ resolution = _current_kernel_resolution()
243
+ checked = resolution.get("checked") or []
244
+ checked_lines = "\n".join(f" - {item}" for item in checked[:6])
245
+ if checked_lines:
246
+ checked_lines = "\nCodna checked:\n" + checked_lines
247
+ return (
248
+ "the Telys kernel could not be loaded. Run `telys runtime install --file <bundle> "
249
+ "--license <license.jwt>`, set TELYS_KERNEL=/abs/path/to/libame_kernel, or set "
250
+ "CODNA_TELYS_INSTALL_ROOT to a Codna-managed install containing kernel/"
251
+ f"{_kernel_filename()}.{checked_lines}"
252
+ )
253
+
254
+
255
+ def _require_telys():
256
+ """Lazily import the Telys surface. Raises CodeMemoryError with an install hint if absent."""
257
+ try:
258
+ from telys import Telys, scope_key
259
+ _configure_telys_kernel_env()
260
+ # Multigram fusion ([unigram|bigram|trigram], per-block L2): MC-validated to beat the plain bigram
261
+ # by ~+12-17 pts recall@10 on NL->code and to tie a 16 MB on-device semantic model on recall, at
262
+ # zero model cost. The local lexical default (no engine key) uses it.
263
+ from telys.embedding import AlgentaMultigramEmbedder as _LocalEmbedder
264
+ except ImportError as exc:
265
+ raise CodeMemoryError(
266
+ "code memory needs the optional Telys engine — install it with: pip install 'codna[memory]'"
267
+ ) from exc
268
+ return Telys, scope_key, _LocalEmbedder
269
+
270
+
271
+ def _truthy_env(name: str) -> bool:
272
+ return (os.environ.get(name) or "").strip().lower() in {"1", "true", "yes", "on"}
273
+
274
+
275
+ def _configured_license_token() -> tuple[str | None, str | None]:
276
+ for name in _LICENSE_ENV_NAMES:
277
+ raw = os.environ.get(name)
278
+ if raw is None:
279
+ continue
280
+ token = raw.strip()
281
+ if not token:
282
+ raise CodeMemoryError(f"{name} is set but empty")
283
+ return token, f"env:{name}"
284
+
285
+ for name in _LICENSE_PATH_ENV_NAMES:
286
+ raw = os.environ.get(name)
287
+ if raw is None:
288
+ continue
289
+ if not raw.strip():
290
+ raise CodeMemoryError(f"{name} is set but empty")
291
+ path = os.path.abspath(os.path.expanduser(raw.strip()))
292
+ try:
293
+ with open(path, encoding="utf-8") as fh:
294
+ token = fh.read().strip()
295
+ except OSError as exc:
296
+ raise CodeMemoryError(f"Telys license path from {name} is unreadable: {path}") from exc
297
+ if not token:
298
+ raise CodeMemoryError(f"Telys license path from {name} is empty: {path}")
299
+ return token, f"path:{name}"
300
+
301
+ return None, None
302
+
303
+
304
+ def _load_telys_license_metadata() -> dict:
305
+ """Verify the configured Telys license offline and return safe metadata only.
306
+
307
+ This deliberately does not return the JWT. Callers can surface the metadata in status/diagnostics without
308
+ risking token disclosure.
309
+ """
310
+ required = _truthy_env(_LICENSE_REQUIRED_ENV)
311
+ token, source = _configured_license_token()
312
+ if token is None:
313
+ if required:
314
+ raise CodeMemoryError(
315
+ "Telys license is required but not configured; set CODNA_TELYS_LICENSE_JWT "
316
+ "or CODNA_TELYS_LICENSE_PATH"
317
+ )
318
+ return {"configured": False, "required": False}
319
+ try:
320
+ from telys import verify as license_verify
321
+ except ImportError as exc:
322
+ raise CodeMemoryError(
323
+ "Telys license is configured but the Telys verifier is unavailable; install codna[memory]"
324
+ ) from exc
325
+ try:
326
+ claims = license_verify.verify_license(token, now=int(time.time()))
327
+ except Exception as exc: # noqa: BLE001
328
+ raise CodeMemoryError(f"Telys license from {source} is invalid: {type(exc).__name__}") from exc
329
+
330
+ product = (claims.get("products") or {}).get("telys") or {}
331
+ if not product:
332
+ raise CodeMemoryError(f"Telys license from {source} does not include the telys product")
333
+ return {
334
+ "configured": True,
335
+ "required": required,
336
+ "source": source,
337
+ "license_id": claims.get("license_id"),
338
+ "customer": claims.get("customer"),
339
+ "org_id": claims.get("org_id"),
340
+ "deployment_class": claims.get("deployment_class"),
341
+ "tier": product.get("tier"),
342
+ "features": list(product.get("features") or []),
343
+ }
344
+
345
+
346
+ # Map the fix LLM provider → its registered embedding-model id. Chat models (claude/gpt) can't embed, so
347
+ # we use the SAME provider's embedding model. Anthropic ships no embeddings API → use OpenAI's (whose key
348
+ # is already configured for the gpt-5.4 fix path). Override per run with CODNA_MEMORY_EMBED_MODEL.
349
+ _PROVIDER_EMBED_MODEL = {
350
+ "anthropic": "codna.embed.openai",
351
+ "openai-native": "codna.embed.openai", "openai": "codna.embed.openai",
352
+ "gemini": "codna.embed.gemini", "google_genai": "codna.embed.gemini",
353
+ }
354
+ _EMBED_DIM = {"codna.embed.openai": 1024, "codna.embed.gemini": 1536}
355
+
356
+
357
+ def _engine_embed_config():
358
+ """Resolve (engine_url, api_key, model_id, dimension) for the API-key-gated remote code embedder,
359
+ or ``None`` to fall back to the local stand-in. The model auto-tracks the fix provider
360
+ (``ALGENTA_AGENT_PROVIDER``); override with ``CODNA_MEMORY_EMBED_MODEL`` / ``_DIM``. Force the
361
+ in-process stand-in with ``CODNA_MEMORY_EMBED=local``; require the remote with ``=remote``."""
362
+ if (os.environ.get("CODNA_MEMORY_EMBED") or "").lower() == "local":
363
+ return None
364
+ url = os.environ.get("CODNA_ENGINE_URL") or os.environ.get("ALGENTA_ENGINE_URL")
365
+ key = (os.environ.get("CODNA_API_KEY") or os.environ.get("ALGENTA_API_KEY")
366
+ or os.environ.get("ALGENTA_ENGINE_API_KEY"))
367
+ if not (url and key):
368
+ return None
369
+ model = os.environ.get("CODNA_MEMORY_EMBED_MODEL")
370
+ if not model:
371
+ prov = (os.environ.get("ALGENTA_AGENT_PROVIDER") or "anthropic").lower()
372
+ model = _PROVIDER_EMBED_MODEL.get(prov, "codna.embed.openai")
373
+ dim = int(os.environ.get("CODNA_MEMORY_EMBED_DIM") or _EMBED_DIM.get(model, 1024))
374
+ return url.rstrip("/"), key, model, dim
375
+
376
+
377
+ def _remote_embedder(url: str, key: str, model: str, dim: int):
378
+ """A ``CallableEmbedder`` backed by the engine's keyed ``/v1/embeddings`` — REAL semantic vectors
379
+ (the "get it from Telys/Algenta with the API key" path). L2-normalized so inner-product == cosine."""
380
+ import httpx
381
+ import numpy as np
382
+ from telys.embedding import CallableEmbedder, EmbeddingProfile
383
+
384
+ def _embed(texts):
385
+ out = []
386
+ for i in range(0, len(texts), 128): # bounded request bodies
387
+ chunk = list(texts[i:i + 128])
388
+ body = {"input": chunk, "model": model, "dimensions": dim}
389
+ # Resilient to TRANSIENT blips (connect/timeout, 429, 5xx): a momentary embedding-endpoint
390
+ # hiccup must NOT fail an otherwise-good recall/fix. Retry with backoff; only a persistent
391
+ # failure (or a real 4xx) propagates — so `--memory on` still fails loud when memory is truly
392
+ # broken, but survives a one-off network/engine stutter (the websockets soak case).
393
+ for attempt in range(4):
394
+ try:
395
+ r = httpx.post(f"{url}/v1/embeddings",
396
+ headers={"Authorization": f"Bearer {key}"}, json=body, timeout=120)
397
+ except httpx.TransportError:
398
+ if attempt == 3:
399
+ raise
400
+ time.sleep(0.5 * (2 ** attempt))
401
+ continue
402
+ if r.status_code in (429, 500, 502, 503, 504) and attempt < 3:
403
+ time.sleep(0.5 * (2 ** attempt))
404
+ continue
405
+ r.raise_for_status()
406
+ out.extend(item["embedding"] for item in sorted(r.json()["data"], key=lambda d: d["index"]))
407
+ break
408
+ v = np.asarray(out, dtype="float32")
409
+ n = np.linalg.norm(v, axis=1, keepdims=True)
410
+ return v / np.where(n == 0, 1.0, n)
411
+ return CallableEmbedder(
412
+ fn=_embed,
413
+ profile=EmbeddingProfile(provider="algenta-engine", model_id=model, model_version="1",
414
+ dimension=dim, normalization="l2", distance="ip", tokenizer_hash=model))
415
+
416
+
417
+ def _embedder():
418
+ """Resolve the code embedder. Prefer the API-key-gated engine embedder (real semantic recall,
419
+ auto-tracking the fix provider); fall back to the in-process multigram fusion stand-in (lexical,
420
+ on-device, no key) — the MC-validated upgrade over the old bigram default."""
421
+ cfg = _engine_embed_config()
422
+ if cfg is not None:
423
+ try:
424
+ return _remote_embedder(*cfg)
425
+ except Exception as exc: # noqa: BLE001 — telys import / httpx / engine down
426
+ if (os.environ.get("CODNA_MEMORY_EMBED") or "").lower() == "remote":
427
+ raise CodeMemoryError(f"remote embedder required (CODNA_MEMORY_EMBED=remote) "
428
+ f"but unavailable: {exc}") from exc
429
+ # else: silently fall through to the local stand-in below
430
+ _, _, LocalEmbedder = _require_telys()
431
+ try:
432
+ return LocalEmbedder() # AlgentaMultigramEmbedder: unigram+bigram+trigram fusion, zero network
433
+ except OSError as exc: # FileNotFoundError (kernel missing) / CDLL load failure
434
+ raise CodeMemoryError(_kernel_hint()) from exc
435
+
436
+
437
+ def rerank(query: str, candidates: list[tuple[str, float]]) -> list[tuple[str, float]]:
438
+ """Consumer-side rerank seam. Day-1: identity (keep Telys' partition-aware order + scores).
439
+ A real cross-encoder / Algenta reranker plugs in here later — no network on day 1."""
440
+ return candidates
441
+
442
+
443
+ # Query-aware soft rerank (lossless, recall-time policy). Tests stay FULLY indexed; when the issue is NOT
444
+ # test-oriented we softly DOWN-WEIGHT test symbols so source files surface. Monte-Carlo-validated over 900
445
+ # sampled queries: recall@10 0.638→0.741 (non-overlapping 95% CIs), MRR 0.324→0.414, no repo regressed —
446
+ # and test-oriented queries (failing test / assertion / fixture / flaky / junit …) are UNTOUCHED so bugs in
447
+ # test files stay findable. This is NOT exclusion: blind exclusion makes test-file bugs unfixable. Tune or
448
+ # disable with CODNA_MEMORY_TEST_DOWNWEIGHT (1.0 = off).
449
+ _TEST_QUERY_RE = re.compile(
450
+ r"\b(test|tests|assert|assertion|fixture|flaky|junit|pytest|unittest|mock|conftest|failing)\b", re.I)
451
+
452
+
453
+ def _query_is_test_oriented(query: str) -> bool:
454
+ return bool(_TEST_QUERY_RE.search(query or ""))
455
+
456
+
457
+ def _is_test_symbol(symbol_type: str | None, path: str | None) -> bool:
458
+ if symbol_type == "test":
459
+ return True
460
+ p = (path or "").replace("\\", "/").lower()
461
+ b = p.rsplit("/", 1)[-1]
462
+ return ("/tests/" in p or "/test/" in p or b.startswith("test_")
463
+ or b.endswith("_test.py") or b == "conftest.py")
464
+
465
+
466
+ def _soft_test_downweight(query: str, ids_scores: list, meta_by_id: dict) -> list:
467
+ """Re-sort (id, score) by a soft test penalty when the query isn't test-oriented; identity otherwise.
468
+ Operates over the full candidate set so a buried source symbol can surface into final-k."""
469
+ try:
470
+ factor = float(os.environ.get("CODNA_MEMORY_TEST_DOWNWEIGHT", "0.85"))
471
+ except ValueError:
472
+ factor = 0.85
473
+ if factor == 1.0 or _query_is_test_oriented(query):
474
+ return list(ids_scores)
475
+
476
+ def _adj(id_, sc):
477
+ m = meta_by_id.get(id_) or {}
478
+ return sc * factor if _is_test_symbol(m.get("symbol_type"), m.get("path")) else sc
479
+
480
+ return sorted(ids_scores, key=lambda t: -_adj(t[0], t[1]))
481
+
482
+
483
+ # Optional on-device semantic PRECISION reranker. The lexical multigram fusion does the cheap, fast first-pass
484
+ # recall; an ultra-light on-device model (WordLlama, 16 MB, CPU) re-scores only the top-k survivors to lift
485
+ # ranking precision (MRR). A benchmark put WordLlama's MRR at 0.48 vs fusion's 0.37 at equal recall@10. OFF by
486
+ # default; lossless (only reorders); enable with CODNA_MEMORY_RERANK=wordllama (CODNA_MEMORY_RERANK_K caps the
487
+ # pool, default 40). WordLlama is an OPTIONAL dependency — imported lazily, with a clear hint if missing.
488
+ _WL = []
489
+
490
+
491
+ def _wordllama():
492
+ if not _WL:
493
+ try:
494
+ from wordllama import WordLlama
495
+ except ImportError as exc:
496
+ raise CodeMemoryError(
497
+ "semantic reranking (CODNA_MEMORY_RERANK=wordllama) needs the optional WordLlama model — "
498
+ "install it with: pip install wordllama") from exc
499
+ _WL.append(WordLlama.load())
500
+ return _WL[0]
501
+
502
+
503
+ def _wl_cosine(wl, query: str, texts: list) -> "list":
504
+ """Cosine of each candidate text vs the query under WordLlama (L2-normalized embeddings)."""
505
+ import numpy as np
506
+ m = np.asarray(wl.embed([query] + list(texts)), np.float32)
507
+ n = np.linalg.norm(m, axis=1, keepdims=True)
508
+ n[n == 0] = 1.0
509
+ m = m / n
510
+ return list(m[1:] @ m[0])
511
+
512
+
513
+ def _semantic_rerank(query: str, cands: list, mem) -> list:
514
+ """DEFAULT precision rerank of the top-k pool: a lexical-heavy BLEND of the lexical recall score and an
515
+ on-device WordLlama semantic score — alpha*z(lexical) + (1-alpha)*z(wordllama), alpha=0.7. That blend was
516
+ the best-measured config (recall@10 0.775 vs 0.765 lexical-only / 0.665 WordLlama-only, 480-query CI study).
517
+
518
+ Modes via CODNA_MEMORY_RERANK: 'blend' (DEFAULT) | 'wordllama' (pure semantic) | 'lexical'/'off' (no rerank).
519
+ alpha via CODNA_MEMORY_RERANK_ALPHA (default 0.7). Lossless: only the top-`CODNA_MEMORY_RERANK_K` reorder.
520
+ GRACEFUL: if WordLlama isn't installed the default blend silently falls back to lexical (never hard-fails);
521
+ only an EXPLICIT CODNA_MEMORY_RERANK=wordllama surfaces the missing-dependency error."""
522
+ mode = (os.environ.get("CODNA_MEMORY_RERANK") or "blend").lower()
523
+ if mode in ("off", "none", "lexical") or not cands:
524
+ return cands
525
+ try:
526
+ k = int(os.environ.get("CODNA_MEMORY_RERANK_K", "40"))
527
+ except ValueError:
528
+ k = 40
529
+ head, tail = cands[:k], cands[k:]
530
+ id2text = mem._unit_texts()
531
+ texts = [id2text.get(i, "") for i, _ in head]
532
+ if not any(texts): # no recoverable text (e.g. repo moved) → leave order untouched
533
+ return cands
534
+ try:
535
+ wl = _wordllama()
536
+ except CodeMemoryError:
537
+ if mode in ("wordllama", "wl"): # explicitly requested -> surface the missing-dependency error
538
+ raise
539
+ return cands # default blend: WordLlama absent -> fall back to lexical
540
+ wls = _wl_cosine(wl, query, texts)
541
+ if mode in ("wordllama", "wl"): # pure semantic order
542
+ order = sorted(range(len(head)), key=lambda j: -float(wls[j]))
543
+ return [(head[j][0], float(wls[j])) for j in order] + tail
544
+ import numpy as np # blend (default): alpha*z(lexical) + (1-alpha)*z(wordllama)
545
+ try:
546
+ alpha = min(max(float(os.environ.get("CODNA_MEMORY_RERANK_ALPHA", "0.7")), 0.0), 1.0)
547
+ except ValueError:
548
+ alpha = 0.7
549
+
550
+ def _z(x):
551
+ sd = x.std()
552
+ return (x - x.mean()) / sd if sd > 1e-9 else x * 0.0
553
+
554
+ lex = np.array([s for _, s in head], dtype=float)
555
+ blend = alpha * _z(lex) + (1.0 - alpha) * _z(np.array(wls, dtype=float))
556
+ order = list(np.argsort(-blend))
557
+ return [(head[j][0], float(blend[j])) for j in order] + tail
558
+
559
+
560
+ def repo_id_for(repo_path: str) -> str:
561
+ """Stable repo identity for partitioning: ``github.com/owner/repo`` if there's an origin remote,
562
+ else the absolute path (so memory works on any local checkout, not only GitHub repos)."""
563
+ try:
564
+ out = subprocess.run(["git", "-C", repo_path, "remote", "get-url", "origin"],
565
+ capture_output=True, text=True, timeout=5)
566
+ if out.returncode == 0:
567
+ m = re.search(r"github\.com[:/]([^/]+/[^/.]+)", out.stdout)
568
+ if m:
569
+ return f"github.com/{m.group(1)}"
570
+ except (OSError, subprocess.SubprocessError):
571
+ pass
572
+ return os.path.abspath(os.path.expanduser(repo_path))
573
+
574
+
575
+ def _git(repo_path: str, *args: str) -> str | None:
576
+ try:
577
+ out = subprocess.run(["git", "-C", repo_path, *args],
578
+ capture_output=True, text=True, timeout=5)
579
+ return out.stdout.strip() if out.returncode == 0 else None
580
+ except (OSError, subprocess.SubprocessError):
581
+ return None
582
+
583
+
584
+ def _provenance(unit_id: str) -> dict:
585
+ """Recover path + qualname from a stable unit id (``repo_id:relpath:qualname``)."""
586
+ parts = unit_id.split(":")
587
+ if len(parts) >= 3:
588
+ return {"path": parts[-2], "qualname": parts[-1]}
589
+ return {"path": None, "qualname": parts[-1] if parts else unit_id}
590
+
591
+
592
+ def _metadata_matches(metadata: dict, filters: dict[str, str]) -> bool:
593
+ return all(str(metadata.get(key) or "") == str(value) for key, value in filters.items())
594
+
595
+
596
+ class CodeMemory:
597
+ """In-process semantic code memory for one repository, backed by a Telys collection."""
598
+
599
+ def __init__(self, repo_path: str, db_path: str | None = None, *,
600
+ service: str | None = None, branch: str | None = None, tuner=None) -> None:
601
+ self.repo_path = os.path.abspath(os.path.expanduser(repo_path))
602
+ self.repo_id = repo_id_for(self.repo_path)
603
+ self.db_path = os.path.abspath(db_path) if db_path else os.path.join(self.repo_path, DEFAULT_DB_DIRNAME)
604
+ self.service = service
605
+ self.branch = branch
606
+ self._tuner = tuner
607
+ self._Telys, self._scope_key, _ = _require_telys()
608
+ self.license = _load_telys_license_metadata()
609
+ self.kernel = _current_kernel_resolution()
610
+ self._embedder = _embedder() # constructs (and validates) the kernel up-front
611
+ self._eng = self._Telys(self.db_path, embedding_providers={self._embedder.profile.model_id: self._embedder})
612
+ self._col = None
613
+
614
+ # ── collection lifecycle ──────────────────────────────────────────────────────────────────────
615
+ def _collection(self):
616
+ if self._col is None:
617
+ if COLLECTION in self._eng.collections():
618
+ self._col = self._eng.open_collection(COLLECTION, embedder=self._embedder)
619
+ else:
620
+ self._col = self._eng.create_collection(
621
+ COLLECTION, dim=self._embedder.profile.dimension, partition_by="scope_key",
622
+ embedder=self._embedder, filter_columns=FILTER_COLUMNS, tuner=self._tuner)
623
+ return self._col
624
+
625
+ def is_empty(self) -> bool:
626
+ if COLLECTION not in self._eng.collections():
627
+ return True
628
+ return (self._collection().stats().get("external_ids") or 0) == 0
629
+
630
+ def _scope_for(self, unit) -> str:
631
+ return self._scope_key(self.repo_id, self.service or unit.service or "", unit.language)
632
+
633
+ def _unit_texts(self, languages=None) -> dict:
634
+ """{unit_id: source_text} for this repo, cached. Used ONLY by the optional WordLlama reranker to get
635
+ candidate text at query time, so the index stores no extra text column.
636
+
637
+ Normally the cache is populated by ``index()`` (reusing its extraction, all indexed languages). If
638
+ recall runs on a fresh instance without a prior ``index()``, fall back to extracting the languages
639
+ last indexed (persisted intent) or all registered languages — never silently Python-only when the
640
+ repo is multi-language."""
641
+ cache = getattr(self, "_unit_text_cache", None)
642
+ if cache is None:
643
+ langs = languages or getattr(self, "_indexed_languages", None)
644
+ units, _ = extract_repo(self.repo_path, self.repo_id, languages=langs)
645
+ cache = {u.id: u.text for u in units}
646
+ self._unit_text_cache = cache
647
+ return cache
648
+
649
+ # ── index / recall / status / compact / reset ─────────────────────────────────────────────────
650
+ def index(self, *, languages: tuple[str, ...] | None = None, refresh: bool = True) -> dict:
651
+ """Extract the repo into structural units and upsert them per scope; delete vanished symbols.
652
+
653
+ The vanished-diff reads each scope's live ids back from Telys (`col.ids(where=scope)`) — Codna
654
+ keeps no side id map. The prune is SCOPE-LOCAL, so re-indexing one repo/scope never touches
655
+ another's rows in a shared collection.
656
+ """
657
+ try:
658
+ resolved_languages = resolve_languages(languages)
659
+ units, stats = extract_repo(self.repo_path, self.repo_id, languages=resolved_languages)
660
+ except UnsupportedLanguageError as exc:
661
+ raise CodeMemoryError(str(exc)) from exc
662
+ col = self._collection()
663
+ # Reuse this full extraction as the WordLlama reranker's candidate-text cache: multi-language
664
+ # (every indexed language, not just Python) AND no re-extraction at query time. Without this the
665
+ # reranker would only see Python text and score every non-Python candidate as an empty string.
666
+ self._indexed_languages = resolved_languages
667
+ self._unit_text_cache = {u.id: u.text for u in units}
668
+ commit = _git(self.repo_path, "rev-parse", "HEAD") or ""
669
+ branch = self.branch or _git(self.repo_path, "rev-parse", "--abbrev-ref", "HEAD") or ""
670
+
671
+ # Incremental re-index: skip embedding symbols whose content is unchanged since the last index.
672
+ # The per-symbol hash is salted by the embedder's space_id, so a model change invalidates every entry
673
+ # (a fresh embed). Manifest is local (no engine round-trip); delete it to force a full re-embed.
674
+ salt = self._embedder.profile.space_id()
675
+ def _uhash(u):
676
+ service_key = self.service or u.service or ""
677
+ return hashlib.sha256((salt + "\x1f" + service_key + "\x1f" + u.text).encode("utf-8")).hexdigest()[:16]
678
+ prev = self._load_hashes() if refresh else {}
679
+ new_hashes: dict[str, str] = {}
680
+
681
+ by_scope: dict[str, list] = {}
682
+ new_ids: dict[str, set] = {}
683
+ for u in units:
684
+ scope = self._scope_for(u)
685
+ by_scope.setdefault(scope, []).append(u)
686
+ new_ids.setdefault(scope, set()).add(u.id)
687
+
688
+ removed = 0
689
+ if refresh:
690
+ # The scopes this index owns ((repo_id, service) × the scopes written + the requested
691
+ # languages, so an emptied scope is still pruned). Read each scope's current live ids from
692
+ # Telys and delete the ones this index no longer produces.
693
+ owned = set(new_ids) | {self._scope_key(self.repo_id, self.service or "", lang)
694
+ for lang in resolved_languages}
695
+ for scope in owned:
696
+ vanished = sorted(set(col.ids(where={"scope_key": scope})) - new_ids.get(scope, set()))
697
+ if vanished:
698
+ col.delete(vanished)
699
+ removed += len(vanished)
700
+
701
+ written = unchanged = 0
702
+ for scope, group in by_scope.items():
703
+ changed = []
704
+ for u in group:
705
+ h = _uhash(u)
706
+ new_hashes[u.id] = h
707
+ if prev.get(u.id) == h: # unchanged content (same space) -> skip the embed/upsert
708
+ unchanged += 1
709
+ else:
710
+ changed.append(u)
711
+ if changed:
712
+ metadata = []
713
+ for u in changed:
714
+ item = u.metadata(self.repo_id, scope, commit_sha=commit, branch=branch)
715
+ item["service"] = self.service or u.service or ""
716
+ metadata.append(item)
717
+ col.upsert_texts([u.text for u in changed], [u.id for u in changed],
718
+ metadata)
719
+ written += len(changed)
720
+
721
+ col.compact()
722
+ col.save()
723
+ self._save_hashes(new_hashes)
724
+ self._write_meta(commit=commit, branch=branch)
725
+ return {"indexed": written, "unchanged": unchanged, "removed": removed, "scopes": len(by_scope),
726
+ "files": stats.files, "skipped": stats.skipped, "languages": list(resolved_languages)}
727
+
728
+ def _hash_path(self) -> str:
729
+ return os.path.join(self.db_path, HASH_FILENAME)
730
+
731
+ def _load_hashes(self) -> dict:
732
+ try:
733
+ with open(self._hash_path()) as f:
734
+ return json.load(f)
735
+ except (OSError, ValueError):
736
+ return {}
737
+
738
+ def _save_hashes(self, m: dict) -> None:
739
+ os.makedirs(self.db_path, exist_ok=True)
740
+ tmp = self._hash_path() + ".tmp"
741
+ with open(tmp, "w") as f:
742
+ json.dump(m, f)
743
+ os.replace(tmp, self._hash_path())
744
+
745
+ def current_commit(self) -> str:
746
+ return _git(self.repo_path, "rev-parse", "HEAD") or ""
747
+
748
+ def is_stale(self) -> bool:
749
+ """True when the repo HEAD moved since the last index, so recall would serve OLD symbols.
750
+ Conservative: only reports stale when BOTH commits are known and differ (a non-git repo or a
751
+ missing meta never forces a re-index)."""
752
+ indexed = (self._read_meta().get("commit_sha") or "")
753
+ cur = self.current_commit()
754
+ return bool(cur) and bool(indexed) and cur != indexed
755
+
756
+ def embedder_changed(self) -> bool:
757
+ """True when the active embedder's vector SPACE differs from the indexed one (different embedding
758
+ model / dim / normalization — e.g. the fix provider switched and auto-selected a new embed model).
759
+ Vectors across spaces are incompatible, so the index must be rebuilt, not reopened."""
760
+ prev = self._read_meta().get("space_id")
761
+ return bool(prev) and prev != self._embedder.profile.space_id()
762
+
763
+ def ensure_fresh(self, *, languages: tuple[str, ...] | None = None) -> dict | None:
764
+ """Keep recall honest before use. Rebuilds the index when the EMBEDDER changed (incompatible
765
+ vector space → must re-embed everything), else refreshes when the repo HEAD moved (add new,
766
+ re-embed changed, prune vanished). No-op (returns ``None``) when both are unchanged. This is what
767
+ makes memory robust across LLM/embedder switches — switching the fix LLM with a pinned embedder is
768
+ a no-op; switching the embedder transparently re-indexes instead of erroring on a space mismatch."""
769
+ if self.embedder_changed():
770
+ self.reset() # drop the incompatible-space index, then rebuild fresh
771
+ return self.index(languages=languages, refresh=True)
772
+ if self.is_stale():
773
+ return self.index(languages=languages, refresh=True)
774
+ return None
775
+
776
+ def recall(self, query: str, *, service: str | None = None, language: str | None = None,
777
+ path: str | None = None, top_k: int = 40, final_k: int = 8,
778
+ target_recall: float = 0.98) -> dict:
779
+ """Partition-aware retrieve -> consumer rerank -> final-k symbols with provenance + explain."""
780
+ col = self._collection()
781
+ active_service = service if service is not None else self.service
782
+ post_filters: dict[str, str] = {}
783
+ search_where: dict[str, str] | None = None
784
+ if language is not None:
785
+ search_where = {"scope_key": self._scope_key(self.repo_id, active_service or "", language)}
786
+ if path is not None:
787
+ post_filters["path"] = path
788
+ elif path is not None:
789
+ search_where = {"path": path}
790
+ if active_service is not None:
791
+ post_filters["service"] = active_service
792
+ elif active_service is not None:
793
+ search_where = {"service": active_service}
794
+ res = col.search_text(query, top_k=top_k, where=search_where, explain=True,
795
+ target_recall=target_recall, with_metadata=True)
796
+ md = res.get("metadata") or [{}] * len(res["ids"]) # provenance returned WITH the hit (Telys)
797
+ meta_by_id = dict(zip(res["ids"], md))
798
+ # Lossless query-aware soft rerank over the FULL candidate set, then the (future) rerank seam,
799
+ # then final-k — so a source symbol buried under tests can surface without dropping any coverage.
800
+ raw_cands = [
801
+ (unit_id, score)
802
+ for unit_id, score in zip(res["ids"], res["scores"])
803
+ if _metadata_matches(meta_by_id.get(unit_id) or {}, post_filters)
804
+ ]
805
+ cands = _soft_test_downweight(query, raw_cands, meta_by_id)
806
+ cands = _semantic_rerank(query, cands, self) # DEFAULT: lexical+WordLlama blend (alpha 0.7); falls back
807
+ ranked = rerank(query, cands)[:final_k] # to lexical if WordLlama absent. CODNA_MEMORY_RERANK to tune.
808
+ symbols = []
809
+ for i, s in ranked:
810
+ m = meta_by_id.get(i) or {}
811
+ symbols.append({"id": i, "score": s, "symbol_type": m.get("symbol_type"),
812
+ "path": m.get("path") or _provenance(i)["path"]})
813
+ return {"symbols": symbols, "explain": res.get("explain", {}),
814
+ "candidate_count": len(raw_cands), "final_k": len(symbols)}
815
+
816
+ def status(self) -> dict:
817
+ meta = self._read_meta()
818
+ if COLLECTION not in self._eng.collections():
819
+ return {"engine": "telys", "collection": COLLECTION, "indexed": False,
820
+ "db_path": self.db_path, "repo_id": self.repo_id, "license": self.license,
821
+ "kernel": self.kernel}
822
+ s = self._collection().stats()
823
+ return {
824
+ "engine": "telys",
825
+ "collection": COLLECTION,
826
+ "indexed": True,
827
+ "partition_key": s.get("key_name", "scope_key"),
828
+ "partitions": s.get("partitions"),
829
+ "documents": s.get("external_ids"),
830
+ "delta_rows": s.get("delta_rows"),
831
+ "embedding_space": s.get("embedding_space"),
832
+ "last_indexed_commit": meta.get("commit_sha"),
833
+ "last_indexed_at": meta.get("indexed_at"),
834
+ "fallback_rate": None, # no query log yet (Telys exports no metrics)
835
+ "db_path": self.db_path,
836
+ "repo_id": self.repo_id,
837
+ "license": self.license,
838
+ "kernel": self.kernel,
839
+ }
840
+
841
+ def compact(self) -> dict:
842
+ col = self._collection()
843
+ col.compact()
844
+ col.save()
845
+ return {"compacted": True, "documents": col.stats().get("external_ids")}
846
+
847
+ def reset(self) -> dict:
848
+ """Drop the local memory for this repo (collection + meta + incremental hash manifest). Safe no-op
849
+ if nothing is indexed.
850
+
851
+ The hash manifest MUST be cleared too: it drives the incremental re-index (#56), so a stale manifest
852
+ after dropping the collection makes the next index() treat every symbol as "unchanged" and skip
853
+ embedding it — leaving an empty collection (recall returns nothing). reset() must be a full reset."""
854
+ self._col = None
855
+ existed = os.path.isdir(os.path.join(self.db_path, COLLECTION))
856
+ shutil.rmtree(os.path.join(self.db_path, COLLECTION), ignore_errors=True)
857
+ for fn in (META_FILENAME, HASH_FILENAME, HASH_FILENAME + ".tmp"):
858
+ p = os.path.join(self.db_path, fn)
859
+ if os.path.exists(p):
860
+ os.remove(p)
861
+ return {"reset": True, "existed": existed, "db_path": self.db_path}
862
+
863
+ # ── side metadata (commit/branch/symbol-types) — Codna-side, separate from telys' collection.json ─
864
+ def _meta_path(self) -> str:
865
+ return os.path.join(self.db_path, META_FILENAME)
866
+
867
+ def _read_meta(self) -> dict:
868
+ try:
869
+ with open(self._meta_path()) as f:
870
+ return json.load(f)
871
+ except (OSError, ValueError):
872
+ return {}
873
+
874
+ def _write_meta(self, *, commit: str, branch: str) -> None:
875
+ os.makedirs(self.db_path, exist_ok=True)
876
+ # Just the index-run record for `status`. NO per-id map: provenance now comes from
877
+ # search(with_metadata=True) and the vanished-diff from col.ids(where=scope) (Telys 0.1.0-alpha).
878
+ payload = {
879
+ "commit_sha": commit,
880
+ "branch": branch,
881
+ "indexed_at": int(time.time()),
882
+ "space_id": self._embedder.profile.space_id(),
883
+ }
884
+ with open(self._meta_path(), "w") as f:
885
+ json.dump(payload, f)