@openagt/dashboard 0.54.0 → 0.55.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/README.md +4 -2
- package/dist/appearance.d.ts +1 -1
- package/dist/appearance.d.ts.map +1 -1
- package/dist/appearance.js +1 -1
- package/dist/appearance.js.map +1 -1
- package/dist/clone-project.js +1 -1
- package/dist/clone-project.js.map +1 -1
- package/dist/daemon-runtime.d.ts.map +1 -1
- package/dist/daemon-runtime.js +8 -4
- package/dist/daemon-runtime.js.map +1 -1
- package/dist/daemon-services.d.ts +4 -4
- package/dist/daemon-services.js +6 -6
- package/dist/daemon-services.js.map +1 -1
- package/dist/daemon.d.ts +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +11 -1
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/elsewhere.d.ts +1 -1
- package/dist/dashboard/elsewhere.d.ts.map +1 -1
- package/dist/dashboard/projects.js +1 -1
- package/dist/dashboard/projects.js.map +1 -1
- package/dist/dashboard/rpc-serve.d.ts +6 -0
- package/dist/dashboard/rpc-serve.d.ts.map +1 -1
- package/dist/dashboard/rpc-serve.js +21 -1
- package/dist/dashboard/rpc-serve.js.map +1 -1
- package/dist/dashboard/run-inbox.d.ts +4 -3
- package/dist/dashboard/run-inbox.d.ts.map +1 -1
- package/dist/dashboard/run-inbox.js +6 -5
- package/dist/dashboard/run-inbox.js.map +1 -1
- package/dist/dashboard/server.d.ts +16 -1
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +54 -12
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/static.d.ts +15 -2
- package/dist/dashboard/static.d.ts.map +1 -1
- package/dist/dashboard/static.js +33 -18
- package/dist/dashboard/static.js.map +1 -1
- package/dist/dashboard/website.d.ts +34 -0
- package/dist/dashboard/website.d.ts.map +1 -0
- package/dist/dashboard/website.js +82 -0
- package/dist/dashboard/website.js.map +1 -0
- package/dist/dashboard-bundle/assets/host/module-BMyNrbiB.js +1 -0
- package/dist/dashboard-bundle/assets/main-BLY-EDtL.css +2 -0
- package/dist/dashboard-bundle/assets/main-DPdJVm4s.js +152 -0
- package/dist/dashboard-bundle/assets/{module-C1zreYB3.js → module-DY3Aigsz.js} +3 -3
- package/dist/dashboard-bundle/index.html +6 -6
- package/dist/dashboard-rpc/control.d.ts +22 -6
- package/dist/dashboard-rpc/control.d.ts.map +1 -1
- package/dist/dashboard-rpc/control.js +45 -9
- package/dist/dashboard-rpc/control.js.map +1 -1
- package/dist/dashboard-rpc/index.d.ts +3 -1
- package/dist/dashboard-rpc/index.d.ts.map +1 -1
- package/dist/dashboard-rpc/index.js +6 -2
- package/dist/dashboard-rpc/index.js.map +1 -1
- package/dist/dashboard-rpc/machines.d.ts.map +1 -1
- package/dist/dashboard-rpc/machines.js +1 -2
- package/dist/dashboard-rpc/machines.js.map +1 -1
- package/dist/dashboard-rpc/modules.js +2 -2
- package/dist/dashboard-rpc/modules.js.map +1 -1
- package/dist/dashboard-rpc/personal-folder.d.ts +23 -0
- package/dist/dashboard-rpc/personal-folder.d.ts.map +1 -0
- package/dist/dashboard-rpc/personal-folder.js +30 -0
- package/dist/dashboard-rpc/personal-folder.js.map +1 -0
- package/dist/dashboard-rpc/project-agent-data.d.ts +20 -0
- package/dist/dashboard-rpc/project-agent-data.d.ts.map +1 -0
- package/dist/dashboard-rpc/project-agent-data.js +38 -0
- package/dist/dashboard-rpc/project-agent-data.js.map +1 -0
- package/dist/dashboard-rpc/projects.d.ts +3 -5
- package/dist/dashboard-rpc/projects.d.ts.map +1 -1
- package/dist/dashboard-rpc/projects.js +5 -17
- package/dist/dashboard-rpc/projects.js.map +1 -1
- package/dist/dashboard-rpc/relay-dispatch.js +4 -4
- package/dist/dashboard-rpc/relay-dispatch.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/join-dashboard.d.ts +6 -2
- package/dist/join-dashboard.d.ts.map +1 -1
- package/dist/join-dashboard.js +4 -2
- package/dist/join-dashboard.js.map +1 -1
- package/dist/module-types/dashboard/components/SettingsRows.d.ts +2 -2
- package/dist/module-types/src/appearance.d.ts +1 -1
- package/dist/module-types/src/dashboard/elsewhere.d.ts +1 -1
- package/dist/module-types/src/dashboard/rpc-serve.d.ts +6 -0
- package/dist/module-types/src/dashboard/run-inbox.d.ts +4 -3
- package/dist/module-types/src/dashboard-rpc/control.d.ts +22 -6
- package/dist/module-types/src/dashboard-rpc/index.d.ts +3 -1
- package/dist/module-types/src/dashboard-rpc/personal-folder.d.ts +22 -0
- package/dist/module-types/src/dashboard-rpc/project-agent-data.d.ts +19 -0
- package/dist/module-types/src/dashboard-rpc/projects.d.ts +3 -5
- package/dist/module-types/src/index.d.ts +0 -1
- package/dist/module-types/src/personal-folder-shown.d.ts +10 -0
- package/dist/module-types/src/registry.d.ts +1 -1
- package/dist/module-types/src/repository-url.d.ts +6 -0
- package/dist/module-types/src/secure-address.d.ts +31 -0
- package/dist/personal-folder-shown.d.ts +11 -0
- package/dist/personal-folder-shown.d.ts.map +1 -0
- package/dist/personal-folder-shown.js +8 -0
- package/dist/personal-folder-shown.js.map +1 -0
- package/dist/registry.d.ts +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +1 -1
- package/dist/registry.js.map +1 -1
- package/dist/remove-files.d.ts +4 -3
- package/dist/remove-files.d.ts.map +1 -1
- package/dist/remove-files.js +6 -1
- package/dist/remove-files.js.map +1 -1
- package/dist/repository-url.d.ts +7 -0
- package/dist/repository-url.d.ts.map +1 -0
- package/dist/repository-url.js +17 -0
- package/dist/repository-url.js.map +1 -0
- package/dist/secure-address.d.ts +32 -0
- package/dist/secure-address.d.ts.map +1 -0
- package/dist/secure-address.js +50 -0
- package/dist/secure-address.js.map +1 -0
- package/dist/store/run-record.d.ts.map +1 -1
- package/dist/store/run-record.js +1 -0
- package/dist/store/run-record.js.map +1 -1
- package/dist/terminal.js +2 -0
- package/dist/terminal.js.map +1 -1
- package/dist/website/assets/chunks/chunk-BIhVwAkA.js +1 -0
- package/dist/website/assets/chunks/chunk-CSTMwN0A.js +1 -0
- package/dist/website/assets/chunks/chunk-DeonM-eN.js +3 -0
- package/dist/website/assets/chunks/chunk-kQ9-9YDn.js +18 -0
- package/dist/website/assets/emoji-compass.svg +75 -0
- package/dist/website/assets/emoji-confused.svg +34 -0
- package/dist/website/assets/emoji-construction.svg +188 -0
- package/dist/website/assets/emoji-flex.svg +1 -0
- package/dist/website/assets/emoji-hand-raised.svg +180 -0
- package/dist/website/assets/emoji-mech-arm.svg +1 -0
- package/dist/website/assets/emoji-robot.svg +105 -0
- package/dist/website/assets/emoji-rocket.svg +49 -0
- package/dist/website/assets/entries/entry-client-routing.CzHJwWDQ.js +2 -0
- package/dist/website/assets/entries/pages_banner.6_j-HGsV.js +1 -0
- package/dist/website/assets/entries/pages_go-to-dashboard.CxnTPDW0.js +1 -0
- package/dist/website/assets/entries/pages_index.Dcg_ZrR7.js +1 -0
- package/dist/website/assets/entries/pages_press.rRp1mRww.js +1 -0
- package/dist/website/assets/logo.svg +34 -0
- package/dist/website/assets/static/pages_index_styles-f7bc93a7.DHC1qZXc.css +1 -0
- package/dist/website/banner/index.html +28 -0
- package/dist/website/banner/index.pageContext.json +1 -0
- package/dist/website/banner.jpg +0 -0
- package/dist/website/go-to-dashboard/index.html +30 -0
- package/dist/website/go-to-dashboard/index.pageContext.json +1 -0
- package/dist/website/index.html +30 -0
- package/dist/website/index.pageContext.json +1 -0
- package/dist/website/press/index.html +29 -0
- package/dist/website/press/index.pageContext.json +1 -0
- package/package.json +28 -24
- package/dist/dashboard-bundle/assets/host/module-BjrL8fFt.js +0 -1
- package/dist/dashboard-bundle/assets/main-C50vMcm3.js +0 -152
- package/dist/dashboard-bundle/assets/main-DkmEveyx.css +0 -2
- package/dist/module-types/src/repository-address.d.ts +0 -36
- package/dist/repository-address.d.ts +0 -37
- package/dist/repository-address.d.ts.map +0 -1
- package/dist/repository-address.js +0 -59
- package/dist/repository-address.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-serve.d.ts","sourceRoot":"","sources":["../../src/dashboard/rpc-serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"rpc-serve.d.ts","sourceRoot":"","sources":["../../src/dashboard/rpc-serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { hostnameFromHostHeader, isLoopbackHost } from '../loopback-host.js';
|
|
2
|
+
import { certificateNames } from '../secure-address.js';
|
|
2
3
|
import { setDashboardContext } from '../dashboard-rpc/context.js';
|
|
3
4
|
import { RPC_HANDLERS, RPC_EVENT_STREAM } from '../dashboard-rpc/index.js';
|
|
4
5
|
import { followRunsChanged } from '../dashboard-rpc/runs-changed.js';
|
|
@@ -53,10 +54,29 @@ export function isJsonRequest(req) {
|
|
|
53
54
|
* computer's own address only, so the only `Host` a real user's browser can send is a loopback
|
|
54
55
|
* one — anything else is a rebound name and is rejected. An absent `Host` is rejected too:
|
|
55
56
|
* HTTP/1.1 requires it, and every browser sends it.
|
|
57
|
+
*
|
|
58
|
+
* The one other name let in is the secure address's (#1919), and only over its HTTPS: a rebound
|
|
59
|
+
* name never gets that far, since the browser finds the certificate is for another name and
|
|
60
|
+
* stops before it sends anything.
|
|
56
61
|
*/
|
|
57
62
|
export function isExpectedHost(req) {
|
|
58
63
|
const header = req.headers.host;
|
|
59
|
-
|
|
64
|
+
if (header === undefined || header === '')
|
|
65
|
+
return false;
|
|
66
|
+
const name = hostnameFromHostHeader(header);
|
|
67
|
+
return isLoopbackHost(name) || ownCertificateNames(req).includes(name);
|
|
68
|
+
}
|
|
69
|
+
/** Whether this request came to the secure address (#1919): over its HTTPS, by its name. */
|
|
70
|
+
export function isSecureAddressRequest(req) {
|
|
71
|
+
const header = req.headers.host;
|
|
72
|
+
return header !== undefined && ownCertificateNames(req).includes(hostnameFromHostHeader(header));
|
|
73
|
+
}
|
|
74
|
+
/** The names the certificate this request came in on is for: none for plain HTTP. */
|
|
75
|
+
function ownCertificateNames(req) {
|
|
76
|
+
const socket = req.socket;
|
|
77
|
+
if (!socket.encrypted)
|
|
78
|
+
return [];
|
|
79
|
+
return certificateNames(socket.getCertificate()?.subjectaltname);
|
|
60
80
|
}
|
|
61
81
|
/** Where the dashboard's RPCs live. One prefix, so the static handler can decline it by path. */
|
|
62
82
|
export const RPC_PREFIX = '/_rpc';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-serve.js","sourceRoot":"","sources":["../../src/dashboard/rpc-serve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rpc-serve.js","sourceRoot":"","sources":["../../src/dashboard/rpc-serve.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAA;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AA2HxC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAA;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAA;IAC7B,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,EAAE,IAAI,MAAM,KAAK,WAAW,IAAI,EAAE,CAAC;QAAE,OAAO,IAAI,CAAA;IACtF,IAAI,QAAgB,CAAA;IACpB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA,CAAC,0CAA0C;IACzD,CAAC;IACD,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAA;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAoB;IAChD,OAAO,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAA;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,GAAoB;IACjD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAA;IAC/B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IACvD,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC3C,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACxE,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,sBAAsB,CAAC,GAAoB;IACzD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAA;IAC/B,OAAO,MAAM,KAAK,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAA;AAClG,CAAC;AAED,qFAAqF;AACrF,SAAS,mBAAmB,CAAC,GAAoB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAmB,CAAA;IACtC,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,EAAE,CAAA;IAChC,OAAO,gBAAgB,CAAE,MAAM,CAAC,cAAc,EAAyC,EAAE,cAAc,CAAC,CAAA;AAC1G,CAAC;AAED,iGAAiG;AACjG,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAA;AAEjC,gGAAgG;AAChG,KAAK,UAAU,QAAQ,CAAC,GAAoB,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;IACnE,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAe,CAAA;QAC3B,IAAI,IAAI,GAAG,CAAC,MAAM,CAAA;QAClB,IAAI,IAAI,GAAG,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,QAAQ,CAAC,GAAoB,EAAE,GAAmB,EAAE,MAAc,EAAE,IAAa;IACxF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;AAC9H,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,gBAAgB,CAAC,GAAoB,EAAE,GAAmB,EAAE,GAAQ;IACjF,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAA;IAC5D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,mBAAmB;QACnC,eAAe,EAAE,UAAU;QAC3B,UAAU,EAAE,YAAY;QACxB,gFAAgF;QAChF,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAA;IACF,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,SAAS,EACT,OAAO,EACP,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACjD,CAAC,EACD,GAAG,EAAE;QACH,QAAQ,GAAG,IAAI,CAAA;QACf,GAAG,CAAC,GAAG,EAAE,CAAA;IACX,CAAC,CACF,CAAA;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,0FAA0F;QAC1F,8EAA8E;QAC9E,GAAG,CAAC,GAAG,EAAE,CAAA;QACT,OAAM;IACR,CAAC;IACD,IAAI,QAAQ;QAAE,OAAM,CAAC,oDAAoD;IACzE,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,EAAE,CAAA;QACN,GAAG,CAAC,GAAG,EAAE,CAAA;IACX,CAAC,CAAA;IACD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,GAAoB,EAAE,GAAmB;IACnE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,mBAAmB;QACnC,eAAe,EAAE,UAAU;QAC3B,UAAU,EAAE,YAAY;QACxB,mBAAmB,EAAE,IAAI;KAC1B,CAAC,CAAA;IACF,wDAAwD;IACxD,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;IAC5B,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAC/F,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAChF,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,aAAa,CAAC,KAAK,CAAC,CAAA;QACpB,IAAI,EAAE,CAAA;IACR,CAAC,CAAA;IACD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACzB,CAAC;AAED,gFAAgF;AAChF,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAE/B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,OAAyB;IACpD,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAC5B,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,2FAA2F;QAC3F,8FAA8F;QAC9F,4FAA4F;QAC5F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAA;QACvD,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAC3F,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;YACpD,GAAG,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;YACzC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;YACpD,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;YACjC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtD,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9C,uHAAuH;gBACvH,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;gBACjF,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/C,kIAAkI;gBAClI,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;gBACpF,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAClC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtC,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,IAAI,EAAE,EAAE,CAAC,CAAA;gBAChE,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAA;gBAC9E,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC/B,MAAM,IAAI,GAAc,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC,CAAC,CAAC,EAAE,CAAA;YACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oDAAoD,EAAE,CAAC,CAAA;gBAC9F,OAAO,IAAI,CAAA;YACb,CAAC;YACD,uFAAuF;YACvF,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAI,IAAgB,CAAC,CAAC,CAAA;YACzL,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yFAAyF;YACzF,0EAA0E;YAC1E,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;;gBAC5E,GAAG,CAAC,GAAG,EAAE,CAAA;QAChB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { type InboxLine } from '@openagt/agent-driver';
|
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
9
|
* The inbox of a run, in its checkout's `.openagent/`: the file agent-driver's session reads
|
|
10
|
-
*
|
|
10
|
+
* while a turn runs and when it ends, one JSON line per message, answer, or act on a message. The run's tool hands the session the
|
|
11
11
|
* same path.
|
|
12
12
|
*/
|
|
13
13
|
export declare const RUN_INBOX_FILE = "inbox.jsonl";
|
|
@@ -19,8 +19,9 @@ export type SteerResult = {
|
|
|
19
19
|
error: string;
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
|
-
* Hand one line to a run of the project at `cwd`. A run that is working takes it from its inbox
|
|
23
|
-
*
|
|
22
|
+
* Hand one line to a run of the project at `cwd`. A run that is working takes it from its inbox:
|
|
23
|
+
* a message reaches the agent at its next step, or when its turn ends when it was sent for later.
|
|
24
|
+
* Taking back a message and Send now act on the turn that runs; with none, they are done. A run that has ended (done, stopped, failed, or waiting on its question) is
|
|
24
25
|
* continued through the project's `resume` hook. A run that ends while the line is on its way
|
|
25
26
|
* would leave it in an inbox nobody reads, so the run is looked at again after the write, and
|
|
26
27
|
* what is still in the inbox then is taken back and resumes the run instead.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-inbox.d.ts","sourceRoot":"","sources":["../../src/dashboard/run-inbox.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"run-inbox.d.ts","sourceRoot":"","sources":["../../src/dashboard/run-inbox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAK3F;;;;;GAKG;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAE3C,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAQrE;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,EACf,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAAO,GAC5E,OAAO,CAAC,WAAW,CAAC,CAiBtB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { hostname } from 'node:os';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import { appendInbox, takeInbox } from '@openagt/agent-driver';
|
|
3
|
+
import { appendInbox, promptLines, takeInbox } from '@openagt/agent-driver';
|
|
4
4
|
import { OPENAGENT_DIR } from '../openagent-dir.js';
|
|
5
5
|
import { runResumeHook } from '../project-hooks.js';
|
|
6
6
|
import { findAgent, isPidAlive, resolveAgentCheckout } from '../store/index.js';
|
|
@@ -12,7 +12,7 @@ import { findAgent, isPidAlive, resolveAgentCheckout } from '../store/index.js';
|
|
|
12
12
|
*/
|
|
13
13
|
/**
|
|
14
14
|
* The inbox of a run, in its checkout's `.openagent/`: the file agent-driver's session reads
|
|
15
|
-
*
|
|
15
|
+
* while a turn runs and when it ends, one JSON line per message, answer, or act on a message. The run's tool hands the session the
|
|
16
16
|
* same path.
|
|
17
17
|
*/
|
|
18
18
|
export const RUN_INBOX_FILE = 'inbox.jsonl';
|
|
@@ -22,8 +22,9 @@ async function isRunWorking(cwd, agentId) {
|
|
|
22
22
|
return agent?.status === 'running' && agent.pid !== undefined && agent.host === hostname() && isPidAlive(agent.pid);
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Hand one line to a run of the project at `cwd`. A run that is working takes it from its inbox
|
|
26
|
-
*
|
|
25
|
+
* Hand one line to a run of the project at `cwd`. A run that is working takes it from its inbox:
|
|
26
|
+
* a message reaches the agent at its next step, or when its turn ends when it was sent for later.
|
|
27
|
+
* Taking back a message and Send now act on the turn that runs; with none, they are done. A run that has ended (done, stopped, failed, or waiting on its question) is
|
|
27
28
|
* continued through the project's `resume` hook. A run that ends while the line is on its way
|
|
28
29
|
* would leave it in an inbox nobody reads, so the run is looked at again after the write, and
|
|
29
30
|
* what is still in the inbox then is taken back and resumes the run instead.
|
|
@@ -38,7 +39,7 @@ export async function sayToRun(cwd, agentId, line, deps = {}) {
|
|
|
38
39
|
return { ok: true };
|
|
39
40
|
lines.splice(0, 1, ...(await takeInbox(inbox)));
|
|
40
41
|
}
|
|
41
|
-
for (const stranded of lines) {
|
|
42
|
+
for (const stranded of promptLines(lines)) {
|
|
42
43
|
const resumed = await runResumeHook(cwd, {
|
|
43
44
|
runId: agentId,
|
|
44
45
|
...(stranded.kind === 'message' ? { text: stranded.text, ...(stranded.publish !== undefined ? { publish: stranded.publish } : {}) } : { answer: stranded.answer }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-inbox.js","sourceRoot":"","sources":["../../src/dashboard/run-inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAkB,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"run-inbox.js","sourceRoot":"","sources":["../../src/dashboard/run-inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAkB,MAAM,uBAAuB,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE/E;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAA;AAK3C,iGAAiG;AACjG,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,OAAe;IACtD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAClE,OAAO,KAAK,EAAE,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACrH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,OAAe,EACf,IAAe,EACf,IAAI,GAAuE,EAAE;IAE7E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,YAAY,CAAA;IAChD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;IACpB,IAAI,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,CAAA;QAC3F,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAC9B,IAAI,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;QACtD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;YACvC,KAAK,EAAE,OAAO;YACd,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;SACnK,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,OAAO,CAAA;IACjC,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC"}
|
|
@@ -7,6 +7,7 @@ import type { BridgeBrowserOwner } from '../bridge-browser.js';
|
|
|
7
7
|
import type { AddProjectResult, RemoveProjectResult, StartAgentOptions, StartAgentResult, StartedInResult } from './types.js';
|
|
8
8
|
import type { EventsSource, RemoteAgents } from './rpc-serve.js';
|
|
9
9
|
import { type RelayHandlers } from './relay-endpoints.js';
|
|
10
|
+
import { type SecureAddress } from '../secure-address.js';
|
|
10
11
|
/** Options for {@link startDashboard}. */
|
|
11
12
|
export interface DashboardOptions {
|
|
12
13
|
/** Port to bind. Default `4200`; pass `0` for an ephemeral port. */
|
|
@@ -101,11 +102,25 @@ export interface DashboardOptions {
|
|
|
101
102
|
* wires one, since it is the process that can see every project's runs.
|
|
102
103
|
*/
|
|
103
104
|
bridgeSessions?: () => Promise<import('./bridge-endpoints.js').BridgeSession[]>;
|
|
105
|
+
/**
|
|
106
|
+
* The secure address (#1919): also answer over HTTPS on `port`, with the certificate made on
|
|
107
|
+
* this computer for `name`. Absent serves plain HTTP only.
|
|
108
|
+
*/
|
|
109
|
+
secure?: SecureAddress & {
|
|
110
|
+
port: number;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* The website's copy (#1919), served on the secure address beside the dashboard: its landing
|
|
114
|
+
* page at `/` when the person picks it, and its other pages at their own paths.
|
|
115
|
+
*/
|
|
116
|
+
websiteDir?: string;
|
|
104
117
|
}
|
|
105
118
|
/** A running localhost dashboard: the built SPA + its RPC mount. */
|
|
106
119
|
export interface Dashboard {
|
|
107
|
-
/** The URL
|
|
120
|
+
/** The URL this computer's own programs call it on. */
|
|
108
121
|
readonly url: string;
|
|
122
|
+
/** The secure address's URL, the one to open in a browser, when it is answered. */
|
|
123
|
+
readonly secureUrl?: string;
|
|
109
124
|
/** Stop the server. Idempotent. */
|
|
110
125
|
close(): Promise<void>;
|
|
111
126
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
|
package/dist/dashboard/server.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
|
+
import { createServer as createSecureServer } from 'node:https';
|
|
2
3
|
import { serveClientBundle } from './static.js';
|
|
3
|
-
import { makeRpcMount, RPC_PREFIX, isSameOriginRequest, isExpectedHost, isJsonRequest } from './rpc-serve.js';
|
|
4
|
+
import { makeRpcMount, RPC_PREFIX, isSameOriginRequest, isExpectedHost, isJsonRequest, isSecureAddressRequest } from './rpc-serve.js';
|
|
5
|
+
import { handleViewRequest, keepView, serveWebsite, VIEW_PREFIX } from './website.js';
|
|
4
6
|
import { requestPathname } from '../request-path.js';
|
|
5
7
|
import { BROUGHT_MODULES_PREFIX, COMPUTER_MODULES_PREFIX, MODULES_PREFIX, serveBroughtModuleFile, serveComputerModuleFile, serveModuleFile } from './module-serve.js';
|
|
6
8
|
import { handleRelayRequest, RELAY_PREFIX } from './relay-endpoints.js';
|
|
@@ -10,6 +12,7 @@ import { BRIDGE_PREFIX, EXPECTED_EXTENSION_VERSION, handleBridgeRequest } from '
|
|
|
10
12
|
import { bridgeQuestions } from './bridge-store.js';
|
|
11
13
|
import { bridgeStarts } from './bridge-starts.js';
|
|
12
14
|
import { WEB_START_PREFIX, handleWebStartRequest } from './web-start-endpoints.js';
|
|
15
|
+
import { SECURE_PORT } from '../secure-address.js';
|
|
13
16
|
/**
|
|
14
17
|
* Start the localhost dashboard: a tiny `node:http` server that serves the built SPA (#405) and
|
|
15
18
|
* mounts its RPC surface at `/_rpc` — the calls and the live-event stream. The dashboard reads a
|
|
@@ -18,7 +21,7 @@ import { WEB_START_PREFIX, handleWebStartRequest } from './web-start-endpoints.j
|
|
|
18
21
|
* daemon's own process, so `sendStart` / `sendAddProject` call the daemon's own closures via
|
|
19
22
|
* {@link DashboardOptions.onStart} / {@link DashboardOptions.onAddProject}.
|
|
20
23
|
*/
|
|
21
|
-
export function startDashboard(opts) {
|
|
24
|
+
export async function startDashboard(opts) {
|
|
22
25
|
const port = opts.port ?? 4200;
|
|
23
26
|
const clientBundleDir = opts.clientBundleDir;
|
|
24
27
|
// A broken install ships no built bundle (the published package always does), so serve
|
|
@@ -95,7 +98,7 @@ export function startDashboard(opts) {
|
|
|
95
98
|
get: id => bridgeStarts().get(id),
|
|
96
99
|
}
|
|
97
100
|
: undefined;
|
|
98
|
-
const
|
|
101
|
+
const handle = (req, res) => {
|
|
99
102
|
const pathname = requestPathname(req);
|
|
100
103
|
if (pathname === undefined) {
|
|
101
104
|
res.writeHead(400, { 'content-type': 'text/plain' }).end('bad request');
|
|
@@ -161,28 +164,67 @@ export function startDashboard(opts) {
|
|
|
161
164
|
});
|
|
162
165
|
return;
|
|
163
166
|
}
|
|
167
|
+
const websiteDir = opts.websiteDir;
|
|
168
|
+
if (websiteDir && isSecureAddressRequest(req)) {
|
|
169
|
+
if (pathname === VIEW_PREFIX || pathname.startsWith(`${VIEW_PREFIX}/`)) {
|
|
170
|
+
handleViewRequest(res, pathname);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
keepView(req, res);
|
|
174
|
+
void serveWebsite(req, res, websiteDir, pathname)
|
|
175
|
+
.then(served => (served ? undefined : serveClientBundle(req, res, clientBundleDir)))
|
|
176
|
+
.catch(() => {
|
|
177
|
+
if (!res.headersSent)
|
|
178
|
+
res.writeHead(500, { 'content-type': 'text/plain' }).end('page unreadable');
|
|
179
|
+
});
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
164
182
|
void serveClientBundle(req, res, clientBundleDir);
|
|
165
|
-
}
|
|
166
|
-
|
|
183
|
+
};
|
|
184
|
+
const server = createServer(handle);
|
|
185
|
+
const secureServer = opts.secure ? createSecureServer({ key: opts.secure.key, cert: opts.secure.cert }, handle) : undefined;
|
|
186
|
+
const close = async () => {
|
|
167
187
|
// Stop polling with the server: the poller outlives every agent by design,
|
|
168
188
|
// so nothing else would ever end it.
|
|
169
189
|
quota.stop();
|
|
170
|
-
await closeServer(server);
|
|
171
|
-
}
|
|
190
|
+
await Promise.all([closeServer(server), secureServer ? closeServer(secureServer) : undefined]);
|
|
191
|
+
};
|
|
192
|
+
const dashboard = await listenDashboard(server, port, close);
|
|
193
|
+
if (!opts.secure || !secureServer)
|
|
194
|
+
return dashboard;
|
|
195
|
+
try {
|
|
196
|
+
return { ...dashboard, secureUrl: secureUrlOf(opts.secure.name, await listen(secureServer, opts.secure.port)) };
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
// A secure address that cannot start leaves the dashboard on its plain address, as without one.
|
|
200
|
+
console.log(`the secure address ${opts.secure.name} could not start (${err instanceof Error ? err.message : String(err)}): the dashboard answers on ${dashboard.url} only`);
|
|
201
|
+
return dashboard;
|
|
202
|
+
}
|
|
172
203
|
}
|
|
173
204
|
/**
|
|
174
|
-
* The
|
|
175
|
-
*
|
|
205
|
+
* The secure address's URL. On {@link SECURE_PORT} it has no port: the install sends the name's
|
|
206
|
+
* port 443 there. Any other port (a test's own) is said.
|
|
207
|
+
*/
|
|
208
|
+
function secureUrlOf(name, port) {
|
|
209
|
+
return port === SECURE_PORT ? `https://${name}` : `https://${name}:${port}`;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The one address the dashboard listens on, its secure address too: this computer's own. Whatever
|
|
213
|
+
* opens OpenAgent to a network is a package of its own, which listens there and passes what it
|
|
214
|
+
* lets in on to here.
|
|
176
215
|
*/
|
|
177
216
|
const DASHBOARD_HOST = '127.0.0.1';
|
|
178
217
|
/** Bind the server and resolve a {@link Dashboard} handle; rejects if the port is already taken. */
|
|
179
|
-
function listenDashboard(server, port, close) {
|
|
218
|
+
async function listenDashboard(server, port, close) {
|
|
219
|
+
return { url: `http://${DASHBOARD_HOST}:${await listen(server, port)}`, close };
|
|
220
|
+
}
|
|
221
|
+
/** Bind the server on this computer's own address; resolves the port bound, rejects if it is taken. */
|
|
222
|
+
function listen(server, port) {
|
|
180
223
|
return new Promise((resolvePromise, rejectPromise) => {
|
|
181
224
|
server.once('error', rejectPromise);
|
|
182
225
|
server.listen(port, DASHBOARD_HOST, () => {
|
|
183
226
|
server.removeListener('error', rejectPromise);
|
|
184
|
-
|
|
185
|
-
resolvePromise({ url: `http://${DASHBOARD_HOST}:${address.port}`, close });
|
|
227
|
+
resolvePromise(server.address().port);
|
|
186
228
|
});
|
|
187
229
|
});
|
|
188
230
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* The file `pathname` names in `dir`: the file itself, or a folder's `index.html` (`/press` is
|
|
4
|
+
* `press/index.html`, `/` is `index.html`). Undefined when there is none, when the escape is
|
|
5
|
+
* malformed, or when the path leaves `dir`: path-traversal never reads outside it.
|
|
6
|
+
*/
|
|
7
|
+
export declare function fileIn(dir: string, pathname: string): Promise<string | undefined>;
|
|
8
|
+
/**
|
|
9
|
+
* Send `target`, a file in the bundle `root`. Only the fingerprinted files under `assets/` are
|
|
10
|
+
* immutable, the host files a module imports among them: index.html, which names this version's
|
|
11
|
+
* in its import map, and everything else at a stable path must always revalidate, or a dashboard
|
|
12
|
+
* upgrade would not reach a browser that kept the old page until its cache expired a year later.
|
|
13
|
+
*/
|
|
14
|
+
export declare function sendFile(req: IncomingMessage, res: ServerResponse, root: string, target: string): Promise<void>;
|
|
2
15
|
/**
|
|
3
16
|
* Serve `dir`'s static bundle for this request: the requested file when it exists,
|
|
4
17
|
* otherwise `index.html` (the SPA fallback, so client routes and unknown paths still
|
|
5
|
-
* boot the app).
|
|
6
|
-
*
|
|
18
|
+
* boot the app). A request that escapes `dir` falls back to `index.html` rather than reading
|
|
19
|
+
* outside the bundle.
|
|
7
20
|
*/
|
|
8
21
|
export declare function serveClientBundle(req: IncomingMessage, res: ServerResponse, dir: string): Promise<void>;
|
|
9
22
|
//# sourceMappingURL=static.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/dashboard/static.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAwBhE;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/dashboard/static.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAwBhE;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQvF;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrH;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7G"}
|
package/dist/dashboard/static.js
CHANGED
|
@@ -22,21 +22,28 @@ function tryDecode(pathname) {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* `index.html` rather than reading outside the bundle.
|
|
25
|
+
* The file `pathname` names in `dir`: the file itself, or a folder's `index.html` (`/press` is
|
|
26
|
+
* `press/index.html`, `/` is `index.html`). Undefined when there is none, when the escape is
|
|
27
|
+
* malformed, or when the path leaves `dir`: path-traversal never reads outside it.
|
|
29
28
|
*/
|
|
30
|
-
export async function
|
|
31
|
-
// Neither an unparseable request target nor a malformed escape (`/%zz`) may throw: this
|
|
32
|
-
// runs void-dispatched, so an exception here would be an unhandled rejection that takes
|
|
33
|
-
// the daemon down (#938). Both fall back to the SPA shell like any other unknown path.
|
|
34
|
-
const pathname = requestPathname(req) ?? '/';
|
|
29
|
+
export async function fileIn(dir, pathname) {
|
|
35
30
|
const rel = tryDecode(pathname).replace(/^\/+/, '');
|
|
36
31
|
const root = normalize(dir);
|
|
37
32
|
const candidate = normalize(join(root, rel));
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
if (candidate !== root && !candidate.startsWith(root + sep))
|
|
34
|
+
return undefined;
|
|
35
|
+
if (rel && (await isFile(candidate)))
|
|
36
|
+
return candidate;
|
|
37
|
+
const index = join(candidate, 'index.html');
|
|
38
|
+
return (await isFile(index)) ? index : undefined;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Send `target`, a file in the bundle `root`. Only the fingerprinted files under `assets/` are
|
|
42
|
+
* immutable, the host files a module imports among them: index.html, which names this version's
|
|
43
|
+
* in its import map, and everything else at a stable path must always revalidate, or a dashboard
|
|
44
|
+
* upgrade would not reach a browser that kept the old page until its cache expired a year later.
|
|
45
|
+
*/
|
|
46
|
+
export async function sendFile(req, res, root, target) {
|
|
40
47
|
const body = await readFile(target).catch(() => undefined);
|
|
41
48
|
const facts = await stat(target).catch(() => undefined);
|
|
42
49
|
if (body === undefined) {
|
|
@@ -44,13 +51,21 @@ export async function serveClientBundle(req, res, dir) {
|
|
|
44
51
|
res.end('dashboard bundle not built');
|
|
45
52
|
return;
|
|
46
53
|
}
|
|
47
|
-
const
|
|
48
|
-
// Only the fingerprinted files under `assets/` are immutable, the host files a module imports
|
|
49
|
-
// among them: index.html, which names this version's in its import map, and everything else at a
|
|
50
|
-
// stable path must always revalidate, or a dashboard upgrade would not reach a browser that kept
|
|
51
|
-
// the old page until its cache expired a year later.
|
|
52
|
-
const cacheControl = target.startsWith(join(root, 'assets') + sep) ? 'public, max-age=31536000, immutable' : 'no-cache';
|
|
54
|
+
const cacheControl = target.startsWith(join(normalize(root), 'assets') + sep) ? 'public, max-age=31536000, immutable' : 'no-cache';
|
|
53
55
|
// A file's packed copy is kept while the file is the same one.
|
|
54
|
-
await sendBody(req, res, 200, { 'content-type':
|
|
56
|
+
await sendBody(req, res, 200, { 'content-type': contentTypeFor(target), 'cache-control': cacheControl, ...(facts ? { etag: fileTag(facts) } : {}) }, body, facts ? `${target} ${facts.mtimeMs} ${facts.size}` : undefined);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Serve `dir`'s static bundle for this request: the requested file when it exists,
|
|
60
|
+
* otherwise `index.html` (the SPA fallback, so client routes and unknown paths still
|
|
61
|
+
* boot the app). A request that escapes `dir` falls back to `index.html` rather than reading
|
|
62
|
+
* outside the bundle.
|
|
63
|
+
*/
|
|
64
|
+
export async function serveClientBundle(req, res, dir) {
|
|
65
|
+
// Neither an unparseable request target nor a malformed escape (`/%zz`) may throw: this
|
|
66
|
+
// runs void-dispatched, so an exception here would be an unhandled rejection that takes
|
|
67
|
+
// the daemon down (#938). Both fall back to the SPA shell like any other unknown path.
|
|
68
|
+
const target = (await fileIn(dir, requestPathname(req) ?? '/')) ?? join(dir, 'index.html');
|
|
69
|
+
await sendFile(req, res, dir, target);
|
|
55
70
|
}
|
|
56
71
|
//# sourceMappingURL=static.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/dashboard/static.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,0FAA0F;AAC1F,6DAA6D;AAC7D,wFAAwF;AACxF,iDAAiD;AACjD,sEAAsE;AAEtE,sDAAsD;AACtD,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;AAC5D,CAAC;AAED,iGAAiG;AACjG,SAAS,SAAS,CAAC,QAAgB;IACjC,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/dashboard/static.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* The website on an installed computer (#1919). There, the website's own name is answered by this
|
|
4
|
+
* dashboard (the secure address), which carries a copy of the website, built with it into
|
|
5
|
+
* `dist/website`. Its `/` shows the dashboard, or the landing page once the person picks it on
|
|
6
|
+
* the toggle under the logo; the website's other pages are at their own paths, beside the
|
|
7
|
+
* dashboard's, whose files never have the same names.
|
|
8
|
+
*/
|
|
9
|
+
/** Where the toggle is answered: `HEAD /_view` says this is the dashboard's copy, `/_view/<view>` picks one. */
|
|
10
|
+
export declare const VIEW_PREFIX = "/_view";
|
|
11
|
+
/** What `/` shows, kept in the browser. */
|
|
12
|
+
export declare const VIEW_COOKIE = "openagent-view";
|
|
13
|
+
export type View = 'dashboard' | 'landing';
|
|
14
|
+
/** The website's copy, when the dashboard was built with one. */
|
|
15
|
+
export declare function resolveWebsite(): Promise<string | undefined>;
|
|
16
|
+
/** What `/` shows this browser: the dashboard, unless it picked the landing page. */
|
|
17
|
+
export declare function viewOf(req: IncomingMessage): View;
|
|
18
|
+
/**
|
|
19
|
+
* A browser on the secure address that picked nothing yet is given the dashboard as its pick, so
|
|
20
|
+
* the dashboard's page knows from its first frame that the toggle is there (its `ViewToggle`).
|
|
21
|
+
*/
|
|
22
|
+
export declare function keepView(req: IncomingMessage, res: ServerResponse): void;
|
|
23
|
+
/**
|
|
24
|
+
* The toggle's own route. `/_view` answers 204, which is how a page tells this copy from the
|
|
25
|
+
* public website (404 there). `/_view/landing` and `/_view/dashboard` keep the pick and go to `/`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function handleViewRequest(res: ServerResponse, pathname: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Serve the website's file for this request, when it is one: its landing page at `/` when this
|
|
30
|
+
* browser picked it, and any of its other files at its own path. Resolves false when the request
|
|
31
|
+
* is the dashboard's.
|
|
32
|
+
*/
|
|
33
|
+
export declare function serveWebsite(req: IncomingMessage, res: ServerResponse, dir: string, pathname: string): Promise<boolean>;
|
|
34
|
+
//# sourceMappingURL=website.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"website.d.ts","sourceRoot":"","sources":["../../src/dashboard/website.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhE;;;;;;GAMG;AAEH,gHAAgH;AAChH,eAAO,MAAM,WAAW,WAAW,CAAA;AACnC,2CAA2C;AAC3C,eAAO,MAAM,WAAW,mBAAmB,CAAA;AAE3C,MAAM,MAAM,IAAI,GAAG,WAAW,GAAG,SAAS,CAAA;AAE1C,iEAAiE;AACjE,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAIlE;AASD,qFAAqF;AACrF,wBAAgB,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAEjD;AAOD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAExE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAiB7E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7H"}
|