@pupt/cli 0.0.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +54 -29
  3. package/dist/annotations/annotation-analyzer.d.ts +17 -0
  4. package/dist/annotations/annotation-analyzer.d.ts.map +1 -0
  5. package/dist/annotations/annotation-analyzer.js +145 -0
  6. package/dist/annotations/annotation-analyzer.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +435 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/add.d.ts +5 -0
  12. package/dist/commands/add.d.ts.map +1 -0
  13. package/dist/commands/add.js +164 -0
  14. package/dist/commands/add.js.map +1 -0
  15. package/dist/commands/annotate.d.ts +2 -0
  16. package/dist/commands/annotate.d.ts.map +1 -0
  17. package/dist/commands/annotate.js +99 -0
  18. package/dist/commands/annotate.js.map +1 -0
  19. package/dist/commands/base-command.d.ts +23 -0
  20. package/dist/commands/base-command.d.ts.map +1 -0
  21. package/dist/commands/base-command.js +41 -0
  22. package/dist/commands/base-command.js.map +1 -0
  23. package/dist/commands/cache.d.ts +9 -0
  24. package/dist/commands/cache.d.ts.map +1 -0
  25. package/dist/commands/cache.js +31 -0
  26. package/dist/commands/cache.js.map +1 -0
  27. package/dist/commands/config.d.ts +8 -0
  28. package/dist/commands/config.d.ts.map +1 -0
  29. package/dist/commands/config.js +93 -0
  30. package/dist/commands/config.js.map +1 -0
  31. package/dist/commands/edit.d.ts +2 -0
  32. package/dist/commands/edit.d.ts.map +1 -0
  33. package/dist/commands/edit.js +35 -0
  34. package/dist/commands/edit.js.map +1 -0
  35. package/dist/commands/help.d.ts +2 -0
  36. package/dist/commands/help.d.ts.map +1 -0
  37. package/dist/commands/help.js +26 -0
  38. package/dist/commands/help.js.map +1 -0
  39. package/dist/commands/history.d.ts +12 -0
  40. package/dist/commands/history.d.ts.map +1 -0
  41. package/dist/commands/history.js +317 -0
  42. package/dist/commands/history.js.map +1 -0
  43. package/dist/commands/init.d.ts +2 -0
  44. package/dist/commands/init.d.ts.map +1 -0
  45. package/dist/commands/init.js +137 -0
  46. package/dist/commands/init.js.map +1 -0
  47. package/dist/commands/install.d.ts +16 -0
  48. package/dist/commands/install.d.ts.map +1 -0
  49. package/dist/commands/install.js +263 -0
  50. package/dist/commands/install.js.map +1 -0
  51. package/dist/commands/review.d.ts +3 -0
  52. package/dist/commands/review.d.ts.map +1 -0
  53. package/dist/commands/review.js +160 -0
  54. package/dist/commands/review.js.map +1 -0
  55. package/dist/commands/run.d.ts +32 -0
  56. package/dist/commands/run.d.ts.map +1 -0
  57. package/dist/commands/run.js +367 -0
  58. package/dist/commands/run.js.map +1 -0
  59. package/dist/commands/uninstall.d.ts +2 -0
  60. package/dist/commands/uninstall.d.ts.map +1 -0
  61. package/dist/commands/uninstall.js +45 -0
  62. package/dist/commands/uninstall.js.map +1 -0
  63. package/dist/commands/update.d.ts +2 -0
  64. package/dist/commands/update.d.ts.map +1 -0
  65. package/dist/commands/update.js +113 -0
  66. package/dist/commands/update.js.map +1 -0
  67. package/dist/config/config-manager.d.ts +19 -0
  68. package/dist/config/config-manager.d.ts.map +1 -0
  69. package/dist/config/config-manager.js +221 -0
  70. package/dist/config/config-manager.js.map +1 -0
  71. package/dist/config/global-paths.d.ts +5 -0
  72. package/dist/config/global-paths.d.ts.map +1 -0
  73. package/dist/config/global-paths.js +16 -0
  74. package/dist/config/global-paths.js.map +1 -0
  75. package/dist/config/migration.d.ts +12 -0
  76. package/dist/config/migration.d.ts.map +1 -0
  77. package/dist/config/migration.js +270 -0
  78. package/dist/config/migration.js.map +1 -0
  79. package/dist/history/enhanced-history-manager.d.ts +27 -0
  80. package/dist/history/enhanced-history-manager.d.ts.map +1 -0
  81. package/dist/history/enhanced-history-manager.js +116 -0
  82. package/dist/history/enhanced-history-manager.js.map +1 -0
  83. package/dist/history/history-manager.d.ts +43 -0
  84. package/dist/history/history-manager.d.ts.map +1 -0
  85. package/dist/history/history-manager.js +229 -0
  86. package/dist/history/history-manager.js.map +1 -0
  87. package/dist/index.d.ts +6 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +6 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/prompts/input-types/file-search-prompt.d.ts +11 -0
  92. package/dist/prompts/input-types/file-search-prompt.d.ts.map +1 -0
  93. package/dist/prompts/input-types/file-search-prompt.js +53 -0
  94. package/dist/prompts/input-types/file-search-prompt.js.map +1 -0
  95. package/dist/prompts/input-types/review-file-prompt.d.ts +3 -0
  96. package/dist/prompts/input-types/review-file-prompt.d.ts.map +1 -0
  97. package/dist/prompts/input-types/review-file-prompt.js +9 -0
  98. package/dist/prompts/input-types/review-file-prompt.js.map +1 -0
  99. package/dist/schemas/config-schema.d.ts +1637 -0
  100. package/dist/schemas/config-schema.d.ts.map +1 -0
  101. package/dist/schemas/config-schema.js +136 -0
  102. package/dist/schemas/config-schema.js.map +1 -0
  103. package/dist/search/search-engine.d.ts +8 -0
  104. package/dist/search/search-engine.d.ts.map +1 -0
  105. package/dist/search/search-engine.js +53 -0
  106. package/dist/search/search-engine.js.map +1 -0
  107. package/dist/services/git-service.d.ts +28 -0
  108. package/dist/services/git-service.d.ts.map +1 -0
  109. package/dist/services/git-service.js +157 -0
  110. package/dist/services/git-service.js.map +1 -0
  111. package/dist/services/input-collector.d.ts +9 -0
  112. package/dist/services/input-collector.d.ts.map +1 -0
  113. package/dist/services/input-collector.js +162 -0
  114. package/dist/services/input-collector.js.map +1 -0
  115. package/dist/services/logging-service.d.ts +49 -0
  116. package/dist/services/logging-service.d.ts.map +1 -0
  117. package/dist/services/logging-service.js +203 -0
  118. package/dist/services/logging-service.js.map +1 -0
  119. package/dist/services/module-cache.d.ts +42 -0
  120. package/dist/services/module-cache.d.ts.map +1 -0
  121. package/dist/services/module-cache.js +205 -0
  122. package/dist/services/module-cache.js.map +1 -0
  123. package/dist/services/module-entry-builder.d.ts +20 -0
  124. package/dist/services/module-entry-builder.d.ts.map +1 -0
  125. package/dist/services/module-entry-builder.js +71 -0
  126. package/dist/services/module-entry-builder.js.map +1 -0
  127. package/dist/services/output-capture-service.d.ts +28 -0
  128. package/dist/services/output-capture-service.d.ts.map +1 -0
  129. package/dist/services/output-capture-service.js +348 -0
  130. package/dist/services/output-capture-service.js.map +1 -0
  131. package/dist/services/package-manager.d.ts +18 -0
  132. package/dist/services/package-manager.d.ts.map +1 -0
  133. package/dist/services/package-manager.js +141 -0
  134. package/dist/services/package-manager.js.map +1 -0
  135. package/dist/services/pattern-detector.d.ts +15 -0
  136. package/dist/services/pattern-detector.d.ts.map +1 -0
  137. package/dist/services/pattern-detector.js +228 -0
  138. package/dist/services/pattern-detector.js.map +1 -0
  139. package/dist/services/prompt-resolver.d.ts +32 -0
  140. package/dist/services/prompt-resolver.d.ts.map +1 -0
  141. package/dist/services/prompt-resolver.js +73 -0
  142. package/dist/services/prompt-resolver.js.map +1 -0
  143. package/dist/services/pupt-prompt-source.d.ts +16 -0
  144. package/dist/services/pupt-prompt-source.d.ts.map +1 -0
  145. package/dist/services/pupt-prompt-source.js +74 -0
  146. package/dist/services/pupt-prompt-source.js.map +1 -0
  147. package/dist/services/pupt-service.d.ts +33 -0
  148. package/dist/services/pupt-service.d.ts.map +1 -0
  149. package/dist/services/pupt-service.js +119 -0
  150. package/dist/services/pupt-service.js.map +1 -0
  151. package/dist/services/review-data-builder.d.ts +25 -0
  152. package/dist/services/review-data-builder.d.ts.map +1 -0
  153. package/dist/services/review-data-builder.js +333 -0
  154. package/dist/services/review-data-builder.js.map +1 -0
  155. package/dist/services/suggestion-generator.d.ts +11 -0
  156. package/dist/services/suggestion-generator.d.ts.map +1 -0
  157. package/dist/services/suggestion-generator.js +158 -0
  158. package/dist/services/suggestion-generator.js.map +1 -0
  159. package/dist/services/ui-service.d.ts +49 -0
  160. package/dist/services/ui-service.d.ts.map +1 -0
  161. package/dist/services/ui-service.js +196 -0
  162. package/dist/services/ui-service.js.map +1 -0
  163. package/dist/types/annotations.d.ts +50 -0
  164. package/dist/types/annotations.d.ts.map +1 -0
  165. package/dist/types/annotations.js +2 -0
  166. package/dist/types/annotations.js.map +1 -0
  167. package/dist/types/config.d.ts +110 -0
  168. package/dist/types/config.d.ts.map +1 -0
  169. package/dist/types/config.js +12 -0
  170. package/dist/types/config.js.map +1 -0
  171. package/dist/types/history.d.ts +36 -0
  172. package/dist/types/history.d.ts.map +1 -0
  173. package/dist/types/history.js +2 -0
  174. package/dist/types/history.js.map +1 -0
  175. package/dist/types/patterns.d.ts +25 -0
  176. package/dist/types/patterns.d.ts.map +1 -0
  177. package/dist/types/patterns.js +2 -0
  178. package/dist/types/patterns.js.map +1 -0
  179. package/dist/types/prompt.d.ts +29 -0
  180. package/dist/types/prompt.d.ts.map +1 -0
  181. package/dist/types/prompt.js +24 -0
  182. package/dist/types/prompt.js.map +1 -0
  183. package/dist/types/review.d.ts +81 -0
  184. package/dist/types/review.d.ts.map +1 -0
  185. package/dist/types/review.js +2 -0
  186. package/dist/types/review.js.map +1 -0
  187. package/dist/ui/console-ui.d.ts +30 -0
  188. package/dist/ui/console-ui.d.ts.map +1 -0
  189. package/dist/ui/console-ui.js +88 -0
  190. package/dist/ui/console-ui.js.map +1 -0
  191. package/dist/ui/interactive-search.d.ts +8 -0
  192. package/dist/ui/interactive-search.d.ts.map +1 -0
  193. package/dist/ui/interactive-search.js +29 -0
  194. package/dist/ui/interactive-search.js.map +1 -0
  195. package/dist/utils/annotation-migration.d.ts +12 -0
  196. package/dist/utils/annotation-migration.d.ts.map +1 -0
  197. package/dist/utils/annotation-migration.js +88 -0
  198. package/dist/utils/annotation-migration.js.map +1 -0
  199. package/dist/utils/date-formatter.d.ts +10 -0
  200. package/dist/utils/date-formatter.d.ts.map +1 -0
  201. package/dist/utils/date-formatter.js +46 -0
  202. package/dist/utils/date-formatter.js.map +1 -0
  203. package/dist/utils/editor.d.ts +14 -0
  204. package/dist/utils/editor.d.ts.map +1 -0
  205. package/dist/utils/editor.js +52 -0
  206. package/dist/utils/editor.js.map +1 -0
  207. package/dist/utils/errors.d.ts +58 -0
  208. package/dist/utils/errors.d.ts.map +1 -0
  209. package/dist/utils/errors.js +275 -0
  210. package/dist/utils/errors.js.map +1 -0
  211. package/dist/utils/git-info.d.ts +10 -0
  212. package/dist/utils/git-info.d.ts.map +1 -0
  213. package/dist/utils/git-info.js +44 -0
  214. package/dist/utils/git-info.js.map +1 -0
  215. package/dist/utils/gitignore.d.ts +10 -0
  216. package/dist/utils/gitignore.d.ts.map +1 -0
  217. package/dist/utils/gitignore.js +72 -0
  218. package/dist/utils/gitignore.js.map +1 -0
  219. package/dist/utils/logger.d.ts +39 -0
  220. package/dist/utils/logger.d.ts.map +1 -0
  221. package/dist/utils/logger.js +143 -0
  222. package/dist/utils/logger.js.map +1 -0
  223. package/dist/utils/platform.d.ts +9 -0
  224. package/dist/utils/platform.d.ts.map +1 -0
  225. package/dist/utils/platform.js +45 -0
  226. package/dist/utils/platform.js.map +1 -0
  227. package/dist/utils/project-root.d.ts +22 -0
  228. package/dist/utils/project-root.d.ts.map +1 -0
  229. package/dist/utils/project-root.js +226 -0
  230. package/dist/utils/project-root.js.map +1 -0
  231. package/dist/utils/prompt-dir-resolver.d.ts +5 -0
  232. package/dist/utils/prompt-dir-resolver.d.ts.map +1 -0
  233. package/dist/utils/prompt-dir-resolver.js +25 -0
  234. package/dist/utils/prompt-dir-resolver.js.map +1 -0
  235. package/dist/utils/security.d.ts +5 -0
  236. package/dist/utils/security.d.ts.map +1 -0
  237. package/dist/utils/security.js +57 -0
  238. package/dist/utils/security.js.map +1 -0
  239. package/dist/utils/tool-detection.d.ts +14 -0
  240. package/dist/utils/tool-detection.d.ts.map +1 -0
  241. package/dist/utils/tool-detection.js +43 -0
  242. package/dist/utils/tool-detection.js.map +1 -0
  243. package/package.json +79 -7
  244. package/prompts/prompts/ad-hoc-long.prompt +60 -0
  245. package/prompts/prompts/ad-hoc.prompt +29 -0
  246. package/prompts/prompts/code-review.prompt +99 -0
  247. package/prompts/prompts/debugging-error-message.prompt +81 -0
  248. package/prompts/prompts/fix-github-actions.prompt +62 -0
  249. package/prompts/prompts/fix-test-errors.prompt +73 -0
  250. package/prompts/prompts/git-commit-comment.prompt +61 -0
  251. package/prompts/prompts/implementation-phase.prompt +53 -0
  252. package/prompts/prompts/implementation-plan.prompt +101 -0
  253. package/prompts/prompts/new-feature.prompt +89 -0
  254. package/prompts/prompts/new-project.prompt +9 -0
  255. package/prompts/prompts/one-shot-change.prompt +79 -0
  256. package/prompts/prompts/pupt-prompt-improvement.prompt +270 -0
  257. package/prompts/prompts/simple-test.prompt +8 -0
  258. package/prompts/prompts/update-design.prompt +71 -0
  259. package/prompts/prompts/update-documentation.prompt +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging-service.d.ts","sourceRoot":"","sources":["../../src/services/logging-service.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,oBAAoB;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA6CnD;AAUD,qBAAa,cAAc;IACb,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACxB,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IASzC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACxB,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IASzC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACvB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IASxC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACvB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IASxC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACxB,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IASzC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACxB,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IASzC,KAAK,CAAC,QAAQ,EAAE,UAAU,GAAG,cAAc;IAIrC,aAAa,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,CAAC,CAAC;CA4Cd;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAc9F;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAEnF;AAYD,UAAU,kBAAkB;IAC1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,KAAK,kBAAkB,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAE3D,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,kBAAkB,EAC7D,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAClC,kBAAkB,CAAC,CAAC,CAAC,CAsBvB"}
@@ -0,0 +1,203 @@
1
+ import pino from 'pino';
2
+ import { isSensitiveKey } from '../utils/security.js';
3
+ export var LogLevel;
4
+ (function (LogLevel) {
5
+ LogLevel["TRACE"] = "trace";
6
+ LogLevel["DEBUG"] = "debug";
7
+ LogLevel["INFO"] = "info";
8
+ LogLevel["WARN"] = "warn";
9
+ LogLevel["ERROR"] = "error";
10
+ LogLevel["FATAL"] = "fatal";
11
+ })(LogLevel || (LogLevel = {}));
12
+ export function createLogger(config) {
13
+ const isProduction = process.env.NODE_ENV === 'production';
14
+ const isDevelopment = !isProduction;
15
+ // Determine log level priority: config > env > default
16
+ const configLevel = config.logLevel;
17
+ const envLevel = process.env.LOG_LEVEL;
18
+ const defaultLevel = isDevelopment ? 'debug' : 'info';
19
+ const level = configLevel || envLevel || defaultLevel;
20
+ return pino({
21
+ level: validateLogLevel(level),
22
+ transport: isDevelopment ? {
23
+ target: 'pino-pretty',
24
+ options: {
25
+ colorize: true,
26
+ ignore: 'pid,hostname',
27
+ translateTime: 'SYS:standard',
28
+ messageFormat: '{levelLabel} {msg}'
29
+ }
30
+ } : undefined,
31
+ redact: {
32
+ paths: [
33
+ 'apiKeys.*',
34
+ '*.password',
35
+ '*.secret',
36
+ '*.token',
37
+ '*.credential',
38
+ '*.privateKey',
39
+ '*.private_key',
40
+ '*.auth',
41
+ '*.bearer'
42
+ ],
43
+ censor: '***'
44
+ },
45
+ serializers: {
46
+ error: pino.stdSerializers.err,
47
+ req: pino.stdSerializers.req,
48
+ res: pino.stdSerializers.res
49
+ },
50
+ base: {
51
+ app: 'pupt',
52
+ version: config.version || 'unknown'
53
+ }
54
+ });
55
+ }
56
+ function validateLogLevel(level) {
57
+ const validLevels = Object.values(LogLevel);
58
+ if (validLevels.includes(level)) {
59
+ return level;
60
+ }
61
+ return LogLevel.INFO;
62
+ }
63
+ export class LoggingService {
64
+ logger;
65
+ constructor(logger) {
66
+ this.logger = logger;
67
+ }
68
+ trace(objOrMsg, msg) {
69
+ if (typeof objOrMsg === 'string') {
70
+ this.logger.trace(objOrMsg);
71
+ }
72
+ else {
73
+ this.logger.trace(objOrMsg, msg);
74
+ }
75
+ }
76
+ debug(objOrMsg, msg) {
77
+ if (typeof objOrMsg === 'string') {
78
+ this.logger.debug(objOrMsg);
79
+ }
80
+ else {
81
+ this.logger.debug(objOrMsg, msg);
82
+ }
83
+ }
84
+ info(objOrMsg, msg) {
85
+ if (typeof objOrMsg === 'string') {
86
+ this.logger.info(objOrMsg);
87
+ }
88
+ else {
89
+ this.logger.info(objOrMsg, msg);
90
+ }
91
+ }
92
+ warn(objOrMsg, msg) {
93
+ if (typeof objOrMsg === 'string') {
94
+ this.logger.warn(objOrMsg);
95
+ }
96
+ else {
97
+ this.logger.warn(objOrMsg, msg);
98
+ }
99
+ }
100
+ error(objOrMsg, msg) {
101
+ if (typeof objOrMsg === 'string') {
102
+ this.logger.error(objOrMsg);
103
+ }
104
+ else {
105
+ this.logger.error(objOrMsg, msg);
106
+ }
107
+ }
108
+ fatal(objOrMsg, msg) {
109
+ if (typeof objOrMsg === 'string') {
110
+ this.logger.fatal(objOrMsg);
111
+ }
112
+ else {
113
+ this.logger.fatal(objOrMsg, msg);
114
+ }
115
+ }
116
+ child(bindings) {
117
+ return new LoggingService(this.logger.child(bindings));
118
+ }
119
+ async timeOperation(operation, fn, options = {}) {
120
+ const start = Date.now();
121
+ const { slowThreshold = 1000, context = {} } = options;
122
+ try {
123
+ const result = await fn();
124
+ const duration = Date.now() - start;
125
+ const logContext = {
126
+ operation,
127
+ duration,
128
+ ...context
129
+ };
130
+ if (duration > slowThreshold) {
131
+ this.warn({ ...logContext, slowThreshold }, 'Slow operation detected');
132
+ }
133
+ else {
134
+ this.info(logContext, 'Operation completed');
135
+ }
136
+ return result;
137
+ }
138
+ catch (error) {
139
+ const duration = Date.now() - start;
140
+ this.error({
141
+ operation,
142
+ duration,
143
+ error: error instanceof Error ? {
144
+ message: error.message,
145
+ stack: error.stack,
146
+ name: error.name
147
+ } : error,
148
+ ...context
149
+ }, 'Operation failed');
150
+ throw error;
151
+ }
152
+ }
153
+ }
154
+ export function formatLogContext(command, options) {
155
+ const sanitizedOptions = Object.entries(options).reduce((acc, [key, value]) => {
156
+ if (isSensitiveKey(key)) {
157
+ acc[key] = '***';
158
+ }
159
+ else {
160
+ acc[key] = value;
161
+ }
162
+ return acc;
163
+ }, {});
164
+ return {
165
+ command,
166
+ options: sanitizedOptions
167
+ };
168
+ }
169
+ export function createChildLogger(parentLogger, context) {
170
+ return parentLogger.child(context);
171
+ }
172
+ // Create a singleton logger instance
173
+ let defaultLogger = null;
174
+ function getDefaultLogger(config) {
175
+ if (!defaultLogger) {
176
+ defaultLogger = createLogger(config || {});
177
+ }
178
+ return defaultLogger;
179
+ }
180
+ export function enhanceWithLogging(CommandClass) {
181
+ // Type assertion needed due to TypeScript limitation with generic class extension
182
+ return class extends CommandClass {
183
+ async execute() {
184
+ const start = Date.now();
185
+ const logger = this.context?.logger || getDefaultLogger();
186
+ const commandName = this.name || 'unknown';
187
+ const loggingService = new LoggingService(logger);
188
+ try {
189
+ loggingService.info({ command: commandName }, 'Command started');
190
+ const result = await super.execute();
191
+ const duration = Date.now() - start;
192
+ loggingService.info({ command: commandName, duration }, 'Command completed');
193
+ return result;
194
+ }
195
+ catch (error) {
196
+ const duration = Date.now() - start;
197
+ loggingService.error({ command: commandName, error, duration }, 'Command failed');
198
+ throw error;
199
+ }
200
+ }
201
+ };
202
+ }
203
+ //# sourceMappingURL=logging-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging-service.js","sourceRoot":"","sources":["../../src/services/logging-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export interface ModuleCacheResolveOptions {
2
+ noCache?: boolean;
3
+ }
4
+ /**
5
+ * Caches fetched URL and GitHub module content to disk so prompts
6
+ * work offline after the first fetch.
7
+ */
8
+ export declare class ModuleCache {
9
+ private cacheDir;
10
+ private modulesDir;
11
+ private manifestPath;
12
+ constructor(cacheDir: string);
13
+ /**
14
+ * Resolve a URL or GitHub shorthand to its content, using cache when possible.
15
+ */
16
+ resolve(url: string, options?: ModuleCacheResolveOptions): Promise<string>;
17
+ /**
18
+ * Clear cached modules. If url is provided, clear only that entry.
19
+ */
20
+ clear(url?: string): Promise<void>;
21
+ /**
22
+ * Get cache statistics.
23
+ */
24
+ getStats(): Promise<{
25
+ entryCount: number;
26
+ totalSizeMB: number;
27
+ }>;
28
+ private fetchWithConditional;
29
+ private computeHash;
30
+ private computeTtl;
31
+ private isVersionedUrl;
32
+ /**
33
+ * Resolve GitHub shorthand notation to a raw.githubusercontent.com URL.
34
+ * Supports:
35
+ * github:user/repo/path/to/file.js → main branch
36
+ * github:user/repo@branch/path/to/file.js → specific branch/tag
37
+ */
38
+ private resolveGitHubShorthand;
39
+ private loadManifest;
40
+ private saveManifest;
41
+ }
42
+ //# sourceMappingURL=module-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-cache.d.ts","sourceRoot":"","sources":["../../src/services/module-cache.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAKD;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;gBAEjB,QAAQ,EAAE,MAAM;IAM5B;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChF;;OAEG;IACG,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;YAqBxD,oBAAoB;IAwDlC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,cAAc;IAOtB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;YA2ChB,YAAY;YAQZ,YAAY;CAI3B"}
@@ -0,0 +1,205 @@
1
+ import crypto from 'node:crypto';
2
+ import path from 'node:path';
3
+ import fs from 'fs-extra';
4
+ const SEVEN_DAYS_SECONDS = 7 * 24 * 60 * 60;
5
+ const ONE_HOUR_SECONDS = 60 * 60;
6
+ /**
7
+ * Caches fetched URL and GitHub module content to disk so prompts
8
+ * work offline after the first fetch.
9
+ */
10
+ export class ModuleCache {
11
+ cacheDir;
12
+ modulesDir;
13
+ manifestPath;
14
+ constructor(cacheDir) {
15
+ this.cacheDir = cacheDir;
16
+ this.modulesDir = path.join(cacheDir, 'modules');
17
+ this.manifestPath = path.join(cacheDir, 'manifest.json');
18
+ }
19
+ /**
20
+ * Resolve a URL or GitHub shorthand to its content, using cache when possible.
21
+ */
22
+ async resolve(url, options) {
23
+ const resolvedUrl = this.resolveGitHubShorthand(url);
24
+ const hash = this.computeHash(resolvedUrl);
25
+ const cachedFilePath = path.join(this.modulesDir, hash);
26
+ const manifest = await this.loadManifest();
27
+ const entry = manifest.entries[url];
28
+ // Check if we have a valid cached entry and noCache is not set
29
+ if (entry && !options?.noCache) {
30
+ const fetchedAt = new Date(entry.fetchedAt).getTime();
31
+ const expiresAt = fetchedAt + entry.ttl * 1000;
32
+ const now = Date.now();
33
+ if (now < expiresAt) {
34
+ // Cache is still valid
35
+ const content = await fs.readFile(cachedFilePath, 'utf-8');
36
+ return content;
37
+ }
38
+ }
39
+ // Need to fetch (or re-fetch)
40
+ try {
41
+ const content = await this.fetchWithConditional(resolvedUrl, url, entry, cachedFilePath);
42
+ return content;
43
+ }
44
+ catch (error) {
45
+ // If fetch fails but we have cached content, return it
46
+ if (entry && await fs.pathExists(cachedFilePath)) {
47
+ return await fs.readFile(cachedFilePath, 'utf-8');
48
+ }
49
+ throw error;
50
+ }
51
+ }
52
+ /**
53
+ * Clear cached modules. If url is provided, clear only that entry.
54
+ */
55
+ async clear(url) {
56
+ const manifest = await this.loadManifest();
57
+ if (url) {
58
+ const entry = manifest.entries[url];
59
+ if (entry) {
60
+ const cachedFilePath = path.join(this.modulesDir, entry.hash);
61
+ await fs.remove(cachedFilePath);
62
+ Reflect.deleteProperty(manifest.entries, url);
63
+ }
64
+ }
65
+ else {
66
+ // Clear all
67
+ for (const entry of Object.values(manifest.entries)) {
68
+ const cachedFilePath = path.join(this.modulesDir, entry.hash);
69
+ await fs.remove(cachedFilePath);
70
+ }
71
+ manifest.entries = {};
72
+ }
73
+ await this.saveManifest(manifest);
74
+ }
75
+ /**
76
+ * Get cache statistics.
77
+ */
78
+ async getStats() {
79
+ const manifest = await this.loadManifest();
80
+ const entryCount = Object.keys(manifest.entries).length;
81
+ let totalSize = 0;
82
+ for (const entry of Object.values(manifest.entries)) {
83
+ const filePath = path.join(this.modulesDir, entry.hash);
84
+ try {
85
+ const stat = await fs.stat(filePath);
86
+ totalSize += stat.size;
87
+ }
88
+ catch {
89
+ // File might not exist
90
+ }
91
+ }
92
+ return {
93
+ entryCount,
94
+ totalSizeMB: totalSize / (1024 * 1024),
95
+ };
96
+ }
97
+ async fetchWithConditional(resolvedUrl, originalUrl, existingEntry, cachedFilePath) {
98
+ const headers = {};
99
+ // Add conditional headers if we have cached data
100
+ if (existingEntry) {
101
+ if (existingEntry.etag) {
102
+ headers['If-None-Match'] = existingEntry.etag;
103
+ }
104
+ if (existingEntry.lastModified) {
105
+ headers['If-Modified-Since'] = existingEntry.lastModified;
106
+ }
107
+ }
108
+ const response = await fetch(resolvedUrl, { headers });
109
+ if (response.status === 304 && existingEntry) {
110
+ // Not modified - update fetchedAt and return cached content
111
+ const manifest = await this.loadManifest();
112
+ manifest.entries[originalUrl] = {
113
+ ...existingEntry,
114
+ fetchedAt: new Date().toISOString(),
115
+ };
116
+ await this.saveManifest(manifest);
117
+ return await fs.readFile(cachedFilePath, 'utf-8');
118
+ }
119
+ if (!response.ok) {
120
+ throw new Error(`Failed to fetch ${resolvedUrl}: ${response.status} ${response.statusText}`);
121
+ }
122
+ const content = await response.text();
123
+ const hash = this.computeHash(resolvedUrl);
124
+ // Save content to disk
125
+ await fs.ensureDir(this.modulesDir);
126
+ await fs.writeFile(cachedFilePath, content, 'utf-8');
127
+ // Update manifest
128
+ const manifest = await this.loadManifest();
129
+ manifest.entries[originalUrl] = {
130
+ hash,
131
+ fetchedAt: new Date().toISOString(),
132
+ etag: response.headers.get('ETag') || undefined,
133
+ lastModified: response.headers.get('Last-Modified') || undefined,
134
+ ttl: this.computeTtl(originalUrl),
135
+ };
136
+ await this.saveManifest(manifest);
137
+ return content;
138
+ }
139
+ computeHash(url) {
140
+ return crypto.createHash('sha256').update(url).digest('hex');
141
+ }
142
+ computeTtl(url) {
143
+ return this.isVersionedUrl(url) ? SEVEN_DAYS_SECONDS : ONE_HOUR_SECONDS;
144
+ }
145
+ isVersionedUrl(url) {
146
+ // Check for semver patterns in URL path or query params
147
+ // e.g., /v1.2.3/, @1.2.3, ?v=1.2.3
148
+ const semverPattern = /(?:\/v?\d+\.\d+\.\d+(?:[-+][\w.]+)?[/]?)|(?:[?&]v(?:ersion)?=\d+\.\d+\.\d+)/;
149
+ return semverPattern.test(url);
150
+ }
151
+ /**
152
+ * Resolve GitHub shorthand notation to a raw.githubusercontent.com URL.
153
+ * Supports:
154
+ * github:user/repo/path/to/file.js → main branch
155
+ * github:user/repo@branch/path/to/file.js → specific branch/tag
156
+ */
157
+ resolveGitHubShorthand(specifier) {
158
+ if (!specifier.startsWith('github:')) {
159
+ return specifier;
160
+ }
161
+ const rest = specifier.slice('github:'.length);
162
+ // Parse user/repo[@branch]/path
163
+ const slashIndex = rest.indexOf('/');
164
+ if (slashIndex === -1) {
165
+ return specifier; // Invalid format, return as-is
166
+ }
167
+ const secondSlashIndex = rest.indexOf('/', slashIndex + 1);
168
+ if (secondSlashIndex === -1) {
169
+ return specifier;
170
+ }
171
+ const userRepo = rest.substring(0, secondSlashIndex);
172
+ const filePath = rest.substring(secondSlashIndex + 1);
173
+ // Check for @branch syntax
174
+ let user;
175
+ let repo;
176
+ let branch = 'main';
177
+ if (userRepo.includes('@')) {
178
+ const atIndex = userRepo.indexOf('@');
179
+ const beforeAt = userRepo.substring(0, atIndex);
180
+ branch = userRepo.substring(atIndex + 1);
181
+ const parts = beforeAt.split('/');
182
+ user = parts[0];
183
+ repo = parts[1];
184
+ }
185
+ else {
186
+ const parts = userRepo.split('/');
187
+ user = parts[0];
188
+ repo = parts[1];
189
+ }
190
+ return `https://raw.githubusercontent.com/${user}/${repo}/${branch}/${filePath}`;
191
+ }
192
+ async loadManifest() {
193
+ try {
194
+ return await fs.readJson(this.manifestPath);
195
+ }
196
+ catch {
197
+ return { entries: {} };
198
+ }
199
+ }
200
+ async saveManifest(manifest) {
201
+ await fs.ensureDir(this.cacheDir);
202
+ await fs.writeJson(this.manifestPath, manifest, { spaces: 2 });
203
+ }
204
+ }
205
+ //# sourceMappingURL=module-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-cache.js","sourceRoot":"","sources":["../../src/services/module-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ModuleEntry } from '@pupt/lib';
2
+ import type { Config } from '../types/config.js';
3
+ export interface BuildModuleEntriesOptions {
4
+ config: Config;
5
+ /** CLI --prompt-dir overrides (highest priority) */
6
+ cliPromptDirs?: string[];
7
+ /** Starting directory for auto-discovering .prompts/ */
8
+ startDir?: string;
9
+ }
10
+ /**
11
+ * Build a ModuleEntry[] from pupt's existing config fields.
12
+ *
13
+ * Priority order:
14
+ * 1. CLI --prompt-dir overrides
15
+ * 2. Auto-discovered {projectRoot}/.prompts/
16
+ * 3. Config promptDirs (local directories)
17
+ * 4. Config libraries → ResolvedModuleEntry
18
+ */
19
+ export declare function buildModuleEntries(options: BuildModuleEntriesOptions): Promise<ModuleEntry[]>;
20
+ //# sourceMappingURL=module-entry-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-entry-builder.d.ts","sourceRoot":"","sources":["../../src/services/module-entry-builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,oBAAoB,CAAC;AAI/D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAoCnG"}
@@ -0,0 +1,71 @@
1
+ import path from 'node:path';
2
+ import { getDataDir } from '../config/global-paths.js';
3
+ import { findLocalPromptsDir } from '../utils/prompt-dir-resolver.js';
4
+ import { scanLocalPromptDir } from './pupt-prompt-source.js';
5
+ /**
6
+ * Build a ModuleEntry[] from pupt's existing config fields.
7
+ *
8
+ * Priority order:
9
+ * 1. CLI --prompt-dir overrides
10
+ * 2. Auto-discovered {projectRoot}/.prompts/
11
+ * 3. Config promptDirs (local directories)
12
+ * 4. Config libraries → ResolvedModuleEntry
13
+ */
14
+ export async function buildModuleEntries(options) {
15
+ const { config, cliPromptDirs, startDir } = options;
16
+ const seen = new Set();
17
+ const entries = [];
18
+ async function addLocalDir(dir) {
19
+ const resolved = path.resolve(dir);
20
+ if (!seen.has(resolved)) {
21
+ seen.add(resolved);
22
+ const sources = await scanLocalPromptDir(resolved);
23
+ entries.push(...sources);
24
+ }
25
+ }
26
+ // 1. CLI --prompt-dir overrides (highest priority)
27
+ if (cliPromptDirs) {
28
+ for (const dir of cliPromptDirs) {
29
+ await addLocalDir(dir);
30
+ }
31
+ }
32
+ // 2. Auto-discovered {projectRoot}/.prompts/
33
+ const localDir = await findLocalPromptsDir(startDir);
34
+ if (localDir) {
35
+ await addLocalDir(localDir);
36
+ }
37
+ // 3. Config promptDirs (local directories)
38
+ for (const dir of config.promptDirs) {
39
+ await addLocalDir(dir);
40
+ }
41
+ // 4. Libraries → scan each library's promptDirs for .prompt files
42
+ if (config.libraries) {
43
+ const dataDir = getDataDir();
44
+ for (const lib of config.libraries) {
45
+ const libDirs = getLibraryPromptDirs(lib, dataDir);
46
+ for (const dir of libDirs) {
47
+ await addLocalDir(dir);
48
+ }
49
+ }
50
+ }
51
+ return entries;
52
+ }
53
+ /**
54
+ * Get the absolute prompt directories for a library entry.
55
+ */
56
+ function getLibraryPromptDirs(lib, dataDir) {
57
+ let basePath;
58
+ if (lib.type === 'git') {
59
+ basePath = path.join(dataDir, 'libraries', lib.name);
60
+ }
61
+ else {
62
+ // npm: resolved from the local packages directory
63
+ basePath = path.join(dataDir, 'packages', 'node_modules', lib.name);
64
+ }
65
+ if (lib.promptDirs && lib.promptDirs.length > 0) {
66
+ return lib.promptDirs.map(dir => path.join(basePath, dir));
67
+ }
68
+ // Default: scan the library root
69
+ return [basePath];
70
+ }
71
+ //# sourceMappingURL=module-entry-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-entry-builder.js","sourceRoot":"","sources":["../../src/services/module-entry-builder.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAU7D;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAkC;IACzE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,UAAU,WAAW,CAAC,GAAW;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAAA,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QAAA,CAAC;IAC5D,CAAC;IAED,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QAAA,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAAA,CAAC;IAE5C,2CAA2C;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAAA,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IAAA,CAAC;IAE9D,kEAAkE;IAClE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACnD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAAA,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;YAAA,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,GAAiB,EAAE,OAAe;IAC9D,IAAI,QAAgB,CAAC;IACrB,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACvB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare function extractUserInputLines(jsonFile: string): Promise<string[]>;
2
+ export declare function calculateActiveExecutionTime(jsonFile: string, inputWaitThreshold?: bigint): Promise<bigint>;
3
+ interface CaptureResult {
4
+ exitCode: number | null;
5
+ outputFile: string;
6
+ outputSize: number;
7
+ truncated?: boolean;
8
+ error?: string;
9
+ }
10
+ interface CaptureHandle {
11
+ promise: Promise<CaptureResult>;
12
+ kill: () => void;
13
+ }
14
+ interface OutputCaptureOptions {
15
+ outputDirectory?: string;
16
+ maxOutputSize?: number;
17
+ }
18
+ export declare class OutputCaptureService {
19
+ private readonly options;
20
+ private defaultMaxSize;
21
+ constructor(options?: OutputCaptureOptions);
22
+ captureCommandWithHandle(command: string, args: string[], prompt: string, outputPath: string): CaptureHandle;
23
+ captureCommand(command: string, args: string[], prompt: string, outputPath: string): Promise<CaptureResult>;
24
+ private _captureCommandInternal;
25
+ cleanupOldOutputs(retentionDays?: number): Promise<void>;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=output-capture-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-capture-service.d.ts","sourceRoot":"","sources":["../../src/services/output-capture-service.ts"],"names":[],"mappings":"AA0BA,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOzE;AAGD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,SAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BjH;AAQD,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,UAAU,oBAAoB;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAOD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,cAAc,CAAoB;gBAE9B,OAAO,GAAE,oBAAyB;IAO9C,wBAAwB,CACtB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,aAAa;IAqBV,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;YAIX,uBAAuB;IA4Q/B,iBAAiB,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAwBnE"}