@lotagate/cli 0.1.22 → 0.1.23

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/package.json +7 -7
  2. package/scripts/install-native.mjs +11 -11
  3. package/dist/application/agent/agent-history.d.ts +0 -3
  4. package/dist/application/agent/agent-history.js +0 -81
  5. package/dist/application/agent/agent-input-context.d.ts +0 -9
  6. package/dist/application/agent/agent-input-context.js +0 -12
  7. package/dist/application/agent/agent-limit.d.ts +0 -3
  8. package/dist/application/agent/agent-limit.js +0 -12
  9. package/dist/application/agent/agent-run-tracker.d.ts +0 -30
  10. package/dist/application/agent/agent-run-tracker.js +0 -68
  11. package/dist/application/agent/agent-session-store.d.ts +0 -19
  12. package/dist/application/agent/agent-session-store.js +0 -74
  13. package/dist/application/agent/capability-profile.d.ts +0 -37
  14. package/dist/application/agent/capability-profile.js +0 -13
  15. package/dist/application/agent/cli-agent-execution-service.d.ts +0 -81
  16. package/dist/application/agent/cli-agent-execution-service.js +0 -279
  17. package/dist/application/agent/context-compaction-persistence.d.ts +0 -8
  18. package/dist/application/agent/context-compaction-persistence.js +0 -27
  19. package/dist/application/agent/context-compaction.d.ts +0 -20
  20. package/dist/application/agent/context-compaction.js +0 -114
  21. package/dist/application/agent/prompt-data-safety.d.ts +0 -14
  22. package/dist/application/agent/prompt-data-safety.js +0 -38
  23. package/dist/application/agent/safe-system-prompt.d.ts +0 -3
  24. package/dist/application/agent/safe-system-prompt.js +0 -19
  25. package/dist/application/agent/scoped-tool-executor.d.ts +0 -13
  26. package/dist/application/agent/scoped-tool-executor.js +0 -32
  27. package/dist/application/agent/system-prompt-builder.d.ts +0 -14
  28. package/dist/application/agent/system-prompt-builder.js +0 -199
  29. package/dist/application/agent/tool-catalog.d.ts +0 -14
  30. package/dist/application/agent/tool-catalog.js +0 -30
  31. package/dist/application/agent/tool-display.d.ts +0 -6
  32. package/dist/application/agent/tool-display.js +0 -59
  33. package/dist/application/agent/tool-hook-lifecycle.d.ts +0 -19
  34. package/dist/application/agent/tool-hook-lifecycle.js +0 -85
  35. package/dist/application/auth/authentication-service.d.ts +0 -20
  36. package/dist/application/auth/authentication-service.js +0 -44
  37. package/dist/application/chat/chat-service.d.ts +0 -12
  38. package/dist/application/chat/chat-service.js +0 -19
  39. package/dist/application/chat/pending-attachment-store.d.ts +0 -12
  40. package/dist/application/chat/pending-attachment-store.js +0 -28
  41. package/dist/application/commands/application-command-executor.d.ts +0 -20
  42. package/dist/application/commands/application-command-executor.js +0 -66
  43. package/dist/application/commands/cli-args.d.ts +0 -6
  44. package/dist/application/commands/cli-args.js +0 -43
  45. package/dist/application/commands/cli-command-services.d.ts +0 -16
  46. package/dist/application/commands/cli-command-services.js +0 -405
  47. package/dist/application/commands/command-catalog.d.ts +0 -6
  48. package/dist/application/commands/command-catalog.js +0 -159
  49. package/dist/application/commands/command-contract.d.ts +0 -58
  50. package/dist/application/commands/command-contract.js +0 -1
  51. package/dist/application/commands/command-hints.d.ts +0 -9
  52. package/dist/application/commands/command-hints.js +0 -17
  53. package/dist/application/commands/command-output.d.ts +0 -4
  54. package/dist/application/commands/command-output.js +0 -1
  55. package/dist/application/commands/command-parser.d.ts +0 -10
  56. package/dist/application/commands/command-parser.js +0 -155
  57. package/dist/application/commands/command-presentation.d.ts +0 -7
  58. package/dist/application/commands/command-presentation.js +0 -131
  59. package/dist/application/commands/command-registry.d.ts +0 -11
  60. package/dist/application/commands/command-registry.js +0 -64
  61. package/dist/application/commands/command-runtime.d.ts +0 -2
  62. package/dist/application/commands/command-runtime.js +0 -3
  63. package/dist/application/commands/goal-command-handlers.d.ts +0 -3
  64. package/dist/application/commands/goal-command-handlers.js +0 -120
  65. package/dist/application/commands/media-command-handlers.d.ts +0 -9
  66. package/dist/application/commands/media-command-handlers.js +0 -307
  67. package/dist/application/commands/media-command-output.d.ts +0 -11
  68. package/dist/application/commands/media-command-output.js +0 -8
  69. package/dist/application/commands/runtime-command-handlers.d.ts +0 -7
  70. package/dist/application/commands/runtime-command-handlers.js +0 -177
  71. package/dist/application/commands/stream-output.d.ts +0 -4
  72. package/dist/application/commands/stream-output.js +0 -10
  73. package/dist/application/commands/utility-commands.d.ts +0 -6
  74. package/dist/application/commands/utility-commands.js +0 -81
  75. package/dist/application/config/execution-config.d.ts +0 -4
  76. package/dist/application/config/execution-config.js +0 -6
  77. package/dist/application/extensions/extension-list-contract.d.ts +0 -13
  78. package/dist/application/extensions/extension-list-contract.js +0 -1
  79. package/dist/application/extensions/extension-list-formatters.d.ts +0 -31
  80. package/dist/application/extensions/extension-list-formatters.js +0 -98
  81. package/dist/application/extensions/extension-list-output.d.ts +0 -3
  82. package/dist/application/extensions/extension-list-output.js +0 -7
  83. package/dist/application/extensions/plugin-contribution-registry.d.ts +0 -15
  84. package/dist/application/extensions/plugin-contribution-registry.js +0 -80
  85. package/dist/application/extensions/skill-scope-store.d.ts +0 -23
  86. package/dist/application/extensions/skill-scope-store.js +0 -33
  87. package/dist/application/formatting/compact-number.d.ts +0 -2
  88. package/dist/application/formatting/compact-number.js +0 -18
  89. package/dist/application/formatting/compact-table.d.ts +0 -22
  90. package/dist/application/formatting/compact-table.js +0 -49
  91. package/dist/application/media/video-operation-poller.d.ts +0 -5
  92. package/dist/application/media/video-operation-poller.js +0 -42
  93. package/dist/application/model/cached-model-catalog.d.ts +0 -13
  94. package/dist/application/model/cached-model-catalog.js +0 -31
  95. package/dist/application/model/initial-model-selection.d.ts +0 -10
  96. package/dist/application/model/initial-model-selection.js +0 -11
  97. package/dist/application/model/model-catalog-service.d.ts +0 -6
  98. package/dist/application/model/model-catalog-service.js +0 -13
  99. package/dist/application/model/model-context-window.d.ts +0 -3
  100. package/dist/application/model/model-context-window.js +0 -23
  101. package/dist/application/orchestration/cli-subagent-service.d.ts +0 -70
  102. package/dist/application/orchestration/cli-subagent-service.js +0 -328
  103. package/dist/application/orchestration/cli-turn-event-projector.d.ts +0 -12
  104. package/dist/application/orchestration/cli-turn-event-projector.js +0 -81
  105. package/dist/application/orchestration/cli-turn-events.d.ts +0 -76
  106. package/dist/application/orchestration/cli-turn-events.js +0 -39
  107. package/dist/application/orchestration/cli-turn-persistence.d.ts +0 -6
  108. package/dist/application/orchestration/cli-turn-persistence.js +0 -14
  109. package/dist/application/orchestration/goal-evaluator.d.ts +0 -18
  110. package/dist/application/orchestration/goal-evaluator.js +0 -88
  111. package/dist/application/orchestration/goal-input.d.ts +0 -3
  112. package/dist/application/orchestration/goal-input.js +0 -19
  113. package/dist/application/orchestration/goal-output.d.ts +0 -2
  114. package/dist/application/orchestration/goal-output.js +0 -11
  115. package/dist/application/orchestration/goal-runner.d.ts +0 -22
  116. package/dist/application/orchestration/goal-runner.js +0 -153
  117. package/dist/application/orchestration/goal-usage.d.ts +0 -9
  118. package/dist/application/orchestration/goal-usage.js +0 -19
  119. package/dist/application/orchestration/headless-agent-turn.d.ts +0 -32
  120. package/dist/application/orchestration/headless-agent-turn.js +0 -82
  121. package/dist/application/orchestration/plan-generator.d.ts +0 -7
  122. package/dist/application/orchestration/plan-generator.js +0 -34
  123. package/dist/application/orchestration/subagent-coordinator.d.ts +0 -33
  124. package/dist/application/orchestration/subagent-coordinator.js +0 -28
  125. package/dist/application/orchestration/subagent-handoff.d.ts +0 -2
  126. package/dist/application/orchestration/subagent-handoff.js +0 -68
  127. package/dist/application/orchestration/subagent-tool-executor.d.ts +0 -12
  128. package/dist/application/orchestration/subagent-tool-executor.js +0 -93
  129. package/dist/application/orchestration/task-assessment.d.ts +0 -4
  130. package/dist/application/orchestration/task-assessment.js +0 -35
  131. package/dist/application/orchestration/task-graph.d.ts +0 -13
  132. package/dist/application/orchestration/task-graph.js +0 -56
  133. package/dist/application/orchestration/task-scheduler.d.ts +0 -18
  134. package/dist/application/orchestration/task-scheduler.js +0 -88
  135. package/dist/application/project/project-trust-service.d.ts +0 -13
  136. package/dist/application/project/project-trust-service.js +0 -74
  137. package/dist/application/protocol/browser-host-tool-executor.d.ts +0 -41
  138. package/dist/application/protocol/browser-host-tool-executor.js +0 -88
  139. package/dist/application/protocol/desktop-agent-command.d.ts +0 -9
  140. package/dist/application/protocol/desktop-agent-command.js +0 -663
  141. package/dist/application/protocol/desktop-attachment-store.d.ts +0 -16
  142. package/dist/application/protocol/desktop-attachment-store.js +0 -82
  143. package/dist/application/protocol/desktop-command-catalog.d.ts +0 -2
  144. package/dist/application/protocol/desktop-command-catalog.js +0 -19
  145. package/dist/application/protocol/desktop-command-contract.d.ts +0 -22
  146. package/dist/application/protocol/desktop-command-contract.js +0 -3
  147. package/dist/application/protocol/desktop-command-executor.d.ts +0 -16
  148. package/dist/application/protocol/desktop-command-executor.js +0 -47
  149. package/dist/application/protocol/desktop-command-output.d.ts +0 -15
  150. package/dist/application/protocol/desktop-command-output.js +0 -24
  151. package/dist/application/protocol/desktop-execution-policy.d.ts +0 -17
  152. package/dist/application/protocol/desktop-execution-policy.js +0 -49
  153. package/dist/application/protocol/desktop-host-tool-executor.d.ts +0 -57
  154. package/dist/application/protocol/desktop-host-tool-executor.js +0 -53
  155. package/dist/application/protocol/desktop-orchestration-events.d.ts +0 -5
  156. package/dist/application/protocol/desktop-orchestration-events.js +0 -37
  157. package/dist/application/protocol/json-line-writer.d.ts +0 -9
  158. package/dist/application/protocol/json-line-writer.js +0 -19
  159. package/dist/application/protocol/jsonl-agent-command.d.ts +0 -3
  160. package/dist/application/protocol/jsonl-agent-command.js +0 -97
  161. package/dist/application/protocol/jsonl-protocol.d.ts +0 -52
  162. package/dist/application/protocol/jsonl-protocol.js +0 -170
  163. package/dist/application/security/desktop-tool-scope-policy.d.ts +0 -3
  164. package/dist/application/security/desktop-tool-scope-policy.js +0 -52
  165. package/dist/application/security/tool-action-risk-analyzer.d.ts +0 -13
  166. package/dist/application/security/tool-action-risk-analyzer.js +0 -64
  167. package/dist/application/security/tool-approval-service.d.ts +0 -35
  168. package/dist/application/security/tool-approval-service.js +0 -97
  169. package/dist/application/security/tool-risk-classifier.d.ts +0 -11
  170. package/dist/application/security/tool-risk-classifier.js +0 -65
  171. package/dist/application/security/workspace-permission-policy.d.ts +0 -10
  172. package/dist/application/security/workspace-permission-policy.js +0 -50
  173. package/dist/application/session/project-session-access.d.ts +0 -8
  174. package/dist/application/session/project-session-access.js +0 -19
  175. package/dist/application/session/session-compaction-service.d.ts +0 -10
  176. package/dist/application/session/session-compaction-service.js +0 -43
  177. package/dist/application/session/session-turn-lifecycle.d.ts +0 -5
  178. package/dist/application/session/session-turn-lifecycle.js +0 -31
  179. package/dist/application/workspace/workspace-file-index.d.ts +0 -15
  180. package/dist/application/workspace/workspace-file-index.js +0 -60
  181. package/dist/application/workspace/workspace-file-reference-resolver.d.ts +0 -14
  182. package/dist/application/workspace/workspace-file-reference-resolver.js +0 -123
  183. package/dist/application/workspace/workspace-instruction-loader.d.ts +0 -8
  184. package/dist/application/workspace/workspace-instruction-loader.js +0 -55
  185. package/dist/bootstrap/composition-root.d.ts +0 -6
  186. package/dist/bootstrap/composition-root.js +0 -4
  187. package/dist/bootstrap/global-cli-options.d.ts +0 -6
  188. package/dist/bootstrap/global-cli-options.js +0 -29
  189. package/dist/bootstrap/native-devtools-stub.d.ts +0 -10
  190. package/dist/bootstrap/native-devtools-stub.js +0 -10
  191. package/dist/bootstrap/native-entry.d.ts +0 -1
  192. package/dist/bootstrap/native-entry.js +0 -6
  193. package/dist/bootstrap/native-tiktoken.d.ts +0 -4
  194. package/dist/bootstrap/native-tiktoken.js +0 -5
  195. package/dist/bootstrap/runtime-factory.d.ts +0 -35
  196. package/dist/bootstrap/runtime-factory.js +0 -44
  197. package/dist/bootstrap/shutdown-manager.d.ts +0 -10
  198. package/dist/bootstrap/shutdown-manager.js +0 -14
  199. package/dist/bootstrap/startup-sequence.d.ts +0 -5
  200. package/dist/bootstrap/startup-sequence.js +0 -10
  201. package/dist/domain/auth/auth-profile.d.ts +0 -14
  202. package/dist/domain/auth/auth-profile.js +0 -39
  203. package/dist/domain/config/config-schema.d.ts +0 -17
  204. package/dist/domain/config/config-schema.js +0 -105
  205. package/dist/domain/errors/cli-command-hint.d.ts +0 -5
  206. package/dist/domain/errors/cli-command-hint.js +0 -1
  207. package/dist/domain/errors/cli-error.d.ts +0 -35
  208. package/dist/domain/errors/cli-error.js +0 -129
  209. package/dist/domain/errors/error-codes.d.ts +0 -46
  210. package/dist/domain/errors/error-codes.js +0 -45
  211. package/dist/domain/extensions/extension-scope.d.ts +0 -3
  212. package/dist/domain/extensions/extension-scope.js +0 -23
  213. package/dist/domain/extensions/extension-state.d.ts +0 -5
  214. package/dist/domain/extensions/extension-state.js +0 -11
  215. package/dist/domain/extensions/hook-manifest.d.ts +0 -10
  216. package/dist/domain/extensions/hook-manifest.js +0 -23
  217. package/dist/domain/extensions/mcp-config.d.ts +0 -18
  218. package/dist/domain/extensions/mcp-config.js +0 -111
  219. package/dist/domain/extensions/plugin-manifest.d.ts +0 -11
  220. package/dist/domain/extensions/plugin-manifest.js +0 -43
  221. package/dist/domain/extensions/skill-manifest.d.ts +0 -10
  222. package/dist/domain/extensions/skill-manifest.js +0 -51
  223. package/dist/domain/filesystem/file-change-diff.d.ts +0 -21
  224. package/dist/domain/filesystem/file-change-diff.js +0 -60
  225. package/dist/domain/media/gateway-media-contract.d.ts +0 -23
  226. package/dist/domain/media/gateway-media-contract.js +0 -163
  227. package/dist/domain/media/media-contract.d.ts +0 -28
  228. package/dist/domain/media/media-contract.js +0 -1
  229. package/dist/domain/media/media-execution-policy.d.ts +0 -9
  230. package/dist/domain/media/media-execution-policy.js +0 -31
  231. package/dist/domain/orchestration/goal.d.ts +0 -58
  232. package/dist/domain/orchestration/goal.js +0 -113
  233. package/dist/domain/orchestration/subagent-identity.d.ts +0 -2
  234. package/dist/domain/orchestration/subagent-identity.js +0 -8
  235. package/dist/domain/orchestration/subagent.d.ts +0 -33
  236. package/dist/domain/orchestration/subagent.js +0 -1
  237. package/dist/domain/orchestration/task.d.ts +0 -31
  238. package/dist/domain/orchestration/task.js +0 -1
  239. package/dist/domain/project/project-identity.d.ts +0 -6
  240. package/dist/domain/project/project-identity.js +0 -4
  241. package/dist/domain/runtime/assistant-delta-normalizer.d.ts +0 -11
  242. package/dist/domain/runtime/assistant-delta-normalizer.js +0 -19
  243. package/dist/domain/runtime/resource-limits.d.ts +0 -60
  244. package/dist/domain/runtime/resource-limits.js +0 -60
  245. package/dist/domain/session/attachment.d.ts +0 -13
  246. package/dist/domain/session/attachment.js +0 -1
  247. package/dist/domain/session/session-schema.d.ts +0 -6
  248. package/dist/domain/session/session-schema.js +0 -28
  249. package/dist/domain/session/session.d.ts +0 -27
  250. package/dist/domain/session/session.js +0 -1
  251. package/dist/domain/settings/settings-document.d.ts +0 -8
  252. package/dist/domain/settings/settings-document.js +0 -36
  253. package/dist/domain/validation/record-schema.d.ts +0 -4
  254. package/dist/domain/validation/record-schema.js +0 -9
  255. package/dist/domain/workspace/workspace-settings.d.ts +0 -12
  256. package/dist/domain/workspace/workspace-settings.js +0 -44
  257. package/dist/infrastructure/agent-sdk/agent-instance-factory.d.ts +0 -22
  258. package/dist/infrastructure/agent-sdk/agent-instance-factory.js +0 -31
  259. package/dist/infrastructure/agent-sdk/tool-calling-model-client.d.ts +0 -11
  260. package/dist/infrastructure/agent-sdk/tool-calling-model-client.js +0 -447
  261. package/dist/infrastructure/cache/cache-policy.d.ts +0 -7
  262. package/dist/infrastructure/cache/cache-policy.js +0 -18
  263. package/dist/infrastructure/cache/file-cache-store.d.ts +0 -17
  264. package/dist/infrastructure/cache/file-cache-store.js +0 -121
  265. package/dist/infrastructure/clipboard/clipboard-adapter-factory.d.ts +0 -11
  266. package/dist/infrastructure/clipboard/clipboard-adapter-factory.js +0 -98
  267. package/dist/infrastructure/clipboard/clipboard-policy.d.ts +0 -8
  268. package/dist/infrastructure/clipboard/clipboard-policy.js +0 -19
  269. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.d.ts +0 -10
  270. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.js +0 -94
  271. package/dist/infrastructure/clipboard/image-normalizer.d.ts +0 -12
  272. package/dist/infrastructure/clipboard/image-normalizer.js +0 -78
  273. package/dist/infrastructure/clipboard/windows-clipboard-adapter.d.ts +0 -7
  274. package/dist/infrastructure/clipboard/windows-clipboard-adapter.js +0 -66
  275. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.d.ts +0 -7
  276. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.js +0 -70
  277. package/dist/infrastructure/config/config-loader.d.ts +0 -19
  278. package/dist/infrastructure/config/config-loader.js +0 -76
  279. package/dist/infrastructure/config/environment-values.d.ts +0 -2
  280. package/dist/infrastructure/config/environment-values.js +0 -7
  281. package/dist/infrastructure/credentials/composite-credential-store.d.ts +0 -11
  282. package/dist/infrastructure/credentials/composite-credential-store.js +0 -32
  283. package/dist/infrastructure/credentials/encrypted-file-credential-store.d.ts +0 -17
  284. package/dist/infrastructure/credentials/encrypted-file-credential-store.js +0 -181
  285. package/dist/infrastructure/credentials/environment-credential-store.d.ts +0 -11
  286. package/dist/infrastructure/credentials/environment-credential-store.js +0 -37
  287. package/dist/infrastructure/credentials/secret-input.d.ts +0 -7
  288. package/dist/infrastructure/credentials/secret-input.js +0 -44
  289. package/dist/infrastructure/extensions/composite-mcp-config-store.d.ts +0 -9
  290. package/dist/infrastructure/extensions/composite-mcp-config-store.js +0 -10
  291. package/dist/infrastructure/extensions/extension-directory-reader.d.ts +0 -2
  292. package/dist/infrastructure/extensions/extension-directory-reader.js +0 -15
  293. package/dist/infrastructure/extensions/extension-source-resolver.d.ts +0 -6
  294. package/dist/infrastructure/extensions/extension-source-resolver.js +0 -126
  295. package/dist/infrastructure/extensions/file-mcp-config-store.d.ts +0 -15
  296. package/dist/infrastructure/extensions/file-mcp-config-store.js +0 -66
  297. package/dist/infrastructure/extensions/hook-runtime.d.ts +0 -18
  298. package/dist/infrastructure/extensions/hook-runtime.js +0 -66
  299. package/dist/infrastructure/extensions/mcp-runtime.d.ts +0 -12
  300. package/dist/infrastructure/extensions/mcp-runtime.js +0 -52
  301. package/dist/infrastructure/extensions/plugin-discovery.d.ts +0 -5
  302. package/dist/infrastructure/extensions/plugin-discovery.js +0 -52
  303. package/dist/infrastructure/extensions/plugin-manager.d.ts +0 -26
  304. package/dist/infrastructure/extensions/plugin-manager.js +0 -139
  305. package/dist/infrastructure/extensions/skill-discovery.d.ts +0 -4
  306. package/dist/infrastructure/extensions/skill-discovery.js +0 -29
  307. package/dist/infrastructure/extensions/skill-installer.d.ts +0 -8
  308. package/dist/infrastructure/extensions/skill-installer.js +0 -88
  309. package/dist/infrastructure/extensions/skill-manager.d.ts +0 -22
  310. package/dist/infrastructure/extensions/skill-manager.js +0 -67
  311. package/dist/infrastructure/extensions/skill-roots.d.ts +0 -19
  312. package/dist/infrastructure/extensions/skill-roots.js +0 -25
  313. package/dist/infrastructure/extensions/skill-tool-executor.d.ts +0 -18
  314. package/dist/infrastructure/extensions/skill-tool-executor.js +0 -53
  315. package/dist/infrastructure/filesystem/atomic-file-store.d.ts +0 -12
  316. package/dist/infrastructure/filesystem/atomic-file-store.js +0 -106
  317. package/dist/infrastructure/filesystem/bounded-file-reader.d.ts +0 -6
  318. package/dist/infrastructure/filesystem/bounded-file-reader.js +0 -24
  319. package/dist/infrastructure/filesystem/bounded-json-reader.d.ts +0 -1
  320. package/dist/infrastructure/filesystem/bounded-json-reader.js +0 -7
  321. package/dist/infrastructure/filesystem/fs-errors.d.ts +0 -2
  322. package/dist/infrastructure/filesystem/fs-errors.js +0 -6
  323. package/dist/infrastructure/filesystem/gateway-media-input-reader.d.ts +0 -12
  324. package/dist/infrastructure/filesystem/gateway-media-input-reader.js +0 -49
  325. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.d.ts +0 -21
  326. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.js +0 -176
  327. package/dist/infrastructure/filesystem/path-resolver.d.ts +0 -20
  328. package/dist/infrastructure/filesystem/path-resolver.js +0 -119
  329. package/dist/infrastructure/filesystem/workspace-media-artifact-store.d.ts +0 -13
  330. package/dist/infrastructure/filesystem/workspace-media-artifact-store.js +0 -152
  331. package/dist/infrastructure/logging/daily-rotating-file-writer.d.ts +0 -20
  332. package/dist/infrastructure/logging/daily-rotating-file-writer.js +0 -75
  333. package/dist/infrastructure/logging/log-redactor.d.ts +0 -2
  334. package/dist/infrastructure/logging/log-redactor.js +0 -26
  335. package/dist/infrastructure/logging/logging-policy.d.ts +0 -6
  336. package/dist/infrastructure/logging/logging-policy.js +0 -6
  337. package/dist/infrastructure/logging/structured-logger.d.ts +0 -24
  338. package/dist/infrastructure/logging/structured-logger.js +0 -40
  339. package/dist/infrastructure/network/safe-media-downloader.d.ts +0 -23
  340. package/dist/infrastructure/network/safe-media-downloader.js +0 -239
  341. package/dist/infrastructure/platform/host-platform.d.ts +0 -14
  342. package/dist/infrastructure/platform/host-platform.js +0 -23
  343. package/dist/infrastructure/platform/host-process.d.ts +0 -17
  344. package/dist/infrastructure/platform/host-process.js +0 -116
  345. package/dist/infrastructure/platform/platform-paths.d.ts +0 -25
  346. package/dist/infrastructure/platform/platform-paths.js +0 -33
  347. package/dist/infrastructure/project/file-project-trust-store.d.ts +0 -12
  348. package/dist/infrastructure/project/file-project-trust-store.js +0 -59
  349. package/dist/infrastructure/sdk/chat-completion-adapter.d.ts +0 -8
  350. package/dist/infrastructure/sdk/chat-completion-adapter.js +0 -115
  351. package/dist/infrastructure/sdk/lotagate-client-factory.d.ts +0 -3
  352. package/dist/infrastructure/sdk/lotagate-client-factory.js +0 -8
  353. package/dist/infrastructure/sdk/model-catalog-adapter.d.ts +0 -19
  354. package/dist/infrastructure/sdk/model-catalog-adapter.js +0 -28
  355. package/dist/infrastructure/sdk/sdk-media-gateway-client.d.ts +0 -20
  356. package/dist/infrastructure/sdk/sdk-media-gateway-client.js +0 -97
  357. package/dist/infrastructure/sessions/file-goal-store.d.ts +0 -21
  358. package/dist/infrastructure/sessions/file-goal-store.js +0 -160
  359. package/dist/infrastructure/sessions/file-session-store.d.ts +0 -48
  360. package/dist/infrastructure/sessions/file-session-store.js +0 -525
  361. package/dist/infrastructure/sessions/project-session-paths.d.ts +0 -17
  362. package/dist/infrastructure/sessions/project-session-paths.js +0 -41
  363. package/dist/infrastructure/sessions/session-index.d.ts +0 -16
  364. package/dist/infrastructure/sessions/session-index.js +0 -84
  365. package/dist/infrastructure/sessions/session-journal.d.ts +0 -22
  366. package/dist/infrastructure/sessions/session-journal.js +0 -137
  367. package/dist/infrastructure/sessions/subagent-journal-store.d.ts +0 -28
  368. package/dist/infrastructure/sessions/subagent-journal-store.js +0 -30
  369. package/dist/infrastructure/shell/shell-tool-executor.d.ts +0 -17
  370. package/dist/infrastructure/shell/shell-tool-executor.js +0 -115
  371. package/dist/infrastructure/tokens/tiktoken-token-estimator.d.ts +0 -18
  372. package/dist/infrastructure/tokens/tiktoken-token-estimator.js +0 -48
  373. package/dist/infrastructure/workspace/workspace-settings-store.d.ts +0 -9
  374. package/dist/infrastructure/workspace/workspace-settings-store.js +0 -75
  375. package/dist/main.d.ts +0 -7
  376. package/dist/main.js +0 -66
  377. package/dist/ports/cache-store.d.ts +0 -10
  378. package/dist/ports/cache-store.js +0 -1
  379. package/dist/ports/chat-model.d.ts +0 -30
  380. package/dist/ports/chat-model.js +0 -1
  381. package/dist/ports/clipboard-adapter.d.ts +0 -7
  382. package/dist/ports/clipboard-adapter.js +0 -1
  383. package/dist/ports/clipboard-text-adapter.d.ts +0 -3
  384. package/dist/ports/clipboard-text-adapter.js +0 -1
  385. package/dist/ports/credential-store.d.ts +0 -7
  386. package/dist/ports/credential-store.js +0 -1
  387. package/dist/ports/goal-store.d.ts +0 -12
  388. package/dist/ports/goal-store.js +0 -1
  389. package/dist/ports/logger.d.ts +0 -8
  390. package/dist/ports/logger.js +0 -1
  391. package/dist/ports/media-gateway-client.d.ts +0 -54
  392. package/dist/ports/media-gateway-client.js +0 -1
  393. package/dist/ports/model-diagnostics.d.ts +0 -17
  394. package/dist/ports/model-diagnostics.js +0 -1
  395. package/dist/ports/project-trust-store.d.ts +0 -12
  396. package/dist/ports/project-trust-store.js +0 -1
  397. package/dist/ports/session-store.d.ts +0 -58
  398. package/dist/ports/session-store.js +0 -1
  399. package/dist/ports/subagent-lifecycle.d.ts +0 -31
  400. package/dist/ports/subagent-lifecycle.js +0 -1
  401. package/dist/ports/tool-activity.d.ts +0 -13
  402. package/dist/ports/tool-activity.js +0 -1
  403. package/dist/presentation/themes/theme.d.ts +0 -19
  404. package/dist/presentation/themes/theme.js +0 -8
  405. package/dist/presentation/tui/agent-initialization-renderer.d.ts +0 -4
  406. package/dist/presentation/tui/agent-initialization-renderer.js +0 -37
  407. package/dist/presentation/tui/context-display.d.ts +0 -21
  408. package/dist/presentation/tui/context-display.js +0 -33
  409. package/dist/presentation/tui/formatters.d.ts +0 -6
  410. package/dist/presentation/tui/formatters.js +0 -60
  411. package/dist/presentation/tui/ink/choice-window.d.ts +0 -5
  412. package/dist/presentation/tui/ink/choice-window.js +0 -5
  413. package/dist/presentation/tui/ink/components/activity-entry.d.ts +0 -6
  414. package/dist/presentation/tui/ink/components/activity-entry.js +0 -16
  415. package/dist/presentation/tui/ink/components/activity-status.d.ts +0 -10
  416. package/dist/presentation/tui/ink/components/activity-status.js +0 -21
  417. package/dist/presentation/tui/ink/components/choice-modal.d.ts +0 -11
  418. package/dist/presentation/tui/ink/components/choice-modal.js +0 -29
  419. package/dist/presentation/tui/ink/components/composer.d.ts +0 -40
  420. package/dist/presentation/tui/ink/components/composer.js +0 -271
  421. package/dist/presentation/tui/ink/components/file-diff.d.ts +0 -6
  422. package/dist/presentation/tui/ink/components/file-diff.js +0 -34
  423. package/dist/presentation/tui/ink/components/modal.d.ts +0 -8
  424. package/dist/presentation/tui/ink/components/modal.js +0 -110
  425. package/dist/presentation/tui/ink/components/shimmer-text.d.ts +0 -6
  426. package/dist/presentation/tui/ink/components/shimmer-text.js +0 -9
  427. package/dist/presentation/tui/ink/components/subagent-activity.d.ts +0 -11
  428. package/dist/presentation/tui/ink/components/subagent-activity.js +0 -61
  429. package/dist/presentation/tui/ink/components/transcript.d.ts +0 -39
  430. package/dist/presentation/tui/ink/components/transcript.js +0 -121
  431. package/dist/presentation/tui/ink/components/welcome-panel.d.ts +0 -6
  432. package/dist/presentation/tui/ink/components/welcome-panel.js +0 -20
  433. package/dist/presentation/tui/ink/lotagate-tui.d.ts +0 -6
  434. package/dist/presentation/tui/ink/lotagate-tui.js +0 -136
  435. package/dist/presentation/tui/ink/markdown-inline-renderer.d.ts +0 -4
  436. package/dist/presentation/tui/ink/markdown-inline-renderer.js +0 -20
  437. package/dist/presentation/tui/ink/markdown-inline.d.ts +0 -13
  438. package/dist/presentation/tui/ink/markdown-inline.js +0 -91
  439. package/dist/presentation/tui/ink/markdown-message.d.ts +0 -6
  440. package/dist/presentation/tui/ink/markdown-message.js +0 -66
  441. package/dist/presentation/tui/ink/markdown-table.d.ts +0 -16
  442. package/dist/presentation/tui/ink/markdown-table.js +0 -77
  443. package/dist/presentation/tui/ink/tui-bridge.d.ts +0 -195
  444. package/dist/presentation/tui/ink/tui-bridge.js +0 -289
  445. package/dist/presentation/tui/terminal-capabilities.d.ts +0 -15
  446. package/dist/presentation/tui/terminal-capabilities.js +0 -7
  447. package/dist/presentation/tui/terminal-mouse.d.ts +0 -5
  448. package/dist/presentation/tui/terminal-mouse.js +0 -19
  449. package/dist/presentation/tui/terminal-screen.d.ts +0 -10
  450. package/dist/presentation/tui/terminal-screen.js +0 -23
  451. package/dist/presentation/tui/tui-agent-event-runner.d.ts +0 -24
  452. package/dist/presentation/tui/tui-agent-event-runner.js +0 -69
  453. package/dist/presentation/tui/tui-application-contract.d.ts +0 -10
  454. package/dist/presentation/tui/tui-application-contract.js +0 -8
  455. package/dist/presentation/tui/tui-application.d.ts +0 -62
  456. package/dist/presentation/tui/tui-application.js +0 -675
  457. package/dist/presentation/tui/tui-attachment-input.d.ts +0 -2
  458. package/dist/presentation/tui/tui-attachment-input.js +0 -5
  459. package/dist/presentation/tui/tui-clipboard-paste-handlers.d.ts +0 -11
  460. package/dist/presentation/tui/tui-clipboard-paste-handlers.js +0 -25
  461. package/dist/presentation/tui/tui-command-context.d.ts +0 -3
  462. package/dist/presentation/tui/tui-command-context.js +0 -1
  463. package/dist/presentation/tui/tui-command-executor.d.ts +0 -38
  464. package/dist/presentation/tui/tui-command-executor.js +0 -214
  465. package/dist/presentation/tui/tui-command-host-factory.d.ts +0 -40
  466. package/dist/presentation/tui/tui-command-host-factory.js +0 -23
  467. package/dist/presentation/tui/tui-context-compaction.d.ts +0 -5
  468. package/dist/presentation/tui/tui-context-compaction.js +0 -22
  469. package/dist/presentation/tui/tui-context-service.d.ts +0 -34
  470. package/dist/presentation/tui/tui-context-service.js +0 -126
  471. package/dist/presentation/tui/tui-file-suggestions.d.ts +0 -3
  472. package/dist/presentation/tui/tui-file-suggestions.js +0 -8
  473. package/dist/presentation/tui/tui-goal-controller.d.ts +0 -14
  474. package/dist/presentation/tui/tui-goal-controller.js +0 -52
  475. package/dist/presentation/tui/tui-initial-model.d.ts +0 -3
  476. package/dist/presentation/tui/tui-initial-model.js +0 -28
  477. package/dist/presentation/tui/tui-lifecycle-actions.d.ts +0 -13
  478. package/dist/presentation/tui/tui-lifecycle-actions.js +0 -45
  479. package/dist/presentation/tui/tui-manual-compaction.d.ts +0 -18
  480. package/dist/presentation/tui/tui-manual-compaction.js +0 -31
  481. package/dist/presentation/tui/tui-media-model-selection.d.ts +0 -12
  482. package/dist/presentation/tui/tui-media-model-selection.js +0 -38
  483. package/dist/presentation/tui/tui-prompt-dispatcher.d.ts +0 -16
  484. package/dist/presentation/tui/tui-prompt-dispatcher.js +0 -38
  485. package/dist/presentation/tui/tui-skill-controller.d.ts +0 -11
  486. package/dist/presentation/tui/tui-skill-controller.js +0 -13
  487. package/dist/presentation/tui/tui-tool-approval.d.ts +0 -22
  488. package/dist/presentation/tui/tui-tool-approval.js +0 -73
  489. package/dist/version.d.ts +0 -1
  490. package/dist/version.js +0 -1
@@ -1,152 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { CliError } from '../../domain/errors/cli-error.js';
4
- import { CLI_ERROR_CODES } from '../../domain/errors/error-codes.js';
5
- import { atomicWriteFile } from './atomic-file-store.js';
6
- import { assertExternalWriteTarget, assertWorkspaceWriteTarget, resolveExternalOutputPath, resolveExternalPath, resolveWorkspacePath, } from './path-resolver.js';
7
- const MAX_OUTPUT_NAME_ATTEMPTS = 10_000;
8
- const DEFAULT_MEDIA_OUTPUT_DIRECTORIES = {
9
- image: path.join('tmp', 'images'),
10
- speech: path.join('tmp', 'speechs'),
11
- transcription: path.join('tmp', 'transcribes'),
12
- translation: path.join('tmp', 'translates'),
13
- video: path.join('tmp', 'videos'),
14
- };
15
- /** Persists generated media below the workspace by default or in an explicitly supplied local directory. */
16
- export class WorkspaceMediaArtifactStore {
17
- cwd;
18
- logger;
19
- constructor(cwd, logger) {
20
- this.cwd = cwd;
21
- this.logger = logger;
22
- }
23
- async writeMany(request, artifacts) {
24
- if (artifacts.length === 0)
25
- throw invalidOutput('The provider returned no media artifacts.');
26
- if (request.out !== undefined && artifacts.length !== 1)
27
- throw invalidOutput('--out can only be used when exactly one artifact is returned. Use --out-dir instead.');
28
- const targetDirectory = await this.resolveDirectory(request);
29
- const externalOutput = request.outDir !== undefined;
30
- const results = [];
31
- for (const [index, artifact] of artifacts.entries()) {
32
- const initialTarget = await this.resolveTarget(request, targetDirectory, index, artifacts.length);
33
- const defaultTarget = request.out === undefined;
34
- const target = defaultTarget ? await reserveAvailableTarget(initialTarget, this.context(), externalOutput) : initialTarget;
35
- let reserved = defaultTarget;
36
- try {
37
- await fs.mkdir(path.dirname(target), { recursive: true });
38
- await assertWriteTarget(target, this.context(), externalOutput);
39
- if (!reserved)
40
- reserved = await reserveTarget(target, request.force, this.context(), externalOutput);
41
- await atomicWriteFile(target, artifact);
42
- await assertWriteTarget(target, this.context(), externalOutput);
43
- }
44
- catch (error) {
45
- if (reserved)
46
- await releaseReservedTarget(target, this.context(), externalOutput);
47
- throw error;
48
- }
49
- results.push({ path: target, bytes: artifact.byteLength });
50
- }
51
- this.logger?.info('Media artifacts stored.', {
52
- kind: request.kind,
53
- artifactCount: results.length,
54
- artifactBytes: results.reduce((total, artifact) => total + artifact.bytes, 0),
55
- });
56
- return results;
57
- }
58
- async resolveDirectory(request) {
59
- const supplied = request.outDir ?? DEFAULT_MEDIA_OUTPUT_DIRECTORIES[request.kind];
60
- return request.outDir === undefined
61
- ? resolveWorkspacePath(supplied, this.context(), true)
62
- : resolveExternalPath(supplied, { cwd: this.cwd }, true);
63
- }
64
- async resolveTarget(request, directory, index, total) {
65
- if (request.out !== undefined) {
66
- validateOutputName(request.out);
67
- const suffix = total > 1 ? `-${index + 1}` : '';
68
- return this.resolveOutputPath(path.join(directory, `${request.out}${suffix}.${request.extension}`), request.outDir !== undefined);
69
- }
70
- const suffix = total > 1 ? `-${index + 1}` : '';
71
- const candidate = path.join(directory, `${toSafeStem(request.source)}${suffix}.${request.extension}`);
72
- return this.resolveOutputPath(candidate, request.outDir !== undefined);
73
- }
74
- resolveOutputPath(candidate, externalOutput) {
75
- return externalOutput
76
- ? resolveExternalOutputPath(candidate, { cwd: this.cwd })
77
- : resolveWorkspacePath(candidate, this.context(), true);
78
- }
79
- context() { return { cwd: this.cwd, workspaceRoot: this.cwd }; }
80
- }
81
- async function assertWriteTarget(target, context, externalOutput) {
82
- if (externalOutput)
83
- await assertExternalWriteTarget(target);
84
- else
85
- await assertWorkspaceWriteTarget(target, context);
86
- }
87
- async function reserveTarget(target, overwrite, context, externalOutput) {
88
- if (overwrite)
89
- return false;
90
- try {
91
- await fs.mkdir(path.dirname(target), { recursive: true });
92
- await assertWriteTarget(target, context, externalOutput);
93
- const handle = await fs.open(target, 'wx', 0o600);
94
- await handle.close();
95
- await assertWriteTarget(target, context, externalOutput);
96
- return true;
97
- }
98
- catch (error) {
99
- if (isAlreadyExists(error))
100
- throw invalidOutput(`Refusing to overwrite an existing file: ${target}. Use --force with --out to replace it.`);
101
- throw error;
102
- }
103
- }
104
- async function reserveAvailableTarget(initialTarget, context, externalOutput) {
105
- const parsed = path.parse(initialTarget);
106
- for (let attempt = 0; attempt < MAX_OUTPUT_NAME_ATTEMPTS; attempt += 1) {
107
- const target = attempt === 0 ? initialTarget : path.join(parsed.dir, `${parsed.name}-${attempt + 1}${parsed.ext}`);
108
- try {
109
- await fs.mkdir(parsed.dir, { recursive: true });
110
- await assertWriteTarget(target, context, externalOutput);
111
- const handle = await fs.open(target, 'wx', 0o600);
112
- await handle.close();
113
- await assertWriteTarget(target, context, externalOutput);
114
- return target;
115
- }
116
- catch (error) {
117
- if (!isAlreadyExists(error))
118
- throw error;
119
- }
120
- }
121
- throw invalidOutput(`Unable to allocate a unique output path near: ${initialTarget}.`);
122
- }
123
- async function releaseReservedTarget(target, context, externalOutput) {
124
- try {
125
- await assertWriteTarget(target, context, externalOutput);
126
- await fs.rm(target, { force: true });
127
- }
128
- catch {
129
- // Do not delete a path that no longer resolves inside the trusted workspace.
130
- }
131
- }
132
- function toSafeStem(source) {
133
- const stem = source
134
- .normalize('NFKD').replace(/[^a-zA-Z0-9]+/gu, '-').replace(/^-+|-+$/gu, '')
135
- .toLowerCase().slice(0, 72);
136
- return stem.length === 0 ? 'media' : stem;
137
- }
138
- function validateOutputName(value) {
139
- const hasControlCharacter = [...value].some(character => {
140
- const codePoint = character.codePointAt(0) ?? 0;
141
- return codePoint < 32 || codePoint === 127;
142
- });
143
- if (value.length === 0 || value === '.' || value === '..' || value.includes('/') || value.includes('\\') || hasControlCharacter) {
144
- throw invalidOutput('--out must be a filename without path separators or control characters.');
145
- }
146
- }
147
- function isAlreadyExists(error) {
148
- return typeof error === 'object' && error !== null && 'code' in error && error.code === 'EEXIST';
149
- }
150
- function invalidOutput(userMessage) {
151
- return new CliError(CLI_ERROR_CODES.INVALID_ARGUMENT, userMessage, { category: 'media', userMessage });
152
- }
@@ -1,20 +0,0 @@
1
- export interface DailyRotatingFileWriterOptions {
2
- retentionDays: number;
3
- now?: () => number;
4
- }
5
- export declare class DailyRotatingFileWriter {
6
- private readonly directory;
7
- private readonly options;
8
- private readonly now;
9
- private queue;
10
- private queueBytes;
11
- private dropped;
12
- private drainPromise;
13
- private closed;
14
- constructor(directory: string, options: DailyRotatingFileWriterOptions);
15
- write(line: string): void;
16
- flush(): Promise<void>;
17
- close(): Promise<void>;
18
- private drain;
19
- private prune;
20
- }
@@ -1,75 +0,0 @@
1
- import fs from 'node:fs';
2
- import fsp from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { RESOURCE_LIMITS } from '../../domain/runtime/resource-limits.js';
5
- export class DailyRotatingFileWriter {
6
- directory;
7
- options;
8
- now;
9
- queue = [];
10
- queueBytes = 0;
11
- dropped = 0;
12
- drainPromise = Promise.resolve();
13
- closed = false;
14
- constructor(directory, options) {
15
- this.directory = directory;
16
- this.options = options;
17
- this.now = options.now ?? Date.now;
18
- fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
19
- this.prune();
20
- }
21
- write(line) {
22
- if (this.closed)
23
- return;
24
- const lineBytes = Buffer.byteLength(line, 'utf8');
25
- if (this.queue.length >= RESOURCE_LIMITS.logQueueEntries || this.queueBytes + lineBytes > RESOURCE_LIMITS.logQueueBytes) {
26
- this.dropped += 1;
27
- return;
28
- }
29
- this.queue.push({ filePath: path.join(this.directory, `lotagate-${utcDate(this.now())}.jsonl`), line });
30
- this.queueBytes += lineBytes;
31
- this.drainPromise = this.drainPromise.then(() => this.drain()).catch(() => undefined);
32
- }
33
- async flush() {
34
- await this.drainPromise;
35
- if (this.queue.length > 0) {
36
- this.drainPromise = this.drainPromise.then(() => this.drain()).catch(() => undefined);
37
- await this.drainPromise;
38
- }
39
- }
40
- async close() {
41
- this.closed = true;
42
- await this.flush();
43
- }
44
- async drain() {
45
- if (this.queue.length === 0)
46
- return;
47
- const entries = this.queue.splice(0, this.queue.length);
48
- this.queueBytes = 0;
49
- if (this.dropped > 0) {
50
- entries.push({ filePath: path.join(this.directory, `lotagate-${utcDate(this.now())}.jsonl`), line: `${JSON.stringify({ timestamp: new Date(this.now()).toISOString(), level: 'warn', message: 'Log entries dropped because the file writer queue was full.', dropped: this.dropped })}\n` });
51
- this.dropped = 0;
52
- }
53
- const grouped = new Map();
54
- for (const entry of entries)
55
- grouped.set(entry.filePath, [...(grouped.get(entry.filePath) ?? []), entry.line]);
56
- for (const [filePath, lines] of grouped)
57
- await fsp.appendFile(filePath, lines.join(''), { encoding: 'utf8', mode: 0o600 });
58
- }
59
- prune() {
60
- const cutoff = this.now() - this.options.retentionDays * 24 * 60 * 60 * 1_000;
61
- for (const entry of fs.readdirSync(this.directory, { withFileTypes: true })) {
62
- if (!entry.isFile())
63
- continue;
64
- const match = /^lotagate-(\d{4}-\d{2}-\d{2})\.jsonl$/u.exec(entry.name);
65
- if (match === null || match[1] === undefined)
66
- continue;
67
- const timestamp = Date.parse(`${match[1]}T00:00:00.000Z`);
68
- if (Number.isFinite(timestamp) && timestamp < cutoff)
69
- fs.rmSync(path.join(this.directory, entry.name), { force: true });
70
- }
71
- }
72
- }
73
- function utcDate(timestamp) {
74
- return new Date(timestamp).toISOString().slice(0, 10);
75
- }
@@ -1,2 +0,0 @@
1
- export declare function redactLogDetails(details: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
2
- export declare function redactLogText(value: string): string;
@@ -1,26 +0,0 @@
1
- const SENSITIVE_KEY = /(api.?key|authorization|credential|password|private.?key|secret|token)/iu;
2
- export function redactLogDetails(details) {
3
- if (details === undefined)
4
- return undefined;
5
- return redactRecord(details);
6
- }
7
- function redactRecord(value) {
8
- return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, SENSITIVE_KEY.test(key) ? '[REDACTED]' : redactValue(entry)]));
9
- }
10
- function redactValue(value) {
11
- if (typeof value === 'string')
12
- return redactString(value);
13
- if (Array.isArray(value))
14
- return value.map((item) => item !== null && typeof item === 'object' ? redactRecord(item) : typeof item === 'string' ? redactString(item) : item);
15
- if (value !== null && typeof value === 'object')
16
- return redactRecord(value);
17
- return value;
18
- }
19
- export function redactLogText(value) { return redactString(value); }
20
- function redactString(value) {
21
- return value
22
- .replace(/Bearer\s+[^\s]+/giu, 'Bearer [REDACTED]')
23
- .replace(/sk-[A-Za-z0-9_-]{8,}/gu, '[REDACTED]')
24
- .replace(/((?:api[_-]?key|password|secret|token|authorization)\s*[:=]\s*)[^\s,]+/giu, '$1[REDACTED]')
25
- .replace(/([?&](?:key|token|secret|password|auth|api[_-]?key)=)[^&#\s]+/giu, '$1[REDACTED]');
26
- }
@@ -1,6 +0,0 @@
1
- import type { LogLevel } from '../../ports/logger.js';
2
- export interface LoggingPolicy {
3
- level: LogLevel;
4
- retentionDays: number;
5
- }
6
- export declare function resolveLoggingPolicy(env?: Readonly<Record<string, string | undefined>>): LoggingPolicy;
@@ -1,6 +0,0 @@
1
- import { readBoundedEnvironmentInteger } from '../config/environment-values.js';
2
- export function resolveLoggingPolicy(env = process.env) {
3
- const rawLevel = env['LOTAGATE_LOG_LEVEL']?.trim().toLowerCase();
4
- const level = rawLevel === 'error' || rawLevel === 'warn' || rawLevel === 'debug' || rawLevel === 'trace' ? rawLevel : 'info';
5
- return { level, retentionDays: readBoundedEnvironmentInteger(env['LOTAGATE_LOG_RETENTION_DAYS'], 14, 1, 365) };
6
- }
@@ -1,24 +0,0 @@
1
- import type { Logger, LogLevel } from '../../ports/logger.js';
2
- import type { Writable } from 'node:stream';
3
- import type { DailyRotatingFileWriter } from './daily-rotating-file-writer.js';
4
- export interface StructuredLoggerOptions {
5
- level?: LogLevel;
6
- consoleLevel?: LogLevel;
7
- json?: boolean;
8
- output?: Writable;
9
- file?: DailyRotatingFileWriter;
10
- }
11
- export declare class StructuredLogger implements Logger {
12
- private readonly minimumPriority;
13
- private readonly consoleMinimumPriority;
14
- private readonly output;
15
- private readonly json;
16
- private readonly file;
17
- constructor(options?: StructuredLoggerOptions);
18
- error(message: string, details?: Record<string, unknown>): void;
19
- warn(message: string, details?: Record<string, unknown>): void;
20
- info(message: string, details?: Record<string, unknown>): void;
21
- debug(message: string, details?: Record<string, unknown>): void;
22
- trace(message: string, details?: Record<string, unknown>): void;
23
- private write;
24
- }
@@ -1,40 +0,0 @@
1
- import { redactLogDetails, redactLogText } from './log-redactor.js';
2
- const LEVEL_PRIORITY = {
3
- error: 0,
4
- warn: 1,
5
- info: 2,
6
- debug: 3,
7
- trace: 4,
8
- };
9
- export class StructuredLogger {
10
- minimumPriority;
11
- consoleMinimumPriority;
12
- output;
13
- json;
14
- file;
15
- constructor(options = {}) {
16
- this.minimumPriority = LEVEL_PRIORITY[options.level ?? 'info'];
17
- this.consoleMinimumPriority = LEVEL_PRIORITY[options.consoleLevel ?? options.level ?? 'info'];
18
- this.output = options.output ?? process.stderr;
19
- this.json = options.json ?? false;
20
- this.file = options.file;
21
- }
22
- error(message, details) { this.write('error', message, details); }
23
- warn(message, details) { this.write('warn', message, details); }
24
- info(message, details) { this.write('info', message, details); }
25
- debug(message, details) { this.write('debug', message, details); }
26
- trace(message, details) { this.write('trace', message, details); }
27
- write(level, message, details) {
28
- if (LEVEL_PRIORITY[level] > this.minimumPriority)
29
- return;
30
- const safeDetails = redactLogDetails(details);
31
- const safeMessage = redactLogText(message);
32
- const entry = { timestamp: new Date().toISOString(), level, message: safeMessage, ...(safeDetails ?? {}) };
33
- if (LEVEL_PRIORITY[level] <= this.consoleMinimumPriority)
34
- this.output.write(this.json ? `${JSON.stringify(entry)}\n` : `[${level}] ${safeMessage}\n`);
35
- try {
36
- this.file?.write(`${JSON.stringify(entry)}\n`);
37
- }
38
- catch { /* File logging must not hide the original CLI result. */ }
39
- }
40
- }
@@ -1,23 +0,0 @@
1
- import https from 'node:https';
2
- export interface DownloadedMedia {
3
- readonly bytes: Uint8Array;
4
- readonly contentType: string | undefined;
5
- }
6
- export interface PublicMediaAddress {
7
- readonly address: string;
8
- readonly family: 4 | 6;
9
- }
10
- export interface PublicMediaDownloaderDependencies {
11
- resolveAddresses?: (hostname: string) => Promise<readonly PublicMediaAddress[]>;
12
- request?: typeof https.request;
13
- }
14
- interface DownloadOptions {
15
- readonly maxBytes: number;
16
- readonly timeoutMs: number;
17
- readonly signal?: AbortSignal | undefined;
18
- }
19
- /** Downloads a generated artifact only through a verified public HTTPS address. */
20
- export declare function downloadPublicMedia(rawUrl: string | undefined, options: DownloadOptions): Promise<DownloadedMedia>;
21
- /** Creates an isolated downloader for CLI infrastructure tests and alternate Node transports. */
22
- export declare function createPublicMediaDownloader(dependencies?: PublicMediaDownloaderDependencies): (rawUrl: string | undefined, options: DownloadOptions) => Promise<DownloadedMedia>;
23
- export {};
@@ -1,239 +0,0 @@
1
- import { lookup } from 'node:dns/promises';
2
- import https from 'node:https';
3
- import { isIP } from 'node:net';
4
- import { CliError } from '../../domain/errors/cli-error.js';
5
- import { CLI_ERROR_CODES } from '../../domain/errors/error-codes.js';
6
- /** Downloads a generated artifact only through a verified public HTTPS address. */
7
- export async function downloadPublicMedia(rawUrl, options) {
8
- return createPublicMediaDownloader()(rawUrl, options);
9
- }
10
- /** Creates an isolated downloader for CLI infrastructure tests and alternate Node transports. */
11
- export function createPublicMediaDownloader(dependencies = {}) {
12
- const resolveAddresses = dependencies.resolveAddresses ?? resolveAddressesFromDns;
13
- const request = dependencies.request ?? https.request;
14
- return async (rawUrl, options) => {
15
- const url = parsePublicHttpsUrl(rawUrl);
16
- return withDownloadSignal(options, async (signal) => {
17
- const addresses = await resolvePublicDestination(url.hostname, resolveAddresses, signal, options.signal);
18
- const response = await requestPublicResponse(url, addresses, request, signal, options.signal);
19
- if (response.statusCode === undefined || response.statusCode < 200 || response.statusCode >= 300) {
20
- response.destroy();
21
- throw mediaError(`Image download failed with HTTP ${response.statusCode ?? 'unknown'}.`);
22
- }
23
- const contentLength = response.headers['content-length'];
24
- const length = Array.isArray(contentLength) ? contentLength[0] : contentLength;
25
- if (length !== undefined && (!/^\d+$/u.test(length) || Number(length) > options.maxBytes)) {
26
- response.destroy();
27
- throw mediaError('Downloaded image exceeds the supported output limit.');
28
- }
29
- return {
30
- bytes: await readResponseBounded(response, options.maxBytes, signal, options.signal),
31
- contentType: contentType(response.headers['content-type']),
32
- };
33
- });
34
- };
35
- }
36
- function parsePublicHttpsUrl(rawUrl) {
37
- if (rawUrl === undefined)
38
- throw mediaError('The provider returned an image without Base64 data or a download URL.');
39
- let url;
40
- try {
41
- url = new URL(rawUrl);
42
- }
43
- catch {
44
- throw mediaError('The provider returned an invalid image download URL.');
45
- }
46
- if (url.protocol !== 'https:' || url.username || url.password || (url.port !== '' && url.port !== '443')) {
47
- throw mediaError('Image download URLs must use public HTTPS on port 443.');
48
- }
49
- return url;
50
- }
51
- async function resolvePublicDestination(hostname, resolveAddresses, signal, parentSignal) {
52
- if (hostname.toLowerCase() === 'localhost')
53
- throw mediaError('Image download URL must not target localhost.');
54
- const addresses = await awaitWithAbort(resolveAddresses(hostname), signal, parentSignal);
55
- if (addresses.length === 0 || addresses.some((entry) => !isPublicIpAddress(entry.address))) {
56
- throw mediaError('Image download URL must resolve only to public network addresses.');
57
- }
58
- return addresses;
59
- }
60
- async function resolveAddressesFromDns(hostname) {
61
- const addresses = await lookup(hostname, { all: true, verbatim: true });
62
- return addresses.map((entry) => ({ address: entry.address, family: entry.family === 6 ? 6 : 4 }));
63
- }
64
- async function requestPublicResponse(url, addresses, request, signal, parentSignal) {
65
- let lastError;
66
- for (const address of addresses) {
67
- try {
68
- return await requestPinnedResponse(url, address, request, signal, parentSignal);
69
- }
70
- catch (error) {
71
- if (signal.aborted)
72
- throw abortedDownloadError(signal, parentSignal);
73
- lastError = error;
74
- }
75
- }
76
- const detail = lastError instanceof Error && lastError.message.length > 0 ? `: ${lastError.message}` : '';
77
- throw mediaError(`Image download failed${detail}`);
78
- }
79
- function requestPinnedResponse(url, address, request, signal, parentSignal) {
80
- return new Promise((resolve, reject) => {
81
- let completed = false;
82
- let clientRequest;
83
- const finish = (callback) => {
84
- if (completed)
85
- return;
86
- completed = true;
87
- signal.removeEventListener('abort', abort);
88
- callback();
89
- };
90
- const abort = () => {
91
- const error = abortedDownloadError(signal, parentSignal);
92
- clientRequest?.destroy(error);
93
- finish(() => reject(error));
94
- };
95
- try {
96
- clientRequest = request({
97
- protocol: 'https:',
98
- hostname: url.hostname,
99
- port: 443,
100
- path: `${url.pathname}${url.search}`,
101
- method: 'GET',
102
- servername: url.hostname,
103
- lookup: (_hostname, options, callback) => {
104
- if (options.all === true)
105
- callback(null, [{ address: address.address, family: address.family }]);
106
- else
107
- callback(null, address.address, address.family);
108
- },
109
- }, (response) => finish(() => resolve(response)));
110
- clientRequest.once('error', (error) => finish(() => reject(error)));
111
- if (signal.aborted)
112
- abort();
113
- else
114
- signal.addEventListener('abort', abort, { once: true });
115
- clientRequest.end();
116
- }
117
- catch (error) {
118
- finish(() => reject(error));
119
- }
120
- });
121
- }
122
- async function readResponseBounded(response, maxBytes, signal, parentSignal) {
123
- const chunks = [];
124
- let size = 0;
125
- const abort = () => { response.destroy(); };
126
- if (signal.aborted)
127
- abort();
128
- else
129
- signal.addEventListener('abort', abort, { once: true });
130
- try {
131
- for await (const chunk of response) {
132
- if (signal.aborted)
133
- throw abortedDownloadError(signal, parentSignal);
134
- const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
135
- size += bytes.byteLength;
136
- if (size > maxBytes) {
137
- response.destroy();
138
- throw mediaError('Downloaded image exceeds the supported output limit.');
139
- }
140
- chunks.push(bytes);
141
- }
142
- }
143
- catch (error) {
144
- if (signal.aborted)
145
- throw abortedDownloadError(signal, parentSignal);
146
- if (error instanceof CliError)
147
- throw error;
148
- throw mediaError(error instanceof Error ? `Image download failed: ${error.message}` : 'Image download failed.');
149
- }
150
- finally {
151
- signal.removeEventListener('abort', abort);
152
- }
153
- if (signal.aborted)
154
- throw abortedDownloadError(signal, parentSignal);
155
- const result = new Uint8Array(size);
156
- let offset = 0;
157
- for (const chunk of chunks) {
158
- result.set(chunk, offset);
159
- offset += chunk.byteLength;
160
- }
161
- return result;
162
- }
163
- async function withDownloadSignal(options, operation) {
164
- const controller = new AbortController();
165
- const timeout = setTimeout(() => controller.abort(new Error('Image download timed out.')), options.timeoutMs);
166
- const forwardAbort = () => controller.abort(options.signal?.reason);
167
- if (options.signal?.aborted)
168
- forwardAbort();
169
- else
170
- options.signal?.addEventListener('abort', forwardAbort, { once: true });
171
- try {
172
- return await operation(controller.signal);
173
- }
174
- finally {
175
- clearTimeout(timeout);
176
- options.signal?.removeEventListener('abort', forwardAbort);
177
- }
178
- }
179
- async function awaitWithAbort(operation, signal, parentSignal) {
180
- if (signal.aborted)
181
- throw abortedDownloadError(signal, parentSignal);
182
- return new Promise((resolve, reject) => {
183
- const abort = () => {
184
- signal.removeEventListener('abort', abort);
185
- reject(abortedDownloadError(signal, parentSignal));
186
- };
187
- signal.addEventListener('abort', abort, { once: true });
188
- operation.then((value) => { signal.removeEventListener('abort', abort); resolve(value); }, (error) => { signal.removeEventListener('abort', abort); reject(error); });
189
- });
190
- }
191
- function contentType(value) {
192
- const raw = Array.isArray(value) ? value[0] : value;
193
- return raw?.split(';', 1)[0]?.trim() || undefined;
194
- }
195
- function isPublicIpAddress(address) {
196
- const version = isIP(address);
197
- if (version === 4)
198
- return isPublicIpv4(address);
199
- if (version === 6)
200
- return isPublicIpv6(address);
201
- return false;
202
- }
203
- function isPublicIpv4(address) {
204
- const parts = address.split('.').map(Number);
205
- const [first, second] = parts;
206
- if (first === undefined || second === undefined)
207
- return false;
208
- if (first === 0 || first === 10 || first === 127 || first >= 224)
209
- return false;
210
- if (first === 100 && second >= 64 && second <= 127)
211
- return false;
212
- if (first === 169 && second === 254)
213
- return false;
214
- if (first === 172 && second >= 16 && second <= 31)
215
- return false;
216
- if (first === 192 && second === 168)
217
- return false;
218
- if (first === 198 && (second === 18 || second === 19))
219
- return false;
220
- return true;
221
- }
222
- function isPublicIpv6(address) {
223
- const normalized = address.toLowerCase();
224
- if (normalized === '::' || normalized === '::1' || normalized.startsWith('fe80:') || normalized.startsWith('fc') || normalized.startsWith('fd'))
225
- return false;
226
- const mapped = normalized.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/u);
227
- return mapped === null || isPublicIpv4(mapped[1]);
228
- }
229
- function abortedDownloadError(signal, parentSignal) {
230
- if (parentSignal?.aborted)
231
- return interrupted(parentSignal.reason);
232
- return mediaError('Image download timed out.');
233
- }
234
- function interrupted(cause) {
235
- return new CliError(CLI_ERROR_CODES.INTERRUPTED, 'Media command interrupted.', { category: 'media', userMessage: 'Media command interrupted.', retryable: true, cause });
236
- }
237
- function mediaError(userMessage) {
238
- return new CliError(CLI_ERROR_CODES.INVALID_ARGUMENT, userMessage, { category: 'media', userMessage });
239
- }
@@ -1,14 +0,0 @@
1
- export type HostPlatformId = 'windows' | 'linux' | 'macos' | 'bsd' | 'unsupported';
2
- export type HostNodePlatform = typeof process.platform;
3
- export interface HostPlatformContext {
4
- readonly id: HostPlatformId;
5
- readonly nodePlatform: HostNodePlatform;
6
- readonly isWindows: boolean;
7
- readonly supportsProcessGroups: boolean;
8
- readonly env: Readonly<Record<string, string | undefined>>;
9
- }
10
- export interface HostPlatformInput {
11
- nodePlatform?: HostNodePlatform;
12
- env?: Readonly<Record<string, string | undefined>>;
13
- }
14
- export declare function detectHostPlatform(input?: HostPlatformInput): HostPlatformContext;
@@ -1,23 +0,0 @@
1
- export function detectHostPlatform(input = {}) {
2
- const nodePlatform = input.nodePlatform ?? process.platform;
3
- const id = identifyPlatform(nodePlatform);
4
- const isWindows = id === 'windows';
5
- return {
6
- id,
7
- nodePlatform,
8
- isWindows,
9
- supportsProcessGroups: !isWindows,
10
- env: input.env ?? process.env,
11
- };
12
- }
13
- function identifyPlatform(platform) {
14
- if (platform === 'win32' || platform === 'cygwin')
15
- return 'windows';
16
- if (platform === 'linux' || platform === 'android')
17
- return 'linux';
18
- if (platform === 'darwin')
19
- return 'macos';
20
- if (platform === 'freebsd' || platform === 'openbsd' || platform === 'netbsd')
21
- return 'bsd';
22
- return 'unsupported';
23
- }