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.
- codna/__init__.py +8 -0
- codna/_wheel_guard.py +28 -0
- codna/admission_control.py +275 -0
- codna/agent-core/CLINE_FORK.md +55 -0
- codna/agent-core/CLINE_SDK_AZ_INTEGRATION_PLAN.md +191 -0
- codna/agent-core/CLINE_SDK_INTERFACE.md +655 -0
- codna/agent-core/CLINE_SDK_RESEARCH.md +104 -0
- codna/agent-core/package.json +12 -0
- codna/agent-core/run-server.mjs +87 -0
- codna/agent-core/run-server.stub.mjs +149 -0
- codna/agent-core/vendor/cline/.gitignore +3 -0
- codna/agent-core/vendor/cline/LICENSE +201 -0
- codna/agent-core/vendor/cline/NOTICE +24 -0
- codna/agent-core/vendor/cline/UPSTREAM_COMMIT.txt +1 -0
- codna/agent-core/vendor/cline/algenta/README.md +27 -0
- codna/agent-core/vendor/cline/algenta/acp-editor.ts +176 -0
- codna/agent-core/vendor/cline/algenta/adapter.ts +452 -0
- codna/agent-core/vendor/cline/algenta/algenta-plugin.ts +30 -0
- codna/agent-core/vendor/cline/algenta/artifacts.test.ts +133 -0
- codna/agent-core/vendor/cline/algenta/execution.test.ts +63 -0
- codna/agent-core/vendor/cline/algenta/fallback.test.ts +73 -0
- codna/agent-core/vendor/cline/algenta/fallback.ts +83 -0
- codna/agent-core/vendor/cline/algenta/fix-runner.ts +27 -0
- codna/agent-core/vendor/cline/algenta/http.test.ts +48 -0
- codna/agent-core/vendor/cline/algenta/mojo-gate.test.ts +76 -0
- codna/agent-core/vendor/cline/algenta/mojo-gate.ts +151 -0
- codna/agent-core/vendor/cline/algenta/policy.test.ts +260 -0
- codna/agent-core/vendor/cline/algenta/postbuild.sh +31 -0
- codna/agent-core/vendor/cline/algenta/proof-artifacts.test.ts +55 -0
- codna/agent-core/vendor/cline/algenta/proof-provider.ts +301 -0
- codna/agent-core/vendor/cline/algenta/proofs.ts +311 -0
- codna/agent-core/vendor/cline/algenta/provider-key.test.ts +197 -0
- codna/agent-core/vendor/cline/algenta/run-server.ts +645 -0
- codna/agent-core/vendor/cline/algenta/scheduled-agents.ts +430 -0
- codna/agent-core/vendor/cline/algenta/server/artifacts.ts +532 -0
- codna/agent-core/vendor/cline/algenta/server/contracts.ts +254 -0
- codna/agent-core/vendor/cline/algenta/server/execution.ts +284 -0
- codna/agent-core/vendor/cline/algenta/server/http.ts +146 -0
- codna/agent-core/vendor/cline/algenta/server/policy.ts +391 -0
- codna/agent-core/vendor/cline/algenta/server/state.ts +21 -0
- codna/agent-core/vendor/cline/algenta/server/utils.ts +508 -0
- codna/agent-core/vendor/cline/algenta/task-policy.ts +82 -0
- codna/agent-core/vendor/cline/algenta/telys-localize.test.ts +416 -0
- codna/agent-core/vendor/cline/algenta/telys-localize.ts +608 -0
- codna/agent-core/vendor/cline/algenta/telys-worker.test.ts +99 -0
- codna/agent-core/vendor/cline/algenta/telys-worker.ts +245 -0
- codna/agent-core/vendor/cline/algenta/tools.test.ts +59 -0
- codna/agent-core/vendor/cline/algenta/tools.ts +196 -0
- codna/agent-core/vendor/cline/algenta/write-scope.test.ts +26 -0
- codna/agent-core/vendor/cline/algenta/write-scope.ts +60 -0
- codna/agent-core/vendor/cline/biome.json +19 -0
- codna/agent-core/vendor/cline/bun.lock +1179 -0
- codna/agent-core/vendor/cline/package.json +60 -0
- codna/agent-core/vendor/cline/sdk/.cline/rules/worktree_dependency_hygiene.md +15 -0
- codna/agent-core/vendor/cline/sdk/.cline/skills/plugin.md +892 -0
- codna/agent-core/vendor/cline/sdk/.gitignore +69 -0
- codna/agent-core/vendor/cline/sdk/AGENTS.md +109 -0
- codna/agent-core/vendor/cline/sdk/ARCHITECTURE.md +525 -0
- codna/agent-core/vendor/cline/sdk/CHANGELOG.md +32 -0
- codna/agent-core/vendor/cline/sdk/CONTRIBUTING.md +196 -0
- codna/agent-core/vendor/cline/sdk/README.md +273 -0
- codna/agent-core/vendor/cline/sdk/biome.json +140 -0
- codna/agent-core/vendor/cline/sdk/examples/README.md +196 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/README.md +419 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/changelog-generator.cron.md +37 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/code-style-audit.cron.md +47 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/daily-code-review.cron.md +28 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/dead-code-finder.cron.md +58 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/dependency-check.cron.md +35 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/documentation-check.cron.md +66 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/events/local-manual-test.event.md +28 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/events/local-plugin-event.event.md +20 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/events/pr-changelog-check.event.md +42 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/events/pr-review.event.md +32 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/events/pr-test-coverage.event.md +55 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/performance-baseline.cron.md +45 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/test-coverage-report.cron.md +41 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/type-check-strict.cron.md +44 -0
- codna/agent-core/vendor/cline/sdk/examples/cron/weekly-metrics-summary.cron.md +67 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PostToolUse.py +62 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PostToolUse.sh +17 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PostToolUse.ts +86 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse.py +34 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse.sh +16 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse.ts +66 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_BlockDestructive.sh +25 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_InjectContext.py +116 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_InjectFileContext.sh +57 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_ModifyInput.ts +125 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/PreToolUse_RequireReview.sh +19 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/README.md +435 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/SessionShutdown.sh +14 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/TaskComplete.sh +27 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/TaskStart.sh +14 -0
- codna/agent-core/vendor/cline/sdk/examples/hooks/custom-compaction-hook.example.ts +246 -0
- codna/agent-core/vendor/cline/sdk/examples/package.json +19 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/README.md +203 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/README.md +122 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/agents/anvil.md +16 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/agents/inquisitor.md +18 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/agents/oracle.md +18 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/agents/phantom.md +17 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/index.ts +831 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/package.json +39 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/api-design.md +63 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/code-review.md +61 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/debugging.md +62 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/documentation.md +83 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/migration.md +77 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/refactoring.md +58 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/skills/test-generation.md +76 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/agents-squad/tsconfig.json +4 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/automation-events.ts +91 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/background-terminal.ts +444 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/custom-compaction.ts +225 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/env-blocker.ts +118 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/gitignore-read-files-guard.ts +270 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/mac-notify.ts +67 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/openrouter-provider.ts +144 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/typescript-lsp/README.md +106 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/typescript-lsp/index.ts +298 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/weather-metrics.ts +151 -0
- codna/agent-core/vendor/cline/sdk/examples/plugins/web-search.ts +324 -0
- codna/agent-core/vendor/cline/sdk/examples/tsconfig.json +58 -0
- codna/agent-core/vendor/cline/sdk/packages/README.md +44 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/README.md +278 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/bun.mts +29 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/package.json +45 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/src/agent-runtime.provider-form.test.ts +210 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/src/agent-runtime.test.ts +1427 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/src/agent-runtime.ts +1558 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/src/index.ts +57 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/tsconfig.build.json +13 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/tsconfig.dev.json +13 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/tsconfig.json +9 -0
- codna/agent-core/vendor/cline/sdk/packages/agents/vitest.config.ts +10 -0
- codna/agent-core/vendor/cline/sdk/packages/core/README.md +110 -0
- codna/agent-core/vendor/cline/sdk/packages/core/bun.mts +75 -0
- codna/agent-core/vendor/cline/sdk/packages/core/docs/messages-contract-v1.md +148 -0
- codna/agent-core/vendor/cline/sdk/packages/core/fixtures/messages/success.messages.json +72 -0
- codna/agent-core/vendor/cline/sdk/packages/core/package.json +80 -0
- codna/agent-core/vendor/cline/sdk/packages/core/scripts/telemetry-smoke-host.ts +204 -0
- codna/agent-core/vendor/cline/sdk/packages/core/scripts/telemetry-smoke.ts +431 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/ClineCore.test.ts +607 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/ClineCore.ts +566 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/account/cline-account-service.test.ts +217 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/account/cline-account-service.ts +338 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/account/featurebase-token.test.ts +175 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/account/index.ts +24 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/account/rpc.test.ts +63 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/account/rpc.ts +185 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/account/types.ts +108 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/bounded-ttl-cache.test.ts +38 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/bounded-ttl-cache.ts +53 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/client.test.ts +93 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/client.ts +50 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/cline.test.ts +233 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/cline.ts +722 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/codex.test.ts +170 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/codex.ts +491 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/oca.test.ts +340 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/oca.ts +588 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/server.test.ts +319 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/server.ts +265 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/types.ts +110 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/utils.test.ts +128 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/auth/utils.ts +247 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/automation.ts +250 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/runtime-services.ts +75 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/start-input.ts +91 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/telemetry.ts +39 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cline-core/types.ts +274 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/events/cron-event-ingress.test.ts +255 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/events/cron-event-ingress.ts +357 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/events/index.ts +1 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/index.ts +7 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/reports/cron-report-writer.ts +153 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/reports/index.ts +1 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/cron-materializer.test.ts +152 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/cron-materializer.ts +100 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/cron-runner.test.ts +342 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/cron-runner.ts +547 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/index.ts +3 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/runner/resource-limiter.ts +46 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/schedule/index.ts +1 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/schedule/scheduler.test.ts +16 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/schedule/scheduler.ts +373 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/cron-service.ts +163 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/index.ts +3 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/schedule-command-service.ts +198 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/schedule-service.test.ts +213 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/service/schedule-service.ts +416 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-reconciler.test.ts +138 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-reconciler.ts +241 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-spec-parser.test.ts +198 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-spec-parser.ts +489 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-watcher.test.ts +87 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/cron-watcher.ts +102 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/specs/index.ts +3 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/store/cron-schema.ts +127 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/store/index.ts +2 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/store/sqlite-cron-store.test.ts +354 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/cron/store/sqlite-cron-store.ts +1552 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/index.ts +46 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/runtime-commands.test.ts +185 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/runtime-commands.ts +92 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/skill-frontmatter-toggle.test.ts +109 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/skill-frontmatter-toggle.ts +83 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/unified-config-file-watcher.test.ts +193 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/unified-config-file-watcher.ts +496 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/user-instruction-config-loader.test.ts +424 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/user-instruction-config-loader.ts +628 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/user-instruction-plugin.ts +277 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/config/user-instruction-service.ts +128 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/agentic-compaction.ts +153 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/basic-compaction.ts +419 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/compaction-shared.ts +511 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/compaction.live.test.ts +346 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/compaction.test.ts +1729 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/context/compaction.ts +430 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/index.ts +19 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/client.ts +579 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/config-loader.test.ts +402 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/config-loader.ts +446 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/index.ts +57 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/manager.test.ts +105 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/manager.ts +260 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/name-transform.ts +33 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/oauth.test.ts +79 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/oauth.ts +401 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/policies.ts +47 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/tools.ts +47 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/mcp/types.ts +135 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-config-loader.test.ts +480 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-config-loader.ts +313 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-load-report.ts +20 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-loader.test.ts +473 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-loader.ts +214 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-module-import.ts +682 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-sandbox-bootstrap.ts +781 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-sandbox.test.ts +810 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-sandbox.ts +640 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/plugin/plugin-targeting.ts +32 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/constants.ts +37 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/definitions.test.ts +1408 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/definitions.ts +863 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/apply-patch-parser.ts +520 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/apply-patch.test.ts +147 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/apply-patch.ts +348 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/bash.test.ts +108 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/bash.ts +211 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/editor.test.ts +113 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/editor.ts +220 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/file-read.test.ts +167 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/file-read.ts +140 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/index.ts +87 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/search.ts +471 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/executors/web-fetch.ts +259 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/helpers.ts +126 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/index.ts +183 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/model-tool-routing.test.ts +86 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/model-tool-routing.ts +134 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/presets.test.ts +72 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/presets.ts +190 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/runtime.test.ts +74 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/runtime.ts +261 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/schemas.ts +345 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/delegated-agent.ts +136 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/index.ts +5 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/multi-agent.lifecycle.test.ts +649 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/multi-agent.ts +1845 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/projections.ts +283 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/runtime.ts +54 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/spawn-agent-tool.test.ts +378 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/spawn-agent-tool.ts +203 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/subagent-prompts.ts +41 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/team-tools.test.ts +991 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/team/team-tools.ts +912 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/extensions/tools/types.ts +358 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/checkpoint-hooks.test.ts +276 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/checkpoint-hooks.ts +291 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-extension.ts +15 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-file-config.test.ts +17 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-file-config.ts +117 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-file-hooks.test.ts +593 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/hook-file-hooks.ts +1140 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/index.ts +34 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/subprocess-runner.ts +196 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hooks/subprocess.ts +543 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/connect.test.ts +74 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/connect.ts +187 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/index.test.ts +994 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/index.ts +1087 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/session-client.test.ts +310 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/session-client.ts +734 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/client/ui-client.ts +128 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/entry.ts +129 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/index.test.ts +357 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/index.ts +345 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/runtime-handlers.ts +144 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/daemon/start-shared-server.ts +61 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/defaults.test.ts +122 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/defaults.ts +70 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/index.test.ts +91 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/index.ts +260 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/discovery/workspace.ts +19 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/index.ts +37 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/runtime-host/hub-runtime-host.test.ts +1485 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/runtime-host/hub-runtime-host.ts +1948 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/runtime-host/remote-runtime-host.ts +27 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/boundary.test.ts +1142 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/browser-websocket.test.ts +173 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/browser-websocket.ts +295 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/command-transport.ts +14 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/fetch-wiring.test.ts +102 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/approval-handlers.ts +133 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/capability-handlers.ts +278 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/client-handlers.ts +86 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/context.ts +211 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/run-handlers.test.ts +186 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/run-handlers.ts +337 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/session-event-projector.ts +355 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/handlers/session-handlers.ts +842 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-capability-tool-executors.test.ts +215 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-client-contributions.ts +687 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-notifications.ts +94 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-schedule-events.ts +20 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-server-logging.ts +69 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-server-options.ts +66 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-server-transport.ts +593 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-session-records.ts +99 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/hub-websocket-server.ts +562 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/index.test.ts +358 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/index.ts +4 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/native-transport.ts +31 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/notification.test.ts +21 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/server/ui-events.test.ts +232 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/hub/settings.test.ts +143 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/index.ts +789 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/remote-config/integration.ts +133 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/capabilities/index.ts +2 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/capabilities/normalize-runtime-capabilities.ts +33 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/capabilities/runtime-capabilities.ts +9 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/config/agent-message-codec.test.ts +171 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/config/agent-message-codec.ts +301 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/config/agent-runtime-config-builder.test.ts +268 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/config/agent-runtime-config-builder.ts +181 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/history.test.ts +573 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/history.ts +516 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/host.test.ts +297 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/host.ts +248 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/agent-event-bridge.ts +231 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/session-record.ts +52 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/session-service-invoker.ts +40 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/spawn-tool.ts +162 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local/user-files.ts +18 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local-runtime-host.e2e.test.ts +576 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local-runtime-host.test.ts +5167 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/local-runtime-host.ts +1755 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/runtime-host-support.test.ts +55 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/runtime-host-support.ts +140 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/host/runtime-host.ts +323 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/index.ts +24 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-builder.team-persistence.test.ts +290 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-builder.test.ts +887 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-builder.ts +637 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-event-adapter.test.ts +901 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-event-adapter.ts +426 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-oauth-token-manager.test.ts +137 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-oauth-token-manager.ts +269 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/runtime-parity.test.ts +165 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/session-runtime-orchestrator.test.ts +1900 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/session-runtime-orchestrator.ts +1334 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/session-runtime.ts +73 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/orchestration/user-input-builder.ts +159 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/safety/loop-detection.ts +162 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/safety/mistake-tracker.ts +221 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/safety/rules.test.ts +22 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/safety/rules.ts +49 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/tools/subprocess-sandbox.test.ts +81 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/tools/subprocess-sandbox.ts +333 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/tools/tool-approval.ts +102 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/turn-queue/pending-prompt-service.test.ts +168 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/runtime/turn-queue/pending-prompt-service.ts +381 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/agent-events.ts +321 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/config.ts +5 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/global-settings.test.ts +352 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/global-settings.ts +324 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/apihandler-agent-model-adapter.test.ts +229 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/apihandler-agent-model-adapter.ts +170 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/cline-recommended-models.ts +168 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/configured-provider-registry.ts +193 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/handler-factory.test.ts +288 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/handler-factory.ts +197 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/provider-defaults.test.ts +260 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/provider-defaults.ts +887 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/provider-settings.test.ts +26 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/provider-settings.ts +322 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/runtime-config.ts +43 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/runtime-registry.ts +172 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/llms/runtime-types.ts +121 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/local-runtime-bootstrap.startup.test.ts +249 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/local-runtime-bootstrap.test.ts +543 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/local-runtime-bootstrap.ts +470 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/plugin-tools.ts +230 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/plugin-uninstall.test.ts +165 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/plugin-uninstall.ts +425 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/local-provider-registry.ts +468 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/local-provider-service.test.ts +1358 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/local-provider-service.ts +948 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/model-source.ts +105 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/provider-config-fields.test.ts +137 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/providers/provider-config-fields.ts +211 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/session-artifacts.ts +138 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/session-data.test.ts +307 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/session-data.ts +405 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/session-telemetry.ts +89 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/artifact-store.ts +1 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/file-team-store.ts +250 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/index.ts +11 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/provider-settings-legacy-migration.test.ts +656 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/provider-settings-legacy-migration.ts +798 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/provider-settings-manager.test.ts +354 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/provider-settings-manager.ts +194 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/session-store.ts +1 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/sqlite-session-store.ts +272 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/sqlite-team-store.ts +537 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/storage/team-store.ts +36 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/ITelemetryAdapter.ts +94 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/OpenTelemetryAdapter.test.ts +157 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/OpenTelemetryAdapter.ts +348 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/OpenTelemetryProvider.test.ts +401 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/OpenTelemetryProvider.ts +545 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/TelemetryLoggerSink.test.ts +42 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/TelemetryLoggerSink.ts +121 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/TelemetryService.test.ts +134 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/TelemetryService.ts +139 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/core-events.test.ts +696 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/core-events.ts +680 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/distinct-id.test.ts +57 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/distinct-id.ts +69 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/index.ts +22 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/telemetry/tool-context.ts +15 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/usage.test.ts +75 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/usage.ts +87 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/file-indexer.test.ts +156 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/file-indexer.ts +362 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/index.ts +7 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/mention-enricher.test.ts +106 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/mention-enricher.ts +122 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/workspace-manager.ts +100 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/workspace-manifest.ts +129 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/workspace-telemetry.test.ts +166 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/services/workspace/workspace-telemetry.ts +70 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/checkpoint-restore.test.ts +154 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/checkpoint-restore.ts +189 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/index.ts +32 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/models/session-graph.ts +92 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/models/session-manifest.ts +29 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/models/session-row.ts +199 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/file-session-service.ts +284 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/message-builder.test.ts +375 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/message-builder.ts +976 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/persistence-service.test.ts +553 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/persistence-service.ts +582 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/session-service.team-persistence.test.ts +48 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/services/session-service.ts +326 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/session-snapshot.ts +208 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/session-versioning-service.test.ts +195 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/session-versioning-service.ts +245 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/stores/conversation-store.ts +77 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/stores/session-manifest-store.ts +160 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/stores/team-persistence-store.ts +176 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/team/index.ts +12 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/team/team-child-session-manager.ts +415 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/session/team/team-session-coordinator.ts +240 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/settings/index.ts +15 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/settings/settings-service.test.ts +303 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/settings/settings-service.ts +317 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/settings/types.ts +67 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/chat-schema.ts +90 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/common.ts +54 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/config.ts +220 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/events.ts +88 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/index.ts +26 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/provider-settings.ts +56 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/session.ts +134 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/sessions.ts +45 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types/storage.ts +56 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/types.ts +184 -0
- codna/agent-core/vendor/cline/sdk/packages/core/src/version.ts +3 -0
- codna/agent-core/vendor/cline/sdk/packages/core/tsconfig.build.json +18 -0
- codna/agent-core/vendor/cline/sdk/packages/core/tsconfig.dev.json +8 -0
- codna/agent-core/vendor/cline/sdk/packages/core/tsconfig.json +24 -0
- codna/agent-core/vendor/cline/sdk/packages/core/tsconfig.smoke.json +18 -0
- codna/agent-core/vendor/cline/sdk/packages/core/vitest.config.ts +9 -0
- codna/agent-core/vendor/cline/sdk/packages/core/vitest.e2e.config.ts +10 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/AGENTS.md +39 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/README.md +227 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/bun.mts +49 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/fixtures/usage.json +308 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/package.json +73 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/scripts/fix-esm-imports.ts +109 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/scripts/generate-models.ts +136 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/scripts/models/generate-models-dev.ts +24 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/scripts/tsconfig.json +14 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/README.md +165 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/catalog-live.test.ts +275 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/catalog-live.ts +186 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/catalog.generated-access.ts +41 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/catalog.generated.ts +22756 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/catalog/types.ts +97 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/index.browser.ts +33 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/index.ts +74 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/models.ts +31 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/ai-sdk.test.ts +371 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/ai-sdk.ts +1012 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/async.ts +7 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/billing.test.ts +28 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/billing.ts +23 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/builtins-runtime.ts +101 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/builtins.test.ts +137 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/builtins.ts +1084 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/compat.test.ts +562 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/compat.ts +669 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/config.ts +429 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/factory-registry.ts +161 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/format.test.ts +43 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/format.ts +70 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/gateway.test.ts +3575 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/gateway.ts +310 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/handler.ts +91 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/http.ts +121 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/ids.test.ts +143 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/ids.ts +95 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/messages.ts +17 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/middleware/split-tool-images.test.ts +504 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/middleware/split-tool-images.ts +293 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/model-facts.ts +270 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/model-registry.ts +122 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/openai-codex-models.ts +35 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/provider-keys.ts +153 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/registry.ts +279 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/anthropic-compatible.test.ts +503 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/anthropic-compatible.ts +602 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/generic-compatible.ts +151 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/glm-thinking.ts +106 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/minimax-thinking.ts +78 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/provider-option-rules.ts +546 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/provider-options-types.ts +92 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/provider-options.test.ts +1872 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/provider-options.ts +119 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/reasoning-codecs.ts +40 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/routing/utils.ts +47 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/stream.ts +117 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/types.ts +77 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/anthropic.test.ts +90 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/anthropic.ts +39 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/bedrock.test.ts +201 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/bedrock.ts +171 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/community.test.ts +55 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/community.ts +207 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/google.ts +61 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/minimax-thinking.test.ts +69 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/minimax-thinking.ts +104 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/mistral.ts +31 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/openai-compatible.ts +49 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/openai.ts +24 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/types.ts +141 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/vertex.test.ts +125 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers/vendors/vertex.ts +56 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers.browser.ts +5 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/providers.ts +106 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/services/langfuse-telemetry.test.ts +90 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/services/langfuse-telemetry.ts +187 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.example.json +254 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.openai-codex.example.json +19 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.openai-codex.reasoning.example.json +22 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.reasoning-disabled.example.json +423 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.reasoning.example.json +349 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/live-providers.tools.example.json +199 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-config.test.ts +98 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-config.ts +193 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-minimax-routing.test.ts +264 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-reasoning.test.ts +290 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-runner.ts +47 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live-tools.test.ts +265 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-live.test.ts +350 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/README.md +31 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/anthropic-claude-sonnet-4-6.json +12 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/cline-anthropic-sonnet.json +12 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/openai-codex-gpt-5-4.json +11 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr/openai-compatible-deepseek-v4-pro.json +12 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/src/tests/provider-vcr.test.ts +450 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/tsconfig.build.json +19 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/tsconfig.dev.json +12 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/tsconfig.json +11 -0
- codna/agent-core/vendor/cline/sdk/packages/llms/vitest.config.ts +24 -0
- codna/agent-core/vendor/cline/sdk/packages/sdk/bun.mts +18 -0
- codna/agent-core/vendor/cline/sdk/packages/sdk/package.json +37 -0
- codna/agent-core/vendor/cline/sdk/packages/sdk/src/index.ts +1 -0
- codna/agent-core/vendor/cline/sdk/packages/sdk/tsconfig.build.json +12 -0
- codna/agent-core/vendor/cline/sdk/packages/sdk/tsconfig.json +11 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/README.md +47 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/bun.mts +70 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/package.json +63 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/agent.ts +561 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/agents/index.ts +1 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/agents/types.ts +1055 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/automation/index.ts +31 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/automation/schemas.ts +99 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/automation/types.ts +187 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/connectors/events.ts +73 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/connectors/options.ts +190 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/cron/cron-spec-types.ts +104 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/cron/index.ts +13 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/db/index.ts +14 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/db/sqlite-db.test.ts +155 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/db/sqlite-db.ts +381 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/dispose.ts +31 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/extensions/context.ts +92 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/extensions/contribution-registry.test.ts +156 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/extensions/contribution-registry.ts +524 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/extensions/plugin.ts +1 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/hooks/contracts.ts +9 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/hooks/events.ts +327 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/hub.ts +723 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/index.browser.ts +355 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/index.ts +405 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/ai-sdk-format.test.ts +898 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/ai-sdk-format.ts +389 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/gateway.ts +202 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/messages.ts +168 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/model-info.ts +94 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/reasoning-effort.ts +73 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/requests.ts +12 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/tokens.ts +12 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/llms/tools.ts +96 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/logging/logger.ts +45 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/error.ts +18 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/headers/utils.ts +28 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/json.test.ts +14 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/json.ts +86 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/shell.test.ts +46 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/shell.ts +32 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/string.ts +29 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/time.ts +39 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/parse/zod.ts +23 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/prompt/cline.ts +117 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/prompt/format.test.ts +39 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/prompt/format.ts +99 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/prompt/system.ts +64 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/artifact-store.ts +70 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/blob-storage.ts +416 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/bundle.ts +181 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/constants.ts +5 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/index.ts +9 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/materializer.ts +165 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/paths.ts +33 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/runtime.test.ts +102 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/runtime.ts +236 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/schema.test.ts +977 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/schema.ts +262 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/remote-config/telemetry.ts +124 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/rpc/index.ts +5 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/rpc/runtime.ts +429 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/rpc/team-progress.ts +71 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/build-env.test.ts +115 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/build-env.ts +183 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/cline-environment.test.ts +106 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/cline-environment.ts +88 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/hub-daemon-env.test.ts +20 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/runtime/hub-daemon-env.ts +7 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/services/telemetry-config.ts +58 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/services/telemetry.test.ts +66 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/services/telemetry.ts +295 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/session/hook-context.ts +45 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/session/index.ts +6 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/session/records.ts +41 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/session/runtime-config.ts +69 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/session/runtime-env.ts +8 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/session/workspace.ts +45 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/index.ts +47 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/path-resolution.test.ts +63 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/path-resolution.ts +114 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/paths.home-dir.test.ts +61 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/paths.test.ts +180 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/storage/paths.ts +588 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/team/index.ts +2 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/team/schema.ts +452 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/team/types.ts +235 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/tools/create.test.ts +201 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/tools/create.ts +130 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/types/auth.ts +41 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/types/index.ts +2 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/types/vcr.ts +14 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/vcr.test.ts +229 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/src/vcr.ts +900 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/tsconfig.build.json +7 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/tsconfig.json +9 -0
- codna/agent-core/vendor/cline/sdk/packages/shared/vitest.config.ts +9 -0
- codna/agent-core/vendor/cline/sdk/packages/tsconfig.base.json +22 -0
- codna/agent-core/vendor/cline/sdk/scripts/check-publish.ts +351 -0
- codna/agent-core/vendor/cline/sdk/scripts/ci-node-smoke.ts +155 -0
- codna/agent-core/vendor/cline/sdk/scripts/clean.ts +91 -0
- codna/agent-core/vendor/cline/sdk/scripts/release.ts +548 -0
- codna/agent-core/vendor/cline/sdk/scripts/run-vendored-tests.sh +44 -0
- codna/agent-core/vendor/cline/sdk/scripts/version.ts +120 -0
- codna/agent-core/vendor/cline/sdk/tsconfig.json +53 -0
- codna/agent_core_runtime.py +816 -0
- codna/cli.py +921 -0
- codna/cli_errors.py +50 -0
- codna/cline_agent.py +90 -0
- codna/codeunits.py +221 -0
- codna/codeunits_treesitter.py +148 -0
- codna/doctor.py +212 -0
- codna/doctor_output.py +61 -0
- codna/engine.py +149 -0
- codna/evasion.py +192 -0
- codna/evidence.py +163 -0
- codna/findings.py +272 -0
- codna/gate.py +132 -0
- codna/gitpush.py +57 -0
- codna/local_client.py +932 -0
- codna/local_mojo_daemon.py +568 -0
- codna/local_mojo_pool.py +861 -0
- codna/local_repository_shims.py +419 -0
- codna/local_runtime.py +650 -0
- codna/localfix.py +121 -0
- codna/manifest.py +164 -0
- codna/mcp_server.py +155 -0
- codna/memory.py +885 -0
- codna/netjail.py +68 -0
- codna/packaged_agent_runner.py +354 -0
- codna/packaged_git.py +378 -0
- codna/packaged_repository_advanced.py +618 -0
- codna/packaged_repository_backend.py +887 -0
- codna/patchgen.py +115 -0
- codna/policy.py +85 -0
- codna/refengine.py +132 -0
- codna/repo_backend.py +78 -0
- codna/repository_artifacts.py +291 -0
- codna/runtime/__init__.py +17 -0
- codna/runtime/config.py +394 -0
- codna/runtime/health.py +130 -0
- codna/runtime/local_stack.py +978 -0
- codna/runtime/ports.py +137 -0
- codna/runtime/processes.py +199 -0
- codna/runtime_config.py +94 -0
- codna/sandbox.py +111 -0
- codna/sarif.py +610 -0
- codna/secure.py +250 -0
- codna/supervisor.py +108 -0
- codna/worker.py +161 -0
- codna/worktree.py +73 -0
- codna/writer.py +169 -0
- codna-0.1.0.dist-info/METADATA +153 -0
- codna-0.1.0.dist-info/RECORD +761 -0
- codna-0.1.0.dist-info/WHEEL +5 -0
- codna-0.1.0.dist-info/entry_points.txt +2 -0
- 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)
|