@aligndottech/cli 0.49.0 → 0.51.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.md +5 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +32 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +4 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +18 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +33 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connect-agents.d.ts.map +1 -1
- package/dist/commands/connect-agents.js +3 -1
- package/dist/commands/connect-agents.js.map +1 -1
- package/dist/commands/connect.d.ts +5 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +24 -0
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +11 -0
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/import/confluence.d.ts.map +1 -1
- package/dist/commands/import/confluence.js +24 -5
- package/dist/commands/import/confluence.js.map +1 -1
- package/dist/commands/import/docs.js +2 -2
- package/dist/commands/import/git.d.ts.map +1 -1
- package/dist/commands/import/git.js +15 -5
- package/dist/commands/import/git.js.map +1 -1
- package/dist/commands/import/github.d.ts.map +1 -1
- package/dist/commands/import/github.js +34 -7
- package/dist/commands/import/github.js.map +1 -1
- package/dist/commands/import/gitlab.d.ts.map +1 -1
- package/dist/commands/import/gitlab.js +10 -5
- package/dist/commands/import/gitlab.js.map +1 -1
- package/dist/commands/import/jira.d.ts.map +1 -1
- package/dist/commands/import/jira.js +10 -5
- package/dist/commands/import/jira.js.map +1 -1
- package/dist/commands/import/linear.d.ts.map +1 -1
- package/dist/commands/import/linear.js +10 -5
- package/dist/commands/import/linear.js.map +1 -1
- package/dist/commands/import/notion.d.ts.map +1 -1
- package/dist/commands/import/notion.js +10 -5
- package/dist/commands/import/notion.js.map +1 -1
- package/dist/commands/import/sessions.js +2 -2
- package/dist/commands/import/slack.d.ts.map +1 -1
- package/dist/commands/import/slack.js +12 -7
- package/dist/commands/import/slack.js.map +1 -1
- package/dist/commands/import/teams.d.ts.map +1 -1
- package/dist/commands/import/teams.js +10 -5
- package/dist/commands/import/teams.js.map +1 -1
- package/dist/commands/import/zoom.d.ts.map +1 -1
- package/dist/commands/import/zoom.js +10 -5
- package/dist/commands/import/zoom.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +43 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/invite.d.ts +8 -18
- package/dist/commands/invite.d.ts.map +1 -1
- package/dist/commands/invite.js +23 -46
- package/dist/commands/invite.js.map +1 -1
- package/dist/commands/join.d.ts +5 -0
- package/dist/commands/join.d.ts.map +1 -0
- package/dist/commands/join.js +49 -0
- package/dist/commands/join.js.map +1 -0
- package/dist/commands/local-relink.d.ts +35 -0
- package/dist/commands/local-relink.d.ts.map +1 -0
- package/dist/commands/local-relink.js +72 -0
- package/dist/commands/local-relink.js.map +1 -0
- package/dist/commands/local.d.ts.map +1 -1
- package/dist/commands/local.js +113 -4
- package/dist/commands/local.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +21 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mark.d.ts +37 -0
- package/dist/commands/mark.d.ts.map +1 -0
- package/dist/commands/mark.js +105 -0
- package/dist/commands/mark.js.map +1 -0
- package/dist/commands/mcp.d.ts +149 -2
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +80 -15
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +12 -2
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/setup.d.ts +39 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +65 -50
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/share.d.ts +7 -0
- package/dist/commands/share.d.ts.map +1 -0
- package/dist/commands/share.js +129 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +55 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +278 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/telemetry.d.ts +3 -3
- package/dist/commands/telemetry.js +6 -6
- package/dist/commands/telemetry.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +6 -1
- package/dist/commands/why.js.map +1 -1
- package/dist/detector/detector-version.d.ts +16 -0
- package/dist/detector/detector-version.d.ts.map +1 -0
- package/dist/detector/detector-version.js +36 -0
- package/dist/detector/detector-version.js.map +1 -0
- package/dist/detector/relationship-contract.d.ts +30 -0
- package/dist/detector/relationship-contract.d.ts.map +1 -0
- package/dist/detector/relationship-contract.js +120 -0
- package/dist/detector/relationship-contract.js.map +1 -0
- package/dist/detector/relationship-contract.v1.json +53 -0
- package/dist/detector/relationship-prompt.d.ts +20 -0
- package/dist/detector/relationship-prompt.d.ts.map +1 -0
- package/dist/detector/relationship-prompt.js +55 -0
- package/dist/detector/relationship-prompt.js.map +1 -0
- package/dist/detector/relationship-prompt.v1.json +13 -0
- package/dist/detector/resolve-pair.d.ts +39 -0
- package/dist/detector/resolve-pair.d.ts.map +1 -0
- package/dist/detector/resolve-pair.js +345 -0
- package/dist/detector/resolve-pair.js.map +1 -0
- package/dist/detector/similar-item.d.ts +20 -0
- package/dist/detector/similar-item.d.ts.map +1 -0
- package/dist/detector/similar-item.js +16 -0
- package/dist/detector/similar-item.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/advisory-dedup.d.ts.map +1 -1
- package/dist/lib/advisory-dedup.js +16 -8
- package/dist/lib/advisory-dedup.js.map +1 -1
- package/dist/lib/advisory-verdict.d.ts +19 -0
- package/dist/lib/advisory-verdict.d.ts.map +1 -1
- package/dist/lib/advisory-verdict.js +6 -3
- package/dist/lib/advisory-verdict.js.map +1 -1
- package/dist/lib/backfill-state.d.ts +116 -0
- package/dist/lib/backfill-state.d.ts.map +1 -0
- package/dist/lib/backfill-state.js +342 -0
- package/dist/lib/backfill-state.js.map +1 -0
- package/dist/lib/backup-copy.d.ts +17 -0
- package/dist/lib/backup-copy.d.ts.map +1 -0
- package/dist/lib/backup-copy.js +13 -0
- package/dist/lib/backup-copy.js.map +1 -0
- package/dist/lib/backup-exclusion.d.ts +10 -0
- package/dist/lib/backup-exclusion.d.ts.map +1 -0
- package/dist/lib/backup-exclusion.js +58 -0
- package/dist/lib/backup-exclusion.js.map +1 -0
- package/dist/lib/capture-report.d.ts +22 -18
- package/dist/lib/capture-report.d.ts.map +1 -1
- package/dist/lib/capture-report.js +64 -2
- package/dist/lib/capture-report.js.map +1 -1
- package/dist/lib/cli-oauth.d.ts +2 -0
- package/dist/lib/cli-oauth.d.ts.map +1 -1
- package/dist/lib/cli-oauth.js +61 -10
- package/dist/lib/cli-oauth.js.map +1 -1
- package/dist/lib/config.d.ts +72 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +245 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/confirm-timeout.d.ts +8 -0
- package/dist/lib/confirm-timeout.d.ts.map +1 -0
- package/dist/lib/confirm-timeout.js +18 -0
- package/dist/lib/confirm-timeout.js.map +1 -0
- package/dist/lib/curation/check-marks.d.ts +48 -0
- package/dist/lib/curation/check-marks.d.ts.map +1 -0
- package/dist/lib/curation/check-marks.js +81 -0
- package/dist/lib/curation/check-marks.js.map +1 -0
- package/dist/lib/curation/guardrail.d.ts +39 -0
- package/dist/lib/curation/guardrail.d.ts.map +1 -0
- package/dist/lib/curation/guardrail.js +95 -0
- package/dist/lib/curation/guardrail.js.map +1 -0
- package/dist/lib/curation/judge.d.ts +3 -0
- package/dist/lib/curation/judge.d.ts.map +1 -0
- package/dist/lib/curation/judge.js +9 -0
- package/dist/lib/curation/judge.js.map +1 -0
- package/dist/lib/curation/judgements-db.d.ts +97 -0
- package/dist/lib/curation/judgements-db.d.ts.map +1 -0
- package/dist/lib/curation/judgements-db.js +206 -0
- package/dist/lib/curation/judgements-db.js.map +1 -0
- package/dist/lib/curation/last-check.d.ts +32 -0
- package/dist/lib/curation/last-check.d.ts.map +1 -0
- package/dist/lib/curation/last-check.js +81 -0
- package/dist/lib/curation/last-check.js.map +1 -0
- package/dist/lib/curation/mark.d.ts +76 -0
- package/dist/lib/curation/mark.d.ts.map +1 -0
- package/dist/lib/curation/mark.js +361 -0
- package/dist/lib/curation/mark.js.map +1 -0
- package/dist/lib/curation/text.d.ts +6 -0
- package/dist/lib/curation/text.d.ts.map +1 -0
- package/dist/lib/curation/text.js +35 -0
- package/dist/lib/curation/text.js.map +1 -0
- package/dist/lib/destination-name.d.ts +24 -0
- package/dist/lib/destination-name.d.ts.map +1 -0
- package/dist/lib/destination-name.js +39 -0
- package/dist/lib/destination-name.js.map +1 -0
- package/dist/lib/destination-summary.d.ts +6 -0
- package/dist/lib/destination-summary.d.ts.map +1 -0
- package/dist/lib/destination-summary.js +27 -0
- package/dist/lib/destination-summary.js.map +1 -0
- package/dist/lib/destination-trust.d.ts +54 -0
- package/dist/lib/destination-trust.d.ts.map +1 -0
- package/dist/lib/destination-trust.js +107 -0
- package/dist/lib/destination-trust.js.map +1 -0
- package/dist/lib/env-resolver.d.ts.map +1 -1
- package/dist/lib/env-resolver.js +3 -0
- package/dist/lib/env-resolver.js.map +1 -1
- package/dist/lib/fatal.d.ts +11 -0
- package/dist/lib/fatal.d.ts.map +1 -0
- package/dist/lib/fatal.js +22 -0
- package/dist/lib/fatal.js.map +1 -0
- package/dist/lib/fetchers/capture.d.ts +49 -2
- package/dist/lib/fetchers/capture.d.ts.map +1 -1
- package/dist/lib/fetchers/capture.js +7 -1
- package/dist/lib/fetchers/capture.js.map +1 -1
- package/dist/lib/fetchers/confluence.d.ts +2 -2
- package/dist/lib/fetchers/confluence.d.ts.map +1 -1
- package/dist/lib/fetchers/confluence.js.map +1 -1
- package/dist/lib/fetchers/git.d.ts +1 -0
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +3 -1
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/fetchers/github.d.ts +44 -5
- package/dist/lib/fetchers/github.d.ts.map +1 -1
- package/dist/lib/fetchers/github.js +122 -5
- package/dist/lib/fetchers/github.js.map +1 -1
- package/dist/lib/fetchers/gitlab.d.ts +2 -2
- package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
- package/dist/lib/fetchers/gitlab.js.map +1 -1
- package/dist/lib/fetchers/jira.d.ts +2 -2
- package/dist/lib/fetchers/jira.d.ts.map +1 -1
- package/dist/lib/fetchers/jira.js.map +1 -1
- package/dist/lib/fetchers/linear.d.ts +2 -2
- package/dist/lib/fetchers/linear.d.ts.map +1 -1
- package/dist/lib/fetchers/linear.js.map +1 -1
- package/dist/lib/fetchers/notion.d.ts +2 -2
- package/dist/lib/fetchers/notion.d.ts.map +1 -1
- package/dist/lib/fetchers/notion.js.map +1 -1
- package/dist/lib/fetchers/slack.d.ts +2 -3
- package/dist/lib/fetchers/slack.d.ts.map +1 -1
- package/dist/lib/fetchers/slack.js.map +1 -1
- package/dist/lib/fetchers/teams.d.ts +2 -2
- package/dist/lib/fetchers/teams.d.ts.map +1 -1
- package/dist/lib/fetchers/teams.js.map +1 -1
- package/dist/lib/fetchers/zoom.d.ts +2 -2
- package/dist/lib/fetchers/zoom.d.ts.map +1 -1
- package/dist/lib/fetchers/zoom.js.map +1 -1
- package/dist/lib/gateway-client.d.ts +40 -14
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +47 -19
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/github-text.d.ts +3 -0
- package/dist/lib/github-text.d.ts.map +1 -0
- package/dist/lib/github-text.js +18 -0
- package/dist/lib/github-text.js.map +1 -0
- package/dist/lib/hook-context.d.ts +10 -0
- package/dist/lib/hook-context.d.ts.map +1 -1
- package/dist/lib/hook-context.js +14 -0
- package/dist/lib/hook-context.js.map +1 -1
- package/dist/lib/import-defaults.d.ts +39 -23
- package/dist/lib/import-defaults.d.ts.map +1 -1
- package/dist/lib/import-defaults.js +28 -26
- package/dist/lib/import-defaults.js.map +1 -1
- package/dist/lib/invite-prompt.d.ts +4 -4
- package/dist/lib/invite-prompt.d.ts.map +1 -1
- package/dist/lib/invite-prompt.js +4 -4
- package/dist/lib/invite-prompt.js.map +1 -1
- package/dist/lib/invite-settings.d.ts +18 -0
- package/dist/lib/invite-settings.d.ts.map +1 -0
- package/dist/lib/invite-settings.js +29 -0
- package/dist/lib/invite-settings.js.map +1 -0
- package/dist/lib/join-flow.d.ts +60 -0
- package/dist/lib/join-flow.d.ts.map +1 -0
- package/dist/lib/join-flow.js +282 -0
- package/dist/lib/join-flow.js.map +1 -0
- package/dist/lib/launch/adapters/aider.d.ts +17 -0
- package/dist/lib/launch/adapters/aider.d.ts.map +1 -0
- package/dist/lib/launch/adapters/aider.js +30 -0
- package/dist/lib/launch/adapters/aider.js.map +1 -0
- package/dist/lib/launch/adapters/auggie.d.ts +18 -0
- package/dist/lib/launch/adapters/auggie.d.ts.map +1 -0
- package/dist/lib/launch/adapters/auggie.js +34 -0
- package/dist/lib/launch/adapters/auggie.js.map +1 -0
- package/dist/lib/launch/adapters/cline.d.ts +10 -0
- package/dist/lib/launch/adapters/cline.d.ts.map +1 -0
- package/dist/lib/launch/adapters/cline.js +41 -0
- package/dist/lib/launch/adapters/cline.js.map +1 -0
- package/dist/lib/launch/adapters/continue.d.ts +22 -0
- package/dist/lib/launch/adapters/continue.d.ts.map +1 -0
- package/dist/lib/launch/adapters/continue.js +46 -0
- package/dist/lib/launch/adapters/continue.js.map +1 -0
- package/dist/lib/launch/adapters/gemini-cli.d.ts +13 -14
- package/dist/lib/launch/adapters/gemini-cli.d.ts.map +1 -1
- package/dist/lib/launch/adapters/gemini-cli.js +38 -53
- package/dist/lib/launch/adapters/gemini-cli.js.map +1 -1
- package/dist/lib/launch/adapters/goose.d.ts +20 -0
- package/dist/lib/launch/adapters/goose.d.ts.map +1 -0
- package/dist/lib/launch/adapters/goose.js +47 -0
- package/dist/lib/launch/adapters/goose.js.map +1 -0
- package/dist/lib/launch/adapters/notes.d.ts +7 -0
- package/dist/lib/launch/adapters/notes.d.ts.map +1 -0
- package/dist/lib/launch/adapters/notes.js +5 -0
- package/dist/lib/launch/adapters/notes.js.map +1 -0
- package/dist/lib/launch/agents.d.ts +2 -0
- package/dist/lib/launch/agents.d.ts.map +1 -1
- package/dist/lib/launch/agents.js +3 -1
- package/dist/lib/launch/agents.js.map +1 -1
- package/dist/lib/launch/auggie-state.d.ts +25 -0
- package/dist/lib/launch/auggie-state.d.ts.map +1 -0
- package/dist/lib/launch/auggie-state.js +74 -0
- package/dist/lib/launch/auggie-state.js.map +1 -0
- package/dist/lib/launch/cline-state.d.ts +32 -0
- package/dist/lib/launch/cline-state.d.ts.map +1 -0
- package/dist/lib/launch/cline-state.js +108 -0
- package/dist/lib/launch/cline-state.js.map +1 -0
- package/dist/lib/launch/config-writes.d.ts +4 -0
- package/dist/lib/launch/config-writes.d.ts.map +1 -1
- package/dist/lib/launch/config-writes.js +8 -3
- package/dist/lib/launch/config-writes.js.map +1 -1
- package/dist/lib/launch/continue-state.d.ts +41 -0
- package/dist/lib/launch/continue-state.d.ts.map +1 -0
- package/dist/lib/launch/continue-state.js +142 -0
- package/dist/lib/launch/continue-state.js.map +1 -0
- package/dist/lib/launch/detect.d.ts.map +1 -1
- package/dist/lib/launch/detect.js +3 -1
- package/dist/lib/launch/detect.js.map +1 -1
- package/dist/lib/launch/gemini-state.d.ts +26 -20
- package/dist/lib/launch/gemini-state.d.ts.map +1 -1
- package/dist/lib/launch/gemini-state.js +95 -37
- package/dist/lib/launch/gemini-state.js.map +1 -1
- package/dist/lib/launch/gemini-system-file.d.ts +17 -0
- package/dist/lib/launch/gemini-system-file.d.ts.map +1 -0
- package/dist/lib/launch/gemini-system-file.js +55 -0
- package/dist/lib/launch/gemini-system-file.js.map +1 -0
- package/dist/lib/launch/gemini-trust.d.ts +3 -1
- package/dist/lib/launch/gemini-trust.d.ts.map +1 -1
- package/dist/lib/launch/gemini-trust.js +10 -3
- package/dist/lib/launch/gemini-trust.js.map +1 -1
- package/dist/lib/launch/goose-state.d.ts +53 -0
- package/dist/lib/launch/goose-state.d.ts.map +1 -0
- package/dist/lib/launch/goose-state.js +137 -0
- package/dist/lib/launch/goose-state.js.map +1 -0
- package/dist/lib/launch/launch-files.d.ts.map +1 -1
- package/dist/lib/launch/launch-files.js +3 -2
- package/dist/lib/launch/launch-files.js.map +1 -1
- package/dist/lib/launch/launch.d.ts +17 -2
- package/dist/lib/launch/launch.d.ts.map +1 -1
- package/dist/lib/launch/launch.js +36 -3
- package/dist/lib/launch/launch.js.map +1 -1
- package/dist/lib/launch/mcp-child-env.d.ts +30 -0
- package/dist/lib/launch/mcp-child-env.d.ts.map +1 -0
- package/dist/lib/launch/mcp-child-env.js +154 -0
- package/dist/lib/launch/mcp-child-env.js.map +1 -0
- package/dist/lib/launch/pick-agent.d.ts.map +1 -1
- package/dist/lib/launch/pick-agent.js +4 -4
- package/dist/lib/launch/pick-agent.js.map +1 -1
- package/dist/lib/launch/picker-options.d.ts.map +1 -1
- package/dist/lib/launch/picker-options.js +7 -2
- package/dist/lib/launch/picker-options.js.map +1 -1
- package/dist/lib/launch/registry/agents/aider.d.ts +3 -0
- package/dist/lib/launch/registry/agents/aider.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/aider.js +13 -0
- package/dist/lib/launch/registry/agents/aider.js.map +1 -0
- package/dist/lib/launch/registry/agents/auggie.d.ts +3 -0
- package/dist/lib/launch/registry/agents/auggie.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/auggie.js +11 -0
- package/dist/lib/launch/registry/agents/auggie.js.map +1 -0
- package/dist/lib/launch/registry/agents/cline.d.ts +3 -0
- package/dist/lib/launch/registry/agents/cline.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/cline.js +19 -0
- package/dist/lib/launch/registry/agents/cline.js.map +1 -0
- package/dist/lib/launch/registry/agents/continue.d.ts +3 -0
- package/dist/lib/launch/registry/agents/continue.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/continue.js +20 -0
- package/dist/lib/launch/registry/agents/continue.js.map +1 -0
- package/dist/lib/launch/registry/agents/gemini-cli.js +2 -2
- package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -1
- package/dist/lib/launch/registry/agents/goose.d.ts +3 -0
- package/dist/lib/launch/registry/agents/goose.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/goose.js +20 -0
- package/dist/lib/launch/registry/agents/goose.js.map +1 -0
- package/dist/lib/launch/registry/index.d.ts +1 -1
- package/dist/lib/launch/registry/index.d.ts.map +1 -1
- package/dist/lib/launch/registry/index.js +7 -2
- package/dist/lib/launch/registry/index.js.map +1 -1
- package/dist/lib/launch/registry/types.d.ts +12 -1
- package/dist/lib/launch/registry/types.d.ts.map +1 -1
- package/dist/lib/launch/strict-entry.d.ts +22 -2
- package/dist/lib/launch/strict-entry.d.ts.map +1 -1
- package/dist/lib/launch/strict-entry.js +80 -2
- package/dist/lib/launch/strict-entry.js.map +1 -1
- package/dist/lib/launch/yaml-scan.d.ts +59 -0
- package/dist/lib/launch/yaml-scan.d.ts.map +1 -0
- package/dist/lib/launch/yaml-scan.js +275 -0
- package/dist/lib/launch/yaml-scan.js.map +1 -0
- package/dist/lib/lead-prompt.d.ts +106 -0
- package/dist/lib/lead-prompt.d.ts.map +1 -0
- package/dist/lib/lead-prompt.js +175 -0
- package/dist/lib/lead-prompt.js.map +1 -0
- package/dist/lib/local-candidate-classify.d.ts +26 -0
- package/dist/lib/local-candidate-classify.d.ts.map +1 -0
- package/dist/lib/local-candidate-classify.js +53 -0
- package/dist/lib/local-candidate-classify.js.map +1 -0
- package/dist/lib/local-db-epoch.d.ts +4 -0
- package/dist/lib/local-db-epoch.d.ts.map +1 -0
- package/dist/lib/local-db-epoch.js +19 -0
- package/dist/lib/local-db-epoch.js.map +1 -0
- package/dist/lib/local-db-migrate.d.ts +85 -0
- package/dist/lib/local-db-migrate.d.ts.map +1 -0
- package/dist/lib/local-db-migrate.js +528 -0
- package/dist/lib/local-db-migrate.js.map +1 -0
- package/dist/lib/local-db-v10.d.ts +28 -0
- package/dist/lib/local-db-v10.d.ts.map +1 -0
- package/dist/lib/local-db-v10.js +49 -0
- package/dist/lib/local-db-v10.js.map +1 -0
- package/dist/lib/local-db-v11.d.ts +24 -0
- package/dist/lib/local-db-v11.d.ts.map +1 -0
- package/dist/lib/local-db-v11.js +25 -0
- package/dist/lib/local-db-v11.js.map +1 -0
- package/dist/lib/local-db-v12.d.ts +17 -0
- package/dist/lib/local-db-v12.d.ts.map +1 -0
- package/dist/lib/local-db-v12.js +8 -0
- package/dist/lib/local-db-v12.js.map +1 -0
- package/dist/lib/local-db-v7.d.ts +30 -0
- package/dist/lib/local-db-v7.d.ts.map +1 -0
- package/dist/lib/local-db-v7.js +285 -0
- package/dist/lib/local-db-v7.js.map +1 -0
- package/dist/lib/local-db-v8.d.ts +22 -0
- package/dist/lib/local-db-v8.d.ts.map +1 -0
- package/dist/lib/local-db-v8.js +33 -0
- package/dist/lib/local-db-v8.js.map +1 -0
- package/dist/lib/local-db-v9.d.ts +10 -0
- package/dist/lib/local-db-v9.d.ts.map +1 -0
- package/dist/lib/local-db-v9.js +8 -0
- package/dist/lib/local-db-v9.js.map +1 -0
- package/dist/lib/local-db.d.ts +73 -23
- package/dist/lib/local-db.d.ts.map +1 -1
- package/dist/lib/local-db.js +225 -375
- package/dist/lib/local-db.js.map +1 -1
- package/dist/lib/local-embeddings.d.ts.map +1 -1
- package/dist/lib/local-embeddings.js +2 -2
- package/dist/lib/local-embeddings.js.map +1 -1
- package/dist/lib/local-gateway-client.d.ts +31 -87
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +209 -187
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/local-ingest.d.ts +131 -0
- package/dist/lib/local-ingest.d.ts.map +1 -0
- package/dist/lib/local-ingest.js +81 -0
- package/dist/lib/local-ingest.js.map +1 -0
- package/dist/lib/local-link-pass.d.ts +15 -0
- package/dist/lib/local-link-pass.d.ts.map +1 -0
- package/dist/lib/local-link-pass.js +57 -0
- package/dist/lib/local-link-pass.js.map +1 -0
- package/dist/lib/local-llm.d.ts +1 -1
- package/dist/lib/local-llm.d.ts.map +1 -1
- package/dist/lib/local-llm.js +3 -2
- package/dist/lib/local-llm.js.map +1 -1
- package/dist/lib/local-mode.d.ts +9 -2
- package/dist/lib/local-mode.d.ts.map +1 -1
- package/dist/lib/local-mode.js +27 -7
- package/dist/lib/local-mode.js.map +1 -1
- package/dist/lib/local-provenance.d.ts +14 -0
- package/dist/lib/local-provenance.d.ts.map +1 -0
- package/dist/lib/local-provenance.js +14 -0
- package/dist/lib/local-provenance.js.map +1 -0
- package/dist/lib/local-relationship-classifier.d.ts +4 -0
- package/dist/lib/local-relationship-classifier.d.ts.map +1 -1
- package/dist/lib/local-relationship-classifier.js +9 -4
- package/dist/lib/local-relationship-classifier.js.map +1 -1
- package/dist/lib/local-relink.d.ts +59 -0
- package/dist/lib/local-relink.d.ts.map +1 -0
- package/dist/lib/local-relink.js +171 -0
- package/dist/lib/local-relink.js.map +1 -0
- package/dist/lib/local-set-classifier.d.ts +36 -0
- package/dist/lib/local-set-classifier.d.ts.map +1 -0
- package/dist/lib/local-set-classifier.js +81 -0
- package/dist/lib/local-set-classifier.js.map +1 -0
- package/dist/lib/local-snapshot-loader.d.ts +29 -0
- package/dist/lib/local-snapshot-loader.d.ts.map +1 -0
- package/dist/lib/local-snapshot-loader.js +108 -0
- package/dist/lib/local-snapshot-loader.js.map +1 -0
- package/dist/lib/local-thresholds.d.ts +70 -0
- package/dist/lib/local-thresholds.d.ts.map +1 -0
- package/dist/lib/local-thresholds.js +79 -0
- package/dist/lib/local-thresholds.js.map +1 -0
- package/dist/lib/login-flow.d.ts +15 -0
- package/dist/lib/login-flow.d.ts.map +1 -1
- package/dist/lib/login-flow.js +80 -4
- package/dist/lib/login-flow.js.map +1 -1
- package/dist/lib/mcp/mark-tool.d.ts +27 -0
- package/dist/lib/mcp/mark-tool.d.ts.map +1 -0
- package/dist/lib/mcp/mark-tool.js +103 -0
- package/dist/lib/mcp/mark-tool.js.map +1 -0
- package/dist/lib/mcp/share-status-tool.d.ts +13 -0
- package/dist/lib/mcp/share-status-tool.d.ts.map +1 -0
- package/dist/lib/mcp/share-status-tool.js +116 -0
- package/dist/lib/mcp/share-status-tool.js.map +1 -0
- package/dist/lib/mcp/share-tool.d.ts +50 -0
- package/dist/lib/mcp/share-tool.d.ts.map +1 -0
- package/dist/lib/mcp/share-tool.js +174 -0
- package/dist/lib/mcp/share-tool.js.map +1 -0
- package/dist/lib/mcp/tool-rules.d.ts +30 -0
- package/dist/lib/mcp/tool-rules.d.ts.map +1 -0
- package/dist/lib/mcp/tool-rules.js +84 -0
- package/dist/lib/mcp/tool-rules.js.map +1 -0
- package/dist/lib/mcp-backfill.d.ts +89 -0
- package/dist/lib/mcp-backfill.d.ts.map +1 -0
- package/dist/lib/mcp-backfill.js +194 -0
- package/dist/lib/mcp-backfill.js.map +1 -0
- package/dist/lib/mcp-scope.d.ts +90 -0
- package/dist/lib/mcp-scope.d.ts.map +1 -0
- package/dist/lib/mcp-scope.js +125 -0
- package/dist/lib/mcp-scope.js.map +1 -0
- package/dist/lib/mcp-sync.d.ts +64 -0
- package/dist/lib/mcp-sync.d.ts.map +1 -0
- package/dist/lib/mcp-sync.js +183 -0
- package/dist/lib/mcp-sync.js.map +1 -0
- package/dist/lib/model-cache.d.ts +10 -0
- package/dist/lib/model-cache.d.ts.map +1 -0
- package/dist/lib/model-cache.js +35 -0
- package/dist/lib/model-cache.js.map +1 -0
- package/dist/lib/next-step.d.ts.map +1 -1
- package/dist/lib/next-step.js +2 -1
- package/dist/lib/next-step.js.map +1 -1
- package/dist/lib/personal-import.d.ts +7 -0
- package/dist/lib/personal-import.d.ts.map +1 -1
- package/dist/lib/personal-import.js +13 -1
- package/dist/lib/personal-import.js.map +1 -1
- package/dist/lib/private-files.d.ts +33 -0
- package/dist/lib/private-files.d.ts.map +1 -0
- package/dist/lib/private-files.js +96 -0
- package/dist/lib/private-files.js.map +1 -0
- package/dist/lib/redaction-notice.d.ts +7 -0
- package/dist/lib/redaction-notice.d.ts.map +1 -0
- package/dist/lib/redaction-notice.js +32 -0
- package/dist/lib/redaction-notice.js.map +1 -0
- package/dist/lib/relink-estimate.d.ts +16 -0
- package/dist/lib/relink-estimate.d.ts.map +1 -0
- package/dist/lib/relink-estimate.js +30 -0
- package/dist/lib/relink-estimate.js.map +1 -0
- package/dist/lib/resolve-env.d.ts +15 -1
- package/dist/lib/resolve-env.d.ts.map +1 -1
- package/dist/lib/resolve-env.js +27 -7
- package/dist/lib/resolve-env.js.map +1 -1
- package/dist/lib/safe-config-write.d.ts.map +1 -1
- package/dist/lib/safe-config-write.js +39 -2
- package/dist/lib/safe-config-write.js.map +1 -1
- package/dist/lib/scope-choices.d.ts +51 -0
- package/dist/lib/scope-choices.d.ts.map +1 -0
- package/dist/lib/scope-choices.js +193 -0
- package/dist/lib/scope-choices.js.map +1 -0
- package/dist/lib/scope-connect.d.ts +82 -0
- package/dist/lib/scope-connect.d.ts.map +1 -0
- package/dist/lib/scope-connect.js +258 -0
- package/dist/lib/scope-connect.js.map +1 -0
- package/dist/lib/scope-defaults.d.ts +3 -0
- package/dist/lib/scope-defaults.d.ts.map +1 -0
- package/dist/lib/scope-defaults.js +44 -0
- package/dist/lib/scope-defaults.js.map +1 -0
- package/dist/lib/scope-real.d.ts +280 -0
- package/dist/lib/scope-real.d.ts.map +1 -0
- package/dist/lib/scope-real.js +58 -0
- package/dist/lib/scope-real.js.map +1 -0
- package/dist/lib/scope-values.d.ts +76 -0
- package/dist/lib/scope-values.d.ts.map +1 -0
- package/dist/lib/scope-values.js +169 -0
- package/dist/lib/scope-values.js.map +1 -0
- package/dist/lib/scope.d.ts +161 -0
- package/dist/lib/scope.d.ts.map +1 -0
- package/dist/lib/scope.js +323 -0
- package/dist/lib/scope.js.map +1 -0
- package/dist/lib/setup-route.d.ts +4 -2
- package/dist/lib/setup-route.d.ts.map +1 -1
- package/dist/lib/setup-route.js +12 -6
- package/dist/lib/setup-route.js.map +1 -1
- package/dist/lib/share/approval.d.ts +71 -0
- package/dist/lib/share/approval.d.ts.map +1 -0
- package/dist/lib/share/approval.js +139 -0
- package/dist/lib/share/approval.js.map +1 -0
- package/dist/lib/share/approve-link.d.ts +31 -0
- package/dist/lib/share/approve-link.d.ts.map +1 -0
- package/dist/lib/share/approve-link.js +46 -0
- package/dist/lib/share/approve-link.js.map +1 -0
- package/dist/lib/share/browser-flow.d.ts +85 -0
- package/dist/lib/share/browser-flow.d.ts.map +1 -0
- package/dist/lib/share/browser-flow.js +168 -0
- package/dist/lib/share/browser-flow.js.map +1 -0
- package/dist/lib/share/command.d.ts +65 -0
- package/dist/lib/share/command.d.ts.map +1 -0
- package/dist/lib/share/command.js +278 -0
- package/dist/lib/share/command.js.map +1 -0
- package/dist/lib/share/delivery-options.d.ts +15 -0
- package/dist/lib/share/delivery-options.d.ts.map +1 -0
- package/dist/lib/share/delivery-options.js +16 -0
- package/dist/lib/share/delivery-options.js.map +1 -0
- package/dist/lib/share/delivery.d.ts +83 -0
- package/dist/lib/share/delivery.d.ts.map +1 -0
- package/dist/lib/share/delivery.js +134 -0
- package/dist/lib/share/delivery.js.map +1 -0
- package/dist/lib/share/envelope.d.ts +61 -0
- package/dist/lib/share/envelope.d.ts.map +1 -0
- package/dist/lib/share/envelope.js +99 -0
- package/dist/lib/share/envelope.js.map +1 -0
- package/dist/lib/share/ledger.d.ts +59 -0
- package/dist/lib/share/ledger.d.ts.map +1 -0
- package/dist/lib/share/ledger.js +137 -0
- package/dist/lib/share/ledger.js.map +1 -0
- package/dist/lib/share/payload.d.ts +101 -0
- package/dist/lib/share/payload.d.ts.map +1 -0
- package/dist/lib/share/payload.js +147 -0
- package/dist/lib/share/payload.js.map +1 -0
- package/dist/lib/share/pending.d.ts +94 -0
- package/dist/lib/share/pending.d.ts.map +1 -0
- package/dist/lib/share/pending.js +256 -0
- package/dist/lib/share/pending.js.map +1 -0
- package/dist/lib/share/preview.d.ts +22 -0
- package/dist/lib/share/preview.d.ts.map +1 -0
- package/dist/lib/share/preview.js +74 -0
- package/dist/lib/share/preview.js.map +1 -0
- package/dist/lib/share/qr.d.ts +13 -0
- package/dist/lib/share/qr.d.ts.map +1 -0
- package/dist/lib/share/qr.js +77 -0
- package/dist/lib/share/qr.js.map +1 -0
- package/dist/lib/share/requests-client.d.ts +63 -0
- package/dist/lib/share/requests-client.d.ts.map +1 -0
- package/dist/lib/share/requests-client.js +69 -0
- package/dist/lib/share/requests-client.js.map +1 -0
- package/dist/lib/share/run.d.ts +134 -0
- package/dist/lib/share/run.d.ts.map +1 -0
- package/dist/lib/share/run.js +278 -0
- package/dist/lib/share/run.js.map +1 -0
- package/dist/lib/share/salt.d.ts +2 -0
- package/dist/lib/share/salt.d.ts.map +1 -0
- package/dist/lib/share/salt.js +44 -0
- package/dist/lib/share/salt.js.map +1 -0
- package/dist/lib/share/secret-patterns.json +100 -0
- package/dist/lib/share/secret-scan.d.ts +24 -0
- package/dist/lib/share/secret-scan.d.ts.map +1 -0
- package/dist/lib/share/secret-scan.js +116 -0
- package/dist/lib/share/secret-scan.js.map +1 -0
- package/dist/lib/share/target.d.ts +38 -0
- package/dist/lib/share/target.d.ts.map +1 -0
- package/dist/lib/share/target.js +80 -0
- package/dist/lib/share/target.js.map +1 -0
- package/dist/lib/share/tty.d.ts +12 -0
- package/dist/lib/share/tty.d.ts.map +1 -0
- package/dist/lib/share/tty.js +102 -0
- package/dist/lib/share/tty.js.map +1 -0
- package/dist/lib/share/visible.d.ts +4 -0
- package/dist/lib/share/visible.d.ts.map +1 -0
- package/dist/lib/share/visible.js +30 -0
- package/dist/lib/share/visible.js.map +1 -0
- package/dist/lib/share/wire.d.ts +98 -0
- package/dist/lib/share/wire.d.ts.map +1 -0
- package/dist/lib/share/wire.js +43 -0
- package/dist/lib/share/wire.js.map +1 -0
- package/dist/lib/similarity/embedding-matrix.d.ts +64 -0
- package/dist/lib/similarity/embedding-matrix.d.ts.map +1 -0
- package/dist/lib/similarity/embedding-matrix.js +119 -0
- package/dist/lib/similarity/embedding-matrix.js.map +1 -0
- package/dist/lib/since-flag.d.ts +11 -0
- package/dist/lib/since-flag.d.ts.map +1 -0
- package/dist/lib/since-flag.js +24 -0
- package/dist/lib/since-flag.js.map +1 -0
- package/dist/lib/since.d.ts +59 -0
- package/dist/lib/since.d.ts.map +1 -0
- package/dist/lib/since.js +86 -0
- package/dist/lib/since.js.map +1 -0
- package/dist/lib/source-key.d.ts +13 -0
- package/dist/lib/source-key.d.ts.map +1 -0
- package/dist/lib/source-key.js +60 -0
- package/dist/lib/source-key.js.map +1 -0
- package/dist/lib/source-sync-state.d.ts +12 -0
- package/dist/lib/source-sync-state.d.ts.map +1 -0
- package/dist/lib/source-sync-state.js +45 -0
- package/dist/lib/source-sync-state.js.map +1 -0
- package/dist/lib/startup-backfill-track.d.ts +2 -0
- package/dist/lib/startup-backfill-track.d.ts.map +1 -0
- package/dist/lib/startup-backfill-track.js +6 -0
- package/dist/lib/startup-backfill-track.js.map +1 -0
- package/dist/lib/startup-xdg.d.ts +2 -0
- package/dist/lib/startup-xdg.d.ts.map +1 -0
- package/dist/lib/startup-xdg.js +9 -0
- package/dist/lib/startup-xdg.js.map +1 -0
- package/dist/lib/sync/after-connect.d.ts +2 -0
- package/dist/lib/sync/after-connect.d.ts.map +1 -0
- package/dist/lib/sync/after-connect.js +18 -0
- package/dist/lib/sync/after-connect.js.map +1 -0
- package/dist/lib/sync/bg-claim.d.ts +14 -0
- package/dist/lib/sync/bg-claim.d.ts.map +1 -0
- package/dist/lib/sync/bg-claim.js +97 -0
- package/dist/lib/sync/bg-claim.js.map +1 -0
- package/dist/lib/sync/blocked.d.ts +8 -0
- package/dist/lib/sync/blocked.d.ts.map +1 -0
- package/dist/lib/sync/blocked.js +45 -0
- package/dist/lib/sync/blocked.js.map +1 -0
- package/dist/lib/sync/classify.d.ts +34 -0
- package/dist/lib/sync/classify.d.ts.map +1 -0
- package/dist/lib/sync/classify.js +93 -0
- package/dist/lib/sync/classify.js.map +1 -0
- package/dist/lib/sync/drain.d.ts +16 -0
- package/dist/lib/sync/drain.d.ts.map +1 -0
- package/dist/lib/sync/drain.js +33 -0
- package/dist/lib/sync/drain.js.map +1 -0
- package/dist/lib/sync/forget.d.ts +12 -0
- package/dist/lib/sync/forget.d.ts.map +1 -0
- package/dist/lib/sync/forget.js +32 -0
- package/dist/lib/sync/forget.js.map +1 -0
- package/dist/lib/sync/launch-hook.d.ts +42 -0
- package/dist/lib/sync/launch-hook.d.ts.map +1 -0
- package/dist/lib/sync/launch-hook.js +117 -0
- package/dist/lib/sync/launch-hook.js.map +1 -0
- package/dist/lib/sync/lock.d.ts +35 -0
- package/dist/lib/sync/lock.d.ts.map +1 -0
- package/dist/lib/sync/lock.js +175 -0
- package/dist/lib/sync/lock.js.map +1 -0
- package/dist/lib/sync/purge.d.ts +38 -0
- package/dist/lib/sync/purge.d.ts.map +1 -0
- package/dist/lib/sync/purge.js +61 -0
- package/dist/lib/sync/purge.js.map +1 -0
- package/dist/lib/sync/real-env.d.ts +265 -0
- package/dist/lib/sync/real-env.d.ts.map +1 -0
- package/dist/lib/sync/real-env.js +47 -0
- package/dist/lib/sync/real-env.js.map +1 -0
- package/dist/lib/sync/relink.d.ts +14 -0
- package/dist/lib/sync/relink.d.ts.map +1 -0
- package/dist/lib/sync/relink.js +36 -0
- package/dist/lib/sync/relink.js.map +1 -0
- package/dist/lib/sync/report.d.ts +3 -0
- package/dist/lib/sync/report.d.ts.map +1 -0
- package/dist/lib/sync/report.js +54 -0
- package/dist/lib/sync/report.js.map +1 -0
- package/dist/lib/sync/run-all.d.ts +23 -0
- package/dist/lib/sync/run-all.d.ts.map +1 -0
- package/dist/lib/sync/run-all.js +30 -0
- package/dist/lib/sync/run-all.js.map +1 -0
- package/dist/lib/sync/run-source.d.ts +73 -0
- package/dist/lib/sync/run-source.d.ts.map +1 -0
- package/dist/lib/sync/run-source.js +262 -0
- package/dist/lib/sync/run-source.js.map +1 -0
- package/dist/lib/sync/safe-read.d.ts +4 -0
- package/dist/lib/sync/safe-read.d.ts.map +1 -0
- package/dist/lib/sync/safe-read.js +40 -0
- package/dist/lib/sync/safe-read.js.map +1 -0
- package/dist/lib/sync/should-background-sync.d.ts +31 -0
- package/dist/lib/sync/should-background-sync.d.ts.map +1 -0
- package/dist/lib/sync/should-background-sync.js +69 -0
- package/dist/lib/sync/should-background-sync.js.map +1 -0
- package/dist/lib/sync/source-ids.d.ts +10 -0
- package/dist/lib/sync/source-ids.d.ts.map +1 -0
- package/dist/lib/sync/source-ids.js +9 -0
- package/dist/lib/sync/source-ids.js.map +1 -0
- package/dist/lib/sync/sources.d.ts +33 -0
- package/dist/lib/sync/sources.d.ts.map +1 -0
- package/dist/lib/sync/sources.js +37 -0
- package/dist/lib/sync/sources.js.map +1 -0
- package/dist/lib/sync/spawn-background.d.ts +27 -0
- package/dist/lib/sync/spawn-background.d.ts.map +1 -0
- package/dist/lib/sync/spawn-background.js +66 -0
- package/dist/lib/sync/spawn-background.js.map +1 -0
- package/dist/lib/sync/status.d.ts +57 -0
- package/dist/lib/sync/status.d.ts.map +1 -0
- package/dist/lib/sync/status.js +166 -0
- package/dist/lib/sync/status.js.map +1 -0
- package/dist/lib/sync/summary-read.d.ts +19 -0
- package/dist/lib/sync/summary-read.d.ts.map +1 -0
- package/dist/lib/sync/summary-read.js +39 -0
- package/dist/lib/sync/summary-read.js.map +1 -0
- package/dist/lib/sync/summary.d.ts +10 -0
- package/dist/lib/sync/summary.d.ts.map +1 -0
- package/dist/lib/sync/summary.js +80 -0
- package/dist/lib/sync/summary.js.map +1 -0
- package/dist/lib/sync/sync-state.d.ts +128 -0
- package/dist/lib/sync/sync-state.d.ts.map +1 -0
- package/dist/lib/sync/sync-state.js +255 -0
- package/dist/lib/sync/sync-state.js.map +1 -0
- package/dist/lib/sync/telemetry.d.ts +20 -0
- package/dist/lib/sync/telemetry.d.ts.map +1 -0
- package/dist/lib/sync/telemetry.js +31 -0
- package/dist/lib/sync/telemetry.js.map +1 -0
- package/dist/lib/sync/threads.d.ts +48 -0
- package/dist/lib/sync/threads.d.ts.map +1 -0
- package/dist/lib/sync/threads.js +82 -0
- package/dist/lib/sync/threads.js.map +1 -0
- package/dist/lib/sync/window.d.ts +72 -0
- package/dist/lib/sync/window.d.ts.map +1 -0
- package/dist/lib/sync/window.js +112 -0
- package/dist/lib/sync/window.js.map +1 -0
- package/dist/lib/team-cta.d.ts +11 -0
- package/dist/lib/team-cta.d.ts.map +1 -0
- package/dist/lib/team-cta.js +16 -0
- package/dist/lib/team-cta.js.map +1 -0
- package/dist/lib/telemetry-ci.d.ts +2 -0
- package/dist/lib/telemetry-ci.d.ts.map +1 -0
- package/dist/lib/telemetry-ci.js +21 -0
- package/dist/lib/telemetry-ci.js.map +1 -0
- package/dist/lib/telemetry-consent.d.ts +44 -23
- package/dist/lib/telemetry-consent.d.ts.map +1 -1
- package/dist/lib/telemetry-consent.js +74 -35
- package/dist/lib/telemetry-consent.js.map +1 -1
- package/dist/lib/telemetry-env.d.ts +1 -1
- package/dist/lib/usage-telemetry.d.ts +89 -24
- package/dist/lib/usage-telemetry.d.ts.map +1 -1
- package/dist/lib/usage-telemetry.js +283 -76
- package/dist/lib/usage-telemetry.js.map +1 -1
- package/dist/lib/xdg.d.ts +27 -0
- package/dist/lib/xdg.d.ts.map +1 -0
- package/dist/lib/xdg.js +56 -0
- package/dist/lib/xdg.js.map +1 -0
- package/package.json +6 -3
- package/dist/commands/push.d.ts +0 -25
- package/dist/commands/push.d.ts.map +0 -1
- package/dist/commands/push.js +0 -98
- package/dist/commands/push.js.map +0 -1
- package/dist/lib/personal-email-domains.d.ts +0 -8
- package/dist/lib/personal-email-domains.d.ts.map +0 -1
- package/dist/lib/personal-email-domains.js +0 -39
- package/dist/lib/personal-email-domains.js.map +0 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `align local relink --detector v1`: re-type existing v0 links with the v1 detector, explicitly.
|
|
3
|
+
*
|
|
4
|
+
* Schema v12 stamped every existing link 'v0' and nothing re-types a link silently, so this is
|
|
5
|
+
* the one path that does. Its rules (review F1, F2, F5 of 2026-10-11):
|
|
6
|
+
* - The unit is the UNORDERED PAIR. However many v0 rows a pair carries, in either direction, it
|
|
7
|
+
* is judged once, in one call, and appears once in that call. Pairs are grouped into calls by
|
|
8
|
+
* the source of the pair's earliest row (the NEW DECISION; its partners are the candidates).
|
|
9
|
+
* - A pair a person has judged is never touched: any `local_judgements` row naming both
|
|
10
|
+
* decisions (a `replaces` mark, a conflict verdict), a `mark:` link on the pair, or a
|
|
11
|
+
* not-a-decision mark on either side. Judgements are read, not inferred from link ids, because
|
|
12
|
+
* a mark written over an existing classifier row keeps that row's id.
|
|
13
|
+
* - A pair that already has a v1 row is skipped, so a second run does not pay for it again.
|
|
14
|
+
* - An omitted verdict (the model gave the pair no relationship, or the resolver refused the
|
|
15
|
+
* edge) leaves the pair exactly as it is. Omission is not a verdict to apply.
|
|
16
|
+
* - Candidates carry status 'superseded' when a decision OTHER than the pair's source supersedes
|
|
17
|
+
* them, so the prompt marks them RETIRED and the resolver refuses a verdict edge (R2: the
|
|
18
|
+
* pair's own row does not count).
|
|
19
|
+
* - A pair carrying a supersedes is only changed by a conflict-family answer (R2); a
|
|
20
|
+
* non-conflict type leaves it as it is.
|
|
21
|
+
* - Dry run (apply false) writes nothing. apply without replace adds a v1 row only where the
|
|
22
|
+
* type is new for the pair; apply with replace swaps the pair's non-mark rows for the v1 row.
|
|
23
|
+
* - At most `maxCalls` calls; a failed call writes nothing for its group; a stopped provider ends
|
|
24
|
+
* the run. `written` lists only what was written.
|
|
25
|
+
*/
|
|
26
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
27
|
+
import { buildV1SystemPrompt, buildV1UserPrompt, v1MaxTokens } from '../detector/relationship-prompt.js';
|
|
28
|
+
import { createLocalDb } from './local-db.js';
|
|
29
|
+
import { classifyCandidateSet } from './local-set-classifier.js';
|
|
30
|
+
import { estimateTokens } from './token-estimate.js';
|
|
31
|
+
const pairKey = (a, b) => (a < b ? `${a}\u0000${b}` : `${b}\u0000${a}`);
|
|
32
|
+
/** What relink would do, from the graph alone. No model call. */
|
|
33
|
+
export function planRelink(dbPath) {
|
|
34
|
+
createLocalDb(dbPath).close(); // migrate to v12 before reading detector_version
|
|
35
|
+
const raw = new DatabaseSync(dbPath);
|
|
36
|
+
let links;
|
|
37
|
+
let judged;
|
|
38
|
+
let notDecisions;
|
|
39
|
+
let rows;
|
|
40
|
+
try {
|
|
41
|
+
raw.exec('PRAGMA busy_timeout = 30000');
|
|
42
|
+
links = raw.prepare(`SELECT id, source_id AS sourceId, target_id AS targetId, relation, confidence, detector_version AS v FROM decision_links
|
|
43
|
+
WHERE source_id <> target_id
|
|
44
|
+
AND EXISTS (SELECT 1 FROM decisions s WHERE s.id = source_id) AND EXISTS (SELECT 1 FROM decisions t WHERE t.id = target_id)
|
|
45
|
+
ORDER BY rowid`).all();
|
|
46
|
+
const judgements = raw.prepare(`SELECT decision_id AS d, counterpart_id AS c, kind FROM local_judgements`).all();
|
|
47
|
+
judged = new Set(judgements.filter((j) => j.c !== null).map((j) => pairKey(j.d, j.c)));
|
|
48
|
+
notDecisions = new Set(judgements.filter((j) => j.kind === 'not_a_decision').map((j) => j.d));
|
|
49
|
+
rows = new Map(raw.prepare('SELECT id, title, summary, platform, decided_at FROM decisions').all().map((r) => [r.id, r]));
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
raw.close();
|
|
53
|
+
}
|
|
54
|
+
const blocked = new Set();
|
|
55
|
+
for (const l of links) {
|
|
56
|
+
const key = pairKey(l.sourceId, l.targetId);
|
|
57
|
+
if (l.v !== 'v0' || l.id.startsWith('mark:'))
|
|
58
|
+
blocked.add(key);
|
|
59
|
+
}
|
|
60
|
+
const pairs = new Map();
|
|
61
|
+
const skipped = new Set();
|
|
62
|
+
for (const l of links) {
|
|
63
|
+
const key = pairKey(l.sourceId, l.targetId);
|
|
64
|
+
if (blocked.has(key)) {
|
|
65
|
+
if (judged.has(key) || links.some((x) => x.id.startsWith('mark:') && pairKey(x.sourceId, x.targetId) === key))
|
|
66
|
+
skipped.add(key);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (judged.has(key) || notDecisions.has(l.sourceId) || notDecisions.has(l.targetId)) {
|
|
70
|
+
skipped.add(key);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const seen = pairs.get(key);
|
|
74
|
+
if (seen) {
|
|
75
|
+
if (!seen.pair.relations.includes(l.relation))
|
|
76
|
+
seen.pair.relations.push(l.relation);
|
|
77
|
+
seen.pair.confidence = Math.max(seen.pair.confidence, l.confidence);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
pairs.set(key, { sourceId: l.sourceId, pair: { targetId: l.targetId, relations: [l.relation], confidence: l.confidence } });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const bySource = new Map();
|
|
84
|
+
for (const { sourceId, pair } of pairs.values())
|
|
85
|
+
bySource.set(sourceId, [...(bySource.get(sourceId) ?? []), pair]);
|
|
86
|
+
const groups = [...bySource.entries()].map(([sourceId, ps]) => ({ sourceId, pairs: ps.map((p) => ({ ...p, relations: [...p.relations].sort() })) }));
|
|
87
|
+
const decision = (id) => rows.get(id);
|
|
88
|
+
const supersessions = new Map();
|
|
89
|
+
for (const l of links) {
|
|
90
|
+
if (l.relation === 'supersedes' || l.relation === 'partially_supersedes')
|
|
91
|
+
supersessions.set(l.targetId, (supersessions.get(l.targetId) ?? new Set()).add(l.sourceId));
|
|
92
|
+
}
|
|
93
|
+
const supersededBy = (id) => supersessions.get(id) ?? new Set();
|
|
94
|
+
const system = estimateTokens(buildV1SystemPrompt());
|
|
95
|
+
let inputTokens = 0;
|
|
96
|
+
let maxOutputTokens = 0;
|
|
97
|
+
for (const g of groups) {
|
|
98
|
+
const out = v1MaxTokens(g.pairs.length);
|
|
99
|
+
inputTokens += system + estimateTokens(buildV1UserPrompt(subjectOf(decision(g.sourceId)), candidatesOf(g, decision, supersededBy), 1_000_000, out));
|
|
100
|
+
maxOutputTokens += out;
|
|
101
|
+
}
|
|
102
|
+
return { groups, decision, supersededBy, calls: groups.length, pairs: pairs.size, skippedJudged: skipped.size, inputTokens, maxOutputTokens };
|
|
103
|
+
}
|
|
104
|
+
function subjectOf(r) {
|
|
105
|
+
return { title: r.title, summary: r.summary, decidedAt: r.decided_at, platform: r.platform };
|
|
106
|
+
}
|
|
107
|
+
/** Re-review R2: a candidate is RETIRED only when a decision OTHER than this pair's source
|
|
108
|
+
* supersedes it. The pair's own supersedes row is the thing under review; letting it mark the
|
|
109
|
+
* candidate retired would make the resolver refuse the very edge that confirms it. */
|
|
110
|
+
function candidatesOf(g, decision, supersededBy) {
|
|
111
|
+
return g.pairs.map((p) => {
|
|
112
|
+
const t = decision(p.targetId);
|
|
113
|
+
const retired = [...supersededBy(t.id)].some((s) => s !== g.sourceId);
|
|
114
|
+
return { id: t.id, title: t.title, summary: t.summary, similarity: p.confidence, platform: t.platform, decidedAt: t.decided_at, status: retired ? 'superseded' : null };
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
export async function relinkWithV1(dbPath, opts, classify = classifyCandidateSet) {
|
|
118
|
+
const plan = planRelink(dbPath);
|
|
119
|
+
const report = { calls: 0, remainingCalls: 0, proposed: [], written: [], unchanged: 0, omitted: 0, skippedJudged: plan.skippedJudged, keptSupersedes: 0, failed: 0 };
|
|
120
|
+
const db = opts.apply ? createLocalDb(dbPath) : null;
|
|
121
|
+
try {
|
|
122
|
+
for (const [gi, g] of plan.groups.entries()) {
|
|
123
|
+
if (report.calls >= opts.maxCalls) {
|
|
124
|
+
report.remainingCalls = plan.groups.length - gi;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
report.calls += 1;
|
|
128
|
+
const result = await classify(subjectOf(plan.decision(g.sourceId)), candidatesOf(g, plan.decision, plan.supersededBy));
|
|
129
|
+
if (!result.ok) {
|
|
130
|
+
report.failed += 1;
|
|
131
|
+
if (result.failure?.kind === 'provider_stopped') {
|
|
132
|
+
report.stopped = `${result.failure.model} (${result.failure.provider}) stopped answering: ${result.failure.detail}`;
|
|
133
|
+
report.remainingCalls = plan.groups.length - gi - 1;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
g.pairs.forEach((p, i) => {
|
|
139
|
+
const verdict = result.verdicts[i];
|
|
140
|
+
if (verdict.relation === null) {
|
|
141
|
+
report.omitted += 1;
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// R2: a supersedes is only overturned by a conflict-family answer; anything else leaves it.
|
|
145
|
+
if (p.relations.includes('supersedes') && !['supersedes', 'conflicts_with', 'contradicts'].includes(verdict.relation)) {
|
|
146
|
+
report.keptSupersedes += 1;
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const change = { sourceId: g.sourceId, targetId: p.targetId, from: p.relations, to: verdict.relation };
|
|
150
|
+
const isNew = !p.relations.includes(verdict.relation);
|
|
151
|
+
if (isNew)
|
|
152
|
+
report.proposed.push(change);
|
|
153
|
+
else
|
|
154
|
+
report.unchanged += 1;
|
|
155
|
+
if (!db || (!opts.replace && !isNew))
|
|
156
|
+
return;
|
|
157
|
+
const link = { sourceId: g.sourceId, targetId: p.targetId, relation: verdict.relation, confidence: verdict.confidence, detectorVersion: 'v1' };
|
|
158
|
+
if (opts.replace)
|
|
159
|
+
db.replaceLink(link);
|
|
160
|
+
else
|
|
161
|
+
db.insertLink(link);
|
|
162
|
+
report.written.push(change);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
db?.close();
|
|
168
|
+
}
|
|
169
|
+
return report;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=local-relink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-relink.js","sourceRoot":"","sources":["../../src/lib/local-relink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { callChatDetailed, type LlmFailure } from './local-llm.js';
|
|
2
|
+
import { type ClassifierFailureReason } from './local-relationship-classifier.js';
|
|
3
|
+
export interface SetSubject {
|
|
4
|
+
title: string;
|
|
5
|
+
summary: string;
|
|
6
|
+
/** null for a proposed change: nothing has decided it yet, so the resolver refuses supersedes. */
|
|
7
|
+
decidedAt: string | null;
|
|
8
|
+
platform?: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface SetCandidate {
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
summary: string;
|
|
14
|
+
similarity: number;
|
|
15
|
+
platform?: string | null;
|
|
16
|
+
decidedAt: string | null;
|
|
17
|
+
status?: string | null;
|
|
18
|
+
}
|
|
19
|
+
export interface SetVerdict {
|
|
20
|
+
/** The edge to write, or null when the model gave this candidate no relationship. */
|
|
21
|
+
relation: string | null;
|
|
22
|
+
confidence: number;
|
|
23
|
+
reason?: string;
|
|
24
|
+
}
|
|
25
|
+
export type SetOutcome = {
|
|
26
|
+
ok: true;
|
|
27
|
+
verdicts: SetVerdict[];
|
|
28
|
+
} | {
|
|
29
|
+
ok: false;
|
|
30
|
+
reason: ClassifierFailureReason;
|
|
31
|
+
failure?: LlmFailure;
|
|
32
|
+
};
|
|
33
|
+
type Call = typeof callChatDetailed;
|
|
34
|
+
export declare function classifyCandidateSet(subject: SetSubject, candidates: readonly SetCandidate[], call?: Call): Promise<SetOutcome>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=local-set-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-set-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/local-set-classifier.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,KAAK,uBAAuB,EAAiB,MAAM,oCAAoC,CAAC;AAEjG,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,qFAAqF;IACrF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzE,KAAK,IAAI,GAAG,OAAO,gBAAgB,CAAC;AA0BpC,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,YAAY,EAAE,EAAE,IAAI,GAAE,IAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+BvJ"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The v1 local relationship classifier (ALIGN_DETECTOR=v1): ONE model call per check over every
|
|
3
|
+
* candidate, using the shared detector prompt (src/detector), parsed with the shared contract, and
|
|
4
|
+
* with `incompatible` resolved to `supersedes` or `conflicts_with` by the deterministic resolver,
|
|
5
|
+
* never by the model's own label.
|
|
6
|
+
*
|
|
7
|
+
* Authorship: the local graph stores no author per decision, so every side is passed with
|
|
8
|
+
* author null. The resolver reads null as UNKNOWN, and two unknown authors are never the same
|
|
9
|
+
* author, so the same-author supersession rule cannot fire locally; only a replacement claim
|
|
10
|
+
* that agrees with the clock can earn `supersedes`. Standing is also null on both sides, which
|
|
11
|
+
* the resolver treats as equal.
|
|
12
|
+
*
|
|
13
|
+
* A candidate the model omits, or whose entry fails the contract, gets `relation: null`: it was
|
|
14
|
+
* judged and has no typed relationship. A whole-call failure is reported once, for the set.
|
|
15
|
+
*/
|
|
16
|
+
import { DETERMINISTIC_TEMPERATURE } from '@aligndottech/connector-core';
|
|
17
|
+
import { parseRelationshipItem } from '../detector/relationship-contract.js';
|
|
18
|
+
import { buildV1SystemPrompt, buildV1UserPrompt, v1MaxTokens } from '../detector/relationship-prompt.js';
|
|
19
|
+
import { NEW_DECISION_REF, resolveSimilarItem } from '../detector/similar-item.js';
|
|
20
|
+
import { callChatDetailed } from './local-llm.js';
|
|
21
|
+
import { failureReason } from './local-relationship-classifier.js';
|
|
22
|
+
/** The `similar` array from the model's answer, or null when there is none to read. */
|
|
23
|
+
function similarEntries(text) {
|
|
24
|
+
const start = text.indexOf('{');
|
|
25
|
+
const end = text.lastIndexOf('}');
|
|
26
|
+
if (start < 0 || end <= start)
|
|
27
|
+
return null;
|
|
28
|
+
let obj;
|
|
29
|
+
try {
|
|
30
|
+
obj = JSON.parse(text.slice(start, end + 1));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
if (typeof obj !== 'object' || obj === null)
|
|
36
|
+
return null;
|
|
37
|
+
const record = obj;
|
|
38
|
+
const rel = record['relationships'];
|
|
39
|
+
const similar = typeof rel === 'object' && rel !== null ? rel['similar'] : record['similar'];
|
|
40
|
+
return Array.isArray(similar) ? similar : null;
|
|
41
|
+
}
|
|
42
|
+
/** 1-based ordinal as printed in the prompt, as a number or a digit string; anything else is null. */
|
|
43
|
+
function ordinal(value, count) {
|
|
44
|
+
const n = typeof value === 'number' ? value : typeof value === 'string' && /^\d+$/.test(value.trim()) ? Number(value) : NaN;
|
|
45
|
+
return Number.isInteger(n) && n >= 1 && n <= count ? n : null;
|
|
46
|
+
}
|
|
47
|
+
export async function classifyCandidateSet(subject, candidates, call = callChatDetailed) {
|
|
48
|
+
if (!candidates.length)
|
|
49
|
+
return { ok: true, verdicts: [] };
|
|
50
|
+
const maxTokens = v1MaxTokens(candidates.length);
|
|
51
|
+
const result = await call(buildV1SystemPrompt(), (windowTokens) => buildV1UserPrompt(subject, candidates, windowTokens, maxTokens), { temperature: DETERMINISTIC_TEMPERATURE, maxTokens });
|
|
52
|
+
if (!result.ok)
|
|
53
|
+
return { ok: false, reason: failureReason(result.failure), failure: result.failure };
|
|
54
|
+
const entries = similarEntries(result.text);
|
|
55
|
+
if (entries === null)
|
|
56
|
+
return { ok: false, reason: 'classifier_unparseable' };
|
|
57
|
+
const verdicts = candidates.map((c) => ({ relation: null, confidence: c.similarity }));
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
const newSide = { id: NEW_DECISION_REF, decidedAt: subject.decidedAt, author: null };
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
if (typeof entry !== 'object' || entry === null)
|
|
62
|
+
continue;
|
|
63
|
+
const ref = ordinal(entry['decision_ref'], candidates.length);
|
|
64
|
+
if (ref === null || seen.has(ref))
|
|
65
|
+
continue;
|
|
66
|
+
seen.add(ref);
|
|
67
|
+
// The shared schema asks for "reasons": [...]; the contract parser reads one "reason" string.
|
|
68
|
+
const raw = entry;
|
|
69
|
+
const reasons = Array.isArray(raw['reasons']) ? raw['reasons'].filter((r) => typeof r === 'string') : [];
|
|
70
|
+
const item = parseRelationshipItem(JSON.stringify(raw['reason'] === undefined && reasons.length ? { ...raw, reason: reasons.join('; ') } : raw), 'v1Candidate');
|
|
71
|
+
if (item === null)
|
|
72
|
+
continue;
|
|
73
|
+
const c = candidates[ref - 1];
|
|
74
|
+
const resolved = resolveSimilarItem(item, newSide, { id: c.id, decidedAt: c.decidedAt, author: null, status: c.status ?? null });
|
|
75
|
+
if (resolved === null)
|
|
76
|
+
continue;
|
|
77
|
+
verdicts[ref - 1] = { relation: resolved.type, confidence: resolved.confidence, ...(resolved.reason ? { reason: resolved.reason } : {}) };
|
|
78
|
+
}
|
|
79
|
+
return { ok: true, verdicts };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=local-set-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-set-classifier.js","sourceRoot":"","sources":["../../src/lib/local-set-classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface SnapshotDecision {
|
|
2
|
+
id: string;
|
|
3
|
+
title: string;
|
|
4
|
+
summary: string;
|
|
5
|
+
source_url: string | null;
|
|
6
|
+
platform: string;
|
|
7
|
+
decided_at: string | null;
|
|
8
|
+
repo?: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface SnapshotLink {
|
|
11
|
+
source_id: string;
|
|
12
|
+
target_id: string;
|
|
13
|
+
relation: string;
|
|
14
|
+
confidence: number;
|
|
15
|
+
}
|
|
16
|
+
export interface Snapshot {
|
|
17
|
+
snapshot: string;
|
|
18
|
+
decisions: SnapshotDecision[];
|
|
19
|
+
links?: SnapshotLink[];
|
|
20
|
+
}
|
|
21
|
+
export declare function loadSnapshot(s: Snapshot, dbPath: string, opts: {
|
|
22
|
+
links: boolean;
|
|
23
|
+
realDbPath?: string;
|
|
24
|
+
alsoRefuse?: readonly string[];
|
|
25
|
+
}): {
|
|
26
|
+
decisions: number;
|
|
27
|
+
links: number;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=local-snapshot-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-snapshot-loader.d.ts","sourceRoot":"","sources":["../../src/lib/local-snapshot-loader.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAE5G,MAAM,WAAW,QAAQ;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE;AAuCrG,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA4B7K"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load a frozen JSON snapshot into a THROWAWAY local graph (shared detector plan, Phase B).
|
|
3
|
+
*
|
|
4
|
+
* No user command reaches this: it is driven by scripts/load-local-snapshot.ts, so a benchmark
|
|
5
|
+
* can build a local graph from the same decisions the hosted arm reads. It keeps each decision's
|
|
6
|
+
* id, decided_at and platform exactly (ingestBatch re-extracts and cannot), and imports the
|
|
7
|
+
* snapshot's links only when asked, stamped detector_version 'snapshot' so `align local relink`
|
|
8
|
+
* (which reads v0 rows only) never re-types them and a count by version separates them.
|
|
9
|
+
*
|
|
10
|
+
* It never writes the user's real graph: it refuses a path that already exists (a dangling
|
|
11
|
+
* symlink included), and any path that lands on the default or the configured local.db, through
|
|
12
|
+
* symlinks; it validates the whole snapshot before creating any file.
|
|
13
|
+
*/
|
|
14
|
+
import { lstatSync, readlinkSync, realpathSync } from 'node:fs';
|
|
15
|
+
import { basename, dirname, resolve } from 'node:path';
|
|
16
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
17
|
+
import { RELATIONSHIP_CONTRACT } from '../detector/relationship-contract.js';
|
|
18
|
+
import { createLocalDb } from './local-db.js';
|
|
19
|
+
import { getLocalDbPath } from './local-mode.js';
|
|
20
|
+
function validate(s, withLinks) {
|
|
21
|
+
if (!s.decisions.length)
|
|
22
|
+
throw new Error('The snapshot holds no decisions; refusing to write an empty graph.');
|
|
23
|
+
const ids = new Set();
|
|
24
|
+
for (const d of s.decisions) {
|
|
25
|
+
if (ids.has(d.id))
|
|
26
|
+
throw new Error(`The snapshot has a duplicate id "${d.id}".`);
|
|
27
|
+
ids.add(d.id);
|
|
28
|
+
}
|
|
29
|
+
if (!withLinks)
|
|
30
|
+
return;
|
|
31
|
+
const types = RELATIONSHIP_CONTRACT.types;
|
|
32
|
+
for (const l of s.links ?? []) {
|
|
33
|
+
for (const id of [l.source_id, l.target_id])
|
|
34
|
+
if (!ids.has(id))
|
|
35
|
+
throw new Error(`A snapshot link names "${id}", which the snapshot does not hold.`);
|
|
36
|
+
if (!types.includes(l.relation))
|
|
37
|
+
throw new Error(`A snapshot link has relation "${l.relation}", which is not in the contract vocabulary.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Where a path really lands, without requiring it to exist (review F9): the parent directory's
|
|
42
|
+
* realpath plus the name, following a symlink at the name even when it dangles, so a link to a
|
|
43
|
+
* real graph that has not been created yet still resolves to that graph's location.
|
|
44
|
+
*/
|
|
45
|
+
function landsAt(p, hops = 0) {
|
|
46
|
+
const abs = resolve(p);
|
|
47
|
+
let parent;
|
|
48
|
+
try {
|
|
49
|
+
parent = realpathSync(dirname(abs));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
parent = dirname(abs);
|
|
53
|
+
}
|
|
54
|
+
const here = resolve(parent, basename(abs));
|
|
55
|
+
if (hops < 40) {
|
|
56
|
+
try {
|
|
57
|
+
if (lstatSync(here).isSymbolicLink())
|
|
58
|
+
return landsAt(resolve(parent, readlinkSync(here)), hops + 1);
|
|
59
|
+
}
|
|
60
|
+
catch { /* nothing there: here is where it lands */ }
|
|
61
|
+
}
|
|
62
|
+
return here;
|
|
63
|
+
}
|
|
64
|
+
function occupied(p) {
|
|
65
|
+
try {
|
|
66
|
+
lstatSync(p);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export function loadSnapshot(s, dbPath, opts) {
|
|
74
|
+
const target = landsAt(dbPath);
|
|
75
|
+
for (const real of [opts.realDbPath ?? getLocalDbPath(), ...(opts.alsoRefuse ?? [])]) {
|
|
76
|
+
if (target === landsAt(real))
|
|
77
|
+
throw new Error(`${dbPath} is the real local graph; load a snapshot into a throwaway path instead.`);
|
|
78
|
+
}
|
|
79
|
+
// lstat, not exists: a dangling symlink is occupied too.
|
|
80
|
+
if (occupied(dbPath) || occupied(target))
|
|
81
|
+
throw new Error(`${dbPath} already exists; the loader only writes a new, throwaway graph.`);
|
|
82
|
+
validate(s, opts.links);
|
|
83
|
+
createLocalDb(dbPath).close(); // creates and migrates the schema
|
|
84
|
+
const db = new DatabaseSync(dbPath);
|
|
85
|
+
try {
|
|
86
|
+
db.exec('BEGIN IMMEDIATE');
|
|
87
|
+
const insertDecision = db.prepare('INSERT INTO decisions (id, title, summary, source_url, platform, decided_at, repo) VALUES (?, ?, ?, ?, ?, ?, ?)');
|
|
88
|
+
for (const d of s.decisions)
|
|
89
|
+
insertDecision.run(d.id, d.title, d.summary, d.source_url, d.platform, d.decided_at, d.repo ?? null);
|
|
90
|
+
let links = 0;
|
|
91
|
+
if (opts.links) {
|
|
92
|
+
const insertLink = db.prepare(`INSERT OR IGNORE INTO decision_links (id, source_id, target_id, relation, confidence, detector_version) VALUES (?, ?, ?, ?, ?, 'snapshot')`);
|
|
93
|
+
for (const [i, l] of (s.links ?? []).entries())
|
|
94
|
+
links += Number(insertLink.run(`snapshot:${i}`, l.source_id, l.target_id, l.relation, l.confidence).changes);
|
|
95
|
+
}
|
|
96
|
+
db.exec('COMMIT');
|
|
97
|
+
return { decisions: s.decisions.length, links };
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
if (db.isTransaction)
|
|
101
|
+
db.exec('ROLLBACK');
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
db.close();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=local-snapshot-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-snapshot-loader.js","sourceRoot":"","sources":["../../src/lib/local-snapshot-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The similarity thresholds the local graph ranks and links with. Moved verbatim out of
|
|
3
|
+
* local-gateway-client.ts (which re-exports every name, so no importer changes) so the link
|
|
4
|
+
* pass can use them without importing the client that calls it.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Cosine floor for linking two decisions as related on ingest.
|
|
8
|
+
*
|
|
9
|
+
* Named CONFLICT_THRESHOLD until ALI-503, which was the same category error as the code
|
|
10
|
+
* it governed: the value decides similarity, and similarity is not opposition. The
|
|
11
|
+
* classifier prompt in local-relationship-classifier.ts says so directly - "high textual
|
|
12
|
+
* similarity alone is NOT a conflict" - and the link written here is `relates` because an
|
|
13
|
+
* embedding cannot tell agreement from opposition. Only a classifier reading both can, and
|
|
14
|
+
* its verdict is never persisted as a link.
|
|
15
|
+
*/
|
|
16
|
+
export declare const SIMILARITY_THRESHOLD = 0.65;
|
|
17
|
+
/**
|
|
18
|
+
* Relevance floor for align_ask / align_search.
|
|
19
|
+
*
|
|
20
|
+
* Was an inline 0.1, the only unnamed threshold in this file and less than a quarter of
|
|
21
|
+
* its neighbours. It let align_ask answer "what happens when the brain service is down"
|
|
22
|
+
* with two unrelated decisions at 0.18 and 0.14 - noise the agent had to recognise by
|
|
23
|
+
* reading the decimals itself, and an audience cannot.
|
|
24
|
+
*
|
|
25
|
+
* 0.25 matches the gateway's own /decisions/smart-search floor, so the same question gets
|
|
26
|
+
* the same relevance bar in local and cloud mode. Lower than the 0.45 used for relatedness
|
|
27
|
+
* on purpose: search is a human asking a natural-language question, where a looser match is
|
|
28
|
+
* still worth showing, while relatedness is machinery acting on its own.
|
|
29
|
+
*
|
|
30
|
+
* An honest empty result is the point. "The graph has nothing on this" is a better answer
|
|
31
|
+
* than two wrong decisions, because the caller can act on it.
|
|
32
|
+
*/
|
|
33
|
+
export declare const SEARCH_THRESHOLD = 0.25;
|
|
34
|
+
/**
|
|
35
|
+
* Candidate floor for ADJUDICATION - the path that then pays an LLM per candidate.
|
|
36
|
+
*
|
|
37
|
+
* Deliberately higher than the retrieval floor below, because this surface is expensive in
|
|
38
|
+
* three ways the hook is not: up to 5 sequential calls to the user's own provider, ~11s of
|
|
39
|
+
* latency, and an exit code. A keyless CI runner that gets `no-context` today exits 0; the
|
|
40
|
+
* moment retrieval finds anything it gets `unknown` and exits 2. And the classifier cannot
|
|
41
|
+
* reject a candidate - its vocabulary is ten positive relations with no "unrelated" - so a
|
|
42
|
+
* loose candidate that reaches it is reported rather than filtered.
|
|
43
|
+
*
|
|
44
|
+
* Deliberately NOT recalibrated with the retrieval floor. Measured on the corpus, 0.30 would
|
|
45
|
+
* recover four more related pairs here too, and that trade is a separate decision with a
|
|
46
|
+
* separate blast radius (see relatedness-calibration.test.ts).
|
|
47
|
+
*/
|
|
48
|
+
export declare const RELATES_THRESHOLD = 0.45;
|
|
49
|
+
/**
|
|
50
|
+
* Candidate floor for RETRIEVAL ONLY (`depth: 'related'`, the agent editor hook).
|
|
51
|
+
*
|
|
52
|
+
* Measured, not chosen. Against fixtures/relatedness-corpus.json: 0.45 recovered 3 of 8 related
|
|
53
|
+
* pairs, 0.30 recovers 7 of 8, and neither admits a single unrelated pair. 0.25 scores the same
|
|
54
|
+
* 7 of 8, so the tie-break is margin over the worst false positive (0.2051): 0.30 clears it by
|
|
55
|
+
* 0.095 against 0.25's 0.045.
|
|
56
|
+
*
|
|
57
|
+
* 0.30 is also where this constant sat until commit 0cbef08 raised it to 0.45 inside a rename,
|
|
58
|
+
* unmentioned and unmeasured. So this is a revert with evidence attached rather than a new
|
|
59
|
+
* guess, and the evidence is a test that fails if the corpus stops supporting it.
|
|
60
|
+
*
|
|
61
|
+
* Safe to be looser here precisely because this path is cheap and honest: it returns above
|
|
62
|
+
* Stage 2, so it makes no provider call, and what the hook prints declines to assert anything
|
|
63
|
+
* ("related by content search and have NOT been adjudicated"). That is the same posture as
|
|
64
|
+
* `align search`, which has run at 0.25 all along - as has MCP `align_get_related_decisions`.
|
|
65
|
+
*/
|
|
66
|
+
export declare const RETRIEVAL_RELATES_THRESHOLD = 0.3;
|
|
67
|
+
export declare const RELATED_TOP_K = 3;
|
|
68
|
+
export declare const RELATED_FLOOR = 0.45;
|
|
69
|
+
export declare const DRIFT_THRESHOLD = 0.5;
|
|
70
|
+
//# sourceMappingURL=local-thresholds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-thresholds.d.ts","sourceRoot":"","sources":["../../src/lib/local-thresholds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAQ/C,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,aAAa,OAAoB,CAAC;AAI/C,eAAO,MAAM,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The similarity thresholds the local graph ranks and links with. Moved verbatim out of
|
|
3
|
+
* local-gateway-client.ts (which re-exports every name, so no importer changes) so the link
|
|
4
|
+
* pass can use them without importing the client that calls it.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Cosine floor for linking two decisions as related on ingest.
|
|
8
|
+
*
|
|
9
|
+
* Named CONFLICT_THRESHOLD until ALI-503, which was the same category error as the code
|
|
10
|
+
* it governed: the value decides similarity, and similarity is not opposition. The
|
|
11
|
+
* classifier prompt in local-relationship-classifier.ts says so directly - "high textual
|
|
12
|
+
* similarity alone is NOT a conflict" - and the link written here is `relates` because an
|
|
13
|
+
* embedding cannot tell agreement from opposition. Only a classifier reading both can, and
|
|
14
|
+
* its verdict is never persisted as a link.
|
|
15
|
+
*/
|
|
16
|
+
export const SIMILARITY_THRESHOLD = 0.65;
|
|
17
|
+
/**
|
|
18
|
+
* Relevance floor for align_ask / align_search.
|
|
19
|
+
*
|
|
20
|
+
* Was an inline 0.1, the only unnamed threshold in this file and less than a quarter of
|
|
21
|
+
* its neighbours. It let align_ask answer "what happens when the brain service is down"
|
|
22
|
+
* with two unrelated decisions at 0.18 and 0.14 - noise the agent had to recognise by
|
|
23
|
+
* reading the decimals itself, and an audience cannot.
|
|
24
|
+
*
|
|
25
|
+
* 0.25 matches the gateway's own /decisions/smart-search floor, so the same question gets
|
|
26
|
+
* the same relevance bar in local and cloud mode. Lower than the 0.45 used for relatedness
|
|
27
|
+
* on purpose: search is a human asking a natural-language question, where a looser match is
|
|
28
|
+
* still worth showing, while relatedness is machinery acting on its own.
|
|
29
|
+
*
|
|
30
|
+
* An honest empty result is the point. "The graph has nothing on this" is a better answer
|
|
31
|
+
* than two wrong decisions, because the caller can act on it.
|
|
32
|
+
*/
|
|
33
|
+
export const SEARCH_THRESHOLD = 0.25;
|
|
34
|
+
/**
|
|
35
|
+
* Candidate floor for ADJUDICATION - the path that then pays an LLM per candidate.
|
|
36
|
+
*
|
|
37
|
+
* Deliberately higher than the retrieval floor below, because this surface is expensive in
|
|
38
|
+
* three ways the hook is not: up to 5 sequential calls to the user's own provider, ~11s of
|
|
39
|
+
* latency, and an exit code. A keyless CI runner that gets `no-context` today exits 0; the
|
|
40
|
+
* moment retrieval finds anything it gets `unknown` and exits 2. And the classifier cannot
|
|
41
|
+
* reject a candidate - its vocabulary is ten positive relations with no "unrelated" - so a
|
|
42
|
+
* loose candidate that reaches it is reported rather than filtered.
|
|
43
|
+
*
|
|
44
|
+
* Deliberately NOT recalibrated with the retrieval floor. Measured on the corpus, 0.30 would
|
|
45
|
+
* recover four more related pairs here too, and that trade is a separate decision with a
|
|
46
|
+
* separate blast radius (see relatedness-calibration.test.ts).
|
|
47
|
+
*/
|
|
48
|
+
export const RELATES_THRESHOLD = 0.45;
|
|
49
|
+
/**
|
|
50
|
+
* Candidate floor for RETRIEVAL ONLY (`depth: 'related'`, the agent editor hook).
|
|
51
|
+
*
|
|
52
|
+
* Measured, not chosen. Against fixtures/relatedness-corpus.json: 0.45 recovered 3 of 8 related
|
|
53
|
+
* pairs, 0.30 recovers 7 of 8, and neither admits a single unrelated pair. 0.25 scores the same
|
|
54
|
+
* 7 of 8, so the tie-break is margin over the worst false positive (0.2051): 0.30 clears it by
|
|
55
|
+
* 0.095 against 0.25's 0.045.
|
|
56
|
+
*
|
|
57
|
+
* 0.30 is also where this constant sat until commit 0cbef08 raised it to 0.45 inside a rename,
|
|
58
|
+
* unmentioned and unmeasured. So this is a revert with evidence attached rather than a new
|
|
59
|
+
* guess, and the evidence is a test that fails if the corpus stops supporting it.
|
|
60
|
+
*
|
|
61
|
+
* Safe to be looser here precisely because this path is cheap and honest: it returns above
|
|
62
|
+
* Stage 2, so it makes no provider call, and what the hook prints declines to assert anything
|
|
63
|
+
* ("related by content search and have NOT been adjudicated"). That is the same posture as
|
|
64
|
+
* `align search`, which has run at 0.25 all along - as has MCP `align_get_related_decisions`.
|
|
65
|
+
*/
|
|
66
|
+
export const RETRIEVAL_RELATES_THRESHOLD = 0.3;
|
|
67
|
+
// ALI-785: the ABSOLUTE floor above is unreachable for cross-register pairs on
|
|
68
|
+
// MiniLM-L6 - measured on a 403-decision six-source corpus, near-duplicates score
|
|
69
|
+
// ~0.95, genuine cross-tool paraphrases 0.45-0.62, background noise 0.28-0.40, and
|
|
70
|
+
// 0 of 1,729 links crossed a platform. So linking also takes each item's top few
|
|
71
|
+
// neighbours RELATIVE to its own ranking, floored where the noise band ends. 0.45 is
|
|
72
|
+
// the adjudication floor the product already uses elsewhere; text-cleaning schemes
|
|
73
|
+
// were lab-tested first and moved nothing (title+cleaned scored 0.274 vs 0.286 raw).
|
|
74
|
+
export const RELATED_TOP_K = 3;
|
|
75
|
+
export const RELATED_FLOOR = RELATES_THRESHOLD;
|
|
76
|
+
// Below this similarity between a decision and new content, the content is
|
|
77
|
+
// considered to have drifted from the decision.
|
|
78
|
+
export const DRIFT_THRESHOLD = 0.5;
|
|
79
|
+
//# sourceMappingURL=local-thresholds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-thresholds.js","sourceRoot":"","sources":["../../src/lib/local-thresholds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AACzC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,+EAA+E;AAC/E,kFAAkF;AAClF,mFAAmF;AACnF,iFAAiF;AACjF,qFAAqF;AACrF,mFAAmF;AACnF,qFAAqF;AACrF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE/C,2EAA2E;AAC3E,gDAAgD;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC"}
|