@aligndottech/cli 0.48.0 → 0.50.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 +10 -8
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +35 -26
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +7 -2
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/ai.d.ts +11 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +121 -0
- package/dist/commands/ai.js.map +1 -0
- 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/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/default-action.js +2 -2
- package/dist/commands/default-action.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/local.d.ts.map +1 -1
- package/dist/commands/local.js +76 -4
- package/dist/commands/local.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 +141 -2
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +72 -14
- 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 +118 -241
- 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 +60 -0
- package/dist/commands/share.js.map +1 -0
- 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 +27 -1
- package/dist/commands/why.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/ask-key-offer.d.ts +38 -0
- package/dist/lib/ask-key-offer.d.ts.map +1 -0
- package/dist/lib/ask-key-offer.js +130 -0
- package/dist/lib/ask-key-offer.js.map +1 -0
- 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/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/config.d.ts +56 -24
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +176 -45
- 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 +93 -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 +96 -0
- package/dist/lib/curation/judgements-db.d.ts.map +1 -0
- package/dist/lib/curation/judgements-db.js +200 -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 +359 -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/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 +34 -0
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +19 -1
- 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/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/amp.d.ts +18 -0
- package/dist/lib/launch/adapters/amp.d.ts.map +1 -0
- package/dist/lib/launch/adapters/amp.js +29 -0
- package/dist/lib/launch/adapters/amp.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/droid.d.ts +19 -0
- package/dist/lib/launch/adapters/droid.d.ts.map +1 -0
- package/dist/lib/launch/adapters/droid.js +38 -0
- package/dist/lib/launch/adapters/droid.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/grok-build.d.ts +16 -0
- package/dist/lib/launch/adapters/grok-build.d.ts.map +1 -0
- package/dist/lib/launch/adapters/grok-build.js +25 -0
- package/dist/lib/launch/adapters/grok-build.js.map +1 -0
- package/dist/lib/launch/adapters/kiro.d.ts +17 -0
- package/dist/lib/launch/adapters/kiro.d.ts.map +1 -0
- package/dist/lib/launch/adapters/kiro.js +25 -0
- package/dist/lib/launch/adapters/kiro.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/adapters/qwen.d.ts +25 -0
- package/dist/lib/launch/adapters/qwen.d.ts.map +1 -0
- package/dist/lib/launch/adapters/qwen.js +67 -0
- package/dist/lib/launch/adapters/qwen.js.map +1 -0
- package/dist/lib/launch/agents.d.ts +6 -1
- package/dist/lib/launch/agents.d.ts.map +1 -1
- package/dist/lib/launch/agents.js +12 -4
- package/dist/lib/launch/agents.js.map +1 -1
- package/dist/lib/launch/amp-state.d.ts +21 -0
- package/dist/lib/launch/amp-state.d.ts.map +1 -0
- package/dist/lib/launch/amp-state.js +61 -0
- package/dist/lib/launch/amp-state.js.map +1 -0
- 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 +11 -1
- package/dist/lib/launch/config-writes.d.ts.map +1 -1
- package/dist/lib/launch/config-writes.js +66 -8
- 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 +5 -2
- package/dist/lib/launch/detect.js.map +1 -1
- package/dist/lib/launch/droid-state.d.ts +24 -0
- package/dist/lib/launch/droid-state.d.ts.map +1 -0
- package/dist/lib/launch/droid-state.js +74 -0
- package/dist/lib/launch/droid-state.js.map +1 -0
- 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/grok-state.d.ts +42 -0
- package/dist/lib/launch/grok-state.d.ts.map +1 -0
- package/dist/lib/launch/grok-state.js +128 -0
- package/dist/lib/launch/grok-state.js.map +1 -0
- package/dist/lib/launch/kiro-state.d.ts +22 -0
- package/dist/lib/launch/kiro-state.d.ts.map +1 -0
- package/dist/lib/launch/kiro-state.js +59 -0
- package/dist/lib/launch/kiro-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 +51 -2
- package/dist/lib/launch/launch.d.ts.map +1 -1
- package/dist/lib/launch/launch.js +70 -6
- package/dist/lib/launch/launch.js.map +1 -1
- package/dist/lib/launch/layer-files.d.ts +12 -0
- package/dist/lib/launch/layer-files.d.ts.map +1 -0
- package/dist/lib/launch/layer-files.js +43 -0
- package/dist/lib/launch/layer-files.js.map +1 -0
- 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 +151 -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 +7 -6
- 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/qwen-state.d.ts +30 -0
- package/dist/lib/launch/qwen-state.d.ts.map +1 -0
- package/dist/lib/launch/qwen-state.js +57 -0
- package/dist/lib/launch/qwen-state.js.map +1 -0
- package/dist/lib/launch/qwen-trust.d.ts +24 -0
- package/dist/lib/launch/qwen-trust.d.ts.map +1 -0
- package/dist/lib/launch/qwen-trust.js +100 -0
- package/dist/lib/launch/qwen-trust.js.map +1 -0
- 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/amp.d.ts +3 -0
- package/dist/lib/launch/registry/agents/amp.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/amp.js +14 -0
- package/dist/lib/launch/registry/agents/amp.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/droid.d.ts +3 -0
- package/dist/lib/launch/registry/agents/droid.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/droid.js +13 -0
- package/dist/lib/launch/registry/agents/droid.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/agents/grok-build.d.ts +3 -0
- package/dist/lib/launch/registry/agents/grok-build.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/grok-build.js +14 -0
- package/dist/lib/launch/registry/agents/grok-build.js.map +1 -0
- package/dist/lib/launch/registry/agents/kiro.d.ts +3 -0
- package/dist/lib/launch/registry/agents/kiro.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/kiro.js +11 -0
- package/dist/lib/launch/registry/agents/kiro.js.map +1 -0
- package/dist/lib/launch/registry/agents/qwen.d.ts +3 -0
- package/dist/lib/launch/registry/agents/qwen.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/qwen.js +11 -0
- package/dist/lib/launch/registry/agents/qwen.js.map +1 -0
- package/dist/lib/launch/registry/index.d.ts +4 -1
- package/dist/lib/launch/registry/index.d.ts.map +1 -1
- package/dist/lib/launch/registry/index.js +15 -2
- package/dist/lib/launch/registry/index.js.map +1 -1
- package/dist/lib/launch/registry/types.d.ts +17 -1
- package/dist/lib/launch/registry/types.d.ts.map +1 -1
- package/dist/lib/launch/run-agent.d.ts +11 -0
- package/dist/lib/launch/run-agent.d.ts.map +1 -1
- package/dist/lib/launch/run-agent.js +22 -1
- package/dist/lib/launch/run-agent.js.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 +82 -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/llm-providers.d.ts +66 -0
- package/dist/lib/llm-providers.d.ts.map +1 -0
- package/dist/lib/llm-providers.js +150 -0
- package/dist/lib/llm-providers.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 +484 -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-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 +61 -11
- package/dist/lib/local-db.d.ts.map +1 -1
- package/dist/lib/local-db.js +186 -371
- 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 +30 -87
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +182 -171
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/local-ingest.d.ts +129 -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 +61 -0
- package/dist/lib/local-link-pass.js.map +1 -0
- package/dist/lib/local-llm.d.ts +63 -12
- package/dist/lib/local-llm.d.ts.map +1 -1
- package/dist/lib/local-llm.js +229 -104
- package/dist/lib/local-llm.js.map +1 -1
- package/dist/lib/local-mode.d.ts +4 -1
- package/dist/lib/local-mode.d.ts.map +1 -1
- package/dist/lib/local-mode.js +16 -1
- 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-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/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-tool.d.ts +46 -0
- package/dist/lib/mcp/share-tool.d.ts.map +1 -0
- package/dist/lib/mcp/share-tool.js +68 -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/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/safe-config-write.d.ts +12 -1
- package/dist/lib/safe-config-write.d.ts.map +1 -1
- package/dist/lib/safe-config-write.js +162 -9
- 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 +42 -0
- package/dist/lib/scope-defaults.js.map +1 -0
- package/dist/lib/scope-real.d.ts +223 -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/share/command.d.ts +32 -0
- package/dist/lib/share/command.d.ts.map +1 -0
- package/dist/lib/share/command.js +136 -0
- package/dist/lib/share/command.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 +135 -0
- package/dist/lib/share/ledger.js.map +1 -0
- package/dist/lib/share/payload.d.ts +92 -0
- package/dist/lib/share/payload.d.ts.map +1 -0
- package/dist/lib/share/payload.js +138 -0
- package/dist/lib/share/payload.js.map +1 -0
- package/dist/lib/share/pending.d.ts +48 -0
- package/dist/lib/share/pending.d.ts.map +1 -0
- package/dist/lib/share/pending.js +130 -0
- package/dist/lib/share/pending.js.map +1 -0
- package/dist/lib/share/preview.d.ts +18 -0
- package/dist/lib/share/preview.d.ts.map +1 -0
- package/dist/lib/share/preview.js +72 -0
- package/dist/lib/share/preview.js.map +1 -0
- package/dist/lib/share/run.d.ts +115 -0
- package/dist/lib/share/run.d.ts.map +1 -0
- package/dist/lib/share/run.js +261 -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 +19 -0
- package/dist/lib/share/secret-scan.d.ts.map +1 -0
- package/dist/lib/share/secret-scan.js +75 -0
- package/dist/lib/share/secret-scan.js.map +1 -0
- package/dist/lib/share/tty.d.ts +4 -0
- package/dist/lib/share/tty.d.ts.map +1 -0
- package/dist/lib/share/tty.js +57 -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 +43 -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-env.d.ts +8 -0
- package/dist/lib/startup-env.d.ts.map +1 -0
- package/dist/lib/startup-env.js +8 -0
- package/dist/lib/startup-env.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 +44 -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 +91 -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 +208 -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 +253 -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 +87 -22
- package/dist/lib/usage-telemetry.d.ts.map +1 -1
- package/dist/lib/usage-telemetry.js +263 -74
- 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 +3 -2
- 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
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"case_insensitive": [
|
|
3
|
+
[
|
|
4
|
+
"([a-zA-Z][a-zA-Z0-9+.\\-]{0,31}://)[^/\\s:@]+:[^/\\s:@]+@",
|
|
5
|
+
"\\1<URL_CREDENTIALS>@"
|
|
6
|
+
],
|
|
7
|
+
[
|
|
8
|
+
"(?<![\\w@.:/])[A-Za-z][\\w.\\-]{1,30}:(?![/\\s])(?!v?\\d[\\d.]*(?:-[a-z0-9][a-z0-9.\\-]*)?(?![^\\s:@/]))(?=[^\\s:@/]*[A-Za-z])(?=[^\\s:@/]*\\d)[^\\s:@/]{8,}",
|
|
9
|
+
"<CREDENTIALS>"
|
|
10
|
+
],
|
|
11
|
+
[
|
|
12
|
+
"AKIA[0-9A-Z]{16}",
|
|
13
|
+
"<AWS_ACCESS_KEY>"
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
"ghp_[a-zA-Z0-9]{36}",
|
|
17
|
+
"<GITHUB_TOKEN>"
|
|
18
|
+
],
|
|
19
|
+
[
|
|
20
|
+
"github_pat_[a-zA-Z0-9]{22}_[a-zA-Z0-9]{59}",
|
|
21
|
+
"<GITHUB_TOKEN>"
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
"sk-[a-zA-Z0-9]{48}",
|
|
25
|
+
"<OPENAI_KEY>"
|
|
26
|
+
],
|
|
27
|
+
[
|
|
28
|
+
"sk-ant-[a-zA-Z0-9\\-]{95,}",
|
|
29
|
+
"<ANTHROPIC_KEY>"
|
|
30
|
+
],
|
|
31
|
+
[
|
|
32
|
+
"(?<![A-Za-z0-9])eyJ(?:[A-Za-z0-9_\\-]|\\r?\\n){10,}(?:\\s*(?:\\.|%2E)\\s*(?:[A-Za-z0-9_\\-]|\\r?\\n){10,}){2}",
|
|
33
|
+
"<JWT>"
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
"(?<![A-Za-z0-9])sk-(?=[A-Za-z0-9_\\-]*\\d)[A-Za-z0-9_\\-]{20,}",
|
|
37
|
+
"<OPENAI_KEY>"
|
|
38
|
+
],
|
|
39
|
+
[
|
|
40
|
+
"(?<![A-Za-z0-9])[sr]k_(?:live|test)_[A-Za-z0-9]{16,}",
|
|
41
|
+
"<STRIPE_KEY>"
|
|
42
|
+
],
|
|
43
|
+
[
|
|
44
|
+
"(?<![A-Za-z0-9])AIza[0-9A-Za-z_\\-]{35}",
|
|
45
|
+
"<GOOGLE_API_KEY>"
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"((?:aws[_\\-\\s]*secret(?:[_\\-\\s]*access)?(?:[_\\-\\s]*key)?|secret[_\\-\\s]*access[_\\-\\s]*key)[\\\"'\\s:=]+)[A-Za-z0-9/+]{40}(?![A-Za-z0-9/+])",
|
|
49
|
+
"\\1<AWS_SECRET_KEY>"
|
|
50
|
+
],
|
|
51
|
+
[
|
|
52
|
+
"xox[baprs]-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24,}",
|
|
53
|
+
"<SLACK_TOKEN>"
|
|
54
|
+
],
|
|
55
|
+
[
|
|
56
|
+
"(?<![A-Za-z0-9])xox[a-z](?:\\.xox[a-z])?-[A-Za-z0-9\\-]{20,}",
|
|
57
|
+
"<SLACK_TOKEN>"
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"(?<![A-Za-z0-9])lin_api_[A-Za-z0-9]{32,}",
|
|
61
|
+
"<LINEAR_KEY>"
|
|
62
|
+
],
|
|
63
|
+
[
|
|
64
|
+
"(?<![A-Za-z0-9])gh[ousr]_[A-Za-z0-9]{36}",
|
|
65
|
+
"<GITHUB_TOKEN>"
|
|
66
|
+
],
|
|
67
|
+
[
|
|
68
|
+
"(?<![A-Za-z0-9])glpat-[A-Za-z0-9_\\-]{20,}",
|
|
69
|
+
"<GITLAB_TOKEN>"
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
"api[_-]?key[\"\\s:=]+[\"\\']?([a-zA-Z0-9_\\-]{20,})[\"\\']?",
|
|
73
|
+
"<API_KEY>"
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
"bearer\\s+[a-zA-Z0-9\\-._~+/]{20,}=*",
|
|
77
|
+
"<BEARER_TOKEN>"
|
|
78
|
+
],
|
|
79
|
+
[
|
|
80
|
+
"-----BEGIN ((?:[A-Z0-9]{1,20} ){0,4})PRIVATE KEY(?: BLOCK)?-----(?:[A-Za-z0-9+/=\\s:,.]{0,16384}-----END \\1PRIVATE KEY(?: BLOCK)?-----)?",
|
|
81
|
+
"<PRIVATE_KEY>"
|
|
82
|
+
],
|
|
83
|
+
[
|
|
84
|
+
"([?&](?:token|access_token|id_token|refresh_token|api_key|apikey|secret|client_secret|password|passwd|pwd|passcode|sig|signature|x-amz-signature|x-amz-credential)=)(?=[^&\\s\\\"'<>#]{0,100}\\d)[^&\\s\\\"'<>#]{8,}",
|
|
85
|
+
"\\1<URL_SECRET_PARAM>"
|
|
86
|
+
],
|
|
87
|
+
[
|
|
88
|
+
"((?<![A-Za-z0-9])(?<!page_)(?<!page-)(?:password|passwd|secret|token)[\\\"']?[ \\t]*[:=][ \\t]*[\\\"']?)(?!\\$|\\{\\{|%\\(|v?\\d+\\.\\d|[a-z_]+=\\d|[A-Za-z_][\\w.]*\\()(?![^\\s\\\"'<>,;&]{0,64}\\d{4}-\\d\\d-\\d\\d)(?=[^\\s\\\"'<>,;&]{0,100}[A-Za-z])(?=[^\\s\\\"'<>,;&]{0,100}(?:[!@#$%^*]|\\d[^\\s\\\"'<>,;&]{0,100}\\d))[^\\s\\\"'<>,;&]{8,}",
|
|
89
|
+
"\\1<SECRET_VALUE>"
|
|
90
|
+
]
|
|
91
|
+
],
|
|
92
|
+
"case_sensitive": [
|
|
93
|
+
[
|
|
94
|
+
"(\\b[A-Z0-9_]*(?:PASSWORD|PASSWD|SECRET|TOKEN)[A-Z0-9_]*\\s*=\\s*[\\\"']?)(?!(?<!')(?:\\$\\([^)\\\"'<>\\n]*\\)|\\$\\{[A-Z_][A-Z0-9_]*\\}|\\$[A-Z_][A-Z0-9_]*)(?![^\\s\\\"'<>]))(?=[^\\s\\\"']*[A-Za-z])[^\\s\\\"'<>]{6,}",
|
|
95
|
+
"\\1<SECRET_VALUE>"
|
|
96
|
+
]
|
|
97
|
+
],
|
|
98
|
+
"aws_bare_secret": "(?<![A-Za-z0-9/+])(?=[A-Za-z0-9/+]*[A-Z])(?=[A-Za-z0-9/+]*[a-z])(?=[A-Za-z0-9/+]*\\d)[A-Za-z0-9/+]{40}(?![A-Za-z0-9/+])",
|
|
99
|
+
"aws_context_chars": 100
|
|
100
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface SecretFinding {
|
|
2
|
+
/** Which field of the share held it: `title`, `summary`, `source_url`, `note`. */
|
|
3
|
+
field: string;
|
|
4
|
+
/** The placeholder the redactor would write, for example `<GITHUB_TOKEN>`. Never the match. */
|
|
5
|
+
placeholder: string;
|
|
6
|
+
}
|
|
7
|
+
/** Placeholder names found in `text`, each once, in pattern order. */
|
|
8
|
+
export declare function secretsIn(text: string): string[];
|
|
9
|
+
/** Scan every named field; one finding per (field, placeholder). */
|
|
10
|
+
export declare function scanForSecrets(fields: Array<{
|
|
11
|
+
field: string;
|
|
12
|
+
text: string | null | undefined;
|
|
13
|
+
}>): SecretFinding[];
|
|
14
|
+
export declare function scanSourceUrl(url: string): SecretFinding[];
|
|
15
|
+
export declare function scanHiddenText(fields: Array<{
|
|
16
|
+
field: string;
|
|
17
|
+
text: string | null | undefined;
|
|
18
|
+
}>): SecretFinding[];
|
|
19
|
+
//# sourceMappingURL=secret-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-scan.d.ts","sourceRoot":"","sources":["../../../src/lib/share/secret-scan.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,WAAW,EAAE,MAAM,CAAC;CACrB;AAYD,sEAAsE;AACtE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUhD;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,CAAC,GAAG,aAAa,EAAE,CAOjH;AASD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAM1D;AASD,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,CAAC,GAAG,aAAa,EAAE,CAEjH"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L9: the client-side secret scan for `align share`. Refuse and SHOW which kind of secret was found,
|
|
3
|
+
* never the secret itself: the match is not printed, logged or returned, only its placeholder name.
|
|
4
|
+
*
|
|
5
|
+
* `secret-patterns.json` is vendored byte for byte from align-stack `config/secret-patterns.json`
|
|
6
|
+
* (last changed in align-stack commit 292e07017). It is the same list brain redacts with and the
|
|
7
|
+
* gateway refuses on at POST /ingest/batch, so a share that passes here is not refused there for a
|
|
8
|
+
* credential shape. `share-secret-patterns.test.ts` pins the file's sha256 and one positive and one
|
|
9
|
+
* near-miss per newer shape; a pattern added server-side but not copied here only means the SERVER
|
|
10
|
+
* refuses a share this scan let through, so re-vendor the file and update that pin together.
|
|
11
|
+
*/
|
|
12
|
+
import patterns from './secret-patterns.json' with { type: 'json' };
|
|
13
|
+
const placeholderOf = (replacement) => /<[A-Z0-9_]+>/.exec(replacement)?.[0] ?? '<SECRET>';
|
|
14
|
+
const COMPILED = [
|
|
15
|
+
...patterns.case_insensitive.map(([p, r]) => ({ re: new RegExp(p, 'i'), placeholder: placeholderOf(r) })),
|
|
16
|
+
...patterns.case_sensitive.map(([p, r]) => ({ re: new RegExp(p), placeholder: placeholderOf(r) })),
|
|
17
|
+
];
|
|
18
|
+
const AWS_BARE = new RegExp(patterns.aws_bare_secret, 'g');
|
|
19
|
+
const AWS_CONTEXT = patterns.aws_context_chars;
|
|
20
|
+
/** Placeholder names found in `text`, each once, in pattern order. */
|
|
21
|
+
export function secretsIn(text) {
|
|
22
|
+
const found = [];
|
|
23
|
+
for (const c of COMPILED)
|
|
24
|
+
if (c.re.test(text) && !found.includes(c.placeholder))
|
|
25
|
+
found.push(c.placeholder);
|
|
26
|
+
// The bare AWS secret shape is only a secret near the word "aws", exactly as the server decides.
|
|
27
|
+
AWS_BARE.lastIndex = 0;
|
|
28
|
+
for (let m = AWS_BARE.exec(text); m; m = AWS_BARE.exec(text)) {
|
|
29
|
+
const near = text.slice(Math.max(0, m.index - AWS_CONTEXT), m.index + m[0].length + AWS_CONTEXT).toLowerCase();
|
|
30
|
+
if (near.includes('aws') && !found.includes('<AWS_SECRET_KEY>'))
|
|
31
|
+
found.push('<AWS_SECRET_KEY>');
|
|
32
|
+
}
|
|
33
|
+
return found;
|
|
34
|
+
}
|
|
35
|
+
/** Scan every named field; one finding per (field, placeholder). */
|
|
36
|
+
export function scanForSecrets(fields) {
|
|
37
|
+
const out = [];
|
|
38
|
+
for (const f of fields) {
|
|
39
|
+
if (!f.text)
|
|
40
|
+
continue;
|
|
41
|
+
for (const placeholder of secretsIn(f.text))
|
|
42
|
+
out.push({ field: f.field, placeholder });
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Query parameters that carry a secret in the URL itself (a Zoom `pwd`, a signed link's signature, a token).
|
|
48
|
+
* The decision's URL is sent and shown, so one of these is refused like a token in the text, never stripped:
|
|
49
|
+
* stripping would change which item the URL names. The VALUE is never reported, only the parameter name.
|
|
50
|
+
*/
|
|
51
|
+
const SECRET_PARAMS = /^(?:token|access[_-]?token|id[_-]?token|refresh[_-]?token|api[_-]?key|apikey|secret|client[_-]?secret|password|passwd|pwd|passcode|sig|signature|x-amz-signature|x-amz-credential|auth|authorization)$/i;
|
|
52
|
+
export function scanSourceUrl(url) {
|
|
53
|
+
let parsed;
|
|
54
|
+
try {
|
|
55
|
+
parsed = new URL(url);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
const names = new Set();
|
|
61
|
+
for (const [k, v] of parsed.searchParams)
|
|
62
|
+
if (v !== '' && SECRET_PARAMS.test(k))
|
|
63
|
+
names.add(k.toLowerCase());
|
|
64
|
+
return [...names].map((n) => ({ field: `source_url (parameter ${n})`, placeholder: '<URL_SECRET_PARAM>' }));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Tag characters (U+E0000-E007F) render as nothing but a model reads them as text, so they can hide an
|
|
68
|
+
* instruction inside a title or note. The secret scan cannot see them and a person cannot either, so a share
|
|
69
|
+
* containing one is refused (naming the field) rather than sent.
|
|
70
|
+
*/
|
|
71
|
+
const HIDDEN = /[\u{E0000}-\u{E007F}]/u;
|
|
72
|
+
export function scanHiddenText(fields) {
|
|
73
|
+
return fields.filter((f) => f.text && HIDDEN.test(f.text)).map((f) => ({ field: f.field, placeholder: '<HIDDEN_TEXT>' }));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=secret-scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-scan.js","sourceRoot":"","sources":["../../../src/lib/share/secret-scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tty.d.ts","sourceRoot":"","sources":["../../../src/lib/share/tty.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAChE,eAAO,MAAM,SAAS,EAAE,QAA0F,CAAC;AAEnH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,QAAoB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA4BtH"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L9: ask a person a yes/no question on their CONTROLLING terminal, and prove it is one.
|
|
3
|
+
*
|
|
4
|
+
* Why not stdin: an agent's shell tool, a hook and a pipe all own stdin, so a "yes" read there proves
|
|
5
|
+
* nothing. `/dev/tty` (`CONIN$`/`CONOUT$` on Windows) is the terminal the process was started from; a
|
|
6
|
+
* process with no controlling terminal (a daemon, a `setsid` child, most agent shells) cannot open it.
|
|
7
|
+
* The handle must also pass `tty.isatty`: on Windows an open of CONIN$ can succeed against something
|
|
8
|
+
* that is not an interactive console, and "cannot prove it" means refuse, never block.
|
|
9
|
+
*
|
|
10
|
+
* The text a person must read is written to the SAME terminal just before the question, so it is the
|
|
11
|
+
* thing they see even when stdout is a pipe or a file. Returns true/false for y/n (default No, and end
|
|
12
|
+
* of input is No), or null when there is no interactive terminal. Honest limit, stated in SECURITY.md:
|
|
13
|
+
* a caller that allocates its own pseudo-terminal can type the answer; no local CLI can stop that.
|
|
14
|
+
*/
|
|
15
|
+
import fs from 'node:fs';
|
|
16
|
+
import readline from 'node:readline';
|
|
17
|
+
import tty from 'node:tty';
|
|
18
|
+
export const TTY_PATHS = process.platform === 'win32' ? ['CONIN$', 'CONOUT$'] : ['/dev/tty', '/dev/tty'];
|
|
19
|
+
export async function ttyConfirm(shown, question, paths = TTY_PATHS) {
|
|
20
|
+
let inFd = -1;
|
|
21
|
+
let outFd = -1;
|
|
22
|
+
try {
|
|
23
|
+
inFd = fs.openSync(paths[0], 'r');
|
|
24
|
+
outFd = fs.openSync(paths[1], 'w');
|
|
25
|
+
if (!tty.isatty(inFd) || !tty.isatty(outFd))
|
|
26
|
+
throw new Error('not an interactive terminal');
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
for (const fd of [inFd, outFd])
|
|
30
|
+
if (fd >= 0) {
|
|
31
|
+
try {
|
|
32
|
+
fs.closeSync(fd);
|
|
33
|
+
}
|
|
34
|
+
catch { /* already closed */ }
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
// The tty streams own their descriptors from here: destroying them closes the fds, so no
|
|
39
|
+
// fs.closeSync of ours can race a readline that is still reading (the EBADF the review found).
|
|
40
|
+
const input = new tty.ReadStream(inFd);
|
|
41
|
+
const output = new tty.WriteStream(outFd);
|
|
42
|
+
const rl = readline.createInterface({ input, output, terminal: true });
|
|
43
|
+
try {
|
|
44
|
+
output.write(`${shown}\n\n`);
|
|
45
|
+
const answer = await new Promise((resolve) => {
|
|
46
|
+
rl.once('close', () => resolve(''));
|
|
47
|
+
rl.question(`${question} [y/N] `, resolve);
|
|
48
|
+
});
|
|
49
|
+
return /^y(es)?$/i.test(answer.trim());
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
rl.close();
|
|
53
|
+
input.destroy();
|
|
54
|
+
output.destroy();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=tty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tty.js","sourceRoot":"","sources":["../../../src/lib/share/tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,CAAC,MAAM,SAAS,GAAa,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAEnH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,QAAgB,EAAE,QAAkB,SAAS;IAC3F,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAAC,CAAC;QACzG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,yFAAyF;IACzF,+FAA+F;IAC/F,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACnD,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visible.d.ts","sourceRoot":"","sources":["../../../src/lib/share/visible.ts"],"names":[],"mappings":"AAoBA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAOlF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L9: make every untrusted string safe to print on a terminal a person is about to answer.
|
|
3
|
+
*
|
|
4
|
+
* A decision's title, text, URL and notes come from sources other people write (a PR title, a Slack
|
|
5
|
+
* thread). Raw, they can carry ESC sequences that rewrite or clear the screen, a bare CR that overwrites
|
|
6
|
+
* the line above, or bidi overrides that reorder what is read, so the preview would show something other
|
|
7
|
+
* than what is sent. Each such character is replaced by a visible escape (`\x1b`, ``), never
|
|
8
|
+
* dropped: dropping would also hide that it was there.
|
|
9
|
+
*
|
|
10
|
+
* Covered, by Unicode category: controls (ESC, CR, tab, NUL, DEL, C1), every format character (bidi
|
|
11
|
+
* overrides and isolates, zero-width, soft hyphen, U+061C, the tag characters U+E0000-E007F), line and
|
|
12
|
+
* paragraph separators, default-ignorable code points (U+034F, U+180E, U+3164, U+FFF9-FFFB) and lone surrogates.
|
|
13
|
+
* `\n` is kept only when the caller asks (the indented body), because it cannot overwrite earlier text.
|
|
14
|
+
*/
|
|
15
|
+
// Unicode categories rather than hand-listed ranges (a hand-written list is guessing at published data):
|
|
16
|
+
// Cc controls (ESC, CR, NUL, C1), Cf format (bidi marks and overrides, zero-width, soft hyphen, ALM, tag
|
|
17
|
+
// characters U+E0000-E007F), Zl/Zp line and paragraph separators, Default_Ignorable_Code_Point (Hangul
|
|
18
|
+
// fillers, U+034F, U+180E, interlinear annotation marks) and Cs, a lone surrogate (needs the u flag).
|
|
19
|
+
const UNSAFE = /[\p{Cc}\p{Cf}\p{Zl}\p{Zp}\p{Default_Ignorable_Code_Point}]|\p{Cs}/gu;
|
|
20
|
+
export function visible(text, opts = {}) {
|
|
21
|
+
return text.replace(UNSAFE, (c) => {
|
|
22
|
+
if (c === '\n' && opts.keepNewline)
|
|
23
|
+
return c;
|
|
24
|
+
const code = c.codePointAt(0);
|
|
25
|
+
if (code <= 0xff)
|
|
26
|
+
return `\\x${code.toString(16).padStart(2, '0')}`;
|
|
27
|
+
return code <= 0xffff ? `\\u${code.toString(16).padStart(4, '0')}` : `\\u{${code.toString(16)}}`;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=visible.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visible.js","sourceRoot":"","sources":["../../../src/lib/share/visible.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,yGAAyG;AACzG,yGAAyG;AACzG,uGAAuG;AACvG,sGAAsG;AACtG,MAAM,MAAM,GAAG,qEAAqE,CAAC;AAErF,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAkC,EAAE;IACxE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC/B,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACpE,OAAO,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;IACnG,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L9: the shape POST /ingest/batch answers a SHARE with, read without trusting it.
|
|
3
|
+
*
|
|
4
|
+
* The response is not one snapshot per request item. It carries `snapshots` for what was WRITTEN
|
|
5
|
+
* (each with `request_index`, its position in the request), and the rest by index: `matched`
|
|
6
|
+
* (attached to a decision the team already held, nothing created), `skipped` (a re-share left alone),
|
|
7
|
+
* `refused` (the identity belongs to a decision the caller cannot see), `match_ambiguous` (several
|
|
8
|
+
* team decisions share the source key, so the item was created as new) and `judgements` (one report
|
|
9
|
+
* per target, one result per judgement). Reading `snapshots[0]` as "the decision I shared" is wrong
|
|
10
|
+
* whenever any of those is present. This module turns the response into exactly one outcome per
|
|
11
|
+
* request item, and an item the response never mentions is `unknown`, never "created".
|
|
12
|
+
*/
|
|
13
|
+
export interface JudgementResult {
|
|
14
|
+
ok: boolean;
|
|
15
|
+
stored?: boolean;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface BatchResponse {
|
|
19
|
+
snapshots?: Array<{
|
|
20
|
+
id: string;
|
|
21
|
+
title?: string;
|
|
22
|
+
summary?: string;
|
|
23
|
+
request_index?: number;
|
|
24
|
+
is_new?: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
skipped?: Array<{
|
|
27
|
+
index: number;
|
|
28
|
+
reason: string;
|
|
29
|
+
existing_id: string;
|
|
30
|
+
}>;
|
|
31
|
+
matched?: Array<{
|
|
32
|
+
request_index: number;
|
|
33
|
+
existing_id: string;
|
|
34
|
+
status?: string;
|
|
35
|
+
team_text_hash?: string;
|
|
36
|
+
needs_confirmation?: Array<{
|
|
37
|
+
kind: string;
|
|
38
|
+
judgement_index: number;
|
|
39
|
+
}>;
|
|
40
|
+
}>;
|
|
41
|
+
match_ambiguous?: number[];
|
|
42
|
+
refused?: Array<{
|
|
43
|
+
request_index: number;
|
|
44
|
+
reason: string;
|
|
45
|
+
}>;
|
|
46
|
+
judgements?: Array<{
|
|
47
|
+
request_index: number;
|
|
48
|
+
decision_id: string;
|
|
49
|
+
results: JudgementResult[];
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
export interface JudgementFailure {
|
|
53
|
+
index: number;
|
|
54
|
+
error: string;
|
|
55
|
+
}
|
|
56
|
+
interface Common {
|
|
57
|
+
index: number;
|
|
58
|
+
/** One result per judgement sent, or null when the gateway reported none (an older gateway ignores the field). */
|
|
59
|
+
judgements: JudgementResult[] | null;
|
|
60
|
+
}
|
|
61
|
+
export type ItemOutcome = (Common & {
|
|
62
|
+
kind: 'created';
|
|
63
|
+
remoteId: string;
|
|
64
|
+
ambiguous: boolean;
|
|
65
|
+
uncertain: boolean;
|
|
66
|
+
}) | (Common & {
|
|
67
|
+
kind: 'updated';
|
|
68
|
+
remoteId: string;
|
|
69
|
+
}) | (Common & {
|
|
70
|
+
kind: 'matched';
|
|
71
|
+
remoteId: string;
|
|
72
|
+
status: string;
|
|
73
|
+
teamTextHash: string | null;
|
|
74
|
+
needsConfirmation: Array<{
|
|
75
|
+
kind: string;
|
|
76
|
+
judgement_index: number;
|
|
77
|
+
}>;
|
|
78
|
+
}) | (Common & {
|
|
79
|
+
kind: 'skipped';
|
|
80
|
+
remoteId: string;
|
|
81
|
+
reason: string;
|
|
82
|
+
}) | {
|
|
83
|
+
kind: 'refused';
|
|
84
|
+
index: number;
|
|
85
|
+
reason: string;
|
|
86
|
+
} | {
|
|
87
|
+
kind: 'unknown';
|
|
88
|
+
index: number;
|
|
89
|
+
};
|
|
90
|
+
export declare function failedJudgements(results: JudgementResult[] | null): JudgementFailure[];
|
|
91
|
+
/**
|
|
92
|
+
* One outcome per request item. `sent` is how many items the request carried. A response whose
|
|
93
|
+
* snapshots carry no `request_index` (a gateway before the field) is index-aligned ONLY when nothing
|
|
94
|
+
* was matched, skipped or refused and the counts agree; otherwise those items are `unknown`.
|
|
95
|
+
*/
|
|
96
|
+
export declare function readOutcomes(sent: number, res: BatchResponse): ItemOutcome[];
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/lib/share/wire.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export function failedJudgements(results) {
|
|
2
|
+
return (results ?? []).flatMap((r, index) => (r.ok ? [] : [{ index, error: r.error ?? 'failed' }]));
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* One outcome per request item. `sent` is how many items the request carried. A response whose
|
|
6
|
+
* snapshots carry no `request_index` (a gateway before the field) is index-aligned ONLY when nothing
|
|
7
|
+
* was matched, skipped or refused and the counts agree; otherwise those items are `unknown`.
|
|
8
|
+
*/
|
|
9
|
+
export function readOutcomes(sent, res) {
|
|
10
|
+
const snapshots = res.snapshots ?? [];
|
|
11
|
+
const judged = new Map((res.judgements ?? []).map((j) => [j.request_index, j.results]));
|
|
12
|
+
const reportFor = (index) => judged.get(index) ?? null;
|
|
13
|
+
const ambiguous = new Set(res.match_ambiguous ?? []);
|
|
14
|
+
const out = new Map();
|
|
15
|
+
for (const r of res.refused ?? [])
|
|
16
|
+
out.set(r.request_index, { kind: 'refused', index: r.request_index, reason: r.reason });
|
|
17
|
+
for (const m of res.matched ?? []) {
|
|
18
|
+
out.set(m.request_index, {
|
|
19
|
+
kind: 'matched', index: m.request_index, remoteId: m.existing_id, status: m.status ?? 'unknown',
|
|
20
|
+
teamTextHash: m.team_text_hash ?? null, needsConfirmation: m.needs_confirmation ?? [], judgements: reportFor(m.request_index),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
for (const s of res.skipped ?? []) {
|
|
24
|
+
out.set(s.index, { kind: 'skipped', index: s.index, remoteId: s.existing_id, reason: s.reason, judgements: reportFor(s.index) });
|
|
25
|
+
}
|
|
26
|
+
const untagged = snapshots.some((s) => s.request_index === undefined);
|
|
27
|
+
const aligned = untagged && snapshots.length === sent && out.size === 0;
|
|
28
|
+
snapshots.forEach((s, k) => {
|
|
29
|
+
const index = s.request_index ?? (aligned ? k : undefined);
|
|
30
|
+
if (index === undefined || out.has(index))
|
|
31
|
+
return;
|
|
32
|
+
// `created` is only believed when the gateway said so in so many words: a request_index AND is_new === true.
|
|
33
|
+
// A gateway before share matching (self-host older than 0.46.0) sends neither, so a row it REUSED at that
|
|
34
|
+
// source looks identical to a new one. Retracting it would archive somebody else's decision, so it is
|
|
35
|
+
// `uncertain` and recorded as not ours.
|
|
36
|
+
const sure = s.request_index !== undefined && s.is_new === true;
|
|
37
|
+
out.set(index, s.is_new === false
|
|
38
|
+
? { kind: 'updated', index, remoteId: s.id, judgements: reportFor(index) }
|
|
39
|
+
: { kind: 'created', index, remoteId: s.id, ambiguous: ambiguous.has(index), uncertain: !sure, judgements: reportFor(index) });
|
|
40
|
+
});
|
|
41
|
+
return Array.from({ length: sent }, (_, index) => out.get(index) ?? { kind: 'unknown', index });
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/lib/share/wire.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An in-memory copy of every stored embedding, held as ONE contiguous Float32Array, with an
|
|
3
|
+
* exhaustive top-K scan over it (plan LB, decision 26).
|
|
4
|
+
*
|
|
5
|
+
* Why it exists: ingest ranked each new item against the whole graph by re-reading every
|
|
6
|
+
* stored vector out of SQLite, decoding it, and cosine-scoring it, once per item. Measured
|
|
7
|
+
* (profile at 5,000 rows): read and decode 5.7 ms, cosine 1.9 ms, sort 0.4 ms per item, and
|
|
8
|
+
* the read grows with the graph, so a batch was quadratic. Loading once per run and appending
|
|
9
|
+
* as items land removes the read; scoring against precomputed norms removes two thirds of the
|
|
10
|
+
* arithmetic. The scan stays EXHAUSTIVE - narrowing candidates would drop the cross-tool links
|
|
11
|
+
* the product exists for - so results must equal the old scan exactly. They do: the dot
|
|
12
|
+
* product accumulates in the same order as cosineSimilarity and divides by the same
|
|
13
|
+
* sqrt(normQuery) * sqrt(normRow), so every score is bit-identical, not merely close.
|
|
14
|
+
*
|
|
15
|
+
* Pure: no database, no model. The caller decides which rows go in.
|
|
16
|
+
*/
|
|
17
|
+
export interface Scored {
|
|
18
|
+
decisionId: string;
|
|
19
|
+
score: number;
|
|
20
|
+
}
|
|
21
|
+
/** Anything that can rank the graph against a query: the matrix, or the streaming scan that
|
|
22
|
+
* stands in for it on a graph too large to hold in memory. */
|
|
23
|
+
export interface Ranker {
|
|
24
|
+
topK(query: Float32Array, k: number, opts?: {
|
|
25
|
+
excludeId?: string;
|
|
26
|
+
threshold?: number;
|
|
27
|
+
}): Scored[] | Promise<Scored[]>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Above this many stored embeddings ingest does not build a matrix and ranks by streaming the
|
|
31
|
+
* table per item, as it did before the matrix existed. Memory: a 384-dim row is 1,536 bytes of
|
|
32
|
+
* Float32 plus its id and norm, so about 1.5 KB per row, i.e. roughly 230 MB at 150,000 rows.
|
|
33
|
+
* Building reads every row out of SQLite first, so the transient peak is about 2.5x the
|
|
34
|
+
* matrix (the decoded rows, the contiguous copy, and growth headroom) until the rows are
|
|
35
|
+
* released. The cap keeps that peak near 600 MB. Measured graphs are in the thousands of rows;
|
|
36
|
+
* this is a guard for the pathological case, not a tuning knob.
|
|
37
|
+
*/
|
|
38
|
+
export declare const MATRIX_MAX_ROWS = 150000;
|
|
39
|
+
/** The one writer of the "different model" error, shared with cosineSimilarity. */
|
|
40
|
+
export declare function embeddingLengthMismatch(a: number, b: number): Error;
|
|
41
|
+
export declare class EmbeddingMatrix implements Ranker {
|
|
42
|
+
private dim;
|
|
43
|
+
private data;
|
|
44
|
+
private sqrtNorms;
|
|
45
|
+
private ids;
|
|
46
|
+
private index;
|
|
47
|
+
static fromRows(rows: Array<{
|
|
48
|
+
decisionId: string;
|
|
49
|
+
embedding: Float32Array;
|
|
50
|
+
}>): EmbeddingMatrix;
|
|
51
|
+
get size(): number;
|
|
52
|
+
/** Adds a row, or replaces the vector of an id already held (setEmbedding is INSERT OR
|
|
53
|
+
* REPLACE, so the matrix must never hold two vectors for one decision). */
|
|
54
|
+
add(decisionId: string, embedding: Float32Array): void;
|
|
55
|
+
/** The `k` best rows by cosine, best first; equal scores order by id in code-unit order.
|
|
56
|
+
* Rows scoring below `threshold` are dropped (default: none are; findSimilar passed 0). */
|
|
57
|
+
topK(query: Float32Array, k: number, opts?: {
|
|
58
|
+
excludeId?: string;
|
|
59
|
+
threshold?: number;
|
|
60
|
+
}): Scored[];
|
|
61
|
+
private outranks;
|
|
62
|
+
private grow;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=embedding-matrix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-matrix.d.ts","sourceRoot":"","sources":["../../../src/lib/similarity/embedding-matrix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,MAAM;IAAG,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAE7D;+DAC+D;AAC/D,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACvH;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,SAAU,CAAC;AAEvC,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,CAKnE;AAID,qBAAa,eAAgB,YAAW,MAAM;IAC5C,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,KAAK,CAA6B;IAE1C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,CAAA;KAAE,CAAC,GAAG,eAAe;IAM9F,IAAI,IAAI,IAAI,MAAM,CAA4B;IAE9C;gFAC4E;IAC5E,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAgBtD;gGAC4F;IAC5F,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,MAAM,EAAE;IAgCrG,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,IAAI;CAQb"}
|