codehere 0.3.0 → 0.4.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.

Potentially problematic release.


This version of codehere might be problematic. Click here for more details.

Files changed (297) hide show
  1. package/README.md +223 -42
  2. package/dist/application/agents/documentation-agent.d.ts +24 -0
  3. package/dist/application/agents/documentation-agent.d.ts.map +1 -0
  4. package/dist/application/agents/documentation-agent.js +399 -0
  5. package/dist/application/agents/documentation-agent.js.map +1 -0
  6. package/dist/application/agents/execution-agent.d.ts +11 -0
  7. package/dist/application/agents/execution-agent.d.ts.map +1 -1
  8. package/dist/application/agents/execution-agent.js +289 -80
  9. package/dist/application/agents/execution-agent.js.map +1 -1
  10. package/dist/application/agents/multi-agent-orchestrator.d.ts +3 -0
  11. package/dist/application/agents/multi-agent-orchestrator.d.ts.map +1 -1
  12. package/dist/application/agents/multi-agent-orchestrator.js +86 -0
  13. package/dist/application/agents/multi-agent-orchestrator.js.map +1 -1
  14. package/dist/application/agents/planning-agent.d.ts +3 -0
  15. package/dist/application/agents/planning-agent.d.ts.map +1 -1
  16. package/dist/application/agents/planning-agent.js +132 -64
  17. package/dist/application/agents/planning-agent.js.map +1 -1
  18. package/dist/application/agents/product-requirements-agent.d.ts +21 -0
  19. package/dist/application/agents/product-requirements-agent.d.ts.map +1 -0
  20. package/dist/application/agents/product-requirements-agent.js +247 -0
  21. package/dist/application/agents/product-requirements-agent.js.map +1 -0
  22. package/dist/application/agents/validation-agent.d.ts +5 -1
  23. package/dist/application/agents/validation-agent.d.ts.map +1 -1
  24. package/dist/application/agents/validation-agent.js +156 -21
  25. package/dist/application/agents/validation-agent.js.map +1 -1
  26. package/dist/application/services/dependency-container.d.ts +22 -2
  27. package/dist/application/services/dependency-container.d.ts.map +1 -1
  28. package/dist/application/services/dependency-container.js +144 -6
  29. package/dist/application/services/dependency-container.js.map +1 -1
  30. package/dist/application/services/intelligent-router.d.ts +13 -0
  31. package/dist/application/services/intelligent-router.d.ts.map +1 -1
  32. package/dist/application/services/intelligent-router.js +300 -87
  33. package/dist/application/services/intelligent-router.js.map +1 -1
  34. package/dist/application/use-cases/ask-question-use-case.d.ts +19 -0
  35. package/dist/application/use-cases/ask-question-use-case.d.ts.map +1 -1
  36. package/dist/application/use-cases/ask-question-use-case.js +125 -46
  37. package/dist/application/use-cases/ask-question-use-case.js.map +1 -1
  38. package/dist/application/use-cases/edit-file-use-case.d.ts.map +1 -1
  39. package/dist/application/use-cases/edit-file-use-case.js +16 -1
  40. package/dist/application/use-cases/edit-file-use-case.js.map +1 -1
  41. package/dist/domain/entities/documentation.d.ts +35 -0
  42. package/dist/domain/entities/documentation.d.ts.map +1 -0
  43. package/dist/domain/entities/documentation.js +6 -0
  44. package/dist/domain/entities/documentation.js.map +1 -0
  45. package/dist/domain/entities/product-requirements.d.ts +50 -0
  46. package/dist/domain/entities/product-requirements.d.ts.map +1 -0
  47. package/dist/domain/entities/product-requirements.js +6 -0
  48. package/dist/domain/entities/product-requirements.js.map +1 -0
  49. package/dist/domain/entities/task.d.ts +152 -0
  50. package/dist/domain/entities/task.d.ts.map +1 -0
  51. package/dist/domain/entities/task.js +61 -0
  52. package/dist/domain/entities/task.js.map +1 -0
  53. package/dist/domain/interfaces/agent.interface.d.ts +15 -0
  54. package/dist/domain/interfaces/agent.interface.d.ts.map +1 -0
  55. package/dist/domain/interfaces/agent.interface.js +6 -0
  56. package/dist/domain/interfaces/agent.interface.js.map +1 -0
  57. package/dist/domain/services/environment-mode-manager.d.ts +18 -0
  58. package/dist/domain/services/environment-mode-manager.d.ts.map +1 -0
  59. package/dist/domain/services/environment-mode-manager.js +37 -0
  60. package/dist/domain/services/environment-mode-manager.js.map +1 -0
  61. package/dist/domain/services/risk-tier-detector.d.ts +18 -0
  62. package/dist/domain/services/risk-tier-detector.d.ts.map +1 -0
  63. package/dist/domain/services/risk-tier-detector.js +65 -0
  64. package/dist/domain/services/risk-tier-detector.js.map +1 -0
  65. package/dist/formatter.d.ts.map +1 -1
  66. package/dist/formatter.js +10 -3
  67. package/dist/formatter.js.map +1 -1
  68. package/dist/index.js +103 -129
  69. package/dist/index.js.map +1 -1
  70. package/dist/infrastructure/ai/cohere-ai-service.d.ts.map +1 -1
  71. package/dist/infrastructure/ai/cohere-ai-service.js +15 -2
  72. package/dist/infrastructure/ai/cohere-ai-service.js.map +1 -1
  73. package/dist/infrastructure/ai/fake-ai-service.d.ts +22 -0
  74. package/dist/infrastructure/ai/fake-ai-service.d.ts.map +1 -0
  75. package/dist/infrastructure/ai/fake-ai-service.js +59 -0
  76. package/dist/infrastructure/ai/fake-ai-service.js.map +1 -0
  77. package/dist/infrastructure/ai/provider-ai-service.d.ts +59 -0
  78. package/dist/infrastructure/ai/provider-ai-service.d.ts.map +1 -0
  79. package/dist/infrastructure/ai/provider-ai-service.js +477 -0
  80. package/dist/infrastructure/ai/provider-ai-service.js.map +1 -0
  81. package/dist/infrastructure/cache/embedding-cache.d.ts +13 -1
  82. package/dist/infrastructure/cache/embedding-cache.d.ts.map +1 -1
  83. package/dist/infrastructure/cache/embedding-cache.js +80 -9
  84. package/dist/infrastructure/cache/embedding-cache.js.map +1 -1
  85. package/dist/infrastructure/cache/response-cache.d.ts +86 -0
  86. package/dist/infrastructure/cache/response-cache.d.ts.map +1 -0
  87. package/dist/infrastructure/cache/response-cache.js +224 -0
  88. package/dist/infrastructure/cache/response-cache.js.map +1 -0
  89. package/dist/infrastructure/context/conversation-context.d.ts +58 -0
  90. package/dist/infrastructure/context/conversation-context.d.ts.map +1 -0
  91. package/dist/infrastructure/context/conversation-context.js +170 -0
  92. package/dist/infrastructure/context/conversation-context.js.map +1 -0
  93. package/dist/infrastructure/context/session-manager.d.ts +26 -0
  94. package/dist/infrastructure/context/session-manager.d.ts.map +1 -0
  95. package/dist/infrastructure/context/session-manager.js +98 -0
  96. package/dist/infrastructure/context/session-manager.js.map +1 -0
  97. package/dist/infrastructure/cost/cost-tracker.d.ts +1 -0
  98. package/dist/infrastructure/cost/cost-tracker.d.ts.map +1 -1
  99. package/dist/infrastructure/cost/cost-tracker.js +12 -5
  100. package/dist/infrastructure/cost/cost-tracker.js.map +1 -1
  101. package/dist/infrastructure/governance/nist-ai-rmf.d.ts +6 -8
  102. package/dist/infrastructure/governance/nist-ai-rmf.d.ts.map +1 -1
  103. package/dist/infrastructure/governance/nist-ai-rmf.js +6 -8
  104. package/dist/infrastructure/governance/nist-ai-rmf.js.map +1 -1
  105. package/dist/infrastructure/governance/policy-as-code.d.ts +6 -8
  106. package/dist/infrastructure/governance/policy-as-code.d.ts.map +1 -1
  107. package/dist/infrastructure/governance/policy-as-code.js +6 -8
  108. package/dist/infrastructure/governance/policy-as-code.js.map +1 -1
  109. package/dist/infrastructure/governance/prompt-to-code-lineage.d.ts +7 -9
  110. package/dist/infrastructure/governance/prompt-to-code-lineage.d.ts.map +1 -1
  111. package/dist/infrastructure/governance/prompt-to-code-lineage.js +7 -9
  112. package/dist/infrastructure/governance/prompt-to-code-lineage.js.map +1 -1
  113. package/dist/infrastructure/providers/cohere-provider.d.ts +39 -0
  114. package/dist/infrastructure/providers/cohere-provider.d.ts.map +1 -0
  115. package/dist/infrastructure/providers/cohere-provider.js +359 -0
  116. package/dist/infrastructure/providers/cohere-provider.js.map +1 -0
  117. package/dist/infrastructure/providers/fake-provider.d.ts +43 -0
  118. package/dist/infrastructure/providers/fake-provider.d.ts.map +1 -0
  119. package/dist/infrastructure/providers/fake-provider.js +130 -0
  120. package/dist/infrastructure/providers/fake-provider.js.map +1 -0
  121. package/dist/infrastructure/providers/local-llm-provider.d.ts +49 -0
  122. package/dist/infrastructure/providers/local-llm-provider.d.ts.map +1 -0
  123. package/dist/infrastructure/providers/local-llm-provider.js +330 -0
  124. package/dist/infrastructure/providers/local-llm-provider.js.map +1 -0
  125. package/dist/infrastructure/providers/model-config.types.d.ts +70 -0
  126. package/dist/infrastructure/providers/model-config.types.d.ts.map +1 -0
  127. package/dist/infrastructure/providers/model-config.types.js +9 -0
  128. package/dist/infrastructure/providers/model-config.types.js.map +1 -0
  129. package/dist/infrastructure/providers/model-provider.interface.d.ts +113 -0
  130. package/dist/infrastructure/providers/model-provider.interface.d.ts.map +1 -0
  131. package/dist/infrastructure/providers/model-provider.interface.js +8 -0
  132. package/dist/infrastructure/providers/model-provider.interface.js.map +1 -0
  133. package/dist/infrastructure/providers/openai-provider.d.ts +38 -0
  134. package/dist/infrastructure/providers/openai-provider.d.ts.map +1 -0
  135. package/dist/infrastructure/providers/openai-provider.js +413 -0
  136. package/dist/infrastructure/providers/openai-provider.js.map +1 -0
  137. package/dist/infrastructure/providers/operation-provider-resolver.d.ts +48 -0
  138. package/dist/infrastructure/providers/operation-provider-resolver.d.ts.map +1 -0
  139. package/dist/infrastructure/providers/operation-provider-resolver.js +105 -0
  140. package/dist/infrastructure/providers/operation-provider-resolver.js.map +1 -0
  141. package/dist/infrastructure/providers/provider-config-loader.d.ts +37 -0
  142. package/dist/infrastructure/providers/provider-config-loader.d.ts.map +1 -0
  143. package/dist/infrastructure/providers/provider-config-loader.js +120 -0
  144. package/dist/infrastructure/providers/provider-config-loader.js.map +1 -0
  145. package/dist/infrastructure/providers/provider-registry.d.ts +53 -0
  146. package/dist/infrastructure/providers/provider-registry.d.ts.map +1 -0
  147. package/dist/infrastructure/providers/provider-registry.js +88 -0
  148. package/dist/infrastructure/providers/provider-registry.js.map +1 -0
  149. package/dist/infrastructure/storage/task-helpers.d.ts +58 -0
  150. package/dist/infrastructure/storage/task-helpers.d.ts.map +1 -0
  151. package/dist/infrastructure/storage/task-helpers.js +157 -0
  152. package/dist/infrastructure/storage/task-helpers.js.map +1 -0
  153. package/dist/infrastructure/storage/task-repository.d.ts +67 -0
  154. package/dist/infrastructure/storage/task-repository.d.ts.map +1 -0
  155. package/dist/infrastructure/storage/task-repository.js +205 -0
  156. package/dist/infrastructure/storage/task-repository.js.map +1 -0
  157. package/dist/infrastructure/ux/bi-directional-learning.d.ts +22 -0
  158. package/dist/infrastructure/ux/bi-directional-learning.d.ts.map +1 -1
  159. package/dist/infrastructure/ux/bi-directional-learning.js +144 -7
  160. package/dist/infrastructure/ux/bi-directional-learning.js.map +1 -1
  161. package/dist/infrastructure/ux/capability-boundaries.d.ts +50 -0
  162. package/dist/infrastructure/ux/capability-boundaries.d.ts.map +1 -0
  163. package/dist/infrastructure/ux/capability-boundaries.js +167 -0
  164. package/dist/infrastructure/ux/capability-boundaries.js.map +1 -0
  165. package/dist/infrastructure/ux/comprehensive-formatter.d.ts +63 -0
  166. package/dist/infrastructure/ux/comprehensive-formatter.d.ts.map +1 -0
  167. package/dist/infrastructure/ux/comprehensive-formatter.js +212 -0
  168. package/dist/infrastructure/ux/comprehensive-formatter.js.map +1 -0
  169. package/dist/infrastructure/ux/feedback-prompt.d.ts +42 -0
  170. package/dist/infrastructure/ux/feedback-prompt.d.ts.map +1 -0
  171. package/dist/infrastructure/ux/feedback-prompt.js +181 -0
  172. package/dist/infrastructure/ux/feedback-prompt.js.map +1 -0
  173. package/dist/infrastructure/ux/hitl-review-portal.d.ts.map +1 -1
  174. package/dist/infrastructure/ux/hitl-review-portal.js +4 -1
  175. package/dist/infrastructure/ux/hitl-review-portal.js.map +1 -1
  176. package/dist/infrastructure/ux/hitl-validation.d.ts +35 -0
  177. package/dist/infrastructure/ux/hitl-validation.d.ts.map +1 -1
  178. package/dist/infrastructure/ux/hitl-validation.js +86 -0
  179. package/dist/infrastructure/ux/hitl-validation.js.map +1 -1
  180. package/dist/infrastructure/ux/progress-indicator.d.ts +2 -1
  181. package/dist/infrastructure/ux/progress-indicator.d.ts.map +1 -1
  182. package/dist/infrastructure/ux/progress-indicator.js +13 -3
  183. package/dist/infrastructure/ux/progress-indicator.js.map +1 -1
  184. package/dist/infrastructure/ux/proportional-friction.d.ts +73 -0
  185. package/dist/infrastructure/ux/proportional-friction.d.ts.map +1 -0
  186. package/dist/infrastructure/ux/proportional-friction.js +200 -0
  187. package/dist/infrastructure/ux/proportional-friction.js.map +1 -0
  188. package/dist/infrastructure/validation/agent-feedback.d.ts +115 -0
  189. package/dist/infrastructure/validation/agent-feedback.d.ts.map +1 -0
  190. package/dist/infrastructure/validation/agent-feedback.js +227 -0
  191. package/dist/infrastructure/validation/agent-feedback.js.map +1 -0
  192. package/dist/infrastructure/validation/agent-validation-helper.d.ts +75 -0
  193. package/dist/infrastructure/validation/agent-validation-helper.d.ts.map +1 -0
  194. package/dist/infrastructure/validation/agent-validation-helper.js +88 -0
  195. package/dist/infrastructure/validation/agent-validation-helper.js.map +1 -0
  196. package/dist/infrastructure/validation/feedback-stats.d.ts +99 -0
  197. package/dist/infrastructure/validation/feedback-stats.d.ts.map +1 -0
  198. package/dist/infrastructure/validation/feedback-stats.js +173 -0
  199. package/dist/infrastructure/validation/feedback-stats.js.map +1 -0
  200. package/dist/infrastructure/validation/review-handler.d.ts +54 -0
  201. package/dist/infrastructure/validation/review-handler.d.ts.map +1 -0
  202. package/dist/infrastructure/validation/review-handler.js +206 -0
  203. package/dist/infrastructure/validation/review-handler.js.map +1 -0
  204. package/dist/infrastructure/validation/summary-aggregator.d.ts +42 -0
  205. package/dist/infrastructure/validation/summary-aggregator.d.ts.map +1 -0
  206. package/dist/infrastructure/validation/summary-aggregator.js +156 -0
  207. package/dist/infrastructure/validation/summary-aggregator.js.map +1 -0
  208. package/dist/infrastructure/validation/summary-extractor.d.ts +59 -0
  209. package/dist/infrastructure/validation/summary-extractor.d.ts.map +1 -0
  210. package/dist/infrastructure/validation/summary-extractor.js +102 -0
  211. package/dist/infrastructure/validation/summary-extractor.js.map +1 -0
  212. package/dist/infrastructure/validation/trace-summary.d.ts +72 -0
  213. package/dist/infrastructure/validation/trace-summary.d.ts.map +1 -0
  214. package/dist/infrastructure/validation/trace-summary.js +371 -0
  215. package/dist/infrastructure/validation/trace-summary.js.map +1 -0
  216. package/dist/infrastructure/validation/trust-config.d.ts +27 -0
  217. package/dist/infrastructure/validation/trust-config.d.ts.map +1 -0
  218. package/dist/infrastructure/validation/trust-config.js +113 -0
  219. package/dist/infrastructure/validation/trust-config.js.map +1 -0
  220. package/dist/infrastructure/xai/attention-visualizer.d.ts +6 -8
  221. package/dist/infrastructure/xai/attention-visualizer.d.ts.map +1 -1
  222. package/dist/infrastructure/xai/attention-visualizer.js +6 -8
  223. package/dist/infrastructure/xai/attention-visualizer.js.map +1 -1
  224. package/dist/infrastructure/xai/cot-visualizer.d.ts +6 -9
  225. package/dist/infrastructure/xai/cot-visualizer.d.ts.map +1 -1
  226. package/dist/infrastructure/xai/cot-visualizer.js +6 -9
  227. package/dist/infrastructure/xai/cot-visualizer.js.map +1 -1
  228. package/dist/infrastructure/xai/decision-tree-log.d.ts +6 -10
  229. package/dist/infrastructure/xai/decision-tree-log.d.ts.map +1 -1
  230. package/dist/infrastructure/xai/decision-tree-log.js +6 -10
  231. package/dist/infrastructure/xai/decision-tree-log.js.map +1 -1
  232. package/dist/infrastructure/xai/interactive-xai.d.ts +6 -8
  233. package/dist/infrastructure/xai/interactive-xai.d.ts.map +1 -1
  234. package/dist/infrastructure/xai/interactive-xai.js +6 -8
  235. package/dist/infrastructure/xai/interactive-xai.js.map +1 -1
  236. package/dist/infrastructure/xai/uncertainty-quantifier.d.ts +6 -9
  237. package/dist/infrastructure/xai/uncertainty-quantifier.d.ts.map +1 -1
  238. package/dist/infrastructure/xai/uncertainty-quantifier.js +6 -9
  239. package/dist/infrastructure/xai/uncertainty-quantifier.js.map +1 -1
  240. package/dist/presentation/cli/commands/ask-command.d.ts.map +1 -1
  241. package/dist/presentation/cli/commands/ask-command.js +84 -2
  242. package/dist/presentation/cli/commands/ask-command.js.map +1 -1
  243. package/dist/presentation/cli/commands/docs-command.d.ts +12 -0
  244. package/dist/presentation/cli/commands/docs-command.d.ts.map +1 -0
  245. package/dist/presentation/cli/commands/docs-command.js +196 -0
  246. package/dist/presentation/cli/commands/docs-command.js.map +1 -0
  247. package/dist/presentation/cli/commands/fix-command.d.ts +8 -0
  248. package/dist/presentation/cli/commands/fix-command.d.ts.map +1 -0
  249. package/dist/presentation/cli/commands/fix-command.js +309 -0
  250. package/dist/presentation/cli/commands/fix-command.js.map +1 -0
  251. package/dist/presentation/cli/commands/help-command.d.ts.map +1 -1
  252. package/dist/presentation/cli/commands/help-command.js +2 -0
  253. package/dist/presentation/cli/commands/help-command.js.map +1 -1
  254. package/dist/presentation/cli/commands/orchestrate-command.d.ts +1 -0
  255. package/dist/presentation/cli/commands/orchestrate-command.d.ts.map +1 -1
  256. package/dist/presentation/cli/commands/orchestrate-command.js +53 -0
  257. package/dist/presentation/cli/commands/orchestrate-command.js.map +1 -1
  258. package/dist/presentation/cli/commands/plan-command.d.ts +1 -0
  259. package/dist/presentation/cli/commands/plan-command.d.ts.map +1 -1
  260. package/dist/presentation/cli/commands/plan-command.js +80 -3
  261. package/dist/presentation/cli/commands/plan-command.js.map +1 -1
  262. package/dist/presentation/cli/commands/product-command.d.ts +12 -0
  263. package/dist/presentation/cli/commands/product-command.d.ts.map +1 -0
  264. package/dist/presentation/cli/commands/product-command.js +188 -0
  265. package/dist/presentation/cli/commands/product-command.js.map +1 -0
  266. package/dist/presentation/cli/commands/react-command.d.ts.map +1 -1
  267. package/dist/presentation/cli/commands/react-command.js +3 -1
  268. package/dist/presentation/cli/commands/react-command.js.map +1 -1
  269. package/dist/presentation/cli/commands/review-command.d.ts +14 -0
  270. package/dist/presentation/cli/commands/review-command.d.ts.map +1 -0
  271. package/dist/presentation/cli/commands/review-command.js +22 -0
  272. package/dist/presentation/cli/commands/review-command.js.map +1 -0
  273. package/dist/presentation/cli/commands/run-command.d.ts +15 -0
  274. package/dist/presentation/cli/commands/run-command.d.ts.map +1 -0
  275. package/dist/presentation/cli/commands/run-command.js +29 -0
  276. package/dist/presentation/cli/commands/run-command.js.map +1 -0
  277. package/dist/presentation/cli/commands/smart-command.d.ts +3 -1
  278. package/dist/presentation/cli/commands/smart-command.d.ts.map +1 -1
  279. package/dist/presentation/cli/commands/smart-command.js +92 -6
  280. package/dist/presentation/cli/commands/smart-command.js.map +1 -1
  281. package/dist/presentation/cli/commands/status-command.d.ts +11 -0
  282. package/dist/presentation/cli/commands/status-command.d.ts.map +1 -0
  283. package/dist/presentation/cli/commands/status-command.js +176 -0
  284. package/dist/presentation/cli/commands/status-command.js.map +1 -0
  285. package/dist/presentation/cli/commands/suggest-command.d.ts +13 -0
  286. package/dist/presentation/cli/commands/suggest-command.d.ts.map +1 -0
  287. package/dist/presentation/cli/commands/suggest-command.js +25 -0
  288. package/dist/presentation/cli/commands/suggest-command.js.map +1 -0
  289. package/dist/presentation/cli/error-display.d.ts.map +1 -1
  290. package/dist/presentation/cli/error-display.js +43 -0
  291. package/dist/presentation/cli/error-display.js.map +1 -1
  292. package/dist/session.js +19 -2
  293. package/dist/session.js.map +1 -1
  294. package/dist/ui.d.ts.map +1 -1
  295. package/dist/ui.js +8 -5
  296. package/dist/ui.js.map +1 -1
  297. package/package.json +10 -2
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Infrastructure: Proportional Friction Enhancement
3
+ * Task 5.2: Higher friction for high-risk actions, lower friction for safe operations
4
+ *
5
+ * Features:
6
+ * - User-configurable friction levels
7
+ * - Risk-proportional friction calculation
8
+ * - Consistent application across operations
9
+ */
10
+ import { AppropriateFriction, FrictionPoint } from './appropriate-friction.js';
11
+ export type UserFrictionPreference = 'minimal' | 'balanced' | 'strict';
12
+ export interface FrictionConfiguration {
13
+ preference: UserFrictionPreference;
14
+ allowAutoProceed: boolean;
15
+ customThresholds?: {
16
+ low?: number;
17
+ medium?: number;
18
+ high?: number;
19
+ critical?: number;
20
+ };
21
+ }
22
+ /**
23
+ * Enhanced Proportional Friction System
24
+ * Extends AppropriateFriction with user-configurable proportional scaling
25
+ */
26
+ export declare class ProportionalFriction extends AppropriateFriction {
27
+ private config;
28
+ private configPath;
29
+ constructor(configPath?: string);
30
+ /**
31
+ * Get friction point adjusted for user preferences
32
+ * Scales friction level based on user configuration and risk
33
+ */
34
+ getProportionalFriction(operation: string, context: {
35
+ riskLevel?: 'low' | 'medium' | 'high' | 'critical';
36
+ isDestructive?: boolean;
37
+ affectsMultipleFiles?: boolean;
38
+ modifiesSecuritySensitiveCode?: boolean;
39
+ uncertainty?: number;
40
+ }): FrictionPoint | null;
41
+ /**
42
+ * Adjust friction level based on user preference
43
+ */
44
+ private adjustFrictionLevel;
45
+ /**
46
+ * Determine if explicit confirmation should be required
47
+ */
48
+ private shouldRequireConfirmation;
49
+ /**
50
+ * Adjust timeout based on user preference
51
+ */
52
+ private adjustTimeout;
53
+ /**
54
+ * Update friction configuration
55
+ */
56
+ updateConfiguration(config: Partial<FrictionConfiguration>): void;
57
+ /**
58
+ * Get current configuration
59
+ */
60
+ getConfiguration(): FrictionConfiguration;
61
+ /**
62
+ * Set user preference
63
+ */
64
+ setPreference(preference: UserFrictionPreference): void;
65
+ /**
66
+ * Calculate friction intensity score (0-1)
67
+ * Higher score = more friction
68
+ */
69
+ calculateFrictionScore(riskLevel: 'low' | 'medium' | 'high' | 'critical', isDestructive: boolean, affectsMultipleFiles: boolean, modifiesSecuritySensitiveCode: boolean, uncertainty: number): number;
70
+ private loadConfiguration;
71
+ private saveConfiguration;
72
+ }
73
+ //# sourceMappingURL=proportional-friction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proportional-friction.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ux/proportional-friction.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAiB,MAAM,2BAA2B,CAAC;AAI9F,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,sBAAsB,CAAC;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,mBAAmB;IAC3D,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAM/B;;;OAGG;IACH,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;QACP,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;QACnD,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,6BAA6B,CAAC,EAAE,OAAO,CAAC;QACxC,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,aAAa,GAAG,IAAI;IAoCvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgC3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI;IAQjE;;OAEG;IACH,gBAAgB,IAAI,qBAAqB;IAIzC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI;IAKvD;;;OAGG;IACH,sBAAsB,CACpB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,EACjD,aAAa,EAAE,OAAO,EACtB,oBAAoB,EAAE,OAAO,EAC7B,6BAA6B,EAAE,OAAO,EACtC,WAAW,EAAE,MAAM,GAClB,MAAM;IAgCT,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,iBAAiB;CAW1B"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Infrastructure: Proportional Friction Enhancement
3
+ * Task 5.2: Higher friction for high-risk actions, lower friction for safe operations
4
+ *
5
+ * Features:
6
+ * - User-configurable friction levels
7
+ * - Risk-proportional friction calculation
8
+ * - Consistent application across operations
9
+ */
10
+ import { AppropriateFriction } from './appropriate-friction.js';
11
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
12
+ import { join } from 'path';
13
+ /**
14
+ * Enhanced Proportional Friction System
15
+ * Extends AppropriateFriction with user-configurable proportional scaling
16
+ */
17
+ export class ProportionalFriction extends AppropriateFriction {
18
+ config;
19
+ configPath;
20
+ constructor(configPath) {
21
+ super();
22
+ this.configPath = configPath || join(process.cwd(), 'data', 'friction-config.json');
23
+ this.config = this.loadConfiguration();
24
+ }
25
+ /**
26
+ * Get friction point adjusted for user preferences
27
+ * Scales friction level based on user configuration and risk
28
+ */
29
+ getProportionalFriction(operation, context) {
30
+ const baseFriction = this.needsFriction(operation, context);
31
+ if (!baseFriction) {
32
+ return null; // No friction needed
33
+ }
34
+ // Adjust friction level based on user preference
35
+ const adjustedLevel = this.adjustFrictionLevel(baseFriction.level, context.riskLevel || 'medium', this.config);
36
+ // Adjust confirmation requirements based on preference
37
+ const requiresConfirmation = this.shouldRequireConfirmation(baseFriction.requiresExplicitConfirmation, adjustedLevel, this.config);
38
+ // Adjust timeout based on preference
39
+ const timeout = this.adjustTimeout(baseFriction.timeout, adjustedLevel, this.config);
40
+ return {
41
+ ...baseFriction,
42
+ level: adjustedLevel,
43
+ requiresExplicitConfirmation: requiresConfirmation,
44
+ timeout: timeout,
45
+ };
46
+ }
47
+ /**
48
+ * Adjust friction level based on user preference
49
+ */
50
+ adjustFrictionLevel(baseLevel, riskLevel, config) {
51
+ // For critical operations, always use heavy friction regardless of preference
52
+ if (riskLevel === 'critical') {
53
+ return 'heavy';
54
+ }
55
+ switch (config.preference) {
56
+ case 'minimal':
57
+ // Reduce friction levels
58
+ if (baseLevel === 'heavy')
59
+ return 'moderate';
60
+ if (baseLevel === 'moderate')
61
+ return 'light';
62
+ if (baseLevel === 'light')
63
+ return 'none';
64
+ return baseLevel;
65
+ case 'strict':
66
+ // Increase friction levels
67
+ if (baseLevel === 'light')
68
+ return 'moderate';
69
+ if (baseLevel === 'moderate')
70
+ return 'heavy';
71
+ if (baseLevel === 'none' && riskLevel !== 'low')
72
+ return 'light';
73
+ return baseLevel;
74
+ case 'balanced':
75
+ default:
76
+ // Use base level as-is (default behavior)
77
+ return baseLevel;
78
+ }
79
+ }
80
+ /**
81
+ * Determine if explicit confirmation should be required
82
+ */
83
+ shouldRequireConfirmation(baseRequirement, frictionLevel, config) {
84
+ // Minimal preference allows auto-proceed for moderate friction
85
+ if (config.preference === 'minimal' && config.allowAutoProceed) {
86
+ if (frictionLevel === 'light' || frictionLevel === 'moderate') {
87
+ return false; // Allow auto-proceed
88
+ }
89
+ }
90
+ // Strict preference always requires confirmation for any friction
91
+ if (config.preference === 'strict') {
92
+ return frictionLevel !== 'none';
93
+ }
94
+ // Balanced: Use base requirement
95
+ return baseRequirement;
96
+ }
97
+ /**
98
+ * Adjust timeout based on user preference
99
+ */
100
+ adjustTimeout(baseTimeout, frictionLevel, config) {
101
+ if (!baseTimeout) {
102
+ return undefined; // No timeout
103
+ }
104
+ // Minimal: Shorter timeout
105
+ if (config.preference === 'minimal') {
106
+ return Math.max(1000, baseTimeout * 0.5); // 50% of base timeout
107
+ }
108
+ // Strict: Longer timeout
109
+ if (config.preference === 'strict') {
110
+ return baseTimeout * 2; // 200% of base timeout
111
+ }
112
+ // Balanced: Use base timeout
113
+ return baseTimeout;
114
+ }
115
+ /**
116
+ * Update friction configuration
117
+ */
118
+ updateConfiguration(config) {
119
+ this.config = {
120
+ ...this.config,
121
+ ...config,
122
+ };
123
+ this.saveConfiguration();
124
+ }
125
+ /**
126
+ * Get current configuration
127
+ */
128
+ getConfiguration() {
129
+ return { ...this.config };
130
+ }
131
+ /**
132
+ * Set user preference
133
+ */
134
+ setPreference(preference) {
135
+ this.config.preference = preference;
136
+ this.saveConfiguration();
137
+ }
138
+ /**
139
+ * Calculate friction intensity score (0-1)
140
+ * Higher score = more friction
141
+ */
142
+ calculateFrictionScore(riskLevel, isDestructive, affectsMultipleFiles, modifiesSecuritySensitiveCode, uncertainty) {
143
+ let score = 0;
144
+ // Risk level contribution (40%)
145
+ const riskScores = { low: 0.1, medium: 0.3, high: 0.6, critical: 1.0 };
146
+ score += riskScores[riskLevel] * 0.4;
147
+ // Destructive operation (20%)
148
+ if (isDestructive)
149
+ score += 0.2;
150
+ // Multi-file impact (15%)
151
+ if (affectsMultipleFiles)
152
+ score += 0.15;
153
+ // Security-sensitive (20%)
154
+ if (modifiesSecuritySensitiveCode)
155
+ score += 0.2;
156
+ // Uncertainty (5%)
157
+ score += Math.min(uncertainty, 1.0) * 0.05;
158
+ // Apply user preference scaling
159
+ const preferenceScale = {
160
+ minimal: 0.7, // 30% reduction
161
+ balanced: 1.0, // No change
162
+ strict: 1.3, // 30% increase
163
+ };
164
+ score *= preferenceScale[this.config.preference];
165
+ return Math.min(score, 1.0); // Cap at 1.0
166
+ }
167
+ // Configuration persistence
168
+ loadConfiguration() {
169
+ try {
170
+ if (existsSync(this.configPath)) {
171
+ const data = JSON.parse(readFileSync(this.configPath, 'utf-8'));
172
+ return {
173
+ preference: data.preference || 'balanced',
174
+ allowAutoProceed: data.allowAutoProceed ?? true,
175
+ customThresholds: data.customThresholds,
176
+ };
177
+ }
178
+ }
179
+ catch {
180
+ // Use defaults if config doesn't exist or can't be read
181
+ }
182
+ return {
183
+ preference: 'balanced',
184
+ allowAutoProceed: true,
185
+ };
186
+ }
187
+ saveConfiguration() {
188
+ try {
189
+ const configDir = join(this.configPath, '..');
190
+ if (!existsSync(configDir)) {
191
+ mkdirSync(configDir, { recursive: true });
192
+ }
193
+ writeFileSync(this.configPath, JSON.stringify(this.config, null, 2));
194
+ }
195
+ catch {
196
+ // Silently fail - configuration is optional
197
+ }
198
+ }
199
+ }
200
+ //# sourceMappingURL=proportional-friction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proportional-friction.js","sourceRoot":"","sources":["../../../src/infrastructure/ux/proportional-friction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Infrastructure: Agent Feedback Module
3
+ * Unified evaluation & feedback capture layer for Validation Mode
4
+ *
5
+ * Features:
6
+ * - Record success/failure, user approval, user modifications, errors
7
+ * - Store anonymously in local memory for pattern improvements
8
+ * - JSON-based, appended per operation
9
+ * - Privacy-first design with opt-out support
10
+ */
11
+ export type FeedbackOutcome = 'success' | 'failure' | 'partial_success' | 'cancelled' | 'error';
12
+ export type UserAction = 'approved' | 'rejected' | 'modified' | 'skipped' | 'not_required';
13
+ export interface AgentFeedback {
14
+ feedbackId: string;
15
+ runId: string;
16
+ agentName: string;
17
+ timestamp: number;
18
+ operation: string;
19
+ query?: string;
20
+ outcome: FeedbackOutcome;
21
+ userAction: UserAction;
22
+ filesChanged?: string[];
23
+ filesCreated?: string[];
24
+ filesDeleted?: string[];
25
+ userModifications?: Array<{
26
+ filepath: string;
27
+ modificationType: 'edited' | 'reverted' | 'accepted' | 'rejected';
28
+ description?: string;
29
+ }>;
30
+ errors?: string[];
31
+ warnings?: string[];
32
+ validationChecks?: Array<{
33
+ check: string;
34
+ passed: boolean;
35
+ message?: string;
36
+ }>;
37
+ metrics?: {
38
+ tokensUsed?: number;
39
+ duration?: number;
40
+ filesAnalyzed?: number;
41
+ changesProposed?: number;
42
+ changesApplied?: number;
43
+ };
44
+ context?: {
45
+ codebaseType?: string;
46
+ fileCount?: number;
47
+ operationType?: string;
48
+ };
49
+ userFeedback?: {
50
+ rating?: number;
51
+ comment?: string;
52
+ };
53
+ }
54
+ export interface AgentFeedbackConfig {
55
+ enabled: boolean;
56
+ storagePath?: string;
57
+ anonymize: boolean;
58
+ optOut: boolean;
59
+ }
60
+ /**
61
+ * Agent Feedback Manager
62
+ * Lightweight, privacy-first feedback capture
63
+ */
64
+ export declare class AgentFeedbackManager {
65
+ private config;
66
+ private feedbackDir;
67
+ private feedbackHistory;
68
+ constructor(config?: Partial<AgentFeedbackConfig>);
69
+ /**
70
+ * Record feedback for an agent operation
71
+ * userAction is required - must be provided by caller
72
+ */
73
+ recordFeedback(feedback: Omit<AgentFeedback, 'feedbackId' | 'timestamp'> & {
74
+ userAction: UserAction;
75
+ }): string;
76
+ /**
77
+ * Get feedback for a run
78
+ */
79
+ getFeedbackForRun(runId: string): AgentFeedback | null;
80
+ /**
81
+ * Get recent feedback patterns (for learning)
82
+ */
83
+ getRecentFeedback(limit?: number): AgentFeedback[];
84
+ /**
85
+ * Get feedback statistics
86
+ */
87
+ getFeedbackStats(): {
88
+ total: number;
89
+ byOutcome: Record<FeedbackOutcome, number>;
90
+ byAgent: Record<string, number>;
91
+ averageRating?: number;
92
+ };
93
+ /**
94
+ * Anonymize feedback (remove sensitive data)
95
+ */
96
+ private anonymizeFeedback;
97
+ /**
98
+ * Anonymize file path (keep structure, not actual names)
99
+ */
100
+ private anonymizePath;
101
+ /**
102
+ * Load recent feedback from disk
103
+ */
104
+ private loadRecentFeedback;
105
+ /**
106
+ * Clear all feedback (privacy control)
107
+ */
108
+ clearFeedback(): void;
109
+ /**
110
+ * Check if feedback collection is enabled
111
+ */
112
+ isEnabled(): boolean;
113
+ }
114
+ export declare const agentFeedbackManager: AgentFeedbackManager;
115
+ //# sourceMappingURL=agent-feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-feedback.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/validation/agent-feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Infrastructure: Agent Feedback Module
3
+ * Unified evaluation & feedback capture layer for Validation Mode
4
+ *
5
+ * Features:
6
+ * - Record success/failure, user approval, user modifications, errors
7
+ * - Store anonymously in local memory for pattern improvements
8
+ * - JSON-based, appended per operation
9
+ * - Privacy-first design with opt-out support
10
+ */
11
+ import { writeFileSync, readFileSync, existsSync, mkdirSync, appendFileSync } from 'fs';
12
+ import { join, dirname } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ import { randomUUID } from 'crypto';
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = dirname(__filename);
17
+ /**
18
+ * Agent Feedback Manager
19
+ * Lightweight, privacy-first feedback capture
20
+ */
21
+ export class AgentFeedbackManager {
22
+ config;
23
+ feedbackDir = '';
24
+ feedbackHistory = [];
25
+ constructor(config) {
26
+ // Check opt-out preference
27
+ const optOut = process.env.CODEHERE_FEEDBACK_OPT_OUT === 'true' ||
28
+ process.env.CODEHERE_TELEMETRY_DISABLED === 'true';
29
+ this.config = {
30
+ enabled: !optOut && (config?.enabled !== false),
31
+ anonymize: config?.anonymize !== false,
32
+ optOut: optOut || (config?.optOut === true),
33
+ storagePath: config?.storagePath,
34
+ };
35
+ if (this.config.optOut || !this.config.enabled) {
36
+ return;
37
+ }
38
+ // Set up feedback storage directory
39
+ if (this.config.storagePath) {
40
+ this.feedbackDir = this.config.storagePath;
41
+ }
42
+ else {
43
+ const agentDir = join(__dirname, '../../..');
44
+ this.feedbackDir = join(agentDir, 'data', 'feedback');
45
+ }
46
+ if (!existsSync(this.feedbackDir)) {
47
+ mkdirSync(this.feedbackDir, { recursive: true });
48
+ }
49
+ // Load recent feedback history (for pattern analysis)
50
+ this.loadRecentFeedback();
51
+ }
52
+ /**
53
+ * Record feedback for an agent operation
54
+ * userAction is required - must be provided by caller
55
+ */
56
+ recordFeedback(feedback) {
57
+ if (this.config.optOut || !this.config.enabled) {
58
+ return 'feedback-disabled';
59
+ }
60
+ const feedbackId = randomUUID();
61
+ const fullFeedback = {
62
+ ...feedback,
63
+ feedbackId,
64
+ timestamp: Date.now(),
65
+ };
66
+ // Anonymize if configured
67
+ const processedFeedback = this.config.anonymize
68
+ ? this.anonymizeFeedback(fullFeedback)
69
+ : fullFeedback;
70
+ // Store in memory
71
+ this.feedbackHistory.push(processedFeedback);
72
+ if (this.feedbackHistory.length > 1000) {
73
+ // Keep only last 1000 in memory
74
+ this.feedbackHistory = this.feedbackHistory.slice(-1000);
75
+ }
76
+ // Append to JSON file (one JSON object per line for easy parsing)
77
+ const feedbackFile = join(this.feedbackDir, 'agent-feedback.jsonl');
78
+ try {
79
+ appendFileSync(feedbackFile, JSON.stringify(processedFeedback) + '\n', 'utf-8');
80
+ }
81
+ catch (error) {
82
+ // Silent failure - don't break user workflow
83
+ console.error('[AgentFeedback] Failed to write feedback:', error);
84
+ }
85
+ return feedbackId;
86
+ }
87
+ /**
88
+ * Get feedback for a run
89
+ */
90
+ getFeedbackForRun(runId) {
91
+ return this.feedbackHistory.find(f => f.runId === runId) || null;
92
+ }
93
+ /**
94
+ * Get recent feedback patterns (for learning)
95
+ */
96
+ getRecentFeedback(limit = 100) {
97
+ return this.feedbackHistory.slice(-limit);
98
+ }
99
+ /**
100
+ * Get feedback statistics
101
+ */
102
+ getFeedbackStats() {
103
+ const stats = {
104
+ total: this.feedbackHistory.length,
105
+ byOutcome: {},
106
+ byAgent: {},
107
+ averageRating: undefined,
108
+ };
109
+ let totalRating = 0;
110
+ let ratingCount = 0;
111
+ for (const feedback of this.feedbackHistory) {
112
+ // Count by outcome
113
+ stats.byOutcome[feedback.outcome] = (stats.byOutcome[feedback.outcome] || 0) + 1;
114
+ // Count by agent
115
+ stats.byAgent[feedback.agentName] = (stats.byAgent[feedback.agentName] || 0) + 1;
116
+ // Calculate average rating
117
+ if (feedback.userFeedback?.rating) {
118
+ totalRating += feedback.userFeedback.rating;
119
+ ratingCount++;
120
+ }
121
+ }
122
+ if (ratingCount > 0) {
123
+ stats.averageRating = totalRating / ratingCount;
124
+ }
125
+ return stats;
126
+ }
127
+ /**
128
+ * Anonymize feedback (remove sensitive data)
129
+ */
130
+ anonymizeFeedback(feedback) {
131
+ const anonymized = { ...feedback };
132
+ // Remove query content if it might contain sensitive info
133
+ if (anonymized.query) {
134
+ // Keep only intent keywords, not full query
135
+ const keywords = anonymized.query
136
+ .split(/\s+/)
137
+ .filter(w => w.length > 3)
138
+ .slice(0, 5)
139
+ .join(' ');
140
+ anonymized.query = keywords || '[anonymized]';
141
+ }
142
+ // Remove file contents from modifications
143
+ if (anonymized.userModifications) {
144
+ anonymized.userModifications = anonymized.userModifications.map(mod => ({
145
+ filepath: this.anonymizePath(mod.filepath),
146
+ modificationType: mod.modificationType,
147
+ description: mod.description ? '[anonymized]' : undefined,
148
+ }));
149
+ }
150
+ // Anonymize file paths (keep structure, not names)
151
+ if (anonymized.filesChanged) {
152
+ anonymized.filesChanged = anonymized.filesChanged.map(p => this.anonymizePath(p));
153
+ }
154
+ if (anonymized.filesCreated) {
155
+ anonymized.filesCreated = anonymized.filesCreated.map(p => this.anonymizePath(p));
156
+ }
157
+ return anonymized;
158
+ }
159
+ /**
160
+ * Anonymize file path (keep structure, not actual names)
161
+ */
162
+ anonymizePath(filepath) {
163
+ // Replace actual file names with placeholders but keep structure
164
+ const parts = filepath.split('/');
165
+ return parts.map((part, index) => {
166
+ if (index === parts.length - 1) {
167
+ // Last part is filename
168
+ const ext = part.split('.').pop();
169
+ return `file${ext ? '.' + ext : ''}`;
170
+ }
171
+ return part;
172
+ }).join('/');
173
+ }
174
+ /**
175
+ * Load recent feedback from disk
176
+ */
177
+ loadRecentFeedback() {
178
+ const feedbackFile = join(this.feedbackDir, 'agent-feedback.jsonl');
179
+ if (!existsSync(feedbackFile)) {
180
+ return;
181
+ }
182
+ try {
183
+ const content = readFileSync(feedbackFile, 'utf-8');
184
+ const lines = content.trim().split('\n').filter(line => line.trim());
185
+ // Load last 100 entries
186
+ const recentLines = lines.slice(-100);
187
+ this.feedbackHistory = recentLines
188
+ .map(line => {
189
+ try {
190
+ return JSON.parse(line);
191
+ }
192
+ catch {
193
+ return null;
194
+ }
195
+ })
196
+ .filter((f) => f !== null);
197
+ }
198
+ catch (error) {
199
+ // Silent failure
200
+ console.error('[AgentFeedback] Failed to load feedback history:', error);
201
+ }
202
+ }
203
+ /**
204
+ * Clear all feedback (privacy control)
205
+ */
206
+ clearFeedback() {
207
+ this.feedbackHistory = [];
208
+ const feedbackFile = join(this.feedbackDir, 'agent-feedback.jsonl');
209
+ if (existsSync(feedbackFile)) {
210
+ try {
211
+ writeFileSync(feedbackFile, '', 'utf-8');
212
+ }
213
+ catch {
214
+ // Silent failure
215
+ }
216
+ }
217
+ }
218
+ /**
219
+ * Check if feedback collection is enabled
220
+ */
221
+ isEnabled() {
222
+ return !this.config.optOut && this.config.enabled;
223
+ }
224
+ }
225
+ // Singleton instance
226
+ export const agentFeedbackManager = new AgentFeedbackManager();
227
+ //# sourceMappingURL=agent-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-feedback.js","sourceRoot":"","sources":["../../../src/infrastructure/validation/agent-feedback.ts"],"names":[],"mappings":"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"}