@getrift/rift 0.0.0 → 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.dev.md +110 -0
- package/README.md +130 -0
- package/dist/src/auth/keychain.d.ts +25 -0
- package/dist/src/auth/keychain.d.ts.map +1 -0
- package/dist/src/auth/keychain.js +113 -0
- package/dist/src/auth/keychain.js.map +1 -0
- package/dist/src/auth/middleware.d.ts +20 -0
- package/dist/src/auth/middleware.d.ts.map +1 -0
- package/dist/src/auth/middleware.js +49 -0
- package/dist/src/auth/middleware.js.map +1 -0
- package/dist/src/auth/rate-limit.d.ts +16 -0
- package/dist/src/auth/rate-limit.d.ts.map +1 -0
- package/dist/src/auth/rate-limit.js +38 -0
- package/dist/src/auth/rate-limit.js.map +1 -0
- package/dist/src/auth/rotation.d.ts +67 -0
- package/dist/src/auth/rotation.d.ts.map +1 -0
- package/dist/src/auth/rotation.js +190 -0
- package/dist/src/auth/rotation.js.map +1 -0
- package/dist/src/backfill/project-context-batch-constructor.d.ts +127 -0
- package/dist/src/backfill/project-context-batch-constructor.d.ts.map +1 -0
- package/dist/src/backfill/project-context-batch-constructor.js +210 -0
- package/dist/src/backfill/project-context-batch-constructor.js.map +1 -0
- package/dist/src/capture/auto-capture.d.ts +162 -0
- package/dist/src/capture/auto-capture.d.ts.map +1 -0
- package/dist/src/capture/auto-capture.js +601 -0
- package/dist/src/capture/auto-capture.js.map +1 -0
- package/dist/src/capture/batch-budget.d.ts +90 -0
- package/dist/src/capture/batch-budget.d.ts.map +1 -0
- package/dist/src/capture/batch-budget.js +148 -0
- package/dist/src/capture/batch-budget.js.map +1 -0
- package/dist/src/capture/codex-cli-triage-provider.d.ts +17 -0
- package/dist/src/capture/codex-cli-triage-provider.d.ts.map +1 -0
- package/dist/src/capture/codex-cli-triage-provider.js +109 -0
- package/dist/src/capture/codex-cli-triage-provider.js.map +1 -0
- package/dist/src/capture/observability.d.ts +42 -0
- package/dist/src/capture/observability.d.ts.map +1 -0
- package/dist/src/capture/observability.js +87 -0
- package/dist/src/capture/observability.js.map +1 -0
- package/dist/src/capture/openai-triage-provider.d.ts +92 -0
- package/dist/src/capture/openai-triage-provider.d.ts.map +1 -0
- package/dist/src/capture/openai-triage-provider.js +267 -0
- package/dist/src/capture/openai-triage-provider.js.map +1 -0
- package/dist/src/capture/review-queue-index.d.ts +51 -0
- package/dist/src/capture/review-queue-index.d.ts.map +1 -0
- package/dist/src/capture/review-queue-index.js +204 -0
- package/dist/src/capture/review-queue-index.js.map +1 -0
- package/dist/src/capture/review-queue.d.ts +43 -0
- package/dist/src/capture/review-queue.d.ts.map +1 -0
- package/dist/src/capture/review-queue.js +116 -0
- package/dist/src/capture/review-queue.js.map +1 -0
- package/dist/src/capture/sources.d.ts +7 -0
- package/dist/src/capture/sources.d.ts.map +1 -0
- package/dist/src/capture/sources.js +3 -0
- package/dist/src/capture/sources.js.map +1 -0
- package/dist/src/capture/triage-lane.d.ts +39 -0
- package/dist/src/capture/triage-lane.d.ts.map +1 -0
- package/dist/src/capture/triage-lane.js +217 -0
- package/dist/src/capture/triage-lane.js.map +1 -0
- package/dist/src/capture/triage-provider.d.ts +75 -0
- package/dist/src/capture/triage-provider.d.ts.map +1 -0
- package/dist/src/capture/triage-provider.js +120 -0
- package/dist/src/capture/triage-provider.js.map +1 -0
- package/dist/src/capture/triage.d.ts +30 -0
- package/dist/src/capture/triage.d.ts.map +1 -0
- package/dist/src/capture/triage.js +48 -0
- package/dist/src/capture/triage.js.map +1 -0
- package/dist/src/cli/commands/backfill.d.ts +3 -0
- package/dist/src/cli/commands/backfill.d.ts.map +1 -0
- package/dist/src/cli/commands/backfill.js +1376 -0
- package/dist/src/cli/commands/backfill.js.map +1 -0
- package/dist/src/cli/commands/bulk-ingest.d.ts +3 -0
- package/dist/src/cli/commands/bulk-ingest.d.ts.map +1 -0
- package/dist/src/cli/commands/bulk-ingest.js +126 -0
- package/dist/src/cli/commands/bulk-ingest.js.map +1 -0
- package/dist/src/cli/commands/capture.d.ts +12 -0
- package/dist/src/cli/commands/capture.d.ts.map +1 -0
- package/dist/src/cli/commands/capture.js +123 -0
- package/dist/src/cli/commands/capture.js.map +1 -0
- package/dist/src/cli/commands/compact.d.ts +3 -0
- package/dist/src/cli/commands/compact.d.ts.map +1 -0
- package/dist/src/cli/commands/compact.js +70 -0
- package/dist/src/cli/commands/compact.js.map +1 -0
- package/dist/src/cli/commands/feedback.d.ts +22 -0
- package/dist/src/cli/commands/feedback.d.ts.map +1 -0
- package/dist/src/cli/commands/feedback.js +125 -0
- package/dist/src/cli/commands/feedback.js.map +1 -0
- package/dist/src/cli/commands/import.d.ts +19 -0
- package/dist/src/cli/commands/import.d.ts.map +1 -0
- package/dist/src/cli/commands/import.js +258 -0
- package/dist/src/cli/commands/import.js.map +1 -0
- package/dist/src/cli/commands/ingest.d.ts +3 -0
- package/dist/src/cli/commands/ingest.d.ts.map +1 -0
- package/dist/src/cli/commands/ingest.js +80 -0
- package/dist/src/cli/commands/ingest.js.map +1 -0
- package/dist/src/cli/commands/mcp-install.d.ts +25 -0
- package/dist/src/cli/commands/mcp-install.d.ts.map +1 -0
- package/dist/src/cli/commands/mcp-install.js +134 -0
- package/dist/src/cli/commands/mcp-install.js.map +1 -0
- package/dist/src/cli/commands/onboard.d.ts +98 -0
- package/dist/src/cli/commands/onboard.d.ts.map +1 -0
- package/dist/src/cli/commands/onboard.js +742 -0
- package/dist/src/cli/commands/onboard.js.map +1 -0
- package/dist/src/cli/commands/rebuild.d.ts +12 -0
- package/dist/src/cli/commands/rebuild.d.ts.map +1 -0
- package/dist/src/cli/commands/rebuild.js +164 -0
- package/dist/src/cli/commands/rebuild.js.map +1 -0
- package/dist/src/cli/commands/reconcile.d.ts +3 -0
- package/dist/src/cli/commands/reconcile.d.ts.map +1 -0
- package/dist/src/cli/commands/reconcile.js +56 -0
- package/dist/src/cli/commands/reconcile.js.map +1 -0
- package/dist/src/cli/commands/reindex.d.ts +3 -0
- package/dist/src/cli/commands/reindex.d.ts.map +1 -0
- package/dist/src/cli/commands/reindex.js +66 -0
- package/dist/src/cli/commands/reindex.js.map +1 -0
- package/dist/src/cli/commands/review.d.ts +13 -0
- package/dist/src/cli/commands/review.d.ts.map +1 -0
- package/dist/src/cli/commands/review.js +383 -0
- package/dist/src/cli/commands/review.js.map +1 -0
- package/dist/src/cli/commands/save.d.ts +3 -0
- package/dist/src/cli/commands/save.d.ts.map +1 -0
- package/dist/src/cli/commands/save.js +111 -0
- package/dist/src/cli/commands/save.js.map +1 -0
- package/dist/src/cli/commands/search.d.ts +35 -0
- package/dist/src/cli/commands/search.d.ts.map +1 -0
- package/dist/src/cli/commands/search.js +88 -0
- package/dist/src/cli/commands/search.js.map +1 -0
- package/dist/src/cli/commands/stats.d.ts +3 -0
- package/dist/src/cli/commands/stats.d.ts.map +1 -0
- package/dist/src/cli/commands/stats.js +42 -0
- package/dist/src/cli/commands/stats.js.map +1 -0
- package/dist/src/cli/commands/status.d.ts +15 -0
- package/dist/src/cli/commands/status.d.ts.map +1 -0
- package/dist/src/cli/commands/status.js +89 -0
- package/dist/src/cli/commands/status.js.map +1 -0
- package/dist/src/cli/commands/token-issue.d.ts +3 -0
- package/dist/src/cli/commands/token-issue.d.ts.map +1 -0
- package/dist/src/cli/commands/token-issue.js +25 -0
- package/dist/src/cli/commands/token-issue.js.map +1 -0
- package/dist/src/cli/commands/triage.d.ts +3 -0
- package/dist/src/cli/commands/triage.d.ts.map +1 -0
- package/dist/src/cli/commands/triage.js +125 -0
- package/dist/src/cli/commands/triage.js.map +1 -0
- package/dist/src/cli/commands/uninstall.d.ts +3 -0
- package/dist/src/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/src/cli/commands/uninstall.js +238 -0
- package/dist/src/cli/commands/uninstall.js.map +1 -0
- package/dist/src/cli/feedback/feedback-config.d.ts +21 -0
- package/dist/src/cli/feedback/feedback-config.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-config.js +43 -0
- package/dist/src/cli/feedback/feedback-config.js.map +1 -0
- package/dist/src/cli/feedback/feedback-history.d.ts +4 -0
- package/dist/src/cli/feedback/feedback-history.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-history.js +115 -0
- package/dist/src/cli/feedback/feedback-history.js.map +1 -0
- package/dist/src/cli/feedback/feedback-payload.d.ts +53 -0
- package/dist/src/cli/feedback/feedback-payload.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-payload.js +10 -0
- package/dist/src/cli/feedback/feedback-payload.js.map +1 -0
- package/dist/src/cli/feedback/feedback-relay.d.ts +15 -0
- package/dist/src/cli/feedback/feedback-relay.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-relay.js +47 -0
- package/dist/src/cli/feedback/feedback-relay.js.map +1 -0
- package/dist/src/cli/feedback/feedback-status.d.ts +11 -0
- package/dist/src/cli/feedback/feedback-status.d.ts.map +1 -0
- package/dist/src/cli/feedback/feedback-status.js +122 -0
- package/dist/src/cli/feedback/feedback-status.js.map +1 -0
- package/dist/src/cli/http-client.d.ts +36 -0
- package/dist/src/cli/http-client.d.ts.map +1 -0
- package/dist/src/cli/http-client.js +153 -0
- package/dist/src/cli/http-client.js.map +1 -0
- package/dist/src/cli/index.d.ts +4 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +66 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/job-poller.d.ts +13 -0
- package/dist/src/cli/job-poller.d.ts.map +1 -0
- package/dist/src/cli/job-poller.js +29 -0
- package/dist/src/cli/job-poller.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/codex-toml.d.ts +10 -0
- package/dist/src/cli/mcp-config-writers/codex-toml.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/codex-toml.js +410 -0
- package/dist/src/cli/mcp-config-writers/codex-toml.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/errors.d.ts +17 -0
- package/dist/src/cli/mcp-config-writers/errors.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/errors.js +13 -0
- package/dist/src/cli/mcp-config-writers/errors.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/index.d.ts +18 -0
- package/dist/src/cli/mcp-config-writers/index.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/index.js +49 -0
- package/dist/src/cli/mcp-config-writers/index.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/json-config.d.ts +12 -0
- package/dist/src/cli/mcp-config-writers/json-config.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/json-config.js +177 -0
- package/dist/src/cli/mcp-config-writers/json-config.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/redact.d.ts +28 -0
- package/dist/src/cli/mcp-config-writers/redact.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/redact.js +48 -0
- package/dist/src/cli/mcp-config-writers/redact.js.map +1 -0
- package/dist/src/cli/mcp-config-writers/types.d.ts +32 -0
- package/dist/src/cli/mcp-config-writers/types.d.ts.map +1 -0
- package/dist/src/cli/mcp-config-writers/types.js +5 -0
- package/dist/src/cli/mcp-config-writers/types.js.map +1 -0
- package/dist/src/cli/output.d.ts +8 -0
- package/dist/src/cli/output.d.ts.map +1 -0
- package/dist/src/cli/output.js +34 -0
- package/dist/src/cli/output.js.map +1 -0
- package/dist/src/cli/status/friend-header.d.ts +33 -0
- package/dist/src/cli/status/friend-header.d.ts.map +1 -0
- package/dist/src/cli/status/friend-header.js +108 -0
- package/dist/src/cli/status/friend-header.js.map +1 -0
- package/dist/src/cli/status/local-signals.d.ts +14 -0
- package/dist/src/cli/status/local-signals.d.ts.map +1 -0
- package/dist/src/cli/status/local-signals.js +73 -0
- package/dist/src/cli/status/local-signals.js.map +1 -0
- package/dist/src/cli/token.d.ts +37 -0
- package/dist/src/cli/token.d.ts.map +1 -0
- package/dist/src/cli/token.js +105 -0
- package/dist/src/cli/token.js.map +1 -0
- package/dist/src/cli/uninstall/mcp-uninstall.d.ts +33 -0
- package/dist/src/cli/uninstall/mcp-uninstall.d.ts.map +1 -0
- package/dist/src/cli/uninstall/mcp-uninstall.js +181 -0
- package/dist/src/cli/uninstall/mcp-uninstall.js.map +1 -0
- package/dist/src/config/loader.d.ts +9 -0
- package/dist/src/config/loader.d.ts.map +1 -0
- package/dist/src/config/loader.js +73 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/schema.d.ts +635 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +208 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/ingestion/bulk-ingest.d.ts +11 -0
- package/dist/src/ingestion/bulk-ingest.d.ts.map +1 -0
- package/dist/src/ingestion/bulk-ingest.js +11 -0
- package/dist/src/ingestion/bulk-ingest.js.map +1 -0
- package/dist/src/ingestion/extractor.d.ts +16 -0
- package/dist/src/ingestion/extractor.d.ts.map +1 -0
- package/dist/src/ingestion/extractor.js +85 -0
- package/dist/src/ingestion/extractor.js.map +1 -0
- package/dist/src/ingestion/extractors/docx.d.ts +3 -0
- package/dist/src/ingestion/extractors/docx.d.ts.map +1 -0
- package/dist/src/ingestion/extractors/docx.js +20 -0
- package/dist/src/ingestion/extractors/docx.js.map +1 -0
- package/dist/src/ingestion/extractors/pdf.d.ts +3 -0
- package/dist/src/ingestion/extractors/pdf.d.ts.map +1 -0
- package/dist/src/ingestion/extractors/pdf.js +32 -0
- package/dist/src/ingestion/extractors/pdf.js.map +1 -0
- package/dist/src/ingestion/historical-campaign.d.ts +340 -0
- package/dist/src/ingestion/historical-campaign.d.ts.map +1 -0
- package/dist/src/ingestion/historical-campaign.js +1010 -0
- package/dist/src/ingestion/historical-campaign.js.map +1 -0
- package/dist/src/ingestion/ignored-paths.d.ts +20 -0
- package/dist/src/ingestion/ignored-paths.d.ts.map +1 -0
- package/dist/src/ingestion/ignored-paths.js +45 -0
- package/dist/src/ingestion/ignored-paths.js.map +1 -0
- package/dist/src/ingestion/inbox-watcher.d.ts +12 -0
- package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-watcher.js +99 -0
- package/dist/src/ingestion/inbox-watcher.js.map +1 -0
- package/dist/src/ingestion/indexer.d.ts +32 -0
- package/dist/src/ingestion/indexer.d.ts.map +1 -0
- package/dist/src/ingestion/indexer.js +68 -0
- package/dist/src/ingestion/indexer.js.map +1 -0
- package/dist/src/ingestion/metadata-extraction.d.ts +53 -0
- package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -0
- package/dist/src/ingestion/metadata-extraction.js +132 -0
- package/dist/src/ingestion/metadata-extraction.js.map +1 -0
- package/dist/src/ingestion/parsers/chatgpt-web.d.ts +29 -0
- package/dist/src/ingestion/parsers/chatgpt-web.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/chatgpt-web.js +100 -0
- package/dist/src/ingestion/parsers/chatgpt-web.js.map +1 -0
- package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts +16 -0
- package/dist/src/ingestion/parsers/claude-code-jsonl.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/claude-code-jsonl.js +123 -0
- package/dist/src/ingestion/parsers/claude-code-jsonl.js.map +1 -0
- package/dist/src/ingestion/parsers/claude-web.d.ts +24 -0
- package/dist/src/ingestion/parsers/claude-web.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/claude-web.js +78 -0
- package/dist/src/ingestion/parsers/claude-web.js.map +1 -0
- package/dist/src/ingestion/parsers/codex-jsonl.d.ts +18 -0
- package/dist/src/ingestion/parsers/codex-jsonl.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/codex-jsonl.js +125 -0
- package/dist/src/ingestion/parsers/codex-jsonl.js.map +1 -0
- package/dist/src/ingestion/parsers/gemini-web.d.ts +16 -0
- package/dist/src/ingestion/parsers/gemini-web.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/gemini-web.js +170 -0
- package/dist/src/ingestion/parsers/gemini-web.js.map +1 -0
- package/dist/src/ingestion/parsers/grok-web.d.ts +40 -0
- package/dist/src/ingestion/parsers/grok-web.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/grok-web.js +67 -0
- package/dist/src/ingestion/parsers/grok-web.js.map +1 -0
- package/dist/src/ingestion/parsers/types.d.ts +34 -0
- package/dist/src/ingestion/parsers/types.d.ts.map +1 -0
- package/dist/src/ingestion/parsers/types.js +26 -0
- package/dist/src/ingestion/parsers/types.js.map +1 -0
- package/dist/src/ingestion/scanner.d.ts +48 -0
- package/dist/src/ingestion/scanner.d.ts.map +1 -0
- package/dist/src/ingestion/scanner.js +131 -0
- package/dist/src/ingestion/scanner.js.map +1 -0
- package/dist/src/ingestion/staging.d.ts +109 -0
- package/dist/src/ingestion/staging.d.ts.map +1 -0
- package/dist/src/ingestion/staging.js +411 -0
- package/dist/src/ingestion/staging.js.map +1 -0
- package/dist/src/ingestion/watcher.d.ts +65 -0
- package/dist/src/ingestion/watcher.d.ts.map +1 -0
- package/dist/src/ingestion/watcher.js +182 -0
- package/dist/src/ingestion/watcher.js.map +1 -0
- package/dist/src/jobs/codex-override-handler.d.ts +3 -0
- package/dist/src/jobs/codex-override-handler.d.ts.map +1 -0
- package/dist/src/jobs/codex-override-handler.js +16 -0
- package/dist/src/jobs/codex-override-handler.js.map +1 -0
- package/dist/src/jobs/handlers/compact.d.ts +30 -0
- package/dist/src/jobs/handlers/compact.d.ts.map +1 -0
- package/dist/src/jobs/handlers/compact.js +329 -0
- package/dist/src/jobs/handlers/compact.js.map +1 -0
- package/dist/src/jobs/handlers/ingest.d.ts +13 -0
- package/dist/src/jobs/handlers/ingest.d.ts.map +1 -0
- package/dist/src/jobs/handlers/ingest.js +255 -0
- package/dist/src/jobs/handlers/ingest.js.map +1 -0
- package/dist/src/jobs/handlers/reconcile.d.ts +29 -0
- package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -0
- package/dist/src/jobs/handlers/reconcile.js +476 -0
- package/dist/src/jobs/handlers/reconcile.js.map +1 -0
- package/dist/src/jobs/handlers/reindex.d.ts +38 -0
- package/dist/src/jobs/handlers/reindex.d.ts.map +1 -0
- package/dist/src/jobs/handlers/reindex.js +52 -0
- package/dist/src/jobs/handlers/reindex.js.map +1 -0
- package/dist/src/jobs/handlers/save.d.ts +10 -0
- package/dist/src/jobs/handlers/save.d.ts.map +1 -0
- package/dist/src/jobs/handlers/save.js +206 -0
- package/dist/src/jobs/handlers/save.js.map +1 -0
- package/dist/src/jobs/handlers/triage.d.ts +47 -0
- package/dist/src/jobs/handlers/triage.d.ts.map +1 -0
- package/dist/src/jobs/handlers/triage.js +95 -0
- package/dist/src/jobs/handlers/triage.js.map +1 -0
- package/dist/src/jobs/queue.d.ts +107 -0
- package/dist/src/jobs/queue.d.ts.map +1 -0
- package/dist/src/jobs/queue.js +319 -0
- package/dist/src/jobs/queue.js.map +1 -0
- package/dist/src/jobs/types.d.ts +39 -0
- package/dist/src/jobs/types.d.ts.map +1 -0
- package/dist/src/jobs/types.js +29 -0
- package/dist/src/jobs/types.js.map +1 -0
- package/dist/src/jobs/worker-entry.d.ts +10 -0
- package/dist/src/jobs/worker-entry.d.ts.map +1 -0
- package/dist/src/jobs/worker-entry.js +210 -0
- package/dist/src/jobs/worker-entry.js.map +1 -0
- package/dist/src/jobs/worker-process.d.ts +50 -0
- package/dist/src/jobs/worker-process.d.ts.map +1 -0
- package/dist/src/jobs/worker-process.js +186 -0
- package/dist/src/jobs/worker-process.js.map +1 -0
- package/dist/src/jobs/worker.d.ts +11 -0
- package/dist/src/jobs/worker.d.ts.map +1 -0
- package/dist/src/jobs/worker.js +14 -0
- package/dist/src/jobs/worker.js.map +1 -0
- package/dist/src/main.d.ts +2 -0
- package/dist/src/main.d.ts.map +1 -0
- package/dist/src/main.js +425 -0
- package/dist/src/main.js.map +1 -0
- package/dist/src/mcp/errors.d.ts +8 -0
- package/dist/src/mcp/errors.d.ts.map +1 -0
- package/dist/src/mcp/errors.js +50 -0
- package/dist/src/mcp/errors.js.map +1 -0
- package/dist/src/mcp/server.d.ts +10 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +94 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/tools/context-pack.d.ts +35 -0
- package/dist/src/mcp/tools/context-pack.d.ts.map +1 -0
- package/dist/src/mcp/tools/context-pack.js +97 -0
- package/dist/src/mcp/tools/context-pack.js.map +1 -0
- package/dist/src/mcp/tools/conversations-search.d.ts +38 -0
- package/dist/src/mcp/tools/conversations-search.d.ts.map +1 -0
- package/dist/src/mcp/tools/conversations-search.js +73 -0
- package/dist/src/mcp/tools/conversations-search.js.map +1 -0
- package/dist/src/mcp/tools/save.d.ts +32 -0
- package/dist/src/mcp/tools/save.d.ts.map +1 -0
- package/dist/src/mcp/tools/save.js +60 -0
- package/dist/src/mcp/tools/save.js.map +1 -0
- package/dist/src/mcp/tools/search.d.ts +33 -0
- package/dist/src/mcp/tools/search.d.ts.map +1 -0
- package/dist/src/mcp/tools/search.js +58 -0
- package/dist/src/mcp/tools/search.js.map +1 -0
- package/dist/src/mcp/tools/status.d.ts +17 -0
- package/dist/src/mcp/tools/status.d.ts.map +1 -0
- package/dist/src/mcp/tools/status.js +12 -0
- package/dist/src/mcp/tools/status.js.map +1 -0
- package/dist/src/observability/coverage.d.ts +100 -0
- package/dist/src/observability/coverage.d.ts.map +1 -0
- package/dist/src/observability/coverage.js +180 -0
- package/dist/src/observability/coverage.js.map +1 -0
- package/dist/src/observability/rift-context.d.ts +47 -0
- package/dist/src/observability/rift-context.d.ts.map +1 -0
- package/dist/src/observability/rift-context.js +118 -0
- package/dist/src/observability/rift-context.js.map +1 -0
- package/dist/src/observability/staleness.d.ts +43 -0
- package/dist/src/observability/staleness.d.ts.map +1 -0
- package/dist/src/observability/staleness.js +74 -0
- package/dist/src/observability/staleness.js.map +1 -0
- package/dist/src/observability/tool-usage-stats.d.ts +23 -0
- package/dist/src/observability/tool-usage-stats.d.ts.map +1 -0
- package/dist/src/observability/tool-usage-stats.js +83 -0
- package/dist/src/observability/tool-usage-stats.js.map +1 -0
- package/dist/src/observability/tool-usage.d.ts +68 -0
- package/dist/src/observability/tool-usage.d.ts.map +1 -0
- package/dist/src/observability/tool-usage.js +207 -0
- package/dist/src/observability/tool-usage.js.map +1 -0
- package/dist/src/onboarding/daemon-control.d.ts +33 -0
- package/dist/src/onboarding/daemon-control.d.ts.map +1 -0
- package/dist/src/onboarding/daemon-control.js +92 -0
- package/dist/src/onboarding/daemon-control.js.map +1 -0
- package/dist/src/onboarding/env-file.d.ts +18 -0
- package/dist/src/onboarding/env-file.d.ts.map +1 -0
- package/dist/src/onboarding/env-file.js +89 -0
- package/dist/src/onboarding/env-file.js.map +1 -0
- package/dist/src/onboarding/voyage-validate.d.ts +16 -0
- package/dist/src/onboarding/voyage-validate.d.ts.map +1 -0
- package/dist/src/onboarding/voyage-validate.js +85 -0
- package/dist/src/onboarding/voyage-validate.js.map +1 -0
- package/dist/src/providers/anthropic-digest.d.ts +23 -0
- package/dist/src/providers/anthropic-digest.d.ts.map +1 -0
- package/dist/src/providers/anthropic-digest.js +91 -0
- package/dist/src/providers/anthropic-digest.js.map +1 -0
- package/dist/src/providers/codex-cli-digest.d.ts +12 -0
- package/dist/src/providers/codex-cli-digest.d.ts.map +1 -0
- package/dist/src/providers/codex-cli-digest.js +70 -0
- package/dist/src/providers/codex-cli-digest.js.map +1 -0
- package/dist/src/providers/codex-cli-metadata-extraction.d.ts +14 -0
- package/dist/src/providers/codex-cli-metadata-extraction.d.ts.map +1 -0
- package/dist/src/providers/codex-cli-metadata-extraction.js +101 -0
- package/dist/src/providers/codex-cli-metadata-extraction.js.map +1 -0
- package/dist/src/providers/codex-cli-runner.d.ts +14 -0
- package/dist/src/providers/codex-cli-runner.d.ts.map +1 -0
- package/dist/src/providers/codex-cli-runner.js +272 -0
- package/dist/src/providers/codex-cli-runner.js.map +1 -0
- package/dist/src/providers/conversation-generation.d.ts +10 -0
- package/dist/src/providers/conversation-generation.d.ts.map +1 -0
- package/dist/src/providers/conversation-generation.js +54 -0
- package/dist/src/providers/conversation-generation.js.map +1 -0
- package/dist/src/providers/ollama-embed.d.ts +22 -0
- package/dist/src/providers/ollama-embed.d.ts.map +1 -0
- package/dist/src/providers/ollama-embed.js +133 -0
- package/dist/src/providers/ollama-embed.js.map +1 -0
- package/dist/src/providers/ollama.d.ts +42 -0
- package/dist/src/providers/ollama.d.ts.map +1 -0
- package/dist/src/providers/ollama.js +169 -0
- package/dist/src/providers/ollama.js.map +1 -0
- package/dist/src/providers/openai-metadata-extraction.d.ts +73 -0
- package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -0
- package/dist/src/providers/openai-metadata-extraction.js +161 -0
- package/dist/src/providers/openai-metadata-extraction.js.map +1 -0
- package/dist/src/providers/operator-overrides.d.ts +24 -0
- package/dist/src/providers/operator-overrides.d.ts.map +1 -0
- package/dist/src/providers/operator-overrides.js +84 -0
- package/dist/src/providers/operator-overrides.js.map +1 -0
- package/dist/src/providers/stub.d.ts +17 -0
- package/dist/src/providers/stub.d.ts.map +1 -0
- package/dist/src/providers/stub.js +72 -0
- package/dist/src/providers/stub.js.map +1 -0
- package/dist/src/providers/types.d.ts +82 -0
- package/dist/src/providers/types.d.ts.map +1 -0
- package/dist/src/providers/types.js +52 -0
- package/dist/src/providers/types.js.map +1 -0
- package/dist/src/providers/voyage.d.ts +23 -0
- package/dist/src/providers/voyage.d.ts.map +1 -0
- package/dist/src/providers/voyage.js +135 -0
- package/dist/src/providers/voyage.js.map +1 -0
- package/dist/src/retrieval/compact.d.ts +89 -0
- package/dist/src/retrieval/compact.d.ts.map +1 -0
- package/dist/src/retrieval/compact.js +348 -0
- package/dist/src/retrieval/compact.js.map +1 -0
- package/dist/src/retrieval/context-pack.d.ts +123 -0
- package/dist/src/retrieval/context-pack.d.ts.map +1 -0
- package/dist/src/retrieval/context-pack.js +553 -0
- package/dist/src/retrieval/context-pack.js.map +1 -0
- package/dist/src/retrieval/cwd.d.ts +25 -0
- package/dist/src/retrieval/cwd.d.ts.map +1 -0
- package/dist/src/retrieval/cwd.js +48 -0
- package/dist/src/retrieval/cwd.js.map +1 -0
- package/dist/src/retrieval/degraded.d.ts +20 -0
- package/dist/src/retrieval/degraded.d.ts.map +1 -0
- package/dist/src/retrieval/degraded.js +43 -0
- package/dist/src/retrieval/degraded.js.map +1 -0
- package/dist/src/retrieval/hybrid.d.ts +38 -0
- package/dist/src/retrieval/hybrid.d.ts.map +1 -0
- package/dist/src/retrieval/hybrid.js +82 -0
- package/dist/src/retrieval/hybrid.js.map +1 -0
- package/dist/src/retrieval/lexical.d.ts +28 -0
- package/dist/src/retrieval/lexical.d.ts.map +1 -0
- package/dist/src/retrieval/lexical.js +301 -0
- package/dist/src/retrieval/lexical.js.map +1 -0
- package/dist/src/retrieval/post-filter.d.ts +32 -0
- package/dist/src/retrieval/post-filter.d.ts.map +1 -0
- package/dist/src/retrieval/post-filter.js +57 -0
- package/dist/src/retrieval/post-filter.js.map +1 -0
- package/dist/src/retrieval/reranker.d.ts +72 -0
- package/dist/src/retrieval/reranker.d.ts.map +1 -0
- package/dist/src/retrieval/reranker.js +129 -0
- package/dist/src/retrieval/reranker.js.map +1 -0
- package/dist/src/retrieval/vector.d.ts +47 -0
- package/dist/src/retrieval/vector.d.ts.map +1 -0
- package/dist/src/retrieval/vector.js +112 -0
- package/dist/src/retrieval/vector.js.map +1 -0
- package/dist/src/runtime/legacy-migration.d.ts +27 -0
- package/dist/src/runtime/legacy-migration.d.ts.map +1 -0
- package/dist/src/runtime/legacy-migration.js +140 -0
- package/dist/src/runtime/legacy-migration.js.map +1 -0
- package/dist/src/runtime/legacy-name-guard.d.ts +35 -0
- package/dist/src/runtime/legacy-name-guard.d.ts.map +1 -0
- package/dist/src/runtime/legacy-name-guard.js +58 -0
- package/dist/src/runtime/legacy-name-guard.js.map +1 -0
- package/dist/src/runtime/rift-env.d.ts +14 -0
- package/dist/src/runtime/rift-env.d.ts.map +1 -0
- package/dist/src/runtime/rift-env.js +79 -0
- package/dist/src/runtime/rift-env.js.map +1 -0
- package/dist/src/runtime/watcher-startup.d.ts +2 -0
- package/dist/src/runtime/watcher-startup.d.ts.map +1 -0
- package/dist/src/runtime/watcher-startup.js +4 -0
- package/dist/src/runtime/watcher-startup.js.map +1 -0
- package/dist/src/security/archive.d.ts +23 -0
- package/dist/src/security/archive.d.ts.map +1 -0
- package/dist/src/security/archive.js +163 -0
- package/dist/src/security/archive.js.map +1 -0
- package/dist/src/security/paths.d.ts +21 -0
- package/dist/src/security/paths.d.ts.map +1 -0
- package/dist/src/security/paths.js +67 -0
- package/dist/src/security/paths.js.map +1 -0
- package/dist/src/server/app.d.ts +29 -0
- package/dist/src/server/app.d.ts.map +1 -0
- package/dist/src/server/app.js +226 -0
- package/dist/src/server/app.js.map +1 -0
- package/dist/src/server/build-info.d.ts +8 -0
- package/dist/src/server/build-info.d.ts.map +1 -0
- package/dist/src/server/build-info.js +61 -0
- package/dist/src/server/build-info.js.map +1 -0
- package/dist/src/server/lifecycle.d.ts +30 -0
- package/dist/src/server/lifecycle.d.ts.map +1 -0
- package/dist/src/server/lifecycle.js +59 -0
- package/dist/src/server/lifecycle.js.map +1 -0
- package/dist/src/server/middleware/multipart.d.ts +51 -0
- package/dist/src/server/middleware/multipart.d.ts.map +1 -0
- package/dist/src/server/middleware/multipart.js +86 -0
- package/dist/src/server/middleware/multipart.js.map +1 -0
- package/dist/src/server/routes/compact.d.ts +37 -0
- package/dist/src/server/routes/compact.d.ts.map +1 -0
- package/dist/src/server/routes/compact.js +77 -0
- package/dist/src/server/routes/compact.js.map +1 -0
- package/dist/src/server/routes/context.d.ts +5 -0
- package/dist/src/server/routes/context.d.ts.map +1 -0
- package/dist/src/server/routes/context.js +50 -0
- package/dist/src/server/routes/context.js.map +1 -0
- package/dist/src/server/routes/conversations-search.d.ts +4 -0
- package/dist/src/server/routes/conversations-search.d.ts.map +1 -0
- package/dist/src/server/routes/conversations-search.js +243 -0
- package/dist/src/server/routes/conversations-search.js.map +1 -0
- package/dist/src/server/routes/friend-status.d.ts +72 -0
- package/dist/src/server/routes/friend-status.d.ts.map +1 -0
- package/dist/src/server/routes/friend-status.js +71 -0
- package/dist/src/server/routes/friend-status.js.map +1 -0
- package/dist/src/server/routes/ingest.d.ts +15 -0
- package/dist/src/server/routes/ingest.d.ts.map +1 -0
- package/dist/src/server/routes/ingest.js +139 -0
- package/dist/src/server/routes/ingest.js.map +1 -0
- package/dist/src/server/routes/jobs.d.ts +10 -0
- package/dist/src/server/routes/jobs.d.ts.map +1 -0
- package/dist/src/server/routes/jobs.js +29 -0
- package/dist/src/server/routes/jobs.js.map +1 -0
- package/dist/src/server/routes/mcp-usage.d.ts +13 -0
- package/dist/src/server/routes/mcp-usage.d.ts.map +1 -0
- package/dist/src/server/routes/mcp-usage.js +17 -0
- package/dist/src/server/routes/mcp-usage.js.map +1 -0
- package/dist/src/server/routes/reconcile.d.ts +4 -0
- package/dist/src/server/routes/reconcile.d.ts.map +1 -0
- package/dist/src/server/routes/reconcile.js +43 -0
- package/dist/src/server/routes/reconcile.js.map +1 -0
- package/dist/src/server/routes/reindex.d.ts +4 -0
- package/dist/src/server/routes/reindex.d.ts.map +1 -0
- package/dist/src/server/routes/reindex.js +74 -0
- package/dist/src/server/routes/reindex.js.map +1 -0
- package/dist/src/server/routes/save.d.ts +40 -0
- package/dist/src/server/routes/save.d.ts.map +1 -0
- package/dist/src/server/routes/save.js +112 -0
- package/dist/src/server/routes/save.js.map +1 -0
- package/dist/src/server/routes/search.d.ts +5 -0
- package/dist/src/server/routes/search.d.ts.map +1 -0
- package/dist/src/server/routes/search.js +400 -0
- package/dist/src/server/routes/search.js.map +1 -0
- package/dist/src/server/routes/stats.d.ts +10 -0
- package/dist/src/server/routes/stats.d.ts.map +1 -0
- package/dist/src/server/routes/stats.js +15 -0
- package/dist/src/server/routes/stats.js.map +1 -0
- package/dist/src/server/routes/status.d.ts +20 -0
- package/dist/src/server/routes/status.d.ts.map +1 -0
- package/dist/src/server/routes/status.js +31 -0
- package/dist/src/server/routes/status.js.map +1 -0
- package/dist/src/server/routes/triage.d.ts +4 -0
- package/dist/src/server/routes/triage.d.ts.map +1 -0
- package/dist/src/server/routes/triage.js +94 -0
- package/dist/src/server/routes/triage.js.map +1 -0
- package/dist/src/server/save-quality.d.ts +21 -0
- package/dist/src/server/save-quality.d.ts.map +1 -0
- package/dist/src/server/save-quality.js +51 -0
- package/dist/src/server/save-quality.js.map +1 -0
- package/dist/src/storage/atomic.d.ts +8 -0
- package/dist/src/storage/atomic.d.ts.map +1 -0
- package/dist/src/storage/atomic.js +22 -0
- package/dist/src/storage/atomic.js.map +1 -0
- package/dist/src/storage/db.d.ts +15 -0
- package/dist/src/storage/db.d.ts.map +1 -0
- package/dist/src/storage/db.js +43 -0
- package/dist/src/storage/db.js.map +1 -0
- package/dist/src/storage/integrity.d.ts +11 -0
- package/dist/src/storage/integrity.d.ts.map +1 -0
- package/dist/src/storage/integrity.js +66 -0
- package/dist/src/storage/integrity.js.map +1 -0
- package/dist/src/storage/rebuild.d.ts +37 -0
- package/dist/src/storage/rebuild.d.ts.map +1 -0
- package/dist/src/storage/rebuild.js +353 -0
- package/dist/src/storage/rebuild.js.map +1 -0
- package/dist/src/storage/shadow-swap.d.ts +20 -0
- package/dist/src/storage/shadow-swap.d.ts.map +1 -0
- package/dist/src/storage/shadow-swap.js +163 -0
- package/dist/src/storage/shadow-swap.js.map +1 -0
- package/dist/src/storage/tables.d.ts +77 -0
- package/dist/src/storage/tables.d.ts.map +1 -0
- package/dist/src/storage/tables.js +196 -0
- package/dist/src/storage/tables.js.map +1 -0
- package/package.json +45 -14
- package/index.js +0 -3
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-batch cost ceiling and parallelism guard.
|
|
3
|
+
*
|
|
4
|
+
* Concurrency-safe by construction:
|
|
5
|
+
* - the budget reserves an estimate up-front (acquire), so two parallel
|
|
6
|
+
* callers can't both pass the cap by reading a stale "spent" total
|
|
7
|
+
* - each call returns its actual cost to its own reservation token;
|
|
8
|
+
* no shared mutable cost bucket on the provider
|
|
9
|
+
* - failed/aborted calls refund the reservation
|
|
10
|
+
*
|
|
11
|
+
* Cost-cap policy: fail-closed. Once a reservation pushes the running
|
|
12
|
+
* total past the cap, the budget is marked exceeded and refuses every
|
|
13
|
+
* subsequent reservation, even if currently-in-flight calls would have
|
|
14
|
+
* trued-up to less than reserved. Already-running calls finish.
|
|
15
|
+
*
|
|
16
|
+
* Concurrency policy: at most `maxParallel` triage calls are in flight.
|
|
17
|
+
* Excess callers wait FIFO.
|
|
18
|
+
*/
|
|
19
|
+
import { type TriageInput, type TriageProvider, type TriageResult } from "./triage-provider.js";
|
|
20
|
+
export interface TriageCost {
|
|
21
|
+
/** USD spent on this call. */
|
|
22
|
+
usd: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A provider that returns the cost of each call alongside the result.
|
|
26
|
+
*
|
|
27
|
+
* No shared mutable cost state between calls — this is the contract
|
|
28
|
+
* that makes concurrent budget enforcement correct.
|
|
29
|
+
*/
|
|
30
|
+
export interface CostReportingTriageProvider extends TriageProvider {
|
|
31
|
+
/**
|
|
32
|
+
* Worst-case USD cost for an upcoming call. Used at reservation
|
|
33
|
+
* time so the budget can fail-closed before any tokens are spent.
|
|
34
|
+
*/
|
|
35
|
+
estimateMaxCostUsd(input: TriageInput): number;
|
|
36
|
+
/**
|
|
37
|
+
* Run triage and return the result + the actual USD this call cost.
|
|
38
|
+
* Implementations MUST NOT share cost state across concurrent calls.
|
|
39
|
+
*/
|
|
40
|
+
triageWithCost(input: TriageInput): Promise<{
|
|
41
|
+
result: TriageResult;
|
|
42
|
+
cost: TriageCost;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Finalize an active reservation with the actual cost. Pass `0` to
|
|
47
|
+
* refund the full reservation (e.g. on a failed call, where no tokens
|
|
48
|
+
* were billed).
|
|
49
|
+
*/
|
|
50
|
+
export type ReservationToken = (actualUsd: number) => void;
|
|
51
|
+
export declare class BatchBudget {
|
|
52
|
+
readonly capUsd: number;
|
|
53
|
+
/** Reserved + actually spent. Never negative. */
|
|
54
|
+
private accounted;
|
|
55
|
+
private exceeded;
|
|
56
|
+
constructor(capUsd: number);
|
|
57
|
+
/**
|
|
58
|
+
* Reserve `estimateUsd` against the cap and return a finalize token.
|
|
59
|
+
*
|
|
60
|
+
* Throws BatchCostExceededError if the budget is already busted, or if
|
|
61
|
+
* adding this estimate would exceed the cap. Subsequent reservations
|
|
62
|
+
* after a breach are also refused (fail-closed).
|
|
63
|
+
*/
|
|
64
|
+
reserve(estimateUsd: number): ReservationToken;
|
|
65
|
+
get spent(): number;
|
|
66
|
+
get isExceeded(): boolean;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* FIFO semaphore. acquire() resolves when a slot is free; release()
|
|
70
|
+
* hands the slot to the next waiter.
|
|
71
|
+
*/
|
|
72
|
+
export declare class Semaphore {
|
|
73
|
+
readonly maxParallel: number;
|
|
74
|
+
private inFlight;
|
|
75
|
+
private waiters;
|
|
76
|
+
/** Peak concurrent in-flight count, for test assertions. */
|
|
77
|
+
peakInFlight: number;
|
|
78
|
+
constructor(maxParallel: number);
|
|
79
|
+
acquire(): Promise<void>;
|
|
80
|
+
release(): void;
|
|
81
|
+
get current(): number;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Wrap a CostReportingTriageProvider with a per-batch budget and
|
|
85
|
+
* parallelism cap. Returns a TriageProvider that reserves budget
|
|
86
|
+
* up-front, true-ups to actual cost on completion, and refunds on
|
|
87
|
+
* failure.
|
|
88
|
+
*/
|
|
89
|
+
export declare function withBatchGuards(provider: CostReportingTriageProvider, budget: BatchBudget, semaphore: Semaphore): TriageProvider;
|
|
90
|
+
//# sourceMappingURL=batch-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-budget.d.ts","sourceRoot":"","sources":["../../../src/capture/batch-budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,MAAM,WAAW,2BAA4B,SAAQ,cAAc;IACjE;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;IAE/C;;;OAGG;IACH,cAAc,CACZ,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAE3D,qBAAa,WAAW;aAKM,MAAM,EAAE,MAAM;IAJ1C,iDAAiD;IACjD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAS;gBAEG,MAAM,EAAE,MAAM;IAM1C;;;;;;OAMG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB;IA6B9C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;CACF;AAED;;;GAGG;AACH,qBAAa,SAAS;aAMQ,WAAW,EAAE,MAAM;IAL/C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAsB;IACrC,4DAA4D;IACrD,YAAY,SAAK;gBAEI,WAAW,EAAE,MAAM;IAMzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,OAAO,IAAI,IAAI;IAMf,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,SAAS,GACnB,cAAc,CA+BhB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-batch cost ceiling and parallelism guard.
|
|
3
|
+
*
|
|
4
|
+
* Concurrency-safe by construction:
|
|
5
|
+
* - the budget reserves an estimate up-front (acquire), so two parallel
|
|
6
|
+
* callers can't both pass the cap by reading a stale "spent" total
|
|
7
|
+
* - each call returns its actual cost to its own reservation token;
|
|
8
|
+
* no shared mutable cost bucket on the provider
|
|
9
|
+
* - failed/aborted calls refund the reservation
|
|
10
|
+
*
|
|
11
|
+
* Cost-cap policy: fail-closed. Once a reservation pushes the running
|
|
12
|
+
* total past the cap, the budget is marked exceeded and refuses every
|
|
13
|
+
* subsequent reservation, even if currently-in-flight calls would have
|
|
14
|
+
* trued-up to less than reserved. Already-running calls finish.
|
|
15
|
+
*
|
|
16
|
+
* Concurrency policy: at most `maxParallel` triage calls are in flight.
|
|
17
|
+
* Excess callers wait FIFO.
|
|
18
|
+
*/
|
|
19
|
+
import { BatchCostExceededError, BilledOpenAIError, } from "./triage-provider.js";
|
|
20
|
+
export class BatchBudget {
|
|
21
|
+
capUsd;
|
|
22
|
+
/** Reserved + actually spent. Never negative. */
|
|
23
|
+
accounted = 0;
|
|
24
|
+
exceeded = false;
|
|
25
|
+
constructor(capUsd) {
|
|
26
|
+
this.capUsd = capUsd;
|
|
27
|
+
if (capUsd <= 0) {
|
|
28
|
+
throw new Error("BatchBudget capUsd must be positive");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Reserve `estimateUsd` against the cap and return a finalize token.
|
|
33
|
+
*
|
|
34
|
+
* Throws BatchCostExceededError if the budget is already busted, or if
|
|
35
|
+
* adding this estimate would exceed the cap. Subsequent reservations
|
|
36
|
+
* after a breach are also refused (fail-closed).
|
|
37
|
+
*/
|
|
38
|
+
reserve(estimateUsd) {
|
|
39
|
+
if (this.exceeded) {
|
|
40
|
+
throw new BatchCostExceededError(`Batch cost cap exceeded — no new triage admitted (accounted $${this.accounted.toFixed(4)}, cap $${this.capUsd.toFixed(2)})`, this.accounted, this.capUsd);
|
|
41
|
+
}
|
|
42
|
+
const requested = Math.max(0, estimateUsd);
|
|
43
|
+
if (this.accounted + requested > this.capUsd) {
|
|
44
|
+
this.exceeded = true;
|
|
45
|
+
throw new BatchCostExceededError(`Batch cost cap would be exceeded (accounted $${this.accounted.toFixed(4)} + estimate $${requested.toFixed(4)} > cap $${this.capUsd.toFixed(2)})`, this.accounted, this.capUsd);
|
|
46
|
+
}
|
|
47
|
+
this.accounted += requested;
|
|
48
|
+
let finalized = false;
|
|
49
|
+
return (actualUsd) => {
|
|
50
|
+
if (finalized)
|
|
51
|
+
return;
|
|
52
|
+
finalized = true;
|
|
53
|
+
const delta = Math.max(0, actualUsd) - requested;
|
|
54
|
+
this.accounted += delta;
|
|
55
|
+
if (this.accounted < 0)
|
|
56
|
+
this.accounted = 0;
|
|
57
|
+
if (this.accounted > this.capUsd)
|
|
58
|
+
this.exceeded = true;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
get spent() {
|
|
62
|
+
return this.accounted;
|
|
63
|
+
}
|
|
64
|
+
get isExceeded() {
|
|
65
|
+
return this.exceeded;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* FIFO semaphore. acquire() resolves when a slot is free; release()
|
|
70
|
+
* hands the slot to the next waiter.
|
|
71
|
+
*/
|
|
72
|
+
export class Semaphore {
|
|
73
|
+
maxParallel;
|
|
74
|
+
inFlight = 0;
|
|
75
|
+
waiters = [];
|
|
76
|
+
/** Peak concurrent in-flight count, for test assertions. */
|
|
77
|
+
peakInFlight = 0;
|
|
78
|
+
constructor(maxParallel) {
|
|
79
|
+
this.maxParallel = maxParallel;
|
|
80
|
+
if (maxParallel <= 0) {
|
|
81
|
+
throw new Error("Semaphore maxParallel must be positive");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async acquire() {
|
|
85
|
+
if (this.inFlight < this.maxParallel) {
|
|
86
|
+
this.inFlight++;
|
|
87
|
+
if (this.inFlight > this.peakInFlight)
|
|
88
|
+
this.peakInFlight = this.inFlight;
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
await new Promise((resolve) => this.waiters.push(resolve));
|
|
92
|
+
this.inFlight++;
|
|
93
|
+
if (this.inFlight > this.peakInFlight)
|
|
94
|
+
this.peakInFlight = this.inFlight;
|
|
95
|
+
}
|
|
96
|
+
release() {
|
|
97
|
+
this.inFlight--;
|
|
98
|
+
const next = this.waiters.shift();
|
|
99
|
+
if (next)
|
|
100
|
+
next();
|
|
101
|
+
}
|
|
102
|
+
get current() {
|
|
103
|
+
return this.inFlight;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Wrap a CostReportingTriageProvider with a per-batch budget and
|
|
108
|
+
* parallelism cap. Returns a TriageProvider that reserves budget
|
|
109
|
+
* up-front, true-ups to actual cost on completion, and refunds on
|
|
110
|
+
* failure.
|
|
111
|
+
*/
|
|
112
|
+
export function withBatchGuards(provider, budget, semaphore) {
|
|
113
|
+
return {
|
|
114
|
+
async triage(input) {
|
|
115
|
+
// Reserve before launching: prevents over-admission under concurrency.
|
|
116
|
+
const finalize = budget.reserve(provider.estimateMaxCostUsd(input));
|
|
117
|
+
let actualUsd = 0;
|
|
118
|
+
try {
|
|
119
|
+
await semaphore.acquire();
|
|
120
|
+
try {
|
|
121
|
+
const { result, cost } = await provider.triageWithCost(input);
|
|
122
|
+
actualUsd = cost.usd;
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
semaphore.release();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
// BilledOpenAIError carries a cost the upstream API already
|
|
131
|
+
// charged us (200 + bad JSON). Retain that cost in the budget;
|
|
132
|
+
// refunding would silently let a malformed-response loop escape
|
|
133
|
+
// the cap. All other failures refund the full reservation.
|
|
134
|
+
if (err instanceof BilledOpenAIError) {
|
|
135
|
+
actualUsd = err.costUsd;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
actualUsd = 0;
|
|
139
|
+
}
|
|
140
|
+
throw err;
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
finalize(actualUsd);
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=batch-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-budget.js","sourceRoot":"","sources":["../../../src/capture/batch-budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type TriageInput, type TriageResult } from "./triage-provider.js";
|
|
2
|
+
import type { CostReportingTriageProvider, TriageCost } from "./batch-budget.js";
|
|
3
|
+
export declare class CodexCliTriageProvider implements CostReportingTriageProvider {
|
|
4
|
+
private readonly options;
|
|
5
|
+
constructor(options?: {
|
|
6
|
+
cwd?: string;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
});
|
|
9
|
+
estimateMaxCostUsd(_input: TriageInput): number;
|
|
10
|
+
triage(input: TriageInput): Promise<TriageResult>;
|
|
11
|
+
triageWithCost(input: TriageInput): Promise<{
|
|
12
|
+
result: TriageResult;
|
|
13
|
+
cost: TriageCost;
|
|
14
|
+
}>;
|
|
15
|
+
private runPrompt;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=codex-cli-triage-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-cli-triage-provider.d.ts","sourceRoot":"","sources":["../../../src/capture/codex-cli-triage-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EACV,2BAA2B,EAC3B,UAAU,EACX,MAAM,mBAAmB,CAAC;AAkD3B,qBAAa,sBAAuB,YAAW,2BAA2B;IAEtE,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,GAAE;QACxB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;KACf;IAGR,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAIzC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAKjD,cAAc,CAClB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;YA+BxC,SAAS;CAmCxB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { TRIAGE_VERSION, } from "./triage-provider.js";
|
|
2
|
+
import { scoreHistoricalTriage, } from "./triage-lane.js";
|
|
3
|
+
import { CODEX_CLI_OVERRIDE_MODEL, CODEX_CLI_OVERRIDE_PROVIDER, } from "../providers/operator-overrides.js";
|
|
4
|
+
import { runCodexCliJson } from "../providers/codex-cli-runner.js";
|
|
5
|
+
const TRIAGE_PROMPT = `You are a triage classifier for a personal knowledge base. Given a conversation between a user and an AI assistant, decide whether it should be saved to long-term memory.
|
|
6
|
+
|
|
7
|
+
Classify as one of:
|
|
8
|
+
- "save": Contains valuable decisions, technical knowledge, project context, personal insights, client work details, or reference-worthy information the user would want to recall later.
|
|
9
|
+
- "discard": Trivial, purely mechanical, repetitive, or contains no lasting value.
|
|
10
|
+
- "review": Borderline — might be valuable but you're not sure.
|
|
11
|
+
|
|
12
|
+
Return ONLY a JSON object matching the provided schema.
|
|
13
|
+
|
|
14
|
+
CONVERSATION:
|
|
15
|
+
`;
|
|
16
|
+
const TRIAGE_OUTPUT_SCHEMA = {
|
|
17
|
+
type: "object",
|
|
18
|
+
additionalProperties: false,
|
|
19
|
+
required: ["decision", "confidence", "summary", "topics", "rationale"],
|
|
20
|
+
properties: {
|
|
21
|
+
decision: {
|
|
22
|
+
type: "string",
|
|
23
|
+
enum: ["save", "discard", "review"],
|
|
24
|
+
},
|
|
25
|
+
confidence: {
|
|
26
|
+
type: "number",
|
|
27
|
+
minimum: 0,
|
|
28
|
+
maximum: 1,
|
|
29
|
+
},
|
|
30
|
+
summary: { type: "string" },
|
|
31
|
+
topics: {
|
|
32
|
+
type: "array",
|
|
33
|
+
items: { type: "string" },
|
|
34
|
+
},
|
|
35
|
+
rationale: { type: "string" },
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export class CodexCliTriageProvider {
|
|
39
|
+
options;
|
|
40
|
+
constructor(options = {}) {
|
|
41
|
+
this.options = options;
|
|
42
|
+
}
|
|
43
|
+
estimateMaxCostUsd(_input) {
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
async triage(input) {
|
|
47
|
+
const { result } = await this.triageWithCost(input);
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
async triageWithCost(input) {
|
|
51
|
+
const parsed = await this.runPrompt(input);
|
|
52
|
+
const scoring = scoreHistoricalTriage({
|
|
53
|
+
content: input.content,
|
|
54
|
+
decision: parsed.decision,
|
|
55
|
+
confidence: parsed.confidence,
|
|
56
|
+
summary: parsed.summary,
|
|
57
|
+
rationale: parsed.rationale,
|
|
58
|
+
topics: parsed.topics,
|
|
59
|
+
...(input.source ? { source: input.source } : {}),
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
result: {
|
|
63
|
+
decision: parsed.decision,
|
|
64
|
+
lane: scoring.lane,
|
|
65
|
+
confidence: parsed.confidence,
|
|
66
|
+
score: scoring.score,
|
|
67
|
+
summary: parsed.summary,
|
|
68
|
+
topics: parsed.topics,
|
|
69
|
+
rationale: parsed.rationale,
|
|
70
|
+
model: CODEX_CLI_OVERRIDE_MODEL,
|
|
71
|
+
provider: CODEX_CLI_OVERRIDE_PROVIDER,
|
|
72
|
+
version: TRIAGE_VERSION,
|
|
73
|
+
score_breakdown: scoring.debug.score_breakdown,
|
|
74
|
+
debug: scoring.debug,
|
|
75
|
+
},
|
|
76
|
+
cost: { usd: 0 },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async runPrompt(input) {
|
|
80
|
+
const prompt = `${TRIAGE_PROMPT}${input.content}`;
|
|
81
|
+
const { output } = await runCodexCliJson({
|
|
82
|
+
prompt,
|
|
83
|
+
schema: TRIAGE_OUTPUT_SCHEMA,
|
|
84
|
+
...(this.options.cwd ? { cwd: this.options.cwd } : {}),
|
|
85
|
+
...(this.options.timeoutMs
|
|
86
|
+
? { timeoutMs: this.options.timeoutMs }
|
|
87
|
+
: {}),
|
|
88
|
+
});
|
|
89
|
+
if (output.decision !== "save" &&
|
|
90
|
+
output.decision !== "discard" &&
|
|
91
|
+
output.decision !== "review") {
|
|
92
|
+
throw new Error(`Codex CLI returned invalid triage decision: ${String(output.decision)}`);
|
|
93
|
+
}
|
|
94
|
+
if (typeof output.confidence !== "number" ||
|
|
95
|
+
Number.isNaN(output.confidence) ||
|
|
96
|
+
output.confidence < 0 ||
|
|
97
|
+
output.confidence > 1) {
|
|
98
|
+
throw new Error(`Codex CLI returned invalid triage confidence: ${String(output.confidence)}`);
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
decision: output.decision,
|
|
102
|
+
confidence: output.confidence,
|
|
103
|
+
summary: String(output.summary ?? ""),
|
|
104
|
+
topics: Array.isArray(output.topics) ? output.topics.map(String) : [],
|
|
105
|
+
rationale: String(output.rationale ?? ""),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=codex-cli-triage-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-cli-triage-provider.js","sourceRoot":"","sources":["../../../src/capture/codex-cli-triage-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AutoCaptureSource, CaptureReport, CaptureSourceCounts } from "./auto-capture.js";
|
|
2
|
+
export declare const AUTO_CAPTURE_RUNS_FILE = "auto-capture-runs.jsonl";
|
|
3
|
+
export declare const AUTO_CAPTURE_RUNS_MAX_LINES = 1000;
|
|
4
|
+
export interface AutoCaptureRunError {
|
|
5
|
+
sessionId: string;
|
|
6
|
+
source?: AutoCaptureSource;
|
|
7
|
+
error: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AutoCaptureRunRecord {
|
|
10
|
+
timestamp: string;
|
|
11
|
+
enabled_sources: AutoCaptureSource[];
|
|
12
|
+
run_ok: boolean;
|
|
13
|
+
preflight_ok: boolean;
|
|
14
|
+
duration_ms: number;
|
|
15
|
+
counts_by_source: Partial<Record<AutoCaptureSource, CaptureSourceCounts>>;
|
|
16
|
+
errors: AutoCaptureRunError[];
|
|
17
|
+
run_error?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AutoCaptureSourceSuccess {
|
|
20
|
+
timestamp: string;
|
|
21
|
+
saved: number;
|
|
22
|
+
review: number;
|
|
23
|
+
discarded: number;
|
|
24
|
+
new: number;
|
|
25
|
+
}
|
|
26
|
+
export interface AutoCaptureRunSummary {
|
|
27
|
+
last_run: AutoCaptureRunRecord | null;
|
|
28
|
+
last_success_by_source: Partial<Record<AutoCaptureSource, AutoCaptureSourceSuccess | null>>;
|
|
29
|
+
}
|
|
30
|
+
export declare function autoCaptureRunsPath(dataDir: string): string;
|
|
31
|
+
export declare function buildAutoCaptureRunRecord(opts: {
|
|
32
|
+
timestamp: string;
|
|
33
|
+
enabledSources: AutoCaptureSource[];
|
|
34
|
+
durationMs: number;
|
|
35
|
+
report: CaptureReport;
|
|
36
|
+
}): AutoCaptureRunRecord;
|
|
37
|
+
export declare function appendAutoCaptureRunRecord(dataDir: string, record: AutoCaptureRunRecord, maxLines?: number): Promise<void>;
|
|
38
|
+
export declare function readAutoCaptureRunRecords(dataDir: string): AutoCaptureRunRecord[];
|
|
39
|
+
export declare function summarizeAutoCaptureRuns(records: AutoCaptureRunRecord[], sources?: AutoCaptureSource[]): AutoCaptureRunSummary;
|
|
40
|
+
export declare function readAutoCaptureRunSummary(dataDir: string, sources?: AutoCaptureSource[]): AutoCaptureRunSummary;
|
|
41
|
+
export declare function formatAutoCaptureSummary(summary: AutoCaptureRunSummary): string;
|
|
42
|
+
//# sourceMappingURL=observability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../src/capture/observability.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAG3B,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAChE,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC1E,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtC,sBAAsB,EAAE,OAAO,CAC7B,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,CAAC,CAC3D,CAAC;CACH;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC;CACvB,GAAG,oBAAoB,CAgBvB;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,SAA8B,GACrC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GACd,oBAAoB,EAAE,CAQxB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,oBAAoB,EAAE,EAC/B,OAAO,GAAE,iBAAiB,EAAiC,GAC1D,qBAAqB,CAyBvB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,iBAAiB,EAAiC,GAC1D,qBAAqB,CAEvB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAW/E"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { atomicWrite } from "../storage/atomic.js";
|
|
4
|
+
import { DEFAULT_AUTO_CAPTURE_SOURCES } from "./sources.js";
|
|
5
|
+
export const AUTO_CAPTURE_RUNS_FILE = "auto-capture-runs.jsonl";
|
|
6
|
+
export const AUTO_CAPTURE_RUNS_MAX_LINES = 1000;
|
|
7
|
+
export function autoCaptureRunsPath(dataDir) {
|
|
8
|
+
return path.join(dataDir, "observability", AUTO_CAPTURE_RUNS_FILE);
|
|
9
|
+
}
|
|
10
|
+
export function buildAutoCaptureRunRecord(opts) {
|
|
11
|
+
return {
|
|
12
|
+
timestamp: opts.timestamp,
|
|
13
|
+
enabled_sources: opts.enabledSources,
|
|
14
|
+
// If runAutoCapture returned a report, the run completed. The daemon's
|
|
15
|
+
// catch-all path is the only place that writes run_ok: false.
|
|
16
|
+
run_ok: true,
|
|
17
|
+
preflight_ok: opts.report.preflight_ok,
|
|
18
|
+
duration_ms: opts.durationMs,
|
|
19
|
+
counts_by_source: opts.report.counts_by_source,
|
|
20
|
+
errors: opts.report.error_details.map((err) => ({
|
|
21
|
+
sessionId: err.sessionId,
|
|
22
|
+
...(err.source ? { source: err.source } : {}),
|
|
23
|
+
error: err.error,
|
|
24
|
+
})),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export async function appendAutoCaptureRunRecord(dataDir, record, maxLines = AUTO_CAPTURE_RUNS_MAX_LINES) {
|
|
28
|
+
const filePath = autoCaptureRunsPath(dataDir);
|
|
29
|
+
// Invariant: daemon capture is the only writer today. Keep the capped
|
|
30
|
+
// read/modify/write path simple until another writer is introduced.
|
|
31
|
+
const lines = fs.existsSync(filePath)
|
|
32
|
+
? fs.readFileSync(filePath, "utf-8").split("\n").filter(Boolean)
|
|
33
|
+
: [];
|
|
34
|
+
lines.push(JSON.stringify(record));
|
|
35
|
+
const capped = lines.slice(-maxLines);
|
|
36
|
+
await atomicWrite(filePath, `${capped.join("\n")}\n`);
|
|
37
|
+
}
|
|
38
|
+
export function readAutoCaptureRunRecords(dataDir) {
|
|
39
|
+
const filePath = autoCaptureRunsPath(dataDir);
|
|
40
|
+
if (!fs.existsSync(filePath))
|
|
41
|
+
return [];
|
|
42
|
+
return fs
|
|
43
|
+
.readFileSync(filePath, "utf-8")
|
|
44
|
+
.split("\n")
|
|
45
|
+
.filter(Boolean)
|
|
46
|
+
.map((line) => JSON.parse(line));
|
|
47
|
+
}
|
|
48
|
+
export function summarizeAutoCaptureRuns(records, sources = DEFAULT_AUTO_CAPTURE_SOURCES) {
|
|
49
|
+
const lastSuccess = {};
|
|
50
|
+
for (const source of sources) {
|
|
51
|
+
lastSuccess[source] = null;
|
|
52
|
+
}
|
|
53
|
+
for (const record of records) {
|
|
54
|
+
if (record.run_ok === false)
|
|
55
|
+
continue;
|
|
56
|
+
for (const source of sources) {
|
|
57
|
+
const counts = record.counts_by_source[source];
|
|
58
|
+
if (!counts || counts.saved <= 0)
|
|
59
|
+
continue;
|
|
60
|
+
lastSuccess[source] = {
|
|
61
|
+
timestamp: record.timestamp,
|
|
62
|
+
saved: counts.saved,
|
|
63
|
+
review: counts.review,
|
|
64
|
+
discarded: counts.discarded,
|
|
65
|
+
new: counts.new,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
last_run: records.at(-1) ?? null,
|
|
71
|
+
last_success_by_source: lastSuccess,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function readAutoCaptureRunSummary(dataDir, sources = DEFAULT_AUTO_CAPTURE_SOURCES) {
|
|
75
|
+
return summarizeAutoCaptureRuns(readAutoCaptureRunRecords(dataDir), sources);
|
|
76
|
+
}
|
|
77
|
+
export function formatAutoCaptureSummary(summary) {
|
|
78
|
+
const lines = ["", "## Auto-capture"];
|
|
79
|
+
lines.push(`- last run: ${summary.last_run?.timestamp ?? "none"}`);
|
|
80
|
+
for (const [source, success] of Object.entries(summary.last_success_by_source)) {
|
|
81
|
+
lines.push(success
|
|
82
|
+
? `- ${source}: last successful save ${success.timestamp} (${success.saved} saved, ${success.new} new)`
|
|
83
|
+
: `- ${source}: no successful saves recorded`);
|
|
84
|
+
}
|
|
85
|
+
return lines.join("\n");
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../../../src/capture/observability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI-backed triage provider.
|
|
3
|
+
*
|
|
4
|
+
* Locked model family:
|
|
5
|
+
* - cheap (default): gpt-5.4-nano
|
|
6
|
+
* - escalation: gpt-5.4-mini
|
|
7
|
+
*
|
|
8
|
+
* Two-tier strategy:
|
|
9
|
+
* 1. Always call cheap first.
|
|
10
|
+
* 2. Escalate to mini when:
|
|
11
|
+
* - cheap result confidence < 0.7, OR
|
|
12
|
+
* - input length > 8000 chars
|
|
13
|
+
* 3. If escalation fails, fall back to the cheap result so the batch
|
|
14
|
+
* doesn't lose work over a single transient API blip.
|
|
15
|
+
*
|
|
16
|
+
* The provider implements CostReportingTriageProvider so a BatchBudget
|
|
17
|
+
* can true-up spend after each call.
|
|
18
|
+
*/
|
|
19
|
+
import { type TriageInput, type TriageResult } from "./triage-provider.js";
|
|
20
|
+
import type { CostReportingTriageProvider, TriageCost } from "./batch-budget.js";
|
|
21
|
+
/** Confidence threshold below which the cheap model escalates. */
|
|
22
|
+
export declare const ESCALATION_CONFIDENCE = 0.7;
|
|
23
|
+
/** Input length above which the cheap model always escalates. */
|
|
24
|
+
export declare const HIGH_VALUE_LENGTH = 8000;
|
|
25
|
+
/** Locked default models for the OpenAI runtime. */
|
|
26
|
+
export declare const DEFAULT_CHEAP_MODEL = "gpt-5.4-nano";
|
|
27
|
+
export declare const DEFAULT_ESCALATION_MODEL = "gpt-5.4-mini";
|
|
28
|
+
/**
|
|
29
|
+
* Per-1k-token USD pricing. Values are best-effort defaults; can be
|
|
30
|
+
* overridden via `pricing` for tests or future re-pricing.
|
|
31
|
+
*/
|
|
32
|
+
export interface ModelPricing {
|
|
33
|
+
inputPer1k: number;
|
|
34
|
+
outputPer1k: number;
|
|
35
|
+
}
|
|
36
|
+
export declare const DEFAULT_PRICING: Record<string, ModelPricing>;
|
|
37
|
+
/**
|
|
38
|
+
* Fetch dependency, broken out so tests can swap in a mock without
|
|
39
|
+
* monkey-patching the global. Matches the standard `fetch` signature.
|
|
40
|
+
*/
|
|
41
|
+
export type FetchFn = (input: string, init?: {
|
|
42
|
+
method?: string;
|
|
43
|
+
headers?: Record<string, string>;
|
|
44
|
+
body?: string;
|
|
45
|
+
signal?: AbortSignal;
|
|
46
|
+
}) => Promise<{
|
|
47
|
+
ok: boolean;
|
|
48
|
+
status: number;
|
|
49
|
+
text(): Promise<string>;
|
|
50
|
+
json(): Promise<unknown>;
|
|
51
|
+
}>;
|
|
52
|
+
export interface OpenAIProviderOptions {
|
|
53
|
+
/** Resolves the API key — typically a Keychain read. Called lazily, once. */
|
|
54
|
+
apiKey: () => Promise<string>;
|
|
55
|
+
cheapModel?: string;
|
|
56
|
+
escalationModel?: string;
|
|
57
|
+
baseUrl?: string;
|
|
58
|
+
requestTimeoutMs?: number;
|
|
59
|
+
pricing?: Record<string, ModelPricing>;
|
|
60
|
+
fetchImpl?: FetchFn;
|
|
61
|
+
}
|
|
62
|
+
export declare class OpenAITriageProvider implements CostReportingTriageProvider {
|
|
63
|
+
private readonly cheapModel;
|
|
64
|
+
private readonly escalationModel;
|
|
65
|
+
private readonly baseUrl;
|
|
66
|
+
private readonly requestTimeoutMs;
|
|
67
|
+
private readonly pricing;
|
|
68
|
+
private readonly fetchImpl;
|
|
69
|
+
private readonly apiKeyResolver;
|
|
70
|
+
private keyPromise;
|
|
71
|
+
constructor(opts: OpenAIProviderOptions);
|
|
72
|
+
/** Pre-flight max-cost estimate. Uses the escalation model upper bound. */
|
|
73
|
+
estimateMaxCostUsd(input: TriageInput): number;
|
|
74
|
+
/** Convenience wrapper for callers that don't need cost reporting. */
|
|
75
|
+
triage(input: TriageInput): Promise<TriageResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Run triage and return the result + actual cost incurred. All cost
|
|
78
|
+
* accounting is local to this call; concurrent invocations don't share
|
|
79
|
+
* any mutable state.
|
|
80
|
+
*/
|
|
81
|
+
triageWithCost(input: TriageInput): Promise<{
|
|
82
|
+
result: TriageResult;
|
|
83
|
+
cost: TriageCost;
|
|
84
|
+
}>;
|
|
85
|
+
private callOnce;
|
|
86
|
+
/**
|
|
87
|
+
* Resolve the API key once and share the in-flight promise across
|
|
88
|
+
* concurrent callers, so the Keychain isn't hit N times under load.
|
|
89
|
+
*/
|
|
90
|
+
private resolveKey;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=openai-triage-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-triage-provider.d.ts","sourceRoot":"","sources":["../../../src/capture/openai-triage-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EACV,2BAA2B,EAC3B,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,oDAAoD;AACpD,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAClD,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAKvD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAGxD,CAAC;AAwCF;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CACpB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC9F,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAEjG,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,oBAAqB,YAAW,2BAA2B;IACtE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,UAAU,CAAgC;gBAEtC,IAAI,EAAE,qBAAqB;IAUvC,2EAA2E;IAC3E,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM;IAsB9C,sEAAsE;IAChE,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAKvD;;;;OAIG;IACG,cAAc,CAClB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;YAiDxC,QAAQ;IA2FtB;;;OAGG;IACH,OAAO,CAAC,UAAU;CAUnB"}
|