@cluesmith/codev 3.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/bin/af.js +2 -2
- package/bin/afx.js +8 -0
- package/bin/consult.js +2 -1
- package/bin/team.js +2 -1
- package/{dashboard/dist/assets/index-nr0cXxtf.css → dashboard-dist/assets/index-BWYZtvwm.css} +1 -1
- package/dashboard-dist/assets/index-Dn9zmcKp.js +195 -0
- package/dashboard-dist/assets/index-Dn9zmcKp.js.map +1 -0
- package/{dashboard/dist → dashboard-dist}/index.html +2 -2
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +27 -19
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/architect.d.ts +4 -4
- package/dist/agent-farm/commands/architect.d.ts.map +1 -1
- package/dist/agent-farm/commands/architect.js +23 -12
- package/dist/agent-farm/commands/architect.js.map +1 -1
- package/dist/agent-farm/commands/attach.d.ts.map +1 -1
- package/dist/agent-farm/commands/attach.js +101 -11
- package/dist/agent-farm/commands/attach.js.map +1 -1
- package/dist/agent-farm/commands/bench.d.ts +1 -1
- package/dist/agent-farm/commands/bench.js +1 -1
- package/dist/agent-farm/commands/cron.js +1 -1
- package/dist/agent-farm/commands/cron.js.map +1 -1
- package/dist/agent-farm/commands/db.d.ts +3 -3
- package/dist/agent-farm/commands/db.js +4 -4
- package/dist/agent-farm/commands/db.js.map +1 -1
- package/dist/agent-farm/commands/open.js +2 -2
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/rename.js +1 -1
- package/dist/agent-farm/commands/rename.js.map +1 -1
- package/dist/agent-farm/commands/send.js +3 -3
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/shell.js +3 -3
- package/dist/agent-farm/commands/shell.js.map +1 -1
- package/dist/agent-farm/commands/spawn-roles.d.ts +9 -5
- package/dist/agent-farm/commands/spawn-roles.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-roles.js +48 -28
- package/dist/agent-farm/commands/spawn-roles.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts +5 -5
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +80 -13
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts +6 -6
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +90 -53
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +48 -3
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/team-update.d.ts +1 -1
- package/dist/agent-farm/commands/team-update.js +1 -1
- package/dist/agent-farm/commands/team.d.ts +1 -1
- package/dist/agent-farm/commands/team.js +1 -1
- package/dist/agent-farm/commands/tower-cloud.d.ts +2 -2
- package/dist/agent-farm/commands/tower-cloud.js +3 -3
- package/dist/agent-farm/commands/tower-cloud.js.map +1 -1
- package/dist/agent-farm/commands/tower.js +2 -2
- package/dist/agent-farm/commands/tower.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +47 -0
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/schema.d.ts +1 -1
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +1 -1
- package/dist/agent-farm/db/types.d.ts +1 -1
- package/dist/agent-farm/lib/cloud-config.js +2 -2
- package/dist/agent-farm/lib/cloud-config.js.map +1 -1
- package/dist/agent-farm/lib/tower-client.d.ts +6 -230
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js +6 -293
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +1 -1
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/message-write.d.ts +24 -0
- package/dist/agent-farm/servers/message-write.d.ts.map +1 -0
- package/dist/agent-farm/servers/message-write.js +63 -0
- package/dist/agent-farm/servers/message-write.js.map +1 -0
- package/dist/agent-farm/servers/overview.d.ts +4 -1
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +38 -5
- package/dist/agent-farm/servers/overview.js.map +1 -1
- package/dist/agent-farm/servers/send-buffer.d.ts +4 -3
- package/dist/agent-farm/servers/send-buffer.d.ts.map +1 -1
- package/dist/agent-farm/servers/send-buffer.js +7 -4
- package/dist/agent-farm/servers/send-buffer.js.map +1 -1
- package/dist/agent-farm/servers/tower-cron-parser.js +1 -1
- package/dist/agent-farm/servers/tower-cron-parser.js.map +1 -1
- package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-cron.js +4 -5
- package/dist/agent-farm/servers/tower-cron.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +6 -5
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +19 -16
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +19 -4
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +2 -2
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +47 -18
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.js +2 -2
- package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
- package/dist/agent-farm/servers/tower-utils.d.ts +9 -6
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +12 -6
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/state.js +1 -1
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +11 -2
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +11 -0
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +21 -0
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/harness.d.ts +85 -0
- package/dist/agent-farm/utils/harness.d.ts.map +1 -0
- package/dist/agent-farm/utils/harness.js +212 -0
- package/dist/agent-farm/utils/harness.js.map +1 -0
- package/dist/agent-farm/utils/server-utils.d.ts +13 -0
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
- package/dist/agent-farm/utils/server-utils.js +38 -0
- package/dist/agent-farm/utils/server-utils.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt.js +2 -2
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts +37 -3
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +220 -150
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +54 -8
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/artifacts.d.ts +69 -0
- package/dist/commands/porch/artifacts.d.ts.map +1 -0
- package/dist/commands/porch/artifacts.js +368 -0
- package/dist/commands/porch/artifacts.js.map +1 -0
- package/dist/commands/porch/checks.d.ts +8 -1
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +98 -1
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/index.d.ts +18 -7
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +299 -61
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts.map +1 -1
- package/dist/commands/porch/next.js +72 -74
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/commands/porch/notify.d.ts +2 -2
- package/dist/commands/porch/notify.js +5 -5
- package/dist/commands/porch/notify.js.map +1 -1
- package/dist/commands/porch/prompts.d.ts +2 -1
- package/dist/commands/porch/prompts.d.ts.map +1 -1
- package/dist/commands/porch/prompts.js +23 -14
- package/dist/commands/porch/prompts.js.map +1 -1
- package/dist/commands/porch/state.d.ts +27 -2
- package/dist/commands/porch/state.d.ts.map +1 -1
- package/dist/commands/porch/state.js +96 -9
- package/dist/commands/porch/state.js.map +1 -1
- package/dist/commands/porch/types.d.ts +8 -0
- package/dist/commands/porch/types.d.ts.map +1 -1
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +7 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/forge-contracts.d.ts +10 -1
- package/dist/lib/forge-contracts.d.ts.map +1 -1
- package/dist/lib/forge-contracts.js.map +1 -1
- package/dist/lib/forge.d.ts.map +1 -1
- package/dist/lib/forge.js +25 -7
- package/dist/lib/forge.js.map +1 -1
- package/dist/lib/team-github.d.ts +49 -0
- package/dist/lib/team-github.d.ts.map +1 -1
- package/dist/lib/team-github.js +115 -6
- package/dist/lib/team-github.js.map +1 -1
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +2 -0
- package/dist/terminal/pty-manager.js.map +1 -1
- package/dist/terminal/ws-protocol.d.ts +10 -8
- package/dist/terminal/ws-protocol.d.ts.map +1 -1
- package/dist/terminal/ws-protocol.js +3 -0
- package/dist/terminal/ws-protocol.js.map +1 -1
- package/package.json +28 -25
- package/scripts/forge/gitea/auth-status.sh +0 -0
- package/scripts/forge/gitea/issue-comment.sh +0 -0
- package/scripts/forge/gitea/issue-list.sh +0 -0
- package/scripts/forge/gitea/issue-view.sh +0 -0
- package/scripts/forge/gitea/pr-exists.sh +4 -1
- package/scripts/forge/gitea/pr-list.sh +0 -0
- package/scripts/forge/gitea/pr-merge.sh +0 -0
- package/scripts/forge/gitea/pr-view.sh +0 -0
- package/scripts/forge/gitea/recently-closed.sh +0 -0
- package/scripts/forge/gitea/recently-merged.sh +0 -0
- package/scripts/forge/gitea/repo-archive.sh +0 -0
- package/scripts/forge/gitea/user-identity.sh +0 -0
- package/scripts/forge/github/auth-status.sh +0 -0
- package/scripts/forge/github/issue-comment.sh +0 -0
- package/scripts/forge/github/issue-list.sh +2 -2
- package/scripts/forge/github/issue-view.sh +0 -0
- package/scripts/forge/github/on-it-timestamps.sh +0 -0
- package/scripts/forge/github/pr-diff.sh +0 -0
- package/scripts/forge/github/pr-exists.sh +3 -1
- package/scripts/forge/github/pr-list.sh +2 -2
- package/scripts/forge/github/pr-merge.sh +0 -0
- package/scripts/forge/github/pr-search.sh +0 -0
- package/scripts/forge/github/pr-view.sh +0 -0
- package/scripts/forge/github/recently-closed.sh +0 -0
- package/scripts/forge/github/recently-merged.sh +0 -0
- package/scripts/forge/github/repo-archive.sh +0 -0
- package/scripts/forge/github/team-activity.sh +0 -0
- package/scripts/forge/github/user-identity.sh +0 -0
- package/scripts/forge/gitlab/auth-status.sh +0 -0
- package/scripts/forge/gitlab/issue-comment.sh +0 -0
- package/scripts/forge/gitlab/issue-list.sh +0 -0
- package/scripts/forge/gitlab/issue-view.sh +0 -0
- package/scripts/forge/gitlab/pr-diff.sh +0 -0
- package/scripts/forge/gitlab/pr-exists.sh +3 -1
- package/scripts/forge/gitlab/pr-list.sh +0 -0
- package/scripts/forge/gitlab/pr-merge.sh +0 -0
- package/scripts/forge/gitlab/pr-search.sh +0 -0
- package/scripts/forge/gitlab/pr-view.sh +0 -0
- package/scripts/forge/gitlab/recently-closed.sh +0 -0
- package/scripts/forge/gitlab/recently-merged.sh +0 -0
- package/scripts/forge/gitlab/repo-archive.sh +0 -0
- package/scripts/forge/gitlab/user-identity.sh +0 -0
- package/scripts/forge/linear/auth-status.sh +15 -0
- package/scripts/forge/linear/issue-comment.sh +38 -0
- package/scripts/forge/linear/issue-list.sh +35 -0
- package/scripts/forge/linear/issue-view.sh +37 -0
- package/scripts/forge/linear/recently-closed.sh +45 -0
- package/scripts/forge/linear/user-identity.sh +15 -0
- package/scripts/postinstall.mjs +51 -0
- package/skeleton/.claude/skills/afx/SKILL.md +144 -0
- package/skeleton/.claude/skills/codev/SKILL.md +3 -3
- package/skeleton/.claude/skills/consult/SKILL.md +1 -1
- package/skeleton/.claude/skills/porch/SKILL.md +2 -2
- package/skeleton/.claude/skills/update-arch-docs/SKILL.md +107 -0
- package/skeleton/DEPENDENCIES.md +1 -1
- package/skeleton/builders.md +4 -4
- package/skeleton/protocol-schema.json +2 -2
- package/skeleton/protocols/air/builder-prompt.md +6 -6
- package/skeleton/protocols/air/prompts/pr.md +17 -5
- package/skeleton/protocols/air/protocol.md +1 -2
- package/skeleton/protocols/aspir/builder-prompt.md +28 -6
- package/skeleton/protocols/aspir/prompts/review.md +11 -0
- package/skeleton/protocols/aspir/protocol.json +9 -1
- package/skeleton/protocols/aspir/protocol.md +1 -1
- package/skeleton/protocols/aspir/templates/plan.md +0 -20
- package/skeleton/protocols/aspir/templates/spec.md +0 -28
- package/skeleton/protocols/bugfix/builder-prompt.md +6 -6
- package/skeleton/protocols/bugfix/prompts/pr.md +16 -4
- package/skeleton/protocols/experiment/builder-prompt.md +15 -0
- package/skeleton/protocols/experiment/protocol.md +1 -6
- package/skeleton/protocols/maintain/builder-prompt.md +12 -11
- package/skeleton/protocols/maintain/prompts/maintain.md +88 -0
- package/skeleton/protocols/maintain/prompts/review.md +84 -0
- package/skeleton/protocols/maintain/protocol.json +14 -68
- package/skeleton/protocols/maintain/protocol.md +163 -394
- package/skeleton/protocols/maintain/templates/maintenance-run.md +18 -49
- package/skeleton/protocols/protocol-schema.json +1 -1
- package/skeleton/protocols/research/builder-prompt.md +85 -0
- package/skeleton/protocols/research/protocol.json +118 -0
- package/skeleton/protocols/research/protocol.md +169 -0
- package/skeleton/protocols/spike/builder-prompt.md +1 -1
- package/skeleton/protocols/spike/protocol.md +4 -4
- package/skeleton/protocols/spir/builder-prompt.md +28 -5
- package/skeleton/protocols/spir/prompts/review.md +11 -0
- package/skeleton/protocols/spir/protocol.json +9 -1
- package/skeleton/protocols/spir/protocol.md +6 -5
- package/skeleton/protocols/spir/templates/plan.md +0 -20
- package/skeleton/protocols/spir/templates/spec.md +0 -28
- package/skeleton/resources/commands/agent-farm.md +84 -84
- package/skeleton/resources/commands/codev.md +1 -1
- package/skeleton/resources/commands/consult.md +16 -7
- package/skeleton/resources/commands/overview.md +14 -15
- package/skeleton/resources/risk-triage.md +2 -2
- package/skeleton/resources/workflow-reference.md +14 -14
- package/skeleton/roles/architect.md +39 -39
- package/skeleton/roles/builder.md +22 -14
- package/skeleton/templates/AGENTS.md +5 -3
- package/skeleton/templates/CLAUDE.md +5 -3
- package/skeleton/templates/arch.md +100 -30
- package/skeleton/templates/cheatsheet.md +12 -12
- package/skeleton/templates/lessons-learned.md +45 -7
- package/templates/3d-viewer.html +16 -18
- package/templates/tower.html +1 -1
- package/dashboard/dist/assets/index-CTrlY11L.js +0 -194
- package/dashboard/dist/assets/index-CTrlY11L.js.map +0 -1
- package/skeleton/.claude/skills/af/SKILL.md +0 -146
- package/skeleton/porch/prompts/understand.md +0 -61
- package/skeleton/porch/prompts/verify.md +0 -58
- package/skeleton/protocols/maintain/prompts/audit.md +0 -111
- package/skeleton/protocols/maintain/prompts/clean.md +0 -91
- package/skeleton/protocols/maintain/prompts/sync.md +0 -113
- package/skeleton/protocols/maintain/prompts/verify.md +0 -110
- package/skeleton/protocols/tick/builder-prompt.md +0 -65
- package/skeleton/protocols/tick/consult-types/impl-review.md +0 -72
- package/skeleton/protocols/tick/consult-types/plan-review.md +0 -59
- package/skeleton/protocols/tick/consult-types/pr-review.md +0 -72
- package/skeleton/protocols/tick/consult-types/spec-review.md +0 -55
- package/skeleton/protocols/tick/protocol.json +0 -151
- package/skeleton/protocols/tick/protocol.md +0 -277
- package/skeleton/protocols/tick/templates/plan.md +0 -67
- package/skeleton/protocols/tick/templates/review.md +0 -89
- package/skeleton/protocols/tick/templates/spec.md +0 -61
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-config.js","sourceRoot":"","sources":["../../../src/agent-farm/lib/cloud-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAYzC,MAAM,eAAe,GAA0B;IAC7C,UAAU;IACV,YAAY;IACZ,SAAS;IACT,YAAY;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IAExC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE9C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,mBAAmB,UAAU,
|
|
1
|
+
{"version":3,"file":"cloud-config.js","sourceRoot":"","sources":["../../../src/agent-farm/lib/cloud-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,234 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tower API Client
|
|
2
|
+
* Tower API Client — re-exports from @cluesmith/codev-core
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* All implementation lives in packages/core/src/tower-client.ts.
|
|
5
|
+
* This file preserves the import path for existing consumers.
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
* Workspace info returned by tower API
|
|
11
|
-
*/
|
|
12
|
-
export interface TowerWorkspace {
|
|
13
|
-
path: string;
|
|
14
|
-
name: string;
|
|
15
|
-
active: boolean;
|
|
16
|
-
proxyUrl: string;
|
|
17
|
-
terminals: number;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Workspace status with detailed info
|
|
21
|
-
*/
|
|
22
|
-
export interface TowerWorkspaceStatus {
|
|
23
|
-
path: string;
|
|
24
|
-
name: string;
|
|
25
|
-
active: boolean;
|
|
26
|
-
terminals: Array<{
|
|
27
|
-
type: 'architect' | 'builder' | 'shell';
|
|
28
|
-
id: string;
|
|
29
|
-
label: string;
|
|
30
|
-
url: string;
|
|
31
|
-
active: boolean;
|
|
32
|
-
}>;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Health status from tower
|
|
36
|
-
*/
|
|
37
|
-
export interface TowerHealth {
|
|
38
|
-
status: 'healthy' | 'degraded';
|
|
39
|
-
uptime: number;
|
|
40
|
-
activeWorkspaces: number;
|
|
41
|
-
totalWorkspaces: number;
|
|
42
|
-
memoryUsage: number;
|
|
43
|
-
timestamp: string;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Tunnel status from tower
|
|
47
|
-
*/
|
|
48
|
-
export interface TowerTunnelStatus {
|
|
49
|
-
registered: boolean;
|
|
50
|
-
state: string;
|
|
51
|
-
uptime: number | null;
|
|
52
|
-
towerId: string | null;
|
|
53
|
-
towerName: string | null;
|
|
54
|
-
serverUrl: string | null;
|
|
55
|
-
accessUrl: string | null;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Tower daemon status (instances overview)
|
|
59
|
-
*/
|
|
60
|
-
export interface TowerStatus {
|
|
61
|
-
instances?: Array<{
|
|
62
|
-
workspaceName: string;
|
|
63
|
-
running: boolean;
|
|
64
|
-
terminals: unknown[];
|
|
65
|
-
}>;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Terminal info from tower
|
|
69
|
-
*/
|
|
70
|
-
export interface TowerTerminal {
|
|
71
|
-
id: string;
|
|
72
|
-
pid: number;
|
|
73
|
-
cols: number;
|
|
74
|
-
rows: number;
|
|
75
|
-
label: string;
|
|
76
|
-
status: 'running' | 'exited';
|
|
77
|
-
createdAt: string;
|
|
78
|
-
wsPath: string;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Encode a workspace path for use in tower API URLs
|
|
82
|
-
*/
|
|
83
|
-
export declare function encodeWorkspacePath(workspacePath: string): string;
|
|
84
|
-
/**
|
|
85
|
-
* Decode a workspace path from tower API URL
|
|
86
|
-
*/
|
|
87
|
-
export declare function decodeWorkspacePath(encoded: string): string;
|
|
88
|
-
/**
|
|
89
|
-
* Tower API client class
|
|
90
|
-
*/
|
|
91
|
-
export declare class TowerClient {
|
|
92
|
-
private readonly baseUrl;
|
|
93
|
-
private readonly localKey;
|
|
94
|
-
constructor(port?: number);
|
|
95
|
-
/**
|
|
96
|
-
* Make a request to the tower API
|
|
97
|
-
*/
|
|
98
|
-
request<T>(path: string, options?: RequestInit): Promise<{
|
|
99
|
-
ok: boolean;
|
|
100
|
-
status: number;
|
|
101
|
-
data?: T;
|
|
102
|
-
error?: string;
|
|
103
|
-
}>;
|
|
104
|
-
/**
|
|
105
|
-
* Check if tower is running and healthy
|
|
106
|
-
*/
|
|
107
|
-
isRunning(): Promise<boolean>;
|
|
108
|
-
/**
|
|
109
|
-
* Get tower health status
|
|
110
|
-
*/
|
|
111
|
-
getHealth(): Promise<TowerHealth | null>;
|
|
112
|
-
/**
|
|
113
|
-
* List all workspaces known to tower
|
|
114
|
-
*/
|
|
115
|
-
listWorkspaces(): Promise<TowerWorkspace[]>;
|
|
116
|
-
/**
|
|
117
|
-
* Activate a workspace (start its dashboard)
|
|
118
|
-
*/
|
|
119
|
-
activateWorkspace(workspacePath: string): Promise<{
|
|
120
|
-
ok: boolean;
|
|
121
|
-
adopted?: boolean;
|
|
122
|
-
error?: string;
|
|
123
|
-
}>;
|
|
124
|
-
/**
|
|
125
|
-
* Deactivate a workspace (stop its dashboard)
|
|
126
|
-
*/
|
|
127
|
-
deactivateWorkspace(workspacePath: string): Promise<{
|
|
128
|
-
ok: boolean;
|
|
129
|
-
stopped?: number[];
|
|
130
|
-
error?: string;
|
|
131
|
-
}>;
|
|
132
|
-
/**
|
|
133
|
-
* Get status of a specific workspace
|
|
134
|
-
*/
|
|
135
|
-
getWorkspaceStatus(workspacePath: string): Promise<TowerWorkspaceStatus | null>;
|
|
136
|
-
/**
|
|
137
|
-
* Create a terminal session
|
|
138
|
-
*/
|
|
139
|
-
createTerminal(options: {
|
|
140
|
-
command?: string;
|
|
141
|
-
args?: string[];
|
|
142
|
-
cols?: number;
|
|
143
|
-
rows?: number;
|
|
144
|
-
cwd?: string;
|
|
145
|
-
label?: string;
|
|
146
|
-
env?: Record<string, string>;
|
|
147
|
-
persistent?: boolean;
|
|
148
|
-
workspacePath?: string;
|
|
149
|
-
type?: 'architect' | 'builder' | 'shell';
|
|
150
|
-
roleId?: string;
|
|
151
|
-
}): Promise<TowerTerminal | null>;
|
|
152
|
-
/**
|
|
153
|
-
* List all terminal sessions
|
|
154
|
-
*/
|
|
155
|
-
listTerminals(): Promise<TowerTerminal[]>;
|
|
156
|
-
/**
|
|
157
|
-
* Get terminal info
|
|
158
|
-
*/
|
|
159
|
-
getTerminal(terminalId: string): Promise<TowerTerminal | null>;
|
|
160
|
-
/**
|
|
161
|
-
* Write data to a terminal session
|
|
162
|
-
*/
|
|
163
|
-
writeTerminal(terminalId: string, data: string): Promise<boolean>;
|
|
164
|
-
/**
|
|
165
|
-
* Kill a terminal session
|
|
166
|
-
*/
|
|
167
|
-
killTerminal(terminalId: string): Promise<boolean>;
|
|
168
|
-
/**
|
|
169
|
-
* Resize a terminal
|
|
170
|
-
*/
|
|
171
|
-
resizeTerminal(terminalId: string, cols: number, rows: number): Promise<TowerTerminal | null>;
|
|
172
|
-
/**
|
|
173
|
-
* Rename a terminal session (Spec 468)
|
|
174
|
-
*/
|
|
175
|
-
renameTerminal(sessionId: string, name: string): Promise<{
|
|
176
|
-
ok: boolean;
|
|
177
|
-
status: number;
|
|
178
|
-
data?: {
|
|
179
|
-
id: string;
|
|
180
|
-
name: string;
|
|
181
|
-
};
|
|
182
|
-
error?: string;
|
|
183
|
-
}>;
|
|
184
|
-
/**
|
|
185
|
-
* Get the tower dashboard URL for a workspace
|
|
186
|
-
*/
|
|
187
|
-
getWorkspaceUrl(workspacePath: string): string;
|
|
188
|
-
/**
|
|
189
|
-
* Send a message to an agent via address resolution.
|
|
190
|
-
* Uses POST /api/send which resolves [project:]agent addresses.
|
|
191
|
-
*/
|
|
192
|
-
sendMessage(to: string, message: string, options?: {
|
|
193
|
-
from?: string;
|
|
194
|
-
workspace?: string;
|
|
195
|
-
fromWorkspace?: string;
|
|
196
|
-
raw?: boolean;
|
|
197
|
-
noEnter?: boolean;
|
|
198
|
-
interrupt?: boolean;
|
|
199
|
-
}): Promise<{
|
|
200
|
-
ok: boolean;
|
|
201
|
-
resolvedTo?: string;
|
|
202
|
-
error?: string;
|
|
203
|
-
}>;
|
|
204
|
-
/**
|
|
205
|
-
* Signal the tunnel to connect or disconnect
|
|
206
|
-
*/
|
|
207
|
-
signalTunnel(action: 'connect' | 'disconnect'): Promise<void>;
|
|
208
|
-
/**
|
|
209
|
-
* Get tunnel status from the running tower daemon
|
|
210
|
-
*/
|
|
211
|
-
getTunnelStatus(): Promise<TowerTunnelStatus | null>;
|
|
212
|
-
/**
|
|
213
|
-
* Get tower daemon status (instances overview)
|
|
214
|
-
*/
|
|
215
|
-
getStatus(): Promise<TowerStatus | null>;
|
|
216
|
-
/**
|
|
217
|
-
* Send a push notification to the tower dashboard
|
|
218
|
-
*/
|
|
219
|
-
sendNotification(payload: {
|
|
220
|
-
type: string;
|
|
221
|
-
title: string;
|
|
222
|
-
body: string;
|
|
223
|
-
workspace: string;
|
|
224
|
-
}): Promise<boolean>;
|
|
225
|
-
/**
|
|
226
|
-
* Get the WebSocket URL for a terminal
|
|
227
|
-
*/
|
|
228
|
-
getTerminalWsUrl(terminalId: string): string;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Get the default tower client
|
|
232
|
-
*/
|
|
233
|
-
export declare function getTowerClient(port?: number): TowerClient;
|
|
7
|
+
export { TowerClient, getTowerClient, type TowerClientOptions, type TowerWorkspace, type TowerWorkspaceStatus, type TowerHealth, type TowerTunnelStatus, type TowerStatus, type TowerTerminal, } from '@cluesmith/codev-core/tower-client';
|
|
8
|
+
export { encodeWorkspacePath, decodeWorkspacePath } from '@cluesmith/codev-core/workspace';
|
|
9
|
+
export { DEFAULT_TOWER_PORT, AGENT_FARM_DIR } from '@cluesmith/codev-core/constants';
|
|
234
10
|
//# sourceMappingURL=tower-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tower-client.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/lib/tower-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"tower-client.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/lib/tower-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1,297 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tower API Client
|
|
2
|
+
* Tower API Client — re-exports from @cluesmith/codev-core
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* All implementation lives in packages/core/src/tower-client.ts.
|
|
5
|
+
* This file preserves the import path for existing consumers.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import { randomBytes } from 'node:crypto';
|
|
11
|
-
// Tower configuration
|
|
12
|
-
export const DEFAULT_TOWER_PORT = 4100;
|
|
13
|
-
export const AGENT_FARM_DIR = resolve(homedir(), '.agent-farm');
|
|
14
|
-
const LOCAL_KEY_PATH = resolve(AGENT_FARM_DIR, 'local-key');
|
|
15
|
-
// Request timeout
|
|
16
|
-
const REQUEST_TIMEOUT_MS = 10000;
|
|
17
|
-
/**
|
|
18
|
-
* Get or create the local key for CLI authentication
|
|
19
|
-
*/
|
|
20
|
-
function getLocalKey() {
|
|
21
|
-
if (!existsSync(AGENT_FARM_DIR)) {
|
|
22
|
-
mkdirSync(AGENT_FARM_DIR, { recursive: true, mode: 0o700 });
|
|
23
|
-
}
|
|
24
|
-
if (!existsSync(LOCAL_KEY_PATH)) {
|
|
25
|
-
const key = randomBytes(32).toString('hex');
|
|
26
|
-
writeFileSync(LOCAL_KEY_PATH, key, { mode: 0o600 });
|
|
27
|
-
return key;
|
|
28
|
-
}
|
|
29
|
-
return readFileSync(LOCAL_KEY_PATH, 'utf-8').trim();
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Encode a workspace path for use in tower API URLs
|
|
33
|
-
*/
|
|
34
|
-
export function encodeWorkspacePath(workspacePath) {
|
|
35
|
-
return Buffer.from(workspacePath).toString('base64url');
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Decode a workspace path from tower API URL
|
|
39
|
-
*/
|
|
40
|
-
export function decodeWorkspacePath(encoded) {
|
|
41
|
-
return Buffer.from(encoded, 'base64url').toString('utf-8');
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Tower API client class
|
|
45
|
-
*/
|
|
46
|
-
export class TowerClient {
|
|
47
|
-
baseUrl;
|
|
48
|
-
localKey;
|
|
49
|
-
constructor(port = DEFAULT_TOWER_PORT) {
|
|
50
|
-
this.baseUrl = `http://localhost:${port}`;
|
|
51
|
-
this.localKey = getLocalKey();
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Make a request to the tower API
|
|
55
|
-
*/
|
|
56
|
-
async request(path, options = {}) {
|
|
57
|
-
try {
|
|
58
|
-
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
59
|
-
...options,
|
|
60
|
-
headers: {
|
|
61
|
-
...options.headers,
|
|
62
|
-
'codev-web-key': this.localKey,
|
|
63
|
-
'Content-Type': 'application/json',
|
|
64
|
-
},
|
|
65
|
-
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
|
|
66
|
-
});
|
|
67
|
-
if (!response.ok) {
|
|
68
|
-
const text = await response.text();
|
|
69
|
-
let error;
|
|
70
|
-
try {
|
|
71
|
-
const json = JSON.parse(text);
|
|
72
|
-
error = json.error || json.message || text;
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
error = text;
|
|
76
|
-
}
|
|
77
|
-
return { ok: false, status: response.status, error };
|
|
78
|
-
}
|
|
79
|
-
if (response.status === 204) {
|
|
80
|
-
return { ok: true, status: 204 };
|
|
81
|
-
}
|
|
82
|
-
const data = (await response.json());
|
|
83
|
-
return { ok: true, status: response.status, data };
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
87
|
-
if (message.includes('ECONNREFUSED')) {
|
|
88
|
-
return { ok: false, status: 0, error: 'Tower not running' };
|
|
89
|
-
}
|
|
90
|
-
if (message.includes('timeout')) {
|
|
91
|
-
return { ok: false, status: 0, error: 'Request timeout' };
|
|
92
|
-
}
|
|
93
|
-
return { ok: false, status: 0, error: message };
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Check if tower is running and healthy
|
|
98
|
-
*/
|
|
99
|
-
async isRunning() {
|
|
100
|
-
const result = await this.request('/health');
|
|
101
|
-
return result.ok && result.data?.status === 'healthy';
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Get tower health status
|
|
105
|
-
*/
|
|
106
|
-
async getHealth() {
|
|
107
|
-
const result = await this.request('/health');
|
|
108
|
-
return result.ok ? result.data : null;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* List all workspaces known to tower
|
|
112
|
-
*/
|
|
113
|
-
async listWorkspaces() {
|
|
114
|
-
const result = await this.request('/api/workspaces');
|
|
115
|
-
return result.ok ? result.data.workspaces : [];
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Activate a workspace (start its dashboard)
|
|
119
|
-
*/
|
|
120
|
-
async activateWorkspace(workspacePath) {
|
|
121
|
-
const encoded = encodeWorkspacePath(workspacePath);
|
|
122
|
-
const result = await this.request(`/api/workspaces/${encoded}/activate`, { method: 'POST' });
|
|
123
|
-
if (!result.ok) {
|
|
124
|
-
return { ok: false, error: result.error };
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
ok: result.data?.success ?? true,
|
|
128
|
-
adopted: result.data?.adopted,
|
|
129
|
-
error: result.data?.error,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Deactivate a workspace (stop its dashboard)
|
|
134
|
-
*/
|
|
135
|
-
async deactivateWorkspace(workspacePath) {
|
|
136
|
-
const encoded = encodeWorkspacePath(workspacePath);
|
|
137
|
-
const result = await this.request(`/api/workspaces/${encoded}/deactivate`, { method: 'POST' });
|
|
138
|
-
if (!result.ok) {
|
|
139
|
-
return { ok: false, error: result.error };
|
|
140
|
-
}
|
|
141
|
-
return {
|
|
142
|
-
ok: result.data?.success ?? true,
|
|
143
|
-
stopped: result.data?.stopped,
|
|
144
|
-
error: result.data?.error,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Get status of a specific workspace
|
|
149
|
-
*/
|
|
150
|
-
async getWorkspaceStatus(workspacePath) {
|
|
151
|
-
const encoded = encodeWorkspacePath(workspacePath);
|
|
152
|
-
const result = await this.request(`/api/workspaces/${encoded}/status`);
|
|
153
|
-
return result.ok ? result.data : null;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Create a terminal session
|
|
157
|
-
*/
|
|
158
|
-
async createTerminal(options) {
|
|
159
|
-
const result = await this.request('/api/terminals', {
|
|
160
|
-
method: 'POST',
|
|
161
|
-
body: JSON.stringify(options),
|
|
162
|
-
});
|
|
163
|
-
return result.ok ? result.data : null;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* List all terminal sessions
|
|
167
|
-
*/
|
|
168
|
-
async listTerminals() {
|
|
169
|
-
const result = await this.request('/api/terminals');
|
|
170
|
-
return result.ok ? result.data.terminals : [];
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Get terminal info
|
|
174
|
-
*/
|
|
175
|
-
async getTerminal(terminalId) {
|
|
176
|
-
const result = await this.request(`/api/terminals/${terminalId}`);
|
|
177
|
-
return result.ok ? result.data : null;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Write data to a terminal session
|
|
181
|
-
*/
|
|
182
|
-
async writeTerminal(terminalId, data) {
|
|
183
|
-
const result = await this.request(`/api/terminals/${terminalId}/write`, {
|
|
184
|
-
method: 'POST',
|
|
185
|
-
body: JSON.stringify({ data }),
|
|
186
|
-
});
|
|
187
|
-
return result.ok;
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Kill a terminal session
|
|
191
|
-
*/
|
|
192
|
-
async killTerminal(terminalId) {
|
|
193
|
-
const result = await this.request(`/api/terminals/${terminalId}`, { method: 'DELETE' });
|
|
194
|
-
return result.ok;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Resize a terminal
|
|
198
|
-
*/
|
|
199
|
-
async resizeTerminal(terminalId, cols, rows) {
|
|
200
|
-
const result = await this.request(`/api/terminals/${terminalId}/resize`, {
|
|
201
|
-
method: 'POST',
|
|
202
|
-
body: JSON.stringify({ cols, rows }),
|
|
203
|
-
});
|
|
204
|
-
return result.ok ? result.data : null;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Rename a terminal session (Spec 468)
|
|
208
|
-
*/
|
|
209
|
-
async renameTerminal(sessionId, name) {
|
|
210
|
-
return this.request(`/api/terminals/${sessionId}/rename`, {
|
|
211
|
-
method: 'PATCH',
|
|
212
|
-
body: JSON.stringify({ name }),
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Get the tower dashboard URL for a workspace
|
|
217
|
-
*/
|
|
218
|
-
getWorkspaceUrl(workspacePath) {
|
|
219
|
-
const encoded = encodeWorkspacePath(workspacePath);
|
|
220
|
-
return `${this.baseUrl}/workspace/${encoded}/`;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Send a message to an agent via address resolution.
|
|
224
|
-
* Uses POST /api/send which resolves [project:]agent addresses.
|
|
225
|
-
*/
|
|
226
|
-
async sendMessage(to, message, options) {
|
|
227
|
-
const result = await this.request('/api/send', {
|
|
228
|
-
method: 'POST',
|
|
229
|
-
body: JSON.stringify({
|
|
230
|
-
to,
|
|
231
|
-
message,
|
|
232
|
-
from: options?.from,
|
|
233
|
-
workspace: options?.workspace,
|
|
234
|
-
fromWorkspace: options?.fromWorkspace,
|
|
235
|
-
options: {
|
|
236
|
-
raw: options?.raw,
|
|
237
|
-
noEnter: options?.noEnter,
|
|
238
|
-
interrupt: options?.interrupt,
|
|
239
|
-
},
|
|
240
|
-
}),
|
|
241
|
-
});
|
|
242
|
-
if (!result.ok) {
|
|
243
|
-
return { ok: false, error: result.error };
|
|
244
|
-
}
|
|
245
|
-
return { ok: true, resolvedTo: result.data.resolvedTo };
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Signal the tunnel to connect or disconnect
|
|
249
|
-
*/
|
|
250
|
-
async signalTunnel(action) {
|
|
251
|
-
await this.request(`/api/tunnel/${action}`, { method: 'POST' }).catch(() => { });
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Get tunnel status from the running tower daemon
|
|
255
|
-
*/
|
|
256
|
-
async getTunnelStatus() {
|
|
257
|
-
const result = await this.request('/api/tunnel/status');
|
|
258
|
-
return result.ok ? result.data : null;
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Get tower daemon status (instances overview)
|
|
262
|
-
*/
|
|
263
|
-
async getStatus() {
|
|
264
|
-
const result = await this.request('/api/status');
|
|
265
|
-
return result.ok ? result.data : null;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Send a push notification to the tower dashboard
|
|
269
|
-
*/
|
|
270
|
-
async sendNotification(payload) {
|
|
271
|
-
const result = await this.request('/api/notify', {
|
|
272
|
-
method: 'POST',
|
|
273
|
-
body: JSON.stringify(payload),
|
|
274
|
-
});
|
|
275
|
-
return result.ok;
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Get the WebSocket URL for a terminal
|
|
279
|
-
*/
|
|
280
|
-
getTerminalWsUrl(terminalId) {
|
|
281
|
-
return `ws://localhost:${new URL(this.baseUrl).port}/ws/terminal/${terminalId}`;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Default tower client instance
|
|
286
|
-
*/
|
|
287
|
-
let defaultClient = null;
|
|
288
|
-
/**
|
|
289
|
-
* Get the default tower client
|
|
290
|
-
*/
|
|
291
|
-
export function getTowerClient(port) {
|
|
292
|
-
if (!defaultClient || (port && port !== DEFAULT_TOWER_PORT)) {
|
|
293
|
-
defaultClient = new TowerClient(port);
|
|
294
|
-
}
|
|
295
|
-
return defaultClient;
|
|
296
|
-
}
|
|
7
|
+
export { TowerClient, getTowerClient, } from '@cluesmith/codev-core/tower-client';
|
|
8
|
+
export { encodeWorkspacePath, decodeWorkspacePath } from '@cluesmith/codev-core/workspace';
|
|
9
|
+
export { DEFAULT_TOWER_PORT, AGENT_FARM_DIR } from '@cluesmith/codev-core/constants';
|
|
297
10
|
//# sourceMappingURL=tower-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tower-client.js","sourceRoot":"","sources":["../../../src/agent-farm/lib/tower-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"tower-client.js","sourceRoot":"","sources":["../../../src/agent-farm/lib/tower-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,cAAc,GAQf,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -363,7 +363,7 @@ export class TunnelClient {
|
|
|
363
363
|
this.cleanup();
|
|
364
364
|
if (reason === 'invalid_api_key') {
|
|
365
365
|
this.setState('auth_failed');
|
|
366
|
-
console.error("Cloud connection failed: API key is invalid or revoked. Run '
|
|
366
|
+
console.error("Cloud connection failed: API key is invalid or revoked. Run 'afx tower connect --reauth' to update credentials.");
|
|
367
367
|
// Circuit breaker: don't retry
|
|
368
368
|
return;
|
|
369
369
|
}
|