crewly 1.20.429 → 1.20.431

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.
@@ -19,6 +19,26 @@ import type { RequestHandler } from 'express';
19
19
  * @returns e.g. `/assets/index-b91a9801.js`, or null for a dev / unbuilt page
20
20
  */
21
21
  export declare function parseDashboardEntry(html: string): string | null;
22
+ /**
23
+ * CSP hash sources of the inline scripts of a built `index.html`.
24
+ *
25
+ * The page themes itself before first paint with an inline script
26
+ * (`THEME_INIT_SCRIPT`); the Content-Security-Policy is `script-src 'self'`,
27
+ * which blocks inline scripts unless their hash is listed. The hash is of
28
+ * the script body exactly as served, so it is computed from the file
29
+ * rather than written down (a changed script would silently stop running).
30
+ *
31
+ * @param html - index.html content
32
+ * @returns e.g. `["'sha256-…'"]` — one per inline script, in order
33
+ */
34
+ export declare function inlineScriptHashes(html: string): string[];
35
+ /**
36
+ * Read the inline-script CSP hashes of the dashboard this backend serves.
37
+ *
38
+ * @param indexHtmlPath - Path of `frontend/dist/index.html`
39
+ * @returns The hash sources, [] when there is no built dashboard
40
+ */
41
+ export declare function loadInlineScriptHashes(indexHtmlPath: string): string[];
22
42
  /**
23
43
  * Read the entry script of the dashboard this backend serves.
24
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-build.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/core/dashboard-build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAyB,cAAc,EAAY,MAAM,SAAS,CAAC;AAG/E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMvE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAKzE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEpH"}
1
+ {"version":3,"file":"dashboard-build.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/core/dashboard-build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAyB,cAAc,EAAY,MAAM,SAAS,CAAC;AAG/E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CASzD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAMtE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMvE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAKzE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEpH"}
@@ -12,6 +12,7 @@
12
12
  * @module services/core/dashboard-build
13
13
  */
14
14
  import * as fs from 'fs';
15
+ import { createHash } from 'crypto';
15
16
  import { OWNER_AUTH_CONSTANTS } from '../../constants.js';
16
17
  /**
17
18
  * The entry script of a built `index.html`.
@@ -29,6 +30,43 @@ export function parseDashboardEntry(html) {
29
30
  }
30
31
  return null;
31
32
  }
33
+ /**
34
+ * CSP hash sources of the inline scripts of a built `index.html`.
35
+ *
36
+ * The page themes itself before first paint with an inline script
37
+ * (`THEME_INIT_SCRIPT`); the Content-Security-Policy is `script-src 'self'`,
38
+ * which blocks inline scripts unless their hash is listed. The hash is of
39
+ * the script body exactly as served, so it is computed from the file
40
+ * rather than written down (a changed script would silently stop running).
41
+ *
42
+ * @param html - index.html content
43
+ * @returns e.g. `["'sha256-…'"]` — one per inline script, in order
44
+ */
45
+ export function inlineScriptHashes(html) {
46
+ const out = [];
47
+ const re = /<script\b([^>]*)>([\s\S]*?)<\/script>/gi;
48
+ let m;
49
+ while ((m = re.exec(html)) !== null) {
50
+ if (/\bsrc=/i.test(m[1]) || m[2].trim() === '')
51
+ continue;
52
+ out.push(`'sha256-${createHash('sha256').update(m[2], 'utf8').digest('base64')}'`);
53
+ }
54
+ return out;
55
+ }
56
+ /**
57
+ * Read the inline-script CSP hashes of the dashboard this backend serves.
58
+ *
59
+ * @param indexHtmlPath - Path of `frontend/dist/index.html`
60
+ * @returns The hash sources, [] when there is no built dashboard
61
+ */
62
+ export function loadInlineScriptHashes(indexHtmlPath) {
63
+ try {
64
+ return inlineScriptHashes(fs.readFileSync(indexHtmlPath, 'utf8'));
65
+ }
66
+ catch {
67
+ return [];
68
+ }
69
+ }
32
70
  /**
33
71
  * Read the entry script of the dashboard this backend serves.
34
72
  *
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-build.js","sourceRoot":"","sources":["../../../../../../backend/src/services/core/dashboard-build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,GAAG,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,GAAG,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,OAAO,CAAC,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAChE,IAAI,KAAK;YAAE,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACnE,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AAC7G,CAAC"}
1
+ {"version":3,"file":"dashboard-build.js","sourceRoot":"","sources":["../../../../../../backend/src/services/core/dashboard-build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,GAAG,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,GAAG,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,yCAAyC,CAAC;IACrD,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAS;QACzD,GAAG,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAqB;IAC1D,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,OAAO,CAAC,IAAa,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAChE,IAAI,KAAK;YAAE,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACnE,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AAC7G,CAAC"}
@@ -1,4 +1,4 @@
1
1
  {
2
- "commit": "2e9368e163e9f2863919d459b68456251d18e0cf",
3
- "builtAt": "2026-10-26T06:08:07.555Z"
2
+ "commit": "15fcf0d694103fbeb52ec264473fddf993612837",
3
+ "builtAt": "2026-10-26T07:21:39.075Z"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crewly",
3
- "version": "1.20.429",
3
+ "version": "1.20.431",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration platform for AI coding teams — coordinates Claude Code, Gemini CLI, and Codex agents with a real-time web dashboard",
6
6
  "workspaces": [