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