@phnx-labs/agents-cli 1.12.0 → 1.14.2
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 +7 -1
- package/README.md +308 -297
- package/dist/commands/alias.d.ts +11 -0
- package/dist/commands/alias.js +117 -0
- package/dist/commands/beta.d.ts +2 -0
- package/dist/commands/beta.js +53 -0
- package/dist/commands/cloud.d.ts +10 -0
- package/dist/commands/cloud.js +408 -0
- package/dist/commands/commands.d.ts +9 -1
- package/dist/commands/commands.js +24 -172
- package/dist/commands/daemon.d.ts +8 -1
- package/dist/commands/daemon.js +13 -5
- package/dist/commands/doctor.d.ts +15 -0
- package/dist/commands/doctor.js +132 -0
- package/dist/commands/drive.d.ts +8 -1
- package/dist/commands/drive.js +20 -3
- package/dist/commands/exec.d.ts +8 -1
- package/dist/commands/exec.js +207 -20
- package/dist/commands/factory.d.ts +19 -0
- package/dist/commands/factory.js +71 -0
- package/dist/commands/fork.d.ts +8 -1
- package/dist/commands/fork.js +11 -4
- package/dist/commands/hooks.d.ts +9 -1
- package/dist/commands/hooks.js +30 -182
- package/dist/commands/init.d.ts +15 -1
- package/dist/commands/init.js +168 -74
- package/dist/commands/mcp.d.ts +9 -1
- package/dist/commands/mcp.js +11 -7
- package/dist/commands/models.d.ts +8 -1
- package/dist/commands/models.js +45 -6
- package/dist/commands/packages.d.ts +8 -1
- package/dist/commands/packages.js +13 -7
- package/dist/commands/permissions.d.ts +9 -1
- package/dist/commands/permissions.js +3 -3
- package/dist/commands/plugins.d.ts +8 -1
- package/dist/commands/plugins.js +13 -2
- package/dist/commands/profiles.d.ts +11 -0
- package/dist/commands/profiles.js +291 -0
- package/dist/commands/prune.d.ts +22 -0
- package/dist/commands/prune.js +191 -0
- package/dist/commands/pty.d.ts +1 -1
- package/dist/commands/pty.js +2 -1
- package/dist/commands/pull.d.ts +8 -1
- package/dist/commands/pull.js +93 -129
- package/dist/commands/refresh-memory.d.ts +7 -1
- package/dist/commands/refresh-memory.js +7 -1
- package/dist/commands/repo.d.ts +15 -0
- package/dist/commands/repo.js +570 -0
- package/dist/commands/resource-view.d.ts +10 -3
- package/dist/commands/resource-view.js +18 -5
- package/dist/commands/routines.d.ts +8 -1
- package/dist/commands/routines.js +17 -4
- package/dist/commands/rules.d.ts +9 -1
- package/dist/commands/rules.js +16 -11
- package/dist/commands/secrets.d.ts +10 -0
- package/dist/commands/secrets.js +518 -0
- package/dist/commands/sessions-picker.d.ts +2 -1
- package/dist/commands/sessions-picker.js +88 -11
- package/dist/commands/sessions-tail.d.ts +19 -0
- package/dist/commands/sessions-tail.js +235 -0
- package/dist/commands/sessions.d.ts +2 -1
- package/dist/commands/sessions.js +288 -7
- package/dist/commands/skills.d.ts +9 -1
- package/dist/commands/skills.js +28 -178
- package/dist/commands/status.d.ts +7 -1
- package/dist/commands/status.js +7 -1
- package/dist/commands/subagents.d.ts +8 -1
- package/dist/commands/subagents.js +11 -1
- package/dist/commands/sync.d.ts +8 -1
- package/dist/commands/sync.js +8 -1
- package/dist/commands/teams-picker.d.ts +4 -1
- package/dist/commands/teams-picker.js +55 -3
- package/dist/commands/teams.d.ts +15 -1
- package/dist/commands/teams.js +323 -69
- package/dist/commands/usage.d.ts +11 -0
- package/dist/commands/usage.js +60 -0
- package/dist/commands/utils.d.ts +6 -1
- package/dist/commands/utils.js +6 -1
- package/dist/commands/versions.d.ts +8 -1
- package/dist/commands/versions.js +4 -3
- package/dist/commands/view.d.ts +47 -2
- package/dist/commands/view.js +353 -20
- package/dist/index.d.ts +7 -2
- package/dist/index.js +205 -38
- package/dist/lib/acp/client.d.ts +31 -0
- package/dist/lib/acp/client.js +117 -0
- package/dist/lib/acp/harnesses.d.ts +26 -0
- package/dist/lib/acp/harnesses.js +65 -0
- package/dist/lib/acp/run.d.ts +18 -0
- package/dist/lib/acp/run.js +39 -0
- package/dist/lib/agents.d.ts +74 -2
- package/dist/lib/agents.js +207 -23
- package/dist/lib/artifact-actions.d.ts +8 -4
- package/dist/lib/artifact-actions.js +8 -6
- package/dist/lib/auto-pull-worker.d.ts +11 -0
- package/dist/lib/auto-pull-worker.js +121 -0
- package/dist/lib/auto-pull.d.ts +31 -0
- package/dist/lib/auto-pull.js +97 -0
- package/dist/lib/beta.d.ts +23 -0
- package/dist/lib/beta.js +90 -0
- package/dist/lib/capabilities.d.ts +29 -0
- package/dist/lib/capabilities.js +74 -0
- package/dist/lib/cloud/codex.d.ts +25 -0
- package/dist/lib/cloud/codex.js +250 -0
- package/dist/lib/cloud/factory.d.ts +31 -0
- package/dist/lib/cloud/factory.js +53 -0
- package/dist/lib/cloud/registry.d.ts +15 -0
- package/dist/lib/cloud/registry.js +67 -0
- package/dist/lib/cloud/rush.d.ts +75 -0
- package/dist/lib/cloud/rush.js +438 -0
- package/dist/lib/cloud/store.d.ts +22 -0
- package/dist/lib/cloud/store.js +115 -0
- package/dist/lib/cloud/stream.d.ts +23 -0
- package/dist/lib/cloud/stream.js +194 -0
- package/dist/lib/cloud/types.d.ts +205 -0
- package/dist/lib/cloud/types.js +34 -0
- package/dist/lib/command-skills.d.ts +20 -0
- package/dist/lib/command-skills.js +142 -0
- package/dist/lib/commands.d.ts +22 -2
- package/dist/lib/commands.js +51 -11
- package/dist/lib/convert.d.ts +10 -1
- package/dist/lib/convert.js +9 -1
- package/dist/lib/daemon.d.ts +21 -1
- package/dist/lib/daemon.js +97 -4
- package/dist/lib/drive-sync.d.ts +18 -1
- package/dist/lib/drive-sync.js +57 -15
- package/dist/lib/exec.d.ts +25 -5
- package/dist/lib/exec.js +72 -27
- package/dist/lib/fs-walk.d.ts +2 -0
- package/dist/lib/fs-walk.js +40 -0
- package/dist/lib/fuzzy.d.ts +53 -0
- package/dist/lib/fuzzy.js +72 -0
- package/dist/lib/gemini-settings.d.ts +4 -0
- package/dist/lib/gemini-settings.js +33 -0
- package/dist/lib/git.d.ts +12 -2
- package/dist/lib/git.js +17 -6
- package/dist/lib/help.d.ts +20 -1
- package/dist/lib/help.js +45 -6
- package/dist/lib/hooks/match.d.ts +32 -0
- package/dist/lib/hooks/match.js +120 -0
- package/dist/lib/hooks.d.ts +17 -4
- package/dist/lib/hooks.js +191 -21
- package/dist/lib/manifest.d.ts +6 -1
- package/dist/lib/manifest.js +15 -4
- package/dist/lib/markdown.d.ts +0 -1
- package/dist/lib/markdown.js +6 -1
- package/dist/lib/mcp.d.ts +0 -1
- package/dist/lib/mcp.js +29 -33
- package/dist/lib/memory-compile.d.ts +13 -3
- package/dist/lib/memory-compile.js +31 -9
- package/dist/lib/memory.d.ts +14 -7
- package/dist/lib/memory.js +67 -38
- package/dist/lib/migrate.d.ts +8 -0
- package/dist/lib/migrate.js +85 -0
- package/dist/lib/models.d.ts +25 -11
- package/dist/lib/models.js +405 -16
- package/dist/lib/onepassword.d.ts +63 -0
- package/dist/lib/onepassword.js +186 -0
- package/dist/lib/paths.d.ts +8 -0
- package/dist/lib/paths.js +20 -0
- package/dist/lib/permissions.d.ts +24 -2
- package/dist/lib/permissions.js +117 -48
- package/dist/lib/picker.d.ts +10 -1
- package/dist/lib/picker.js +15 -1
- package/dist/lib/plugins.d.ts +7 -1
- package/dist/lib/plugins.js +10 -1
- package/dist/lib/profiles-presets.d.ts +24 -0
- package/dist/lib/profiles-presets.js +103 -0
- package/dist/lib/profiles.d.ts +69 -0
- package/dist/lib/profiles.js +144 -0
- package/dist/lib/pty-client.d.ts +1 -1
- package/dist/lib/pty-client.js +0 -1
- package/dist/lib/pty-server.d.ts +16 -2
- package/dist/lib/pty-server.js +92 -3
- package/dist/lib/registry.d.ts +23 -3
- package/dist/lib/registry.js +153 -8
- package/dist/lib/resources.d.ts +28 -1
- package/dist/lib/resources.js +79 -1
- package/dist/lib/rotate.d.ts +89 -0
- package/dist/lib/rotate.js +327 -0
- package/dist/lib/routines.d.ts +29 -1
- package/dist/lib/routines.js +32 -5
- package/dist/lib/runner.d.ts +14 -1
- package/dist/lib/runner.js +22 -3
- package/dist/lib/sandbox.d.ts +16 -1
- package/dist/lib/sandbox.js +39 -16
- package/dist/lib/scheduler.d.ts +8 -1
- package/dist/lib/scheduler.js +8 -1
- package/dist/lib/secrets/AgentsKeychain.app/Contents/CodeResources +0 -0
- package/dist/lib/secrets/AgentsKeychain.app/Contents/Info.plist +22 -0
- package/dist/lib/secrets/AgentsKeychain.app/Contents/MacOS/AgentsKeychain +0 -0
- package/dist/lib/secrets/AgentsKeychain.app/Contents/_CodeSignature/CodeResources +123 -0
- package/dist/lib/secrets/AgentsKeychain.app/Contents/embedded.provisionprofile +0 -0
- package/dist/lib/secrets/bundles.d.ts +39 -0
- package/dist/lib/secrets/bundles.js +189 -0
- package/dist/lib/secrets/index.d.ts +55 -0
- package/dist/lib/secrets/index.js +211 -0
- package/dist/lib/secrets/profiles.d.ts +10 -0
- package/dist/lib/secrets/profiles.js +13 -0
- package/dist/lib/session/active.d.ts +43 -0
- package/dist/lib/session/active.js +392 -0
- package/dist/lib/session/artifacts.d.ts +16 -0
- package/dist/lib/session/artifacts.js +95 -0
- package/dist/lib/session/cloud.d.ts +30 -0
- package/dist/lib/session/cloud.js +121 -0
- package/dist/lib/session/db.d.ts +23 -2
- package/dist/lib/session/db.js +76 -12
- package/dist/lib/session/discover.d.ts +19 -4
- package/dist/lib/session/discover.js +344 -48
- package/dist/lib/session/parse.d.ts +28 -1
- package/dist/lib/session/parse.js +267 -9
- package/dist/lib/session/prompt.d.ts +9 -1
- package/dist/lib/session/prompt.js +17 -3
- package/dist/lib/session/render.d.ts +13 -1
- package/dist/lib/session/render.js +20 -1
- package/dist/lib/session/team-filter.d.ts +9 -1
- package/dist/lib/session/team-filter.js +11 -2
- package/dist/lib/session/types.d.ts +24 -2
- package/dist/lib/session/types.js +10 -2
- package/dist/lib/shims.d.ts +93 -5
- package/dist/lib/shims.js +380 -67
- package/dist/lib/skills.d.ts +27 -2
- package/dist/lib/skills.js +127 -65
- package/dist/lib/sqlite.d.ts +43 -0
- package/dist/lib/sqlite.js +94 -0
- package/dist/lib/state.d.ts +114 -22
- package/dist/lib/state.js +323 -138
- package/dist/lib/subagents.d.ts +9 -1
- package/dist/lib/subagents.js +70 -63
- package/dist/lib/sync-manifest.d.ts +81 -0
- package/dist/lib/sync-manifest.js +450 -0
- package/dist/lib/teams/agents.d.ts +103 -5
- package/dist/lib/teams/agents.js +414 -91
- package/dist/lib/teams/api.d.ts +26 -3
- package/dist/lib/teams/api.js +63 -3
- package/dist/lib/teams/debug.d.ts +6 -1
- package/dist/lib/teams/debug.js +6 -1
- package/dist/lib/teams/file_ops.d.ts +7 -1
- package/dist/lib/teams/file_ops.js +7 -1
- package/dist/lib/teams/index.d.ts +15 -0
- package/dist/lib/teams/index.js +14 -0
- package/dist/lib/teams/parsers.d.ts +4 -1
- package/dist/lib/teams/parsers.js +11 -1
- package/dist/lib/teams/persistence.d.ts +15 -1
- package/dist/lib/teams/persistence.js +102 -20
- package/dist/lib/teams/registry.d.ts +12 -1
- package/dist/lib/teams/registry.js +116 -33
- package/dist/lib/teams/summarizer.d.ts +15 -1
- package/dist/lib/teams/summarizer.js +14 -1
- package/dist/lib/teams/supervisor.d.ts +48 -0
- package/dist/lib/teams/supervisor.js +73 -0
- package/dist/lib/template.d.ts +8 -6
- package/dist/lib/template.js +8 -6
- package/dist/lib/types.d.ts +147 -8
- package/dist/lib/types.js +26 -3
- package/dist/lib/usage.d.ts +48 -1
- package/dist/lib/usage.js +97 -16
- package/dist/lib/version-duplicates.d.ts +21 -0
- package/dist/lib/version-duplicates.js +90 -0
- package/dist/lib/versions.d.ts +39 -4
- package/dist/lib/versions.js +401 -111
- package/package.json +33 -18
- package/scripts/postinstall.js +126 -30
- package/dist/commands/__tests__/sessions.test.d.ts +0 -2
- package/dist/commands/__tests__/sessions.test.d.ts.map +0 -1
- package/dist/commands/__tests__/sessions.test.js +0 -636
- package/dist/commands/__tests__/sessions.test.js.map +0 -1
- package/dist/commands/commands.d.ts.map +0 -1
- package/dist/commands/commands.js.map +0 -1
- package/dist/commands/daemon.d.ts.map +0 -1
- package/dist/commands/daemon.js.map +0 -1
- package/dist/commands/drive.d.ts.map +0 -1
- package/dist/commands/drive.js.map +0 -1
- package/dist/commands/exec.d.ts.map +0 -1
- package/dist/commands/exec.js.map +0 -1
- package/dist/commands/fork.d.ts.map +0 -1
- package/dist/commands/fork.js.map +0 -1
- package/dist/commands/hooks.d.ts.map +0 -1
- package/dist/commands/hooks.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/mcp.d.ts.map +0 -1
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/models.d.ts.map +0 -1
- package/dist/commands/models.js.map +0 -1
- package/dist/commands/packages.d.ts.map +0 -1
- package/dist/commands/packages.js.map +0 -1
- package/dist/commands/permissions.d.ts.map +0 -1
- package/dist/commands/permissions.js.map +0 -1
- package/dist/commands/plugins.d.ts.map +0 -1
- package/dist/commands/plugins.js.map +0 -1
- package/dist/commands/pty.d.ts.map +0 -1
- package/dist/commands/pty.js.map +0 -1
- package/dist/commands/pull.d.ts.map +0 -1
- package/dist/commands/pull.js.map +0 -1
- package/dist/commands/push.d.ts +0 -3
- package/dist/commands/push.d.ts.map +0 -1
- package/dist/commands/push.js +0 -180
- package/dist/commands/push.js.map +0 -1
- package/dist/commands/refresh-memory.d.ts.map +0 -1
- package/dist/commands/refresh-memory.js.map +0 -1
- package/dist/commands/resource-view.d.ts.map +0 -1
- package/dist/commands/resource-view.js.map +0 -1
- package/dist/commands/routines.d.ts.map +0 -1
- package/dist/commands/routines.js.map +0 -1
- package/dist/commands/rules.d.ts.map +0 -1
- package/dist/commands/rules.js.map +0 -1
- package/dist/commands/sessions-picker.d.ts.map +0 -1
- package/dist/commands/sessions-picker.js.map +0 -1
- package/dist/commands/sessions.d.ts.map +0 -1
- package/dist/commands/sessions.js.map +0 -1
- package/dist/commands/skills.d.ts.map +0 -1
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/subagents.d.ts.map +0 -1
- package/dist/commands/subagents.js.map +0 -1
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/teams-picker.d.ts.map +0 -1
- package/dist/commands/teams-picker.js.map +0 -1
- package/dist/commands/teams.d.ts.map +0 -1
- package/dist/commands/teams.js.map +0 -1
- package/dist/commands/utils.d.ts.map +0 -1
- package/dist/commands/utils.js.map +0 -1
- package/dist/commands/versions.d.ts.map +0 -1
- package/dist/commands/versions.js.map +0 -1
- package/dist/commands/view.d.ts.map +0 -1
- package/dist/commands/view.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/__tests__/bugfixes.test.d.ts +0 -2
- package/dist/lib/__tests__/bugfixes.test.d.ts.map +0 -1
- package/dist/lib/__tests__/bugfixes.test.js +0 -192
- package/dist/lib/__tests__/bugfixes.test.js.map +0 -1
- package/dist/lib/__tests__/exec.test.d.ts +0 -2
- package/dist/lib/__tests__/exec.test.d.ts.map +0 -1
- package/dist/lib/__tests__/exec.test.js +0 -446
- package/dist/lib/__tests__/exec.test.js.map +0 -1
- package/dist/lib/__tests__/git-sync.test.d.ts +0 -2
- package/dist/lib/__tests__/git-sync.test.d.ts.map +0 -1
- package/dist/lib/__tests__/git-sync.test.js +0 -138
- package/dist/lib/__tests__/git-sync.test.js.map +0 -1
- package/dist/lib/__tests__/hooks.test.d.ts +0 -2
- package/dist/lib/__tests__/hooks.test.d.ts.map +0 -1
- package/dist/lib/__tests__/hooks.test.js +0 -203
- package/dist/lib/__tests__/hooks.test.js.map +0 -1
- package/dist/lib/__tests__/memory-compile.test.d.ts +0 -2
- package/dist/lib/__tests__/memory-compile.test.d.ts.map +0 -1
- package/dist/lib/__tests__/memory-compile.test.js +0 -95
- package/dist/lib/__tests__/memory-compile.test.js.map +0 -1
- package/dist/lib/__tests__/models.test.d.ts +0 -2
- package/dist/lib/__tests__/models.test.d.ts.map +0 -1
- package/dist/lib/__tests__/models.test.js +0 -184
- package/dist/lib/__tests__/models.test.js.map +0 -1
- package/dist/lib/__tests__/usage.test.d.ts +0 -2
- package/dist/lib/__tests__/usage.test.d.ts.map +0 -1
- package/dist/lib/__tests__/usage.test.js +0 -218
- package/dist/lib/__tests__/usage.test.js.map +0 -1
- package/dist/lib/agents.d.ts.map +0 -1
- package/dist/lib/agents.js.map +0 -1
- package/dist/lib/artifact-actions.d.ts.map +0 -1
- package/dist/lib/artifact-actions.js.map +0 -1
- package/dist/lib/commands.d.ts.map +0 -1
- package/dist/lib/commands.js.map +0 -1
- package/dist/lib/convert.d.ts.map +0 -1
- package/dist/lib/convert.js.map +0 -1
- package/dist/lib/daemon.d.ts.map +0 -1
- package/dist/lib/daemon.js.map +0 -1
- package/dist/lib/drive-sync.d.ts.map +0 -1
- package/dist/lib/drive-sync.js.map +0 -1
- package/dist/lib/exec.d.ts.map +0 -1
- package/dist/lib/exec.js.map +0 -1
- package/dist/lib/factory.d.ts +0 -57
- package/dist/lib/factory.d.ts.map +0 -1
- package/dist/lib/factory.js +0 -110
- package/dist/lib/factory.js.map +0 -1
- package/dist/lib/git.d.ts.map +0 -1
- package/dist/lib/git.js.map +0 -1
- package/dist/lib/help.d.ts.map +0 -1
- package/dist/lib/help.js.map +0 -1
- package/dist/lib/hooks.d.ts.map +0 -1
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/manifest.d.ts.map +0 -1
- package/dist/lib/manifest.js.map +0 -1
- package/dist/lib/markdown.d.ts.map +0 -1
- package/dist/lib/markdown.js.map +0 -1
- package/dist/lib/mcp.d.ts.map +0 -1
- package/dist/lib/mcp.js.map +0 -1
- package/dist/lib/memory-compile.d.ts.map +0 -1
- package/dist/lib/memory-compile.js.map +0 -1
- package/dist/lib/memory.d.ts.map +0 -1
- package/dist/lib/memory.js.map +0 -1
- package/dist/lib/models.d.ts.map +0 -1
- package/dist/lib/models.js.map +0 -1
- package/dist/lib/permissions.d.ts.map +0 -1
- package/dist/lib/permissions.js.map +0 -1
- package/dist/lib/picker.d.ts.map +0 -1
- package/dist/lib/picker.js.map +0 -1
- package/dist/lib/plugins.d.ts.map +0 -1
- package/dist/lib/plugins.js.map +0 -1
- package/dist/lib/pty-client.d.ts.map +0 -1
- package/dist/lib/pty-client.js.map +0 -1
- package/dist/lib/pty-server.d.ts.map +0 -1
- package/dist/lib/pty-server.js.map +0 -1
- package/dist/lib/registry.d.ts.map +0 -1
- package/dist/lib/registry.js.map +0 -1
- package/dist/lib/resources.d.ts.map +0 -1
- package/dist/lib/resources.js.map +0 -1
- package/dist/lib/routines.d.ts.map +0 -1
- package/dist/lib/routines.js.map +0 -1
- package/dist/lib/runner.d.ts.map +0 -1
- package/dist/lib/runner.js.map +0 -1
- package/dist/lib/sandbox.d.ts.map +0 -1
- package/dist/lib/sandbox.js.map +0 -1
- package/dist/lib/scheduler.d.ts.map +0 -1
- package/dist/lib/scheduler.js.map +0 -1
- package/dist/lib/session/__tests__/db.test.d.ts +0 -2
- package/dist/lib/session/__tests__/db.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/db.test.js +0 -54
- package/dist/lib/session/__tests__/db.test.js.map +0 -1
- package/dist/lib/session/__tests__/discover.test.d.ts +0 -2
- package/dist/lib/session/__tests__/discover.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/discover.test.js +0 -63
- package/dist/lib/session/__tests__/discover.test.js.map +0 -1
- package/dist/lib/session/__tests__/prompt.test.d.ts +0 -2
- package/dist/lib/session/__tests__/prompt.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/prompt.test.js +0 -44
- package/dist/lib/session/__tests__/prompt.test.js.map +0 -1
- package/dist/lib/session/__tests__/render.test.d.ts +0 -2
- package/dist/lib/session/__tests__/render.test.d.ts.map +0 -1
- package/dist/lib/session/__tests__/render.test.js +0 -602
- package/dist/lib/session/__tests__/render.test.js.map +0 -1
- package/dist/lib/session/db.d.ts.map +0 -1
- package/dist/lib/session/db.js.map +0 -1
- package/dist/lib/session/discover.d.ts.map +0 -1
- package/dist/lib/session/discover.js.map +0 -1
- package/dist/lib/session/parse.d.ts.map +0 -1
- package/dist/lib/session/parse.js.map +0 -1
- package/dist/lib/session/prompt.d.ts.map +0 -1
- package/dist/lib/session/prompt.js.map +0 -1
- package/dist/lib/session/prompt.test.d.ts +0 -2
- package/dist/lib/session/prompt.test.d.ts.map +0 -1
- package/dist/lib/session/prompt.test.js +0 -57
- package/dist/lib/session/prompt.test.js.map +0 -1
- package/dist/lib/session/render.d.ts.map +0 -1
- package/dist/lib/session/render.js.map +0 -1
- package/dist/lib/session/team-filter.d.ts.map +0 -1
- package/dist/lib/session/team-filter.js.map +0 -1
- package/dist/lib/session/team-filter.test.d.ts +0 -2
- package/dist/lib/session/team-filter.test.d.ts.map +0 -1
- package/dist/lib/session/team-filter.test.js +0 -157
- package/dist/lib/session/team-filter.test.js.map +0 -1
- package/dist/lib/session/types.d.ts.map +0 -1
- package/dist/lib/session/types.js.map +0 -1
- package/dist/lib/shims.d.ts.map +0 -1
- package/dist/lib/shims.js.map +0 -1
- package/dist/lib/skills.d.ts.map +0 -1
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/state.d.ts.map +0 -1
- package/dist/lib/state.js.map +0 -1
- package/dist/lib/subagents.d.ts.map +0 -1
- package/dist/lib/subagents.js.map +0 -1
- package/dist/lib/teams/agents.d.ts.map +0 -1
- package/dist/lib/teams/agents.js.map +0 -1
- package/dist/lib/teams/api.d.ts.map +0 -1
- package/dist/lib/teams/api.js.map +0 -1
- package/dist/lib/teams/cloud.d.ts +0 -11
- package/dist/lib/teams/cloud.d.ts.map +0 -1
- package/dist/lib/teams/cloud.js +0 -169
- package/dist/lib/teams/cloud.js.map +0 -1
- package/dist/lib/teams/debug.d.ts.map +0 -1
- package/dist/lib/teams/debug.js.map +0 -1
- package/dist/lib/teams/file_ops.d.ts.map +0 -1
- package/dist/lib/teams/file_ops.js.map +0 -1
- package/dist/lib/teams/parsers.d.ts.map +0 -1
- package/dist/lib/teams/parsers.js.map +0 -1
- package/dist/lib/teams/persistence.d.ts.map +0 -1
- package/dist/lib/teams/persistence.js.map +0 -1
- package/dist/lib/teams/ralph.d.ts +0 -8
- package/dist/lib/teams/ralph.d.ts.map +0 -1
- package/dist/lib/teams/ralph.js +0 -59
- package/dist/lib/teams/ralph.js.map +0 -1
- package/dist/lib/teams/registry.d.ts.map +0 -1
- package/dist/lib/teams/registry.js.map +0 -1
- package/dist/lib/teams/summarizer.d.ts.map +0 -1
- package/dist/lib/teams/summarizer.js.map +0 -1
- package/dist/lib/template.d.ts.map +0 -1
- package/dist/lib/template.js.map +0 -1
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/usage.d.ts.map +0 -1
- package/dist/lib/usage.js.map +0 -1
- package/dist/lib/versions.d.ts.map +0 -1
- package/dist/lib/versions.js.map +0 -1
- package/scripts/rebuild-sqlite.sh +0 -46
|
@@ -1,636 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as os from 'os';
|
|
4
|
-
import * as path from 'path';
|
|
5
|
-
import * as crypto from 'crypto';
|
|
6
|
-
import { spawnSync } from 'child_process';
|
|
7
|
-
import { buildResumeCommand } from '../sessions.js';
|
|
8
|
-
const repoRoot = process.cwd();
|
|
9
|
-
const cliEntry = path.join(repoRoot, 'src', 'index.ts');
|
|
10
|
-
const tsxBin = path.join(repoRoot, 'node_modules', '.bin', 'tsx');
|
|
11
|
-
function writeUpdateCache(tempHome) {
|
|
12
|
-
const packageJson = JSON.parse(fs.readFileSync(path.join(repoRoot, 'package.json'), 'utf-8'));
|
|
13
|
-
fs.mkdirSync(path.join(tempHome, '.agents'), { recursive: true });
|
|
14
|
-
fs.writeFileSync(path.join(tempHome, '.agents', '.update-check'), JSON.stringify({ lastCheck: Date.now(), latestVersion: packageJson.version }), 'utf-8');
|
|
15
|
-
}
|
|
16
|
-
function writeClaudeSession(tempHome, projectKey, sessionId, cwd, content, timestamp) {
|
|
17
|
-
fs.mkdirSync(cwd, { recursive: true });
|
|
18
|
-
const sessionsDir = path.join(tempHome, '.claude', 'projects', projectKey);
|
|
19
|
-
fs.mkdirSync(sessionsDir, { recursive: true });
|
|
20
|
-
fs.writeFileSync(path.join(sessionsDir, `${sessionId}.jsonl`), JSON.stringify({
|
|
21
|
-
type: 'user',
|
|
22
|
-
timestamp,
|
|
23
|
-
cwd,
|
|
24
|
-
sessionId,
|
|
25
|
-
version: '2.1.110',
|
|
26
|
-
gitBranch: 'main',
|
|
27
|
-
message: { role: 'user', content },
|
|
28
|
-
}) + '\n', 'utf-8');
|
|
29
|
-
}
|
|
30
|
-
function writeCodexSession(tempHome, sessionId, cwd, prompt, timestamp) {
|
|
31
|
-
fs.mkdirSync(cwd, { recursive: true });
|
|
32
|
-
const sessionsDir = path.join(tempHome, '.codex', 'sessions', '2026', '04', '17');
|
|
33
|
-
fs.mkdirSync(sessionsDir, { recursive: true });
|
|
34
|
-
const filePath = path.join(sessionsDir, `rollout-${timestamp.replace(/[:.]/g, '-')}-${sessionId}.jsonl`);
|
|
35
|
-
const lines = [
|
|
36
|
-
JSON.stringify({
|
|
37
|
-
timestamp,
|
|
38
|
-
type: 'session_meta',
|
|
39
|
-
payload: {
|
|
40
|
-
id: sessionId,
|
|
41
|
-
timestamp,
|
|
42
|
-
cwd,
|
|
43
|
-
originator: 'codex_cli_rs',
|
|
44
|
-
cli_version: '0.113.0',
|
|
45
|
-
source: 'cli',
|
|
46
|
-
},
|
|
47
|
-
}),
|
|
48
|
-
JSON.stringify({
|
|
49
|
-
timestamp,
|
|
50
|
-
type: 'response_item',
|
|
51
|
-
payload: {
|
|
52
|
-
type: 'message',
|
|
53
|
-
role: 'developer',
|
|
54
|
-
content: [{ type: 'input_text', text: '<permissions instructions>\nFilesystem sandboxing.\n</permissions instructions>' }],
|
|
55
|
-
},
|
|
56
|
-
}),
|
|
57
|
-
JSON.stringify({
|
|
58
|
-
timestamp,
|
|
59
|
-
type: 'response_item',
|
|
60
|
-
payload: {
|
|
61
|
-
type: 'message',
|
|
62
|
-
role: 'user',
|
|
63
|
-
content: [{ type: 'input_text', text: '<environment_context>\n <cwd>/tmp/project</cwd>\n <shell>zsh</shell>\n</environment_context>' }],
|
|
64
|
-
},
|
|
65
|
-
}),
|
|
66
|
-
JSON.stringify({
|
|
67
|
-
timestamp,
|
|
68
|
-
type: 'response_item',
|
|
69
|
-
payload: {
|
|
70
|
-
type: 'message',
|
|
71
|
-
role: 'user',
|
|
72
|
-
content: [{ type: 'input_text', text: '<collaboration_mode># Collaboration Mode: Default\n</collaboration_mode>' }],
|
|
73
|
-
},
|
|
74
|
-
}),
|
|
75
|
-
JSON.stringify({
|
|
76
|
-
timestamp,
|
|
77
|
-
type: 'response_item',
|
|
78
|
-
payload: {
|
|
79
|
-
type: 'message',
|
|
80
|
-
role: 'user',
|
|
81
|
-
content: [{ type: 'input_text', text: '# AGENTS.md instructions for /tmp/project\n\n<INSTRUCTIONS>\nDo work.\n</INSTRUCTIONS>' }],
|
|
82
|
-
},
|
|
83
|
-
}),
|
|
84
|
-
JSON.stringify({
|
|
85
|
-
timestamp,
|
|
86
|
-
type: 'response_item',
|
|
87
|
-
payload: {
|
|
88
|
-
type: 'message',
|
|
89
|
-
role: 'user',
|
|
90
|
-
content: [{ type: 'input_text', text: prompt }],
|
|
91
|
-
},
|
|
92
|
-
}),
|
|
93
|
-
JSON.stringify({
|
|
94
|
-
timestamp,
|
|
95
|
-
type: 'response_item',
|
|
96
|
-
payload: {
|
|
97
|
-
type: 'message',
|
|
98
|
-
role: 'assistant',
|
|
99
|
-
content: [{ type: 'output_text', text: 'Looking into it now.' }],
|
|
100
|
-
},
|
|
101
|
-
}),
|
|
102
|
-
];
|
|
103
|
-
fs.writeFileSync(filePath, lines.join('\n') + '\n', 'utf-8');
|
|
104
|
-
}
|
|
105
|
-
function writeGeminiSession(tempHome, sessionId, cwd, prompt, timestamp, version = '0.29.5') {
|
|
106
|
-
const versionHome = path.join(tempHome, '.agents', 'versions', 'gemini', version, 'home');
|
|
107
|
-
const geminiHome = path.join(versionHome, '.gemini');
|
|
108
|
-
const projectHash = crypto.createHash('sha256').update(cwd).digest('hex');
|
|
109
|
-
const chatsDir = path.join(geminiHome, 'tmp', projectHash, 'chats');
|
|
110
|
-
fs.mkdirSync(cwd, { recursive: true });
|
|
111
|
-
fs.mkdirSync(chatsDir, { recursive: true });
|
|
112
|
-
fs.mkdirSync(path.dirname(path.join(tempHome, '.gemini')), { recursive: true });
|
|
113
|
-
const activeGeminiHome = path.join(tempHome, '.gemini');
|
|
114
|
-
if (!fs.existsSync(activeGeminiHome)) {
|
|
115
|
-
fs.symlinkSync(geminiHome, activeGeminiHome);
|
|
116
|
-
}
|
|
117
|
-
fs.writeFileSync(path.join(geminiHome, 'projects.json'), JSON.stringify({ projects: [cwd] }), 'utf-8');
|
|
118
|
-
fs.writeFileSync(path.join(chatsDir, `session-${timestamp.replace(/[:.]/g, '-')}-${sessionId.slice(0, 8)}.json`), JSON.stringify({
|
|
119
|
-
sessionId,
|
|
120
|
-
projectHash,
|
|
121
|
-
startTime: timestamp,
|
|
122
|
-
lastUpdated: timestamp,
|
|
123
|
-
messages: [
|
|
124
|
-
{
|
|
125
|
-
id: `${sessionId}-user`,
|
|
126
|
-
timestamp,
|
|
127
|
-
type: 'user',
|
|
128
|
-
content: [{ text: prompt }],
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
id: `${sessionId}-assistant`,
|
|
132
|
-
timestamp,
|
|
133
|
-
type: 'gemini',
|
|
134
|
-
content: 'Investigating now.',
|
|
135
|
-
model: 'gemini-3-flash-preview',
|
|
136
|
-
tokens: { total: 1234 },
|
|
137
|
-
},
|
|
138
|
-
],
|
|
139
|
-
}, null, 2), 'utf-8');
|
|
140
|
-
}
|
|
141
|
-
function writeOpenClawSetup(tempHome, version = '2026.3.8') {
|
|
142
|
-
const managedHome = path.join(tempHome, '.agents', 'versions', 'openclaw', version, 'home', '.openclaw');
|
|
143
|
-
fs.mkdirSync(managedHome, { recursive: true });
|
|
144
|
-
const activeHome = path.join(tempHome, '.openclaw');
|
|
145
|
-
fs.mkdirSync(path.dirname(activeHome), { recursive: true });
|
|
146
|
-
if (!fs.existsSync(activeHome)) {
|
|
147
|
-
fs.symlinkSync(managedHome, activeHome);
|
|
148
|
-
}
|
|
149
|
-
const managedWorkspace = path.join(managedHome, 'sergey');
|
|
150
|
-
fs.mkdirSync(managedWorkspace, { recursive: true });
|
|
151
|
-
fs.writeFileSync(path.join(managedHome, 'openclaw.json'), JSON.stringify({
|
|
152
|
-
agents: {
|
|
153
|
-
list: [
|
|
154
|
-
{ id: 'sergey', workspace: path.join(activeHome, 'sergey') },
|
|
155
|
-
],
|
|
156
|
-
},
|
|
157
|
-
}, null, 2), 'utf-8');
|
|
158
|
-
const binDir = path.join(tempHome, 'bin');
|
|
159
|
-
fs.mkdirSync(binDir, { recursive: true });
|
|
160
|
-
const openclawBin = path.join(binDir, 'openclaw');
|
|
161
|
-
fs.writeFileSync(openclawBin, `#!/bin/sh
|
|
162
|
-
if [ "$1" = "--version" ]; then
|
|
163
|
-
echo "openclaw/${version}"
|
|
164
|
-
exit 0
|
|
165
|
-
fi
|
|
166
|
-
|
|
167
|
-
if [ "$1" = "channels" ] && [ "$2" = "status" ]; then
|
|
168
|
-
echo "- Telegram sergey (Sergey): enabled, configured, running, out:2h ago, mode:polling, token:config"
|
|
169
|
-
exit 0
|
|
170
|
-
fi
|
|
171
|
-
|
|
172
|
-
if [ "$1" = "cron" ] && [ "$2" = "list" ]; then
|
|
173
|
-
echo "ID NAME SCHEDULE NEXT LAST STATUS TARGET AGENT MODEL"
|
|
174
|
-
echo "12345678-1234-1234-1234-123456789abc sergey-hourly cron */30 * * * * in 7h 48m ago ok isolated sergey -"
|
|
175
|
-
exit 0
|
|
176
|
-
fi
|
|
177
|
-
|
|
178
|
-
exit 1
|
|
179
|
-
`, 'utf-8');
|
|
180
|
-
fs.chmodSync(openclawBin, 0o755);
|
|
181
|
-
return path.join(activeHome, 'sergey');
|
|
182
|
-
}
|
|
183
|
-
function runAgents(args, cwd, home) {
|
|
184
|
-
return spawnSync(tsxBin, [cliEntry, ...args], {
|
|
185
|
-
cwd,
|
|
186
|
-
env: {
|
|
187
|
-
...process.env,
|
|
188
|
-
HOME: home,
|
|
189
|
-
PATH: `${path.join(home, 'bin')}${path.delimiter}${process.env.PATH || ''}`,
|
|
190
|
-
},
|
|
191
|
-
encoding: 'utf-8',
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
function outputOf(result) {
|
|
195
|
-
return `${result.stdout}${result.stderr}`;
|
|
196
|
-
}
|
|
197
|
-
describe('agents sessions', () => {
|
|
198
|
-
it('lists only sessions from the current directory by default and shows all with --all', () => {
|
|
199
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-list-'));
|
|
200
|
-
try {
|
|
201
|
-
writeUpdateCache(tempHome);
|
|
202
|
-
const swarmifyDir = path.join(tempHome, 'work', 'swarmify');
|
|
203
|
-
const agentsCliDir = path.join(tempHome, 'work', 'agents-cli');
|
|
204
|
-
const swarmifySessionId = '11111111-1111-4111-8111-111111111111';
|
|
205
|
-
const agentsCliSessionId = '22222222-2222-4222-8222-222222222222';
|
|
206
|
-
writeClaudeSession(tempHome, 'swarmify-test', swarmifySessionId, swarmifyDir, 'Inspect the swarmify session list', '2026-04-17T19:35:30.000Z');
|
|
207
|
-
writeClaudeSession(tempHome, 'agents-cli-test', agentsCliSessionId, agentsCliDir, 'Inspect the agents-cli session list', '2026-04-17T19:36:30.000Z');
|
|
208
|
-
const localResult = runAgents(['sessions'], swarmifyDir, tempHome);
|
|
209
|
-
expect(localResult.status).toBe(0);
|
|
210
|
-
const localOutput = outputOf(localResult);
|
|
211
|
-
expect(localOutput).toContain(swarmifySessionId.slice(0, 8));
|
|
212
|
-
expect(localOutput).not.toContain(agentsCliSessionId.slice(0, 8));
|
|
213
|
-
const allResult = runAgents(['sessions', '--all'], swarmifyDir, tempHome);
|
|
214
|
-
expect(allResult.status).toBe(0);
|
|
215
|
-
const allOutput = outputOf(allResult);
|
|
216
|
-
expect(allOutput).toContain(swarmifySessionId.slice(0, 8));
|
|
217
|
-
expect(allOutput).toContain(agentsCliSessionId.slice(0, 8));
|
|
218
|
-
}
|
|
219
|
-
finally {
|
|
220
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
it('shows message and token counts while skipping Claude local-command preambles in the topic', () => {
|
|
224
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-stats-'));
|
|
225
|
-
try {
|
|
226
|
-
writeUpdateCache(tempHome);
|
|
227
|
-
const repoDir = path.join(tempHome, 'work', 'agents-cli');
|
|
228
|
-
const projectKey = 'agents-cli-test';
|
|
229
|
-
const sessionId = '77777777-7777-4777-8777-777777777777';
|
|
230
|
-
fs.mkdirSync(repoDir, { recursive: true });
|
|
231
|
-
fs.mkdirSync(path.join(tempHome, '.claude', 'projects', projectKey), { recursive: true });
|
|
232
|
-
fs.writeFileSync(path.join(tempHome, '.claude', 'projects', projectKey, `${sessionId}.jsonl`), [
|
|
233
|
-
JSON.stringify({
|
|
234
|
-
type: 'user',
|
|
235
|
-
timestamp: '2026-04-17T19:00:00.000Z',
|
|
236
|
-
cwd: repoDir,
|
|
237
|
-
sessionId,
|
|
238
|
-
version: '2.1.110',
|
|
239
|
-
gitBranch: 'main',
|
|
240
|
-
isMeta: true,
|
|
241
|
-
message: {
|
|
242
|
-
role: 'user',
|
|
243
|
-
content: '<local-command-caveat>Caveat: The messages below were generated by the user while running local commands.</local-command-caveat>',
|
|
244
|
-
},
|
|
245
|
-
}),
|
|
246
|
-
JSON.stringify({
|
|
247
|
-
type: 'user',
|
|
248
|
-
timestamp: '2026-04-17T19:00:01.000Z',
|
|
249
|
-
cwd: repoDir,
|
|
250
|
-
sessionId,
|
|
251
|
-
version: '2.1.110',
|
|
252
|
-
gitBranch: 'main',
|
|
253
|
-
message: { role: 'user', content: '<bash-input>pwd</bash-input>' },
|
|
254
|
-
}),
|
|
255
|
-
JSON.stringify({
|
|
256
|
-
type: 'user',
|
|
257
|
-
timestamp: '2026-04-17T19:00:02.000Z',
|
|
258
|
-
cwd: repoDir,
|
|
259
|
-
sessionId,
|
|
260
|
-
version: '2.1.110',
|
|
261
|
-
gitBranch: 'main',
|
|
262
|
-
message: { role: 'user', content: 'Inspect session stats' },
|
|
263
|
-
}),
|
|
264
|
-
JSON.stringify({
|
|
265
|
-
type: 'assistant',
|
|
266
|
-
timestamp: '2026-04-17T19:00:03.000Z',
|
|
267
|
-
cwd: repoDir,
|
|
268
|
-
sessionId,
|
|
269
|
-
version: '2.1.110',
|
|
270
|
-
gitBranch: 'main',
|
|
271
|
-
message: {
|
|
272
|
-
id: 'msg-stats',
|
|
273
|
-
role: 'assistant',
|
|
274
|
-
content: [{ type: 'text', text: 'Looking now.' }],
|
|
275
|
-
usage: {
|
|
276
|
-
input_tokens: 10,
|
|
277
|
-
output_tokens: 5,
|
|
278
|
-
cache_read_input_tokens: 20,
|
|
279
|
-
cache_creation_input_tokens: 0,
|
|
280
|
-
},
|
|
281
|
-
},
|
|
282
|
-
}),
|
|
283
|
-
JSON.stringify({
|
|
284
|
-
type: 'assistant',
|
|
285
|
-
timestamp: '2026-04-17T19:00:04.000Z',
|
|
286
|
-
cwd: repoDir,
|
|
287
|
-
sessionId,
|
|
288
|
-
version: '2.1.110',
|
|
289
|
-
gitBranch: 'main',
|
|
290
|
-
message: {
|
|
291
|
-
id: 'msg-stats',
|
|
292
|
-
role: 'assistant',
|
|
293
|
-
content: [{ type: 'tool_use', id: 'tool-1', name: 'Read', input: { file_path: '/tmp/example' } }],
|
|
294
|
-
usage: {
|
|
295
|
-
input_tokens: 10,
|
|
296
|
-
output_tokens: 5,
|
|
297
|
-
cache_read_input_tokens: 20,
|
|
298
|
-
cache_creation_input_tokens: 0,
|
|
299
|
-
},
|
|
300
|
-
},
|
|
301
|
-
}),
|
|
302
|
-
].join('\n') + '\n', 'utf-8');
|
|
303
|
-
const result = runAgents(['sessions'], repoDir, tempHome);
|
|
304
|
-
expect(result.status).toBe(0);
|
|
305
|
-
const output = outputOf(result);
|
|
306
|
-
// Core intent of this test: topic rendering skips the Claude
|
|
307
|
-
// local-command preamble ("Caveat: ...") and shows the real prompt.
|
|
308
|
-
// The Msgs/Tokens column assertion was dropped when the session table
|
|
309
|
-
// was simplified to ID / agent / project / topic / when.
|
|
310
|
-
const row = output.split('\n').find(line => line.includes(sessionId.slice(0, 8))) || '';
|
|
311
|
-
expect(row).toContain('Inspect session stats');
|
|
312
|
-
expect(row).not.toContain('Caveat:');
|
|
313
|
-
}
|
|
314
|
-
finally {
|
|
315
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
it('finds matching projects outside the current directory when --project is provided', () => {
|
|
319
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-project-'));
|
|
320
|
-
try {
|
|
321
|
-
writeUpdateCache(tempHome);
|
|
322
|
-
const workspaceDir = path.join(tempHome, 'work');
|
|
323
|
-
const swarmifyDir = path.join(workspaceDir, 'swarmify');
|
|
324
|
-
const agentsCliDir = path.join(workspaceDir, 'agents-cli');
|
|
325
|
-
const swarmifySessionId = '55555555-5555-4555-8555-555555555555';
|
|
326
|
-
const agentsCliSessionId = '66666666-6666-4666-8666-666666666666';
|
|
327
|
-
fs.mkdirSync(workspaceDir, { recursive: true });
|
|
328
|
-
writeClaudeSession(tempHome, 'swarmify-test', swarmifySessionId, swarmifyDir, 'Inspect the swarmify session list', '2026-04-17T19:35:30.000Z');
|
|
329
|
-
writeClaudeSession(tempHome, 'agents-cli-test', agentsCliSessionId, agentsCliDir, 'Inspect the agents-cli session list', '2026-04-17T19:36:30.000Z');
|
|
330
|
-
const result = runAgents(['sessions', '--project', 'agents-cli'], workspaceDir, tempHome);
|
|
331
|
-
expect(result.status).toBe(0);
|
|
332
|
-
const output = outputOf(result);
|
|
333
|
-
expect(output).toContain(agentsCliSessionId.slice(0, 8));
|
|
334
|
-
expect(output).not.toContain(swarmifySessionId.slice(0, 8));
|
|
335
|
-
expect(output).not.toContain(`No sessions found for ${workspaceDir}`);
|
|
336
|
-
}
|
|
337
|
-
finally {
|
|
338
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
339
|
-
}
|
|
340
|
-
});
|
|
341
|
-
it('shows the first human Codex prompt instead of injected session scaffolding', () => {
|
|
342
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-codex-topic-'));
|
|
343
|
-
try {
|
|
344
|
-
writeUpdateCache(tempHome);
|
|
345
|
-
const projectDir = path.join(tempHome, 'work', 'agents-cli');
|
|
346
|
-
const sessionId = '99999999-9999-4999-8999-999999999999';
|
|
347
|
-
const prompt = 'Search across sessions by prompt text';
|
|
348
|
-
writeCodexSession(tempHome, sessionId, projectDir, prompt, '2026-04-17T19:40:30.000Z');
|
|
349
|
-
const result = runAgents(['sessions', '--all'], projectDir, tempHome);
|
|
350
|
-
expect(result.status).toBe(0);
|
|
351
|
-
const output = outputOf(result);
|
|
352
|
-
expect(output).toContain(sessionId.slice(0, 8));
|
|
353
|
-
expect(output).toContain(prompt);
|
|
354
|
-
expect(output).not.toContain('Collaboration Mode: Default');
|
|
355
|
-
expect(output).not.toContain('# AGENTS.md instructions');
|
|
356
|
-
}
|
|
357
|
-
finally {
|
|
358
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
it('lists Codex sessions when filtered by --agent', () => {
|
|
362
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-codex-version-'));
|
|
363
|
-
try {
|
|
364
|
-
writeUpdateCache(tempHome);
|
|
365
|
-
const projectDir = path.join(tempHome, 'work', 'agents-cli');
|
|
366
|
-
writeCodexSession(tempHome, 'abababab-abab-4bab-8bab-abababababab', projectDir, 'Show codex versions in the session list', '2026-04-17T19:42:30.000Z');
|
|
367
|
-
const result = runAgents(['sessions', '--agent', 'codex', '--all'], projectDir, tempHome);
|
|
368
|
-
expect(result.status).toBe(0);
|
|
369
|
-
const output = outputOf(result);
|
|
370
|
-
// Table simplification dropped the "codex@<version>" suffix from the
|
|
371
|
-
// agent column; still verify the codex session is discovered & listed.
|
|
372
|
-
expect(output).toContain('codex');
|
|
373
|
-
expect(output).toContain('Show codex versions in the session list');
|
|
374
|
-
expect(output).toContain('abababab');
|
|
375
|
-
}
|
|
376
|
-
finally {
|
|
377
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
it('lists Gemini sessions from a managed version home', () => {
|
|
381
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-gemini-version-'));
|
|
382
|
-
try {
|
|
383
|
-
writeUpdateCache(tempHome);
|
|
384
|
-
const projectDir = path.join(tempHome, 'work', 'agents-cli');
|
|
385
|
-
writeGeminiSession(tempHome, 'f0f0f0f0-f0f0-4f0f-8f0f-f0f0f0f0f0f0', projectDir, 'Show gemini versions in the session list', '2026-04-17T19:43:30.000Z');
|
|
386
|
-
const result = runAgents(['sessions', '--agent', 'gemini', '--all'], projectDir, tempHome);
|
|
387
|
-
expect(result.status).toBe(0);
|
|
388
|
-
const output = outputOf(result);
|
|
389
|
-
// Version suffix in the agent column was removed by the table
|
|
390
|
-
// simplification. Still verify the session is discovered & listed.
|
|
391
|
-
expect(output).toContain('gemini');
|
|
392
|
-
expect(output).toContain('Show gemini versions in the session list');
|
|
393
|
-
expect(output).toContain('f0f0f0f0');
|
|
394
|
-
}
|
|
395
|
-
finally {
|
|
396
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
397
|
-
}
|
|
398
|
-
});
|
|
399
|
-
it('shows OpenClaw synthetic sessions from the configured workspace without --all', () => {
|
|
400
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-openclaw-cwd-'));
|
|
401
|
-
try {
|
|
402
|
-
writeUpdateCache(tempHome);
|
|
403
|
-
const openClawWorkspace = writeOpenClawSetup(tempHome);
|
|
404
|
-
const result = runAgents(['sessions', '--agent', 'openclaw'], openClawWorkspace, tempHome);
|
|
405
|
-
expect(result.status).toBe(0);
|
|
406
|
-
const output = outputOf(result);
|
|
407
|
-
// The "openclaw@<version>" suffix was dropped with the table
|
|
408
|
-
// simplification; the workspace discovery (Sergey / session id) is the
|
|
409
|
-
// actual behavior this test guards.
|
|
410
|
-
expect(output).toContain('Sergey');
|
|
411
|
-
expect(output).toContain('12345678');
|
|
412
|
-
expect(output).not.toContain('No sessions found');
|
|
413
|
-
}
|
|
414
|
-
finally {
|
|
415
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
});
|
|
419
|
-
describe('agents sessions (render-mode)', () => {
|
|
420
|
-
it('resolves explicit IDs across directories even when the default listing is scoped to cwd', () => {
|
|
421
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-render-global-'));
|
|
422
|
-
try {
|
|
423
|
-
writeUpdateCache(tempHome);
|
|
424
|
-
const swarmifyDir = path.join(tempHome, 'work', 'swarmify');
|
|
425
|
-
const agentsCliDir = path.join(tempHome, 'work', 'agents-cli');
|
|
426
|
-
const siblingSessionId = '33333333-3333-4333-8333-333333333333';
|
|
427
|
-
writeClaudeSession(tempHome, 'swarmify-test', '44444444-4444-4444-8444-444444444444', swarmifyDir, 'Inspect the swarmify session list', '2026-04-17T19:35:30.000Z');
|
|
428
|
-
writeClaudeSession(tempHome, 'agents-cli-test', siblingSessionId, agentsCliDir, 'Review sibling repo state', '2026-04-17T19:36:30.000Z');
|
|
429
|
-
const result = runAgents(['sessions', siblingSessionId, '--markdown'], swarmifyDir, tempHome);
|
|
430
|
-
expect(result.status).toBe(0);
|
|
431
|
-
const output = outputOf(result);
|
|
432
|
-
expect(output).toContain('Review sibling repo state');
|
|
433
|
-
expect(output).not.toContain(`No session found matching: ${siblingSessionId}`);
|
|
434
|
-
}
|
|
435
|
-
finally {
|
|
436
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
437
|
-
}
|
|
438
|
-
});
|
|
439
|
-
it('resolves Claude /resume history IDs to the resumed transcript', () => {
|
|
440
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-render-history-'));
|
|
441
|
-
try {
|
|
442
|
-
writeUpdateCache(tempHome);
|
|
443
|
-
const projectRoot = path.join(tempHome, 'work', 'swarmify');
|
|
444
|
-
const transcriptCwd = path.join(projectRoot, 'extension');
|
|
445
|
-
const transcriptId = '92267176-d991-45c2-a8e5-e851e30a203b';
|
|
446
|
-
const historyOnlyId = 'f6a6cd2d-2138-41c4-b653-d2881ce9cdd3';
|
|
447
|
-
fs.mkdirSync(path.join(tempHome, '.claude', 'projects', 'swarmify-test'), { recursive: true });
|
|
448
|
-
fs.writeFileSync(path.join(tempHome, '.claude', 'history.jsonl'), JSON.stringify({
|
|
449
|
-
display: '/resume',
|
|
450
|
-
timestamp: Date.parse('2026-04-17T19:30:00.000Z'),
|
|
451
|
-
project: projectRoot,
|
|
452
|
-
sessionId: historyOnlyId,
|
|
453
|
-
}) + '\n', 'utf-8');
|
|
454
|
-
fs.mkdirSync(transcriptCwd, { recursive: true });
|
|
455
|
-
fs.writeFileSync(path.join(tempHome, '.claude', 'projects', 'swarmify-test', `${transcriptId}.jsonl`), [
|
|
456
|
-
JSON.stringify({
|
|
457
|
-
type: 'user',
|
|
458
|
-
timestamp: '2026-04-17T19:00:00.000Z',
|
|
459
|
-
cwd: transcriptCwd,
|
|
460
|
-
sessionId: transcriptId,
|
|
461
|
-
version: '2.1.110',
|
|
462
|
-
gitBranch: 'main',
|
|
463
|
-
message: { role: 'user', content: 'Earlier context' },
|
|
464
|
-
}),
|
|
465
|
-
JSON.stringify({
|
|
466
|
-
type: 'assistant',
|
|
467
|
-
timestamp: '2026-04-17T19:00:05.000Z',
|
|
468
|
-
cwd: transcriptCwd,
|
|
469
|
-
sessionId: transcriptId,
|
|
470
|
-
version: '2.1.110',
|
|
471
|
-
gitBranch: 'main',
|
|
472
|
-
message: {
|
|
473
|
-
role: 'assistant',
|
|
474
|
-
content: [{ type: 'text', text: 'Earlier reply' }],
|
|
475
|
-
},
|
|
476
|
-
}),
|
|
477
|
-
JSON.stringify({
|
|
478
|
-
type: 'attachment',
|
|
479
|
-
timestamp: '2026-04-17T19:30:30.000Z',
|
|
480
|
-
cwd: transcriptCwd,
|
|
481
|
-
sessionId: transcriptId,
|
|
482
|
-
version: '2.1.110',
|
|
483
|
-
gitBranch: 'main',
|
|
484
|
-
attachment: {
|
|
485
|
-
type: 'hook_success',
|
|
486
|
-
hookName: 'SessionStart:resume',
|
|
487
|
-
hookEvent: 'SessionStart',
|
|
488
|
-
},
|
|
489
|
-
}),
|
|
490
|
-
JSON.stringify({
|
|
491
|
-
type: 'user',
|
|
492
|
-
timestamp: '2026-04-17T19:30:45.000Z',
|
|
493
|
-
cwd: transcriptCwd,
|
|
494
|
-
sessionId: transcriptId,
|
|
495
|
-
version: '2.1.110',
|
|
496
|
-
gitBranch: 'main',
|
|
497
|
-
message: { role: 'user', content: 'Continue from where we left off' },
|
|
498
|
-
}),
|
|
499
|
-
JSON.stringify({
|
|
500
|
-
type: 'assistant',
|
|
501
|
-
timestamp: '2026-04-17T19:31:00.000Z',
|
|
502
|
-
cwd: transcriptCwd,
|
|
503
|
-
sessionId: transcriptId,
|
|
504
|
-
version: '2.1.110',
|
|
505
|
-
gitBranch: 'main',
|
|
506
|
-
message: {
|
|
507
|
-
role: 'assistant',
|
|
508
|
-
content: [{ type: 'text', text: 'Loaded resumed transcript' }],
|
|
509
|
-
},
|
|
510
|
-
}),
|
|
511
|
-
].join('\n') + '\n', 'utf-8');
|
|
512
|
-
const result = runAgents(['sessions', historyOnlyId, '--markdown'], repoRoot, tempHome);
|
|
513
|
-
expect(result.status).toBe(0);
|
|
514
|
-
const output = outputOf(result);
|
|
515
|
-
// The informational "Resolved Claude history entry ... to transcript ..."
|
|
516
|
-
// status line was removed; the behavior (history ID → transcript
|
|
517
|
-
// content) still works, so we assert on the loaded transcript instead.
|
|
518
|
-
expect(output).toContain('Loaded resumed transcript');
|
|
519
|
-
expect(output).not.toContain(`No transcript session found matching: ${historyOnlyId}`);
|
|
520
|
-
}
|
|
521
|
-
finally {
|
|
522
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
523
|
-
}
|
|
524
|
-
});
|
|
525
|
-
it('resolves text queries against session topics, not only IDs', () => {
|
|
526
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-render-query-'));
|
|
527
|
-
try {
|
|
528
|
-
writeUpdateCache(tempHome);
|
|
529
|
-
const projectDir = path.join(tempHome, 'work', 'agents-cli');
|
|
530
|
-
const sessionId = 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa';
|
|
531
|
-
const prompt = 'Search across sessions by prompt text';
|
|
532
|
-
writeCodexSession(tempHome, sessionId, projectDir, prompt, '2026-04-17T19:41:30.000Z');
|
|
533
|
-
const result = runAgents(['sessions', 'prompt text', '--markdown'], projectDir, tempHome);
|
|
534
|
-
expect(result.status).toBe(0);
|
|
535
|
-
const output = outputOf(result);
|
|
536
|
-
expect(output).toContain(prompt);
|
|
537
|
-
expect(output).not.toContain('No session found matching: prompt text');
|
|
538
|
-
}
|
|
539
|
-
finally {
|
|
540
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
541
|
-
}
|
|
542
|
-
});
|
|
543
|
-
it('applies --project filters before resolving search queries', () => {
|
|
544
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-render-project-filter-'));
|
|
545
|
-
try {
|
|
546
|
-
writeUpdateCache(tempHome);
|
|
547
|
-
const workspaceDir = path.join(tempHome, 'work');
|
|
548
|
-
const agentsDir = path.join(workspaceDir, 'agents');
|
|
549
|
-
const agentsCliDir = path.join(workspaceDir, 'agents-cli');
|
|
550
|
-
writeCodexSession(tempHome, 'bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb', agentsDir, 'Filter scoped search target', '2026-04-17T19:42:30.000Z');
|
|
551
|
-
writeCodexSession(tempHome, 'cccccccc-cccc-4ccc-8ccc-cccccccccccc', agentsCliDir, 'Filter scoped search decoy', '2026-04-17T19:43:30.000Z');
|
|
552
|
-
const result = runAgents(['sessions', '--project', 'agents-cli', 'scoped search', '--markdown'], workspaceDir, tempHome);
|
|
553
|
-
expect(result.status).toBe(0);
|
|
554
|
-
const output = outputOf(result);
|
|
555
|
-
expect(output).toContain('Filter scoped search decoy');
|
|
556
|
-
expect(output).not.toContain('Filter scoped search target');
|
|
557
|
-
}
|
|
558
|
-
finally {
|
|
559
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
560
|
-
}
|
|
561
|
-
});
|
|
562
|
-
it('applies --agent filters before resolving search queries', () => {
|
|
563
|
-
const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'agents-sessions-render-agent-filter-'));
|
|
564
|
-
try {
|
|
565
|
-
writeUpdateCache(tempHome);
|
|
566
|
-
const projectDir = path.join(tempHome, 'work', 'agents-cli');
|
|
567
|
-
writeClaudeSession(tempHome, 'agents-cli-claude', 'dddddddd-dddd-4ddd-8ddd-dddddddddddd', projectDir, 'Shared filter phrase from claude', '2026-04-17T19:44:30.000Z');
|
|
568
|
-
writeCodexSession(tempHome, 'eeeeeeee-eeee-4eee-8eee-eeeeeeeeeeee', projectDir, 'Shared filter phrase from codex', '2026-04-17T19:45:30.000Z');
|
|
569
|
-
const result = runAgents(['sessions', '--agent', 'codex', 'shared filter phrase', '--markdown'], projectDir, tempHome);
|
|
570
|
-
expect(result.status).toBe(0);
|
|
571
|
-
const output = outputOf(result);
|
|
572
|
-
expect(output).toContain('Shared filter phrase from codex');
|
|
573
|
-
expect(output).not.toContain('Shared filter phrase from claude');
|
|
574
|
-
}
|
|
575
|
-
finally {
|
|
576
|
-
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
577
|
-
}
|
|
578
|
-
});
|
|
579
|
-
});
|
|
580
|
-
describe('buildResumeCommand cross-version handoff', () => {
|
|
581
|
-
const baseSession = (overrides = {}) => ({
|
|
582
|
-
id: 'abc12345-def6-7890-1234-567890abcdef',
|
|
583
|
-
shortId: 'abc12345',
|
|
584
|
-
agent: 'claude',
|
|
585
|
-
timestamp: '2026-04-19T12:00:00.000Z',
|
|
586
|
-
filePath: '/fake/path.jsonl',
|
|
587
|
-
...overrides,
|
|
588
|
-
});
|
|
589
|
-
it('uses native --resume when session version matches active version', () => {
|
|
590
|
-
const session = baseSession({ version: '2.1.113' });
|
|
591
|
-
expect(buildResumeCommand(session, '2.1.113')).toEqual([
|
|
592
|
-
'claude', '--resume', session.id,
|
|
593
|
-
]);
|
|
594
|
-
});
|
|
595
|
-
it('uses /continue <id> when Claude session version differs from active version', () => {
|
|
596
|
-
const session = baseSession({ version: '2.0.65' });
|
|
597
|
-
expect(buildResumeCommand(session, '2.1.113')).toEqual([
|
|
598
|
-
'claude', `/continue ${session.id}`,
|
|
599
|
-
]);
|
|
600
|
-
});
|
|
601
|
-
it('uses /continue <id> when Codex session version differs from active version', () => {
|
|
602
|
-
const session = baseSession({ agent: 'codex', version: '0.115.0' });
|
|
603
|
-
expect(buildResumeCommand(session, '0.116.0')).toEqual([
|
|
604
|
-
'codex', `/continue ${session.id}`,
|
|
605
|
-
]);
|
|
606
|
-
});
|
|
607
|
-
it('uses native codex resume when versions match', () => {
|
|
608
|
-
const session = baseSession({ agent: 'codex', version: '0.116.0' });
|
|
609
|
-
expect(buildResumeCommand(session, '0.116.0')).toEqual([
|
|
610
|
-
'codex', 'resume', session.id,
|
|
611
|
-
]);
|
|
612
|
-
});
|
|
613
|
-
it('falls back to native resume when session has no recorded version', () => {
|
|
614
|
-
const session = baseSession({ version: undefined });
|
|
615
|
-
expect(buildResumeCommand(session, '2.1.113')).toEqual([
|
|
616
|
-
'claude', '--resume', session.id,
|
|
617
|
-
]);
|
|
618
|
-
});
|
|
619
|
-
it('falls back to native resume when active version is unknown', () => {
|
|
620
|
-
const session = baseSession({ version: '2.0.65' });
|
|
621
|
-
expect(buildResumeCommand(session, undefined)).toEqual([
|
|
622
|
-
'claude', '--resume', session.id,
|
|
623
|
-
]);
|
|
624
|
-
});
|
|
625
|
-
it('returns null for agents without resume support regardless of version', () => {
|
|
626
|
-
expect(buildResumeCommand(baseSession({ agent: 'gemini', version: '1.0.0' }), '2.0.0')).toBeNull();
|
|
627
|
-
expect(buildResumeCommand(baseSession({ agent: 'openclaw', version: '1.0.0' }), '2.0.0')).toBeNull();
|
|
628
|
-
});
|
|
629
|
-
it('opencode ignores version mismatch (shared SQLite DB, not isolated homes)', () => {
|
|
630
|
-
const session = baseSession({ agent: 'opencode', version: '0.5.0' });
|
|
631
|
-
expect(buildResumeCommand(session, '0.6.0')).toEqual([
|
|
632
|
-
'opencode', '--session', session.id,
|
|
633
|
-
]);
|
|
634
|
-
});
|
|
635
|
-
});
|
|
636
|
-
//# sourceMappingURL=sessions.test.js.map
|