@swarmify/agents-cli 1.12.0 → 1.13.1
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/CHANGELOG.md +33 -0
- package/LICENSE +21 -0
- package/README.md +212 -232
- package/dist/commands/__tests__/sessions.test.js +90 -20
- package/dist/commands/__tests__/sessions.test.js.map +1 -1
- package/dist/commands/cloud.d.ts +11 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +363 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/commands.d.ts +9 -0
- package/dist/commands/commands.d.ts.map +1 -1
- package/dist/commands/commands.js +330 -139
- package/dist/commands/commands.js.map +1 -1
- package/dist/commands/daemon.d.ts +8 -0
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +38 -222
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/drive.d.ts +8 -0
- package/dist/commands/drive.d.ts.map +1 -1
- package/dist/commands/drive.js +70 -7
- package/dist/commands/drive.js.map +1 -1
- package/dist/commands/exec.d.ts +9 -1
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +198 -24
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/factory.d.ts +11 -0
- package/dist/commands/factory.d.ts.map +1 -0
- package/dist/commands/factory.js +445 -0
- package/dist/commands/factory.js.map +1 -0
- package/dist/commands/fork.d.ts +8 -0
- package/dist/commands/fork.d.ts.map +1 -1
- package/dist/commands/fork.js +38 -4
- package/dist/commands/fork.js.map +1 -1
- package/dist/commands/hooks.d.ts +9 -0
- package/dist/commands/hooks.d.ts.map +1 -1
- package/dist/commands/hooks.js +252 -18
- package/dist/commands/hooks.js.map +1 -1
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +137 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +250 -169
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/models.d.ts +11 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +170 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/packages.d.ts +8 -0
- package/dist/commands/packages.d.ts.map +1 -1
- package/dist/commands/packages.js +155 -14
- package/dist/commands/packages.js.map +1 -1
- package/dist/commands/permissions.d.ts +9 -0
- package/dist/commands/permissions.d.ts.map +1 -1
- package/dist/commands/permissions.js +72 -13
- package/dist/commands/permissions.js.map +1 -1
- package/dist/commands/plugins.d.ts +8 -0
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +265 -44
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/profiles.d.ts +12 -0
- package/dist/commands/profiles.d.ts.map +1 -0
- package/dist/commands/profiles.js +255 -0
- package/dist/commands/profiles.js.map +1 -0
- package/dist/commands/pty.d.ts +1 -0
- package/dist/commands/pty.d.ts.map +1 -1
- package/dist/commands/pty.js +133 -22
- package/dist/commands/pty.js.map +1 -1
- package/dist/commands/pull.d.ts +8 -0
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +103 -14
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts +8 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +37 -3
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/refresh-memory.d.ts +16 -0
- package/dist/commands/refresh-memory.d.ts.map +1 -0
- package/dist/commands/refresh-memory.js +52 -0
- package/dist/commands/refresh-memory.js.map +1 -0
- package/dist/commands/resource-view.d.ts +39 -0
- package/dist/commands/resource-view.d.ts.map +1 -0
- package/dist/commands/resource-view.js +197 -0
- package/dist/commands/resource-view.js.map +1 -0
- package/dist/commands/routines.d.ts +8 -0
- package/dist/commands/routines.d.ts.map +1 -1
- package/dist/commands/routines.js +163 -34
- package/dist/commands/routines.js.map +1 -1
- package/dist/commands/rules.d.ts +9 -0
- package/dist/commands/rules.d.ts.map +1 -1
- package/dist/commands/rules.js +83 -12
- package/dist/commands/rules.js.map +1 -1
- package/dist/commands/secrets.d.ts +11 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +352 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/sessions-picker.d.ts +18 -0
- package/dist/commands/sessions-picker.d.ts.map +1 -0
- package/dist/commands/sessions-picker.js +265 -0
- package/dist/commands/sessions-picker.js.map +1 -0
- package/dist/commands/sessions.d.ts +15 -0
- package/dist/commands/sessions.d.ts.map +1 -1
- package/dist/commands/sessions.js +700 -263
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/skills.d.ts +9 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +355 -233
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +7 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/subagents.d.ts +8 -0
- package/dist/commands/subagents.d.ts.map +1 -1
- package/dist/commands/subagents.js +214 -74
- package/dist/commands/subagents.js.map +1 -1
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +15 -7
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/teams-picker.d.ts +18 -0
- package/dist/commands/teams-picker.d.ts.map +1 -0
- package/dist/commands/teams-picker.js +290 -0
- package/dist/commands/teams-picker.js.map +1 -0
- package/dist/commands/teams.d.ts +18 -0
- package/dist/commands/teams.d.ts.map +1 -0
- package/dist/commands/teams.js +1098 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/utils.d.ts +20 -0
- package/dist/commands/utils.d.ts.map +1 -1
- package/dist/commands/utils.js +34 -0
- package/dist/commands/utils.js.map +1 -1
- package/dist/commands/versions.d.ts +8 -0
- package/dist/commands/versions.d.ts.map +1 -1
- package/dist/commands/versions.js +71 -8
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/view.d.ts +36 -1
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +375 -15
- package/dist/commands/view.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +136 -51
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/bugfixes.test.js +3 -3
- package/dist/lib/__tests__/bugfixes.test.js.map +1 -1
- package/dist/lib/__tests__/exec.test.js +125 -19
- package/dist/lib/__tests__/exec.test.js.map +1 -1
- package/dist/lib/__tests__/hooks.test.d.ts +2 -0
- package/dist/lib/__tests__/hooks.test.d.ts.map +1 -0
- package/dist/lib/__tests__/hooks.test.js +203 -0
- package/dist/lib/__tests__/hooks.test.js.map +1 -0
- package/dist/lib/__tests__/memory-compile.test.d.ts +2 -0
- package/dist/lib/__tests__/memory-compile.test.d.ts.map +1 -0
- package/dist/lib/__tests__/memory-compile.test.js +95 -0
- package/dist/lib/__tests__/memory-compile.test.js.map +1 -0
- package/dist/lib/__tests__/models.test.d.ts +2 -0
- package/dist/lib/__tests__/models.test.d.ts.map +1 -0
- package/dist/lib/__tests__/models.test.js +239 -0
- package/dist/lib/__tests__/models.test.js.map +1 -0
- package/dist/lib/__tests__/rotate.test.d.ts +2 -0
- package/dist/lib/__tests__/rotate.test.d.ts.map +1 -0
- package/dist/lib/__tests__/rotate.test.js +80 -0
- package/dist/lib/__tests__/rotate.test.js.map +1 -0
- package/dist/lib/__tests__/secrets-bundles.test.d.ts +2 -0
- package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +1 -0
- package/dist/lib/__tests__/secrets-bundles.test.js +104 -0
- package/dist/lib/__tests__/secrets-bundles.test.js.map +1 -0
- package/dist/lib/__tests__/secrets.test.d.ts +2 -0
- package/dist/lib/__tests__/secrets.test.d.ts.map +1 -0
- package/dist/lib/__tests__/secrets.test.js +90 -0
- package/dist/lib/__tests__/secrets.test.js.map +1 -0
- package/dist/lib/__tests__/shims.test.d.ts +2 -0
- package/dist/lib/__tests__/shims.test.d.ts.map +1 -0
- package/dist/lib/__tests__/shims.test.js +39 -0
- package/dist/lib/__tests__/shims.test.js.map +1 -0
- package/dist/lib/__tests__/usage.test.js +4 -2
- package/dist/lib/__tests__/usage.test.js.map +1 -1
- package/dist/lib/__tests__/versions.test.d.ts +2 -0
- package/dist/lib/__tests__/versions.test.d.ts.map +1 -0
- package/dist/lib/__tests__/versions.test.js +63 -0
- package/dist/lib/__tests__/versions.test.js.map +1 -0
- package/dist/lib/agents.d.ts +53 -1
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/agents.js +178 -37
- package/dist/lib/agents.js.map +1 -1
- package/dist/lib/artifact-actions.d.ts +8 -3
- package/dist/lib/artifact-actions.d.ts.map +1 -1
- package/dist/lib/artifact-actions.js +8 -5
- package/dist/lib/artifact-actions.js.map +1 -1
- package/dist/lib/cloud/codex.d.ts +26 -0
- package/dist/lib/cloud/codex.d.ts.map +1 -0
- package/dist/lib/cloud/codex.js +237 -0
- package/dist/lib/cloud/codex.js.map +1 -0
- package/dist/lib/cloud/factory.d.ts +32 -0
- package/dist/lib/cloud/factory.d.ts.map +1 -0
- package/dist/lib/cloud/factory.js +43 -0
- package/dist/lib/cloud/factory.js.map +1 -0
- package/dist/lib/cloud/registry.d.ts +16 -0
- package/dist/lib/cloud/registry.d.ts.map +1 -0
- package/dist/lib/cloud/registry.js +68 -0
- package/dist/lib/cloud/registry.js.map +1 -0
- package/dist/lib/cloud/rush.d.ts +37 -0
- package/dist/lib/cloud/rush.d.ts.map +1 -0
- package/dist/lib/cloud/rush.js +230 -0
- package/dist/lib/cloud/rush.js.map +1 -0
- package/dist/lib/cloud/rush.test.d.ts +2 -0
- package/dist/lib/cloud/rush.test.d.ts.map +1 -0
- package/dist/lib/cloud/rush.test.js +63 -0
- package/dist/lib/cloud/rush.test.js.map +1 -0
- package/dist/lib/cloud/store.d.ts +23 -0
- package/dist/lib/cloud/store.d.ts.map +1 -0
- package/dist/lib/cloud/store.js +116 -0
- package/dist/lib/cloud/store.js.map +1 -0
- package/dist/lib/cloud/stream.d.ts +24 -0
- package/dist/lib/cloud/stream.d.ts.map +1 -0
- package/dist/lib/cloud/stream.js +145 -0
- package/dist/lib/cloud/stream.js.map +1 -0
- package/dist/lib/cloud/types.d.ts +109 -0
- package/dist/lib/cloud/types.d.ts.map +1 -0
- package/dist/lib/cloud/types.js +33 -0
- package/dist/lib/cloud/types.js.map +1 -0
- package/dist/lib/cloud/types.test.d.ts +2 -0
- package/dist/lib/cloud/types.test.d.ts.map +1 -0
- package/dist/lib/cloud/types.test.js +41 -0
- package/dist/lib/cloud/types.test.js.map +1 -0
- package/dist/lib/commands.d.ts +67 -0
- package/dist/lib/commands.d.ts.map +1 -1
- package/dist/lib/commands.js +161 -2
- package/dist/lib/commands.js.map +1 -1
- package/dist/lib/convert.d.ts +10 -0
- package/dist/lib/convert.d.ts.map +1 -1
- package/dist/lib/convert.js +9 -0
- package/dist/lib/convert.js.map +1 -1
- package/dist/lib/daemon.d.ts +21 -0
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/daemon.js +21 -0
- package/dist/lib/daemon.js.map +1 -1
- package/dist/lib/drive-sync.d.ts +18 -0
- package/dist/lib/drive-sync.d.ts.map +1 -1
- package/dist/lib/drive-sync.js +16 -0
- package/dist/lib/drive-sync.js.map +1 -1
- package/dist/lib/exec.d.ts +64 -3
- package/dist/lib/exec.d.ts.map +1 -1
- package/dist/lib/exec.js +218 -80
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/factory/__tests__/config.test.d.ts +2 -0
- package/dist/lib/factory/__tests__/config.test.d.ts.map +1 -0
- package/dist/lib/factory/__tests__/config.test.js +128 -0
- package/dist/lib/factory/__tests__/config.test.js.map +1 -0
- package/dist/lib/factory/config.d.ts +49 -0
- package/dist/lib/factory/config.d.ts.map +1 -0
- package/dist/lib/factory/config.js +127 -0
- package/dist/lib/factory/config.js.map +1 -0
- package/dist/lib/factory.js +1 -1
- package/dist/lib/factory.js.map +1 -1
- package/dist/lib/git.d.ts +16 -1
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +33 -4
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/help.d.ts +7 -0
- package/dist/lib/help.d.ts.map +1 -1
- package/dist/lib/help.js +3 -0
- package/dist/lib/help.js.map +1 -1
- package/dist/lib/hooks.d.ts +59 -3
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +413 -33
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/ledger/__tests__/local.test.d.ts +2 -0
- package/dist/lib/ledger/__tests__/local.test.d.ts.map +1 -0
- package/dist/lib/ledger/__tests__/local.test.js +177 -0
- package/dist/lib/ledger/__tests__/local.test.js.map +1 -0
- package/dist/lib/ledger/__tests__/sync.test.d.ts +2 -0
- package/dist/lib/ledger/__tests__/sync.test.d.ts.map +1 -0
- package/dist/lib/ledger/__tests__/sync.test.js +117 -0
- package/dist/lib/ledger/__tests__/sync.test.js.map +1 -0
- package/dist/lib/ledger/index.d.ts +18 -0
- package/dist/lib/ledger/index.d.ts.map +1 -0
- package/dist/lib/ledger/index.js +32 -0
- package/dist/lib/ledger/index.js.map +1 -0
- package/dist/lib/ledger/local.d.ts +22 -0
- package/dist/lib/ledger/local.d.ts.map +1 -0
- package/dist/lib/ledger/local.js +333 -0
- package/dist/lib/ledger/local.js.map +1 -0
- package/dist/lib/ledger/r2.d.ts +41 -0
- package/dist/lib/ledger/r2.d.ts.map +1 -0
- package/dist/lib/ledger/r2.js +335 -0
- package/dist/lib/ledger/r2.js.map +1 -0
- package/dist/lib/ledger/sync.d.ts +33 -0
- package/dist/lib/ledger/sync.d.ts.map +1 -0
- package/dist/lib/ledger/sync.js +106 -0
- package/dist/lib/ledger/sync.js.map +1 -0
- package/dist/lib/ledger/types.d.ts +100 -0
- package/dist/lib/ledger/types.d.ts.map +1 -0
- package/dist/lib/ledger/types.js +21 -0
- package/dist/lib/ledger/types.js.map +1 -0
- package/dist/lib/manifest.d.ts +6 -0
- package/dist/lib/manifest.d.ts.map +1 -1
- package/dist/lib/manifest.js +12 -0
- package/dist/lib/manifest.js.map +1 -1
- package/dist/lib/markdown.d.ts.map +1 -1
- package/dist/lib/markdown.js +6 -0
- package/dist/lib/markdown.js.map +1 -1
- package/dist/lib/mcp.d.ts +0 -9
- package/dist/lib/mcp.d.ts.map +1 -1
- package/dist/lib/mcp.js +0 -20
- package/dist/lib/mcp.js.map +1 -1
- package/dist/lib/memory-compile.d.ts +65 -0
- package/dist/lib/memory-compile.d.ts.map +1 -0
- package/dist/lib/memory-compile.js +174 -0
- package/dist/lib/memory-compile.js.map +1 -0
- package/dist/lib/memory.d.ts +8 -0
- package/dist/lib/memory.d.ts.map +1 -1
- package/dist/lib/memory.js +8 -0
- package/dist/lib/memory.js.map +1 -1
- package/dist/lib/models.d.ts +98 -0
- package/dist/lib/models.d.ts.map +1 -0
- package/dist/lib/models.js +728 -0
- package/dist/lib/models.js.map +1 -0
- package/dist/lib/permissions.d.ts +24 -1
- package/dist/lib/permissions.d.ts.map +1 -1
- package/dist/lib/permissions.js +52 -3
- package/dist/lib/permissions.js.map +1 -1
- package/dist/lib/picker.d.ts +27 -0
- package/dist/lib/picker.d.ts.map +1 -0
- package/dist/lib/picker.js +110 -0
- package/dist/lib/picker.js.map +1 -0
- package/dist/lib/plugins.d.ts +22 -0
- package/dist/lib/plugins.d.ts.map +1 -1
- package/dist/lib/plugins.js +114 -0
- package/dist/lib/plugins.js.map +1 -1
- package/dist/lib/profiles-keychain.d.ts +11 -0
- package/dist/lib/profiles-keychain.d.ts.map +1 -0
- package/dist/lib/profiles-keychain.js +14 -0
- package/dist/lib/profiles-keychain.js.map +1 -0
- package/dist/lib/profiles-presets.d.ts +25 -0
- package/dist/lib/profiles-presets.d.ts.map +1 -0
- package/dist/lib/profiles-presets.js +104 -0
- package/dist/lib/profiles-presets.js.map +1 -0
- package/dist/lib/profiles.d.ts +70 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +145 -0
- package/dist/lib/profiles.js.map +1 -0
- package/dist/lib/pty-client.d.ts +1 -0
- package/dist/lib/pty-client.d.ts.map +1 -1
- package/dist/lib/pty-client.js.map +1 -1
- package/dist/lib/pty-server.d.ts +5 -0
- package/dist/lib/pty-server.d.ts.map +1 -1
- package/dist/lib/pty-server.js +5 -0
- package/dist/lib/pty-server.js.map +1 -1
- package/dist/lib/registry.d.ts +17 -0
- package/dist/lib/registry.d.ts.map +1 -1
- package/dist/lib/registry.js +17 -0
- package/dist/lib/registry.js.map +1 -1
- package/dist/lib/resources.d.ts +5 -0
- package/dist/lib/resources.d.ts.map +1 -1
- package/dist/lib/resources.js.map +1 -1
- package/dist/lib/rotate.d.ts +58 -0
- package/dist/lib/rotate.d.ts.map +1 -0
- package/dist/lib/rotate.js +93 -0
- package/dist/lib/rotate.js.map +1 -0
- package/dist/lib/routines.d.ts +30 -1
- package/dist/lib/routines.d.ts.map +1 -1
- package/dist/lib/routines.js +31 -4
- package/dist/lib/routines.js.map +1 -1
- package/dist/lib/runner.d.ts +14 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +45 -11
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/sandbox.d.ts +16 -0
- package/dist/lib/sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox.js +19 -2
- package/dist/lib/sandbox.js.map +1 -1
- package/dist/lib/scheduler.d.ts +8 -0
- package/dist/lib/scheduler.d.ts.map +1 -1
- package/dist/lib/scheduler.js +8 -0
- package/dist/lib/scheduler.js.map +1 -1
- package/dist/lib/secrets-bundles.d.ts +38 -0
- package/dist/lib/secrets-bundles.d.ts.map +1 -0
- package/dist/lib/secrets-bundles.js +176 -0
- package/dist/lib/secrets-bundles.js.map +1 -0
- package/dist/lib/secrets.d.ts +53 -0
- package/dist/lib/secrets.d.ts.map +1 -0
- package/dist/lib/secrets.js +140 -0
- package/dist/lib/secrets.js.map +1 -0
- package/dist/lib/session/__tests__/db.test.d.ts +2 -0
- package/dist/lib/session/__tests__/db.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/db.test.js +54 -0
- package/dist/lib/session/__tests__/db.test.js.map +1 -0
- package/dist/lib/session/__tests__/discover.test.js +54 -91
- package/dist/lib/session/__tests__/discover.test.js.map +1 -1
- package/dist/lib/session/__tests__/prompt.test.d.ts +2 -0
- package/dist/lib/session/__tests__/prompt.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/prompt.test.js +44 -0
- package/dist/lib/session/__tests__/prompt.test.js.map +1 -0
- package/dist/lib/session/__tests__/render.test.d.ts +2 -0
- package/dist/lib/session/__tests__/render.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/render.test.js +602 -0
- package/dist/lib/session/__tests__/render.test.js.map +1 -0
- package/dist/lib/session/artifacts.d.ts +15 -0
- package/dist/lib/session/artifacts.d.ts.map +1 -0
- package/dist/lib/session/artifacts.js +86 -0
- package/dist/lib/session/artifacts.js.map +1 -0
- package/dist/lib/session/db.d.ts +140 -0
- package/dist/lib/session/db.d.ts.map +1 -0
- package/dist/lib/session/db.js +599 -0
- package/dist/lib/session/db.js.map +1 -0
- package/dist/lib/session/discover.d.ts +44 -32
- package/dist/lib/session/discover.d.ts.map +1 -1
- package/dist/lib/session/discover.js +418 -464
- package/dist/lib/session/discover.js.map +1 -1
- package/dist/lib/session/parse.d.ts +11 -0
- package/dist/lib/session/parse.d.ts.map +1 -1
- package/dist/lib/session/parse.js +50 -0
- package/dist/lib/session/parse.js.map +1 -1
- package/dist/lib/session/prompt.d.ts +10 -0
- package/dist/lib/session/prompt.d.ts.map +1 -1
- package/dist/lib/session/prompt.js +38 -2
- package/dist/lib/session/prompt.js.map +1 -1
- package/dist/lib/session/prompt.test.d.ts +2 -0
- package/dist/lib/session/prompt.test.d.ts.map +1 -0
- package/dist/lib/session/prompt.test.js +57 -0
- package/dist/lib/session/prompt.test.js.map +1 -0
- package/dist/lib/session/render.d.ts +91 -10
- package/dist/lib/session/render.d.ts.map +1 -1
- package/dist/lib/session/render.js +708 -180
- package/dist/lib/session/render.js.map +1 -1
- package/dist/lib/session/team-filter.d.ts +35 -0
- package/dist/lib/session/team-filter.d.ts.map +1 -0
- package/dist/lib/session/team-filter.js +75 -0
- package/dist/lib/session/team-filter.js.map +1 -0
- package/dist/lib/session/team-filter.test.d.ts +2 -0
- package/dist/lib/session/team-filter.test.d.ts.map +1 -0
- package/dist/lib/session/team-filter.test.js +157 -0
- package/dist/lib/session/team-filter.test.js.map +1 -0
- package/dist/lib/session/types.d.ts +48 -6
- package/dist/lib/session/types.d.ts.map +1 -1
- package/dist/lib/session/types.js +9 -0
- package/dist/lib/session/types.js.map +1 -1
- package/dist/lib/shims.d.ts +101 -2
- package/dist/lib/shims.d.ts.map +1 -1
- package/dist/lib/shims.js +282 -25
- package/dist/lib/shims.js.map +1 -1
- package/dist/lib/skills.d.ts +68 -0
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/skills.js +267 -1
- package/dist/lib/skills.js.map +1 -1
- package/dist/lib/state.d.ts +41 -2
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +63 -4
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/subagents.d.ts +9 -0
- package/dist/lib/subagents.d.ts.map +1 -1
- package/dist/lib/subagents.js +9 -1
- package/dist/lib/subagents.js.map +1 -1
- package/dist/lib/teams/__tests__/oracle.test.d.ts +2 -0
- package/dist/lib/teams/__tests__/oracle.test.d.ts.map +1 -0
- package/dist/lib/teams/__tests__/oracle.test.js +89 -0
- package/dist/lib/teams/__tests__/oracle.test.js.map +1 -0
- package/dist/lib/teams/__tests__/supervisor.test.d.ts +2 -0
- package/dist/lib/teams/__tests__/supervisor.test.d.ts.map +1 -0
- package/dist/lib/teams/__tests__/supervisor.test.js +179 -0
- package/dist/lib/teams/__tests__/supervisor.test.js.map +1 -0
- package/dist/lib/teams/agents.d.ts +247 -0
- package/dist/lib/teams/agents.d.ts.map +1 -0
- package/dist/lib/teams/agents.js +1244 -0
- package/dist/lib/teams/agents.js.map +1 -0
- package/dist/lib/teams/api.d.ts +91 -0
- package/dist/lib/teams/api.d.ts.map +1 -0
- package/dist/lib/teams/api.js +239 -0
- package/dist/lib/teams/api.js.map +1 -0
- package/dist/lib/teams/cloud.d.ts +11 -0
- package/dist/lib/teams/cloud.d.ts.map +1 -0
- package/dist/lib/teams/cloud.js +169 -0
- package/dist/lib/teams/cloud.js.map +1 -0
- package/dist/lib/teams/debug.d.ts +8 -0
- package/dist/lib/teams/debug.d.ts.map +1 -0
- package/dist/lib/teams/debug.js +12 -0
- package/dist/lib/teams/debug.js.map +1 -0
- package/dist/lib/teams/file_ops.d.ts +13 -0
- package/dist/lib/teams/file_ops.d.ts.map +1 -0
- package/dist/lib/teams/file_ops.js +66 -0
- package/dist/lib/teams/file_ops.js.map +1 -0
- package/dist/lib/teams/index.d.ts +16 -0
- package/dist/lib/teams/index.d.ts.map +1 -0
- package/dist/lib/teams/index.js +15 -0
- package/dist/lib/teams/index.js.map +1 -0
- package/dist/lib/teams/oracle.d.ts +20 -0
- package/dist/lib/teams/oracle.d.ts.map +1 -0
- package/dist/lib/teams/oracle.js +59 -0
- package/dist/lib/teams/oracle.js.map +1 -0
- package/dist/lib/teams/parsers.d.ts +9 -0
- package/dist/lib/teams/parsers.d.ts.map +1 -0
- package/dist/lib/teams/parsers.js +837 -0
- package/dist/lib/teams/parsers.js.map +1 -0
- package/dist/lib/teams/persistence.d.ts +43 -0
- package/dist/lib/teams/persistence.d.ts.map +1 -0
- package/dist/lib/teams/persistence.js +299 -0
- package/dist/lib/teams/persistence.js.map +1 -0
- package/dist/lib/teams/ralph.d.ts +8 -0
- package/dist/lib/teams/ralph.d.ts.map +1 -0
- package/dist/lib/teams/ralph.js +59 -0
- package/dist/lib/teams/ralph.js.map +1 -0
- package/dist/lib/teams/registry.d.ts +18 -0
- package/dist/lib/teams/registry.d.ts.map +1 -0
- package/dist/lib/teams/registry.js +68 -0
- package/dist/lib/teams/registry.js.map +1 -0
- package/dist/lib/teams/summarizer.d.ts +73 -0
- package/dist/lib/teams/summarizer.d.ts.map +1 -0
- package/dist/lib/teams/summarizer.js +780 -0
- package/dist/lib/teams/summarizer.js.map +1 -0
- package/dist/lib/teams/supervisor.d.ts +49 -0
- package/dist/lib/teams/supervisor.d.ts.map +1 -0
- package/dist/lib/teams/supervisor.js +74 -0
- package/dist/lib/teams/supervisor.js.map +1 -0
- package/dist/lib/template.d.ts +8 -5
- package/dist/lib/template.d.ts.map +1 -1
- package/dist/lib/template.js +8 -5
- package/dist/lib/template.js.map +1 -1
- package/dist/lib/types.d.ts +58 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +16 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/usage.d.ts +48 -0
- package/dist/lib/usage.d.ts.map +1 -1
- package/dist/lib/usage.js +106 -14
- package/dist/lib/usage.js.map +1 -1
- package/dist/lib/versions.d.ts +12 -1
- package/dist/lib/versions.d.ts.map +1 -1
- package/dist/lib/versions.js +124 -41
- package/dist/lib/versions.js.map +1 -1
- package/package.json +20 -6
- package/scripts/postinstall.js +1 -1
- package/scripts/rebuild-sqlite.sh +46 -0
- package/dist/commands/sessions.test.d.ts +0 -2
- package/dist/commands/sessions.test.d.ts.map +0 -1
- package/dist/commands/sessions.test.js +0 -53
- package/dist/commands/sessions.test.js.map +0 -1
|
@@ -0,0 +1,599 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite-backed session index and full-text search.
|
|
3
|
+
*
|
|
4
|
+
* Stores session metadata and user-prompt text in a WAL-mode SQLite database
|
|
5
|
+
* at ~/.agents/sessions/sessions.db. Provides incremental upsert, scan-stamp
|
|
6
|
+
* ledger (mtime/size tracking to skip unchanged files), FTS5 search with
|
|
7
|
+
* BM25 ranking, and label-first search for /rename'd sessions.
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as os from 'os';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import Database from 'better-sqlite3';
|
|
13
|
+
const HOME = os.homedir();
|
|
14
|
+
const SESSIONS_DIR = path.join(HOME, '.agents', 'sessions');
|
|
15
|
+
const DB_PATH = path.join(SESSIONS_DIR, 'sessions.db');
|
|
16
|
+
/** Current schema version; bumped when migrations are added. */
|
|
17
|
+
const SCHEMA_VERSION = 4;
|
|
18
|
+
// BM25 column weights for session_text: label > topic > project > content.
|
|
19
|
+
// Higher weights make matches in that column rank higher.
|
|
20
|
+
/** BM25 column weights for FTS5: label > topic > project > content. */
|
|
21
|
+
const BM25_WEIGHTS = [5.0, 2.0, 1.5, 1.0];
|
|
22
|
+
/** DDL for the sessions database (tables, indexes, FTS5 virtual table). */
|
|
23
|
+
const SCHEMA = `
|
|
24
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
25
|
+
id TEXT PRIMARY KEY,
|
|
26
|
+
short_id TEXT NOT NULL,
|
|
27
|
+
agent TEXT NOT NULL,
|
|
28
|
+
version TEXT,
|
|
29
|
+
account TEXT,
|
|
30
|
+
timestamp TEXT NOT NULL,
|
|
31
|
+
project TEXT,
|
|
32
|
+
cwd TEXT,
|
|
33
|
+
git_branch TEXT,
|
|
34
|
+
topic TEXT,
|
|
35
|
+
label TEXT,
|
|
36
|
+
message_count INTEGER,
|
|
37
|
+
token_count INTEGER,
|
|
38
|
+
file_path TEXT NOT NULL,
|
|
39
|
+
file_mtime_ms INTEGER,
|
|
40
|
+
file_size INTEGER,
|
|
41
|
+
scanned_at INTEGER,
|
|
42
|
+
is_team_origin INTEGER DEFAULT 0
|
|
43
|
+
);
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_timestamp ON sessions(timestamp DESC);
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_cwd ON sessions(cwd);
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_agent ON sessions(agent);
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_file_path ON sessions(file_path);
|
|
48
|
+
|
|
49
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS session_text USING fts5(
|
|
50
|
+
session_id UNINDEXED,
|
|
51
|
+
label,
|
|
52
|
+
topic,
|
|
53
|
+
project,
|
|
54
|
+
content,
|
|
55
|
+
tokenize = 'unicode61 remove_diacritics 2'
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
CREATE TABLE IF NOT EXISTS meta (
|
|
59
|
+
key TEXT PRIMARY KEY,
|
|
60
|
+
value TEXT
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
-- Tracks every file we've stat'd during a scan, regardless of whether it
|
|
64
|
+
-- produced a session row. Decouples "did we already look at this?" from
|
|
65
|
+
-- "do we have a session from it?" — essential for files that don't parse
|
|
66
|
+
-- into a session (no id) or session rows whose file_path is synthetic.
|
|
67
|
+
CREATE TABLE IF NOT EXISTS scan_ledger (
|
|
68
|
+
file_path TEXT PRIMARY KEY,
|
|
69
|
+
file_mtime_ms INTEGER NOT NULL,
|
|
70
|
+
file_size INTEGER NOT NULL,
|
|
71
|
+
scanned_at INTEGER NOT NULL
|
|
72
|
+
);
|
|
73
|
+
`;
|
|
74
|
+
let dbInstance = null;
|
|
75
|
+
/**
|
|
76
|
+
* Apply schema migrations from `fromVersion` → SCHEMA_VERSION. The new
|
|
77
|
+
* `CREATE IF NOT EXISTS` at SCHEMA doesn't help when column sets or FTS
|
|
78
|
+
* column definitions change — those need explicit migration here.
|
|
79
|
+
*/
|
|
80
|
+
function migrateSchema(db, fromVersion) {
|
|
81
|
+
if (fromVersion < 2) {
|
|
82
|
+
// v1 → v2: add `label` column to sessions and switch session_text from
|
|
83
|
+
// single `content` column to multi-column (label, topic, project, content).
|
|
84
|
+
const cols = db.prepare(`PRAGMA table_info(sessions)`).all();
|
|
85
|
+
if (!cols.some(c => c.name === 'label')) {
|
|
86
|
+
db.exec(`ALTER TABLE sessions ADD COLUMN label TEXT`);
|
|
87
|
+
}
|
|
88
|
+
// FTS5 virtual tables can't be ALTERed — drop and recreate. Scan ledger
|
|
89
|
+
// is cleared so every file gets re-parsed on next run, repopulating FTS5.
|
|
90
|
+
db.exec(`
|
|
91
|
+
DROP TABLE IF EXISTS session_text;
|
|
92
|
+
CREATE VIRTUAL TABLE session_text USING fts5(
|
|
93
|
+
session_id UNINDEXED,
|
|
94
|
+
label,
|
|
95
|
+
topic,
|
|
96
|
+
project,
|
|
97
|
+
content,
|
|
98
|
+
tokenize = 'unicode61 remove_diacritics 2'
|
|
99
|
+
);
|
|
100
|
+
DELETE FROM scan_ledger;
|
|
101
|
+
`);
|
|
102
|
+
}
|
|
103
|
+
if (fromVersion < 3) {
|
|
104
|
+
// v2 → v3: topic extraction now strips team-spawn wrapper prompts
|
|
105
|
+
// (HEADLESS PLAN MODE prefix + summary suffix). Force a rescan so cached
|
|
106
|
+
// topics like "You are running in HEADLESS PLAN MODE..." get re-extracted.
|
|
107
|
+
db.exec(`DELETE FROM scan_ledger;`);
|
|
108
|
+
}
|
|
109
|
+
if (fromVersion < 4) {
|
|
110
|
+
// v3 → v4: team-origin is now captured structurally from the JSONL
|
|
111
|
+
// `entrypoint` field at scan time. Add the column and force a rescan so
|
|
112
|
+
// every existing Claude session gets its flag populated.
|
|
113
|
+
const cols = db.prepare(`PRAGMA table_info(sessions)`).all();
|
|
114
|
+
if (!cols.some(c => c.name === 'is_team_origin')) {
|
|
115
|
+
db.exec(`ALTER TABLE sessions ADD COLUMN is_team_origin INTEGER DEFAULT 0`);
|
|
116
|
+
}
|
|
117
|
+
db.exec(`DELETE FROM scan_ledger;`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** Open (or return the cached) sessions database, applying migrations as needed. */
|
|
121
|
+
export function getDB() {
|
|
122
|
+
if (dbInstance)
|
|
123
|
+
return dbInstance;
|
|
124
|
+
fs.mkdirSync(SESSIONS_DIR, { recursive: true });
|
|
125
|
+
const db = new Database(DB_PATH);
|
|
126
|
+
db.pragma('journal_mode = WAL');
|
|
127
|
+
db.pragma('synchronous = NORMAL');
|
|
128
|
+
db.pragma('temp_store = MEMORY');
|
|
129
|
+
db.exec(SCHEMA);
|
|
130
|
+
const current = db.prepare(`SELECT value FROM meta WHERE key = 'schema_version'`).get();
|
|
131
|
+
const currentVersion = current ? parseInt(current.value, 10) : 0;
|
|
132
|
+
if (!current) {
|
|
133
|
+
db.prepare(`INSERT INTO meta(key, value) VALUES ('schema_version', ?)`).run(String(SCHEMA_VERSION));
|
|
134
|
+
}
|
|
135
|
+
else if (currentVersion < SCHEMA_VERSION) {
|
|
136
|
+
migrateSchema(db, currentVersion);
|
|
137
|
+
db.prepare(`INSERT OR REPLACE INTO meta(key, value) VALUES ('schema_version', ?)`).run(String(SCHEMA_VERSION));
|
|
138
|
+
}
|
|
139
|
+
// One-shot cleanup of the pre-SQLite JSONL indexes. Safe — nothing reads
|
|
140
|
+
// them anymore. Guarded by a meta flag so we only try once.
|
|
141
|
+
const cleaned = db.prepare(`SELECT value FROM meta WHERE key = 'legacy_indexes_removed'`).get();
|
|
142
|
+
if (!cleaned) {
|
|
143
|
+
for (const p of [
|
|
144
|
+
path.join(SESSIONS_DIR, 'index.jsonl'),
|
|
145
|
+
path.join(SESSIONS_DIR, 'content_index.jsonl'),
|
|
146
|
+
path.join(SESSIONS_DIR, 'index.jsonl.bak'),
|
|
147
|
+
]) {
|
|
148
|
+
try {
|
|
149
|
+
if (fs.existsSync(p))
|
|
150
|
+
fs.unlinkSync(p);
|
|
151
|
+
}
|
|
152
|
+
catch { /* ignore */ }
|
|
153
|
+
}
|
|
154
|
+
db.prepare(`INSERT INTO meta(key, value) VALUES ('legacy_indexes_removed', '1')`).run();
|
|
155
|
+
}
|
|
156
|
+
dbInstance = db;
|
|
157
|
+
return db;
|
|
158
|
+
}
|
|
159
|
+
/** Close the cached database connection. */
|
|
160
|
+
export function closeDB() {
|
|
161
|
+
if (dbInstance) {
|
|
162
|
+
dbInstance.close();
|
|
163
|
+
dbInstance = null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** Return the absolute path to the sessions database file. */
|
|
167
|
+
export function getDBPath() {
|
|
168
|
+
return DB_PATH;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Look up the file stat stamp we stored the last time we scanned a given file path.
|
|
172
|
+
* Callers compare this to the current fs.stat to decide whether to rescan.
|
|
173
|
+
*/
|
|
174
|
+
export function getScanStampByPath(filePath) {
|
|
175
|
+
const db = getDB();
|
|
176
|
+
const row = db
|
|
177
|
+
.prepare(`SELECT file_mtime_ms, file_size FROM scan_ledger WHERE file_path = ? LIMIT 1`)
|
|
178
|
+
.get(filePath);
|
|
179
|
+
return row ? { fileMtimeMs: row.file_mtime_ms, fileSize: row.file_size } : null;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Bulk-load the stamp ledger for a set of file paths in a single SQL query.
|
|
183
|
+
* This is the fast path used by the incremental scanner — avoids N+1 queries.
|
|
184
|
+
*/
|
|
185
|
+
export function getScanStampsForPaths(filePaths) {
|
|
186
|
+
const result = new Map();
|
|
187
|
+
if (filePaths.length === 0)
|
|
188
|
+
return result;
|
|
189
|
+
const db = getDB();
|
|
190
|
+
// SQLite parameter limit is typically 999 / 32766 — chunk defensively.
|
|
191
|
+
const CHUNK = 500;
|
|
192
|
+
for (let i = 0; i < filePaths.length; i += CHUNK) {
|
|
193
|
+
const chunk = filePaths.slice(i, i + CHUNK);
|
|
194
|
+
const placeholders = chunk.map(() => '?').join(',');
|
|
195
|
+
const rows = db
|
|
196
|
+
.prepare(`
|
|
197
|
+
SELECT file_path, file_mtime_ms, file_size
|
|
198
|
+
FROM scan_ledger
|
|
199
|
+
WHERE file_path IN (${placeholders})
|
|
200
|
+
`)
|
|
201
|
+
.all(...chunk);
|
|
202
|
+
for (const row of rows) {
|
|
203
|
+
result.set(row.file_path, { fileMtimeMs: row.file_mtime_ms, fileSize: row.file_size });
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Record scan stamps for files we've looked at. Covers both files that produced
|
|
210
|
+
* a session and files we looked at but chose not to index (e.g. malformed).
|
|
211
|
+
*/
|
|
212
|
+
export function recordScans(entries) {
|
|
213
|
+
if (entries.length === 0)
|
|
214
|
+
return;
|
|
215
|
+
const db = getDB();
|
|
216
|
+
const stmt = db.prepare(`
|
|
217
|
+
INSERT INTO scan_ledger (file_path, file_mtime_ms, file_size, scanned_at)
|
|
218
|
+
VALUES (?, ?, ?, ?)
|
|
219
|
+
ON CONFLICT(file_path) DO UPDATE SET
|
|
220
|
+
file_mtime_ms = excluded.file_mtime_ms,
|
|
221
|
+
file_size = excluded.file_size,
|
|
222
|
+
scanned_at = excluded.scanned_at
|
|
223
|
+
`);
|
|
224
|
+
const now = Date.now();
|
|
225
|
+
const txn = db.transaction((items) => {
|
|
226
|
+
for (const { filePath, scan } of items) {
|
|
227
|
+
stmt.run(filePath, scan.fileMtimeMs, scan.fileSize, now);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
txn(entries);
|
|
231
|
+
}
|
|
232
|
+
const upsertSessionStmt = (db) => db.prepare(`
|
|
233
|
+
INSERT INTO sessions (
|
|
234
|
+
id, short_id, agent, version, account, timestamp,
|
|
235
|
+
project, cwd, git_branch, topic, label, message_count, token_count,
|
|
236
|
+
file_path, file_mtime_ms, file_size, scanned_at, is_team_origin
|
|
237
|
+
) VALUES (
|
|
238
|
+
@id, @short_id, @agent, @version, @account, @timestamp,
|
|
239
|
+
@project, @cwd, @git_branch, @topic, @label, @message_count, @token_count,
|
|
240
|
+
@file_path, @file_mtime_ms, @file_size, @scanned_at, @is_team_origin
|
|
241
|
+
)
|
|
242
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
243
|
+
short_id = excluded.short_id,
|
|
244
|
+
agent = excluded.agent,
|
|
245
|
+
version = excluded.version,
|
|
246
|
+
account = excluded.account,
|
|
247
|
+
timestamp = excluded.timestamp,
|
|
248
|
+
project = excluded.project,
|
|
249
|
+
cwd = excluded.cwd,
|
|
250
|
+
git_branch = excluded.git_branch,
|
|
251
|
+
topic = excluded.topic,
|
|
252
|
+
label = excluded.label,
|
|
253
|
+
message_count = excluded.message_count,
|
|
254
|
+
token_count = excluded.token_count,
|
|
255
|
+
file_path = excluded.file_path,
|
|
256
|
+
file_mtime_ms = excluded.file_mtime_ms,
|
|
257
|
+
file_size = excluded.file_size,
|
|
258
|
+
scanned_at = excluded.scanned_at,
|
|
259
|
+
is_team_origin = excluded.is_team_origin
|
|
260
|
+
`);
|
|
261
|
+
const deleteTextStmt = (db) => db.prepare(`DELETE FROM session_text WHERE session_id = ?`);
|
|
262
|
+
const insertTextStmt = (db) => db.prepare(`INSERT INTO session_text (session_id, label, topic, project, content) VALUES (?, ?, ?, ?, ?)`);
|
|
263
|
+
let cachedStmts = {};
|
|
264
|
+
function stmts(db) {
|
|
265
|
+
if (!cachedStmts.upsert) {
|
|
266
|
+
cachedStmts = {
|
|
267
|
+
upsert: upsertSessionStmt(db),
|
|
268
|
+
delText: deleteTextStmt(db),
|
|
269
|
+
insText: insertTextStmt(db),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return cachedStmts;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Upsert a session row and replace its FTS5 content in a single transaction.
|
|
276
|
+
* `content` is the tokenizable user-prompt text; pass '' to leave the row unsearchable.
|
|
277
|
+
*/
|
|
278
|
+
export function upsertSession(meta, content, scan) {
|
|
279
|
+
const db = getDB();
|
|
280
|
+
const { upsert, delText, insText } = stmts(db);
|
|
281
|
+
const row = {
|
|
282
|
+
id: meta.id,
|
|
283
|
+
short_id: meta.shortId,
|
|
284
|
+
agent: meta.agent,
|
|
285
|
+
version: meta.version ?? null,
|
|
286
|
+
account: meta.account ?? null,
|
|
287
|
+
timestamp: meta.timestamp,
|
|
288
|
+
project: meta.project ?? null,
|
|
289
|
+
cwd: meta.cwd ?? null,
|
|
290
|
+
git_branch: meta.gitBranch ?? null,
|
|
291
|
+
topic: meta.topic ?? null,
|
|
292
|
+
label: meta.label ?? null,
|
|
293
|
+
message_count: meta.messageCount ?? null,
|
|
294
|
+
token_count: meta.tokenCount ?? null,
|
|
295
|
+
file_path: meta.filePath,
|
|
296
|
+
file_mtime_ms: scan?.fileMtimeMs ?? null,
|
|
297
|
+
file_size: scan?.fileSize ?? null,
|
|
298
|
+
scanned_at: Date.now(),
|
|
299
|
+
is_team_origin: meta.isTeamOrigin ? 1 : 0,
|
|
300
|
+
};
|
|
301
|
+
const txn = db.transaction(() => {
|
|
302
|
+
upsert.run(row);
|
|
303
|
+
delText.run(meta.id);
|
|
304
|
+
insText.run(meta.id, meta.label ?? '', meta.topic ?? '', meta.project ?? '', content ?? '');
|
|
305
|
+
});
|
|
306
|
+
txn();
|
|
307
|
+
}
|
|
308
|
+
/** Batch-upsert sessions with their FTS5 content and scan stamps in a single transaction. */
|
|
309
|
+
export function upsertSessionsBatch(entries) {
|
|
310
|
+
if (entries.length === 0)
|
|
311
|
+
return;
|
|
312
|
+
const db = getDB();
|
|
313
|
+
const { upsert, delText, insText } = stmts(db);
|
|
314
|
+
const now = Date.now();
|
|
315
|
+
const ledger = db.prepare(`
|
|
316
|
+
INSERT INTO scan_ledger (file_path, file_mtime_ms, file_size, scanned_at)
|
|
317
|
+
VALUES (?, ?, ?, ?)
|
|
318
|
+
ON CONFLICT(file_path) DO UPDATE SET
|
|
319
|
+
file_mtime_ms = excluded.file_mtime_ms,
|
|
320
|
+
file_size = excluded.file_size,
|
|
321
|
+
scanned_at = excluded.scanned_at
|
|
322
|
+
`);
|
|
323
|
+
const txn = db.transaction((items) => {
|
|
324
|
+
for (const { meta, content, scan } of items) {
|
|
325
|
+
upsert.run({
|
|
326
|
+
id: meta.id,
|
|
327
|
+
short_id: meta.shortId,
|
|
328
|
+
agent: meta.agent,
|
|
329
|
+
version: meta.version ?? null,
|
|
330
|
+
account: meta.account ?? null,
|
|
331
|
+
timestamp: meta.timestamp,
|
|
332
|
+
project: meta.project ?? null,
|
|
333
|
+
cwd: meta.cwd ?? null,
|
|
334
|
+
git_branch: meta.gitBranch ?? null,
|
|
335
|
+
topic: meta.topic ?? null,
|
|
336
|
+
label: meta.label ?? null,
|
|
337
|
+
message_count: meta.messageCount ?? null,
|
|
338
|
+
token_count: meta.tokenCount ?? null,
|
|
339
|
+
file_path: meta.filePath,
|
|
340
|
+
file_mtime_ms: scan?.fileMtimeMs ?? null,
|
|
341
|
+
file_size: scan?.fileSize ?? null,
|
|
342
|
+
scanned_at: now,
|
|
343
|
+
is_team_origin: meta.isTeamOrigin ? 1 : 0,
|
|
344
|
+
});
|
|
345
|
+
delText.run(meta.id);
|
|
346
|
+
insText.run(meta.id, meta.label ?? '', meta.topic ?? '', meta.project ?? '', content ?? '');
|
|
347
|
+
if (scan && meta.filePath) {
|
|
348
|
+
ledger.run(meta.filePath, scan.fileMtimeMs, scan.fileSize, now);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
txn(entries);
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Sync labels for a set of sessions. For each id in the map, if the stored
|
|
356
|
+
* label differs, update both `sessions.label` and the FTS5 label column.
|
|
357
|
+
* Leaves FTS5 content/topic/project untouched — cheap to call every run.
|
|
358
|
+
*/
|
|
359
|
+
export function syncLabels(labelMap) {
|
|
360
|
+
if (labelMap.size === 0)
|
|
361
|
+
return 0;
|
|
362
|
+
const db = getDB();
|
|
363
|
+
const ids = [...labelMap.keys()];
|
|
364
|
+
const CHUNK = 500;
|
|
365
|
+
const updates = [];
|
|
366
|
+
for (let i = 0; i < ids.length; i += CHUNK) {
|
|
367
|
+
const chunk = ids.slice(i, i + CHUNK);
|
|
368
|
+
const placeholders = chunk.map(() => '?').join(',');
|
|
369
|
+
const rows = db
|
|
370
|
+
.prepare(`SELECT id, label FROM sessions WHERE id IN (${placeholders})`)
|
|
371
|
+
.all(...chunk);
|
|
372
|
+
for (const row of rows) {
|
|
373
|
+
const live = labelMap.get(row.id) ?? null;
|
|
374
|
+
if ((live ?? '') !== (row.label ?? '')) {
|
|
375
|
+
updates.push({ id: row.id, label: live });
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
if (updates.length === 0)
|
|
380
|
+
return 0;
|
|
381
|
+
const updSessions = db.prepare(`UPDATE sessions SET label = ? WHERE id = ?`);
|
|
382
|
+
const updFts = db.prepare(`UPDATE session_text SET label = ? WHERE session_id = ?`);
|
|
383
|
+
const txn = db.transaction((items) => {
|
|
384
|
+
for (const { id, label } of items) {
|
|
385
|
+
updSessions.run(label, id);
|
|
386
|
+
updFts.run(label ?? '', id);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
txn(updates);
|
|
390
|
+
return updates.length;
|
|
391
|
+
}
|
|
392
|
+
/** Convert a raw database row into a SessionMeta object. */
|
|
393
|
+
function rowToMeta(row) {
|
|
394
|
+
return {
|
|
395
|
+
id: row.id,
|
|
396
|
+
shortId: row.short_id,
|
|
397
|
+
agent: row.agent,
|
|
398
|
+
timestamp: row.timestamp,
|
|
399
|
+
project: row.project ?? undefined,
|
|
400
|
+
cwd: row.cwd ?? undefined,
|
|
401
|
+
filePath: row.file_path,
|
|
402
|
+
gitBranch: row.git_branch ?? undefined,
|
|
403
|
+
messageCount: row.message_count ?? undefined,
|
|
404
|
+
tokenCount: row.token_count ?? undefined,
|
|
405
|
+
version: row.version ?? undefined,
|
|
406
|
+
account: row.account ?? undefined,
|
|
407
|
+
topic: row.topic ?? undefined,
|
|
408
|
+
label: row.label ?? undefined,
|
|
409
|
+
isTeamOrigin: row.is_team_origin === 1,
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
/** Build a parameterized WHERE clause from query options. */
|
|
413
|
+
function buildSessionWhere(options) {
|
|
414
|
+
const where = [];
|
|
415
|
+
const params = [];
|
|
416
|
+
if (options.agent) {
|
|
417
|
+
where.push('agent = ?');
|
|
418
|
+
params.push(options.agent);
|
|
419
|
+
}
|
|
420
|
+
else if (options.agents && options.agents.length > 0) {
|
|
421
|
+
where.push(`agent IN (${options.agents.map(() => '?').join(',')})`);
|
|
422
|
+
params.push(...options.agents);
|
|
423
|
+
}
|
|
424
|
+
if (options.version) {
|
|
425
|
+
where.push('version = ?');
|
|
426
|
+
params.push(options.version);
|
|
427
|
+
}
|
|
428
|
+
if (options.cwd) {
|
|
429
|
+
where.push('cwd = ?');
|
|
430
|
+
params.push(options.cwd);
|
|
431
|
+
}
|
|
432
|
+
if (options.cwdPrefix) {
|
|
433
|
+
where.push('(cwd = ? OR cwd LIKE ?)');
|
|
434
|
+
params.push(options.cwdPrefix, options.cwdPrefix + '/%');
|
|
435
|
+
}
|
|
436
|
+
if (options.project) {
|
|
437
|
+
where.push('LOWER(IFNULL(project, \'\')) LIKE ?');
|
|
438
|
+
params.push(`%${options.project.toLowerCase()}%`);
|
|
439
|
+
}
|
|
440
|
+
if (typeof options.sinceMs === 'number') {
|
|
441
|
+
// Compare as strings; ISO 8601 timestamps sort lexicographically.
|
|
442
|
+
where.push('timestamp >= ?');
|
|
443
|
+
params.push(new Date(options.sinceMs).toISOString());
|
|
444
|
+
}
|
|
445
|
+
if (typeof options.untilMs === 'number') {
|
|
446
|
+
where.push('timestamp <= ?');
|
|
447
|
+
params.push(new Date(options.untilMs).toISOString());
|
|
448
|
+
}
|
|
449
|
+
if (options.excludeTeamOrigin) {
|
|
450
|
+
where.push('IFNULL(is_team_origin, 0) = 0');
|
|
451
|
+
}
|
|
452
|
+
if (options.onlyTeamOrigin) {
|
|
453
|
+
where.push('IFNULL(is_team_origin, 0) = 1');
|
|
454
|
+
}
|
|
455
|
+
const clause = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
|
|
456
|
+
return { clause, params };
|
|
457
|
+
}
|
|
458
|
+
/** Query sessions from the database, applying filters and ordering by timestamp descending. */
|
|
459
|
+
export function querySessions(options = {}) {
|
|
460
|
+
const db = getDB();
|
|
461
|
+
const { clause, params } = buildSessionWhere(options);
|
|
462
|
+
const limitClause = options.limit ? `LIMIT ${Math.max(1, Math.floor(options.limit))}` : '';
|
|
463
|
+
const sql = `SELECT * FROM sessions ${clause} ORDER BY timestamp DESC ${limitClause}`;
|
|
464
|
+
const rows = db.prepare(sql).all(...params);
|
|
465
|
+
return rows.map(rowToMeta);
|
|
466
|
+
}
|
|
467
|
+
/** Count sessions matching the given filter options. */
|
|
468
|
+
export function countSessions(options = {}) {
|
|
469
|
+
const db = getDB();
|
|
470
|
+
const { clause, params } = buildSessionWhere(options);
|
|
471
|
+
const sql = `SELECT COUNT(*) AS n FROM sessions ${clause}`;
|
|
472
|
+
const row = db.prepare(sql).get(...params);
|
|
473
|
+
return row ? row.n : 0;
|
|
474
|
+
}
|
|
475
|
+
/** Return the set of all file paths currently tracked in the sessions table. */
|
|
476
|
+
export function getAllFilePaths() {
|
|
477
|
+
const db = getDB();
|
|
478
|
+
const rows = db.prepare(`SELECT file_path FROM sessions`).all();
|
|
479
|
+
return new Set(rows.map(r => r.file_path));
|
|
480
|
+
}
|
|
481
|
+
/** Look up sessions by their source file paths. */
|
|
482
|
+
export function getSessionsByFilePaths(paths) {
|
|
483
|
+
if (paths.length === 0)
|
|
484
|
+
return new Map();
|
|
485
|
+
const db = getDB();
|
|
486
|
+
const placeholders = paths.map(() => '?').join(',');
|
|
487
|
+
const rows = db
|
|
488
|
+
.prepare(`SELECT * FROM sessions WHERE file_path IN (${placeholders})`)
|
|
489
|
+
.all(...paths);
|
|
490
|
+
const result = new Map();
|
|
491
|
+
for (const row of rows)
|
|
492
|
+
result.set(row.file_path, rowToMeta(row));
|
|
493
|
+
return result;
|
|
494
|
+
}
|
|
495
|
+
/** Look up a single session by its unique ID. */
|
|
496
|
+
export function getSessionById(id) {
|
|
497
|
+
const db = getDB();
|
|
498
|
+
const row = db.prepare(`SELECT * FROM sessions WHERE id = ?`).get(id);
|
|
499
|
+
return row ? rowToMeta(row) : null;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Escape a raw user query into a safe FTS5 MATCH expression.
|
|
503
|
+
* Splits on non-word characters, keeps tokens >= 2 chars, and OR-joins
|
|
504
|
+
* them with a prefix wildcard so partial typing ('rush dep') matches.
|
|
505
|
+
*/
|
|
506
|
+
export function buildFtsQuery(input) {
|
|
507
|
+
const terms = input.toLowerCase().split(/[^a-z0-9]+/).filter(t => t.length >= 2);
|
|
508
|
+
if (terms.length === 0)
|
|
509
|
+
return { expr: '', terms: [] };
|
|
510
|
+
const expr = terms.map(t => `${t}*`).join(' OR ');
|
|
511
|
+
return { expr, terms };
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Label-first search. Sessions whose custom label substring-matches the query
|
|
515
|
+
* always rank ahead of FTS5 hits — this gives predictable behavior when a user
|
|
516
|
+
* types the exact name they gave a session via /rename.
|
|
517
|
+
*
|
|
518
|
+
* Tiers (highest → lowest):
|
|
519
|
+
* 1. Exact label match (case-insensitive): score 1_000_000
|
|
520
|
+
* 2. Label prefix match: score 900_000
|
|
521
|
+
* 3. Label contains query: score 800_000
|
|
522
|
+
* 4. FTS5 BM25 hits: score 1..1000 (scaled)
|
|
523
|
+
*
|
|
524
|
+
* Note: FTS5's bm25() returns negative numbers; we flip the sign for tier 4
|
|
525
|
+
* so "higher = better" is consistent across all tiers.
|
|
526
|
+
*/
|
|
527
|
+
export function ftsSearch(input, limit = 200) {
|
|
528
|
+
const db = getDB();
|
|
529
|
+
const trimmed = input.trim();
|
|
530
|
+
if (!trimmed)
|
|
531
|
+
return [];
|
|
532
|
+
const { expr, terms } = buildFtsQuery(input);
|
|
533
|
+
const lower = trimmed.toLowerCase();
|
|
534
|
+
const seen = new Set();
|
|
535
|
+
const hits = [];
|
|
536
|
+
// Tier 1-3: label-based matches, ordered by exactness.
|
|
537
|
+
const labelRows = db.prepare(`
|
|
538
|
+
SELECT id, label FROM sessions
|
|
539
|
+
WHERE label IS NOT NULL AND LOWER(label) LIKE ?
|
|
540
|
+
`).all(`%${lower}%`);
|
|
541
|
+
let hasExactLabelMatch = false;
|
|
542
|
+
for (const row of labelRows) {
|
|
543
|
+
const labelLower = row.label.toLowerCase();
|
|
544
|
+
let score;
|
|
545
|
+
if (labelLower === lower) {
|
|
546
|
+
score = 1_000_000;
|
|
547
|
+
hasExactLabelMatch = true;
|
|
548
|
+
}
|
|
549
|
+
else if (labelLower.startsWith(lower)) {
|
|
550
|
+
score = 900_000;
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
score = 800_000;
|
|
554
|
+
}
|
|
555
|
+
// matchedTerms is empty for label hits — the picker can render the label
|
|
556
|
+
// itself as the highlight, no badge needed.
|
|
557
|
+
hits.push({ sessionId: row.id, score, matchedTerms: [] });
|
|
558
|
+
seen.add(row.id);
|
|
559
|
+
}
|
|
560
|
+
// If the query exactly names a labeled session, don't dilute the result
|
|
561
|
+
// with FTS5 content hits — the user typed a specific thing, show just it.
|
|
562
|
+
if (hasExactLabelMatch) {
|
|
563
|
+
hits.sort((a, b) => b.score - a.score);
|
|
564
|
+
return hits.slice(0, limit);
|
|
565
|
+
}
|
|
566
|
+
// Tier 4: FTS5 content match, skipping anything already surfaced via label.
|
|
567
|
+
if (expr) {
|
|
568
|
+
try {
|
|
569
|
+
const rows = db
|
|
570
|
+
.prepare(`
|
|
571
|
+
SELECT session_id, bm25(session_text, ${BM25_WEIGHTS.join(', ')}) AS rank
|
|
572
|
+
FROM session_text
|
|
573
|
+
WHERE session_text MATCH ?
|
|
574
|
+
ORDER BY rank ASC
|
|
575
|
+
LIMIT ?
|
|
576
|
+
`)
|
|
577
|
+
.all(expr, limit);
|
|
578
|
+
for (const r of rows) {
|
|
579
|
+
if (seen.has(r.session_id))
|
|
580
|
+
continue;
|
|
581
|
+
hits.push({ sessionId: r.session_id, score: -r.rank, matchedTerms: terms });
|
|
582
|
+
seen.add(r.session_id);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
catch {
|
|
586
|
+
/* invalid MATCH expression — tier 4 just yields nothing */
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
hits.sort((a, b) => b.score - a.score);
|
|
590
|
+
return hits.slice(0, limit);
|
|
591
|
+
}
|
|
592
|
+
/** Return the total row counts for the sessions and FTS5 tables (diagnostic). */
|
|
593
|
+
export function getRowCount() {
|
|
594
|
+
const db = getDB();
|
|
595
|
+
const sessions = db.prepare(`SELECT COUNT(*) AS c FROM sessions`).get().c;
|
|
596
|
+
const textRows = db.prepare(`SELECT COUNT(*) AS c FROM session_text`).get().c;
|
|
597
|
+
return { sessions, textRows };
|
|
598
|
+
}
|
|
599
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/lib/session/db.ts"],"names":[],"mappings":"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"}
|