@trenchwork/erosolar 1.1.62 → 1.2.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.
Files changed (225) hide show
  1. package/dist/capabilities/todoCapability.js +2 -2
  2. package/dist/capabilities/todoCapability.js.map +1 -1
  3. package/dist/config.js +1 -1
  4. package/dist/contracts/v1/agent.d.ts +12 -2
  5. package/dist/contracts/v1/agent.d.ts.map +1 -1
  6. package/dist/core/adversarialCorrection.d.ts +22 -0
  7. package/dist/core/adversarialCorrection.d.ts.map +1 -0
  8. package/dist/core/adversarialCorrection.js +25 -0
  9. package/dist/core/adversarialCorrection.js.map +1 -0
  10. package/dist/core/agent.d.ts +2 -0
  11. package/dist/core/agent.d.ts.map +1 -1
  12. package/dist/core/agent.js +11 -45
  13. package/dist/core/agent.js.map +1 -1
  14. package/dist/core/contextManager.d.ts.map +1 -1
  15. package/dist/core/contextManager.js +5 -2
  16. package/dist/core/contextManager.js.map +1 -1
  17. package/dist/core/errorClassification.d.ts +44 -0
  18. package/dist/core/errorClassification.d.ts.map +1 -0
  19. package/dist/core/errorClassification.js +333 -0
  20. package/dist/core/errorClassification.js.map +1 -0
  21. package/dist/core/failureRegistry.d.ts +30 -0
  22. package/dist/core/failureRegistry.d.ts.map +1 -0
  23. package/dist/core/failureRegistry.js +74 -0
  24. package/dist/core/failureRegistry.js.map +1 -0
  25. package/dist/core/hitl.d.ts.map +1 -1
  26. package/dist/core/hitl.js +8 -0
  27. package/dist/core/hitl.js.map +1 -1
  28. package/dist/core/hostedAuth.d.ts +88 -0
  29. package/dist/core/hostedAuth.d.ts.map +1 -0
  30. package/dist/core/hostedAuth.js +219 -0
  31. package/dist/core/hostedAuth.js.map +1 -0
  32. package/dist/core/quota.d.ts +61 -0
  33. package/dist/core/quota.d.ts.map +1 -0
  34. package/dist/core/quota.js +104 -0
  35. package/dist/core/quota.js.map +1 -0
  36. package/dist/core/quotaErrors.d.ts.map +1 -1
  37. package/dist/core/quotaErrors.js +3 -5
  38. package/dist/core/quotaErrors.js.map +1 -1
  39. package/dist/core/resultVerification.d.ts +3 -2
  40. package/dist/core/resultVerification.d.ts.map +1 -1
  41. package/dist/core/resultVerification.js +3 -2
  42. package/dist/core/resultVerification.js.map +1 -1
  43. package/dist/core/secretStore.d.ts +11 -0
  44. package/dist/core/secretStore.d.ts.map +1 -1
  45. package/dist/core/secretStore.js +25 -0
  46. package/dist/core/secretStore.js.map +1 -1
  47. package/dist/core/slashCommands.d.ts.map +1 -1
  48. package/dist/core/slashCommands.js +4 -0
  49. package/dist/core/slashCommands.js.map +1 -1
  50. package/dist/core/thinkingVerbs.d.ts +31 -0
  51. package/dist/core/thinkingVerbs.d.ts.map +1 -0
  52. package/dist/core/thinkingVerbs.js +58 -0
  53. package/dist/core/thinkingVerbs.js.map +1 -0
  54. package/dist/core/turnGovernor.d.ts +63 -0
  55. package/dist/core/turnGovernor.d.ts.map +1 -0
  56. package/dist/core/turnGovernor.js +94 -0
  57. package/dist/core/turnGovernor.js.map +1 -0
  58. package/dist/core/updateChecker.d.ts.map +1 -1
  59. package/dist/core/updateChecker.js +5 -1
  60. package/dist/core/updateChecker.js.map +1 -1
  61. package/dist/core/usage.d.ts +28 -0
  62. package/dist/core/usage.d.ts.map +1 -0
  63. package/dist/core/usage.js +77 -0
  64. package/dist/core/usage.js.map +1 -0
  65. package/dist/headless/interactiveShell.d.ts +6 -0
  66. package/dist/headless/interactiveShell.d.ts.map +1 -1
  67. package/dist/headless/interactiveShell.js +262 -42
  68. package/dist/headless/interactiveShell.js.map +1 -1
  69. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -1
  70. package/dist/plugins/providers/deepseek/index.js +8 -5
  71. package/dist/plugins/providers/deepseek/index.js.map +1 -1
  72. package/dist/providers/baseProvider.d.ts +5 -13
  73. package/dist/providers/baseProvider.d.ts.map +1 -1
  74. package/dist/providers/baseProvider.js +12 -66
  75. package/dist/providers/baseProvider.js.map +1 -1
  76. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -1
  77. package/dist/providers/openaiChatCompletionsProvider.js +27 -76
  78. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -1
  79. package/dist/providers/resilientProvider.d.ts +2 -9
  80. package/dist/providers/resilientProvider.d.ts.map +1 -1
  81. package/dist/providers/resilientProvider.js +13 -199
  82. package/dist/providers/resilientProvider.js.map +1 -1
  83. package/dist/runtime/agentController.d.ts.map +1 -1
  84. package/dist/runtime/agentController.js +7 -0
  85. package/dist/runtime/agentController.js.map +1 -1
  86. package/dist/shell/toolPresentation.d.ts +7 -0
  87. package/dist/shell/toolPresentation.d.ts.map +1 -1
  88. package/dist/shell/toolPresentation.js +78 -4
  89. package/dist/shell/toolPresentation.js.map +1 -1
  90. package/dist/tools/bashTools.d.ts.map +1 -1
  91. package/dist/tools/bashTools.js +9 -3
  92. package/dist/tools/bashTools.js.map +1 -1
  93. package/dist/tools/grepTools.d.ts.map +1 -1
  94. package/dist/tools/grepTools.js +10 -1
  95. package/dist/tools/grepTools.js.map +1 -1
  96. package/dist/tools/memoryTools.d.ts +7 -0
  97. package/dist/tools/memoryTools.d.ts.map +1 -1
  98. package/dist/tools/memoryTools.js +17 -0
  99. package/dist/tools/memoryTools.js.map +1 -1
  100. package/dist/tools/searchTools.d.ts.map +1 -1
  101. package/dist/tools/searchTools.js +5 -4
  102. package/dist/tools/searchTools.js.map +1 -1
  103. package/dist/tools/todoTools.d.ts +3 -4
  104. package/dist/tools/todoTools.d.ts.map +1 -1
  105. package/dist/tools/todoTools.js +23 -4
  106. package/dist/tools/todoTools.js.map +1 -1
  107. package/dist/tools/webTools.d.ts.map +1 -1
  108. package/dist/tools/webTools.js +3 -1
  109. package/dist/tools/webTools.js.map +1 -1
  110. package/dist/ui/ink/ChatStatic.d.ts.map +1 -1
  111. package/dist/ui/ink/ChatStatic.js +21 -5
  112. package/dist/ui/ink/ChatStatic.js.map +1 -1
  113. package/dist/ui/ink/InkPromptController.d.ts +5 -0
  114. package/dist/ui/ink/InkPromptController.d.ts.map +1 -1
  115. package/dist/ui/ink/InkPromptController.js +16 -6
  116. package/dist/ui/ink/InkPromptController.js.map +1 -1
  117. package/dist/ui/ink/Prompt.d.ts +6 -0
  118. package/dist/ui/ink/Prompt.d.ts.map +1 -1
  119. package/dist/ui/ink/Prompt.js +69 -10
  120. package/dist/ui/ink/Prompt.js.map +1 -1
  121. package/dist/ui/ink/StatusLine.d.ts +6 -0
  122. package/dist/ui/ink/StatusLine.d.ts.map +1 -1
  123. package/dist/ui/ink/StatusLine.js +17 -3
  124. package/dist/ui/ink/StatusLine.js.map +1 -1
  125. package/dist/ui/ink/pasteBuffer.d.ts +44 -0
  126. package/dist/ui/ink/pasteBuffer.d.ts.map +1 -0
  127. package/dist/ui/ink/pasteBuffer.js +73 -0
  128. package/dist/ui/ink/pasteBuffer.js.map +1 -0
  129. package/package.json +1 -1
  130. package/dist/core/index.d.ts +0 -7
  131. package/dist/core/index.d.ts.map +0 -1
  132. package/dist/core/index.js +0 -7
  133. package/dist/core/index.js.map +0 -1
  134. package/dist/core/providerKeys.d.ts +0 -20
  135. package/dist/core/providerKeys.d.ts.map +0 -1
  136. package/dist/core/providerKeys.js +0 -40
  137. package/dist/core/providerKeys.js.map +0 -1
  138. package/dist/plugins/index.d.ts +0 -49
  139. package/dist/plugins/index.d.ts.map +0 -1
  140. package/dist/plugins/index.js +0 -104
  141. package/dist/plugins/index.js.map +0 -1
  142. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts +0 -10
  143. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts.map +0 -1
  144. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js +0 -110
  145. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js.map +0 -1
  146. package/dist/plugins/tools/bash/localBashPlugin.d.ts +0 -3
  147. package/dist/plugins/tools/bash/localBashPlugin.d.ts.map +0 -1
  148. package/dist/plugins/tools/bash/localBashPlugin.js +0 -14
  149. package/dist/plugins/tools/bash/localBashPlugin.js.map +0 -1
  150. package/dist/plugins/tools/edit/editPlugin.d.ts +0 -9
  151. package/dist/plugins/tools/edit/editPlugin.d.ts.map +0 -1
  152. package/dist/plugins/tools/edit/editPlugin.js +0 -15
  153. package/dist/plugins/tools/edit/editPlugin.js.map +0 -1
  154. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts +0 -3
  155. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts.map +0 -1
  156. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js +0 -9
  157. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js.map +0 -1
  158. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts +0 -3
  159. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts.map +0 -1
  160. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js +0 -14
  161. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js.map +0 -1
  162. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts +0 -3
  163. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts.map +0 -1
  164. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js +0 -9
  165. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js.map +0 -1
  166. package/dist/plugins/tools/index.d.ts +0 -3
  167. package/dist/plugins/tools/index.d.ts.map +0 -1
  168. package/dist/plugins/tools/index.js +0 -3
  169. package/dist/plugins/tools/index.js.map +0 -1
  170. package/dist/plugins/tools/integrity/integrityPlugin.d.ts +0 -3
  171. package/dist/plugins/tools/integrity/integrityPlugin.d.ts.map +0 -1
  172. package/dist/plugins/tools/integrity/integrityPlugin.js +0 -31
  173. package/dist/plugins/tools/integrity/integrityPlugin.js.map +0 -1
  174. package/dist/plugins/tools/mcp/mcpPlugin.d.ts +0 -3
  175. package/dist/plugins/tools/mcp/mcpPlugin.d.ts.map +0 -1
  176. package/dist/plugins/tools/mcp/mcpPlugin.js +0 -27
  177. package/dist/plugins/tools/mcp/mcpPlugin.js.map +0 -1
  178. package/dist/plugins/tools/nodeDefaults.d.ts +0 -13
  179. package/dist/plugins/tools/nodeDefaults.d.ts.map +0 -1
  180. package/dist/plugins/tools/nodeDefaults.js +0 -33
  181. package/dist/plugins/tools/nodeDefaults.js.map +0 -1
  182. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +0 -3
  183. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +0 -1
  184. package/dist/plugins/tools/orchestration/orchestrationPlugin.js +0 -340
  185. package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +0 -1
  186. package/dist/plugins/tools/registry.d.ts +0 -22
  187. package/dist/plugins/tools/registry.d.ts.map +0 -1
  188. package/dist/plugins/tools/registry.js +0 -58
  189. package/dist/plugins/tools/registry.js.map +0 -1
  190. package/dist/plugins/tools/search/localSearchPlugin.d.ts +0 -3
  191. package/dist/plugins/tools/search/localSearchPlugin.d.ts.map +0 -1
  192. package/dist/plugins/tools/search/localSearchPlugin.js +0 -14
  193. package/dist/plugins/tools/search/localSearchPlugin.js.map +0 -1
  194. package/dist/plugins/tools/skills/skillPlugin.d.ts +0 -3
  195. package/dist/plugins/tools/skills/skillPlugin.d.ts.map +0 -1
  196. package/dist/plugins/tools/skills/skillPlugin.js +0 -27
  197. package/dist/plugins/tools/skills/skillPlugin.js.map +0 -1
  198. package/dist/plugins/tools/todo/todoPlugin.d.ts +0 -3
  199. package/dist/plugins/tools/todo/todoPlugin.d.ts.map +0 -1
  200. package/dist/plugins/tools/todo/todoPlugin.js +0 -10
  201. package/dist/plugins/tools/todo/todoPlugin.js.map +0 -1
  202. package/dist/runtime/agentWorkerPool.d.ts +0 -167
  203. package/dist/runtime/agentWorkerPool.d.ts.map +0 -1
  204. package/dist/runtime/agentWorkerPool.js +0 -435
  205. package/dist/runtime/agentWorkerPool.js.map +0 -1
  206. package/dist/shell/autoExecutor.d.ts +0 -70
  207. package/dist/shell/autoExecutor.d.ts.map +0 -1
  208. package/dist/shell/autoExecutor.js +0 -320
  209. package/dist/shell/autoExecutor.js.map +0 -1
  210. package/dist/shell/commandRegistry.d.ts +0 -122
  211. package/dist/shell/commandRegistry.d.ts.map +0 -1
  212. package/dist/shell/commandRegistry.js +0 -355
  213. package/dist/shell/commandRegistry.js.map +0 -1
  214. package/dist/shell/composableMessage.d.ts +0 -178
  215. package/dist/shell/composableMessage.d.ts.map +0 -1
  216. package/dist/shell/composableMessage.js +0 -384
  217. package/dist/shell/composableMessage.js.map +0 -1
  218. package/dist/shell/vimMode.d.ts +0 -66
  219. package/dist/shell/vimMode.d.ts.map +0 -1
  220. package/dist/shell/vimMode.js +0 -435
  221. package/dist/shell/vimMode.js.map +0 -1
  222. package/dist/tools/localExplore.d.ts +0 -38
  223. package/dist/tools/localExplore.d.ts.map +0 -1
  224. package/dist/tools/localExplore.js +0 -30
  225. package/dist/tools/localExplore.js.map +0 -1
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Cross-turn failure registry — remembers tool/test/build error signatures
3
+ * across auto-continue turns so the agent stops re-trying the same dead end.
4
+ *
5
+ * The completion detector is stateless (each turn analyzed alone), so an agent
6
+ * can fix-A-fail, then fix-B-fail, then fix-A-fail again across turns and never
7
+ * notice the loop. This fingerprints each turn's errors by normalized root
8
+ * cause, counts repeats, and — once a signature recurs — injects a "change your
9
+ * approach" nudge into the next auto-continue prompt. Complements the turn
10
+ * governor's stall check (which only catches CONSECUTIVE identical turns).
11
+ *
12
+ * Pure + dependency-free → unit-testable.
13
+ */
14
+ const NUDGE_THRESHOLD = 3;
15
+ const MAX_SIGNATURE_LEN = 90;
16
+ function normalize(s) {
17
+ return s
18
+ .trim()
19
+ .replace(/\s+/g, ' ')
20
+ .replace(/['"`][^'"`]*['"`]/g, '…') // collapse quoted identifiers so "x"/"y" map together
21
+ .slice(0, MAX_SIGNATURE_LEN);
22
+ }
23
+ /** Normalized root-cause signatures present in a turn's output (deduped within the turn). */
24
+ export function extractErrorSignatures(output) {
25
+ if (!output)
26
+ return [];
27
+ const out = new Set();
28
+ for (const m of output.matchAll(/error TS(\d{3,5})\b/g))
29
+ out.add(`TS${m[1]}`);
30
+ for (const m of output.matchAll(/Cannot find module ['"]([^'"]+)['"]/g))
31
+ out.add(`module:${m[1]}`);
32
+ for (const m of output.matchAll(/(?:^|\n)\s*(?:FAIL|✕|✗|●)\s+([^\n]+)/g))
33
+ out.add(`fail:${normalize(m[1] ?? '')}`);
34
+ for (const m of output.matchAll(/\b(TypeError|ReferenceError|SyntaxError|RangeError|Error):\s*([^\n]+)/g)) {
35
+ out.add(`${m[1]}:${normalize(m[2] ?? '')}`);
36
+ }
37
+ if (/\b(?:command not found|is not recognized as an internal)/i.test(output))
38
+ out.add('command-not-found');
39
+ if (/\bENOENT\b/.test(output))
40
+ out.add('ENOENT');
41
+ if (/\bpermission denied\b/i.test(output))
42
+ out.add('permission-denied');
43
+ return [...out];
44
+ }
45
+ export class FailureRegistry {
46
+ counts = new Map();
47
+ reset() {
48
+ this.counts.clear();
49
+ }
50
+ /** Record one turn's output; each distinct error signature counts once per turn. */
51
+ trackTurn(output) {
52
+ for (const sig of extractErrorSignatures(output)) {
53
+ this.counts.set(sig, (this.counts.get(sig) ?? 0) + 1);
54
+ }
55
+ }
56
+ /** Signatures that have recurred at least `threshold` times across turns. */
57
+ repeated(threshold = NUDGE_THRESHOLD) {
58
+ const out = [];
59
+ for (const [signature, count] of this.counts) {
60
+ if (count >= threshold)
61
+ out.push({ signature, count });
62
+ }
63
+ return out.sort((a, b) => b.count - a.count);
64
+ }
65
+ /** A correction nudge to prepend to the next auto-continue when a failure keeps recurring, else null. */
66
+ nudge(threshold = NUDGE_THRESHOLD) {
67
+ const rep = this.repeated(threshold);
68
+ if (!rep.length)
69
+ return null;
70
+ const list = rep.slice(0, 3).map((r) => `"${r.signature}" (${r.count}×)`).join(', ');
71
+ return `You have hit the same failure repeatedly across turns: ${list}. The current approach is NOT working — do not retry the same edit. Step back, re-read the actual error, and try a genuinely DIFFERENT fix (or run the install/build the error implies), or report what is blocking you.`;
72
+ }
73
+ }
74
+ //# sourceMappingURL=failureRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failureRegistry.js","sourceRoot":"","sources":["../../src/core/failureRegistry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,mBAAqB,CAAC;AAK7C,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;CAC3C;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,gBAAgB,CAA2C;IACnE,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,EAAE,CAAC,CAAqB;gBAEpB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC;IASxC;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAoChE;;OAEG;YACW,qBAAqB;IA6LnC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,UAAU,IAAI,gBAAgB,EAAE;IAIhC;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;CAGhD;AAKD;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAUhE;AAED;;GAEG;AACH,eAAO,MAAM,IAAI;IACf;;OAEG;oBACmB,MAAM,eAAe,MAAM,YAAW,MAAM,eAAmB,OAAO,GAAU,OAAO,CAAC,OAAO,CAAC;IA6BtH;;OAEG;wBACuB,MAAM,eAAe,MAAM,WAAW,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,YAAW,MAAM,oBAAyB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBzL;;OAEG;2BAC0B,MAAM,mBAAmB,MAAM,oBAAoB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ1G,CAAC"}
1
+ {"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,mBAAqB,CAAC;AAK7C,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;CAC3C;AAQD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,gBAAgB,CAA2C;IACnE,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,EAAE,CAAC,CAAqB;gBAEpB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC;IASxC;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAoChE;;OAEG;YACW,qBAAqB;IA6LnC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,UAAU,IAAI,gBAAgB,EAAE;IAIhC;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;CAGhD;AAKD;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAUhE;AAED;;GAEG;AACH,eAAO,MAAM,IAAI;IACf;;OAEG;oBACmB,MAAM,eAAe,MAAM,YAAW,MAAM,eAAmB,OAAO,GAAU,OAAO,CAAC,OAAO,CAAC;IA6BtH;;OAEG;wBACuB,MAAM,eAAe,MAAM,WAAW,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,YAAW,MAAM,oBAAyB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBzL;;OAEG;2BAC0B,MAAM,mBAAmB,MAAM,oBAAoB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ1G,CAAC"}
package/dist/core/hitl.js CHANGED
@@ -25,6 +25,11 @@ let activePromptCount = 0;
25
25
  export function isHITLPromptActive() {
26
26
  return activePromptCount > 0;
27
27
  }
28
+ /**
29
+ * Cap the in-memory decision log so a long-lived HITL singleton can't grow it
30
+ * without bound over a multi-hour agent run. FIFO: oldest decisions drop first.
31
+ */
32
+ const MAX_DECISION_HISTORY = 100;
28
33
  export class HITLSystem {
29
34
  config;
30
35
  pendingDecisions = new Map();
@@ -281,6 +286,9 @@ export class HITLSystem {
281
286
  }
282
287
  recordDecision(response) {
283
288
  this.decisionHistory.push(response);
289
+ if (this.decisionHistory.length > MAX_DECISION_HISTORY) {
290
+ this.decisionHistory.shift();
291
+ }
284
292
  this.pendingDecisions.delete(response.requestId);
285
293
  // Log the decision
286
294
  if (this.config.logLevel === 'detailed') {
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Hosted-key access — the CLIENT side of "optional sign-in unlocks hosted keys,
3
+ * or bring your own." Keys NEVER ship in this client (Project Glasswing); they
4
+ * live only in the ero.solar AWS backend, exactly like the Tavily search proxy
5
+ * already does (see src/tools/webTools.ts). Sign-in mints a short-lived token;
6
+ * the proxies validate it and use the operator keys.
7
+ *
8
+ * ── CONTRACT (the ero.solar backend implements this; this file codes against it) ──
9
+ * Sign-in (loopback OAuth, increment 2):
10
+ * open https://ero.solar/cli/login?port=<loopbackPort>&state=<csrf>
11
+ * → Google SSO → 302 http://127.0.0.1:<port>/cb?token=<jwt>&email=<e>&state=<csrf>
12
+ * DeepSeek (hosted): POST {HOSTED_DEEPSEEK_PROXY} header `Authorization: Bearer <token>`
13
+ * Tavily (hosted): the existing tavilySearch proxy, same Bearer token
14
+ * The token is short-lived and server-validated; if it 401s the CLI drops to
15
+ * "signed out" and asks the user to /login again or use their own key.
16
+ *
17
+ * THIS MODULE is state + resolution only (increment 1, fully testable). The live
18
+ * sign-in flow and the provider→proxy wiring are increment 2 (backend-gated).
19
+ */
20
+ export declare const HOSTED_LOGIN_URL = "https://ero.solar/cli/login";
21
+ export declare const HOSTED_DEEPSEEK_PROXY = "https://ero.solar/api/deepseek";
22
+ export interface HostedSession {
23
+ token: string;
24
+ email: string;
25
+ }
26
+ export type KeyMode = 'hosted' | 'own' | 'none';
27
+ export interface KeyModeStatus {
28
+ mode: KeyMode;
29
+ email: string | null;
30
+ signedIn: boolean;
31
+ ownDeepSeek: boolean;
32
+ ownTavily: boolean;
33
+ preferOwnKeys: boolean;
34
+ }
35
+ /** The active hosted session (token + email), or null when signed out. */
36
+ export declare function getHostedSession(): HostedSession | null;
37
+ /** Persist a hosted session (called by /login once the backend returns a token). */
38
+ export declare function setHostedSession(session: HostedSession): void;
39
+ /** Sign out: drop the token but keep the own/hosted preference. */
40
+ export declare function clearHostedSession(): void;
41
+ export declare function prefersOwnKeys(): boolean;
42
+ export declare function setPreferOwnKeys(value: boolean): void;
43
+ /**
44
+ * Resolve which keys are in effect. Preference order: an explicit "use my own
45
+ * keys" wins when the user actually has a DeepSeek key; otherwise a hosted
46
+ * session is used; otherwise the user's own key; otherwise nothing is set up.
47
+ */
48
+ export declare function resolveKeyMode(): KeyModeStatus;
49
+ /**
50
+ * The dim welcome/banner line that makes the active key source unmistakable —
51
+ * the user must be able to see at a glance whether they're on hosted keys or
52
+ * their own. Returns null in 'none' mode (the welcome already shows key setup).
53
+ */
54
+ export declare function keyModeLine(status?: KeyModeStatus): string | null;
55
+ /**
56
+ * Resolve the DeepSeek endpoint the provider should use. Hosted mode routes
57
+ * through the ero.solar proxy authenticated by the short-lived sign-in token
58
+ * (the real key lives only server-side, Glasswing); otherwise the user's own
59
+ * key hits the API directly. `apiKey` is '' in 'none' mode (caller errors).
60
+ */
61
+ export declare function resolveDeepSeekEndpoint(): {
62
+ apiKey: string;
63
+ baseURL: string;
64
+ mode: KeyMode;
65
+ };
66
+ export interface LoginResult {
67
+ ok: boolean;
68
+ session?: HostedSession;
69
+ error?: string;
70
+ }
71
+ /**
72
+ * Loopback-OAuth sign-in (the contract's increment 2). Starts a one-shot
73
+ * 127.0.0.1 server on an ephemeral port, opens the browser to the ero.solar
74
+ * Google-SSO login URL with that port + a CSRF state, and waits for the
75
+ * redirect back to /cb?token=&email=&state=. On match it persists the hosted
76
+ * session. The browser launch is injected (`open`) so the flow is testable
77
+ * against the REAL loopback server without a real browser.
78
+ *
79
+ * Requires the ero.solar backend (SSO + token mint + redirect) to be live; with
80
+ * no backend the browser opens to a not-yet-served endpoint and the wait times
81
+ * out — the caller surfaces that honestly.
82
+ */
83
+ export declare function loginViaLoopback(opts: {
84
+ open: (url: string) => void | Promise<void>;
85
+ timeoutMs?: number;
86
+ loginUrl?: string;
87
+ }): Promise<LoginResult>;
88
+ //# sourceMappingURL=hostedAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostedAuth.d.ts","sourceRoot":"","sources":["../../src/core/hostedAuth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAC9D,eAAO,MAAM,qBAAqB,mCAAmC,CAAC;AAWtE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AASD,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AA+BD,0EAA0E;AAC1E,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAGvD;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAG7D;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAErD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,aAAa,CAa9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAE,aAAgC,GAAG,MAAM,GAAG,IAAI,CAanF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAW5F;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,WAAW,CAAC,CAuCvB"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Hosted-key access — the CLIENT side of "optional sign-in unlocks hosted keys,
3
+ * or bring your own." Keys NEVER ship in this client (Project Glasswing); they
4
+ * live only in the ero.solar AWS backend, exactly like the Tavily search proxy
5
+ * already does (see src/tools/webTools.ts). Sign-in mints a short-lived token;
6
+ * the proxies validate it and use the operator keys.
7
+ *
8
+ * ── CONTRACT (the ero.solar backend implements this; this file codes against it) ──
9
+ * Sign-in (loopback OAuth, increment 2):
10
+ * open https://ero.solar/cli/login?port=<loopbackPort>&state=<csrf>
11
+ * → Google SSO → 302 http://127.0.0.1:<port>/cb?token=<jwt>&email=<e>&state=<csrf>
12
+ * DeepSeek (hosted): POST {HOSTED_DEEPSEEK_PROXY} header `Authorization: Bearer <token>`
13
+ * Tavily (hosted): the existing tavilySearch proxy, same Bearer token
14
+ * The token is short-lived and server-validated; if it 401s the CLI drops to
15
+ * "signed out" and asks the user to /login again or use their own key.
16
+ *
17
+ * THIS MODULE is state + resolution only (increment 1, fully testable). The live
18
+ * sign-in flow and the provider→proxy wiring are increment 2 (backend-gated).
19
+ */
20
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, rmSync } from 'node:fs';
21
+ import { createServer } from 'node:http';
22
+ import { randomBytes } from 'node:crypto';
23
+ import { homedir } from 'node:os';
24
+ import { join, resolve } from 'node:path';
25
+ import { getSecretValue } from './secretStore.js';
26
+ // Contract endpoints (the backend the user is building must match these).
27
+ export const HOSTED_LOGIN_URL = 'https://ero.solar/cli/login';
28
+ export const HOSTED_DEEPSEEK_PROXY = 'https://ero.solar/api/deepseek';
29
+ // Resolved per call (not captured at module load) so EROSOLAR_HOME changes —
30
+ // and tests pointing at a temp dir — take effect.
31
+ function homeDir() {
32
+ return process.env['EROSOLAR_HOME'] ? resolve(process.env['EROSOLAR_HOME']) : join(homedir(), '.erosolar');
33
+ }
34
+ function sessionFile() {
35
+ return join(homeDir(), 'session.json');
36
+ }
37
+ function readFile() {
38
+ // Read the on-disk session first (the future /login writes it; it also holds
39
+ // the own/hosted preference), then let env override the token+email — env
40
+ // lets tests/CI inject a session without touching disk, while still honouring
41
+ // a stored preference.
42
+ let data = {};
43
+ const file = sessionFile();
44
+ if (existsSync(file)) {
45
+ try {
46
+ const parsed = JSON.parse(readFileSync(file, 'utf8'));
47
+ if (parsed && typeof parsed === 'object')
48
+ data = parsed;
49
+ }
50
+ catch { /* corrupt → treat as empty */ }
51
+ }
52
+ const envToken = process.env['EROSOLAR_HOSTED_TOKEN']?.trim();
53
+ if (envToken) {
54
+ data.token = envToken;
55
+ data.email = process.env['EROSOLAR_HOSTED_EMAIL']?.trim() || 'you@hosted';
56
+ }
57
+ return data;
58
+ }
59
+ function writeFile(data) {
60
+ const file = sessionFile();
61
+ mkdirSync(homeDir(), { recursive: true, mode: 0o700 });
62
+ const tmp = `${file}.${process.pid}.tmp`;
63
+ writeFileSync(tmp, JSON.stringify(data, null, 2) + '\n', { mode: 0o600 });
64
+ renameSync(tmp, file);
65
+ }
66
+ /** The active hosted session (token + email), or null when signed out. */
67
+ export function getHostedSession() {
68
+ const f = readFile();
69
+ return f.token ? { token: f.token, email: f.email || 'you@hosted' } : null;
70
+ }
71
+ /** Persist a hosted session (called by /login once the backend returns a token). */
72
+ export function setHostedSession(session) {
73
+ const f = readFile();
74
+ writeFile({ ...f, token: session.token, email: session.email });
75
+ }
76
+ /** Sign out: drop the token but keep the own/hosted preference. */
77
+ export function clearHostedSession() {
78
+ const f = readFile();
79
+ delete f.token;
80
+ delete f.email;
81
+ if (Object.keys(f).length === 0) {
82
+ try {
83
+ rmSync(sessionFile(), { force: true });
84
+ }
85
+ catch { /* ignore */ }
86
+ return;
87
+ }
88
+ writeFile(f);
89
+ }
90
+ export function prefersOwnKeys() {
91
+ return readFile().preferOwnKeys === true;
92
+ }
93
+ export function setPreferOwnKeys(value) {
94
+ writeFile({ ...readFile(), preferOwnKeys: value });
95
+ }
96
+ /**
97
+ * Resolve which keys are in effect. Preference order: an explicit "use my own
98
+ * keys" wins when the user actually has a DeepSeek key; otherwise a hosted
99
+ * session is used; otherwise the user's own key; otherwise nothing is set up.
100
+ */
101
+ export function resolveKeyMode() {
102
+ const session = getHostedSession();
103
+ const ownDeepSeek = Boolean(getSecretValue('DEEPSEEK_API_KEY'));
104
+ const ownTavily = Boolean(getSecretValue('TAVILY_API_KEY'));
105
+ const preferOwnKeys = prefersOwnKeys();
106
+ let mode;
107
+ if (preferOwnKeys && ownDeepSeek)
108
+ mode = 'own';
109
+ else if (session)
110
+ mode = 'hosted';
111
+ else if (ownDeepSeek)
112
+ mode = 'own';
113
+ else
114
+ mode = 'none';
115
+ return { mode, email: session?.email ?? null, signedIn: Boolean(session), ownDeepSeek, ownTavily, preferOwnKeys };
116
+ }
117
+ /**
118
+ * The dim welcome/banner line that makes the active key source unmistakable —
119
+ * the user must be able to see at a glance whether they're on hosted keys or
120
+ * their own. Returns null in 'none' mode (the welcome already shows key setup).
121
+ */
122
+ export function keyModeLine(status = resolveKeyMode()) {
123
+ switch (status.mode) {
124
+ case 'hosted':
125
+ return `Signed in as ${status.email} · using hosted keys` +
126
+ (status.ownDeepSeek ? ' · /account to use your own' : '');
127
+ case 'own': {
128
+ const tav = status.ownTavily ? 'Tavily ✓' : 'Tavily (shared proxy)';
129
+ const base = `Using your own keys · DeepSeek ✓ · ${tav}`;
130
+ return status.signedIn ? `${base} · /account to use hosted` : base;
131
+ }
132
+ default:
133
+ return null;
134
+ }
135
+ }
136
+ /**
137
+ * Resolve the DeepSeek endpoint the provider should use. Hosted mode routes
138
+ * through the ero.solar proxy authenticated by the short-lived sign-in token
139
+ * (the real key lives only server-side, Glasswing); otherwise the user's own
140
+ * key hits the API directly. `apiKey` is '' in 'none' mode (caller errors).
141
+ */
142
+ export function resolveDeepSeekEndpoint() {
143
+ const status = resolveKeyMode();
144
+ if (status.mode === 'hosted') {
145
+ const session = getHostedSession();
146
+ if (session)
147
+ return { apiKey: session.token, baseURL: HOSTED_DEEPSEEK_PROXY, mode: 'hosted' };
148
+ }
149
+ const userKey = (process.env['DEEPSEEK_API_KEY'] || '').trim();
150
+ if (userKey) {
151
+ return { apiKey: userKey, baseURL: process.env['DEEPSEEK_BASE_URL'] || 'https://api.deepseek.com', mode: 'own' };
152
+ }
153
+ return { apiKey: '', baseURL: '', mode: 'none' };
154
+ }
155
+ /**
156
+ * Loopback-OAuth sign-in (the contract's increment 2). Starts a one-shot
157
+ * 127.0.0.1 server on an ephemeral port, opens the browser to the ero.solar
158
+ * Google-SSO login URL with that port + a CSRF state, and waits for the
159
+ * redirect back to /cb?token=&email=&state=. On match it persists the hosted
160
+ * session. The browser launch is injected (`open`) so the flow is testable
161
+ * against the REAL loopback server without a real browser.
162
+ *
163
+ * Requires the ero.solar backend (SSO + token mint + redirect) to be live; with
164
+ * no backend the browser opens to a not-yet-served endpoint and the wait times
165
+ * out — the caller surfaces that honestly.
166
+ */
167
+ export function loginViaLoopback(opts) {
168
+ const state = randomBytes(16).toString('hex');
169
+ const loginUrl = opts.loginUrl ?? HOSTED_LOGIN_URL;
170
+ return new Promise((resolveP) => {
171
+ let settled = false;
172
+ const finish = (result) => {
173
+ if (settled)
174
+ return;
175
+ settled = true;
176
+ clearTimeout(timer);
177
+ try {
178
+ server.close();
179
+ }
180
+ catch { /* ignore */ }
181
+ resolveP(result);
182
+ };
183
+ const server = createServer((req, res) => {
184
+ const url = new URL(req.url ?? '/', 'http://127.0.0.1');
185
+ if (url.pathname !== '/cb') {
186
+ res.writeHead(404);
187
+ res.end('not found');
188
+ return;
189
+ }
190
+ const token = url.searchParams.get('token') ?? '';
191
+ const email = url.searchParams.get('email') ?? '';
192
+ const gotState = url.searchParams.get('state') ?? '';
193
+ const okPage = '<!doctype html><meta charset="utf-8"><body style="font:16px system-ui;padding:3rem">'
194
+ + 'Signed in to Erosolar Coder. You can close this tab and return to the terminal.</body>';
195
+ res.writeHead(200, { 'content-type': 'text/html' });
196
+ res.end(okPage);
197
+ if (gotState !== state) {
198
+ finish({ ok: false, error: 'state mismatch — sign-in rejected (possible CSRF)' });
199
+ return;
200
+ }
201
+ if (!token) {
202
+ finish({ ok: false, error: 'sign-in returned no token' });
203
+ return;
204
+ }
205
+ const session = { token, email: email || 'you@hosted' };
206
+ setHostedSession(session);
207
+ finish({ ok: true, session });
208
+ });
209
+ const timer = setTimeout(() => finish({ ok: false, error: 'timed out waiting for sign-in' }), opts.timeoutMs ?? 120_000);
210
+ server.on('error', (e) => finish({ ok: false, error: `loopback server failed: ${e.message}` }));
211
+ server.listen(0, '127.0.0.1', () => {
212
+ const addr = server.address();
213
+ const port = addr && typeof addr === 'object' ? addr.port : 0;
214
+ const url = `${loginUrl}?port=${port}&state=${state}`;
215
+ Promise.resolve(opts.open(url)).catch(() => { });
216
+ });
217
+ });
218
+ }
219
+ //# sourceMappingURL=hostedAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostedAuth.js","sourceRoot":"","sources":["../../src/core/hostedAuth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Live quota for the *included* (hosted) DeepSeek + Tavily keys, surfaced on
3
+ * the marketing site's login portal so a visitor can see how much of the
4
+ * included pool is left before signing in.
5
+ *
6
+ * Glasswing: the keys NEVER reach the browser. A server-side job
7
+ * (scripts/gen-quota.mjs, run in the deploy pipeline with the keys in env)
8
+ * calls these fetchers and writes the derived numbers to website/quota.json.
9
+ * The client reads only that file. The parsers are split out from the network
10
+ * so they can be unit-tested against the real API response shapes on CI, while
11
+ * the live fetch is exercised locally against the real endpoints (gated on the
12
+ * keys being present — never mocked).
13
+ *
14
+ * Real response shapes (probed 2026-06-03):
15
+ * DeepSeek GET /user/balance →
16
+ * {"is_available":true,"balance_infos":[{"currency":"USD",
17
+ * "total_balance":"10.22","granted_balance":"0.00","topped_up_balance":"10.22"}]}
18
+ * Tavily GET /usage →
19
+ * {"account":{"current_plan":"...","plan_usage":4710,"plan_limit":1000,...}, "key":{...}}
20
+ * Tavily's response carries no record of the one-time 5,000-credit bonus, so
21
+ * the included pool is the API's monthly allotment PLUS the documented bonus
22
+ * constant; "remaining" is that pool minus live cumulative usage.
23
+ */
24
+ export interface DeepSeekQuota {
25
+ available: boolean;
26
+ balance: number | null;
27
+ currency: string | null;
28
+ error?: string;
29
+ }
30
+ export interface TavilyQuota {
31
+ available: boolean;
32
+ used: number | null;
33
+ monthlyFree: number;
34
+ bonus: number;
35
+ included: number;
36
+ remaining: number | null;
37
+ error?: string;
38
+ }
39
+ export interface Quota {
40
+ generated: string;
41
+ deepseek: DeepSeekQuota;
42
+ tavily: TavilyQuota;
43
+ }
44
+ export type FetchLike = (url: string, init?: {
45
+ headers?: Record<string, string>;
46
+ }) => Promise<{
47
+ ok: boolean;
48
+ status: number;
49
+ json: () => Promise<unknown>;
50
+ }>;
51
+ export declare function parseDeepSeekBalance(json: any): DeepSeekQuota;
52
+ export declare function parseTavilyUsage(json: any): TavilyQuota;
53
+ export declare function fetchDeepSeekBalance(key: string, fetchImpl?: FetchLike): Promise<DeepSeekQuota>;
54
+ export declare function fetchTavilyUsage(key: string, fetchImpl?: FetchLike): Promise<TavilyQuota>;
55
+ export declare function buildLiveQuota(opts: {
56
+ deepseekKey?: string;
57
+ tavilyKey?: string;
58
+ now: string;
59
+ fetchImpl?: FetchLike;
60
+ }): Promise<Quota>;
61
+ //# sourceMappingURL=quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../src/core/quota.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAOH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;CACrB;AAID,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KACxC,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAG5E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,CAW7D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,CAevD;AAKD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAWrG;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAmB/F;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,GAAG,OAAO,CAAC,KAAK,CAAC,CAMjB"}