@phnx-labs/agents-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +316 -0
- package/LICENSE +21 -0
- package/README.md +537 -0
- package/dist/commands/__tests__/sessions.test.d.ts +2 -0
- package/dist/commands/__tests__/sessions.test.d.ts.map +1 -0
- package/dist/commands/__tests__/sessions.test.js +636 -0
- package/dist/commands/__tests__/sessions.test.js.map +1 -0
- package/dist/commands/cloud.d.ts +3 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +322 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/commands.d.ts +3 -0
- package/dist/commands/commands.d.ts.map +1 -0
- package/dist/commands/commands.js +628 -0
- package/dist/commands/commands.js.map +1 -0
- package/dist/commands/daemon.d.ts +3 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +110 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/drive.d.ts +3 -0
- package/dist/commands/drive.d.ts.map +1 -0
- package/dist/commands/drive.js +166 -0
- package/dist/commands/drive.js.map +1 -0
- package/dist/commands/exec.d.ts +3 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +241 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/fork.d.ts +3 -0
- package/dist/commands/fork.d.ts.map +1 -0
- package/dist/commands/fork.js +139 -0
- package/dist/commands/fork.js.map +1 -0
- package/dist/commands/hooks.d.ts +3 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +689 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +127 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +581 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/models.d.ts +3 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +158 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/packages.d.ts +3 -0
- package/dist/commands/packages.d.ts.map +1 -0
- package/dist/commands/packages.js +541 -0
- package/dist/commands/packages.js.map +1 -0
- package/dist/commands/permissions.d.ts +3 -0
- package/dist/commands/permissions.d.ts.map +1 -0
- package/dist/commands/permissions.js +723 -0
- package/dist/commands/permissions.js.map +1 -0
- package/dist/commands/plugins.d.ts +3 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +382 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/profiles.d.ts +3 -0
- package/dist/commands/profiles.d.ts.map +1 -0
- package/dist/commands/profiles.js +242 -0
- package/dist/commands/profiles.js.map +1 -0
- package/dist/commands/pty.d.ts +20 -0
- package/dist/commands/pty.d.ts.map +1 -0
- package/dist/commands/pty.js +389 -0
- package/dist/commands/pty.js.map +1 -0
- package/dist/commands/pull.d.ts +3 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +448 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/push.d.ts +3 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +180 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/refresh-memory.d.ts +9 -0
- package/dist/commands/refresh-memory.d.ts.map +1 -0
- package/dist/commands/refresh-memory.js +45 -0
- package/dist/commands/refresh-memory.js.map +1 -0
- package/dist/commands/resource-view.d.ts +31 -0
- package/dist/commands/resource-view.d.ts.map +1 -0
- package/dist/commands/resource-view.js +183 -0
- package/dist/commands/resource-view.js.map +1 -0
- package/dist/commands/routines.d.ts +3 -0
- package/dist/commands/routines.d.ts.map +1 -0
- package/dist/commands/routines.js +579 -0
- package/dist/commands/routines.js.map +1 -0
- package/dist/commands/rules.d.ts +3 -0
- package/dist/commands/rules.d.ts.map +1 -0
- package/dist/commands/rules.js +488 -0
- package/dist/commands/rules.js.map +1 -0
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +339 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/sessions-picker.d.ts +16 -0
- package/dist/commands/sessions-picker.d.ts.map +1 -0
- package/dist/commands/sessions-picker.js +256 -0
- package/dist/commands/sessions-picker.js.map +1 -0
- package/dist/commands/sessions.d.ts +16 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +1077 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +716 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +19 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subagents.d.ts +3 -0
- package/dist/commands/subagents.d.ts.map +1 -0
- package/dist/commands/subagents.js +350 -0
- package/dist/commands/subagents.js.map +1 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +62 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/teams-picker.d.ts +14 -0
- package/dist/commands/teams-picker.d.ts.map +1 -0
- package/dist/commands/teams-picker.js +278 -0
- package/dist/commands/teams-picker.js.map +1 -0
- package/dist/commands/teams.d.ts +3 -0
- package/dist/commands/teams.d.ts.map +1 -0
- package/dist/commands/teams.js +917 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/utils.d.ts +39 -0
- package/dist/commands/utils.d.ts.map +1 -0
- package/dist/commands/utils.js +100 -0
- package/dist/commands/utils.js.map +1 -0
- package/dist/commands/versions.d.ts +3 -0
- package/dist/commands/versions.d.ts.map +1 -0
- package/dist/commands/versions.js +700 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/commands/view.d.ts +8 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +626 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +484 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/__tests__/bugfixes.test.d.ts +2 -0
- package/dist/lib/__tests__/bugfixes.test.d.ts.map +1 -0
- package/dist/lib/__tests__/bugfixes.test.js +192 -0
- package/dist/lib/__tests__/bugfixes.test.js.map +1 -0
- package/dist/lib/__tests__/exec.test.d.ts +2 -0
- package/dist/lib/__tests__/exec.test.d.ts.map +1 -0
- package/dist/lib/__tests__/exec.test.js +446 -0
- package/dist/lib/__tests__/exec.test.js.map +1 -0
- package/dist/lib/__tests__/git-sync.test.d.ts +2 -0
- package/dist/lib/__tests__/git-sync.test.d.ts.map +1 -0
- package/dist/lib/__tests__/git-sync.test.js +138 -0
- package/dist/lib/__tests__/git-sync.test.js.map +1 -0
- package/dist/lib/__tests__/hooks.test.d.ts +2 -0
- package/dist/lib/__tests__/hooks.test.d.ts.map +1 -0
- package/dist/lib/__tests__/hooks.test.js +203 -0
- package/dist/lib/__tests__/hooks.test.js.map +1 -0
- package/dist/lib/__tests__/memory-compile.test.d.ts +2 -0
- package/dist/lib/__tests__/memory-compile.test.d.ts.map +1 -0
- package/dist/lib/__tests__/memory-compile.test.js +95 -0
- package/dist/lib/__tests__/memory-compile.test.js.map +1 -0
- package/dist/lib/__tests__/models.test.d.ts +2 -0
- package/dist/lib/__tests__/models.test.d.ts.map +1 -0
- package/dist/lib/__tests__/models.test.js +239 -0
- package/dist/lib/__tests__/models.test.js.map +1 -0
- package/dist/lib/__tests__/rotate.test.d.ts +2 -0
- package/dist/lib/__tests__/rotate.test.d.ts.map +1 -0
- package/dist/lib/__tests__/rotate.test.js +80 -0
- package/dist/lib/__tests__/rotate.test.js.map +1 -0
- package/dist/lib/__tests__/secrets-bundles.test.d.ts +2 -0
- package/dist/lib/__tests__/secrets-bundles.test.d.ts.map +1 -0
- package/dist/lib/__tests__/secrets-bundles.test.js +104 -0
- package/dist/lib/__tests__/secrets-bundles.test.js.map +1 -0
- package/dist/lib/__tests__/secrets.test.d.ts +2 -0
- package/dist/lib/__tests__/secrets.test.d.ts.map +1 -0
- package/dist/lib/__tests__/secrets.test.js +90 -0
- package/dist/lib/__tests__/secrets.test.js.map +1 -0
- package/dist/lib/__tests__/shims.test.d.ts +2 -0
- package/dist/lib/__tests__/shims.test.d.ts.map +1 -0
- package/dist/lib/__tests__/shims.test.js +39 -0
- package/dist/lib/__tests__/shims.test.js.map +1 -0
- package/dist/lib/__tests__/usage.test.d.ts +2 -0
- package/dist/lib/__tests__/usage.test.d.ts.map +1 -0
- package/dist/lib/__tests__/usage.test.js +220 -0
- package/dist/lib/__tests__/usage.test.js.map +1 -0
- package/dist/lib/__tests__/versions.test.d.ts +2 -0
- package/dist/lib/__tests__/versions.test.d.ts.map +1 -0
- package/dist/lib/__tests__/versions.test.js +63 -0
- package/dist/lib/__tests__/versions.test.js.map +1 -0
- package/dist/lib/agents.d.ts +107 -0
- package/dist/lib/agents.d.ts.map +1 -0
- package/dist/lib/agents.js +1096 -0
- package/dist/lib/agents.js.map +1 -0
- package/dist/lib/artifact-actions.d.ts +22 -0
- package/dist/lib/artifact-actions.d.ts.map +1 -0
- package/dist/lib/artifact-actions.js +55 -0
- package/dist/lib/artifact-actions.js.map +1 -0
- package/dist/lib/cloud/codex.d.ts +19 -0
- package/dist/lib/cloud/codex.d.ts.map +1 -0
- package/dist/lib/cloud/codex.js +210 -0
- package/dist/lib/cloud/codex.js.map +1 -0
- package/dist/lib/cloud/factory.d.ts +26 -0
- package/dist/lib/cloud/factory.d.ts.map +1 -0
- package/dist/lib/cloud/factory.js +37 -0
- package/dist/lib/cloud/factory.js.map +1 -0
- package/dist/lib/cloud/registry.d.ts +6 -0
- package/dist/lib/cloud/registry.d.ts.map +1 -0
- package/dist/lib/cloud/registry.js +56 -0
- package/dist/lib/cloud/registry.js.map +1 -0
- package/dist/lib/cloud/rush.d.ts +15 -0
- package/dist/lib/cloud/rush.d.ts.map +1 -0
- package/dist/lib/cloud/rush.js +185 -0
- package/dist/lib/cloud/rush.js.map +1 -0
- package/dist/lib/cloud/store.d.ts +10 -0
- package/dist/lib/cloud/store.d.ts.map +1 -0
- package/dist/lib/cloud/store.js +96 -0
- package/dist/lib/cloud/store.js.map +1 -0
- package/dist/lib/cloud/stream.d.ts +18 -0
- package/dist/lib/cloud/stream.d.ts.map +1 -0
- package/dist/lib/cloud/stream.js +138 -0
- package/dist/lib/cloud/stream.js.map +1 -0
- package/dist/lib/cloud/types.d.ts +60 -0
- package/dist/lib/cloud/types.d.ts.map +1 -0
- package/dist/lib/cloud/types.js +2 -0
- package/dist/lib/cloud/types.js.map +1 -0
- package/dist/lib/commands.d.ts +121 -0
- package/dist/lib/commands.d.ts.map +1 -0
- package/dist/lib/commands.js +499 -0
- package/dist/lib/commands.js.map +1 -0
- package/dist/lib/convert.d.ts +11 -0
- package/dist/lib/convert.d.ts.map +1 -0
- package/dist/lib/convert.js +45 -0
- package/dist/lib/convert.js.map +1 -0
- package/dist/lib/daemon.d.ts +22 -0
- package/dist/lib/daemon.d.ts.map +1 -0
- package/dist/lib/daemon.js +311 -0
- package/dist/lib/daemon.js.map +1 -0
- package/dist/lib/drive-sync.d.ts +28 -0
- package/dist/lib/drive-sync.d.ts.map +1 -0
- package/dist/lib/drive-sync.js +193 -0
- package/dist/lib/drive-sync.js.map +1 -0
- package/dist/lib/exec.d.ts +85 -0
- package/dist/lib/exec.d.ts.map +1 -0
- package/dist/lib/exec.js +423 -0
- package/dist/lib/exec.js.map +1 -0
- package/dist/lib/factory.d.ts +57 -0
- package/dist/lib/factory.d.ts.map +1 -0
- package/dist/lib/factory.js +110 -0
- package/dist/lib/factory.js.map +1 -0
- package/dist/lib/git.d.ts +146 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +635 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/help.d.ts +3 -0
- package/dist/lib/help.d.ts.map +1 -0
- package/dist/lib/help.js +63 -0
- package/dist/lib/help.js.map +1 -0
- package/dist/lib/hooks.d.ts +116 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +837 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/lib/manifest.d.ts +8 -0
- package/dist/lib/manifest.d.ts.map +1 -0
- package/dist/lib/manifest.js +36 -0
- package/dist/lib/manifest.js.map +1 -0
- package/dist/lib/markdown.d.ts +5 -0
- package/dist/lib/markdown.d.ts.map +1 -0
- package/dist/lib/markdown.js +11 -0
- package/dist/lib/markdown.js.map +1 -0
- package/dist/lib/mcp.d.ts +64 -0
- package/dist/lib/mcp.d.ts.map +1 -0
- package/dist/lib/mcp.js +327 -0
- package/dist/lib/mcp.js.map +1 -0
- package/dist/lib/memory-compile.d.ts +56 -0
- package/dist/lib/memory-compile.d.ts.map +1 -0
- package/dist/lib/memory-compile.js +167 -0
- package/dist/lib/memory-compile.js.map +1 -0
- package/dist/lib/memory.d.ts +56 -0
- package/dist/lib/memory.d.ts.map +1 -0
- package/dist/lib/memory.js +267 -0
- package/dist/lib/memory.js.map +1 -0
- package/dist/lib/models.d.ts +91 -0
- package/dist/lib/models.d.ts.map +1 -0
- package/dist/lib/models.js +706 -0
- package/dist/lib/models.js.map +1 -0
- package/dist/lib/permissions.d.ts +204 -0
- package/dist/lib/permissions.d.ts.map +1 -0
- package/dist/lib/permissions.js +1022 -0
- package/dist/lib/permissions.js.map +1 -0
- package/dist/lib/picker.d.ts +17 -0
- package/dist/lib/picker.d.ts.map +1 -0
- package/dist/lib/picker.js +95 -0
- package/dist/lib/picker.js.map +1 -0
- package/dist/lib/plugins.d.ts +73 -0
- package/dist/lib/plugins.d.ts.map +1 -0
- package/dist/lib/plugins.js +549 -0
- package/dist/lib/plugins.js.map +1 -0
- package/dist/lib/profiles-keychain.d.ts +3 -0
- package/dist/lib/profiles-keychain.d.ts.map +1 -0
- package/dist/lib/profiles-keychain.js +10 -0
- package/dist/lib/profiles-keychain.js.map +1 -0
- package/dist/lib/profiles-presets.d.ts +15 -0
- package/dist/lib/profiles-presets.d.ts.map +1 -0
- package/dist/lib/profiles-presets.js +95 -0
- package/dist/lib/profiles-presets.js.map +1 -0
- package/dist/lib/profiles.d.ts +35 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +123 -0
- package/dist/lib/profiles.js.map +1 -0
- package/dist/lib/pty-client.d.ts +22 -0
- package/dist/lib/pty-client.d.ts.map +1 -0
- package/dist/lib/pty-client.js +181 -0
- package/dist/lib/pty-client.js.map +1 -0
- package/dist/lib/pty-server.d.ts +16 -0
- package/dist/lib/pty-server.d.ts.map +1 -0
- package/dist/lib/pty-server.js +422 -0
- package/dist/lib/pty-server.js.map +1 -0
- package/dist/lib/registry.d.ts +28 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +203 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/resources.d.ts +50 -0
- package/dist/lib/resources.d.ts.map +1 -0
- package/dist/lib/resources.js +103 -0
- package/dist/lib/resources.js.map +1 -0
- package/dist/lib/rotate.d.ts +52 -0
- package/dist/lib/rotate.d.ts.map +1 -0
- package/dist/lib/rotate.js +87 -0
- package/dist/lib/rotate.js.map +1 -0
- package/dist/lib/routines.d.ts +70 -0
- package/dist/lib/routines.d.ts.map +1 -0
- package/dist/lib/routines.js +325 -0
- package/dist/lib/routines.js.map +1 -0
- package/dist/lib/runner.d.ts +12 -0
- package/dist/lib/runner.d.ts.map +1 -0
- package/dist/lib/runner.js +311 -0
- package/dist/lib/runner.js.map +1 -0
- package/dist/lib/sandbox.d.ts +10 -0
- package/dist/lib/sandbox.d.ts.map +1 -0
- package/dist/lib/sandbox.js +201 -0
- package/dist/lib/sandbox.js.map +1 -0
- package/dist/lib/scheduler.d.ts +18 -0
- package/dist/lib/scheduler.d.ts.map +1 -0
- package/dist/lib/scheduler.js +69 -0
- package/dist/lib/scheduler.js.map +1 -0
- package/dist/lib/secrets-bundles.d.ts +29 -0
- package/dist/lib/secrets-bundles.d.ts.map +1 -0
- package/dist/lib/secrets-bundles.js +168 -0
- package/dist/lib/secrets-bundles.js.map +1 -0
- package/dist/lib/secrets.d.ts +27 -0
- package/dist/lib/secrets.d.ts.map +1 -0
- package/dist/lib/secrets.js +127 -0
- package/dist/lib/secrets.js.map +1 -0
- package/dist/lib/session/__tests__/db.test.d.ts +2 -0
- package/dist/lib/session/__tests__/db.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/db.test.js +54 -0
- package/dist/lib/session/__tests__/db.test.js.map +1 -0
- package/dist/lib/session/__tests__/discover.test.d.ts +2 -0
- package/dist/lib/session/__tests__/discover.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/discover.test.js +63 -0
- package/dist/lib/session/__tests__/discover.test.js.map +1 -0
- package/dist/lib/session/__tests__/prompt.test.d.ts +2 -0
- package/dist/lib/session/__tests__/prompt.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/prompt.test.js +44 -0
- package/dist/lib/session/__tests__/prompt.test.js.map +1 -0
- package/dist/lib/session/__tests__/render.test.d.ts +2 -0
- package/dist/lib/session/__tests__/render.test.d.ts.map +1 -0
- package/dist/lib/session/__tests__/render.test.js +602 -0
- package/dist/lib/session/__tests__/render.test.js.map +1 -0
- package/dist/lib/session/artifacts.d.ts +5 -0
- package/dist/lib/session/artifacts.d.ts.map +1 -0
- package/dist/lib/session/artifacts.js +75 -0
- package/dist/lib/session/artifacts.js.map +1 -0
- package/dist/lib/session/db.d.ts +118 -0
- package/dist/lib/session/db.d.ts.map +1 -0
- package/dist/lib/session/db.js +576 -0
- package/dist/lib/session/db.js.map +1 -0
- package/dist/lib/session/discover.d.ts +60 -0
- package/dist/lib/session/discover.d.ts.map +1 -0
- package/dist/lib/session/discover.js +1272 -0
- package/dist/lib/session/discover.js.map +1 -0
- package/dist/lib/session/parse.d.ts +23 -0
- package/dist/lib/session/parse.d.ts.map +1 -0
- package/dist/lib/session/parse.js +650 -0
- package/dist/lib/session/parse.js.map +1 -0
- package/dist/lib/session/prompt.d.ts +4 -0
- package/dist/lib/session/prompt.d.ts.map +1 -0
- package/dist/lib/session/prompt.js +64 -0
- package/dist/lib/session/prompt.js.map +1 -0
- package/dist/lib/session/prompt.test.d.ts +2 -0
- package/dist/lib/session/prompt.test.d.ts.map +1 -0
- package/dist/lib/session/prompt.test.js +57 -0
- package/dist/lib/session/prompt.test.js.map +1 -0
- package/dist/lib/session/render.d.ts +90 -0
- package/dist/lib/session/render.d.ts.map +1 -0
- package/dist/lib/session/render.js +778 -0
- package/dist/lib/session/render.js.map +1 -0
- package/dist/lib/session/team-filter.d.ts +26 -0
- package/dist/lib/session/team-filter.d.ts.map +1 -0
- package/dist/lib/session/team-filter.js +66 -0
- package/dist/lib/session/team-filter.js.map +1 -0
- package/dist/lib/session/team-filter.test.d.ts +2 -0
- package/dist/lib/session/team-filter.test.d.ts.map +1 -0
- package/dist/lib/session/team-filter.test.js +157 -0
- package/dist/lib/session/team-filter.test.js.map +1 -0
- package/dist/lib/session/types.d.ts +69 -0
- package/dist/lib/session/types.d.ts.map +1 -0
- package/dist/lib/session/types.js +2 -0
- package/dist/lib/session/types.js.map +1 -0
- package/dist/lib/shims.d.ts +228 -0
- package/dist/lib/shims.d.ts.map +1 -0
- package/dist/lib/shims.js +1170 -0
- package/dist/lib/shims.js.map +1 -0
- package/dist/lib/skills.d.ts +134 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +783 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/state.d.ts +53 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +299 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/subagents.d.ts +75 -0
- package/dist/lib/subagents.d.ts.map +1 -0
- package/dist/lib/subagents.js +402 -0
- package/dist/lib/subagents.js.map +1 -0
- package/dist/lib/teams/agents.d.ts +146 -0
- package/dist/lib/teams/agents.d.ts.map +1 -0
- package/dist/lib/teams/agents.js +1072 -0
- package/dist/lib/teams/agents.js.map +1 -0
- package/dist/lib/teams/api.d.ts +77 -0
- package/dist/lib/teams/api.d.ts.map +1 -0
- package/dist/lib/teams/api.js +229 -0
- package/dist/lib/teams/api.js.map +1 -0
- package/dist/lib/teams/cloud.d.ts +11 -0
- package/dist/lib/teams/cloud.d.ts.map +1 -0
- package/dist/lib/teams/cloud.js +169 -0
- package/dist/lib/teams/cloud.js.map +1 -0
- package/dist/lib/teams/debug.d.ts +2 -0
- package/dist/lib/teams/debug.d.ts.map +1 -0
- package/dist/lib/teams/debug.js +6 -0
- package/dist/lib/teams/debug.js.map +1 -0
- package/dist/lib/teams/file_ops.d.ts +6 -0
- package/dist/lib/teams/file_ops.d.ts.map +1 -0
- package/dist/lib/teams/file_ops.js +59 -0
- package/dist/lib/teams/file_ops.js.map +1 -0
- package/dist/lib/teams/parsers.d.ts +5 -0
- package/dist/lib/teams/parsers.d.ts.map +1 -0
- package/dist/lib/teams/parsers.js +826 -0
- package/dist/lib/teams/parsers.js.map +1 -0
- package/dist/lib/teams/persistence.d.ts +28 -0
- package/dist/lib/teams/persistence.d.ts.map +1 -0
- package/dist/lib/teams/persistence.js +289 -0
- package/dist/lib/teams/persistence.js.map +1 -0
- package/dist/lib/teams/ralph.d.ts +8 -0
- package/dist/lib/teams/ralph.d.ts.map +1 -0
- package/dist/lib/teams/ralph.js +59 -0
- package/dist/lib/teams/ralph.js.map +1 -0
- package/dist/lib/teams/registry.d.ts +11 -0
- package/dist/lib/teams/registry.d.ts.map +1 -0
- package/dist/lib/teams/registry.js +56 -0
- package/dist/lib/teams/registry.js.map +1 -0
- package/dist/lib/teams/summarizer.d.ts +58 -0
- package/dist/lib/teams/summarizer.d.ts.map +1 -0
- package/dist/lib/teams/summarizer.js +766 -0
- package/dist/lib/teams/summarizer.js.map +1 -0
- package/dist/lib/template.d.ts +24 -0
- package/dist/lib/template.d.ts.map +1 -0
- package/dist/lib/template.js +57 -0
- package/dist/lib/template.js.map +1 -0
- package/dist/lib/types.d.ts +282 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +18 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/usage.d.ts +73 -0
- package/dist/lib/usage.d.ts.map +1 -0
- package/dist/lib/usage.js +623 -0
- package/dist/lib/usage.js.map +1 -0
- package/dist/lib/versions.d.ts +248 -0
- package/dist/lib/versions.d.ts.map +1 -0
- package/dist/lib/versions.js +1737 -0
- package/dist/lib/versions.js.map +1 -0
- package/package.json +82 -0
- package/scripts/postinstall.js +72 -0
- package/scripts/rebuild-sqlite.sh +46 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function parseMarkdownFrontmatter(content) {
|
|
2
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
3
|
+
if (!match) {
|
|
4
|
+
return { frontmatter: {}, body: content };
|
|
5
|
+
}
|
|
6
|
+
const frontmatterRaw = match[1];
|
|
7
|
+
const body = match[2];
|
|
8
|
+
const frontmatter = {};
|
|
9
|
+
for (const line of frontmatterRaw.split('\n')) {
|
|
10
|
+
const colonIndex = line.indexOf(':');
|
|
11
|
+
if (colonIndex > 0) {
|
|
12
|
+
const key = line.slice(0, colonIndex).trim();
|
|
13
|
+
const value = line.slice(colonIndex + 1).trim();
|
|
14
|
+
frontmatter[key] = value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return { frontmatter, body };
|
|
18
|
+
}
|
|
19
|
+
export function markdownToToml(skillName, markdown) {
|
|
20
|
+
const { frontmatter, body } = parseMarkdownFrontmatter(markdown);
|
|
21
|
+
const description = frontmatter.description || `Run ${skillName} command`;
|
|
22
|
+
const promptContent = body
|
|
23
|
+
.trim()
|
|
24
|
+
.replace(/\$ARGUMENTS/g, '{{args}}');
|
|
25
|
+
const lines = [
|
|
26
|
+
`name = "${skillName}"`,
|
|
27
|
+
`description = "${description.replace(/"/g, '\\"')}"`,
|
|
28
|
+
"prompt = '''",
|
|
29
|
+
promptContent,
|
|
30
|
+
"'''",
|
|
31
|
+
'',
|
|
32
|
+
];
|
|
33
|
+
return lines.join('\n');
|
|
34
|
+
}
|
|
35
|
+
export function tomlToMarkdown(toml) {
|
|
36
|
+
const nameMatch = toml.match(/name\s*=\s*"([^"]+)"/);
|
|
37
|
+
const descMatch = toml.match(/description\s*=\s*"([^"]+)"/);
|
|
38
|
+
const promptMatch = toml.match(/prompt\s*=\s*(?:'''|""")([\s\S]*?)(?:'''|""")/);
|
|
39
|
+
const description = descMatch?.[1] || '';
|
|
40
|
+
let prompt = promptMatch?.[1]?.trim() || '';
|
|
41
|
+
prompt = prompt.replace(/\{\{args\}\}/g, '$ARGUMENTS');
|
|
42
|
+
const lines = ['---', `description: ${description}`, '---', '', prompt, ''];
|
|
43
|
+
return lines.join('\n');
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/lib/convert.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,wBAAwB,CAAC,OAAe;IAItD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,QAAgB;IAChE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,IAAI,OAAO,SAAS,UAAU,CAAC;IAE1E,MAAM,aAAa,GAAG,IAAI;SACvB,IAAI,EAAE;SACN,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG;QACZ,WAAW,SAAS,GAAG;QACvB,kBAAkB,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG;QACrD,cAAc;QACd,aAAa;QACb,KAAK;QACL,EAAE;KACH,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAEhF,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,MAAM,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAE5C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,gBAAgB,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAE5E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare function readDaemonPid(): number | null;
|
|
2
|
+
export declare function writeDaemonPid(pid: number): void;
|
|
3
|
+
export declare function removeDaemonPid(): void;
|
|
4
|
+
export declare function isDaemonRunning(): boolean;
|
|
5
|
+
export declare function log(level: string, message: string): void;
|
|
6
|
+
export declare function runDaemon(): Promise<void>;
|
|
7
|
+
export declare function generateLaunchdPlist(): string;
|
|
8
|
+
export declare function generateSystemdUnit(): string;
|
|
9
|
+
export declare function startDaemon(): {
|
|
10
|
+
pid: number | null;
|
|
11
|
+
method: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function stopDaemon(): boolean;
|
|
14
|
+
export declare function getDaemonStatus(): {
|
|
15
|
+
running: boolean;
|
|
16
|
+
pid: number | null;
|
|
17
|
+
jobCount: number;
|
|
18
|
+
logPath: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function readDaemonLog(lines?: number): string;
|
|
21
|
+
export declare function signalDaemonReload(): boolean;
|
|
22
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"AA8BA,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAS7C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAUzC;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA6C/C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CA+B7C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAgB5C;AAUD,wBAAgB,WAAW,IAAI;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkDpE;AA6BD,wBAAgB,UAAU,IAAI,OAAO,CAgDpC;AAED,wBAAgB,eAAe,IAAI;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAUA;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CASpD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAS5C"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { spawn, execSync } from 'child_process';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
import { getAgentsDir } from './state.js';
|
|
6
|
+
import { listJobs as listAllJobs } from './routines.js';
|
|
7
|
+
import { JobScheduler } from './scheduler.js';
|
|
8
|
+
import { executeJobDetached, monitorRunningJobs } from './runner.js';
|
|
9
|
+
const PID_FILE = 'daemon.pid';
|
|
10
|
+
const LOG_FILE = 'daemon.log';
|
|
11
|
+
const PLIST_NAME = 'co.swarmify.agents-daemon';
|
|
12
|
+
const SYSTEMD_UNIT = 'agents-daemon.service';
|
|
13
|
+
function getPidPath() {
|
|
14
|
+
return path.join(getAgentsDir(), PID_FILE);
|
|
15
|
+
}
|
|
16
|
+
function getLogPath() {
|
|
17
|
+
return path.join(getAgentsDir(), LOG_FILE);
|
|
18
|
+
}
|
|
19
|
+
function getLaunchdPlistPath() {
|
|
20
|
+
return path.join(os.homedir(), 'Library', 'LaunchAgents', `${PLIST_NAME}.plist`);
|
|
21
|
+
}
|
|
22
|
+
function getSystemdUnitPath() {
|
|
23
|
+
return path.join(os.homedir(), '.config', 'systemd', 'user', `${SYSTEMD_UNIT}`);
|
|
24
|
+
}
|
|
25
|
+
export function readDaemonPid() {
|
|
26
|
+
const pidPath = getPidPath();
|
|
27
|
+
if (!fs.existsSync(pidPath))
|
|
28
|
+
return null;
|
|
29
|
+
try {
|
|
30
|
+
const pid = parseInt(fs.readFileSync(pidPath, 'utf-8').trim(), 10);
|
|
31
|
+
return isNaN(pid) ? null : pid;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function writeDaemonPid(pid) {
|
|
38
|
+
fs.writeFileSync(getPidPath(), String(pid), 'utf-8');
|
|
39
|
+
}
|
|
40
|
+
export function removeDaemonPid() {
|
|
41
|
+
const pidPath = getPidPath();
|
|
42
|
+
if (fs.existsSync(pidPath)) {
|
|
43
|
+
fs.unlinkSync(pidPath);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function isDaemonRunning() {
|
|
47
|
+
const pid = readDaemonPid();
|
|
48
|
+
if (!pid)
|
|
49
|
+
return false;
|
|
50
|
+
try {
|
|
51
|
+
process.kill(pid, 0);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
removeDaemonPid();
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function log(level, message) {
|
|
60
|
+
const timestamp = new Date().toISOString();
|
|
61
|
+
const line = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
|
|
62
|
+
fs.appendFileSync(getLogPath(), line, 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
export async function runDaemon() {
|
|
65
|
+
writeDaemonPid(process.pid);
|
|
66
|
+
log('INFO', `Daemon started (PID: ${process.pid})`);
|
|
67
|
+
const scheduler = new JobScheduler(async (config) => {
|
|
68
|
+
log('INFO', `Triggering job '${config.name}' (agent: ${config.agent})`);
|
|
69
|
+
try {
|
|
70
|
+
const meta = await executeJobDetached(config);
|
|
71
|
+
log('INFO', `Job '${config.name}' spawned (run: ${meta.runId}, PID: ${meta.pid})`);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
log('ERROR', `Job '${config.name}' failed to spawn: ${err.message}`);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
scheduler.loadAll();
|
|
78
|
+
const scheduled = scheduler.listScheduled();
|
|
79
|
+
log('INFO', `Loaded ${scheduled.length} jobs`);
|
|
80
|
+
for (const job of scheduled) {
|
|
81
|
+
log('INFO', ` ${job.name} -> next: ${job.nextRun?.toISOString() || 'unknown'}`);
|
|
82
|
+
}
|
|
83
|
+
const monitorInterval = setInterval(() => {
|
|
84
|
+
monitorRunningJobs();
|
|
85
|
+
}, 60_000);
|
|
86
|
+
const handleReload = () => {
|
|
87
|
+
log('INFO', 'Reloading jobs (SIGHUP)');
|
|
88
|
+
scheduler.reloadAll();
|
|
89
|
+
const reloaded = scheduler.listScheduled();
|
|
90
|
+
log('INFO', `Reloaded ${reloaded.length} jobs`);
|
|
91
|
+
};
|
|
92
|
+
const handleShutdown = () => {
|
|
93
|
+
log('INFO', 'Daemon shutting down');
|
|
94
|
+
scheduler.stopAll();
|
|
95
|
+
clearInterval(monitorInterval);
|
|
96
|
+
removeDaemonPid();
|
|
97
|
+
process.exit(0);
|
|
98
|
+
};
|
|
99
|
+
process.on('SIGHUP', handleReload);
|
|
100
|
+
process.on('SIGTERM', handleShutdown);
|
|
101
|
+
process.on('SIGINT', handleShutdown);
|
|
102
|
+
await new Promise(() => { });
|
|
103
|
+
}
|
|
104
|
+
export function generateLaunchdPlist() {
|
|
105
|
+
const agentsBin = getAgentsBinPath();
|
|
106
|
+
const logPath = getLogPath();
|
|
107
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
108
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
109
|
+
<plist version="1.0">
|
|
110
|
+
<dict>
|
|
111
|
+
<key>Label</key>
|
|
112
|
+
<string>${PLIST_NAME}</string>
|
|
113
|
+
<key>ProgramArguments</key>
|
|
114
|
+
<array>
|
|
115
|
+
<string>${agentsBin}</string>
|
|
116
|
+
<string>daemon</string>
|
|
117
|
+
<string>_run</string>
|
|
118
|
+
</array>
|
|
119
|
+
<key>RunAtLoad</key>
|
|
120
|
+
<true/>
|
|
121
|
+
<key>KeepAlive</key>
|
|
122
|
+
<true/>
|
|
123
|
+
<key>StandardOutPath</key>
|
|
124
|
+
<string>${logPath}</string>
|
|
125
|
+
<key>StandardErrorPath</key>
|
|
126
|
+
<string>${logPath}</string>
|
|
127
|
+
<key>EnvironmentVariables</key>
|
|
128
|
+
<dict>
|
|
129
|
+
<key>PATH</key>
|
|
130
|
+
<string>/usr/local/bin:/usr/bin:/bin:/opt/homebrew/bin:${os.homedir()}/.bun/bin:${os.homedir()}/.nvm/versions/node/v24.0.0/bin</string>
|
|
131
|
+
</dict>
|
|
132
|
+
</dict>
|
|
133
|
+
</plist>`;
|
|
134
|
+
}
|
|
135
|
+
export function generateSystemdUnit() {
|
|
136
|
+
const agentsBin = getAgentsBinPath();
|
|
137
|
+
return `[Unit]
|
|
138
|
+
Description=Agents Daemon - Scheduled Job Runner
|
|
139
|
+
After=network.target
|
|
140
|
+
|
|
141
|
+
[Service]
|
|
142
|
+
Type=simple
|
|
143
|
+
ExecStart=${agentsBin} daemon _run
|
|
144
|
+
Restart=always
|
|
145
|
+
RestartSec=10
|
|
146
|
+
Environment=PATH=/usr/local/bin:/usr/bin:/bin:${os.homedir()}/.nvm/versions/node/v24.0.0/bin
|
|
147
|
+
|
|
148
|
+
[Install]
|
|
149
|
+
WantedBy=default.target`;
|
|
150
|
+
}
|
|
151
|
+
function getAgentsBinPath() {
|
|
152
|
+
try {
|
|
153
|
+
return execSync('which agents', { encoding: 'utf-8' }).trim();
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return 'agents';
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
export function startDaemon() {
|
|
160
|
+
if (isDaemonRunning()) {
|
|
161
|
+
const pid = readDaemonPid();
|
|
162
|
+
return { pid, method: 'already-running' };
|
|
163
|
+
}
|
|
164
|
+
const platform = os.platform();
|
|
165
|
+
if (platform === 'darwin') {
|
|
166
|
+
try {
|
|
167
|
+
const plistPath = getLaunchdPlistPath();
|
|
168
|
+
const plistDir = path.dirname(plistPath);
|
|
169
|
+
if (!fs.existsSync(plistDir)) {
|
|
170
|
+
fs.mkdirSync(plistDir, { recursive: true });
|
|
171
|
+
}
|
|
172
|
+
fs.writeFileSync(plistPath, generateLaunchdPlist(), 'utf-8');
|
|
173
|
+
try {
|
|
174
|
+
execSync(`launchctl unload "${plistPath}" 2>/dev/null`, { encoding: 'utf-8' });
|
|
175
|
+
}
|
|
176
|
+
catch { /* not loaded, expected */ }
|
|
177
|
+
execSync(`launchctl load "${plistPath}"`, { encoding: 'utf-8' });
|
|
178
|
+
const pid = waitForPid(3000);
|
|
179
|
+
return { pid, method: 'launchd' };
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return startDetached();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (platform === 'linux') {
|
|
186
|
+
try {
|
|
187
|
+
const unitPath = getSystemdUnitPath();
|
|
188
|
+
const unitDir = path.dirname(unitPath);
|
|
189
|
+
if (!fs.existsSync(unitDir)) {
|
|
190
|
+
fs.mkdirSync(unitDir, { recursive: true });
|
|
191
|
+
}
|
|
192
|
+
fs.writeFileSync(unitPath, generateSystemdUnit(), 'utf-8');
|
|
193
|
+
execSync('systemctl --user daemon-reload', { encoding: 'utf-8' });
|
|
194
|
+
execSync(`systemctl --user enable ${SYSTEMD_UNIT}`, { encoding: 'utf-8' });
|
|
195
|
+
execSync(`systemctl --user start ${SYSTEMD_UNIT}`, { encoding: 'utf-8' });
|
|
196
|
+
const pid = waitForPid(3000);
|
|
197
|
+
return { pid, method: 'systemd' };
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return startDetached();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return startDetached();
|
|
204
|
+
}
|
|
205
|
+
function startDetached() {
|
|
206
|
+
const agentsBin = getAgentsBinPath();
|
|
207
|
+
const logPath = getLogPath();
|
|
208
|
+
const logFd = fs.openSync(logPath, 'a');
|
|
209
|
+
const child = spawn(agentsBin, ['daemon', '_run'], {
|
|
210
|
+
stdio: ['ignore', logFd, logFd],
|
|
211
|
+
detached: true,
|
|
212
|
+
});
|
|
213
|
+
child.unref();
|
|
214
|
+
fs.closeSync(logFd);
|
|
215
|
+
return { pid: child.pid || null, method: 'detached' };
|
|
216
|
+
}
|
|
217
|
+
function waitForPid(timeoutMs) {
|
|
218
|
+
const start = Date.now();
|
|
219
|
+
while (Date.now() - start < timeoutMs) {
|
|
220
|
+
const pid = readDaemonPid();
|
|
221
|
+
if (pid)
|
|
222
|
+
return pid;
|
|
223
|
+
const waitUntil = Date.now() + 200;
|
|
224
|
+
while (Date.now() < waitUntil) { }
|
|
225
|
+
}
|
|
226
|
+
return readDaemonPid();
|
|
227
|
+
}
|
|
228
|
+
export function stopDaemon() {
|
|
229
|
+
const platform = os.platform();
|
|
230
|
+
if (platform === 'darwin') {
|
|
231
|
+
const plistPath = getLaunchdPlistPath();
|
|
232
|
+
if (fs.existsSync(plistPath)) {
|
|
233
|
+
try {
|
|
234
|
+
execSync(`launchctl unload "${plistPath}"`, { encoding: 'utf-8' });
|
|
235
|
+
fs.unlinkSync(plistPath);
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
if (process.env.AGENTS_DEBUG) {
|
|
239
|
+
console.error(`[debug] launchctl unload failed: ${err.message}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (platform === 'linux') {
|
|
245
|
+
try {
|
|
246
|
+
execSync(`systemctl --user stop ${SYSTEMD_UNIT}`, { encoding: 'utf-8' });
|
|
247
|
+
execSync(`systemctl --user disable ${SYSTEMD_UNIT}`, { encoding: 'utf-8' });
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
if (process.env.AGENTS_DEBUG) {
|
|
251
|
+
console.error(`[debug] systemctl stop failed: ${err.message}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
const unitPath = getSystemdUnitPath();
|
|
255
|
+
if (fs.existsSync(unitPath)) {
|
|
256
|
+
try {
|
|
257
|
+
fs.unlinkSync(unitPath);
|
|
258
|
+
}
|
|
259
|
+
catch { /* unit file already removed */ }
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const pid = readDaemonPid();
|
|
263
|
+
if (pid) {
|
|
264
|
+
try {
|
|
265
|
+
process.kill(pid, 'SIGTERM');
|
|
266
|
+
}
|
|
267
|
+
catch { /* process already exited */ }
|
|
268
|
+
setTimeout(() => {
|
|
269
|
+
try {
|
|
270
|
+
process.kill(pid, 0);
|
|
271
|
+
process.kill(pid, 'SIGKILL');
|
|
272
|
+
}
|
|
273
|
+
catch { /* process already exited */ }
|
|
274
|
+
}, 5000);
|
|
275
|
+
}
|
|
276
|
+
removeDaemonPid();
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
export function getDaemonStatus() {
|
|
280
|
+
const running = isDaemonRunning();
|
|
281
|
+
const pid = readDaemonPid();
|
|
282
|
+
let jobCount = 0;
|
|
283
|
+
try {
|
|
284
|
+
jobCount = listAllJobs().filter((j) => j.enabled).length;
|
|
285
|
+
}
|
|
286
|
+
catch { /* job listing failed */ }
|
|
287
|
+
return { running, pid, jobCount, logPath: getLogPath() };
|
|
288
|
+
}
|
|
289
|
+
export function readDaemonLog(lines) {
|
|
290
|
+
const logPath = getLogPath();
|
|
291
|
+
if (!fs.existsSync(logPath))
|
|
292
|
+
return '(no log file)';
|
|
293
|
+
const content = fs.readFileSync(logPath, 'utf-8');
|
|
294
|
+
if (!lines)
|
|
295
|
+
return content;
|
|
296
|
+
const allLines = content.split('\n');
|
|
297
|
+
return allLines.slice(-lines).join('\n');
|
|
298
|
+
}
|
|
299
|
+
export function signalDaemonReload() {
|
|
300
|
+
const pid = readDaemonPid();
|
|
301
|
+
if (!pid)
|
|
302
|
+
return false;
|
|
303
|
+
try {
|
|
304
|
+
process.kill(pid, 'SIGHUP');
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface DriveConfig {
|
|
2
|
+
remote: string | null;
|
|
3
|
+
attached: boolean;
|
|
4
|
+
previousTargets: {
|
|
5
|
+
configDir: string;
|
|
6
|
+
homeFiles: Record<string, string>;
|
|
7
|
+
} | null;
|
|
8
|
+
lastPull: string | null;
|
|
9
|
+
lastPush: string | null;
|
|
10
|
+
}
|
|
11
|
+
export declare function readDriveConfig(): DriveConfig;
|
|
12
|
+
export declare function writeDriveConfig(config: DriveConfig): void;
|
|
13
|
+
export declare function setRemote(target: string): void;
|
|
14
|
+
export declare function pull(): Promise<void>;
|
|
15
|
+
export declare function push(): Promise<void>;
|
|
16
|
+
export declare function attach(): void;
|
|
17
|
+
export declare function detach(): void;
|
|
18
|
+
export interface DriveStatus {
|
|
19
|
+
remote: string | null;
|
|
20
|
+
attached: boolean;
|
|
21
|
+
lastPull: string | null;
|
|
22
|
+
lastPush: string | null;
|
|
23
|
+
driveDir: string;
|
|
24
|
+
configDirTarget: string | null;
|
|
25
|
+
homeFileTargets: Record<string, string | null>;
|
|
26
|
+
}
|
|
27
|
+
export declare function getDriveStatus(): DriveStatus;
|
|
28
|
+
//# sourceMappingURL=drive-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-sync.d.ts","sourceRoot":"","sources":["../../src/lib/drive-sync.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,GAAG,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAMD,wBAAgB,eAAe,IAAI,WAAW,CAU7C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAM1D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO9C;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAW1C;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAa1C;AAED,wBAAgB,MAAM,IAAI,IAAI,CAmE7B;AAED,wBAAgB,MAAM,IAAI,IAAI,CA0B7B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAChD;AAED,wBAAgB,cAAc,IAAI,WAAW,CAsC5C"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
import { exec } from 'child_process';
|
|
5
|
+
import { promisify } from 'util';
|
|
6
|
+
import { getDriveDir } from './state.js';
|
|
7
|
+
import { AGENTS } from './agents.js';
|
|
8
|
+
const execAsync = promisify(exec);
|
|
9
|
+
const AGENT = 'claude';
|
|
10
|
+
function configPath() {
|
|
11
|
+
return path.join(getDriveDir(), 'config.json');
|
|
12
|
+
}
|
|
13
|
+
export function readDriveConfig() {
|
|
14
|
+
const p = configPath();
|
|
15
|
+
if (fs.existsSync(p)) {
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Fall through to default
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { remote: null, attached: false, previousTargets: null, lastPull: null, lastPush: null };
|
|
24
|
+
}
|
|
25
|
+
export function writeDriveConfig(config) {
|
|
26
|
+
const dir = getDriveDir();
|
|
27
|
+
if (!fs.existsSync(dir)) {
|
|
28
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
29
|
+
}
|
|
30
|
+
fs.writeFileSync(configPath(), JSON.stringify(config, null, 2));
|
|
31
|
+
}
|
|
32
|
+
export function setRemote(target) {
|
|
33
|
+
if (!target.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+$/)) {
|
|
34
|
+
throw new Error(`Invalid remote: ${target}. Expected: user@host`);
|
|
35
|
+
}
|
|
36
|
+
const config = readDriveConfig();
|
|
37
|
+
config.remote = target;
|
|
38
|
+
writeDriveConfig(config);
|
|
39
|
+
}
|
|
40
|
+
export async function pull() {
|
|
41
|
+
const config = readDriveConfig();
|
|
42
|
+
if (!config.remote)
|
|
43
|
+
throw new Error('No remote configured. Run: agents drive remote <user@host>');
|
|
44
|
+
const localDir = getDriveDir() + '/';
|
|
45
|
+
const remote = `${config.remote}:~/.agents/drive/`;
|
|
46
|
+
await execAsync(`rsync -az --exclude='config.json' ${remote} ${localDir}`);
|
|
47
|
+
config.lastPull = new Date().toISOString();
|
|
48
|
+
writeDriveConfig(config);
|
|
49
|
+
}
|
|
50
|
+
export async function push() {
|
|
51
|
+
const config = readDriveConfig();
|
|
52
|
+
if (!config.remote)
|
|
53
|
+
throw new Error('No remote configured. Run: agents drive remote <user@host>');
|
|
54
|
+
const localDir = getDriveDir() + '/';
|
|
55
|
+
const remote = `${config.remote}:~/.agents/drive/`;
|
|
56
|
+
// Ensure remote directory exists
|
|
57
|
+
await execAsync(`ssh ${config.remote} 'mkdir -p ~/.agents/drive'`);
|
|
58
|
+
await execAsync(`rsync -az --exclude='config.json' ${localDir} ${remote}`);
|
|
59
|
+
config.lastPush = new Date().toISOString();
|
|
60
|
+
writeDriveConfig(config);
|
|
61
|
+
}
|
|
62
|
+
export function attach() {
|
|
63
|
+
const config = readDriveConfig();
|
|
64
|
+
if (config.attached)
|
|
65
|
+
throw new Error('Drive is already attached');
|
|
66
|
+
const home = os.homedir();
|
|
67
|
+
const agentConfig = AGENTS[AGENT];
|
|
68
|
+
const driveDir = getDriveDir();
|
|
69
|
+
const configDirPath = agentConfig.configDir; // ~/.claude
|
|
70
|
+
const driveConfigDir = path.join(driveDir, `.${AGENT}`); // ~/.agents/drive/.claude
|
|
71
|
+
// Read current symlink target
|
|
72
|
+
let prevConfigDir = null;
|
|
73
|
+
try {
|
|
74
|
+
const stat = fs.lstatSync(configDirPath);
|
|
75
|
+
if (stat.isSymbolicLink()) {
|
|
76
|
+
prevConfigDir = fs.readlinkSync(configDirPath);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Path doesn't exist
|
|
81
|
+
}
|
|
82
|
+
if (!prevConfigDir) {
|
|
83
|
+
throw new Error(`${configDirPath} is not a symlink. Run 'agents use claude' first.`);
|
|
84
|
+
}
|
|
85
|
+
// Save previous targets for home files
|
|
86
|
+
const prevHomeFiles = {};
|
|
87
|
+
for (const hf of agentConfig.homeFiles || []) {
|
|
88
|
+
const hfPath = path.join(home, hf);
|
|
89
|
+
try {
|
|
90
|
+
const stat = fs.lstatSync(hfPath);
|
|
91
|
+
if (stat.isSymbolicLink()) {
|
|
92
|
+
prevHomeFiles[hf] = fs.readlinkSync(hfPath);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// File doesn't exist
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
config.previousTargets = {
|
|
100
|
+
configDir: prevConfigDir,
|
|
101
|
+
homeFiles: prevHomeFiles,
|
|
102
|
+
};
|
|
103
|
+
// Ensure drive config dir exists
|
|
104
|
+
if (!fs.existsSync(driveConfigDir)) {
|
|
105
|
+
fs.mkdirSync(driveConfigDir, { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
// Swap config dir symlink
|
|
108
|
+
fs.unlinkSync(configDirPath);
|
|
109
|
+
fs.symlinkSync(driveConfigDir, configDirPath);
|
|
110
|
+
// Swap home files
|
|
111
|
+
for (const hf of agentConfig.homeFiles || []) {
|
|
112
|
+
const hfPath = path.join(home, hf);
|
|
113
|
+
const driveHfPath = path.join(driveDir, hf);
|
|
114
|
+
if (!fs.existsSync(driveHfPath)) {
|
|
115
|
+
fs.writeFileSync(driveHfPath, '{}');
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
fs.unlinkSync(hfPath);
|
|
119
|
+
}
|
|
120
|
+
catch { /* doesn't exist */ }
|
|
121
|
+
fs.symlinkSync(driveHfPath, hfPath);
|
|
122
|
+
}
|
|
123
|
+
config.attached = true;
|
|
124
|
+
writeDriveConfig(config);
|
|
125
|
+
}
|
|
126
|
+
export function detach() {
|
|
127
|
+
const config = readDriveConfig();
|
|
128
|
+
if (!config.attached)
|
|
129
|
+
throw new Error('Drive is not attached');
|
|
130
|
+
if (!config.previousTargets)
|
|
131
|
+
throw new Error('No previous targets saved');
|
|
132
|
+
const home = os.homedir();
|
|
133
|
+
const agentConfig = AGENTS[AGENT];
|
|
134
|
+
// Restore config dir symlink
|
|
135
|
+
const configDirPath = agentConfig.configDir;
|
|
136
|
+
fs.unlinkSync(configDirPath);
|
|
137
|
+
fs.symlinkSync(config.previousTargets.configDir, configDirPath);
|
|
138
|
+
// Restore home files
|
|
139
|
+
for (const hf of agentConfig.homeFiles || []) {
|
|
140
|
+
const hfPath = path.join(home, hf);
|
|
141
|
+
const prevTarget = config.previousTargets.homeFiles[hf];
|
|
142
|
+
if (prevTarget) {
|
|
143
|
+
try {
|
|
144
|
+
fs.unlinkSync(hfPath);
|
|
145
|
+
}
|
|
146
|
+
catch { /* doesn't exist */ }
|
|
147
|
+
fs.symlinkSync(prevTarget, hfPath);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
config.attached = false;
|
|
151
|
+
config.previousTargets = null;
|
|
152
|
+
writeDriveConfig(config);
|
|
153
|
+
}
|
|
154
|
+
export function getDriveStatus() {
|
|
155
|
+
const config = readDriveConfig();
|
|
156
|
+
const home = os.homedir();
|
|
157
|
+
const agentConfig = AGENTS[AGENT];
|
|
158
|
+
let configDirTarget = null;
|
|
159
|
+
try {
|
|
160
|
+
const stat = fs.lstatSync(agentConfig.configDir);
|
|
161
|
+
if (stat.isSymbolicLink()) {
|
|
162
|
+
configDirTarget = fs.readlinkSync(agentConfig.configDir);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Not a symlink or doesn't exist
|
|
167
|
+
}
|
|
168
|
+
const homeFileTargets = {};
|
|
169
|
+
for (const hf of agentConfig.homeFiles || []) {
|
|
170
|
+
try {
|
|
171
|
+
const stat = fs.lstatSync(path.join(home, hf));
|
|
172
|
+
if (stat.isSymbolicLink()) {
|
|
173
|
+
homeFileTargets[hf] = fs.readlinkSync(path.join(home, hf));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
homeFileTargets[hf] = null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
homeFileTargets[hf] = null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
remote: config.remote,
|
|
185
|
+
attached: config.attached,
|
|
186
|
+
lastPull: config.lastPull,
|
|
187
|
+
lastPush: config.lastPush,
|
|
188
|
+
driveDir: getDriveDir(),
|
|
189
|
+
configDirTarget,
|
|
190
|
+
homeFileTargets,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=drive-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-sync.js","sourceRoot":"","sources":["../../src/lib/drive-sync.ts"],"names":[],"mappings":"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"}
|