fixo-cli 1.0.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 (303) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +530 -0
  3. package/dist/agent/agent-client.d.ts +108 -0
  4. package/dist/agent/agent-client.d.ts.map +1 -0
  5. package/dist/agent/agent-client.js +1247 -0
  6. package/dist/agent/agent-client.js.map +1 -0
  7. package/dist/agent/agent-pool.d.ts +20 -0
  8. package/dist/agent/agent-pool.d.ts.map +1 -0
  9. package/dist/agent/agent-pool.js +217 -0
  10. package/dist/agent/agent-pool.js.map +1 -0
  11. package/dist/agent/background-awareness.d.ts +55 -0
  12. package/dist/agent/background-awareness.d.ts.map +1 -0
  13. package/dist/agent/background-awareness.js +104 -0
  14. package/dist/agent/background-awareness.js.map +1 -0
  15. package/dist/agent/command-parser.d.ts +33 -0
  16. package/dist/agent/command-parser.d.ts.map +1 -0
  17. package/dist/agent/command-parser.js +120 -0
  18. package/dist/agent/command-parser.js.map +1 -0
  19. package/dist/agent/context-budget.d.ts +91 -0
  20. package/dist/agent/context-budget.d.ts.map +1 -0
  21. package/dist/agent/context-budget.js +219 -0
  22. package/dist/agent/context-budget.js.map +1 -0
  23. package/dist/agent/conversation.d.ts +190 -0
  24. package/dist/agent/conversation.d.ts.map +1 -0
  25. package/dist/agent/conversation.js +547 -0
  26. package/dist/agent/conversation.js.map +1 -0
  27. package/dist/agent/hooks.d.ts +72 -0
  28. package/dist/agent/hooks.d.ts.map +1 -0
  29. package/dist/agent/hooks.js +214 -0
  30. package/dist/agent/hooks.js.map +1 -0
  31. package/dist/agent/mcp-bridge.d.ts +13 -0
  32. package/dist/agent/mcp-bridge.d.ts.map +1 -0
  33. package/dist/agent/mcp-bridge.js +86 -0
  34. package/dist/agent/mcp-bridge.js.map +1 -0
  35. package/dist/agent/mcp-client.d.ts +24 -0
  36. package/dist/agent/mcp-client.d.ts.map +1 -0
  37. package/dist/agent/mcp-client.js +146 -0
  38. package/dist/agent/mcp-client.js.map +1 -0
  39. package/dist/agent/mcp-manager.d.ts +13 -0
  40. package/dist/agent/mcp-manager.d.ts.map +1 -0
  41. package/dist/agent/mcp-manager.js +84 -0
  42. package/dist/agent/mcp-manager.js.map +1 -0
  43. package/dist/agent/mcp-registry.d.ts +45 -0
  44. package/dist/agent/mcp-registry.d.ts.map +1 -0
  45. package/dist/agent/mcp-registry.js +98 -0
  46. package/dist/agent/mcp-registry.js.map +1 -0
  47. package/dist/agent/orchestrator.d.ts +14 -0
  48. package/dist/agent/orchestrator.d.ts.map +1 -0
  49. package/dist/agent/orchestrator.js +118 -0
  50. package/dist/agent/orchestrator.js.map +1 -0
  51. package/dist/agent/parser-adapter.d.ts +120 -0
  52. package/dist/agent/parser-adapter.d.ts.map +1 -0
  53. package/dist/agent/parser-adapter.js +265 -0
  54. package/dist/agent/parser-adapter.js.map +1 -0
  55. package/dist/agent/parsers/imports.d.ts +11 -0
  56. package/dist/agent/parsers/imports.d.ts.map +1 -0
  57. package/dist/agent/parsers/imports.js +94 -0
  58. package/dist/agent/parsers/imports.js.map +1 -0
  59. package/dist/agent/parsers/shell.d.ts +23 -0
  60. package/dist/agent/parsers/shell.d.ts.map +1 -0
  61. package/dist/agent/parsers/shell.js +200 -0
  62. package/dist/agent/parsers/shell.js.map +1 -0
  63. package/dist/agent/parsers/symbols.d.ts +17 -0
  64. package/dist/agent/parsers/symbols.d.ts.map +1 -0
  65. package/dist/agent/parsers/symbols.js +103 -0
  66. package/dist/agent/parsers/symbols.js.map +1 -0
  67. package/dist/agent/permissions.d.ts +65 -0
  68. package/dist/agent/permissions.d.ts.map +1 -0
  69. package/dist/agent/permissions.js +219 -0
  70. package/dist/agent/permissions.js.map +1 -0
  71. package/dist/agent/predictive-gate.d.ts +69 -0
  72. package/dist/agent/predictive-gate.d.ts.map +1 -0
  73. package/dist/agent/predictive-gate.js +128 -0
  74. package/dist/agent/predictive-gate.js.map +1 -0
  75. package/dist/agent/provider-cooldown.d.ts +144 -0
  76. package/dist/agent/provider-cooldown.d.ts.map +1 -0
  77. package/dist/agent/provider-cooldown.js +300 -0
  78. package/dist/agent/provider-cooldown.js.map +1 -0
  79. package/dist/agent/providers-manager.d.ts +109 -0
  80. package/dist/agent/providers-manager.d.ts.map +1 -0
  81. package/dist/agent/providers-manager.js +464 -0
  82. package/dist/agent/providers-manager.js.map +1 -0
  83. package/dist/agent/repo-map.d.ts +6 -0
  84. package/dist/agent/repo-map.d.ts.map +1 -0
  85. package/dist/agent/repo-map.js +221 -0
  86. package/dist/agent/repo-map.js.map +1 -0
  87. package/dist/agent/retry.d.ts +103 -0
  88. package/dist/agent/retry.d.ts.map +1 -0
  89. package/dist/agent/retry.js +276 -0
  90. package/dist/agent/retry.js.map +1 -0
  91. package/dist/agent/search/index.d.ts +61 -0
  92. package/dist/agent/search/index.d.ts.map +1 -0
  93. package/dist/agent/search/index.js +314 -0
  94. package/dist/agent/search/index.js.map +1 -0
  95. package/dist/agent/single-agent.d.ts +76 -0
  96. package/dist/agent/single-agent.d.ts.map +1 -0
  97. package/dist/agent/single-agent.js +697 -0
  98. package/dist/agent/single-agent.js.map +1 -0
  99. package/dist/agent/skills.d.ts +22 -0
  100. package/dist/agent/skills.d.ts.map +1 -0
  101. package/dist/agent/skills.js +139 -0
  102. package/dist/agent/skills.js.map +1 -0
  103. package/dist/agent/stream-glue.d.ts +85 -0
  104. package/dist/agent/stream-glue.d.ts.map +1 -0
  105. package/dist/agent/stream-glue.js +120 -0
  106. package/dist/agent/stream-glue.js.map +1 -0
  107. package/dist/agent/subagent.d.ts +72 -0
  108. package/dist/agent/subagent.d.ts.map +1 -0
  109. package/dist/agent/subagent.js +193 -0
  110. package/dist/agent/subagent.js.map +1 -0
  111. package/dist/agent/telemetry.d.ts +192 -0
  112. package/dist/agent/telemetry.d.ts.map +1 -0
  113. package/dist/agent/telemetry.js +400 -0
  114. package/dist/agent/telemetry.js.map +1 -0
  115. package/dist/agent/tokenizer.d.ts +42 -0
  116. package/dist/agent/tokenizer.d.ts.map +1 -0
  117. package/dist/agent/tokenizer.js +107 -0
  118. package/dist/agent/tokenizer.js.map +1 -0
  119. package/dist/agent/tool-executor.d.ts +289 -0
  120. package/dist/agent/tool-executor.d.ts.map +1 -0
  121. package/dist/agent/tool-executor.js +2519 -0
  122. package/dist/agent/tool-executor.js.map +1 -0
  123. package/dist/agent/web-impl.d.ts +2 -0
  124. package/dist/agent/web-impl.d.ts.map +1 -0
  125. package/dist/agent/web-impl.js +34 -0
  126. package/dist/agent/web-impl.js.map +1 -0
  127. package/dist/agent/web.d.ts +8 -0
  128. package/dist/agent/web.d.ts.map +1 -0
  129. package/dist/agent/web.js +8 -0
  130. package/dist/agent/web.js.map +1 -0
  131. package/dist/agent/worker-agent.d.ts +27 -0
  132. package/dist/agent/worker-agent.d.ts.map +1 -0
  133. package/dist/agent/worker-agent.js +503 -0
  134. package/dist/agent/worker-agent.js.map +1 -0
  135. package/dist/config.d.ts +162 -0
  136. package/dist/config.d.ts.map +1 -0
  137. package/dist/config.js +138 -0
  138. package/dist/config.js.map +1 -0
  139. package/dist/context/fixo-md-watcher.d.ts +42 -0
  140. package/dist/context/fixo-md-watcher.d.ts.map +1 -0
  141. package/dist/context/fixo-md-watcher.js +126 -0
  142. package/dist/context/fixo-md-watcher.js.map +1 -0
  143. package/dist/context/fixo-md.d.ts +50 -0
  144. package/dist/context/fixo-md.d.ts.map +1 -0
  145. package/dist/context/fixo-md.js +118 -0
  146. package/dist/context/fixo-md.js.map +1 -0
  147. package/dist/context/todo.d.ts +65 -0
  148. package/dist/context/todo.d.ts.map +1 -0
  149. package/dist/context/todo.js +194 -0
  150. package/dist/context/todo.js.map +1 -0
  151. package/dist/git/git-manager.d.ts +33 -0
  152. package/dist/git/git-manager.d.ts.map +1 -0
  153. package/dist/git/git-manager.js +293 -0
  154. package/dist/git/git-manager.js.map +1 -0
  155. package/dist/git/git-ops.d.ts +10 -0
  156. package/dist/git/git-ops.d.ts.map +1 -0
  157. package/dist/git/git-ops.js +131 -0
  158. package/dist/git/git-ops.js.map +1 -0
  159. package/dist/index.d.ts +3 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +352 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/indexer.d.ts +30 -0
  164. package/dist/indexer.d.ts.map +1 -0
  165. package/dist/indexer.js +273 -0
  166. package/dist/indexer.js.map +1 -0
  167. package/dist/lsp/lsp-client.d.ts +24 -0
  168. package/dist/lsp/lsp-client.d.ts.map +1 -0
  169. package/dist/lsp/lsp-client.js +205 -0
  170. package/dist/lsp/lsp-client.js.map +1 -0
  171. package/dist/lsp/lsp-manager.d.ts +17 -0
  172. package/dist/lsp/lsp-manager.d.ts.map +1 -0
  173. package/dist/lsp/lsp-manager.js +154 -0
  174. package/dist/lsp/lsp-manager.js.map +1 -0
  175. package/dist/lsp/lsp-pre-save.d.ts +137 -0
  176. package/dist/lsp/lsp-pre-save.d.ts.map +1 -0
  177. package/dist/lsp/lsp-pre-save.js +245 -0
  178. package/dist/lsp/lsp-pre-save.js.map +1 -0
  179. package/dist/lsp/syntax-fallback.d.ts +83 -0
  180. package/dist/lsp/syntax-fallback.d.ts.map +1 -0
  181. package/dist/lsp/syntax-fallback.js +275 -0
  182. package/dist/lsp/syntax-fallback.js.map +1 -0
  183. package/dist/model-outcomes.d.ts +12 -0
  184. package/dist/model-outcomes.d.ts.map +1 -0
  185. package/dist/model-outcomes.js +46 -0
  186. package/dist/model-outcomes.js.map +1 -0
  187. package/dist/planner.d.ts +32 -0
  188. package/dist/planner.d.ts.map +1 -0
  189. package/dist/planner.js +163 -0
  190. package/dist/planner.js.map +1 -0
  191. package/dist/project-memory.d.ts +29 -0
  192. package/dist/project-memory.d.ts.map +1 -0
  193. package/dist/project-memory.js +349 -0
  194. package/dist/project-memory.js.map +1 -0
  195. package/dist/review.d.ts +2 -0
  196. package/dist/review.d.ts.map +1 -0
  197. package/dist/review.js +61 -0
  198. package/dist/review.js.map +1 -0
  199. package/dist/runtime/background-jobs.d.ts +97 -0
  200. package/dist/runtime/background-jobs.d.ts.map +1 -0
  201. package/dist/runtime/background-jobs.js +331 -0
  202. package/dist/runtime/background-jobs.js.map +1 -0
  203. package/dist/runtime/credential-vault.d.ts +124 -0
  204. package/dist/runtime/credential-vault.d.ts.map +1 -0
  205. package/dist/runtime/credential-vault.js +184 -0
  206. package/dist/runtime/credential-vault.js.map +1 -0
  207. package/dist/runtime/loop-trap.d.ts +197 -0
  208. package/dist/runtime/loop-trap.d.ts.map +1 -0
  209. package/dist/runtime/loop-trap.js +420 -0
  210. package/dist/runtime/loop-trap.js.map +1 -0
  211. package/dist/runtime/policy.d.ts +15 -0
  212. package/dist/runtime/policy.d.ts.map +1 -0
  213. package/dist/runtime/policy.js +60 -0
  214. package/dist/runtime/policy.js.map +1 -0
  215. package/dist/runtime/redaction.d.ts +66 -0
  216. package/dist/runtime/redaction.d.ts.map +1 -0
  217. package/dist/runtime/redaction.js +155 -0
  218. package/dist/runtime/redaction.js.map +1 -0
  219. package/dist/runtime/session-snapshots.d.ts +76 -0
  220. package/dist/runtime/session-snapshots.d.ts.map +1 -0
  221. package/dist/runtime/session-snapshots.js +166 -0
  222. package/dist/runtime/session-snapshots.js.map +1 -0
  223. package/dist/runtime/staging.d.ts +205 -0
  224. package/dist/runtime/staging.d.ts.map +1 -0
  225. package/dist/runtime/staging.js +526 -0
  226. package/dist/runtime/staging.js.map +1 -0
  227. package/dist/runtime/task-session.d.ts +95 -0
  228. package/dist/runtime/task-session.d.ts.map +1 -0
  229. package/dist/runtime/task-session.js +263 -0
  230. package/dist/runtime/task-session.js.map +1 -0
  231. package/dist/runtime/worktree.d.ts +55 -0
  232. package/dist/runtime/worktree.d.ts.map +1 -0
  233. package/dist/runtime/worktree.js +175 -0
  234. package/dist/runtime/worktree.js.map +1 -0
  235. package/dist/setup-wizard.d.ts +8 -0
  236. package/dist/setup-wizard.d.ts.map +1 -0
  237. package/dist/setup-wizard.js +73 -0
  238. package/dist/setup-wizard.js.map +1 -0
  239. package/dist/shared/content.d.ts +43 -0
  240. package/dist/shared/content.d.ts.map +1 -0
  241. package/dist/shared/content.js +61 -0
  242. package/dist/shared/content.js.map +1 -0
  243. package/dist/shared/types.d.ts +217 -0
  244. package/dist/shared/types.d.ts.map +1 -0
  245. package/dist/shared/types.js +3 -0
  246. package/dist/shared/types.js.map +1 -0
  247. package/dist/test-runner.d.ts +5 -0
  248. package/dist/test-runner.d.ts.map +1 -0
  249. package/dist/test-runner.js +42 -0
  250. package/dist/test-runner.js.map +1 -0
  251. package/dist/types.d.ts +85 -0
  252. package/dist/types.d.ts.map +1 -0
  253. package/dist/types.js +2 -0
  254. package/dist/types.js.map +1 -0
  255. package/dist/ui/ascii.d.ts +23 -0
  256. package/dist/ui/ascii.d.ts.map +1 -0
  257. package/dist/ui/ascii.js +45 -0
  258. package/dist/ui/ascii.js.map +1 -0
  259. package/dist/ui/colors.d.ts +111 -0
  260. package/dist/ui/colors.d.ts.map +1 -0
  261. package/dist/ui/colors.js +166 -0
  262. package/dist/ui/colors.js.map +1 -0
  263. package/dist/ui/image-attach.d.ts +27 -0
  264. package/dist/ui/image-attach.d.ts.map +1 -0
  265. package/dist/ui/image-attach.js +100 -0
  266. package/dist/ui/image-attach.js.map +1 -0
  267. package/dist/ui/index.d.ts +18 -0
  268. package/dist/ui/index.d.ts.map +1 -0
  269. package/dist/ui/index.js +18 -0
  270. package/dist/ui/index.js.map +1 -0
  271. package/dist/ui/markdown-stream.d.ts +91 -0
  272. package/dist/ui/markdown-stream.d.ts.map +1 -0
  273. package/dist/ui/markdown-stream.js +524 -0
  274. package/dist/ui/markdown-stream.js.map +1 -0
  275. package/dist/ui/plan-renderer.d.ts +36 -0
  276. package/dist/ui/plan-renderer.d.ts.map +1 -0
  277. package/dist/ui/plan-renderer.js +79 -0
  278. package/dist/ui/plan-renderer.js.map +1 -0
  279. package/dist/ui/prompt.d.ts +11 -0
  280. package/dist/ui/prompt.d.ts.map +1 -0
  281. package/dist/ui/prompt.js +1960 -0
  282. package/dist/ui/prompt.js.map +1 -0
  283. package/dist/ui/render-primitives.d.ts +117 -0
  284. package/dist/ui/render-primitives.d.ts.map +1 -0
  285. package/dist/ui/render-primitives.js +322 -0
  286. package/dist/ui/render-primitives.js.map +1 -0
  287. package/dist/ui/render.d.ts +133 -0
  288. package/dist/ui/render.d.ts.map +1 -0
  289. package/dist/ui/render.js +547 -0
  290. package/dist/ui/render.js.map +1 -0
  291. package/dist/ui/session-header.d.ts +30 -0
  292. package/dist/ui/session-header.d.ts.map +1 -0
  293. package/dist/ui/session-header.js +74 -0
  294. package/dist/ui/session-header.js.map +1 -0
  295. package/dist/workspace-guard.d.ts +68 -0
  296. package/dist/workspace-guard.d.ts.map +1 -0
  297. package/dist/workspace-guard.js +168 -0
  298. package/dist/workspace-guard.js.map +1 -0
  299. package/dist/workspace-lock.d.ts +27 -0
  300. package/dist/workspace-lock.d.ts.map +1 -0
  301. package/dist/workspace-lock.js +95 -0
  302. package/dist/workspace-lock.js.map +1 -0
  303. package/package.json +63 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * content.ts — helpers for the `ChatMessage.content` union.
3
+ *
4
+ * The historical shape was `string | null`. As of Phase 2 it widens
5
+ * to `string | ChatContentBlock[] | null` so user messages can carry
6
+ * inline images alongside text. The helpers in this module exist so
7
+ * call sites that *expect* a string (e.g. legacy diff renderers,
8
+ * loop-trap fingerprinting, tail extraction) can keep working
9
+ * without each one re-implementing the union walk.
10
+ *
11
+ * Design rules:
12
+ * - Pure functions. No I/O. No global state.
13
+ * - Zero `any`. Strict discriminated-union narrowing.
14
+ * - The "image token cost" estimate is deliberately fixed at 1500
15
+ * tokens. This matches Anthropic's stated price-tag and is close
16
+ * enough to GPT-4o that the context-budget enforcer will never
17
+ * under-count for safety.
18
+ */
19
+ import type { ChatContentBlock, ChatMessage } from './types.js';
20
+ /**
21
+ * Fixed per-image token estimate. Matches Anthropic's documented
22
+ * "~1.6 KB ≈ 1500 tokens" baseline. Used by the context-budget
23
+ * enforcer and the predictive read gate so that adding a screenshot
24
+ * to a conversation correctly tightens the headroom calculation.
25
+ */
26
+ export declare const IMAGE_TOKEN_COST = 1500;
27
+ /**
28
+ * Flatten a `ChatMessage.content` value to a plain string. Image
29
+ * blocks are rendered as a short placeholder so downstream string
30
+ * consumers (telemetry, fingerprinting, tail buffers) never see a
31
+ * 7 MiB base64 payload by accident.
32
+ */
33
+ export declare function extractTextFromContent(content: string | ChatContentBlock[] | null | undefined): string;
34
+ /** True if the content carries at least one image block. */
35
+ export declare function hasImageContent(content: string | ChatContentBlock[] | null | undefined): boolean;
36
+ /**
37
+ * Count images embedded in a content value. Used by the token
38
+ * estimator and by the multi-modal regression tests.
39
+ */
40
+ export declare function countImageBlocks(content: string | ChatContentBlock[] | null | undefined): number;
41
+ /** Convenience: total images across a list of messages. */
42
+ export declare function countImagesInMessages(messages: ReadonlyArray<ChatMessage>): number;
43
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/shared/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE,GAAG,IAAI,GAAG,SAAS,GACtD,MAAM,CAkBR;AAED,4DAA4D;AAC5D,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE,GAAG,IAAI,GAAG,SAAS,GACtD,OAAO,CAGT;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE,GAAG,IAAI,GAAG,SAAS,GACtD,MAAM,CAKR;AAED,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,CAIlF"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Fixed per-image token estimate. Matches Anthropic's documented
3
+ * "~1.6 KB ≈ 1500 tokens" baseline. Used by the context-budget
4
+ * enforcer and the predictive read gate so that adding a screenshot
5
+ * to a conversation correctly tightens the headroom calculation.
6
+ */
7
+ export const IMAGE_TOKEN_COST = 1500;
8
+ /**
9
+ * Flatten a `ChatMessage.content` value to a plain string. Image
10
+ * blocks are rendered as a short placeholder so downstream string
11
+ * consumers (telemetry, fingerprinting, tail buffers) never see a
12
+ * 7 MiB base64 payload by accident.
13
+ */
14
+ export function extractTextFromContent(content) {
15
+ if (content == null)
16
+ return '';
17
+ if (typeof content === 'string')
18
+ return content;
19
+ const parts = [];
20
+ for (const block of content) {
21
+ if (block.type === 'text') {
22
+ parts.push(block.text);
23
+ }
24
+ else if (block.type === 'image') {
25
+ // Deliberately terse — the base64 payload must never leak
26
+ // into log lines, telemetry, or loop-trap fingerprints.
27
+ const tag = block.source.kind === 'base64'
28
+ ? `[image:${block.source.mediaType}]`
29
+ : `[image:url]`;
30
+ parts.push(tag);
31
+ }
32
+ }
33
+ return parts.join('\n');
34
+ }
35
+ /** True if the content carries at least one image block. */
36
+ export function hasImageContent(content) {
37
+ if (content == null || typeof content === 'string')
38
+ return false;
39
+ return content.some((b) => b.type === 'image');
40
+ }
41
+ /**
42
+ * Count images embedded in a content value. Used by the token
43
+ * estimator and by the multi-modal regression tests.
44
+ */
45
+ export function countImageBlocks(content) {
46
+ if (content == null || typeof content === 'string')
47
+ return 0;
48
+ let n = 0;
49
+ for (const b of content)
50
+ if (b.type === 'image')
51
+ n++;
52
+ return n;
53
+ }
54
+ /** Convenience: total images across a list of messages. */
55
+ export function countImagesInMessages(messages) {
56
+ let n = 0;
57
+ for (const m of messages)
58
+ n += countImageBlocks(m.content);
59
+ return n;
60
+ }
61
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/shared/content.ts"],"names":[],"mappings":"AAoBA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAuD;IAEvD,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,0DAA0D;YAC1D,wDAAwD;YACxD,MAAM,GAAG,GACP,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAC5B,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG;gBACrC,CAAC,CAAC,aAAa,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,eAAe,CAC7B,OAAuD;IAEvD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAuD;IAEvD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;YAAE,CAAC,EAAE,CAAC;IACrD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,qBAAqB,CAAC,QAAoC;IACxE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,217 @@
1
+ export type Platform = 'google' | 'groq' | 'cerebras' | 'sambanova' | 'nvidia' | 'mistral' | 'openrouter' | 'github' | 'cohere' | 'cloudflare' | 'zhipu' | 'ollama' | 'kilo' | 'pollinations' | 'llm7' | 'zen' | 'ollama-local';
2
+ export interface Model {
3
+ id: number;
4
+ platform: Platform;
5
+ modelId: string;
6
+ displayName: string;
7
+ intelligenceRank: number;
8
+ speedRank: number;
9
+ sizeLabel: string;
10
+ rpmLimit: number | null;
11
+ rpdLimit: number | null;
12
+ tpmLimit: number | null;
13
+ tpdLimit: number | null;
14
+ monthlyTokenBudget: string;
15
+ contextWindow: number | null;
16
+ enabled: boolean;
17
+ }
18
+ export type KeyStatus = 'healthy' | 'rate_limited' | 'invalid' | 'error' | 'unknown';
19
+ export interface ApiKey {
20
+ id: number;
21
+ platform: Platform;
22
+ label: string;
23
+ maskedKey: string;
24
+ status: KeyStatus;
25
+ enabled: boolean;
26
+ createdAt: string;
27
+ lastCheckedAt: string | null;
28
+ }
29
+ export interface ApiKeyCreate {
30
+ platform: Platform;
31
+ key: string;
32
+ label?: string;
33
+ }
34
+ export interface FallbackEntry {
35
+ modelId: number;
36
+ platform: Platform;
37
+ displayName: string;
38
+ intelligenceRank: number;
39
+ speedRank: number;
40
+ priority: number;
41
+ enabled: boolean;
42
+ }
43
+ export interface ChatToolCallFunction {
44
+ name: string;
45
+ arguments: string;
46
+ }
47
+ export interface ChatToolCall {
48
+ id: string;
49
+ type: 'function';
50
+ function: ChatToolCallFunction;
51
+ thought_signature?: string;
52
+ }
53
+ export interface ChatToolFunctionDefinition {
54
+ name: string;
55
+ description?: string;
56
+ parameters?: Record<string, unknown>;
57
+ strict?: boolean;
58
+ }
59
+ export interface ChatToolDefinition {
60
+ type: 'function';
61
+ function: ChatToolFunctionDefinition;
62
+ }
63
+ export type ChatToolChoice = 'none' | 'auto' | 'required' | {
64
+ type: 'function';
65
+ function: {
66
+ name: string;
67
+ };
68
+ };
69
+ export type ChatImageMediaType = 'image/png' | 'image/jpeg' | 'image/webp' | 'image/gif';
70
+ export type ChatImageSource = {
71
+ kind: 'base64';
72
+ mediaType: ChatImageMediaType;
73
+ data: string;
74
+ } | {
75
+ kind: 'url';
76
+ url: string;
77
+ };
78
+ export type ChatContentBlock = {
79
+ type: 'text';
80
+ text: string;
81
+ } | {
82
+ type: 'image';
83
+ source: ChatImageSource;
84
+ };
85
+ export interface ChatMessage {
86
+ role: 'system' | 'user' | 'assistant' | 'tool';
87
+ /**
88
+ * Either a plain string (the historical shape — text-only) or an
89
+ * ordered array of content blocks. Mixed text+image inputs MUST
90
+ * use the array form; assistant tool-call turns and tool-result
91
+ * messages remain string-shaped.
92
+ */
93
+ content: string | ChatContentBlock[] | null;
94
+ name?: string;
95
+ tool_call_id?: string;
96
+ tool_calls?: ChatToolCall[];
97
+ }
98
+ export interface ChatCompletionRequest {
99
+ model?: string;
100
+ messages: ChatMessage[];
101
+ temperature?: number;
102
+ max_tokens?: number;
103
+ stream?: boolean;
104
+ top_p?: number;
105
+ tools?: ChatToolDefinition[];
106
+ tool_choice?: ChatToolChoice;
107
+ parallel_tool_calls?: boolean;
108
+ }
109
+ export interface ChatCompletionChoice {
110
+ index: number;
111
+ message: ChatMessage;
112
+ finish_reason: string | null;
113
+ }
114
+ export interface TokenUsage {
115
+ prompt_tokens: number;
116
+ completion_tokens: number;
117
+ total_tokens: number;
118
+ }
119
+ export interface ChatCompletionResponse {
120
+ id: string;
121
+ object: 'chat.completion';
122
+ created: number;
123
+ model: string;
124
+ choices: ChatCompletionChoice[];
125
+ usage: TokenUsage;
126
+ _routed_via?: {
127
+ platform: Platform;
128
+ model: string;
129
+ };
130
+ }
131
+ export interface ChatCompletionChunk {
132
+ id: string;
133
+ object: 'chat.completion.chunk';
134
+ created: number;
135
+ model: string;
136
+ choices: {
137
+ index: number;
138
+ delta: {
139
+ role?: 'assistant';
140
+ content?: string;
141
+ tool_calls?: ChatToolCall[];
142
+ };
143
+ finish_reason: string | null;
144
+ }[];
145
+ }
146
+ export interface AnalyticsSummary {
147
+ totalRequests: number;
148
+ successRate: number;
149
+ totalInputTokens: number;
150
+ totalOutputTokens: number;
151
+ avgLatencyMs: number;
152
+ estimatedCostSavings: number;
153
+ }
154
+ export interface PlatformStats {
155
+ platform: Platform;
156
+ requests: number;
157
+ successRate: number;
158
+ avgLatencyMs: number;
159
+ totalInputTokens: number;
160
+ totalOutputTokens: number;
161
+ }
162
+ export interface TimelinePoint {
163
+ timestamp: string;
164
+ requests: number;
165
+ successCount: number;
166
+ failureCount: number;
167
+ }
168
+ export interface RequestLog {
169
+ id: number;
170
+ platform: Platform;
171
+ modelId: string;
172
+ status: 'success' | 'error';
173
+ inputTokens: number;
174
+ outputTokens: number;
175
+ latencyMs: number;
176
+ error: string | null;
177
+ createdAt: string;
178
+ }
179
+ export interface RateLimitStatus {
180
+ platform: Platform;
181
+ modelId: string;
182
+ rpm: {
183
+ used: number;
184
+ limit: number | null;
185
+ };
186
+ rpd: {
187
+ used: number;
188
+ limit: number | null;
189
+ };
190
+ tpm: {
191
+ used: number;
192
+ limit: number | null;
193
+ };
194
+ available: boolean;
195
+ nextResetAt: string | null;
196
+ }
197
+ export interface UserKey {
198
+ id: number;
199
+ label: string;
200
+ apiKey: string;
201
+ dailyTokenQuota: number | null;
202
+ tokensUsedToday: number;
203
+ enabled: boolean;
204
+ createdAt: string;
205
+ }
206
+ export interface PromptTranslationConfig {
207
+ enabled: boolean;
208
+ stripThinkingTags: boolean;
209
+ enforceToolFormat: boolean;
210
+ systemRoleConversion: boolean;
211
+ }
212
+ export interface ModelAlias {
213
+ id: number;
214
+ alias: string;
215
+ targetModelDbId: number | null;
216
+ }
217
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // ---- Platform & Model Types ----
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
@@ -0,0 +1,5 @@
1
+ export declare function runProjectTests(cwd: string): string;
2
+ export declare function runVerificationCommand(cwd: string, command: string): string;
3
+ export declare function parseCiLog(cwd: string, logPath: string): string;
4
+ export declare function summarizeFailure(output: string, status: number): string;
5
+ //# sourceMappingURL=test-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"AAMA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAW3E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUvE"}
@@ -0,0 +1,42 @@
1
+ import { spawnSync } from 'child_process';
2
+ import fs from 'fs';
3
+ import { detectProjectFacts } from './project-memory.js';
4
+ import { redactedEnv, redactSecrets } from './runtime/redaction.js';
5
+ import { WorkspaceGuard } from './workspace-guard.js';
6
+ export function runProjectTests(cwd) {
7
+ const facts = detectProjectFacts(cwd);
8
+ const command = facts.testCommands[0] ?? facts.buildCommands[0];
9
+ if (!command)
10
+ return 'No test or build command detected.';
11
+ return runVerificationCommand(cwd, command);
12
+ }
13
+ export function runVerificationCommand(cwd, command) {
14
+ const [bin, ...args] = command.split(/\s+/);
15
+ const result = spawnSync(bin, args, {
16
+ cwd,
17
+ encoding: 'utf-8',
18
+ env: redactedEnv(),
19
+ timeout: 120_000,
20
+ maxBuffer: 2 * 1024 * 1024,
21
+ });
22
+ const output = redactSecrets([`$ ${command}`, result.stdout ?? '', result.stderr ?? ''].join('\n')).trim();
23
+ return summarizeFailure(output, result.status ?? 0);
24
+ }
25
+ export function parseCiLog(cwd, logPath) {
26
+ const guard = new WorkspaceGuard(cwd);
27
+ const file = guard.ensureFile(logPath);
28
+ const raw = redactSecrets(fs.readFileSync(file, 'utf-8'));
29
+ return summarizeFailure(raw, /(?:failed|error|exit code [1-9])/i.test(raw) ? 1 : 0);
30
+ }
31
+ export function summarizeFailure(output, status) {
32
+ const interesting = output
33
+ .split('\n')
34
+ .filter(line => /error|fail|failed|✗|×|TS\d+|ERR!|AssertionError|TypeError|ReferenceError|SyntaxError/i.test(line))
35
+ .slice(0, 80)
36
+ .join('\n');
37
+ return [
38
+ `Status: ${status}`,
39
+ interesting ? `Relevant output:\n${interesting}` : `Output:\n${output.slice(0, 4000)}`,
40
+ ].join('\n');
41
+ }
42
+ //# sourceMappingURL=test-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../src/test-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,oCAAoC,CAAC;IAC1D,OAAO,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,OAAe;IACjE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;QAClC,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,WAAW,EAAE;QAClB,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC3B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3G,OAAO,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,OAAe;IACrD,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,gBAAgB,CAAC,GAAG,EAAE,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc;IAC7D,MAAM,WAAW,GAAG,MAAM;SACvB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,uFAAuF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClH,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;QACL,WAAW,MAAM,EAAE;QACnB,WAAW,CAAC,CAAC,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;KACvF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * CLI-specific type definitions extending the shared types.
3
+ */
4
+ import type { ChatContentBlock } from './shared/types.js';
5
+ import type { PolicyProfile } from './runtime/policy.js';
6
+ /** Runtime context for a single agent invocation. */
7
+ export interface AgentContext {
8
+ /** The user's task or prompt. */
9
+ task: string;
10
+ /** Target LLM model ID (or "auto" for smart routing). */
11
+ model: string;
12
+ /** Working directory for file operations. */
13
+ cwd: string;
14
+ /** Whether to print verbose API debug logs. */
15
+ verbose: boolean;
16
+ /** Pinned/selected files for context focus. */
17
+ selectedFiles: string[];
18
+ /** Project-level system prompt override (from .freellmapi.yml). */
19
+ systemPromptOverride?: string;
20
+ /** Custom build/test verification command. */
21
+ checkCommand?: string;
22
+ /** Permission policy for this invocation. */
23
+ policy?: PolicyProfile;
24
+ /** Allow low-risk actions without repeated prompts. */
25
+ yes?: boolean;
26
+ /** Execution mode: PLAN (read-only), BUILD (mutating allowed), EXPLORE (read+lsp), or SCOUT (web only) */
27
+ mode?: 'PLAN' | 'BUILD' | 'EXPLORE' | 'SCOUT';
28
+ /**
29
+ * Image (or future non-text) blocks attached to the next user
30
+ * message. Populated by the REPL's `/image` slash command. The
31
+ * SingleAgent merges these into the user-message content array
32
+ * along with `task`, so vision-capable providers can see them.
33
+ * Cleared after each agent run by the caller.
34
+ */
35
+ pendingAttachments?: ChatContentBlock[];
36
+ }
37
+ /** Result of a single agent run. */
38
+ export interface AgentResult {
39
+ /** Whether the task was completed successfully. */
40
+ success: boolean;
41
+ /** Text response to display to the user. */
42
+ response: string;
43
+ /** List of files that were modified during this run. */
44
+ modifiedFiles: string[];
45
+ /** Total token usage for this run. */
46
+ tokensUsed: {
47
+ prompt_tokens: number;
48
+ completion_tokens: number;
49
+ total_tokens: number;
50
+ };
51
+ /** Number of tool calls made during this run. */
52
+ toolCallCount: number;
53
+ /** Duration in milliseconds. */
54
+ durationMs: number;
55
+ /** Model name from which model we got the output. */
56
+ model?: string;
57
+ }
58
+ /** Project-level configuration from .freellmapi.yml */
59
+ export interface ProjectConfig {
60
+ model?: string;
61
+ checkCommand?: string;
62
+ autoCommit?: boolean;
63
+ systemPrompt?: string;
64
+ include?: string[];
65
+ exclude?: string[];
66
+ policy?: PolicyProfile;
67
+ executionMode?: 'host' | 'container';
68
+ maxAttempts?: number;
69
+ plugins?: string[];
70
+ trustedPlugins?: string[];
71
+ }
72
+ export interface Subtask {
73
+ id: string;
74
+ title: string;
75
+ description: string;
76
+ persona: 'code' | 'test' | 'doc' | 'reviewer';
77
+ dependencies: string[];
78
+ files: string[];
79
+ status: 'pending' | 'running' | 'completed' | 'failed';
80
+ result?: string;
81
+ }
82
+ export interface TaskDAG {
83
+ subtasks: Subtask[];
84
+ }
85
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAmC,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,uDAAuD;IACvD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,0GAA0G;IAC1G,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9C;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACzC;AAED,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,sCAAsC;IACtC,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uDAAuD;AACvD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;IAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ascii.ts — The FixO ASCII logo + `renderLogo()` entry point.
3
+ *
4
+ * The logo is six rows of block-letter `█` characters, rendered
5
+ * entirely in `C.LAVA` so it pops against the dark void
6
+ * background. Below it sits a single tagline line in `C.SNOW4`
7
+ * (very dim) with the version + three brand keywords.
8
+ *
9
+ * The block characters are intentional — they render the same
10
+ * width in every monospace font and don't trigger the
11
+ * "double-wide emoji" behaviour that some terminals apply to
12
+ * glyphs in the supplementary plane.
13
+ */
14
+ /** Returns the logo lines, each pre-coloured in LAVA. */
15
+ export declare function getLavaLogo(): string;
16
+ /** Returns just the tagline (used by tests and by `renderLogo`). */
17
+ export declare function getTagline(): string;
18
+ /**
19
+ * Print the logo + tagline + one blank line to stdout.
20
+ * Never throws. Safe to call on non-TTY (no-op fallback).
21
+ */
22
+ export declare function renderLogo(): void;
23
+ //# sourceMappingURL=ascii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ascii.d.ts","sourceRoot":"","sources":["../../src/ui/ascii.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAeH,yDAAyD;AACzD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,oEAAoE;AACpE,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAOjC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * ascii.ts — The FixO ASCII logo + `renderLogo()` entry point.
3
+ *
4
+ * The logo is six rows of block-letter `█` characters, rendered
5
+ * entirely in `C.LAVA` so it pops against the dark void
6
+ * background. Below it sits a single tagline line in `C.SNOW4`
7
+ * (very dim) with the version + three brand keywords.
8
+ *
9
+ * The block characters are intentional — they render the same
10
+ * width in every monospace font and don't trigger the
11
+ * "double-wide emoji" behaviour that some terminals apply to
12
+ * glyphs in the supplementary plane.
13
+ */
14
+ import { C } from './colors.js';
15
+ const LOGO_LINES = [
16
+ ' ███████╗██╗██╗ ██╗ ██████╗ ██████╗██╗ ██╗',
17
+ ' ██╔════╝██║╚██╗██╔╝██╔═══██╗ ██╔════╝██║ ██║',
18
+ ' █████╗ ██║ ╚███╔╝ ██║ ██║ ██║ ██║ ██║',
19
+ ' ██╔══╝ ██║ ██╔██╗ ██║ ██║ ██║ ██║ ██║',
20
+ ' ██║ ██║██╔╝ ██╗╚██████╔╝ ╚██████╗███████╗██║',
21
+ ' ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝╚══════╝╚═╝',
22
+ ];
23
+ const TAGLINE = ' v2.0.0 · autonomous · free · multi-provider · freellmapi';
24
+ /** Returns the logo lines, each pre-coloured in LAVA. */
25
+ export function getLavaLogo() {
26
+ return LOGO_LINES.map((line) => `${C.LAVA}${line}${C.RESET}`).join('\n');
27
+ }
28
+ /** Returns just the tagline (used by tests and by `renderLogo`). */
29
+ export function getTagline() {
30
+ return `${C.SNOW4}${TAGLINE}${C.RESET}`;
31
+ }
32
+ /**
33
+ * Print the logo + tagline + one blank line to stdout.
34
+ * Never throws. Safe to call on non-TTY (no-op fallback).
35
+ */
36
+ export function renderLogo() {
37
+ try {
38
+ process.stdout.write(getLavaLogo() + '\n');
39
+ process.stdout.write(getTagline() + '\n\n');
40
+ }
41
+ catch {
42
+ // stdout may be closed during teardown — never let that crash the agent.
43
+ }
44
+ }
45
+ //# sourceMappingURL=ascii.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ascii.js","sourceRoot":"","sources":["../../src/ui/ascii.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAEhC,MAAM,UAAU,GAA0B;IACxC,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;IACtD,sDAAsD;CACvD,CAAC;AAEF,MAAM,OAAO,GAAG,mEAAmE,CAAC;AAEpF,yDAAyD;AACzD,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,UAAU;IACxB,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC"}