crewly 1.20.180 → 1.20.182

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.
Files changed (157) hide show
  1. package/config/skills/agent/remote-browser/SKILL.md +28 -8
  2. package/dist/backend/backend/src/constants.d.ts +89 -1
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +99 -2
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +2 -1
  7. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  8. package/dist/backend/backend/src/controllers/browser/browser.controller.js +15 -1
  9. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  10. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts +11 -1
  11. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
  12. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +44 -9
  13. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
  14. package/dist/backend/backend/src/controllers/system/runtime-terms.controller.d.ts +31 -0
  15. package/dist/backend/backend/src/controllers/system/runtime-terms.controller.d.ts.map +1 -0
  16. package/dist/backend/backend/src/controllers/system/runtime-terms.controller.js +99 -0
  17. package/dist/backend/backend/src/controllers/system/runtime-terms.controller.js.map +1 -0
  18. package/dist/backend/backend/src/index.d.ts.map +1 -1
  19. package/dist/backend/backend/src/index.js +51 -0
  20. package/dist/backend/backend/src/index.js.map +1 -1
  21. package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
  22. package/dist/backend/backend/src/routes/modules/system.routes.js +3 -0
  23. package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
  24. package/dist/backend/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -1
  25. package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js +5 -0
  26. package/dist/backend/backend/src/services/agent/antigravity-runtime.service.js.map +1 -1
  27. package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts +202 -0
  28. package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts.map +1 -0
  29. package/dist/backend/backend/src/services/browser/browser-approval.service.js +533 -0
  30. package/dist/backend/backend/src/services/browser/browser-approval.service.js.map +1 -0
  31. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +24 -0
  32. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  33. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +55 -0
  34. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  35. package/dist/backend/backend/src/services/browser/browser-session.service.d.ts +51 -0
  36. package/dist/backend/backend/src/services/browser/browser-session.service.d.ts.map +1 -1
  37. package/dist/backend/backend/src/services/browser/browser-session.service.js +82 -3
  38. package/dist/backend/backend/src/services/browser/browser-session.service.js.map +1 -1
  39. package/dist/backend/backend/src/services/browser/held-action-store.d.ts +125 -0
  40. package/dist/backend/backend/src/services/browser/held-action-store.d.ts.map +1 -0
  41. package/dist/backend/backend/src/services/browser/held-action-store.js +141 -0
  42. package/dist/backend/backend/src/services/browser/held-action-store.js.map +1 -0
  43. package/dist/backend/backend/src/services/decisions/decision-card.d.ts +23 -5
  44. package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/decisions/decision-card.js +56 -9
  46. package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
  47. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +96 -1
  48. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/decisions/decision.service.js +190 -8
  50. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  51. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/decisions/decision.wiring.js +7 -0
  53. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  54. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts +8 -0
  55. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +5 -0
  57. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -1
  58. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +2 -0
  59. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +4 -0
  61. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  62. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +2 -0
  63. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
  65. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +3 -0
  67. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  68. package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts +15 -1
  69. package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts.map +1 -1
  70. package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.js +13 -2
  71. package/dist/backend/backend/src/services/runtime-fallback/runtime-smoke-test.service.js.map +1 -1
  72. package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts +92 -0
  73. package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts.map +1 -0
  74. package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.js +199 -0
  75. package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-driver.js.map +1 -0
  76. package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts +79 -0
  77. package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts.map +1 -0
  78. package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.js +145 -0
  79. package/dist/backend/backend/src/services/runtime-terms/antigravity-terms-screens.js.map +1 -0
  80. package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.d.ts +75 -0
  81. package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.d.ts.map +1 -0
  82. package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.js +218 -0
  83. package/dist/backend/backend/src/services/runtime-terms/fake-agy-tui.fixture.js.map +1 -0
  84. package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts +245 -0
  85. package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts.map +1 -0
  86. package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.js +428 -0
  87. package/dist/backend/backend/src/services/runtime-terms/runtime-terms-consent.service.js.map +1 -0
  88. package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.d.ts +67 -0
  89. package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.d.ts.map +1 -0
  90. package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.js +78 -0
  91. package/dist/backend/backend/src/services/runtime-terms/runtime-terms.store.js.map +1 -0
  92. package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.d.ts +39 -0
  93. package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.d.ts.map +1 -0
  94. package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.js +161 -0
  95. package/dist/backend/backend/src/services/runtime-terms/runtime-terms.wiring.js.map +1 -0
  96. package/dist/backend/backend/src/types/decision.types.d.ts +55 -2
  97. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  98. package/dist/backend/build-info.json +2 -2
  99. package/dist/cli/backend/src/constants.d.ts +89 -1
  100. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  101. package/dist/cli/backend/src/constants.js +99 -2
  102. package/dist/cli/backend/src/constants.js.map +1 -1
  103. package/dist/cli/backend/src/services/agent/antigravity-runtime.service.d.ts.map +1 -1
  104. package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js +5 -0
  105. package/dist/cli/backend/src/services/agent/antigravity-runtime.service.js.map +1 -1
  106. package/dist/cli/backend/src/services/decisions/decision-card.d.ts +165 -0
  107. package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -0
  108. package/dist/cli/backend/src/services/decisions/decision-card.js +358 -0
  109. package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -0
  110. package/dist/cli/backend/src/services/decisions/decision-contract.d.ts +83 -0
  111. package/dist/cli/backend/src/services/decisions/decision-contract.d.ts.map +1 -0
  112. package/dist/cli/backend/src/services/decisions/decision-contract.js +226 -0
  113. package/dist/cli/backend/src/services/decisions/decision-contract.js.map +1 -0
  114. package/dist/cli/backend/src/services/decisions/decision-store.d.ts +80 -0
  115. package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -0
  116. package/dist/cli/backend/src/services/decisions/decision-store.js +151 -0
  117. package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -0
  118. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +376 -0
  119. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -0
  120. package/dist/cli/backend/src/services/decisions/decision.service.js +821 -0
  121. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -0
  122. package/dist/cli/backend/src/services/decisions/ticket-thread-store.d.ts +97 -0
  123. package/dist/cli/backend/src/services/decisions/ticket-thread-store.d.ts.map +1 -0
  124. package/dist/cli/backend/src/services/decisions/ticket-thread-store.js +137 -0
  125. package/dist/cli/backend/src/services/decisions/ticket-thread-store.js.map +1 -0
  126. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +136 -0
  127. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -0
  128. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js +152 -0
  129. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -0
  130. package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts +217 -0
  131. package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.d.ts.map +1 -0
  132. package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.js +430 -0
  133. package/dist/cli/backend/src/services/runtime-fallback/runtime-smoke-test.service.js.map +1 -0
  134. package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts +92 -0
  135. package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.d.ts.map +1 -0
  136. package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.js +199 -0
  137. package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-driver.js.map +1 -0
  138. package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts +79 -0
  139. package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.d.ts.map +1 -0
  140. package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.js +145 -0
  141. package/dist/cli/backend/src/services/runtime-terms/antigravity-terms-screens.js.map +1 -0
  142. package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts +245 -0
  143. package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.d.ts.map +1 -0
  144. package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.js +428 -0
  145. package/dist/cli/backend/src/services/runtime-terms/runtime-terms-consent.service.js.map +1 -0
  146. package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.d.ts +67 -0
  147. package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.d.ts.map +1 -0
  148. package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.js +78 -0
  149. package/dist/cli/backend/src/services/runtime-terms/runtime-terms.store.js.map +1 -0
  150. package/dist/cli/backend/src/types/decision.types.d.ts +192 -0
  151. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -0
  152. package/dist/cli/backend/src/types/decision.types.js +13 -0
  153. package/dist/cli/backend/src/types/decision.types.js.map +1 -0
  154. package/dist/cli/cli/src/commands/harness-setup.js +2 -2
  155. package/frontend/dist/assets/{index-4271e95e.js → index-9c91de50.js} +138 -138
  156. package/frontend/dist/index.html +1 -1
  157. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-fallback.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/system/runtime-fallback.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAA6B,KAAK,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AAErI,OAAO,EAAiB,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AAGvH,yCAAyC;AACzC,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,EAAE,MAAM,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAAC;IACnF,KAAK,EAAE,MAAM,IAAI,CAAC,uBAAuB,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;CAC5D;AAkBD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,6BAA6C,GAAG,IAAI,CA0DvH"}
1
+ {"version":3,"file":"runtime-fallback.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/system/runtime-fallback.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAA6B,KAAK,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AAErI,OAAO,EAAiB,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AAEvH,OAAO,EAGN,KAAK,0BAA0B,EAC/B,MAAM,+DAA+D,CAAC;AAEvE,yCAAyC;AACzC,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5I,KAAK,EAAE,MAAM,IAAI,CAAC,uBAAuB,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;IAC5D,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,0BAA0B,EAAE,mBAAmB,GAAG,UAAU,GAAG,eAAe,CAAC,GAAG,IAAI,CAAC;CAC1G;AAID;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,uBAAuB,CAQpE;AA8BD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,6BAA6C,GAAG,IAAI,CA6DvH"}
@@ -18,20 +18,51 @@ import { getRuntimeFallbackService } from '../../services/runtime-fallback/runti
18
18
  import { RuntimeFallbackSettingsError } from '../../services/runtime-fallback/runtime-fallback.types.js';
19
19
  import { LocalSmokeApi, RuntimeSmokeTestService } from '../../services/runtime-fallback/runtime-smoke-test.service.js';
20
20
  import { getLocalApiBaseUrl } from '../../utils/local-api-url.utils.js';
21
+ import { getRuntimeTermsConsentService, reportRuntimeTermsScreen, } from '../../services/runtime-terms/runtime-terms-consent.service.js';
21
22
  let smokeService = null;
23
+ /**
24
+ * The backend's smoke test service (one per process, shared with the
25
+ * runtime Terms consent flow).
26
+ *
27
+ * @returns The service
28
+ */
29
+ export function getRuntimeSmokeTestService() {
30
+ smokeService ??= new RuntimeSmokeTestService({
31
+ api: new LocalSmokeApi(getLocalApiBaseUrl, getApiToken),
32
+ crewlyAgentModel: () => getRuntimeFallbackService()?.getSettings().crewlyAgentModel ?? RUNTIME_FALLBACK_CONSTANTS.DEFAULT_CREWLY_AGENT_MODEL,
33
+ // A Terms screen asks the owner with a Slack card (specs/2026-10-01-runtime-terms-consent.md).
34
+ onTermsScreen: (runtime, report) => reportRuntimeTermsScreen(runtime, { source: 'smoke_test', ownerInitiated: report.ownerInitiated }),
35
+ });
36
+ return smokeService;
37
+ }
22
38
  /** Default dependencies: the backend's services. */
23
39
  function defaultDeps() {
24
40
  return {
25
41
  fallback: () => getRuntimeFallbackService(),
26
- smoke: () => {
27
- smokeService ??= new RuntimeSmokeTestService({
28
- api: new LocalSmokeApi(getLocalApiBaseUrl, getApiToken),
29
- crewlyAgentModel: () => getRuntimeFallbackService()?.getSettings().crewlyAgentModel ?? RUNTIME_FALLBACK_CONSTANTS.DEFAULT_CREWLY_AGENT_MODEL,
30
- });
31
- return smokeService;
32
- },
42
+ smoke: getRuntimeSmokeTestService,
43
+ terms: getRuntimeTermsConsentService,
33
44
  };
34
45
  }
46
+ /**
47
+ * A runtime the owner re-added to a fallback order after "Don't agree" (or
48
+ * a failed setup): ask about its Terms again.
49
+ *
50
+ * @param deps - Dependencies
51
+ * @param before - Settings before the update
52
+ * @param after - Settings after it
53
+ */
54
+ function askAgainForReAdded(deps, before, after) {
55
+ const terms = deps.terms?.();
56
+ if (!terms)
57
+ return;
58
+ const had = new Set([...before.chain, ...Object.values(before.memberChains).flat()]);
59
+ const now = new Set([...after.chain, ...Object.values(after.memberChains).flat()]);
60
+ for (const runtime of now) {
61
+ if (had.has(runtime) || !terms.supports(runtime) || !terms.blockedReason(runtime))
62
+ continue;
63
+ void terms.reportTermsScreen(runtime, { source: 'chain', ownerInitiated: true }).catch(() => undefined);
64
+ }
65
+ }
35
66
  /**
36
67
  * Register the routes.
37
68
  *
@@ -59,7 +90,10 @@ export function registerRuntimeFallbackRoutes(router, deps = defaultDeps()) {
59
90
  return;
60
91
  }
61
92
  try {
62
- fallback.updateSettings(req.body);
93
+ const before = fallback.getSettings?.();
94
+ const after = fallback.updateSettings(req.body);
95
+ if (before && after)
96
+ askAgainForReAdded(deps, before, after);
63
97
  res.json({ success: true, data: await fallback.snapshot() });
64
98
  }
65
99
  catch (err) {
@@ -74,7 +108,8 @@ export function registerRuntimeFallbackRoutes(router, deps = defaultDeps()) {
74
108
  const runtime = typeof req.body?.runtime === 'string' ? req.body.runtime : '';
75
109
  let started;
76
110
  try {
77
- started = deps.smoke().start(runtime);
111
+ // The owner pressed Test: a Terms screen asks again even after "Don't agree".
112
+ started = deps.smoke().start(runtime, { ownerInitiated: true });
78
113
  }
79
114
  catch (err) {
80
115
  res.status(400).json({ success: false, error: err instanceof Error ? err.message : String(err) });
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-fallback.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/system/runtime-fallback.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-fallback.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/system/runtime-fallback.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Runtime Terms consent endpoints (Settings → Runtimes).
3
+ *
4
+ * - `GET /api/system/runtime-terms` — every runtime with a Terms flow and its state
5
+ * - `POST /api/system/runtime-terms/:runtime/request` — "Accept terms…": post the
6
+ * Slack card (or return the open one)
7
+ * - `POST /api/system/runtime-terms/:runtime/probe` — launch it in a dedicated
8
+ * session, read the first screen (nothing is pressed); a Terms screen posts the card
9
+ * - `POST /api/system/runtime-terms/:runtime/answer { choice }` — answer inline
10
+ * (`agree_no_data` | `agree_share_data` | `decline`); goes through the card
11
+ * when one is open, so it updates too
12
+ *
13
+ * Owner only: a request from an agent session gets 403 — agents never accept
14
+ * Terms. specs/2026-10-01-runtime-terms-consent.md
15
+ *
16
+ * @module controllers/system/runtime-terms.controller
17
+ */
18
+ import type { Router } from 'express';
19
+ import { type RuntimeTermsConsentService } from '../../services/runtime-terms/runtime-terms-consent.service.js';
20
+ /** Dependencies (tests inject fakes). */
21
+ export interface RuntimeTermsControllerDeps {
22
+ terms: () => Pick<RuntimeTermsConsentService, 'list' | 'requestConsent' | 'answer' | 'supports' | 'probe'> | null;
23
+ }
24
+ /**
25
+ * Register the routes.
26
+ *
27
+ * @param router - The /api router
28
+ * @param deps - Dependencies (default: the backend's)
29
+ */
30
+ export declare function registerRuntimeTermsRoutes(router: Router, deps?: RuntimeTermsControllerDeps): void;
31
+ //# sourceMappingURL=runtime-terms.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-terms.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/system/runtime-terms.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAEzD,OAAO,EAGN,KAAK,0BAA0B,EAE/B,MAAM,+DAA+D,CAAC;AAEvE,yCAAyC;AACzC,MAAM,WAAW,0BAA0B;IAC1C,KAAK,EAAE,MAAM,IAAI,CAAC,0BAA0B,EAAE,MAAM,GAAG,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;CAClH;AAID;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,0BAAqE,GAAG,IAAI,CAoE5I"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Runtime Terms consent endpoints (Settings → Runtimes).
3
+ *
4
+ * - `GET /api/system/runtime-terms` — every runtime with a Terms flow and its state
5
+ * - `POST /api/system/runtime-terms/:runtime/request` — "Accept terms…": post the
6
+ * Slack card (or return the open one)
7
+ * - `POST /api/system/runtime-terms/:runtime/probe` — launch it in a dedicated
8
+ * session, read the first screen (nothing is pressed); a Terms screen posts the card
9
+ * - `POST /api/system/runtime-terms/:runtime/answer { choice }` — answer inline
10
+ * (`agree_no_data` | `agree_share_data` | `decline`); goes through the card
11
+ * when one is open, so it updates too
12
+ *
13
+ * Owner only: a request from an agent session gets 403 — agents never accept
14
+ * Terms. specs/2026-10-01-runtime-terms-consent.md
15
+ *
16
+ * @module controllers/system/runtime-terms.controller
17
+ */
18
+ import { ensureOwnerCaller } from './system-control.controller.js';
19
+ import { getRuntimeTermsConsentService, TERMS_CHOICE_LABELS, } from '../../services/runtime-terms/runtime-terms-consent.service.js';
20
+ const NOT_READY = 'Runtime Terms consent is not ready yet — Crewly is still starting.';
21
+ /**
22
+ * Register the routes.
23
+ *
24
+ * @param router - The /api router
25
+ * @param deps - Dependencies (default: the backend's)
26
+ */
27
+ export function registerRuntimeTermsRoutes(router, deps = { terms: getRuntimeTermsConsentService }) {
28
+ router.get('/system/runtime-terms', (_req, res) => {
29
+ const terms = deps.terms();
30
+ if (!terms) {
31
+ res.status(503).json({ success: false, error: NOT_READY });
32
+ return;
33
+ }
34
+ res.json({ success: true, data: terms.list() });
35
+ });
36
+ router.post('/system/runtime-terms/:runtime/request', async (req, res) => {
37
+ if (!ensureOwnerCaller(req, res, 'runtime-terms request'))
38
+ return;
39
+ const terms = deps.terms();
40
+ if (!terms) {
41
+ res.status(503).json({ success: false, error: NOT_READY });
42
+ return;
43
+ }
44
+ if (!terms.supports(req.params.runtime)) {
45
+ res.status(404).json({ success: false, error: `Crewly has no Terms flow for ${req.params.runtime}` });
46
+ return;
47
+ }
48
+ try {
49
+ res.json({ success: true, data: await terms.requestConsent(req.params.runtime) });
50
+ }
51
+ catch (err) {
52
+ res.status(500).json({ success: false, error: err instanceof Error ? err.message : String(err) });
53
+ }
54
+ });
55
+ router.post('/system/runtime-terms/:runtime/probe', async (req, res) => {
56
+ if (!ensureOwnerCaller(req, res, 'runtime-terms probe'))
57
+ return;
58
+ const terms = deps.terms();
59
+ if (!terms) {
60
+ res.status(503).json({ success: false, error: NOT_READY });
61
+ return;
62
+ }
63
+ if (!terms.supports(req.params.runtime)) {
64
+ res.status(404).json({ success: false, error: `Crewly has no Terms flow for ${req.params.runtime}` });
65
+ return;
66
+ }
67
+ try {
68
+ res.json({ success: true, data: await terms.probe(req.params.runtime) });
69
+ }
70
+ catch (err) {
71
+ res.status(409).json({ success: false, error: err instanceof Error ? err.message : String(err) });
72
+ }
73
+ });
74
+ router.post('/system/runtime-terms/:runtime/answer', async (req, res) => {
75
+ if (!ensureOwnerCaller(req, res, 'runtime-terms answer'))
76
+ return;
77
+ const terms = deps.terms();
78
+ if (!terms) {
79
+ res.status(503).json({ success: false, error: NOT_READY });
80
+ return;
81
+ }
82
+ const choice = req.body?.choice;
83
+ if (!Object.prototype.hasOwnProperty.call(TERMS_CHOICE_LABELS, choice)) {
84
+ res.status(400).json({ success: false, error: `choice must be one of ${Object.keys(TERMS_CHOICE_LABELS).join(' | ')}` });
85
+ return;
86
+ }
87
+ if (!terms.supports(req.params.runtime)) {
88
+ res.status(404).json({ success: false, error: `Crewly has no Terms flow for ${req.params.runtime}` });
89
+ return;
90
+ }
91
+ try {
92
+ res.json({ success: true, data: await terms.answer(req.params.runtime, choice) });
93
+ }
94
+ catch (err) {
95
+ res.status(409).json({ success: false, error: err instanceof Error ? err.message : String(err) });
96
+ }
97
+ });
98
+ }
99
+ //# sourceMappingURL=runtime-terms.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-terms.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/system/runtime-terms.controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
@@ -1975,6 +1975,44 @@ export class CrewlyServer {
1975
1975
  setBrowserControlDeps({
1976
1976
  sendMessageToAgent: (sessionName, message) => this.apiController.agentRegistrationService.sendMessageToAgent(sessionName, message),
1977
1977
  });
1978
+ // Held irreversible actions: ask the owner with a Slack decision
1979
+ // card in the agent's work thread, persist the hold, and apply the
1980
+ // answer from any surface (card, reaction, reply, dashboard, portal).
1981
+ try {
1982
+ const { BrowserApprovalService } = await import('./services/browser/browser-approval.service.js');
1983
+ const { HeldActionStore } = await import('./services/browser/held-action-store.js');
1984
+ const { DecisionService } = await import('./services/decisions/decision.service.js');
1985
+ const approvals = new BrowserApprovalService({
1986
+ store: HeldActionStore.inHome(this.config.crewlyHome),
1987
+ sessions: browserSessions,
1988
+ decisions: () => DecisionService.getInstance(),
1989
+ canAskInSlack: () => !!DecisionService.getInstance() && getSlackService().isConnected(),
1990
+ tellAgent: (sessionName, message) => this.apiController.agentRegistrationService.sendMessageToAgent(sessionName, message),
1991
+ agentNameOf: async (sessionName) => {
1992
+ const teams = await this.storageService.getTeams().catch(() => []);
1993
+ return teams.flatMap((t) => t.members ?? []).find((m) => m.sessionName === sessionName)?.name;
1994
+ },
1995
+ boundTabOf: (sessionName) => {
1996
+ const binding = browserBridge.getBinding(sessionName);
1997
+ return binding ? { tabId: binding.tabId, ...(binding.instanceId ? { instanceId: binding.instanceId } : {}) } : undefined;
1998
+ },
1999
+ adoptTab: (sessionName, tabId, instanceId) => browserBridge.adoptTab(sessionName, tabId, instanceId),
2000
+ });
2001
+ BrowserApprovalService.setInstance(approvals);
2002
+ DecisionService.registerKindHandler('browser_action', approvals);
2003
+ browserSessions.setHoldListener(approvals);
2004
+ browserBridge.onTabInventory((tabs, instanceId) => approvals.onTabInventory(tabs, instanceId));
2005
+ // Restored holds expire through their cards, so restore once
2006
+ // decision cards run (startDecisionCards) — or now, if they do.
2007
+ if (DecisionService.getInstance())
2008
+ await approvals.restore();
2009
+ approvals.start();
2010
+ }
2011
+ catch (error) {
2012
+ this.logger.warn('Browser approval cards not started', {
2013
+ error: error instanceof Error ? error.message : String(error),
2014
+ });
2015
+ }
1978
2016
  this.logger.info('Live browser view started');
1979
2017
  }
1980
2018
  catch (error) {
@@ -4623,10 +4661,23 @@ export class CrewlyServer {
4623
4661
  attachDecisionSlackListeners(decisions);
4624
4662
  decisions.start();
4625
4663
  this.logger.info('Decision cards started');
4664
+ // Runtime Terms consent (specs/2026-10-01-runtime-terms-consent.md): the
4665
+ // owner agrees to a runtime's first-run Terms from a Slack card.
4666
+ const { startRuntimeTerms } = await import('./services/runtime-terms/runtime-terms.wiring.js');
4667
+ startRuntimeTerms({ crewlyHome: this.config.crewlyHome, decisions, machineName: () => os.hostname().replace(/\.local$/, '') });
4626
4668
  }
4627
4669
  catch (error) {
4628
4670
  this.logger.warn('Decision cards not started', { error: error instanceof Error ? error.message : String(error) });
4629
4671
  }
4672
+ // Held browser actions from before the restart: re-attach or expire
4673
+ // (after the decision service, so expired cards are updated).
4674
+ try {
4675
+ const { BrowserApprovalService } = await import('./services/browser/browser-approval.service.js');
4676
+ await BrowserApprovalService.getInstance()?.restore();
4677
+ }
4678
+ catch (error) {
4679
+ this.logger.warn('Held browser actions not restored', { error: error instanceof Error ? error.message : String(error) });
4680
+ }
4630
4681
  }
4631
4682
  async startOwnerMessageWatchdog(chatV2) {
4632
4683
  try {