autosnippet 3.2.21 → 3.3.2

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 (311) hide show
  1. package/dashboard/dist/assets/icons-BJ2mUBi8.js +1 -0
  2. package/dashboard/dist/assets/index-B659K9t5.js +128 -0
  3. package/dashboard/dist/assets/index-NCm40PMD.css +1 -0
  4. package/dashboard/dist/index.html +3 -3
  5. package/dist/bin/cli.d.ts +1 -1
  6. package/dist/bin/cli.js +244 -261
  7. package/dist/lib/agent/context/ExplorationTracker.d.ts +2 -0
  8. package/dist/lib/agent/context/ExplorationTracker.js +21 -3
  9. package/dist/lib/agent/core/ToolExecutionPipeline.d.ts +3 -1
  10. package/dist/lib/agent/core/ToolExecutionPipeline.js +8 -1
  11. package/dist/lib/agent/forge/DynamicComposer.d.ts +58 -0
  12. package/dist/lib/agent/forge/DynamicComposer.js +99 -0
  13. package/dist/lib/agent/forge/SandboxRunner.d.ts +60 -0
  14. package/dist/lib/agent/forge/SandboxRunner.js +251 -0
  15. package/dist/lib/agent/forge/TemporaryToolRegistry.d.ts +76 -0
  16. package/dist/lib/agent/forge/TemporaryToolRegistry.js +154 -0
  17. package/dist/lib/agent/forge/ToolForge.d.ts +92 -0
  18. package/dist/lib/agent/forge/ToolForge.js +239 -0
  19. package/dist/lib/agent/forge/ToolRequirementAnalyzer.d.ts +44 -0
  20. package/dist/lib/agent/forge/ToolRequirementAnalyzer.js +119 -0
  21. package/dist/lib/agent/tools/ToolRegistry.d.ts +2 -0
  22. package/dist/lib/agent/tools/ToolRegistry.js +4 -0
  23. package/dist/lib/agent/tools/composite.js +0 -1
  24. package/dist/lib/agent/tools/index.d.ts +2 -50
  25. package/dist/lib/agent/tools/index.js +2 -3
  26. package/dist/lib/agent/tools/lifecycle.d.ts +1 -58
  27. package/dist/lib/agent/tools/lifecycle.js +2 -75
  28. package/dist/lib/cli/SetupService.d.ts +46 -2
  29. package/dist/lib/cli/SetupService.js +2 -27
  30. package/dist/lib/cli/deploy/FileManifest.d.ts +0 -21
  31. package/dist/lib/cli/deploy/FileManifest.js +0 -11
  32. package/dist/lib/{platform/ios/spm → core/discovery}/SpmDiscoverer.d.ts +2 -5
  33. package/dist/lib/{platform/ios/spm → core/discovery}/SpmDiscoverer.js +159 -44
  34. package/dist/lib/core/discovery/index.d.ts +1 -1
  35. package/dist/lib/core/discovery/index.js +2 -2
  36. package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +10 -0
  37. package/dist/lib/domain/knowledge/KnowledgeEntry.js +2 -0
  38. package/dist/lib/domain/knowledge/Lifecycle.d.ts +19 -2
  39. package/dist/lib/domain/knowledge/Lifecycle.js +32 -6
  40. package/dist/lib/domain/knowledge/UnifiedValidator.d.ts +1 -5
  41. package/dist/lib/domain/knowledge/UnifiedValidator.js +7 -44
  42. package/dist/lib/domain/knowledge/values/Stats.d.ts +29 -0
  43. package/dist/lib/domain/knowledge/values/Stats.js +41 -0
  44. package/dist/lib/external/mcp/McpServer.d.ts +19 -38
  45. package/dist/lib/external/mcp/McpServer.js +145 -117
  46. package/dist/lib/external/mcp/autoApproveInjector.js +0 -2
  47. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.d.ts +26 -1
  48. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.js +41 -0
  49. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +49 -0
  50. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +3 -0
  51. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +27 -0
  52. package/dist/lib/external/mcp/handlers/bootstrap/skills.js +1 -1
  53. package/dist/lib/external/mcp/handlers/bootstrap-external.js +1 -0
  54. package/dist/lib/external/mcp/handlers/bootstrap-internal.js +2 -0
  55. package/dist/lib/external/mcp/handlers/consolidated.d.ts +116 -6
  56. package/dist/lib/external/mcp/handlers/consolidated.js +251 -71
  57. package/dist/lib/external/mcp/handlers/guard.d.ts +150 -0
  58. package/dist/lib/external/mcp/handlers/guard.js +245 -8
  59. package/dist/lib/external/mcp/handlers/knowledge.d.ts +0 -29
  60. package/dist/lib/external/mcp/handlers/knowledge.js +1 -76
  61. package/dist/lib/external/mcp/handlers/panorama.d.ts +36 -0
  62. package/dist/lib/external/mcp/handlers/panorama.js +156 -0
  63. package/dist/lib/external/mcp/handlers/system.d.ts +2 -54
  64. package/dist/lib/external/mcp/handlers/system.js +3 -113
  65. package/dist/lib/external/mcp/handlers/task.d.ts +13 -24
  66. package/dist/lib/external/mcp/handlers/task.js +217 -557
  67. package/dist/lib/external/mcp/handlers/types.d.ts +91 -8
  68. package/dist/lib/external/mcp/handlers/types.js +18 -1
  69. package/dist/lib/external/mcp/handlers/wiki-external.d.ts +18 -1
  70. package/dist/lib/external/mcp/handlers/wiki-external.js +16 -1
  71. package/dist/lib/external/mcp/tools.d.ts +14 -20
  72. package/dist/lib/external/mcp/tools.js +62 -91
  73. package/dist/lib/http/HttpServer.js +52 -6
  74. package/dist/lib/http/routes/{snippets.d.ts → audit.d.ts} +4 -2
  75. package/dist/lib/http/routes/audit.js +51 -0
  76. package/dist/lib/http/routes/commands.d.ts +1 -1
  77. package/dist/lib/http/routes/commands.js +1 -66
  78. package/dist/lib/http/routes/guardReport.d.ts +10 -0
  79. package/dist/lib/http/routes/guardReport.js +143 -0
  80. package/dist/lib/http/routes/knowledge.js +32 -1
  81. package/dist/lib/http/routes/panorama.d.ts +11 -0
  82. package/dist/lib/http/routes/panorama.js +322 -0
  83. package/dist/lib/http/routes/remote.js +0 -5
  84. package/dist/lib/http/routes/signals.d.ts +10 -0
  85. package/dist/lib/http/routes/signals.js +104 -0
  86. package/dist/lib/http/routes/task.d.ts +2 -3
  87. package/dist/lib/http/routes/task.js +17 -347
  88. package/dist/lib/http/routes/violations.js +1 -1
  89. package/dist/lib/infrastructure/audit/AuditLogger.d.ts +6 -1
  90. package/dist/lib/infrastructure/audit/AuditLogger.js +14 -1
  91. package/dist/lib/infrastructure/database/drizzle/schema.d.ts +181 -583
  92. package/dist/lib/infrastructure/database/drizzle/schema.js +28 -69
  93. package/dist/lib/infrastructure/database/migrations/004_evolution_proposals.d.ts +8 -0
  94. package/dist/lib/infrastructure/database/migrations/004_evolution_proposals.js +43 -0
  95. package/dist/lib/infrastructure/logging/Logger.d.ts +2 -0
  96. package/dist/lib/infrastructure/logging/Logger.js +34 -7
  97. package/dist/lib/infrastructure/monitoring/ErrorTracker.js +3 -1
  98. package/dist/lib/infrastructure/monitoring/PerformanceMonitor.d.ts +2 -2
  99. package/dist/lib/infrastructure/monitoring/PerformanceMonitor.js +12 -10
  100. package/dist/lib/infrastructure/notification/LarkNotifier.d.ts +24 -0
  101. package/dist/lib/infrastructure/notification/LarkNotifier.js +97 -0
  102. package/dist/lib/infrastructure/report/ReportStore.d.ts +45 -0
  103. package/dist/lib/infrastructure/report/ReportStore.js +133 -0
  104. package/dist/lib/infrastructure/signal/SignalAggregator.d.ts +18 -0
  105. package/dist/lib/infrastructure/signal/SignalAggregator.js +84 -0
  106. package/dist/lib/infrastructure/signal/SignalBridge.d.ts +13 -0
  107. package/dist/lib/infrastructure/signal/SignalBridge.js +20 -0
  108. package/dist/lib/infrastructure/signal/SignalBus.d.ts +63 -0
  109. package/dist/lib/infrastructure/signal/SignalBus.js +106 -0
  110. package/dist/lib/infrastructure/signal/SignalTraceWriter.d.ts +36 -0
  111. package/dist/lib/infrastructure/signal/SignalTraceWriter.js +130 -0
  112. package/dist/lib/injection/ServiceContainer.js +6 -0
  113. package/dist/lib/injection/ServiceMap.d.ts +16 -19
  114. package/dist/lib/injection/modules/AgentModule.d.ts +1 -1
  115. package/dist/lib/injection/modules/AgentModule.js +7 -1
  116. package/dist/lib/injection/modules/AppModule.d.ts +3 -4
  117. package/dist/lib/injection/modules/AppModule.js +7 -43
  118. package/dist/lib/injection/modules/GuardModule.js +59 -2
  119. package/dist/lib/injection/modules/InfraModule.d.ts +0 -1
  120. package/dist/lib/injection/modules/InfraModule.js +9 -7
  121. package/dist/lib/injection/modules/KnowledgeModule.js +51 -0
  122. package/dist/lib/injection/modules/PanoramaModule.d.ts +18 -0
  123. package/dist/lib/injection/modules/PanoramaModule.js +76 -0
  124. package/dist/lib/injection/modules/SignalModule.d.ts +10 -0
  125. package/dist/lib/injection/modules/SignalModule.js +84 -0
  126. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +1 -0
  127. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +6 -0
  128. package/dist/lib/service/bootstrap/BootstrapTaskManager.d.ts +3 -1
  129. package/dist/lib/service/bootstrap/BootstrapTaskManager.js +20 -1
  130. package/dist/lib/service/delivery/AgentInstructionsGenerator.js +4 -5
  131. package/dist/lib/service/delivery/CursorDeliveryPipeline.d.ts +3 -1
  132. package/dist/lib/service/delivery/CursorDeliveryPipeline.js +13 -10
  133. package/dist/lib/service/delivery/RulesGenerator.js +3 -2
  134. package/dist/lib/service/evolution/ConsolidationAdvisor.d.ts +114 -0
  135. package/dist/lib/service/evolution/ConsolidationAdvisor.js +542 -0
  136. package/dist/lib/service/evolution/ContradictionDetector.d.ts +54 -0
  137. package/dist/lib/service/evolution/ContradictionDetector.js +253 -0
  138. package/dist/lib/service/evolution/DecayDetector.d.ts +71 -0
  139. package/dist/lib/service/evolution/DecayDetector.js +244 -0
  140. package/dist/lib/service/evolution/EnhancementSuggester.d.ts +38 -0
  141. package/dist/lib/service/evolution/EnhancementSuggester.js +220 -0
  142. package/dist/lib/service/evolution/KnowledgeMetabolism.d.ts +82 -0
  143. package/dist/lib/service/evolution/KnowledgeMetabolism.js +167 -0
  144. package/dist/lib/service/evolution/RedundancyAnalyzer.d.ts +53 -0
  145. package/dist/lib/service/evolution/RedundancyAnalyzer.js +210 -0
  146. package/dist/lib/service/evolution/StagingManager.d.ts +57 -0
  147. package/dist/lib/service/evolution/StagingManager.js +201 -0
  148. package/dist/lib/service/guard/ComplianceReporter.d.ts +42 -2
  149. package/dist/lib/service/guard/ComplianceReporter.js +43 -5
  150. package/dist/lib/service/guard/CoverageAnalyzer.d.ts +54 -0
  151. package/dist/lib/service/guard/CoverageAnalyzer.js +149 -0
  152. package/dist/lib/service/guard/GuardCheckEngine.d.ts +55 -1
  153. package/dist/lib/service/guard/GuardCheckEngine.js +508 -15
  154. package/dist/lib/service/guard/GuardFeedbackLoop.d.ts +3 -0
  155. package/dist/lib/service/guard/GuardFeedbackLoop.js +9 -0
  156. package/dist/lib/service/guard/ReverseGuard.d.ts +73 -0
  157. package/dist/lib/service/guard/ReverseGuard.js +256 -0
  158. package/dist/lib/service/guard/RuleLearner.d.ts +12 -0
  159. package/dist/lib/service/guard/RuleLearner.js +38 -0
  160. package/dist/lib/service/guard/UncertaintyCollector.d.ts +83 -0
  161. package/dist/lib/service/guard/UncertaintyCollector.js +149 -0
  162. package/dist/lib/service/guard/ViolationsStore.d.ts +1 -0
  163. package/dist/lib/service/guard/ViolationsStore.js +33 -3
  164. package/dist/lib/service/knowledge/ConfidenceRouter.d.ts +13 -0
  165. package/dist/lib/service/knowledge/ConfidenceRouter.js +14 -0
  166. package/dist/lib/service/knowledge/KnowledgeService.js +22 -4
  167. package/dist/lib/service/module/ModuleService.js +3 -13
  168. package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +27 -0
  169. package/dist/lib/service/panorama/CouplingAnalyzer.js +192 -0
  170. package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +28 -0
  171. package/dist/lib/service/panorama/DimensionAnalyzer.js +320 -0
  172. package/dist/lib/service/panorama/LayerInferrer.d.ts +19 -0
  173. package/dist/lib/service/panorama/LayerInferrer.js +182 -0
  174. package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +24 -0
  175. package/dist/lib/service/panorama/ModuleDiscoverer.js +185 -0
  176. package/dist/lib/service/panorama/PanoramaAggregator.d.ts +29 -0
  177. package/dist/lib/service/panorama/PanoramaAggregator.js +228 -0
  178. package/dist/lib/service/panorama/PanoramaScanner.d.ts +52 -0
  179. package/dist/lib/service/panorama/PanoramaScanner.js +188 -0
  180. package/dist/lib/service/panorama/PanoramaService.d.ts +108 -0
  181. package/dist/lib/service/panorama/PanoramaService.js +220 -0
  182. package/dist/lib/service/panorama/PanoramaTypes.d.ts +134 -0
  183. package/dist/lib/service/panorama/PanoramaTypes.js +6 -0
  184. package/dist/lib/service/panorama/RoleRefiner.d.ts +48 -0
  185. package/dist/lib/service/panorama/RoleRefiner.js +535 -0
  186. package/dist/lib/service/search/MultiSignalRanker.d.ts +1 -0
  187. package/dist/lib/service/search/MultiSignalRanker.js +16 -0
  188. package/dist/lib/service/search/SearchEngine.d.ts +1 -0
  189. package/dist/lib/service/search/SearchEngine.js +9 -1
  190. package/dist/lib/service/search/SearchTypes.d.ts +2 -0
  191. package/dist/lib/service/signal/HitRecorder.d.ts +68 -0
  192. package/dist/lib/service/signal/HitRecorder.js +173 -0
  193. package/dist/lib/service/skills/SignalCollector.d.ts +3 -1
  194. package/dist/lib/service/skills/SignalCollector.js +31 -1
  195. package/dist/lib/service/task/IntentExtractor.d.ts +58 -0
  196. package/dist/lib/service/task/IntentExtractor.js +142 -0
  197. package/dist/lib/service/task/PrimeSearchPipeline.d.ts +54 -0
  198. package/dist/lib/service/task/PrimeSearchPipeline.js +98 -0
  199. package/dist/lib/shared/constants.d.ts +0 -15
  200. package/dist/lib/shared/constants.js +0 -10
  201. package/dist/lib/shared/schemas/config.d.ts +4 -1
  202. package/dist/lib/shared/schemas/config.js +8 -1
  203. package/dist/lib/shared/schemas/mcp-tools.d.ts +41 -96
  204. package/dist/lib/shared/schemas/mcp-tools.js +59 -119
  205. package/dist/scripts/analyze-signals.d.ts +20 -0
  206. package/dist/scripts/analyze-signals.js +155 -0
  207. package/dist/scripts/diagnose-mcp.js +1 -1
  208. package/dist/scripts/release.js +2 -10
  209. package/package.json +4 -19
  210. package/skills/autosnippet-devdocs/SKILL.md +11 -8
  211. package/templates/claude-code/hooks/autosnippet-session.sh +10 -15
  212. package/templates/cursor-hooks/hooks/session-start.sh +1 -1
  213. package/templates/instructions/agent-static.md +2 -1
  214. package/templates/instructions/conventions.md +5 -6
  215. package/templates/recipes-setup/README.md +1 -2
  216. package/dashboard/dist/assets/icons-C1dUryS-.js +0 -1
  217. package/dashboard/dist/assets/index-D0whuycy.css +0 -1
  218. package/dashboard/dist/assets/index-DdvZE4Yd.js +0 -128
  219. package/dist/lib/domain/task/Task.d.ts +0 -140
  220. package/dist/lib/domain/task/Task.js +0 -254
  221. package/dist/lib/domain/task/TaskDependency.d.ts +0 -23
  222. package/dist/lib/domain/task/TaskDependency.js +0 -34
  223. package/dist/lib/domain/task/TaskIdGenerator.d.ts +0 -40
  224. package/dist/lib/domain/task/TaskIdGenerator.js +0 -75
  225. package/dist/lib/domain/task/index.d.ts +0 -4
  226. package/dist/lib/domain/task/index.js +0 -4
  227. package/dist/lib/http/routes/snippets.js +0 -49
  228. package/dist/lib/infrastructure/database/migrations/002_add_tasks.d.ts +0 -11
  229. package/dist/lib/infrastructure/database/migrations/002_add_tasks.js +0 -86
  230. package/dist/lib/platform/ClipboardManager.d.ts +0 -24
  231. package/dist/lib/platform/ClipboardManager.js +0 -142
  232. package/dist/lib/platform/NativeUi.d.ts +0 -53
  233. package/dist/lib/platform/NativeUi.js +0 -284
  234. package/dist/lib/platform/ios/index.d.ts +0 -38
  235. package/dist/lib/platform/ios/index.js +0 -42
  236. package/dist/lib/platform/ios/routes/spm.d.ts +0 -9
  237. package/dist/lib/platform/ios/routes/spm.js +0 -371
  238. package/dist/lib/platform/ios/snippet/PlaceholderConverter.d.ts +0 -21
  239. package/dist/lib/platform/ios/snippet/PlaceholderConverter.js +0 -48
  240. package/dist/lib/platform/ios/snippet/XcodeCodec.d.ts +0 -23
  241. package/dist/lib/platform/ios/snippet/XcodeCodec.js +0 -96
  242. package/dist/lib/platform/ios/spm/DependencyGraph.d.ts +0 -56
  243. package/dist/lib/platform/ios/spm/DependencyGraph.js +0 -195
  244. package/dist/lib/platform/ios/spm/PackageSwiftParser.d.ts +0 -69
  245. package/dist/lib/platform/ios/spm/PackageSwiftParser.js +0 -231
  246. package/dist/lib/platform/ios/spm/PathFinder.d.ts +0 -28
  247. package/dist/lib/platform/ios/spm/PathFinder.js +0 -117
  248. package/dist/lib/platform/ios/spm/PolicyEngine.d.ts +0 -44
  249. package/dist/lib/platform/ios/spm/PolicyEngine.js +0 -79
  250. package/dist/lib/platform/ios/spm/SpmHelper.d.ts +0 -102
  251. package/dist/lib/platform/ios/spm/SpmHelper.js +0 -464
  252. package/dist/lib/platform/ios/xcode/HeaderResolver.d.ts +0 -33
  253. package/dist/lib/platform/ios/xcode/HeaderResolver.js +0 -90
  254. package/dist/lib/platform/ios/xcode/SaveEventFilter.d.ts +0 -66
  255. package/dist/lib/platform/ios/xcode/SaveEventFilter.js +0 -142
  256. package/dist/lib/platform/ios/xcode/XcodeAutomation.d.ts +0 -71
  257. package/dist/lib/platform/ios/xcode/XcodeAutomation.js +0 -327
  258. package/dist/lib/platform/ios/xcode/XcodeImportResolver.d.ts +0 -130
  259. package/dist/lib/platform/ios/xcode/XcodeImportResolver.js +0 -404
  260. package/dist/lib/platform/ios/xcode/XcodeIntegration.d.ts +0 -89
  261. package/dist/lib/platform/ios/xcode/XcodeIntegration.js +0 -588
  262. package/dist/lib/platform/ios/xcode/XcodeWriteUtils.d.ts +0 -99
  263. package/dist/lib/platform/ios/xcode/XcodeWriteUtils.js +0 -190
  264. package/dist/lib/repository/task/TaskRepository.impl.d.ts +0 -171
  265. package/dist/lib/repository/task/TaskRepository.impl.js +0 -347
  266. package/dist/lib/service/automation/ActionPipeline.d.ts +0 -34
  267. package/dist/lib/service/automation/ActionPipeline.js +0 -53
  268. package/dist/lib/service/automation/AutomationOrchestrator.d.ts +0 -86
  269. package/dist/lib/service/automation/AutomationOrchestrator.js +0 -57
  270. package/dist/lib/service/automation/ContextCollector.d.ts +0 -24
  271. package/dist/lib/service/automation/ContextCollector.js +0 -35
  272. package/dist/lib/service/automation/DirectiveDetector.d.ts +0 -51
  273. package/dist/lib/service/automation/DirectiveDetector.js +0 -112
  274. package/dist/lib/service/automation/FileWatcher.d.ts +0 -51
  275. package/dist/lib/service/automation/FileWatcher.js +0 -366
  276. package/dist/lib/service/automation/TriggerResolver.d.ts +0 -36
  277. package/dist/lib/service/automation/TriggerResolver.js +0 -62
  278. package/dist/lib/service/automation/handlers/AlinkHandler.d.ts +0 -7
  279. package/dist/lib/service/automation/handlers/AlinkHandler.js +0 -80
  280. package/dist/lib/service/automation/handlers/CreateHandler.d.ts +0 -11
  281. package/dist/lib/service/automation/handlers/CreateHandler.js +0 -170
  282. package/dist/lib/service/automation/handlers/GuardHandler.d.ts +0 -17
  283. package/dist/lib/service/automation/handlers/GuardHandler.js +0 -218
  284. package/dist/lib/service/automation/handlers/HeaderHandler.d.ts +0 -2
  285. package/dist/lib/service/automation/handlers/HeaderHandler.js +0 -32
  286. package/dist/lib/service/automation/handlers/SearchHandler.d.ts +0 -11
  287. package/dist/lib/service/automation/handlers/SearchHandler.js +0 -278
  288. package/dist/lib/service/snippet/SnippetFactory.d.ts +0 -101
  289. package/dist/lib/service/snippet/SnippetFactory.js +0 -145
  290. package/dist/lib/service/snippet/SnippetInstaller.d.ts +0 -91
  291. package/dist/lib/service/snippet/SnippetInstaller.js +0 -276
  292. package/dist/lib/service/snippet/codecs/SnippetCodec.d.ts +0 -44
  293. package/dist/lib/service/snippet/codecs/SnippetCodec.js +0 -35
  294. package/dist/lib/service/snippet/codecs/VSCodeCodec.d.ts +0 -27
  295. package/dist/lib/service/snippet/codecs/VSCodeCodec.js +0 -82
  296. package/dist/lib/service/task/TaskGraphService.d.ts +0 -222
  297. package/dist/lib/service/task/TaskGraphService.js +0 -597
  298. package/dist/lib/service/task/TaskKnowledgeBridge.d.ts +0 -95
  299. package/dist/lib/service/task/TaskKnowledgeBridge.js +0 -298
  300. package/dist/lib/service/task/TaskReadyEngine.d.ts +0 -84
  301. package/dist/lib/service/task/TaskReadyEngine.js +0 -115
  302. package/dist/scripts/build-native-ui.d.ts +0 -3
  303. package/dist/scripts/build-native-ui.js +0 -62
  304. package/dist/scripts/init-snippets.d.ts +0 -30
  305. package/dist/scripts/init-snippets.js +0 -298
  306. package/dist/scripts/install-full.d.ts +0 -7
  307. package/dist/scripts/install-full.js +0 -38
  308. package/resources/native-ui/README.md +0 -29
  309. package/resources/native-ui/combined-window.swift +0 -494
  310. package/resources/native-ui/main.swift +0 -598
  311. package/scripts/postinstall-safe.mjs +0 -89
@@ -106,7 +106,9 @@ export class ToolExecutionPipeline {
106
106
  * 从 LoopContext.toolSchemas 中提取允许的工具名列表,
107
107
  * 拒绝不在列表中的调用(返回 error 提示)。
108
108
  *
109
- * before: 如果工具不在白名单中则短路返回 error
109
+ * Forge 集成:不在白名单的工具如果已由 ToolForge 锻造(存在于 ToolRegistry),则放行。
110
+ *
111
+ * before: 如果工具不在白名单中且非锻造工具则短路返回 error
110
112
  */
111
113
  export const allowlistGate = {
112
114
  name: 'allowlistGate',
@@ -118,6 +120,11 @@ export const allowlistGate = {
118
120
  }
119
121
  const allowedNames = new Set(schemas.map((s) => s.name || s.function?.name));
120
122
  if (!allowedNames.has(call.name)) {
123
+ // Forge fallback: 不在白名单但已注册到 ToolRegistry(如锻造的临时工具)则放行
124
+ if (ctx.runtime.toolRegistry?.has(call.name)) {
125
+ ctx.runtime.logger.info(`[ToolPipeline] Tool "${call.name}" not in allowlist but exists in registry (forged?) — allowed`);
126
+ return undefined;
127
+ }
121
128
  ctx.runtime.logger.warn(`[ToolPipeline] ⛔ Tool "${call.name}" not in allowlist — blocked (hallucinated call)`);
122
129
  return {
123
130
  blocked: true,
@@ -0,0 +1,58 @@
1
+ /**
2
+ * DynamicComposer — 运行时动态工具组合
3
+ *
4
+ * 将已有的原子工具按 sequential / parallel / conditional 策略组合成复合工具。
5
+ * 组合结果注册为临时工具(通过 TemporaryToolRegistry)。
6
+ *
7
+ * 与 PipelineStrategy 的区别:
8
+ * - PipelineStrategy 是 Agent 执行策略(Agent 层)
9
+ * - DynamicComposer 是工具组合(Tool 层),产出物是单个工具
10
+ */
11
+ interface ToolRegistryLike {
12
+ has(name: string): boolean;
13
+ execute(name: string, params: Record<string, unknown>, context?: Record<string, unknown>): Promise<unknown>;
14
+ }
15
+ export interface CompositionStep {
16
+ /** 要调用的工具名 */
17
+ tool: string;
18
+ /** 静态参数或从前一步结果构造参数的函数 */
19
+ args: Record<string, unknown> | ((prevResult: unknown) => Record<string, unknown>);
20
+ /** 可选:提取该步结果中的特定字段传给下一步 */
21
+ extractKey?: string;
22
+ }
23
+ export interface CompositionSpec {
24
+ /** 组合工具的名称 */
25
+ name: string;
26
+ /** 描述 */
27
+ description: string;
28
+ /** 执行步骤 */
29
+ steps: CompositionStep[];
30
+ /** 合并策略 */
31
+ mergeStrategy: 'sequential' | 'parallel';
32
+ /** JSON Schema 参数定义 */
33
+ parameters?: Record<string, unknown>;
34
+ }
35
+ export interface CompositionResult {
36
+ /** 是否成功 */
37
+ success: boolean;
38
+ /** 组合工具 handler */
39
+ handler?: (params: Record<string, unknown>, context: Record<string, unknown>) => Promise<unknown>;
40
+ /** 失败原因 */
41
+ error?: string;
42
+ }
43
+ export declare class DynamicComposer {
44
+ #private;
45
+ constructor(registry: ToolRegistryLike);
46
+ /**
47
+ * 验证组合 spec 的可行性(所有工具是否存在)
48
+ */
49
+ validate(spec: CompositionSpec): {
50
+ valid: boolean;
51
+ missingTools: string[];
52
+ };
53
+ /**
54
+ * 构建组合工具
55
+ */
56
+ compose(spec: CompositionSpec): CompositionResult;
57
+ }
58
+ export {};
@@ -0,0 +1,99 @@
1
+ /**
2
+ * DynamicComposer — 运行时动态工具组合
3
+ *
4
+ * 将已有的原子工具按 sequential / parallel / conditional 策略组合成复合工具。
5
+ * 组合结果注册为临时工具(通过 TemporaryToolRegistry)。
6
+ *
7
+ * 与 PipelineStrategy 的区别:
8
+ * - PipelineStrategy 是 Agent 执行策略(Agent 层)
9
+ * - DynamicComposer 是工具组合(Tool 层),产出物是单个工具
10
+ */
11
+ import Logger from '#infra/logging/Logger.js';
12
+ /* ────────────────────── Class ────────────────────── */
13
+ export class DynamicComposer {
14
+ #registry;
15
+ #logger = Logger.getInstance();
16
+ constructor(registry) {
17
+ this.#registry = registry;
18
+ }
19
+ /**
20
+ * 验证组合 spec 的可行性(所有工具是否存在)
21
+ */
22
+ validate(spec) {
23
+ const missing = [];
24
+ for (const step of spec.steps) {
25
+ if (!this.#registry.has(step.tool)) {
26
+ missing.push(step.tool);
27
+ }
28
+ }
29
+ return { valid: missing.length === 0, missingTools: missing };
30
+ }
31
+ /**
32
+ * 构建组合工具
33
+ */
34
+ compose(spec) {
35
+ // 验证
36
+ const { valid, missingTools } = this.validate(spec);
37
+ if (!valid) {
38
+ return {
39
+ success: false,
40
+ error: `Missing tools: ${missingTools.join(', ')}`,
41
+ };
42
+ }
43
+ if (spec.steps.length === 0) {
44
+ return {
45
+ success: false,
46
+ error: 'Composition must have at least one step',
47
+ };
48
+ }
49
+ const registry = this.#registry;
50
+ const logger = this.#logger;
51
+ // 根据策略构建 handler
52
+ const handler = spec.mergeStrategy === 'parallel'
53
+ ? this.#buildParallelHandler(spec, registry, logger)
54
+ : this.#buildSequentialHandler(spec, registry, logger);
55
+ return { success: true, handler };
56
+ }
57
+ /* ── Internal ── */
58
+ #buildSequentialHandler(spec, registry, logger) {
59
+ return async (params, context) => {
60
+ let prevResult = params;
61
+ for (const step of spec.steps) {
62
+ const args = typeof step.args === 'function' ? step.args(prevResult) : { ...step.args, ...params };
63
+ logger.debug(`DynamicComposer [${spec.name}]: executing step "${step.tool}"`);
64
+ const result = await registry.execute(step.tool, args, context);
65
+ if (step.extractKey && typeof result === 'object' && result !== null) {
66
+ prevResult = result[step.extractKey];
67
+ }
68
+ else {
69
+ prevResult = result;
70
+ }
71
+ }
72
+ return prevResult;
73
+ };
74
+ }
75
+ #buildParallelHandler(spec, registry, logger) {
76
+ return async (params, context) => {
77
+ logger.debug(`DynamicComposer [${spec.name}]: executing ${spec.steps.length} steps in parallel`);
78
+ const promises = spec.steps.map(async (step) => {
79
+ const args = typeof step.args === 'function' ? step.args(params) : { ...step.args, ...params };
80
+ const result = await registry.execute(step.tool, args, context);
81
+ if (step.extractKey && typeof result === 'object' && result !== null) {
82
+ return { tool: step.tool, result: result[step.extractKey] };
83
+ }
84
+ return { tool: step.tool, result };
85
+ });
86
+ const results = await Promise.allSettled(promises);
87
+ const merged = {};
88
+ for (const r of results) {
89
+ if (r.status === 'fulfilled') {
90
+ merged[r.value.tool] = r.value.result;
91
+ }
92
+ else {
93
+ merged[`error_${Object.keys(merged).length}`] = r.reason?.message ?? 'Unknown error';
94
+ }
95
+ }
96
+ return merged;
97
+ };
98
+ }
99
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * SandboxRunner — 工具锻造沙箱验证
3
+ *
4
+ * 在受限环境中执行锻造的工具代码 + 测试用例,验证安全性和正确性。
5
+ * 使用 Node.js vm 模块提供隔离执行环境。
6
+ *
7
+ * 安全约束:
8
+ * - 5s 执行超时
9
+ * - 禁止 require/import (无文件系统 / 网络 / 子进程)
10
+ * - 内存限制 via vm 上下文隔离
11
+ * - 只暴露 console.log, JSON, Math, Date, Array, Object, String 等纯函数
12
+ */
13
+ export interface SandboxTestCase {
14
+ /** 测试描述 */
15
+ description: string;
16
+ /** 调用参数 */
17
+ input: Record<string, unknown>;
18
+ /** 预期输出(用 deepEqual 比较) */
19
+ expectedOutput: unknown;
20
+ }
21
+ export interface SandboxResult {
22
+ /** 是否全部通过 */
23
+ success: boolean;
24
+ /** 各测试用例结果 */
25
+ testResults: Array<{
26
+ description: string;
27
+ passed: boolean;
28
+ actualOutput?: unknown;
29
+ error?: string;
30
+ }>;
31
+ /** 总执行时间 (ms) */
32
+ executionTime: number;
33
+ /** 安全检查结果 */
34
+ safetyCheck: {
35
+ passed: boolean;
36
+ violations: string[];
37
+ };
38
+ }
39
+ export declare class SandboxRunner {
40
+ #private;
41
+ /**
42
+ * 对工具代码进行安全检查
43
+ */
44
+ checkSafety(code: string): {
45
+ passed: boolean;
46
+ violations: string[];
47
+ };
48
+ /**
49
+ * 在沙箱中执行工具代码 + 测试用例
50
+ *
51
+ * @param code 工具函数代码(应 export default 或赋给 __toolHandler__)
52
+ * @param testCases 测试用例
53
+ */
54
+ run(code: string, testCases: SandboxTestCase[]): SandboxResult;
55
+ /**
56
+ * 从验证通过的代码创建可调用 handler
57
+ * 返回的 handler 每次调用都在新沙箱中执行(隔离)
58
+ */
59
+ createHandler(code: string): (params: Record<string, unknown>, context: Record<string, unknown>) => Promise<unknown>;
60
+ }
@@ -0,0 +1,251 @@
1
+ /**
2
+ * SandboxRunner — 工具锻造沙箱验证
3
+ *
4
+ * 在受限环境中执行锻造的工具代码 + 测试用例,验证安全性和正确性。
5
+ * 使用 Node.js vm 模块提供隔离执行环境。
6
+ *
7
+ * 安全约束:
8
+ * - 5s 执行超时
9
+ * - 禁止 require/import (无文件系统 / 网络 / 子进程)
10
+ * - 内存限制 via vm 上下文隔离
11
+ * - 只暴露 console.log, JSON, Math, Date, Array, Object, String 等纯函数
12
+ */
13
+ import { createContext, runInContext } from 'node:vm';
14
+ import Logger from '#infra/logging/Logger.js';
15
+ /* ────────────────────── Constants ────────────────────── */
16
+ const EXECUTION_TIMEOUT_MS = 5000;
17
+ /** 禁止使用的模式 */
18
+ const FORBIDDEN_PATTERNS = [
19
+ /\brequire\s*\(/,
20
+ /\bimport\s*\(/,
21
+ /\bprocess\b/,
22
+ /\b__dirname\b/,
23
+ /\b__filename\b/,
24
+ /\bglobal\b/,
25
+ /\bglobalThis\b/,
26
+ /\beval\s*\(/,
27
+ /\bFunction\s*\(/,
28
+ /\bfetch\s*\(/,
29
+ /\bXMLHttpRequest\b/,
30
+ /\bWebSocket\b/,
31
+ /\bchild_process\b/,
32
+ /\bfs\b\./,
33
+ /\bnet\b\./,
34
+ /\bhttp\b\./,
35
+ /\bhttps\b\./,
36
+ ];
37
+ /* ────────────────────── Class ────────────────────── */
38
+ export class SandboxRunner {
39
+ #logger = Logger.getInstance();
40
+ /**
41
+ * 对工具代码进行安全检查
42
+ */
43
+ checkSafety(code) {
44
+ const violations = [];
45
+ for (const pattern of FORBIDDEN_PATTERNS) {
46
+ if (pattern.test(code)) {
47
+ violations.push(`Forbidden pattern detected: ${pattern.source}`);
48
+ }
49
+ }
50
+ return { passed: violations.length === 0, violations };
51
+ }
52
+ /**
53
+ * 在沙箱中执行工具代码 + 测试用例
54
+ *
55
+ * @param code 工具函数代码(应 export default 或赋给 __toolHandler__)
56
+ * @param testCases 测试用例
57
+ */
58
+ run(code, testCases) {
59
+ const start = Date.now();
60
+ // 1. 安全检查
61
+ const safetyCheck = this.checkSafety(code);
62
+ if (!safetyCheck.passed) {
63
+ return {
64
+ success: false,
65
+ testResults: [],
66
+ executionTime: Date.now() - start,
67
+ safetyCheck,
68
+ };
69
+ }
70
+ // 2. 构建沙箱上下文 — 只暴露安全的全局对象
71
+ const logs = [];
72
+ const sandbox = createContext({
73
+ console: {
74
+ log: (...args) => logs.push(args.map(String).join(' ')),
75
+ warn: (...args) => logs.push(`[warn] ${args.map(String).join(' ')}`),
76
+ error: (...args) => logs.push(`[error] ${args.map(String).join(' ')}`),
77
+ },
78
+ JSON,
79
+ Math,
80
+ Date,
81
+ Array,
82
+ Object,
83
+ String,
84
+ Number,
85
+ Boolean,
86
+ RegExp,
87
+ Map,
88
+ Set,
89
+ Error,
90
+ TypeError,
91
+ RangeError,
92
+ parseInt,
93
+ parseFloat,
94
+ isNaN,
95
+ isFinite,
96
+ encodeURIComponent,
97
+ decodeURIComponent,
98
+ // 工具函数占位,由代码赋值
99
+ __toolHandler__: null,
100
+ });
101
+ // 3. 加载工具代码
102
+ try {
103
+ const wrappedCode = `${code}\n;(typeof toolHandler !== 'undefined') && (__toolHandler__ = toolHandler);`;
104
+ runInContext(wrappedCode, sandbox, {
105
+ timeout: EXECUTION_TIMEOUT_MS,
106
+ filename: 'forged-tool.js',
107
+ });
108
+ }
109
+ catch (err) {
110
+ return {
111
+ success: false,
112
+ testResults: [
113
+ {
114
+ description: 'Code loading',
115
+ passed: false,
116
+ error: `Failed to load tool code: ${err.message}`,
117
+ },
118
+ ],
119
+ executionTime: Date.now() - start,
120
+ safetyCheck,
121
+ };
122
+ }
123
+ const handler = sandbox.__toolHandler__;
124
+ if (typeof handler !== 'function') {
125
+ return {
126
+ success: false,
127
+ testResults: [
128
+ {
129
+ description: 'Handler check',
130
+ passed: false,
131
+ error: 'Tool code must define a `toolHandler` function',
132
+ },
133
+ ],
134
+ executionTime: Date.now() - start,
135
+ safetyCheck,
136
+ };
137
+ }
138
+ // 4. 执行测试用例
139
+ const testResults = [];
140
+ let allPassed = true;
141
+ for (const tc of testCases) {
142
+ try {
143
+ const testCode = `__toolHandler__(${JSON.stringify(tc.input)})`;
144
+ const actual = runInContext(testCode, sandbox, {
145
+ timeout: EXECUTION_TIMEOUT_MS,
146
+ filename: 'forged-tool-test.js',
147
+ });
148
+ const passed = SandboxRunner.#deepEqual(actual, tc.expectedOutput);
149
+ if (!passed) {
150
+ allPassed = false;
151
+ }
152
+ testResults.push({
153
+ description: tc.description,
154
+ passed,
155
+ actualOutput: actual,
156
+ error: passed
157
+ ? undefined
158
+ : `Expected ${JSON.stringify(tc.expectedOutput)}, got ${JSON.stringify(actual)}`,
159
+ });
160
+ }
161
+ catch (err) {
162
+ allPassed = false;
163
+ testResults.push({
164
+ description: tc.description,
165
+ passed: false,
166
+ error: err.message,
167
+ });
168
+ }
169
+ }
170
+ this.#logger.debug(`SandboxRunner: ${testResults.filter((t) => t.passed).length}/${testResults.length} tests passed`);
171
+ return {
172
+ success: allPassed,
173
+ testResults,
174
+ executionTime: Date.now() - start,
175
+ safetyCheck,
176
+ };
177
+ }
178
+ /**
179
+ * 从验证通过的代码创建可调用 handler
180
+ * 返回的 handler 每次调用都在新沙箱中执行(隔离)
181
+ */
182
+ createHandler(code) {
183
+ return async (params) => {
184
+ const sandbox = createContext({
185
+ console: { log: () => { }, warn: () => { }, error: () => { } },
186
+ JSON,
187
+ Math,
188
+ Date,
189
+ Array,
190
+ Object,
191
+ String,
192
+ Number,
193
+ Boolean,
194
+ RegExp,
195
+ Map,
196
+ Set,
197
+ Error,
198
+ TypeError,
199
+ RangeError,
200
+ parseInt,
201
+ parseFloat,
202
+ isNaN,
203
+ isFinite,
204
+ encodeURIComponent,
205
+ decodeURIComponent,
206
+ __toolHandler__: null,
207
+ });
208
+ const wrappedCode = `${code}\n;(typeof toolHandler !== 'undefined') && (__toolHandler__ = toolHandler);`;
209
+ runInContext(wrappedCode, sandbox, {
210
+ timeout: EXECUTION_TIMEOUT_MS,
211
+ filename: 'forged-tool.js',
212
+ });
213
+ const handler = sandbox.__toolHandler__;
214
+ if (typeof handler !== 'function') {
215
+ throw new Error('Forged tool code does not define a toolHandler function');
216
+ }
217
+ const execCode = `__toolHandler__(${JSON.stringify(params)})`;
218
+ const result = runInContext(execCode, sandbox, {
219
+ timeout: EXECUTION_TIMEOUT_MS,
220
+ filename: 'forged-tool-exec.js',
221
+ });
222
+ // 如果返回 Promise-like,需特殊处理(vm 里一般不会有真正的 Promise)
223
+ return result;
224
+ };
225
+ }
226
+ /** 简单深度比较 */
227
+ static #deepEqual(a, b) {
228
+ if (a === b) {
229
+ return true;
230
+ }
231
+ if (a === null || b === null || typeof a !== typeof b) {
232
+ return false;
233
+ }
234
+ if (typeof a !== 'object') {
235
+ return false;
236
+ }
237
+ const aObj = a;
238
+ const bObj = b;
239
+ const keysA = Object.keys(aObj);
240
+ const keysB = Object.keys(bObj);
241
+ if (keysA.length !== keysB.length) {
242
+ return false;
243
+ }
244
+ for (const key of keysA) {
245
+ if (!SandboxRunner.#deepEqual(aObj[key], bObj[key])) {
246
+ return false;
247
+ }
248
+ }
249
+ return true;
250
+ }
251
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * TemporaryToolRegistry — TTL 临时工具注册
3
+ *
4
+ * 在 ToolRegistry 之上增加 TTL 自动回收机制。
5
+ * 锻造的工具默认 30 分钟有效,到期自动从 ToolRegistry 中移除。
6
+ *
7
+ * 设计:
8
+ * - 装饰器模式,不修改 ToolRegistry 核心逻辑
9
+ * - 定期检查(60s 间隔)清理过期工具
10
+ * - 支持手动续期和提前回收
11
+ */
12
+ import type { SignalBus } from '#infra/signal/SignalBus.js';
13
+ interface ToolRegistryLike {
14
+ register(toolDef: {
15
+ name: string;
16
+ description: string;
17
+ parameters?: Record<string, unknown>;
18
+ handler: Function;
19
+ }): void;
20
+ unregister(name: string): boolean;
21
+ has(name: string): boolean;
22
+ }
23
+ export interface TemporaryTool {
24
+ name: string;
25
+ description: string;
26
+ parameters: Record<string, unknown>;
27
+ handler: (params: Record<string, unknown>, context: Record<string, unknown>) => Promise<unknown>;
28
+ /** 锻造模式 */
29
+ forgeMode: 'reuse' | 'compose' | 'generate';
30
+ /** 注册时间 (ms) */
31
+ registeredAt: number;
32
+ /** 过期时间 (ms),0 = never */
33
+ expiresAt: number;
34
+ }
35
+ export interface TemporaryToolInfo {
36
+ name: string;
37
+ forgeMode: string;
38
+ registeredAt: number;
39
+ expiresAt: number;
40
+ remainingMs: number;
41
+ }
42
+ export declare class TemporaryToolRegistry {
43
+ #private;
44
+ constructor(registry: ToolRegistryLike, options?: {
45
+ signalBus?: SignalBus;
46
+ });
47
+ /**
48
+ * 注册一个临时工具
49
+ */
50
+ registerTemporary(tool: Omit<TemporaryTool, 'registeredAt' | 'expiresAt'>, ttlMs?: number): void;
51
+ /**
52
+ * 手动回收临时工具
53
+ */
54
+ revoke(name: string): boolean;
55
+ /**
56
+ * 续期临时工具
57
+ */
58
+ renew(name: string, additionalMs?: number): boolean;
59
+ /**
60
+ * 清理过期工具
61
+ */
62
+ cleanup(): number;
63
+ /**
64
+ * 获取所有临时工具信息
65
+ */
66
+ list(): TemporaryToolInfo[];
67
+ /**
68
+ * 检查是否是临时工具
69
+ */
70
+ isTemporary(name: string): boolean;
71
+ /** 临时工具数量 */
72
+ get size(): number;
73
+ /** 停止定期清理(用于 shutdown) */
74
+ dispose(): void;
75
+ }
76
+ export {};