@phnx-labs/agents-cli 1.12.0 → 1.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -1
- package/README.md +293 -300
- 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 +511 -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 +79 -0
- package/dist/lib/rotate.js +285 -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,56 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team registry.
|
|
3
|
+
*
|
|
4
|
+
* Manages the persistent registry of named teams stored in registry.json
|
|
5
|
+
* under the teams data directory. Provides CRUD operations for team metadata
|
|
6
|
+
* (creation timestamp and optional description).
|
|
7
|
+
*/
|
|
1
8
|
import * as fs from 'fs/promises';
|
|
9
|
+
import * as fsSync from 'fs';
|
|
2
10
|
import * as path from 'path';
|
|
3
|
-
import {
|
|
11
|
+
import { randomBytes } from 'crypto';
|
|
12
|
+
import lockfile from 'proper-lockfile';
|
|
13
|
+
import { getUserAgentsDir } from '../state.js';
|
|
4
14
|
async function registryPath() {
|
|
5
|
-
|
|
6
|
-
return path.join(base, 'registry.json');
|
|
15
|
+
return path.join(getUserAgentsDir(), 'teams', 'registry.json');
|
|
7
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Atomic JSON write: writes to a unique sibling tmp file then renames over
|
|
19
|
+
* the target. rename(2) is atomic on POSIX, so a crashed write leaves the
|
|
20
|
+
* old file untouched instead of producing a half-written registry that
|
|
21
|
+
* loadTeams() would reject.
|
|
22
|
+
*/
|
|
23
|
+
async function atomicWriteJson(p, data) {
|
|
24
|
+
await fs.mkdir(path.dirname(p), { recursive: true });
|
|
25
|
+
const tmp = `${p}.tmp.${process.pid}.${randomBytes(4).toString('hex')}`;
|
|
26
|
+
const body = JSON.stringify(data, null, 2);
|
|
27
|
+
await fs.writeFile(tmp, body);
|
|
28
|
+
try {
|
|
29
|
+
await fs.rename(tmp, p);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
await fs.unlink(tmp).catch(() => { });
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Run `fn` while holding an exclusive cross-process lock on the registry
|
|
38
|
+
* file. proper-lockfile requires the target to exist, so we touch it first.
|
|
39
|
+
* Stale locks (from crashed callers) auto-expire after `stale` ms.
|
|
40
|
+
*/
|
|
41
|
+
async function withRegistryLock(p, fn) {
|
|
42
|
+
await fs.mkdir(path.dirname(p), { recursive: true });
|
|
43
|
+
if (!fsSync.existsSync(p)) {
|
|
44
|
+
// Use 'wx' so a concurrent caller doesn't clobber data written between
|
|
45
|
+
// our existsSync check and writeFile.
|
|
46
|
+
try {
|
|
47
|
+
await fs.writeFile(p, '{}', { flag: 'wx' });
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (err && err.code !== 'EEXIST')
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const release = await lockfile.lock(p, {
|
|
55
|
+
retries: { retries: 60, minTimeout: 25, maxTimeout: 250, factor: 1.5 },
|
|
56
|
+
stale: 10_000,
|
|
57
|
+
});
|
|
58
|
+
try {
|
|
59
|
+
return await fn();
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
await release();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Load all teams from the registry file. Returns an empty object only when
|
|
67
|
+
* the file does not exist. A malformed file is a hard error — silently
|
|
68
|
+
* returning {} would let any caller wipe the user's registry on the next
|
|
69
|
+
* write, which is exactly the data-loss path we are trying to close.
|
|
70
|
+
*/
|
|
8
71
|
export async function loadTeams() {
|
|
72
|
+
const p = await registryPath();
|
|
73
|
+
let raw;
|
|
74
|
+
try {
|
|
75
|
+
raw = await fs.readFile(p, 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
if (err && err.code === 'ENOENT')
|
|
79
|
+
return {};
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
9
82
|
try {
|
|
10
|
-
const raw = await fs.readFile(await registryPath(), 'utf-8');
|
|
11
83
|
return JSON.parse(raw);
|
|
12
84
|
}
|
|
13
|
-
catch {
|
|
14
|
-
|
|
85
|
+
catch (err) {
|
|
86
|
+
throw new Error(`Team registry corrupted at ${p}: ${err?.message ?? err}. Inspect and restore from backup.`);
|
|
15
87
|
}
|
|
16
88
|
}
|
|
17
89
|
async function saveTeams(reg) {
|
|
18
90
|
const p = await registryPath();
|
|
19
|
-
await
|
|
20
|
-
await fs.writeFile(p, JSON.stringify(reg, null, 2));
|
|
91
|
+
await atomicWriteJson(p, reg);
|
|
21
92
|
}
|
|
93
|
+
/** Create a new team. Throws if a team with the same name already exists. */
|
|
22
94
|
export async function createTeam(name, description) {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
95
|
+
const p = await registryPath();
|
|
96
|
+
return withRegistryLock(p, async () => {
|
|
97
|
+
const reg = await loadTeams();
|
|
98
|
+
if (reg[name]) {
|
|
99
|
+
throw new Error(`Team '${name}' already exists`);
|
|
100
|
+
}
|
|
101
|
+
const meta = {
|
|
102
|
+
created_at: new Date().toISOString(),
|
|
103
|
+
...(description ? { description } : {}),
|
|
104
|
+
};
|
|
105
|
+
reg[name] = meta;
|
|
106
|
+
await saveTeams(reg);
|
|
107
|
+
return meta;
|
|
108
|
+
});
|
|
34
109
|
}
|
|
110
|
+
/** Return existing team metadata or create a new team if it does not exist. */
|
|
35
111
|
export async function ensureTeam(name) {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
112
|
+
const p = await registryPath();
|
|
113
|
+
return withRegistryLock(p, async () => {
|
|
114
|
+
const reg = await loadTeams();
|
|
115
|
+
if (reg[name])
|
|
116
|
+
return reg[name];
|
|
117
|
+
const meta = { created_at: new Date().toISOString() };
|
|
118
|
+
reg[name] = meta;
|
|
119
|
+
await saveTeams(reg);
|
|
120
|
+
return meta;
|
|
121
|
+
});
|
|
43
122
|
}
|
|
123
|
+
/** Remove a team from the registry. Returns false if the team did not exist. */
|
|
44
124
|
export async function removeTeam(name) {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
125
|
+
const p = await registryPath();
|
|
126
|
+
return withRegistryLock(p, async () => {
|
|
127
|
+
const reg = await loadTeams();
|
|
128
|
+
if (!reg[name])
|
|
129
|
+
return false;
|
|
130
|
+
delete reg[name];
|
|
131
|
+
await saveTeams(reg);
|
|
132
|
+
return true;
|
|
133
|
+
});
|
|
51
134
|
}
|
|
135
|
+
/** Check whether a team with the given name exists in the registry. */
|
|
52
136
|
export async function teamExists(name) {
|
|
53
137
|
const reg = await loadTeams();
|
|
54
138
|
return Boolean(reg[name]);
|
|
55
139
|
}
|
|
56
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** Event type priority tiers for filtering. Higher tiers surface more important events. */
|
|
1
2
|
export declare const PRIORITY: Record<string, string[]>;
|
|
2
3
|
/**
|
|
3
4
|
* Collapse sequential events of the same type into summary entries.
|
|
@@ -8,7 +9,9 @@ export declare function collapseEvents(events: any[], maxEvents?: number): any[]
|
|
|
8
9
|
* Get a breakdown of tool calls by type.
|
|
9
10
|
*/
|
|
10
11
|
export declare function getToolBreakdown(events: any[]): Record<string, number>;
|
|
12
|
+
/** Group consecutive events of the same type into combined entries with counts and truncated content. */
|
|
11
13
|
export declare function groupAndFlattenEvents(events: any[]): any[];
|
|
14
|
+
/** Accumulated summary of an agent's activity: files touched, tools used, errors, and final message. */
|
|
12
15
|
export declare class AgentSummary {
|
|
13
16
|
agentId: string;
|
|
14
17
|
agentType: string;
|
|
@@ -31,10 +34,18 @@ export declare class AgentSummary {
|
|
|
31
34
|
toDict(detailLevel?: 'brief' | 'standard' | 'detailed'): any;
|
|
32
35
|
private truncate;
|
|
33
36
|
}
|
|
37
|
+
/** Build an AgentSummary by walking all events and accumulating file ops, tool calls, errors, and messages. */
|
|
34
38
|
export declare function summarizeEvents(agentId: string, agentType: string, status: string, events: any[], duration?: string | null): AgentSummary;
|
|
39
|
+
/**
|
|
40
|
+
* Compute the delta of new activity since a given point in time (ISO timestamp)
|
|
41
|
+
* or event index. Used for incremental status polling.
|
|
42
|
+
*/
|
|
35
43
|
export declare function getDelta(agentId: string, agentType: string, status: string, events: any[], since?: string | number): any;
|
|
44
|
+
/** Filter events to only those in the specified priority tiers (defaults to critical + important). */
|
|
36
45
|
export declare function filterEventsByPriority(events: any[], includeLevels?: string[] | null): any[];
|
|
46
|
+
/** Return the event type of the last tool-related or significant event, or null. */
|
|
37
47
|
export declare function getLastTool(events: any[]): string | null;
|
|
48
|
+
/** Lightweight status snapshot with counts, recent commands, and error flag. */
|
|
38
49
|
export interface QuickStatus {
|
|
39
50
|
agent_id: string;
|
|
40
51
|
agent_type: string;
|
|
@@ -48,11 +59,14 @@ export interface QuickStatus {
|
|
|
48
59
|
has_errors: boolean;
|
|
49
60
|
last_message: string | null;
|
|
50
61
|
}
|
|
62
|
+
/** Extract all tool_use events as {tool, args} pairs. */
|
|
51
63
|
export declare function getToolUses(events: any[]): Array<{
|
|
52
64
|
tool: string;
|
|
53
65
|
args: any;
|
|
54
66
|
}>;
|
|
67
|
+
/** Extract the last N complete messages from the event stream, joining streaming deltas. */
|
|
55
68
|
export declare function getLastMessages(events: any[], count?: number): string[];
|
|
69
|
+
/** Build a lightweight QuickStatus snapshot from agent events. */
|
|
56
70
|
export declare function getQuickStatus(agentId: string, agentType: string, status: string, events: any[]): QuickStatus;
|
|
71
|
+
/** Produce a one-line human-readable status summary string (e.g. "Running, modified 3 files, used bash 5 times"). */
|
|
57
72
|
export declare function getStatusSummary(agentId: string, agentType: string, status: string, events: any[], duration?: string | null): string;
|
|
58
|
-
//# sourceMappingURL=summarizer.d.ts.map
|
|
@@ -19,6 +19,7 @@ function extractErrorFromRawEvents(events, maxChars = 500) {
|
|
|
19
19
|
}
|
|
20
20
|
return null;
|
|
21
21
|
}
|
|
22
|
+
/** Event type priority tiers for filtering. Higher tiers surface more important events. */
|
|
22
23
|
export const PRIORITY = {
|
|
23
24
|
critical: [
|
|
24
25
|
'error',
|
|
@@ -146,6 +147,7 @@ export function getToolBreakdown(events) {
|
|
|
146
147
|
}
|
|
147
148
|
return breakdown;
|
|
148
149
|
}
|
|
150
|
+
/** Group consecutive events of the same type into combined entries with counts and truncated content. */
|
|
149
151
|
export function groupAndFlattenEvents(events) {
|
|
150
152
|
if (events.length === 0)
|
|
151
153
|
return [];
|
|
@@ -254,6 +256,7 @@ export function groupAndFlattenEvents(events) {
|
|
|
254
256
|
}
|
|
255
257
|
return grouped;
|
|
256
258
|
}
|
|
259
|
+
/** Accumulated summary of an agent's activity: files touched, tools used, errors, and final message. */
|
|
257
260
|
export class AgentSummary {
|
|
258
261
|
agentId;
|
|
259
262
|
agentType;
|
|
@@ -335,6 +338,7 @@ export class AgentSummary {
|
|
|
335
338
|
return text.substring(0, maxLen - 3) + '...';
|
|
336
339
|
}
|
|
337
340
|
}
|
|
341
|
+
/** Build an AgentSummary by walking all events and accumulating file ops, tool calls, errors, and messages. */
|
|
338
342
|
export function summarizeEvents(agentId, agentType, status, events, duration = null) {
|
|
339
343
|
const summary = new AgentSummary(agentId, agentType, status, duration, events.length);
|
|
340
344
|
summary.eventsCache = events;
|
|
@@ -467,6 +471,10 @@ export function summarizeEvents(agentId, agentType, status, events, duration = n
|
|
|
467
471
|
}
|
|
468
472
|
return summary;
|
|
469
473
|
}
|
|
474
|
+
/**
|
|
475
|
+
* Compute the delta of new activity since a given point in time (ISO timestamp)
|
|
476
|
+
* or event index. Used for incremental status polling.
|
|
477
|
+
*/
|
|
470
478
|
export function getDelta(agentId, agentType, status, events, since // Optional: ISO timestamp (string) or event index (number)
|
|
471
479
|
) {
|
|
472
480
|
// Filter events by timestamp (string) or index (number)
|
|
@@ -535,6 +543,7 @@ export function getDelta(agentId, agentType, status, events, since // Optional:
|
|
|
535
543
|
new_errors: summary.errors,
|
|
536
544
|
};
|
|
537
545
|
}
|
|
546
|
+
/** Filter events to only those in the specified priority tiers (defaults to critical + important). */
|
|
538
547
|
export function filterEventsByPriority(events, includeLevels = null) {
|
|
539
548
|
if (!includeLevels) {
|
|
540
549
|
includeLevels = ['critical', 'important'];
|
|
@@ -548,6 +557,7 @@ export function filterEventsByPriority(events, includeLevels = null) {
|
|
|
548
557
|
}
|
|
549
558
|
return events.filter(e => allowedTypes.has(e.type));
|
|
550
559
|
}
|
|
560
|
+
/** Return the event type of the last tool-related or significant event, or null. */
|
|
551
561
|
export function getLastTool(events) {
|
|
552
562
|
if (events.length === 0)
|
|
553
563
|
return null;
|
|
@@ -559,6 +569,7 @@ export function getLastTool(events) {
|
|
|
559
569
|
}
|
|
560
570
|
return null;
|
|
561
571
|
}
|
|
572
|
+
/** Extract all tool_use events as {tool, args} pairs. */
|
|
562
573
|
export function getToolUses(events) {
|
|
563
574
|
const toolUses = [];
|
|
564
575
|
for (const event of events) {
|
|
@@ -570,6 +581,7 @@ export function getToolUses(events) {
|
|
|
570
581
|
}
|
|
571
582
|
return toolUses;
|
|
572
583
|
}
|
|
584
|
+
/** Extract the last N complete messages from the event stream, joining streaming deltas. */
|
|
573
585
|
export function getLastMessages(events, count = 3) {
|
|
574
586
|
const messages = [];
|
|
575
587
|
let currentBuffer = '';
|
|
@@ -607,6 +619,7 @@ export function getLastMessages(events, count = 3) {
|
|
|
607
619
|
}
|
|
608
620
|
return messages.slice(-count);
|
|
609
621
|
}
|
|
622
|
+
/** Build a lightweight QuickStatus snapshot from agent events. */
|
|
610
623
|
export function getQuickStatus(agentId, agentType, status, events) {
|
|
611
624
|
const filesCreatedSet = new Set();
|
|
612
625
|
const filesModifiedSet = new Set();
|
|
@@ -693,6 +706,7 @@ export function getQuickStatus(agentId, agentType, status, events) {
|
|
|
693
706
|
last_message: lastMessage,
|
|
694
707
|
};
|
|
695
708
|
}
|
|
709
|
+
/** Produce a one-line human-readable status summary string (e.g. "Running, modified 3 files, used bash 5 times"). */
|
|
696
710
|
export function getStatusSummary(agentId, agentType, status, events, duration = null) {
|
|
697
711
|
if (events.length === 0) {
|
|
698
712
|
if (status === 'running') {
|
|
@@ -763,4 +777,3 @@ export function getStatusSummary(agentId, agentType, status, events, duration =
|
|
|
763
777
|
}
|
|
764
778
|
return parts.join(', ');
|
|
765
779
|
}
|
|
766
|
-
//# sourceMappingURL=summarizer.js.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DAG supervisor — the continuous dispatch loop that makes the Factory
|
|
3
|
+
* dynamic.
|
|
4
|
+
*
|
|
5
|
+
* `teams start --watch` and `factory run` both use this. Each wave:
|
|
6
|
+
* 1. call startReady(team) to fire any now-ready teammates
|
|
7
|
+
* 2. listByTask(team) to count pending / running / done / failed
|
|
8
|
+
* 3. emit one status event (via the caller's callback)
|
|
9
|
+
* 4. exit when pending + running == 0 (DAG drained)
|
|
10
|
+
*
|
|
11
|
+
* Why a shared function:
|
|
12
|
+
* - the loop is the orchestration, the thing that lets any worker add
|
|
13
|
+
* tasks mid-flight via `agents teams add` and have them picked up
|
|
14
|
+
* - `factory run` is just `teams start --watch` with factory-flavored
|
|
15
|
+
* presentation; keeping them in sync avoids drift
|
|
16
|
+
*
|
|
17
|
+
* The caller supplies a presenter callback so the same loop can drive
|
|
18
|
+
* terminal output, json-per-wave output, or a TUI.
|
|
19
|
+
*/
|
|
20
|
+
import type { AgentManager, AgentProcess } from './agents.js';
|
|
21
|
+
export interface WaveSummary {
|
|
22
|
+
wave: number;
|
|
23
|
+
timestamp: string;
|
|
24
|
+
team: string;
|
|
25
|
+
launched: AgentProcess[];
|
|
26
|
+
pending: number;
|
|
27
|
+
running: number;
|
|
28
|
+
completed: number;
|
|
29
|
+
failed: number;
|
|
30
|
+
drained: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface SupervisorOptions {
|
|
33
|
+
team: string;
|
|
34
|
+
intervalMs?: number;
|
|
35
|
+
maxWaves?: number;
|
|
36
|
+
/** Called once per wave. Return false to stop the loop gracefully. */
|
|
37
|
+
onWave: (summary: WaveSummary) => void | Promise<void> | boolean | Promise<boolean>;
|
|
38
|
+
}
|
|
39
|
+
export interface SupervisorResult {
|
|
40
|
+
waves: number;
|
|
41
|
+
stoppedBy: 'drained' | 'max-waves' | 'signal' | 'callback';
|
|
42
|
+
elapsed_ms: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Run the continuous DAG dispatcher until the team drains, the caller
|
|
46
|
+
* returns false from onWave, or SIGINT/SIGTERM arrives.
|
|
47
|
+
*/
|
|
48
|
+
export declare function runSupervisor(mgr: AgentManager, opts: SupervisorOptions): Promise<SupervisorResult>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run the continuous DAG dispatcher until the team drains, the caller
|
|
3
|
+
* returns false from onWave, or SIGINT/SIGTERM arrives.
|
|
4
|
+
*/
|
|
5
|
+
export async function runSupervisor(mgr, opts) {
|
|
6
|
+
const intervalMs = opts.intervalMs ?? 8000;
|
|
7
|
+
const maxWaves = opts.maxWaves ?? 1000;
|
|
8
|
+
const team = opts.team;
|
|
9
|
+
const startedAt = Date.now();
|
|
10
|
+
let stopSignal = false;
|
|
11
|
+
const onSig = () => { stopSignal = true; };
|
|
12
|
+
process.once('SIGINT', onSig);
|
|
13
|
+
process.once('SIGTERM', onSig);
|
|
14
|
+
try {
|
|
15
|
+
for (let wave = 1; wave <= maxWaves; wave++) {
|
|
16
|
+
// Pick up teammates added by other processes (e.g. the Planner's
|
|
17
|
+
// `agents teams add` calls). Without this the supervisor only ever
|
|
18
|
+
// sees teammates it created itself.
|
|
19
|
+
await mgr.rescanFromDisk();
|
|
20
|
+
const launched = await mgr.startReady(team);
|
|
21
|
+
const all = await mgr.listByTask(team);
|
|
22
|
+
let pending = 0, running = 0, completed = 0, failed = 0;
|
|
23
|
+
for (const a of all) {
|
|
24
|
+
if (a.status === 'pending')
|
|
25
|
+
pending++;
|
|
26
|
+
else if (a.status === 'running')
|
|
27
|
+
running++;
|
|
28
|
+
else if (a.status === 'completed')
|
|
29
|
+
completed++;
|
|
30
|
+
else if (a.status === 'failed')
|
|
31
|
+
failed++;
|
|
32
|
+
}
|
|
33
|
+
const summary = {
|
|
34
|
+
wave,
|
|
35
|
+
timestamp: new Date().toISOString(),
|
|
36
|
+
team,
|
|
37
|
+
launched,
|
|
38
|
+
pending,
|
|
39
|
+
running,
|
|
40
|
+
completed,
|
|
41
|
+
failed,
|
|
42
|
+
drained: pending === 0 && running === 0,
|
|
43
|
+
};
|
|
44
|
+
const keepGoing = await opts.onWave(summary);
|
|
45
|
+
if (keepGoing === false) {
|
|
46
|
+
return { waves: wave, stoppedBy: 'callback', elapsed_ms: Date.now() - startedAt };
|
|
47
|
+
}
|
|
48
|
+
// Re-check drain AFTER the callback. The callback may have added new
|
|
49
|
+
// teammates mid-flight (that's the whole point of the dynamic DAG), so
|
|
50
|
+
// trusting the pre-callback snapshot would drain prematurely. Rescan
|
|
51
|
+
// too, because the callback could have triggered a sibling process
|
|
52
|
+
// that wrote a fresh meta.json.
|
|
53
|
+
await mgr.rescanFromDisk();
|
|
54
|
+
const afterCallback = await mgr.listByTask(team);
|
|
55
|
+
const stillLive = afterCallback.some((a) => a.status === 'pending' || a.status === 'running');
|
|
56
|
+
if (!stillLive) {
|
|
57
|
+
return { waves: wave, stoppedBy: 'drained', elapsed_ms: Date.now() - startedAt };
|
|
58
|
+
}
|
|
59
|
+
if (stopSignal) {
|
|
60
|
+
return { waves: wave, stoppedBy: 'signal', elapsed_ms: Date.now() - startedAt };
|
|
61
|
+
}
|
|
62
|
+
await new Promise((r) => setTimeout(r, intervalMs));
|
|
63
|
+
if (stopSignal) {
|
|
64
|
+
return { waves: wave, stoppedBy: 'signal', elapsed_ms: Date.now() - startedAt };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { waves: maxWaves, stoppedBy: 'max-waves', elapsed_ms: Date.now() - startedAt };
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
process.off('SIGINT', onSig);
|
|
71
|
+
process.off('SIGTERM', onSig);
|
|
72
|
+
}
|
|
73
|
+
}
|
package/dist/lib/template.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Template resolution utilities
|
|
3
|
-
* Ported from agents/halo/cli/pkg/template
|
|
2
|
+
* Template resolution utilities.
|
|
3
|
+
* Ported from agents/halo/cli/pkg/template.
|
|
4
|
+
*
|
|
5
|
+
* Supports {{artifact.*}} and {{preflight.*}} placeholder patterns used in
|
|
6
|
+
* artifact action input mappings.
|
|
4
7
|
*/
|
|
5
8
|
/**
|
|
6
|
-
* Resolve template placeholders with artifact and preflight data
|
|
7
|
-
* Replaces {{artifact.*}} and {{preflight.*}} patterns
|
|
9
|
+
* Resolve template placeholders with artifact and preflight data.
|
|
10
|
+
* Replaces {{artifact.*}} and {{preflight.*}} patterns.
|
|
8
11
|
*
|
|
9
12
|
* @param tmpl - Template string with placeholders
|
|
10
13
|
* @param artifact - Map of artifact key-value pairs
|
|
@@ -13,7 +16,7 @@
|
|
|
13
16
|
*/
|
|
14
17
|
export declare function resolveTemplate(tmpl: string, artifact: Record<string, string>, preflight: Record<string, string | string[] | unknown>): string;
|
|
15
18
|
/**
|
|
16
|
-
* Extract all template variables from a template string
|
|
19
|
+
* Extract all template variables from a template string.
|
|
17
20
|
* @param tmpl - Template string
|
|
18
21
|
* @returns Object with artifact and preflight variable names
|
|
19
22
|
*/
|
|
@@ -21,4 +24,3 @@ export declare function extractTemplateVariables(tmpl: string): {
|
|
|
21
24
|
artifact: string[];
|
|
22
25
|
preflight: string[];
|
|
23
26
|
};
|
|
24
|
-
//# sourceMappingURL=template.d.ts.map
|
package/dist/lib/template.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Template resolution utilities
|
|
3
|
-
* Ported from agents/halo/cli/pkg/template
|
|
2
|
+
* Template resolution utilities.
|
|
3
|
+
* Ported from agents/halo/cli/pkg/template.
|
|
4
|
+
*
|
|
5
|
+
* Supports {{artifact.*}} and {{preflight.*}} placeholder patterns used in
|
|
6
|
+
* artifact action input mappings.
|
|
4
7
|
*/
|
|
5
8
|
/**
|
|
6
|
-
* Resolve template placeholders with artifact and preflight data
|
|
7
|
-
* Replaces {{artifact.*}} and {{preflight.*}} patterns
|
|
9
|
+
* Resolve template placeholders with artifact and preflight data.
|
|
10
|
+
* Replaces {{artifact.*}} and {{preflight.*}} patterns.
|
|
8
11
|
*
|
|
9
12
|
* @param tmpl - Template string with placeholders
|
|
10
13
|
* @param artifact - Map of artifact key-value pairs
|
|
@@ -34,7 +37,7 @@ export function resolveTemplate(tmpl, artifact, preflight) {
|
|
|
34
37
|
return result;
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
|
-
* Extract all template variables from a template string
|
|
40
|
+
* Extract all template variables from a template string.
|
|
38
41
|
* @param tmpl - Template string
|
|
39
42
|
* @returns Object with artifact and preflight variable names
|
|
40
43
|
*/
|
|
@@ -54,4 +57,3 @@ export function extractTemplateVariables(tmpl) {
|
|
|
54
57
|
}
|
|
55
58
|
return { artifact, preflight };
|
|
56
59
|
}
|
|
57
|
-
//# sourceMappingURL=template.js.map
|