byterover-cli 0.2.1 → 0.3.1

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 (490) hide show
  1. package/README.md +56 -56
  2. package/bin/dev.js +1 -1
  3. package/dist/commands/cipher-agent/run.d.ts +111 -0
  4. package/dist/commands/cipher-agent/run.js +493 -0
  5. package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
  6. package/dist/commands/cipher-agent/set-prompt.js +53 -0
  7. package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
  8. package/dist/commands/cipher-agent/show-prompt.js +48 -0
  9. package/dist/commands/clear.d.ts +6 -0
  10. package/dist/commands/clear.js +36 -15
  11. package/dist/commands/curate.d.ts +74 -0
  12. package/dist/commands/curate.js +396 -0
  13. package/dist/commands/foo.d.ts +12 -0
  14. package/dist/commands/foo.js +61 -0
  15. package/dist/commands/gen-rules.d.ts +3 -0
  16. package/dist/commands/gen-rules.js +39 -20
  17. package/dist/commands/init.d.ts +63 -3
  18. package/dist/commands/init.js +285 -70
  19. package/dist/commands/login.js +9 -4
  20. package/dist/commands/pull.d.ts +33 -0
  21. package/dist/commands/pull.js +115 -0
  22. package/dist/commands/push.d.ts +13 -13
  23. package/dist/commands/push.js +81 -101
  24. package/dist/commands/query.d.ts +63 -0
  25. package/dist/commands/query.js +349 -0
  26. package/dist/commands/space/list.d.ts +5 -2
  27. package/dist/commands/space/list.js +60 -56
  28. package/dist/commands/space/switch.d.ts +16 -0
  29. package/dist/commands/space/switch.js +102 -53
  30. package/dist/commands/status.d.ts +5 -2
  31. package/dist/commands/status.js +43 -33
  32. package/dist/commands/watch.d.ts +23 -0
  33. package/dist/commands/watch.js +171 -0
  34. package/dist/config/auth.config.js +14 -2
  35. package/dist/config/context-tree-domains.d.ts +12 -0
  36. package/dist/config/context-tree-domains.js +29 -0
  37. package/dist/config/environment.d.ts +6 -0
  38. package/dist/config/environment.js +9 -2
  39. package/dist/constants.d.ts +5 -0
  40. package/dist/constants.js +6 -0
  41. package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
  42. package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
  43. package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
  44. package/dist/core/domain/cipher/agent/agent-state.js +59 -0
  45. package/dist/core/domain/cipher/agent/index.d.ts +7 -0
  46. package/dist/core/domain/cipher/agent/index.js +7 -0
  47. package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
  48. package/dist/core/domain/cipher/agent-events/index.js +7 -0
  49. package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
  50. package/dist/core/domain/cipher/agent-events/types.js +42 -0
  51. package/dist/core/domain/cipher/blob/types.d.ts +108 -0
  52. package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
  53. package/dist/core/domain/cipher/errors/blob-error.js +68 -0
  54. package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
  55. package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
  56. package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
  57. package/dist/core/domain/cipher/errors/llm-error.js +161 -0
  58. package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
  59. package/dist/core/domain/cipher/errors/memory-error.js +62 -0
  60. package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
  61. package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
  62. package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
  63. package/dist/core/domain/cipher/errors/process-error.js +173 -0
  64. package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
  65. package/dist/core/domain/cipher/errors/session-error.js +74 -0
  66. package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
  67. package/dist/core/domain/cipher/errors/tool-error.js +81 -0
  68. package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
  69. package/dist/core/domain/cipher/memory/types.d.ts +102 -0
  70. package/dist/core/domain/cipher/memory/types.js +4 -0
  71. package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
  72. package/dist/core/domain/cipher/parsed-interaction.js +25 -0
  73. package/dist/core/domain/cipher/process/types.d.ts +286 -0
  74. package/dist/core/domain/cipher/session/types.d.ts +54 -0
  75. package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
  76. package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
  77. package/dist/core/domain/cipher/todos/index.d.ts +4 -0
  78. package/dist/core/domain/cipher/todos/index.js +4 -0
  79. package/dist/core/domain/cipher/todos/types.d.ts +57 -0
  80. package/dist/core/domain/cipher/todos/types.js +5 -0
  81. package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
  82. package/dist/core/domain/cipher/tools/constants.js +24 -0
  83. package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
  84. package/dist/core/domain/cipher/tools/tool-error.js +246 -0
  85. package/dist/core/domain/cipher/tools/types.d.ts +145 -0
  86. package/dist/core/domain/entities/brv-config.d.ts +42 -6
  87. package/dist/core/domain/entities/brv-config.js +115 -17
  88. package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
  89. package/dist/core/domain/entities/cogit-push-context.js +91 -0
  90. package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
  91. package/dist/core/domain/entities/cogit-push-response.js +31 -0
  92. package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
  93. package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
  94. package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
  95. package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
  96. package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
  97. package/dist/core/domain/entities/cogit-snapshot.js +58 -0
  98. package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
  99. package/dist/core/domain/entities/context-tree-index.js +27 -0
  100. package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
  101. package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
  102. package/dist/core/domain/entities/event.d.ts +1 -1
  103. package/dist/core/domain/entities/event.js +3 -1
  104. package/dist/core/domain/entities/parser.d.ts +567 -0
  105. package/dist/core/domain/entities/parser.js +10 -0
  106. package/dist/core/domain/entities/playbook.d.ts +2 -23
  107. package/dist/core/domain/entities/playbook.js +2 -70
  108. package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
  109. package/dist/core/domain/errors/brv-config-version-error.js +21 -0
  110. package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
  111. package/dist/core/domain/knowledge/directory-manager.js +145 -0
  112. package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
  113. package/dist/core/domain/knowledge/markdown-writer.js +18 -0
  114. package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
  115. package/dist/core/domain/knowledge/relation-parser.js +131 -0
  116. package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
  117. package/dist/core/interfaces/cipher/cipher-services.js +1 -0
  118. package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
  119. package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
  120. package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
  121. package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
  122. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
  123. package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
  124. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
  125. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
  126. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
  127. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
  128. package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
  129. package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
  130. package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
  131. package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
  132. package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
  133. package/dist/core/interfaces/cipher/i-file-system.js +1 -0
  134. package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
  135. package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
  136. package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
  137. package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
  138. package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
  139. package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
  140. package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
  141. package/dist/core/interfaces/cipher/i-logger.js +28 -0
  142. package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
  143. package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
  144. package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
  145. package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
  146. package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
  147. package/dist/core/interfaces/cipher/i-process-service.js +1 -0
  148. package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
  149. package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
  150. package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
  151. package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
  152. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
  153. package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
  154. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
  155. package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
  156. package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
  157. package/dist/core/interfaces/cipher/llm-types.js +5 -0
  158. package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
  159. package/dist/core/interfaces/cipher/message-types.js +5 -0
  160. package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
  161. package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
  162. package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
  163. package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
  164. package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
  165. package/dist/core/interfaces/i-cogit-push-service.js +1 -0
  166. package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
  167. package/dist/core/interfaces/i-context-file-reader.js +1 -0
  168. package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
  169. package/dist/core/interfaces/i-context-tree-service.js +1 -0
  170. package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
  171. package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
  172. package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
  173. package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
  174. package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
  175. package/dist/core/interfaces/i-file-watcher-service.js +1 -0
  176. package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
  177. package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
  178. package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
  179. package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
  180. package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
  181. package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
  182. package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
  183. package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
  184. package/dist/hooks/error/clean-errors.d.ts +7 -0
  185. package/dist/hooks/error/clean-errors.js +50 -0
  186. package/dist/hooks/init/welcome.js +72 -1
  187. package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
  188. package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
  189. package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
  190. package/dist/infra/cipher/agent-service-factory.js +212 -0
  191. package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
  192. package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
  193. package/dist/infra/cipher/blob/index.d.ts +10 -0
  194. package/dist/infra/cipher/blob/index.js +12 -0
  195. package/dist/infra/cipher/blob/migrations.d.ts +63 -0
  196. package/dist/infra/cipher/blob/migrations.js +148 -0
  197. package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
  198. package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
  199. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
  200. package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
  201. package/dist/infra/cipher/cipher-agent.d.ts +182 -0
  202. package/dist/infra/cipher/cipher-agent.js +317 -0
  203. package/dist/infra/cipher/command-parser.d.ts +23 -0
  204. package/dist/infra/cipher/command-parser.js +85 -0
  205. package/dist/infra/cipher/display/todo-display.d.ts +23 -0
  206. package/dist/infra/cipher/display/todo-display.js +129 -0
  207. package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
  208. package/dist/infra/cipher/events/event-emitter.js +158 -0
  209. package/dist/infra/cipher/exit-codes.d.ts +44 -0
  210. package/dist/infra/cipher/exit-codes.js +58 -0
  211. package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
  212. package/dist/infra/cipher/file-system/file-system-service.js +641 -0
  213. package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
  214. package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
  215. package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
  216. package/dist/infra/cipher/file-system/glob-utils.js +120 -0
  217. package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
  218. package/dist/infra/cipher/file-system/path-validator.js +184 -0
  219. package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
  220. package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
  221. package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
  222. package/dist/infra/cipher/interactive-commands.d.ts +16 -0
  223. package/dist/infra/cipher/interactive-commands.js +198 -0
  224. package/dist/infra/cipher/interactive-loop.d.ts +24 -0
  225. package/dist/infra/cipher/interactive-loop.js +352 -0
  226. package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
  227. package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
  228. package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
  229. package/dist/infra/cipher/llm/context/compression/index.js +5 -0
  230. package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
  231. package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
  232. package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
  233. package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
  234. package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
  235. package/dist/infra/cipher/llm/context/compression/types.js +1 -0
  236. package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
  237. package/dist/infra/cipher/llm/context/context-manager.js +419 -0
  238. package/dist/infra/cipher/llm/context/index.d.ts +2 -0
  239. package/dist/infra/cipher/llm/context/index.js +2 -0
  240. package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
  241. package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
  242. package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
  243. package/dist/infra/cipher/llm/context/utils.js +89 -0
  244. package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
  245. package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
  246. package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
  247. package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
  248. package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
  249. package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
  250. package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
  251. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
  252. package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
  253. package/dist/infra/cipher/llm/generators/index.js +13 -0
  254. package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
  255. package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
  256. package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
  257. package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
  258. package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
  259. package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
  260. package/dist/infra/cipher/llm/index.d.ts +9 -0
  261. package/dist/infra/cipher/llm/index.js +13 -0
  262. package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
  263. package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
  264. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
  265. package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
  266. package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
  267. package/dist/infra/cipher/llm/response-validator.js +157 -0
  268. package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
  269. package/dist/infra/cipher/llm/retry/index.js +10 -0
  270. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
  271. package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
  272. package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
  273. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
  274. package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
  275. package/dist/infra/cipher/llm/thought-parser.js +190 -0
  276. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
  277. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
  278. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
  279. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
  280. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
  281. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
  282. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
  283. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
  284. package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
  285. package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
  286. package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
  287. package/dist/infra/cipher/logger/console-logger.js +63 -0
  288. package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
  289. package/dist/infra/cipher/logger/event-based-logger.js +92 -0
  290. package/dist/infra/cipher/memory/index.d.ts +6 -0
  291. package/dist/infra/cipher/memory/index.js +7 -0
  292. package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
  293. package/dist/infra/cipher/memory/memory-manager.js +523 -0
  294. package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
  295. package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
  296. package/dist/infra/cipher/process/command-validator.d.ts +59 -0
  297. package/dist/infra/cipher/process/command-validator.js +266 -0
  298. package/dist/infra/cipher/process/index.d.ts +8 -0
  299. package/dist/infra/cipher/process/index.js +8 -0
  300. package/dist/infra/cipher/process/process-service.d.ts +95 -0
  301. package/dist/infra/cipher/process/process-service.js +439 -0
  302. package/dist/infra/cipher/session/chat-session.d.ts +80 -0
  303. package/dist/infra/cipher/session/chat-session.js +165 -0
  304. package/dist/infra/cipher/session/index.d.ts +6 -0
  305. package/dist/infra/cipher/session/index.js +5 -0
  306. package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
  307. package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
  308. package/dist/infra/cipher/session/session-manager.d.ts +109 -0
  309. package/dist/infra/cipher/session/session-manager.js +172 -0
  310. package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
  311. package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
  312. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
  313. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
  314. package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
  315. package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
  316. package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
  317. package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
  318. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
  319. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
  320. package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
  321. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
  322. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
  323. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
  324. package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
  325. package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
  326. package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
  327. package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
  328. package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
  329. package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
  330. package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
  331. package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
  332. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
  333. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
  334. package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
  335. package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
  336. package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
  337. package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
  338. package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
  339. package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
  340. package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
  341. package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
  342. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
  343. package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
  344. package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
  345. package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
  346. package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
  347. package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
  348. package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
  349. package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
  350. package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
  351. package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
  352. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
  353. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
  354. package/dist/infra/cipher/tools/index.d.ts +18 -0
  355. package/dist/infra/cipher/tools/index.js +19 -0
  356. package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
  357. package/dist/infra/cipher/tools/policy-engine.js +110 -0
  358. package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
  359. package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
  360. package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
  361. package/dist/infra/cipher/tools/tool-invocation.js +294 -0
  362. package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
  363. package/dist/infra/cipher/tools/tool-manager.js +209 -0
  364. package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
  365. package/dist/infra/cipher/tools/tool-markers.js +49 -0
  366. package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
  367. package/dist/infra/cipher/tools/tool-provider.js +196 -0
  368. package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
  369. package/dist/infra/cipher/tools/tool-registry.js +144 -0
  370. package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
  371. package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
  372. package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
  373. package/dist/infra/cipher/validation/workspace-validator.js +37 -0
  374. package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
  375. package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
  376. package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
  377. package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
  378. package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
  379. package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
  380. package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
  381. package/dist/infra/cogit/http-cogit-push-service.js +104 -0
  382. package/dist/infra/config/file-config-store.js +9 -3
  383. package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
  384. package/dist/infra/context-tree/file-context-file-reader.js +46 -0
  385. package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
  386. package/dist/infra/context-tree/file-context-tree-service.js +46 -0
  387. package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
  388. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
  389. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
  390. package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
  391. package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
  392. package/dist/infra/memory/http-memory-storage-service.js +4 -3
  393. package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
  394. package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
  395. package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
  396. package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
  397. package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
  398. package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
  399. package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
  400. package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
  401. package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
  402. package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
  403. package/dist/infra/parsers/clean/shared.d.ts +84 -0
  404. package/dist/infra/parsers/clean/shared.js +273 -0
  405. package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
  406. package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
  407. package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
  408. package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
  409. package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
  410. package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
  411. package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
  412. package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
  413. package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
  414. package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
  415. package/dist/infra/space/http-space-service.js +2 -1
  416. package/dist/infra/team/http-team-service.js +2 -1
  417. package/dist/infra/user/http-user-service.js +2 -1
  418. package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
  419. package/dist/infra/watcher/file-watcher-service.js +81 -0
  420. package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
  421. package/dist/infra/workspace/workspace-detector-service.js +165 -0
  422. package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
  423. package/dist/resources/prompts/modes/autonomous.yml +9 -0
  424. package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
  425. package/dist/resources/prompts/reflection.yml +27 -0
  426. package/dist/resources/prompts/system-prompt.yml +82 -0
  427. package/dist/resources/prompts/tool-outputs.yml +30 -0
  428. package/dist/templates/README.md +6 -7
  429. package/dist/templates/sections/command-reference.md +40 -111
  430. package/dist/templates/sections/workflow.md +3 -30
  431. package/dist/utils/emoji-helpers.d.ts +38 -0
  432. package/dist/utils/emoji-helpers.js +42 -0
  433. package/dist/utils/error-handler.d.ts +51 -0
  434. package/dist/utils/error-handler.js +169 -0
  435. package/dist/utils/error-helpers.d.ts +30 -0
  436. package/dist/utils/error-helpers.js +47 -0
  437. package/dist/utils/file-helpers.d.ts +15 -0
  438. package/dist/utils/file-helpers.js +44 -0
  439. package/dist/utils/oclif-error-helpers.d.ts +40 -0
  440. package/dist/utils/oclif-error-helpers.js +46 -0
  441. package/dist/utils/tool-display-formatter.d.ts +53 -0
  442. package/dist/utils/tool-display-formatter.js +257 -0
  443. package/oclif.manifest.json +381 -141
  444. package/package.json +27 -6
  445. package/dist/commands/add.d.ts +0 -49
  446. package/dist/commands/add.js +0 -192
  447. package/dist/commands/complete.d.ts +0 -108
  448. package/dist/commands/complete.js +0 -340
  449. package/dist/commands/retrieve.d.ts +0 -26
  450. package/dist/commands/retrieve.js +0 -101
  451. package/dist/core/domain/entities/curator-output.d.ts +0 -14
  452. package/dist/core/domain/entities/curator-output.js +0 -23
  453. package/dist/core/domain/entities/delta-batch.d.ts +0 -30
  454. package/dist/core/domain/entities/delta-batch.js +0 -52
  455. package/dist/core/domain/entities/delta-operation.d.ts +0 -31
  456. package/dist/core/domain/entities/delta-operation.js +0 -50
  457. package/dist/core/domain/entities/executor-output.d.ts +0 -27
  458. package/dist/core/domain/entities/executor-output.js +0 -33
  459. package/dist/core/domain/entities/reflector-output.d.ts +0 -38
  460. package/dist/core/domain/entities/reflector-output.js +0 -44
  461. package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
  462. package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
  463. package/dist/core/interfaces/i-delta-store.d.ts +0 -15
  464. package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
  465. package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
  466. package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
  467. package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
  468. package/dist/infra/ace/ace-file-utils.d.ts +0 -46
  469. package/dist/infra/ace/ace-file-utils.js +0 -83
  470. package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
  471. package/dist/infra/ace/ace-prompt-templates.js +0 -177
  472. package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
  473. package/dist/infra/ace/file-bullet-content-store.js +0 -89
  474. package/dist/infra/ace/file-delta-store.d.ts +0 -9
  475. package/dist/infra/ace/file-delta-store.js +0 -26
  476. package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
  477. package/dist/infra/ace/file-executor-output-store.js +0 -26
  478. package/dist/infra/ace/file-playbook-store.d.ts +0 -29
  479. package/dist/infra/ace/file-playbook-store.js +0 -107
  480. package/dist/infra/ace/file-reflection-store.d.ts +0 -10
  481. package/dist/infra/ace/file-reflection-store.js +0 -55
  482. package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
  483. package/dist/infra/playbook/file-playbook-service.js +0 -132
  484. /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
  485. /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
  486. /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
  487. /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
  488. /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
  489. /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
  490. /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Retry with Backoff Utility.
3
+ *
4
+ * Provides a generic retry mechanism with exponential backoff for async operations.
5
+ * Used by RetryableContentGenerator and can be used for other retry scenarios.
6
+ */
7
+ import { calculateRetryDelay, DEFAULT_RETRY_POLICY, isRetryableError, } from './retry-policy.js';
8
+ /**
9
+ * Sleep for a specified duration.
10
+ *
11
+ * @param ms - Duration in milliseconds
12
+ * @param signal - Optional abort signal
13
+ * @returns Promise that resolves after the delay
14
+ */
15
+ async function sleep(ms, signal) {
16
+ return new Promise((resolve, reject) => {
17
+ if (signal?.aborted) {
18
+ reject(new Error('Retry aborted'));
19
+ return;
20
+ }
21
+ const timeout = setTimeout(resolve, ms);
22
+ signal?.addEventListener('abort', () => {
23
+ clearTimeout(timeout);
24
+ reject(new Error('Retry aborted'));
25
+ });
26
+ });
27
+ }
28
+ /**
29
+ * Execute an async operation with retry and exponential backoff.
30
+ *
31
+ * @param operation - The async operation to execute
32
+ * @param options - Retry options
33
+ * @returns Promise resolving to the operation result or throwing after all retries exhausted
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const result = await withRetry(
38
+ * () => fetchData(),
39
+ * {
40
+ * policy: DEFAULT_RETRY_POLICY,
41
+ * onRetry: ({ attempt, delayMs }) => {
42
+ * console.log(`Retry ${attempt}, waiting ${delayMs}ms`)
43
+ * }
44
+ * }
45
+ * )
46
+ * ```
47
+ */
48
+ export async function withRetry(operation, options = {}) {
49
+ const policy = options.policy ?? DEFAULT_RETRY_POLICY;
50
+ const maxAttempts = policy.maxRetries + 1;
51
+ return attemptWithRetry({
52
+ attempt: 1,
53
+ maxAttempts,
54
+ operation,
55
+ options,
56
+ policy,
57
+ });
58
+ }
59
+ /**
60
+ * Internal helper to attempt retry recursively.
61
+ */
62
+ async function attemptWithRetry(config) {
63
+ const { attempt, maxAttempts, operation, options, policy } = config;
64
+ // Check if aborted
65
+ if (options.signal?.aborted) {
66
+ throw new Error('Retry aborted');
67
+ }
68
+ try {
69
+ return await operation();
70
+ }
71
+ catch (error) {
72
+ // Check if this is the last attempt
73
+ if (attempt >= maxAttempts) {
74
+ const context = {
75
+ attempt,
76
+ delayMs: 0,
77
+ error,
78
+ maxAttempts,
79
+ };
80
+ options.onExhausted?.(context);
81
+ throw error;
82
+ }
83
+ // Check if error is retryable
84
+ const isRetryable = options.isRetryable?.(error) ?? isRetryableError(error, policy);
85
+ if (!isRetryable) {
86
+ throw error;
87
+ }
88
+ // Calculate delay and invoke callback
89
+ const delayMs = calculateRetryDelay(attempt, policy);
90
+ const context = {
91
+ attempt,
92
+ delayMs,
93
+ error,
94
+ maxAttempts,
95
+ };
96
+ options.onRetry?.(context);
97
+ // Wait before retrying
98
+ await sleep(delayMs, options.signal);
99
+ // Recursively attempt again
100
+ return attemptWithRetry({
101
+ attempt: attempt + 1,
102
+ maxAttempts,
103
+ operation,
104
+ options,
105
+ policy,
106
+ });
107
+ }
108
+ }
109
+ /**
110
+ * Execute an async operation with retry and return a detailed result.
111
+ *
112
+ * Unlike `withRetry`, this function never throws and always returns a result object.
113
+ *
114
+ * @param operation - The async operation to execute
115
+ * @param options - Retry options
116
+ * @returns Promise resolving to a RetryResult object
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const { success, result, error, attempts } = await withRetryResult(
121
+ * () => fetchData(),
122
+ * { policy: DEFAULT_RETRY_POLICY }
123
+ * )
124
+ *
125
+ * if (success) {
126
+ * console.log('Data:', result)
127
+ * } else {
128
+ * console.error('Failed after', attempts, 'attempts:', error)
129
+ * }
130
+ * ```
131
+ */
132
+ export async function withRetryResult(operation, options = {}) {
133
+ const policy = options.policy ?? DEFAULT_RETRY_POLICY;
134
+ const maxAttempts = policy.maxRetries + 1;
135
+ const startTime = Date.now();
136
+ return attemptWithRetryResult({
137
+ attempt: 1,
138
+ maxAttempts,
139
+ operation,
140
+ options,
141
+ policy,
142
+ startTime,
143
+ });
144
+ }
145
+ /**
146
+ * Internal helper to attempt retry recursively with result tracking.
147
+ */
148
+ async function attemptWithRetryResult(config) {
149
+ const { attempt, maxAttempts, operation, options, policy, startTime } = config;
150
+ // Check if aborted
151
+ if (options.signal?.aborted) {
152
+ return {
153
+ attempts: attempt,
154
+ error: new Error('Retry aborted'),
155
+ success: false,
156
+ totalTimeMs: Date.now() - startTime,
157
+ };
158
+ }
159
+ try {
160
+ const result = await operation();
161
+ return {
162
+ attempts: attempt,
163
+ result,
164
+ success: true,
165
+ totalTimeMs: Date.now() - startTime,
166
+ };
167
+ }
168
+ catch (error) {
169
+ // Check if this is the last attempt
170
+ if (attempt >= maxAttempts) {
171
+ const context = {
172
+ attempt,
173
+ delayMs: 0,
174
+ error,
175
+ maxAttempts,
176
+ };
177
+ options.onExhausted?.(context);
178
+ return {
179
+ attempts: attempt,
180
+ error,
181
+ success: false,
182
+ totalTimeMs: Date.now() - startTime,
183
+ };
184
+ }
185
+ // Check if error is retryable
186
+ const isRetryable = options.isRetryable?.(error) ?? isRetryableError(error, policy);
187
+ if (!isRetryable) {
188
+ return {
189
+ attempts: attempt,
190
+ error,
191
+ success: false,
192
+ totalTimeMs: Date.now() - startTime,
193
+ };
194
+ }
195
+ // Calculate delay and invoke callback
196
+ const delayMs = calculateRetryDelay(attempt, policy);
197
+ const context = {
198
+ attempt,
199
+ delayMs,
200
+ error,
201
+ maxAttempts,
202
+ };
203
+ options.onRetry?.(context);
204
+ // Wait before retrying
205
+ try {
206
+ await sleep(delayMs, options.signal);
207
+ }
208
+ catch {
209
+ // Aborted during sleep
210
+ return {
211
+ attempts: attempt,
212
+ error: new Error('Retry aborted'),
213
+ success: false,
214
+ totalTimeMs: Date.now() - startTime,
215
+ };
216
+ }
217
+ // Recursively attempt again
218
+ return attemptWithRetryResult({
219
+ attempt: attempt + 1,
220
+ maxAttempts,
221
+ operation,
222
+ options,
223
+ policy,
224
+ startTime,
225
+ });
226
+ }
227
+ }
228
+ /**
229
+ * Create a retryable version of an async function.
230
+ *
231
+ * @param fn - The async function to wrap
232
+ * @param options - Retry options
233
+ * @returns A new function that will retry on failure
234
+ *
235
+ * @example
236
+ * ```typescript
237
+ * const retryableFetch = makeRetryable(
238
+ * (url: string) => fetch(url).then(r => r.json()),
239
+ * { policy: DEFAULT_RETRY_POLICY }
240
+ * )
241
+ *
242
+ * const data = await retryableFetch('https://api.example.com/data')
243
+ * ```
244
+ */
245
+ export function makeRetryable(fn, options = {}) {
246
+ return (...args) => withRetry(() => fn(...args), options);
247
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Thought Parsing Utilities
3
+ *
4
+ * Handles parsing and processing of thinking/thought signatures from Gemini models.
5
+ * Thoughts represent the model's reasoning process before generating responses or tool calls.
6
+ */
7
+ /**
8
+ * Parsed thought summary with subject and description
9
+ */
10
+ export interface ThoughtSummary {
11
+ /**
12
+ * Description or details of the thought
13
+ */
14
+ description: string;
15
+ /**
16
+ * Subject of the thought (extracted from **subject** format)
17
+ */
18
+ subject: string;
19
+ }
20
+ /**
21
+ * Thinking configuration for Gemini models
22
+ */
23
+ export interface ThinkingConfig {
24
+ /**
25
+ * Whether to include thoughts in responses
26
+ * @default false
27
+ */
28
+ includeThoughts?: boolean;
29
+ /**
30
+ * Thinking token budget for Gemini 2.x models
31
+ * @default 512
32
+ */
33
+ thinkingBudget?: number;
34
+ /**
35
+ * Thinking level for Gemini 3.x models
36
+ * @default 'HIGH'
37
+ */
38
+ thinkingLevel?: ThinkingLevel;
39
+ }
40
+ /**
41
+ * Thinking levels for Gemini 3.x models
42
+ */
43
+ export declare enum ThinkingLevel {
44
+ HIGH = "HIGH",
45
+ LOW = "LOW",
46
+ MEDIUM = "MEDIUM",
47
+ UNSPECIFIED = "THINKING_LEVEL_UNSPECIFIED"
48
+ }
49
+ /**
50
+ * Default thinking mode token budget
51
+ */
52
+ export declare const DEFAULT_THINKING_BUDGET = 512;
53
+ /**
54
+ * Synthetic thought signature used for Preview models
55
+ */
56
+ export declare const SYNTHETIC_THOUGHT_SIGNATURE = "skip_thought_signature_validator";
57
+ /**
58
+ * Utility object for parsing thoughts from LLM responses
59
+ */
60
+ export declare const ThoughtParser: {
61
+ /**
62
+ * Delimiters for subject extraction
63
+ */
64
+ readonly END_DELIMITER: "**";
65
+ /**
66
+ * Extract just the description from thought text
67
+ *
68
+ * @param text - Thought text
69
+ * @returns Description string
70
+ */
71
+ readonly extractDescription: (text: string) => string;
72
+ /**
73
+ * Extract just the subject from thought text
74
+ *
75
+ * @param text - Thought text
76
+ * @returns Subject string or empty if no subject found
77
+ */
78
+ readonly extractSubject: (text: string) => string;
79
+ /**
80
+ * Check if text contains a thought subject
81
+ *
82
+ * @param text - Text to check
83
+ * @returns True if text contains **subject** format
84
+ */
85
+ readonly hasSubject: (text: string) => boolean;
86
+ /**
87
+ * Parse thought text into subject and description.
88
+ *
89
+ * Extracts subject from **subject** format:
90
+ * - Text between ** ** becomes the subject
91
+ * - Rest of the text becomes the description
92
+ *
93
+ * @param rawText - Raw thought text from LLM
94
+ * @returns Parsed thought summary
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * const thought = ThoughtParser.parse("**Analyzing code** Let me review the structure")
99
+ * // Returns: { subject: "Analyzing code", description: "Let me review the structure" }
100
+ * ```
101
+ */
102
+ readonly parse: (rawText: string) => ThoughtSummary;
103
+ /**
104
+ * Delimiters for subject extraction
105
+ */
106
+ readonly START_DELIMITER: "**";
107
+ };
108
+ /**
109
+ * Utility object for managing thinking configuration
110
+ */
111
+ export declare const ThinkingConfigManager: {
112
+ /**
113
+ * Get thinking config based on model version
114
+ *
115
+ * - Gemini 3.x: Uses thinkingLevel
116
+ * - Gemini 2.x: Uses thinkingBudget
117
+ * - Other models: No thinking config
118
+ *
119
+ * @param model - Model identifier
120
+ * @returns Thinking configuration or undefined
121
+ */
122
+ readonly getConfigForModel: (model: string) => ThinkingConfig | undefined;
123
+ /**
124
+ * Check if model is a preview model requiring thought signatures
125
+ *
126
+ * @param model - Model identifier
127
+ * @returns True if model is preview
128
+ */
129
+ readonly isPreviewModel: (model: string) => boolean;
130
+ /**
131
+ * Merge user config with model defaults
132
+ *
133
+ * @param model - Model identifier
134
+ * @param userConfig - User-provided config (optional)
135
+ * @returns Merged configuration
136
+ */
137
+ readonly mergeConfig: (model: string, userConfig?: ThinkingConfig) => ThinkingConfig | undefined;
138
+ /**
139
+ * Check if model supports thinking
140
+ *
141
+ * @param model - Model identifier
142
+ * @returns True if model supports thinking
143
+ */
144
+ readonly supportsThinking: (model: string) => boolean;
145
+ };
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Thought Parsing Utilities
3
+ *
4
+ * Handles parsing and processing of thinking/thought signatures from Gemini models.
5
+ * Thoughts represent the model's reasoning process before generating responses or tool calls.
6
+ */
7
+ /**
8
+ * Thinking levels for Gemini 3.x models
9
+ */
10
+ export var ThinkingLevel;
11
+ (function (ThinkingLevel) {
12
+ ThinkingLevel["HIGH"] = "HIGH";
13
+ ThinkingLevel["LOW"] = "LOW";
14
+ ThinkingLevel["MEDIUM"] = "MEDIUM";
15
+ ThinkingLevel["UNSPECIFIED"] = "THINKING_LEVEL_UNSPECIFIED";
16
+ })(ThinkingLevel || (ThinkingLevel = {}));
17
+ /**
18
+ * Default thinking mode token budget
19
+ */
20
+ export const DEFAULT_THINKING_BUDGET = 512;
21
+ /**
22
+ * Synthetic thought signature used for Preview models
23
+ */
24
+ export const SYNTHETIC_THOUGHT_SIGNATURE = 'skip_thought_signature_validator';
25
+ /**
26
+ * Utility object for parsing thoughts from LLM responses
27
+ */
28
+ export const ThoughtParser = {
29
+ /**
30
+ * Delimiters for subject extraction
31
+ */
32
+ END_DELIMITER: '**',
33
+ /**
34
+ * Extract just the description from thought text
35
+ *
36
+ * @param text - Thought text
37
+ * @returns Description string
38
+ */
39
+ extractDescription(text) {
40
+ const { description } = this.parse(text);
41
+ return description;
42
+ },
43
+ /**
44
+ * Extract just the subject from thought text
45
+ *
46
+ * @param text - Thought text
47
+ * @returns Subject string or empty if no subject found
48
+ */
49
+ extractSubject(text) {
50
+ const { subject } = this.parse(text);
51
+ return subject;
52
+ },
53
+ /**
54
+ * Check if text contains a thought subject
55
+ *
56
+ * @param text - Text to check
57
+ * @returns True if text contains **subject** format
58
+ */
59
+ hasSubject(text) {
60
+ if (!text)
61
+ return false;
62
+ const startIndex = text.indexOf(this.START_DELIMITER);
63
+ if (startIndex === -1)
64
+ return false;
65
+ const endIndex = text.indexOf(this.END_DELIMITER, startIndex + this.START_DELIMITER.length);
66
+ return endIndex !== -1;
67
+ },
68
+ /**
69
+ * Parse thought text into subject and description.
70
+ *
71
+ * Extracts subject from **subject** format:
72
+ * - Text between ** ** becomes the subject
73
+ * - Rest of the text becomes the description
74
+ *
75
+ * @param rawText - Raw thought text from LLM
76
+ * @returns Parsed thought summary
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const thought = ThoughtParser.parse("**Analyzing code** Let me review the structure")
81
+ * // Returns: { subject: "Analyzing code", description: "Let me review the structure" }
82
+ * ```
83
+ */
84
+ parse(rawText) {
85
+ if (!rawText) {
86
+ return { description: '', subject: '' };
87
+ }
88
+ const startIndex = rawText.indexOf(this.START_DELIMITER);
89
+ // No delimiter found - entire text is description
90
+ if (startIndex === -1) {
91
+ return { description: rawText.trim(), subject: '' };
92
+ }
93
+ const endIndex = rawText.indexOf(this.END_DELIMITER, startIndex + this.START_DELIMITER.length);
94
+ // End delimiter not found - entire text is description
95
+ if (endIndex === -1) {
96
+ return { description: rawText.trim(), subject: '' };
97
+ }
98
+ // Extract subject from between delimiters
99
+ const subject = rawText
100
+ .slice(startIndex + this.START_DELIMITER.length, endIndex)
101
+ .trim();
102
+ // Rest is description (before start + after end)
103
+ const description = (rawText.slice(0, startIndex) +
104
+ rawText.slice(endIndex + this.END_DELIMITER.length)).trim();
105
+ return { description, subject };
106
+ },
107
+ /**
108
+ * Delimiters for subject extraction
109
+ */
110
+ START_DELIMITER: '**',
111
+ };
112
+ /**
113
+ * Utility object for managing thinking configuration
114
+ */
115
+ export const ThinkingConfigManager = {
116
+ /**
117
+ * Get thinking config based on model version
118
+ *
119
+ * - Gemini 3.x: Uses thinkingLevel
120
+ * - Gemini 2.x: Uses thinkingBudget
121
+ * - Other models: No thinking config
122
+ *
123
+ * @param model - Model identifier
124
+ * @returns Thinking configuration or undefined
125
+ */
126
+ getConfigForModel(model) {
127
+ const lowerModel = model.toLowerCase();
128
+ // Only Gemini models support thinking
129
+ if (!lowerModel.includes('gemini')) {
130
+ return undefined;
131
+ }
132
+ // Gemini 3.x models
133
+ if (lowerModel.startsWith('gemini-3') || lowerModel.includes('gemini-3')) {
134
+ return {
135
+ includeThoughts: false,
136
+ thinkingLevel: ThinkingLevel.HIGH,
137
+ };
138
+ }
139
+ // Gemini 2.x models
140
+ if (lowerModel.startsWith('gemini-2') || lowerModel.includes('gemini-2')) {
141
+ return {
142
+ includeThoughts: false,
143
+ thinkingBudget: DEFAULT_THINKING_BUDGET,
144
+ };
145
+ }
146
+ // Other Gemini models - use budget as default
147
+ return {
148
+ includeThoughts: false,
149
+ thinkingBudget: DEFAULT_THINKING_BUDGET,
150
+ };
151
+ },
152
+ /**
153
+ * Check if model is a preview model requiring thought signatures
154
+ *
155
+ * @param model - Model identifier
156
+ * @returns True if model is preview
157
+ */
158
+ isPreviewModel(model) {
159
+ return model.toLowerCase().includes('preview');
160
+ },
161
+ /**
162
+ * Merge user config with model defaults
163
+ *
164
+ * @param model - Model identifier
165
+ * @param userConfig - User-provided config (optional)
166
+ * @returns Merged configuration
167
+ */
168
+ mergeConfig(model, userConfig) {
169
+ const modelDefaults = this.getConfigForModel(model);
170
+ if (!modelDefaults) {
171
+ return userConfig;
172
+ }
173
+ if (!userConfig) {
174
+ return modelDefaults;
175
+ }
176
+ return {
177
+ ...modelDefaults,
178
+ ...userConfig,
179
+ };
180
+ },
181
+ /**
182
+ * Check if model supports thinking
183
+ *
184
+ * @param model - Model identifier
185
+ * @returns True if model supports thinking
186
+ */
187
+ supportsThinking(model) {
188
+ return model.toLowerCase().includes('gemini');
189
+ },
190
+ };
@@ -0,0 +1,47 @@
1
+ import type { ITokenizer } from '../../../../core/interfaces/cipher/i-tokenizer.js';
2
+ /**
3
+ * Tokenizer for Anthropic Claude models - CURRENTLY USING APPROXIMATION.
4
+ *
5
+ * This implementation uses a character-based approximation rather than
6
+ * accurate token counting. This is a temporary solution due to the
7
+ * complexity of integrating Anthropic's token counting API.
8
+ *
9
+ * Claude models use a tokenizer similar to GPT's, with approximately
10
+ * 3.5-4 characters per token for English text. We use 3.5 as a middle ground.
11
+ *
12
+ * TODO: Consider these improvements:
13
+ * 1. Use Anthropic's official token counting API (requires async handling or separate service)
14
+ * 2. Implement a WASM-based tokenizer for accurate synchronous counting
15
+ * 3. Cache token counts for frequently used text
16
+ * 4. Model-specific adjustments based on actual Claude tokenization patterns
17
+ *
18
+ * Reference: https://docs.anthropic.com/en/docs/about-claude/models
19
+ */
20
+ export declare class ClaudeTokenizer implements ITokenizer {
21
+ private readonly modelName;
22
+ /**
23
+ * Creates a new Claude tokenizer instance.
24
+ *
25
+ * @param model - The Claude model name (e.g., 'claude-3-5-sonnet-20241022', 'claude-3-opus-20240229')
26
+ * Currently not used for approximation, but stored for future improvements
27
+ */
28
+ constructor(model: string);
29
+ /**
30
+ * Approximates the token count for Anthropic Claude models.
31
+ *
32
+ * Uses a character-based approximation: ~3.5 characters per token.
33
+ * This is based on Anthropic's documentation and common patterns for
34
+ * English text with Claude's tokenizer.
35
+ *
36
+ * IMPORTANT: This is NOT accurate for Claude models and should be replaced
37
+ * with a proper implementation when possible. The actual token count can vary
38
+ * significantly based on:
39
+ * - Language (non-English text may have different ratios)
40
+ * - Content type (code vs prose)
41
+ * - Special characters and formatting
42
+ *
43
+ * @param text - Text content to count tokens for
44
+ * @returns Approximate number of tokens
45
+ */
46
+ countTokens(text: string): number;
47
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Tokenizer for Anthropic Claude models - CURRENTLY USING APPROXIMATION.
3
+ *
4
+ * This implementation uses a character-based approximation rather than
5
+ * accurate token counting. This is a temporary solution due to the
6
+ * complexity of integrating Anthropic's token counting API.
7
+ *
8
+ * Claude models use a tokenizer similar to GPT's, with approximately
9
+ * 3.5-4 characters per token for English text. We use 3.5 as a middle ground.
10
+ *
11
+ * TODO: Consider these improvements:
12
+ * 1. Use Anthropic's official token counting API (requires async handling or separate service)
13
+ * 2. Implement a WASM-based tokenizer for accurate synchronous counting
14
+ * 3. Cache token counts for frequently used text
15
+ * 4. Model-specific adjustments based on actual Claude tokenization patterns
16
+ *
17
+ * Reference: https://docs.anthropic.com/en/docs/about-claude/models
18
+ */
19
+ export class ClaudeTokenizer {
20
+ modelName;
21
+ /**
22
+ * Creates a new Claude tokenizer instance.
23
+ *
24
+ * @param model - The Claude model name (e.g., 'claude-3-5-sonnet-20241022', 'claude-3-opus-20240229')
25
+ * Currently not used for approximation, but stored for future improvements
26
+ */
27
+ constructor(model) {
28
+ this.modelName = model;
29
+ }
30
+ /**
31
+ * Approximates the token count for Anthropic Claude models.
32
+ *
33
+ * Uses a character-based approximation: ~3.5 characters per token.
34
+ * This is based on Anthropic's documentation and common patterns for
35
+ * English text with Claude's tokenizer.
36
+ *
37
+ * IMPORTANT: This is NOT accurate for Claude models and should be replaced
38
+ * with a proper implementation when possible. The actual token count can vary
39
+ * significantly based on:
40
+ * - Language (non-English text may have different ratios)
41
+ * - Content type (code vs prose)
42
+ * - Special characters and formatting
43
+ *
44
+ * @param text - Text content to count tokens for
45
+ * @returns Approximate number of tokens
46
+ */
47
+ countTokens(text) {
48
+ if (!text) {
49
+ return 0;
50
+ }
51
+ // Approximation: ~3.5 characters per token
52
+ // Claude's tokenizer is similar to GPT's, typically more efficient than 4 chars/token
53
+ return Math.ceil(text.length / 3.5);
54
+ }
55
+ }