@cluesmith/codev 2.0.0-rc.61 → 2.0.0-rc.64
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/dashboard/dist/assets/index-C7FtNK6Y.css +32 -0
- package/dashboard/dist/assets/index-DZuzzh0T.js +131 -0
- package/dashboard/dist/assets/index-DZuzzh0T.js.map +1 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +75 -50
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/architect.d.ts.map +1 -1
- package/dist/agent-farm/commands/architect.js +38 -48
- 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 +14 -35
- package/dist/agent-farm/commands/attach.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +17 -18
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/consult.d.ts +3 -4
- package/dist/agent-farm/commands/consult.d.ts.map +1 -1
- package/dist/agent-farm/commands/consult.js +27 -37
- package/dist/agent-farm/commands/consult.js.map +1 -1
- package/dist/agent-farm/commands/open.d.ts.map +1 -1
- package/dist/agent-farm/commands/open.js +17 -31
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/shell.d.ts.map +1 -1
- package/dist/agent-farm/commands/shell.js +27 -38
- package/dist/agent-farm/commands/shell.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +113 -90
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/start.d.ts +7 -20
- package/dist/agent-farm/commands/start.d.ts.map +1 -1
- package/dist/agent-farm/commands/start.js +3 -242
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +22 -29
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/stop.d.ts.map +1 -1
- package/dist/agent-farm/commands/stop.js +43 -172
- package/dist/agent-farm/commands/stop.js.map +1 -1
- package/dist/agent-farm/commands/tower-cloud.d.ts +47 -0
- package/dist/agent-farm/commands/tower-cloud.d.ts.map +1 -0
- package/dist/agent-farm/commands/tower-cloud.js +316 -0
- package/dist/agent-farm/commands/tower-cloud.js.map +1 -0
- package/dist/agent-farm/db/index.d.ts +6 -2
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +56 -31
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/migrate.d.ts +0 -4
- package/dist/agent-farm/db/migrate.d.ts.map +1 -1
- package/dist/agent-farm/db/migrate.js +0 -46
- package/dist/agent-farm/db/migrate.js.map +1 -1
- package/dist/agent-farm/db/schema.d.ts +3 -3
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +3 -17
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +0 -10
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js +0 -8
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/hq-connector.d.ts +1 -1
- package/dist/agent-farm/hq-connector.js +1 -1
- package/dist/agent-farm/lib/cloud-config.d.ts +46 -0
- package/dist/agent-farm/lib/cloud-config.d.ts.map +1 -0
- package/dist/agent-farm/lib/cloud-config.js +106 -0
- package/dist/agent-farm/lib/cloud-config.js.map +1 -0
- package/dist/agent-farm/lib/tower-client.d.ts +7 -5
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts +117 -0
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -0
- package/dist/agent-farm/lib/tunnel-client.js +502 -0
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.js +559 -341
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/state.d.ts +2 -2
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +6 -16
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +1 -18
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +0 -5
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +0 -31
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/file-tabs.d.ts +27 -0
- package/dist/agent-farm/utils/file-tabs.d.ts.map +1 -0
- package/dist/agent-farm/utils/file-tabs.js +46 -0
- package/dist/agent-farm/utils/file-tabs.js.map +1 -0
- package/dist/agent-farm/utils/gate-status.d.ts +16 -0
- package/dist/agent-farm/utils/gate-status.d.ts.map +1 -0
- package/dist/agent-farm/utils/gate-status.js +79 -0
- package/dist/agent-farm/utils/gate-status.js.map +1 -0
- package/dist/agent-farm/utils/gate-watcher.d.ts +38 -0
- package/dist/agent-farm/utils/gate-watcher.d.ts.map +1 -0
- package/dist/agent-farm/utils/gate-watcher.js +122 -0
- package/dist/agent-farm/utils/gate-watcher.js.map +1 -0
- package/dist/agent-farm/utils/index.d.ts +0 -1
- package/dist/agent-farm/utils/index.d.ts.map +1 -1
- package/dist/agent-farm/utils/index.js +0 -1
- package/dist/agent-farm/utils/index.js.map +1 -1
- package/dist/agent-farm/utils/notifications.js +1 -1
- package/dist/agent-farm/utils/notifications.js.map +1 -1
- package/dist/agent-farm/utils/server-utils.d.ts +1 -1
- package/dist/agent-farm/utils/server-utils.js +1 -1
- package/dist/agent-farm/utils/session.d.ts +10 -0
- package/dist/agent-farm/utils/session.d.ts.map +1 -0
- package/dist/agent-farm/utils/session.js +12 -0
- package/dist/agent-farm/utils/session.js.map +1 -0
- package/dist/commands/adopt.js +1 -1
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +23 -14
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +35 -12
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.js +11 -3
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/commands/porch/verdict.d.ts +8 -0
- package/dist/commands/porch/verdict.d.ts.map +1 -1
- package/dist/commands/porch/verdict.js +13 -0
- package/dist/commands/porch/verdict.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +2 -0
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +4 -0
- package/dist/terminal/pty-session.js.map +1 -1
- package/package.json +1 -1
- package/skeleton/.claude/skills/af/SKILL.md +15 -0
- package/skeleton/protocols/spir/prompts/review.md +15 -16
- package/skeleton/protocols/spir/protocol.json +4 -0
- package/skeleton/protocols/spir/templates/review.md +81 -199
- package/skeleton/resources/commands/agent-farm.md +38 -2
- package/templates/tower.html +7 -150
- package/dashboard/dist/assets/index-CXloFYpB.css +0 -32
- package/dashboard/dist/assets/index-Ca2fjOJf.js +0 -131
- package/dashboard/dist/assets/index-Ca2fjOJf.js.map +0 -1
- package/dist/agent-farm/utils/orphan-handler.d.ts +0 -27
- package/dist/agent-farm/utils/orphan-handler.d.ts.map +0 -1
- package/dist/agent-farm/utils/orphan-handler.js +0 -149
- package/dist/agent-farm/utils/orphan-handler.js.map +0 -1
- package/dist/agent-farm/utils/port-registry.d.ts +0 -57
- package/dist/agent-farm/utils/port-registry.d.ts.map +0 -1
- package/dist/agent-farm/utils/port-registry.js +0 -166
- package/dist/agent-farm/utils/port-registry.js.map +0 -1
- package/dist/agent-farm/utils/terminal-ports.d.ts +0 -18
- package/dist/agent-farm/utils/terminal-ports.d.ts.map +0 -1
- package/dist/agent-farm/utils/terminal-ports.js +0 -35
- package/dist/agent-farm/utils/terminal-ports.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tower-cloud.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/tower-cloud.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,GAEX,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,oBAAoB,CAAC;AACpE,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,mBAAmB,GAAG,OAAO,CAAC,CAAC,YAAY;AAEjD;;GAEG;AACH,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,OAAO,CAAC,QAAgB;IACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,SAAS,YAAY;IACnB,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACnC,OAAO,GAAG,QAAQ,EAAE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CACxB,SAAiB,EACjB,KAAa,EACb,SAAiB,EACjB,SAAiB;IAEjB,MAAM,GAAG,GAAG,GAAG,SAAS,6BAA6B,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAEnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI;QACJ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0C,CAAC;IAE9E,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,QAAkC,EAAE,IAAa;IAC1E,MAAM,SAAS,GAAG,IAAI,IAAI,kBAAkB,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,oBAAoB,SAAS,eAAe,QAAQ,EAAE,EAAE;YAClE,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAa;IASjD,MAAM,SAAS,GAAG,IAAI,IAAI,kBAAkB,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,oBAAoB,SAAS,oBAAoB,EACjD,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CACvC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgD,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAOD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IAEnC,8BAA8B;IAC9B,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3B,wCAAwC,QAAQ,CAAC,UAAU,wBAAwB,CACpF,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEpC,kCAAkC;IAClC,MAAM,cAAc,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACnD,MAAM,WAAW,GAAG,oBAAoB,cAAc,CAAC,IAAI,WAAW,CAAC;IAEvE,MAAM,aAAa,GAAG,YAAY,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;QAC/B,CAAC,CAAC,GAAG,WAAW,gCAAgC,aAAa,EAAE;QAC/D,CAAC,CAAC,GAAG,WAAW,oBAAoB,aAAa,EAAE,CAAC;IAEtD,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAEhE,+BAA+B;IAC/B,IAAI,KAAK,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;IAEnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,+BAA+B;QAC/B,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,KAAK,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;QAEhE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAiB,CAAC;IACtB,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC/B,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACzE,SAAS,GAAG,MAAM,MAAM,CAAC,wBAAwB,WAAW,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS;YAAE,SAAS,GAAG,WAAW,CAAC;IAC1C,CAAC;IAED,6BAA6B;IAC7B,sFAAsF;IACtF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,QAAQ,EAAE,UAAU,IAAI,oBAAoB,CAAC;IAC1F,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAEnC,IAAI,OAAe,CAAC;IACpB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,0BAA2B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,eAAe;IACf,MAAM,MAAM,GAAgB;QAC1B,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,SAAS;KACtB,CAAC;IACF,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,iCAAiC;IACjC,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,gBAAgB;IAChB,MAAM,SAAS,GAAG,GAAG,SAAS,MAAM,SAAS,GAAG,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,UAAU,SAAS,4BAA4B,CAAC,CAAC;IAChE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA6B,EAAE;IACnE,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAC3B,qBAAqB,MAAM,CAAC,UAAU,2BAA2B,CAClE,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,MAAM,CAAC,UAAU,eAAe,MAAM,CAAC,QAAQ,EAAE,EACpD;YACE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,CAAC,OAAO,EAAE;aAC1C;YACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,kCAAkC,QAAQ,CAAC,MAAM,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,+BAAgC,GAAa,CAAC,OAAO,iCAAiC,CAAC,CAAC;IACtG,CAAC;IAED,sBAAsB;IACtB,iBAAiB,EAAE,CAAC;IAEpB,oCAAoC;IACpC,MAAM,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAa;IAClD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;QACvG,OAAO;IACT,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjD,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAE3C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,6BAA6B,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,EAAU;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,IAAI,OAAO,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC;AAC9B,CAAC;AAYD,SAAS,mBAAmB;IAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,YAAY,GAA4C,IAAI,CAAC;QAEjE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAExD,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC;gBAEnG,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;oBAC1B,MAAM,CAAC,GAAG,YAAY,CAAC;oBACvB,YAAY,GAAG,IAAI,CAAC;oBACpB,CAAC,CAAC,KAAK,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAsB,CAAC;YAElD,OAAO,CAAC;gBACN,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,YAAY,CAAC,SAAiB;oBAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBACvB,YAAY,GAAG,CAAC,KAAK,EAAE,EAAE;4BACvB,MAAM,CAAC,KAAK,EAAE,CAAC;4BACf,CAAC,CAAC,KAAK,CAAC,CAAC;wBACX,CAAC,CAAC;wBAEF,UAAU,CAAC,GAAG,EAAE;4BACd,IAAI,YAAY,EAAE,CAAC;gCACjB,YAAY,GAAG,IAAI,CAAC;gCACpB,MAAM,CAAC,KAAK,EAAE,CAAC;gCACf,CAAC,CAAC,IAAI,CAAC,CAAC;4BACV,CAAC;wBACH,CAAC,EAAE,SAAS,CAAC,CAAC;oBAChB,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,KAAK;oBACH,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -32,10 +32,14 @@ export declare function closeAllDbs(): void;
|
|
|
32
32
|
*/
|
|
33
33
|
export declare function getDbPath(): string;
|
|
34
34
|
/**
|
|
35
|
-
* Get the path to the global database
|
|
35
|
+
* Get the path to the global database.
|
|
36
|
+
* Uses per-test isolation when NODE_ENV=test:
|
|
37
|
+
* - AF_TEST_DB env var → custom DB name (e.g., "test-14500.db")
|
|
38
|
+
* - NODE_ENV=test without AF_TEST_DB → "test.db"
|
|
39
|
+
* - Production → "global.db"
|
|
36
40
|
*/
|
|
37
41
|
export declare function getGlobalDbPath(): string;
|
|
38
42
|
export { LOCAL_SCHEMA, GLOBAL_SCHEMA } from './schema.js';
|
|
39
43
|
export { withRetry } from './errors.js';
|
|
40
|
-
export type { DbArchitect, DbBuilder, DbUtil, DbAnnotation,
|
|
44
|
+
export type { DbArchitect, DbBuilder, DbUtil, DbAnnotation, } from './types.js';
|
|
41
45
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAyCtC;;;GAGG;AACH,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAKzC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAK/C;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAyCtC;;;GAGG;AACH,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAKzC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAK/C;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AA2OD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,WAAW,EACX,SAAS,EACT,MAAM,EACN,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
import Database from 'better-sqlite3';
|
|
8
8
|
import { existsSync, mkdirSync, copyFileSync, unlinkSync } from 'node:fs';
|
|
9
9
|
import { homedir } from 'node:os';
|
|
10
|
-
import { resolve } from 'node:path';
|
|
10
|
+
import { resolve, dirname } from 'node:path';
|
|
11
11
|
import { LOCAL_SCHEMA, GLOBAL_SCHEMA } from './schema.js';
|
|
12
|
-
import { migrateLocalFromJson
|
|
12
|
+
import { migrateLocalFromJson } from './migrate.js';
|
|
13
13
|
import { getConfig } from '../utils/index.js';
|
|
14
14
|
// Singleton instances
|
|
15
15
|
let _localDb = null;
|
|
@@ -91,10 +91,18 @@ export function getDbPath() {
|
|
|
91
91
|
return resolve(config.stateDir, 'state.db');
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
|
-
* Get the path to the global database
|
|
94
|
+
* Get the path to the global database.
|
|
95
|
+
* Uses per-test isolation when NODE_ENV=test:
|
|
96
|
+
* - AF_TEST_DB env var → custom DB name (e.g., "test-14500.db")
|
|
97
|
+
* - NODE_ENV=test without AF_TEST_DB → "test.db"
|
|
98
|
+
* - Production → "global.db"
|
|
95
99
|
*/
|
|
96
100
|
export function getGlobalDbPath() {
|
|
97
|
-
|
|
101
|
+
let dbName = 'global.db';
|
|
102
|
+
if (process.env.NODE_ENV === 'test') {
|
|
103
|
+
dbName = process.env.AF_TEST_DB || 'test.db';
|
|
104
|
+
}
|
|
105
|
+
return resolve(homedir(), '.agent-farm', dbName);
|
|
98
106
|
}
|
|
99
107
|
/**
|
|
100
108
|
* Initialize the local database (state.db)
|
|
@@ -214,15 +222,39 @@ function ensureLocalDatabase() {
|
|
|
214
222
|
}
|
|
215
223
|
db.prepare('INSERT INTO _migrations (version) VALUES (4)').run();
|
|
216
224
|
}
|
|
225
|
+
// Migration v5: Remove UNIQUE constraint from annotations.port (all annotations use port=0)
|
|
226
|
+
const v5 = db.prepare('SELECT version FROM _migrations WHERE version = 5').get();
|
|
227
|
+
if (!v5) {
|
|
228
|
+
const tableInfo = db
|
|
229
|
+
.prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='annotations'")
|
|
230
|
+
.get();
|
|
231
|
+
if (tableInfo?.sql?.includes('port INTEGER NOT NULL UNIQUE')) {
|
|
232
|
+
db.exec(`
|
|
233
|
+
CREATE TABLE annotations_new (
|
|
234
|
+
id TEXT PRIMARY KEY,
|
|
235
|
+
file TEXT NOT NULL,
|
|
236
|
+
port INTEGER NOT NULL DEFAULT 0,
|
|
237
|
+
pid INTEGER NOT NULL DEFAULT 0,
|
|
238
|
+
parent_type TEXT NOT NULL CHECK(parent_type IN ('architect', 'builder', 'util')),
|
|
239
|
+
parent_id TEXT,
|
|
240
|
+
started_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
241
|
+
);
|
|
242
|
+
INSERT INTO annotations_new SELECT id, file, port, pid, parent_type, parent_id, started_at FROM annotations;
|
|
243
|
+
DROP TABLE annotations;
|
|
244
|
+
ALTER TABLE annotations_new RENAME TO annotations;
|
|
245
|
+
`);
|
|
246
|
+
console.log('[info] Migrated annotations table: removed UNIQUE constraint from port');
|
|
247
|
+
}
|
|
248
|
+
db.prepare('INSERT INTO _migrations (version) VALUES (5)').run();
|
|
249
|
+
}
|
|
217
250
|
return db;
|
|
218
251
|
}
|
|
219
252
|
/**
|
|
220
253
|
* Initialize the global database (global.db)
|
|
221
254
|
*/
|
|
222
255
|
function ensureGlobalDatabase() {
|
|
223
|
-
const
|
|
224
|
-
const
|
|
225
|
-
const jsonPath = resolve(globalDir, 'ports.json');
|
|
256
|
+
const dbPath = getGlobalDbPath();
|
|
257
|
+
const globalDir = dirname(dbPath);
|
|
226
258
|
// Ensure directory exists
|
|
227
259
|
ensureDir(globalDir);
|
|
228
260
|
// Create/open database
|
|
@@ -232,36 +264,14 @@ function ensureGlobalDatabase() {
|
|
|
232
264
|
db.exec(GLOBAL_SCHEMA);
|
|
233
265
|
// Check if migration is needed
|
|
234
266
|
const migrated = db.prepare('SELECT version FROM _migrations WHERE version = 1').get();
|
|
235
|
-
if (!migrated
|
|
236
|
-
// Migrate from JSON
|
|
237
|
-
migrateGlobalFromJson(db, jsonPath);
|
|
238
|
-
// Record migration
|
|
239
|
-
db.prepare('INSERT INTO _migrations (version) VALUES (1)').run();
|
|
240
|
-
// Backup original JSON and remove it
|
|
241
|
-
copyFileSync(jsonPath, jsonPath + '.bak');
|
|
242
|
-
unlinkSync(jsonPath);
|
|
243
|
-
console.log('[info] Migrated ports.json to global.db (backup at ports.json.bak)');
|
|
244
|
-
}
|
|
245
|
-
else if (!migrated) {
|
|
267
|
+
if (!migrated) {
|
|
246
268
|
// Fresh install, just mark migration as done
|
|
247
269
|
db.prepare('INSERT OR IGNORE INTO _migrations (version) VALUES (1)').run();
|
|
248
270
|
console.log('[info] Created new global.db at', dbPath);
|
|
249
271
|
}
|
|
250
|
-
// Migration v2:
|
|
272
|
+
// Migration v2: No-op (previously added columns to port_allocations, now removed by Spec 0098)
|
|
251
273
|
const v2 = db.prepare('SELECT version FROM _migrations WHERE version = 2').get();
|
|
252
274
|
if (!v2) {
|
|
253
|
-
try {
|
|
254
|
-
db.exec('ALTER TABLE port_allocations ADD COLUMN project_name TEXT');
|
|
255
|
-
}
|
|
256
|
-
catch {
|
|
257
|
-
// Column already exists
|
|
258
|
-
}
|
|
259
|
-
try {
|
|
260
|
-
db.exec("ALTER TABLE port_allocations ADD COLUMN created_at TEXT NOT NULL DEFAULT (datetime('now'))");
|
|
261
|
-
}
|
|
262
|
-
catch {
|
|
263
|
-
// Column already exists
|
|
264
|
-
}
|
|
265
275
|
db.prepare('INSERT INTO _migrations (version) VALUES (2)').run();
|
|
266
276
|
}
|
|
267
277
|
// Migration v3: Add terminal_sessions table (Spec 0090 TICK-001)
|
|
@@ -284,6 +294,21 @@ function ensureGlobalDatabase() {
|
|
|
284
294
|
db.prepare('INSERT INTO _migrations (version) VALUES (3)').run();
|
|
285
295
|
console.log('[info] Created terminal_sessions table (Spec 0090 TICK-001)');
|
|
286
296
|
}
|
|
297
|
+
// Migration v4: Add file_tabs table (Spec 0099 Phase 4)
|
|
298
|
+
const v4 = db.prepare('SELECT version FROM _migrations WHERE version = 4').get();
|
|
299
|
+
if (!v4) {
|
|
300
|
+
db.exec(`
|
|
301
|
+
CREATE TABLE IF NOT EXISTS file_tabs (
|
|
302
|
+
id TEXT PRIMARY KEY,
|
|
303
|
+
project_path TEXT NOT NULL,
|
|
304
|
+
file_path TEXT NOT NULL,
|
|
305
|
+
created_at INTEGER NOT NULL
|
|
306
|
+
);
|
|
307
|
+
CREATE INDEX IF NOT EXISTS idx_file_tabs_project ON file_tabs(project_path);
|
|
308
|
+
`);
|
|
309
|
+
db.prepare('INSERT INTO _migrations (version) VALUES (4)').run();
|
|
310
|
+
console.log('[info] Created file_tabs table (Spec 0099 Phase 4)');
|
|
311
|
+
}
|
|
287
312
|
return db;
|
|
288
313
|
}
|
|
289
314
|
// Re-export types and utilities
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent-farm/db/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent-farm/db/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,4 @@ import type Database from 'better-sqlite3';
|
|
|
8
8
|
* Migrate local state from JSON to SQLite
|
|
9
9
|
*/
|
|
10
10
|
export declare function migrateLocalFromJson(db: Database.Database, jsonPath: string): void;
|
|
11
|
-
/**
|
|
12
|
-
* Migrate global port registry from JSON to SQLite
|
|
13
|
-
*/
|
|
14
|
-
export declare function migrateGlobalFromJson(db: Database.Database, jsonPath: string): void;
|
|
15
11
|
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAqB3C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAoFlF"}
|
|
@@ -88,50 +88,4 @@ export function migrateLocalFromJson(db, jsonPath) {
|
|
|
88
88
|
throw err;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Migrate global port registry from JSON to SQLite
|
|
93
|
-
*/
|
|
94
|
-
export function migrateGlobalFromJson(db, jsonPath) {
|
|
95
|
-
const jsonContent = readFileSync(jsonPath, 'utf-8');
|
|
96
|
-
const data = JSON.parse(jsonContent);
|
|
97
|
-
// Handle both formats: versioned ({ version, entries }) and legacy (direct entries)
|
|
98
|
-
let entries;
|
|
99
|
-
if (data.version && data.entries) {
|
|
100
|
-
// New versioned format
|
|
101
|
-
entries = data.entries;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
// Legacy format - the object itself is the entries
|
|
105
|
-
// Filter out any non-entry fields
|
|
106
|
-
entries = {};
|
|
107
|
-
for (const [key, value] of Object.entries(data)) {
|
|
108
|
-
if (typeof value === 'object' && value !== null && 'basePort' in value) {
|
|
109
|
-
entries[key] = value;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// Wrap in transaction for atomicity
|
|
114
|
-
const migrate = db.transaction(() => {
|
|
115
|
-
for (const [projectPath, entry] of Object.entries(entries)) {
|
|
116
|
-
db.prepare(`
|
|
117
|
-
INSERT INTO port_allocations (project_path, base_port, pid, registered_at, last_used_at)
|
|
118
|
-
VALUES (@projectPath, @basePort, @pid, @registeredAt, @lastUsedAt)
|
|
119
|
-
`).run({
|
|
120
|
-
projectPath,
|
|
121
|
-
basePort: entry.basePort,
|
|
122
|
-
pid: entry.pid ?? null,
|
|
123
|
-
registeredAt: entry.registered,
|
|
124
|
-
lastUsedAt: entry.lastUsed ?? entry.registered,
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
try {
|
|
129
|
-
migrate();
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
console.error('[error] Port registry migration failed. JSON file preserved.');
|
|
133
|
-
console.error('[error] Manual recovery: delete global.db and restart');
|
|
134
|
-
throw err;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
91
|
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/agent-farm/db/migrate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/agent-farm/db/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
* Local state schema (state.db)
|
|
8
8
|
* Stores dashboard state: architect, builders, utils, annotations
|
|
9
9
|
*/
|
|
10
|
-
export declare const LOCAL_SCHEMA = "\n-- Schema versioning\nCREATE TABLE IF NOT EXISTS _migrations (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Architect session (singleton)\nCREATE TABLE IF NOT EXISTS architect (\n id INTEGER PRIMARY KEY CHECK (id = 1),\n pid INTEGER NOT NULL,\n port INTEGER NOT NULL,\n cmd TEXT NOT NULL,\n started_at TEXT NOT NULL DEFAULT (datetime('now')),\n tmux_session TEXT,\n terminal_id TEXT\n);\n\n-- Builder sessions\nCREATE TABLE IF NOT EXISTS builders (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n port INTEGER NOT NULL DEFAULT 0,\n pid INTEGER NOT NULL DEFAULT 0,\n status TEXT NOT NULL DEFAULT 'spawning'\n CHECK(status IN ('spawning', 'implementing', 'blocked', 'pr-ready', 'complete')),\n phase TEXT NOT NULL DEFAULT '',\n worktree TEXT NOT NULL,\n branch TEXT NOT NULL,\n tmux_session TEXT,\n type TEXT NOT NULL DEFAULT 'spec'\n CHECK(type IN ('spec', 'task', 'protocol', 'shell', 'worktree', 'bugfix')),\n task_text TEXT,\n protocol_name TEXT,\n issue_number INTEGER,\n terminal_id TEXT,\n started_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Indexes for common queries\nCREATE INDEX IF NOT EXISTS idx_builders_status ON builders(status);\nCREATE INDEX IF NOT EXISTS idx_builders_port ON builders(port);\n\n-- Utility terminals\nCREATE TABLE IF NOT EXISTS utils (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n port INTEGER NOT NULL DEFAULT 0,\n pid INTEGER NOT NULL DEFAULT 0,\n tmux_session TEXT,\n terminal_id TEXT,\n started_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Annotations (file viewers)\nCREATE TABLE IF NOT EXISTS annotations (\n id TEXT PRIMARY KEY,\n file TEXT NOT NULL,\n port INTEGER NOT NULL
|
|
10
|
+
export declare const LOCAL_SCHEMA = "\n-- Schema versioning\nCREATE TABLE IF NOT EXISTS _migrations (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Architect session (singleton)\nCREATE TABLE IF NOT EXISTS architect (\n id INTEGER PRIMARY KEY CHECK (id = 1),\n pid INTEGER NOT NULL,\n port INTEGER NOT NULL,\n cmd TEXT NOT NULL,\n started_at TEXT NOT NULL DEFAULT (datetime('now')),\n tmux_session TEXT,\n terminal_id TEXT\n);\n\n-- Builder sessions\nCREATE TABLE IF NOT EXISTS builders (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n port INTEGER NOT NULL DEFAULT 0,\n pid INTEGER NOT NULL DEFAULT 0,\n status TEXT NOT NULL DEFAULT 'spawning'\n CHECK(status IN ('spawning', 'implementing', 'blocked', 'pr-ready', 'complete')),\n phase TEXT NOT NULL DEFAULT '',\n worktree TEXT NOT NULL,\n branch TEXT NOT NULL,\n tmux_session TEXT,\n type TEXT NOT NULL DEFAULT 'spec'\n CHECK(type IN ('spec', 'task', 'protocol', 'shell', 'worktree', 'bugfix')),\n task_text TEXT,\n protocol_name TEXT,\n issue_number INTEGER,\n terminal_id TEXT,\n started_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Indexes for common queries\nCREATE INDEX IF NOT EXISTS idx_builders_status ON builders(status);\nCREATE INDEX IF NOT EXISTS idx_builders_port ON builders(port);\n\n-- Utility terminals\nCREATE TABLE IF NOT EXISTS utils (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n port INTEGER NOT NULL DEFAULT 0,\n pid INTEGER NOT NULL DEFAULT 0,\n tmux_session TEXT,\n terminal_id TEXT,\n started_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Annotations (file viewers)\nCREATE TABLE IF NOT EXISTS annotations (\n id TEXT PRIMARY KEY,\n file TEXT NOT NULL,\n port INTEGER NOT NULL DEFAULT 0,\n pid INTEGER NOT NULL DEFAULT 0,\n parent_type TEXT NOT NULL CHECK(parent_type IN ('architect', 'builder', 'util')),\n parent_id TEXT,\n started_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Trigger to update updated_at on builders\nCREATE TRIGGER IF NOT EXISTS builders_updated_at\n AFTER UPDATE ON builders\n FOR EACH ROW\n BEGIN\n UPDATE builders SET updated_at = datetime('now') WHERE id = NEW.id;\n END;\n";
|
|
11
11
|
/**
|
|
12
12
|
* Global registry schema (global.db)
|
|
13
|
-
* Stores
|
|
13
|
+
* Stores terminal sessions and migrations across all projects
|
|
14
14
|
*/
|
|
15
|
-
export declare const GLOBAL_SCHEMA = "\n-- Schema versioning\nCREATE TABLE IF NOT EXISTS _migrations (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n--
|
|
15
|
+
export declare const GLOBAL_SCHEMA = "\n-- Schema versioning\nCREATE TABLE IF NOT EXISTS _migrations (\n version INTEGER PRIMARY KEY,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Terminal sessions (Spec 0090 TICK-001)\n-- Tracks all terminal sessions across all projects for persistence and reconciliation\nCREATE TABLE IF NOT EXISTS terminal_sessions (\n id TEXT PRIMARY KEY, -- terminal UUID from PtyManager\n project_path TEXT NOT NULL, -- project this terminal belongs to\n type TEXT NOT NULL -- 'architect', 'builder', 'shell'\n CHECK(type IN ('architect', 'builder', 'shell')),\n role_id TEXT, -- builder ID or shell ID (null for architect)\n pid INTEGER, -- process ID of the terminal\n tmux_session TEXT, -- tmux session name if tmux-backed\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_terminal_sessions_project ON terminal_sessions(project_path);\nCREATE INDEX IF NOT EXISTS idx_terminal_sessions_type ON terminal_sessions(type);\n";
|
|
16
16
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,eAAO,MAAM,YAAY,+qEAyExB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,qlCAsBzB,CAAC"}
|
|
@@ -66,8 +66,8 @@ CREATE TABLE IF NOT EXISTS utils (
|
|
|
66
66
|
CREATE TABLE IF NOT EXISTS annotations (
|
|
67
67
|
id TEXT PRIMARY KEY,
|
|
68
68
|
file TEXT NOT NULL,
|
|
69
|
-
port INTEGER NOT NULL
|
|
70
|
-
pid INTEGER NOT NULL,
|
|
69
|
+
port INTEGER NOT NULL DEFAULT 0,
|
|
70
|
+
pid INTEGER NOT NULL DEFAULT 0,
|
|
71
71
|
parent_type TEXT NOT NULL CHECK(parent_type IN ('architect', 'builder', 'util')),
|
|
72
72
|
parent_id TEXT,
|
|
73
73
|
started_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
@@ -83,7 +83,7 @@ CREATE TRIGGER IF NOT EXISTS builders_updated_at
|
|
|
83
83
|
`;
|
|
84
84
|
/**
|
|
85
85
|
* Global registry schema (global.db)
|
|
86
|
-
* Stores
|
|
86
|
+
* Stores terminal sessions and migrations across all projects
|
|
87
87
|
*/
|
|
88
88
|
export const GLOBAL_SCHEMA = `
|
|
89
89
|
-- Schema versioning
|
|
@@ -92,20 +92,6 @@ CREATE TABLE IF NOT EXISTS _migrations (
|
|
|
92
92
|
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
93
93
|
);
|
|
94
94
|
|
|
95
|
-
-- Port allocations
|
|
96
|
-
CREATE TABLE IF NOT EXISTS port_allocations (
|
|
97
|
-
project_path TEXT PRIMARY KEY,
|
|
98
|
-
project_name TEXT,
|
|
99
|
-
base_port INTEGER NOT NULL UNIQUE
|
|
100
|
-
CHECK(base_port >= 4200 AND base_port % 100 = 0),
|
|
101
|
-
pid INTEGER,
|
|
102
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
103
|
-
registered_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
104
|
-
last_used_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
CREATE INDEX IF NOT EXISTS idx_port_allocations_base_port ON port_allocations(base_port);
|
|
108
|
-
|
|
109
95
|
-- Terminal sessions (Spec 0090 TICK-001)
|
|
110
96
|
-- Tracks all terminal sessions across all projects for persistence and reconciliation
|
|
111
97
|
CREATE TABLE IF NOT EXISTS terminal_sessions (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/agent-farm/db/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyE3B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/agent-farm/db/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyE3B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsB5B,CAAC"}
|
|
@@ -62,16 +62,6 @@ export interface DbAnnotation {
|
|
|
62
62
|
parent_id: string | null;
|
|
63
63
|
started_at: string;
|
|
64
64
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Database row type for port_allocations table
|
|
67
|
-
*/
|
|
68
|
-
export interface DbPortAllocation {
|
|
69
|
-
project_path: string;
|
|
70
|
-
base_port: number;
|
|
71
|
-
pid: number | null;
|
|
72
|
-
registered_at: string;
|
|
73
|
-
last_used_at: string;
|
|
74
|
-
}
|
|
75
65
|
/**
|
|
76
66
|
* Convert database architect row to application type
|
|
77
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAElG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/db/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAElG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAO5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAe1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAO9D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,YAAY,GAAG,UAAU,CAStE"}
|
|
@@ -9,8 +9,6 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export function dbArchitectToArchitectState(row) {
|
|
11
11
|
return {
|
|
12
|
-
pid: row.pid,
|
|
13
|
-
port: row.port,
|
|
14
12
|
cmd: row.cmd,
|
|
15
13
|
startedAt: row.started_at,
|
|
16
14
|
tmuxSession: row.tmux_session ?? undefined,
|
|
@@ -24,8 +22,6 @@ export function dbBuilderToBuilder(row) {
|
|
|
24
22
|
return {
|
|
25
23
|
id: row.id,
|
|
26
24
|
name: row.name,
|
|
27
|
-
port: row.port,
|
|
28
|
-
pid: row.pid,
|
|
29
25
|
status: row.status,
|
|
30
26
|
phase: row.phase,
|
|
31
27
|
worktree: row.worktree,
|
|
@@ -45,8 +41,6 @@ export function dbUtilToUtilTerminal(row) {
|
|
|
45
41
|
return {
|
|
46
42
|
id: row.id,
|
|
47
43
|
name: row.name,
|
|
48
|
-
port: row.port,
|
|
49
|
-
pid: row.pid,
|
|
50
44
|
tmuxSession: row.tmux_session ?? undefined,
|
|
51
45
|
terminalId: row.terminal_id ?? undefined,
|
|
52
46
|
};
|
|
@@ -58,8 +52,6 @@ export function dbAnnotationToAnnotation(row) {
|
|
|
58
52
|
return {
|
|
59
53
|
id: row.id,
|
|
60
54
|
file: row.file,
|
|
61
|
-
port: row.port,
|
|
62
|
-
pid: row.pid,
|
|
63
55
|
parent: {
|
|
64
56
|
type: row.parent_type,
|
|
65
57
|
id: row.parent_id ?? undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent-farm/db/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent-farm/db/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiEH;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAgB;IAC1D,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC1C,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;KACzC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAc;IAC/C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAA2B;QACvC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC1C,IAAI,EAAE,GAAG,CAAC,IAAmB;QAC7B,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACpC,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;QAC5C,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC1C,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;KACzC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC1C,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;KACzC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAiB;IACxD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE;YACN,IAAI,EAAE,GAAG,CAAC,WAA2C;YACrD,EAAE,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;SAC/B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
11
11
|
* Connect to HQ and register this agent farm instance
|
|
12
|
-
* Called
|
|
12
|
+
* Called during project activation when CODEV_HQ_URL is set
|
|
13
13
|
*/
|
|
14
14
|
export declare function initHQConnector(root: string): void;
|
|
15
15
|
/**
|
|
@@ -329,7 +329,7 @@ function cleanup() {
|
|
|
329
329
|
}
|
|
330
330
|
/**
|
|
331
331
|
* Connect to HQ and register this agent farm instance
|
|
332
|
-
* Called
|
|
332
|
+
* Called during project activation when CODEV_HQ_URL is set
|
|
333
333
|
*/
|
|
334
334
|
export function initHQConnector(root) {
|
|
335
335
|
const hqUrl = process.env.CODEV_HQ_URL;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Config Management (Spec 0097 Phase 1)
|
|
3
|
+
*
|
|
4
|
+
* Reads, writes, and validates ~/.agent-farm/cloud-config.json
|
|
5
|
+
* for tower registration with codevos.ai.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Cloud configuration stored after tower registration with codevos.ai.
|
|
9
|
+
*/
|
|
10
|
+
export interface CloudConfig {
|
|
11
|
+
tower_id: string;
|
|
12
|
+
tower_name: string;
|
|
13
|
+
api_key: string;
|
|
14
|
+
server_url: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Returns the path to ~/.agent-farm/cloud-config.json
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCloudConfigPath(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Read and validate the cloud config file.
|
|
22
|
+
*
|
|
23
|
+
* - Returns null if the file does not exist.
|
|
24
|
+
* - Throws if the file contains invalid JSON.
|
|
25
|
+
* - Returns null (with console.warn) if required fields are missing.
|
|
26
|
+
*/
|
|
27
|
+
export declare function readCloudConfig(): CloudConfig | null;
|
|
28
|
+
/**
|
|
29
|
+
* Write cloud config to disk with 0600 permissions.
|
|
30
|
+
* Creates the parent directory if needed.
|
|
31
|
+
*/
|
|
32
|
+
export declare function writeCloudConfig(config: CloudConfig): void;
|
|
33
|
+
/**
|
|
34
|
+
* Delete the cloud config file. No-op if it doesn't exist.
|
|
35
|
+
*/
|
|
36
|
+
export declare function deleteCloudConfig(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Returns true if a valid cloud config exists.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isRegistered(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Mask an API key for logging, showing only the prefix and last 4 chars.
|
|
43
|
+
* Example: "ctk_AbCdEfGhIjKl1234" → "ctk_****1234"
|
|
44
|
+
*/
|
|
45
|
+
export declare function maskApiKey(key: string): string;
|
|
46
|
+
//# sourceMappingURL=cloud-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-config.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/lib/cloud-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AASD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CA4CpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAU1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU9C"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Config Management (Spec 0097 Phase 1)
|
|
3
|
+
*
|
|
4
|
+
* Reads, writes, and validates ~/.agent-farm/cloud-config.json
|
|
5
|
+
* for tower registration with codevos.ai.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync, unlinkSync, existsSync, mkdirSync, chmodSync, } from 'node:fs';
|
|
8
|
+
import { resolve } from 'node:path';
|
|
9
|
+
import { homedir } from 'node:os';
|
|
10
|
+
const AGENT_FARM_DIR = resolve(homedir(), '.agent-farm');
|
|
11
|
+
const CLOUD_CONFIG_FILENAME = 'cloud-config.json';
|
|
12
|
+
const REQUIRED_FIELDS = [
|
|
13
|
+
'tower_id',
|
|
14
|
+
'tower_name',
|
|
15
|
+
'api_key',
|
|
16
|
+
'server_url',
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Returns the path to ~/.agent-farm/cloud-config.json
|
|
20
|
+
*/
|
|
21
|
+
export function getCloudConfigPath() {
|
|
22
|
+
return resolve(AGENT_FARM_DIR, CLOUD_CONFIG_FILENAME);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Read and validate the cloud config file.
|
|
26
|
+
*
|
|
27
|
+
* - Returns null if the file does not exist.
|
|
28
|
+
* - Throws if the file contains invalid JSON.
|
|
29
|
+
* - Returns null (with console.warn) if required fields are missing.
|
|
30
|
+
*/
|
|
31
|
+
export function readCloudConfig() {
|
|
32
|
+
const configPath = getCloudConfigPath();
|
|
33
|
+
if (!existsSync(configPath)) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const raw = readFileSync(configPath, 'utf-8');
|
|
37
|
+
let parsed;
|
|
38
|
+
try {
|
|
39
|
+
parsed = JSON.parse(raw);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
throw new Error(`Cloud config at ${configPath} contains invalid JSON. Delete it and re-register with 'af tower register'.`);
|
|
43
|
+
}
|
|
44
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
45
|
+
throw new Error(`Cloud config at ${configPath} contains invalid JSON. Expected an object.`);
|
|
46
|
+
}
|
|
47
|
+
const config = parsed;
|
|
48
|
+
const missing = REQUIRED_FIELDS.filter((field) => typeof config[field] !== 'string' || config[field] === '');
|
|
49
|
+
if (missing.length > 0) {
|
|
50
|
+
console.warn(`Cloud config at ${configPath} is missing required fields: ${missing.join(', ')}. ` +
|
|
51
|
+
`Tower will operate in local-only mode. Fix with 'af tower register'.`);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
tower_id: config.tower_id,
|
|
56
|
+
tower_name: config.tower_name,
|
|
57
|
+
api_key: config.api_key,
|
|
58
|
+
server_url: config.server_url,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Write cloud config to disk with 0600 permissions.
|
|
63
|
+
* Creates the parent directory if needed.
|
|
64
|
+
*/
|
|
65
|
+
export function writeCloudConfig(config) {
|
|
66
|
+
if (!existsSync(AGENT_FARM_DIR)) {
|
|
67
|
+
mkdirSync(AGENT_FARM_DIR, { recursive: true, mode: 0o700 });
|
|
68
|
+
}
|
|
69
|
+
const configPath = getCloudConfigPath();
|
|
70
|
+
const json = JSON.stringify(config, null, 2) + '\n';
|
|
71
|
+
writeFileSync(configPath, json, { mode: 0o600 });
|
|
72
|
+
// Enforce 0600 even if the file already existed with different permissions
|
|
73
|
+
chmodSync(configPath, 0o600);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Delete the cloud config file. No-op if it doesn't exist.
|
|
77
|
+
*/
|
|
78
|
+
export function deleteCloudConfig() {
|
|
79
|
+
const configPath = getCloudConfigPath();
|
|
80
|
+
if (existsSync(configPath)) {
|
|
81
|
+
unlinkSync(configPath);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Returns true if a valid cloud config exists.
|
|
86
|
+
*/
|
|
87
|
+
export function isRegistered() {
|
|
88
|
+
return readCloudConfig() !== null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Mask an API key for logging, showing only the prefix and last 4 chars.
|
|
92
|
+
* Example: "ctk_AbCdEfGhIjKl1234" → "ctk_****1234"
|
|
93
|
+
*/
|
|
94
|
+
export function maskApiKey(key) {
|
|
95
|
+
const prefixEnd = key.indexOf('_');
|
|
96
|
+
if (prefixEnd === -1 || key.length < prefixEnd + 5) {
|
|
97
|
+
// No prefix or too short — just show last 4
|
|
98
|
+
if (key.length <= 4)
|
|
99
|
+
return '****';
|
|
100
|
+
return '****' + key.slice(-4);
|
|
101
|
+
}
|
|
102
|
+
const prefix = key.slice(0, prefixEnd + 1); // e.g. "ctk_"
|
|
103
|
+
const last4 = key.slice(-4);
|
|
104
|
+
return `${prefix}****${last4}`;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=cloud-config.js.map
|