universal-agent-protocol 0.5.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 (415) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +462 -0
  3. package/dist/analyzers/index.d.ts +3 -0
  4. package/dist/analyzers/index.d.ts.map +1 -0
  5. package/dist/analyzers/index.js +656 -0
  6. package/dist/analyzers/index.js.map +1 -0
  7. package/dist/bin/cli.d.ts +3 -0
  8. package/dist/bin/cli.d.ts.map +1 -0
  9. package/dist/bin/cli.js +506 -0
  10. package/dist/bin/cli.js.map +1 -0
  11. package/dist/bin/tool-calls.d.ts +3 -0
  12. package/dist/bin/tool-calls.d.ts.map +1 -0
  13. package/dist/bin/tool-calls.js +4 -0
  14. package/dist/bin/tool-calls.js.map +1 -0
  15. package/dist/cli/agent.d.ts +20 -0
  16. package/dist/cli/agent.d.ts.map +1 -0
  17. package/dist/cli/agent.js +434 -0
  18. package/dist/cli/agent.js.map +1 -0
  19. package/dist/cli/analyze.d.ts +7 -0
  20. package/dist/cli/analyze.d.ts.map +1 -0
  21. package/dist/cli/analyze.js +103 -0
  22. package/dist/cli/analyze.js.map +1 -0
  23. package/dist/cli/coord.d.ts +7 -0
  24. package/dist/cli/coord.d.ts.map +1 -0
  25. package/dist/cli/coord.js +138 -0
  26. package/dist/cli/coord.js.map +1 -0
  27. package/dist/cli/dashboard.d.ts +8 -0
  28. package/dist/cli/dashboard.d.ts.map +1 -0
  29. package/dist/cli/dashboard.js +704 -0
  30. package/dist/cli/dashboard.js.map +1 -0
  31. package/dist/cli/deploy.d.ts +19 -0
  32. package/dist/cli/deploy.d.ts.map +1 -0
  33. package/dist/cli/deploy.js +267 -0
  34. package/dist/cli/deploy.js.map +1 -0
  35. package/dist/cli/droids.d.ts +9 -0
  36. package/dist/cli/droids.d.ts.map +1 -0
  37. package/dist/cli/droids.js +227 -0
  38. package/dist/cli/droids.js.map +1 -0
  39. package/dist/cli/generate.d.ts +17 -0
  40. package/dist/cli/generate.d.ts.map +1 -0
  41. package/dist/cli/generate.js +432 -0
  42. package/dist/cli/generate.js.map +1 -0
  43. package/dist/cli/hooks.d.ts +9 -0
  44. package/dist/cli/hooks.d.ts.map +1 -0
  45. package/dist/cli/hooks.js +374 -0
  46. package/dist/cli/hooks.js.map +1 -0
  47. package/dist/cli/init.d.ts +11 -0
  48. package/dist/cli/init.d.ts.map +1 -0
  49. package/dist/cli/init.js +316 -0
  50. package/dist/cli/init.js.map +1 -0
  51. package/dist/cli/mcp-router.d.ts +16 -0
  52. package/dist/cli/mcp-router.d.ts.map +1 -0
  53. package/dist/cli/mcp-router.js +143 -0
  54. package/dist/cli/mcp-router.js.map +1 -0
  55. package/dist/cli/memory.d.ts +24 -0
  56. package/dist/cli/memory.d.ts.map +1 -0
  57. package/dist/cli/memory.js +877 -0
  58. package/dist/cli/memory.js.map +1 -0
  59. package/dist/cli/model.d.ts +15 -0
  60. package/dist/cli/model.d.ts.map +1 -0
  61. package/dist/cli/model.js +270 -0
  62. package/dist/cli/model.js.map +1 -0
  63. package/dist/cli/patterns.d.ts +26 -0
  64. package/dist/cli/patterns.d.ts.map +1 -0
  65. package/dist/cli/patterns.js +587 -0
  66. package/dist/cli/patterns.js.map +1 -0
  67. package/dist/cli/setup-mcp-router.d.ts +8 -0
  68. package/dist/cli/setup-mcp-router.d.ts.map +1 -0
  69. package/dist/cli/setup-mcp-router.js +163 -0
  70. package/dist/cli/setup-mcp-router.js.map +1 -0
  71. package/dist/cli/setup.d.ts +13 -0
  72. package/dist/cli/setup.d.ts.map +1 -0
  73. package/dist/cli/setup.js +146 -0
  74. package/dist/cli/setup.js.map +1 -0
  75. package/dist/cli/sync.d.ts +7 -0
  76. package/dist/cli/sync.d.ts.map +1 -0
  77. package/dist/cli/sync.js +26 -0
  78. package/dist/cli/sync.js.map +1 -0
  79. package/dist/cli/task.d.ts +33 -0
  80. package/dist/cli/task.d.ts.map +1 -0
  81. package/dist/cli/task.js +616 -0
  82. package/dist/cli/task.js.map +1 -0
  83. package/dist/cli/tool-calls.d.ts +8 -0
  84. package/dist/cli/tool-calls.d.ts.map +1 -0
  85. package/dist/cli/tool-calls.js +239 -0
  86. package/dist/cli/tool-calls.js.map +1 -0
  87. package/dist/cli/update.d.ts +10 -0
  88. package/dist/cli/update.d.ts.map +1 -0
  89. package/dist/cli/update.js +300 -0
  90. package/dist/cli/update.js.map +1 -0
  91. package/dist/cli/visualize.d.ts +77 -0
  92. package/dist/cli/visualize.d.ts.map +1 -0
  93. package/dist/cli/visualize.js +287 -0
  94. package/dist/cli/visualize.js.map +1 -0
  95. package/dist/cli/worktree.d.ts +9 -0
  96. package/dist/cli/worktree.d.ts.map +1 -0
  97. package/dist/cli/worktree.js +175 -0
  98. package/dist/cli/worktree.js.map +1 -0
  99. package/dist/coordination/capability-router.d.ts +79 -0
  100. package/dist/coordination/capability-router.d.ts.map +1 -0
  101. package/dist/coordination/capability-router.js +324 -0
  102. package/dist/coordination/capability-router.js.map +1 -0
  103. package/dist/coordination/database.d.ts +13 -0
  104. package/dist/coordination/database.d.ts.map +1 -0
  105. package/dist/coordination/database.js +131 -0
  106. package/dist/coordination/database.js.map +1 -0
  107. package/dist/coordination/deploy-batcher.d.ts +101 -0
  108. package/dist/coordination/deploy-batcher.d.ts.map +1 -0
  109. package/dist/coordination/deploy-batcher.js +565 -0
  110. package/dist/coordination/deploy-batcher.js.map +1 -0
  111. package/dist/coordination/index.d.ts +5 -0
  112. package/dist/coordination/index.d.ts.map +1 -0
  113. package/dist/coordination/index.js +5 -0
  114. package/dist/coordination/index.js.map +1 -0
  115. package/dist/coordination/service.d.ts +81 -0
  116. package/dist/coordination/service.d.ts.map +1 -0
  117. package/dist/coordination/service.js +603 -0
  118. package/dist/coordination/service.js.map +1 -0
  119. package/dist/generators/claude-md.d.ts +3 -0
  120. package/dist/generators/claude-md.d.ts.map +1 -0
  121. package/dist/generators/claude-md.js +977 -0
  122. package/dist/generators/claude-md.js.map +1 -0
  123. package/dist/generators/template-loader.d.ts +105 -0
  124. package/dist/generators/template-loader.d.ts.map +1 -0
  125. package/dist/generators/template-loader.js +291 -0
  126. package/dist/generators/template-loader.js.map +1 -0
  127. package/dist/index.d.ts +47 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +59 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/mcp-router/config/parser.d.ts +9 -0
  132. package/dist/mcp-router/config/parser.d.ts.map +1 -0
  133. package/dist/mcp-router/config/parser.js +174 -0
  134. package/dist/mcp-router/config/parser.js.map +1 -0
  135. package/dist/mcp-router/executor/client.d.ts +31 -0
  136. package/dist/mcp-router/executor/client.d.ts.map +1 -0
  137. package/dist/mcp-router/executor/client.js +187 -0
  138. package/dist/mcp-router/executor/client.js.map +1 -0
  139. package/dist/mcp-router/index.d.ts +22 -0
  140. package/dist/mcp-router/index.d.ts.map +1 -0
  141. package/dist/mcp-router/index.js +18 -0
  142. package/dist/mcp-router/index.js.map +1 -0
  143. package/dist/mcp-router/output-compressor.d.ts +26 -0
  144. package/dist/mcp-router/output-compressor.d.ts.map +1 -0
  145. package/dist/mcp-router/output-compressor.js +236 -0
  146. package/dist/mcp-router/output-compressor.js.map +1 -0
  147. package/dist/mcp-router/search/fuzzy.d.ts +26 -0
  148. package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
  149. package/dist/mcp-router/search/fuzzy.js +94 -0
  150. package/dist/mcp-router/search/fuzzy.js.map +1 -0
  151. package/dist/mcp-router/server.d.ts +50 -0
  152. package/dist/mcp-router/server.d.ts.map +1 -0
  153. package/dist/mcp-router/server.js +229 -0
  154. package/dist/mcp-router/server.js.map +1 -0
  155. package/dist/mcp-router/session-stats.d.ts +37 -0
  156. package/dist/mcp-router/session-stats.d.ts.map +1 -0
  157. package/dist/mcp-router/session-stats.js +56 -0
  158. package/dist/mcp-router/session-stats.js.map +1 -0
  159. package/dist/mcp-router/tools/discover.d.ts +37 -0
  160. package/dist/mcp-router/tools/discover.d.ts.map +1 -0
  161. package/dist/mcp-router/tools/discover.js +65 -0
  162. package/dist/mcp-router/tools/discover.js.map +1 -0
  163. package/dist/mcp-router/tools/execute.d.ts +43 -0
  164. package/dist/mcp-router/tools/execute.d.ts.map +1 -0
  165. package/dist/mcp-router/tools/execute.js +103 -0
  166. package/dist/mcp-router/tools/execute.js.map +1 -0
  167. package/dist/mcp-router/types.d.ts +62 -0
  168. package/dist/mcp-router/types.d.ts.map +1 -0
  169. package/dist/mcp-router/types.js +6 -0
  170. package/dist/mcp-router/types.js.map +1 -0
  171. package/dist/memory/adaptive-context.d.ts +146 -0
  172. package/dist/memory/adaptive-context.d.ts.map +1 -0
  173. package/dist/memory/adaptive-context.js +1022 -0
  174. package/dist/memory/adaptive-context.js.map +1 -0
  175. package/dist/memory/agent-scoped-memory.d.ts +67 -0
  176. package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
  177. package/dist/memory/agent-scoped-memory.js +126 -0
  178. package/dist/memory/agent-scoped-memory.js.map +1 -0
  179. package/dist/memory/backends/base.d.ts +18 -0
  180. package/dist/memory/backends/base.d.ts.map +1 -0
  181. package/dist/memory/backends/base.js +2 -0
  182. package/dist/memory/backends/base.js.map +1 -0
  183. package/dist/memory/backends/factory.d.ts +4 -0
  184. package/dist/memory/backends/factory.d.ts.map +1 -0
  185. package/dist/memory/backends/factory.js +53 -0
  186. package/dist/memory/backends/factory.js.map +1 -0
  187. package/dist/memory/backends/github.d.ts +22 -0
  188. package/dist/memory/backends/github.d.ts.map +1 -0
  189. package/dist/memory/backends/github.js +118 -0
  190. package/dist/memory/backends/github.js.map +1 -0
  191. package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
  192. package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
  193. package/dist/memory/backends/qdrant-cloud.js +168 -0
  194. package/dist/memory/backends/qdrant-cloud.js.map +1 -0
  195. package/dist/memory/context-compressor.d.ts +74 -0
  196. package/dist/memory/context-compressor.d.ts.map +1 -0
  197. package/dist/memory/context-compressor.js +289 -0
  198. package/dist/memory/context-compressor.js.map +1 -0
  199. package/dist/memory/correction-propagator.d.ts +44 -0
  200. package/dist/memory/correction-propagator.d.ts.map +1 -0
  201. package/dist/memory/correction-propagator.js +156 -0
  202. package/dist/memory/correction-propagator.js.map +1 -0
  203. package/dist/memory/daily-log.d.ts +67 -0
  204. package/dist/memory/daily-log.d.ts.map +1 -0
  205. package/dist/memory/daily-log.js +143 -0
  206. package/dist/memory/daily-log.js.map +1 -0
  207. package/dist/memory/dynamic-retrieval.d.ts +110 -0
  208. package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
  209. package/dist/memory/dynamic-retrieval.js +688 -0
  210. package/dist/memory/dynamic-retrieval.js.map +1 -0
  211. package/dist/memory/embeddings.d.ts +116 -0
  212. package/dist/memory/embeddings.d.ts.map +1 -0
  213. package/dist/memory/embeddings.js +461 -0
  214. package/dist/memory/embeddings.js.map +1 -0
  215. package/dist/memory/hierarchical-memory.d.ts +141 -0
  216. package/dist/memory/hierarchical-memory.d.ts.map +1 -0
  217. package/dist/memory/hierarchical-memory.js +477 -0
  218. package/dist/memory/hierarchical-memory.js.map +1 -0
  219. package/dist/memory/memory-consolidator.d.ts +124 -0
  220. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  221. package/dist/memory/memory-consolidator.js +514 -0
  222. package/dist/memory/memory-consolidator.js.map +1 -0
  223. package/dist/memory/memory-maintenance.d.ts +39 -0
  224. package/dist/memory/memory-maintenance.d.ts.map +1 -0
  225. package/dist/memory/memory-maintenance.js +305 -0
  226. package/dist/memory/memory-maintenance.js.map +1 -0
  227. package/dist/memory/model-router.d.ts +102 -0
  228. package/dist/memory/model-router.d.ts.map +1 -0
  229. package/dist/memory/model-router.js +448 -0
  230. package/dist/memory/model-router.js.map +1 -0
  231. package/dist/memory/multi-view-memory.d.ts +134 -0
  232. package/dist/memory/multi-view-memory.d.ts.map +1 -0
  233. package/dist/memory/multi-view-memory.js +420 -0
  234. package/dist/memory/multi-view-memory.js.map +1 -0
  235. package/dist/memory/prepopulate.d.ts +76 -0
  236. package/dist/memory/prepopulate.d.ts.map +1 -0
  237. package/dist/memory/prepopulate.js +815 -0
  238. package/dist/memory/prepopulate.js.map +1 -0
  239. package/dist/memory/semantic-compression.d.ts +77 -0
  240. package/dist/memory/semantic-compression.d.ts.map +1 -0
  241. package/dist/memory/semantic-compression.js +348 -0
  242. package/dist/memory/semantic-compression.js.map +1 -0
  243. package/dist/memory/serverless-qdrant.d.ts +102 -0
  244. package/dist/memory/serverless-qdrant.d.ts.map +1 -0
  245. package/dist/memory/serverless-qdrant.js +369 -0
  246. package/dist/memory/serverless-qdrant.js.map +1 -0
  247. package/dist/memory/short-term/factory.d.ts +26 -0
  248. package/dist/memory/short-term/factory.d.ts.map +1 -0
  249. package/dist/memory/short-term/factory.js +28 -0
  250. package/dist/memory/short-term/factory.js.map +1 -0
  251. package/dist/memory/short-term/indexeddb.d.ts +25 -0
  252. package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
  253. package/dist/memory/short-term/indexeddb.js +64 -0
  254. package/dist/memory/short-term/indexeddb.js.map +1 -0
  255. package/dist/memory/short-term/schema.d.ts +6 -0
  256. package/dist/memory/short-term/schema.d.ts.map +1 -0
  257. package/dist/memory/short-term/schema.js +119 -0
  258. package/dist/memory/short-term/schema.js.map +1 -0
  259. package/dist/memory/short-term/sqlite.d.ts +50 -0
  260. package/dist/memory/short-term/sqlite.d.ts.map +1 -0
  261. package/dist/memory/short-term/sqlite.js +221 -0
  262. package/dist/memory/short-term/sqlite.js.map +1 -0
  263. package/dist/memory/speculative-cache.d.ts +111 -0
  264. package/dist/memory/speculative-cache.d.ts.map +1 -0
  265. package/dist/memory/speculative-cache.js +409 -0
  266. package/dist/memory/speculative-cache.js.map +1 -0
  267. package/dist/memory/task-classifier.d.ts +34 -0
  268. package/dist/memory/task-classifier.d.ts.map +1 -0
  269. package/dist/memory/task-classifier.js +300 -0
  270. package/dist/memory/task-classifier.js.map +1 -0
  271. package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
  272. package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
  273. package/dist/memory/terminal-bench-knowledge.js +399 -0
  274. package/dist/memory/terminal-bench-knowledge.js.map +1 -0
  275. package/dist/memory/write-gate.d.ts +39 -0
  276. package/dist/memory/write-gate.d.ts.map +1 -0
  277. package/dist/memory/write-gate.js +190 -0
  278. package/dist/memory/write-gate.js.map +1 -0
  279. package/dist/models/executor.d.ts +130 -0
  280. package/dist/models/executor.d.ts.map +1 -0
  281. package/dist/models/executor.js +383 -0
  282. package/dist/models/executor.js.map +1 -0
  283. package/dist/models/index.d.ts +15 -0
  284. package/dist/models/index.d.ts.map +1 -0
  285. package/dist/models/index.js +17 -0
  286. package/dist/models/index.js.map +1 -0
  287. package/dist/models/planner.d.ts +71 -0
  288. package/dist/models/planner.d.ts.map +1 -0
  289. package/dist/models/planner.js +344 -0
  290. package/dist/models/planner.js.map +1 -0
  291. package/dist/models/router.d.ts +75 -0
  292. package/dist/models/router.d.ts.map +1 -0
  293. package/dist/models/router.js +344 -0
  294. package/dist/models/router.js.map +1 -0
  295. package/dist/models/types.d.ts +370 -0
  296. package/dist/models/types.d.ts.map +1 -0
  297. package/dist/models/types.js +181 -0
  298. package/dist/models/types.js.map +1 -0
  299. package/dist/tasks/coordination.d.ts +74 -0
  300. package/dist/tasks/coordination.d.ts.map +1 -0
  301. package/dist/tasks/coordination.js +237 -0
  302. package/dist/tasks/coordination.js.map +1 -0
  303. package/dist/tasks/database.d.ts +14 -0
  304. package/dist/tasks/database.d.ts.map +1 -0
  305. package/dist/tasks/database.js +128 -0
  306. package/dist/tasks/database.js.map +1 -0
  307. package/dist/tasks/index.d.ts +5 -0
  308. package/dist/tasks/index.d.ts.map +1 -0
  309. package/dist/tasks/index.js +5 -0
  310. package/dist/tasks/index.js.map +1 -0
  311. package/dist/tasks/service.d.ts +39 -0
  312. package/dist/tasks/service.d.ts.map +1 -0
  313. package/dist/tasks/service.js +582 -0
  314. package/dist/tasks/service.js.map +1 -0
  315. package/dist/tasks/types.d.ts +224 -0
  316. package/dist/tasks/types.d.ts.map +1 -0
  317. package/dist/tasks/types.js +64 -0
  318. package/dist/tasks/types.js.map +1 -0
  319. package/dist/types/analysis.d.ts +82 -0
  320. package/dist/types/analysis.d.ts.map +1 -0
  321. package/dist/types/analysis.js +2 -0
  322. package/dist/types/analysis.js.map +1 -0
  323. package/dist/types/config.d.ts +3023 -0
  324. package/dist/types/config.d.ts.map +1 -0
  325. package/dist/types/config.js +292 -0
  326. package/dist/types/config.js.map +1 -0
  327. package/dist/types/coordination.d.ts +240 -0
  328. package/dist/types/coordination.d.ts.map +1 -0
  329. package/dist/types/coordination.js +43 -0
  330. package/dist/types/coordination.js.map +1 -0
  331. package/dist/types/index.d.ts +4 -0
  332. package/dist/types/index.d.ts.map +1 -0
  333. package/dist/types/index.js +4 -0
  334. package/dist/types/index.js.map +1 -0
  335. package/dist/utils/calculate-average.d.ts +15 -0
  336. package/dist/utils/calculate-average.d.ts.map +1 -0
  337. package/dist/utils/calculate-average.js +21 -0
  338. package/dist/utils/calculate-average.js.map +1 -0
  339. package/dist/utils/config-manager.d.ts +30 -0
  340. package/dist/utils/config-manager.d.ts.map +1 -0
  341. package/dist/utils/config-manager.js +41 -0
  342. package/dist/utils/config-manager.js.map +1 -0
  343. package/dist/utils/dijkstra.d.ts +17 -0
  344. package/dist/utils/dijkstra.d.ts.map +1 -0
  345. package/dist/utils/dijkstra.js +91 -0
  346. package/dist/utils/dijkstra.js.map +1 -0
  347. package/dist/utils/fetch-with-retry.d.ts +5 -0
  348. package/dist/utils/fetch-with-retry.d.ts.map +1 -0
  349. package/dist/utils/fetch-with-retry.js +61 -0
  350. package/dist/utils/fetch-with-retry.js.map +1 -0
  351. package/dist/utils/merge-claude-md.d.ts +28 -0
  352. package/dist/utils/merge-claude-md.d.ts.map +1 -0
  353. package/dist/utils/merge-claude-md.js +342 -0
  354. package/dist/utils/merge-claude-md.js.map +1 -0
  355. package/dist/utils/order-processor-refactored.d.ts +126 -0
  356. package/dist/utils/order-processor-refactored.d.ts.map +1 -0
  357. package/dist/utils/order-processor-refactored.js +165 -0
  358. package/dist/utils/order-processor-refactored.js.map +1 -0
  359. package/dist/utils/order-processor-strategy.d.ts +72 -0
  360. package/dist/utils/order-processor-strategy.d.ts.map +1 -0
  361. package/dist/utils/order-processor-strategy.js +158 -0
  362. package/dist/utils/order-processor-strategy.js.map +1 -0
  363. package/dist/utils/order-processor.d.ts +242 -0
  364. package/dist/utils/order-processor.d.ts.map +1 -0
  365. package/dist/utils/order-processor.js +370 -0
  366. package/dist/utils/order-processor.js.map +1 -0
  367. package/dist/utils/rate-limiter-simple.d.ts +58 -0
  368. package/dist/utils/rate-limiter-simple.d.ts.map +1 -0
  369. package/dist/utils/rate-limiter-simple.js +100 -0
  370. package/dist/utils/rate-limiter-simple.js.map +1 -0
  371. package/dist/utils/rate-limiter.d.ts +62 -0
  372. package/dist/utils/rate-limiter.d.ts.map +1 -0
  373. package/dist/utils/rate-limiter.js +150 -0
  374. package/dist/utils/rate-limiter.js.map +1 -0
  375. package/dist/utils/string-similarity.d.ts +37 -0
  376. package/dist/utils/string-similarity.d.ts.map +1 -0
  377. package/dist/utils/string-similarity.js +114 -0
  378. package/dist/utils/string-similarity.js.map +1 -0
  379. package/dist/utils/validate-json.d.ts +51 -0
  380. package/dist/utils/validate-json.d.ts.map +1 -0
  381. package/dist/utils/validate-json.js +99 -0
  382. package/dist/utils/validate-json.js.map +1 -0
  383. package/package.json +96 -0
  384. package/templates/CLAUDE.template.md +11 -0
  385. package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
  386. package/templates/CLAUDE_CODING.template.md +125 -0
  387. package/templates/CLAUDE_DROIDS.template.md +109 -0
  388. package/templates/CLAUDE_MEMORY.template.md +130 -0
  389. package/templates/CLAUDE_WORKFLOWS.template.md +136 -0
  390. package/templates/PROJECT.template.md +209 -0
  391. package/templates/SCHEMA.md +57 -0
  392. package/templates/archive/CLAUDE.template.root-v6.md +762 -0
  393. package/templates/archive/CLAUDE.template.v6.md +762 -0
  394. package/templates/hooks/pre-compact.sh +68 -0
  395. package/templates/hooks/session-start.sh +106 -0
  396. package/tools/agents/README.md +224 -0
  397. package/tools/agents/UAP/README.md +351 -0
  398. package/tools/agents/UAP/__init__.py +9 -0
  399. package/tools/agents/UAP/cli.py +675 -0
  400. package/tools/agents/UAP/version.py +2 -0
  401. package/tools/agents/benchmarks/benchmark_memory_systems.py +637 -0
  402. package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
  403. package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
  404. package/tools/agents/config/chat_template.jinja +172 -0
  405. package/tools/agents/docker-compose.qdrant.yml +24 -0
  406. package/tools/agents/migrations/apply.py +256 -0
  407. package/tools/agents/scripts/fix_qwen_chat_template.py +314 -0
  408. package/tools/agents/scripts/init_qdrant.py +151 -0
  409. package/tools/agents/scripts/memory_migration.py +518 -0
  410. package/tools/agents/scripts/migrate_memory_to_qdrant.py +113 -0
  411. package/tools/agents/scripts/query_memory.py +189 -0
  412. package/tools/agents/scripts/qwen_tool_call_test.py +419 -0
  413. package/tools/agents/scripts/qwen_tool_call_wrapper.py +517 -0
  414. package/tools/agents/scripts/start-services.sh +96 -0
  415. package/tools/agents/tests/test_uap_compliance.py +257 -0
@@ -0,0 +1,150 @@
1
+ /**
2
+ * A sliding-window rate limiter that tracks requests per client.
3
+ */
4
+ import { z } from 'zod';
5
+ import { AppError } from './validate-json.js';
6
+ export class RateLimiter {
7
+ static configSchema = z.object({
8
+ maxRequests: z
9
+ .number({
10
+ required_error: 'maxRequests is required',
11
+ invalid_type_error: 'maxRequests must be a number',
12
+ })
13
+ .int('maxRequests must be an integer')
14
+ .positive('maxRequests must be greater than 0'),
15
+ windowMs: z
16
+ .number({
17
+ required_error: 'windowMs is required',
18
+ invalid_type_error: 'windowMs must be a number',
19
+ })
20
+ .int('windowMs must be an integer')
21
+ .positive('windowMs must be greater than 0'),
22
+ });
23
+ static clientIdSchema = z
24
+ .string({
25
+ required_error: 'clientId is required',
26
+ invalid_type_error: 'clientId must be a string',
27
+ })
28
+ .min(1, 'clientId must not be empty');
29
+ maxRequests;
30
+ windowMs;
31
+ requests = new Map();
32
+ /**
33
+ * Creates a new RateLimiter instance.
34
+ *
35
+ * @param config - Configuration for request limits and window size
36
+ * @returns A configured RateLimiter instance
37
+ * @throws AppError when config is invalid
38
+ */
39
+ constructor(config) {
40
+ const validation = RateLimiter.configSchema.safeParse(config);
41
+ if (!validation.success) {
42
+ throw new AppError('Invalid rate limiter configuration', 'INVALID_CONFIG', {
43
+ errors: validation.error.errors,
44
+ received: config,
45
+ });
46
+ }
47
+ this.maxRequests = validation.data.maxRequests;
48
+ this.windowMs = validation.data.windowMs;
49
+ }
50
+ /**
51
+ * Checks if a request from the given client is allowed and records it if so.
52
+ *
53
+ * @param clientId - Identifier for the calling client
54
+ * @returns True if the request is allowed; otherwise false
55
+ * @throws AppError when clientId is invalid
56
+ */
57
+ isAllowed(clientId) {
58
+ this.ensureValidClientId(clientId);
59
+ const now = Date.now();
60
+ this.cleanupExpiredEntries(now, clientId);
61
+ const timestamps = this.requests.get(clientId) ?? [];
62
+ if (timestamps.length < this.maxRequests) {
63
+ timestamps.push(now);
64
+ this.requests.set(clientId, timestamps);
65
+ return true;
66
+ }
67
+ return false;
68
+ }
69
+ /**
70
+ * Returns the remaining number of requests for a client in the current window.
71
+ *
72
+ * @param clientId - Identifier for the calling client
73
+ * @returns Remaining number of requests in the window
74
+ * @throws AppError when clientId is invalid
75
+ */
76
+ getRemainingRequests(clientId) {
77
+ this.ensureValidClientId(clientId);
78
+ const now = Date.now();
79
+ this.cleanupExpiredEntries(now, clientId);
80
+ const timestamps = this.requests.get(clientId);
81
+ if (!timestamps) {
82
+ return this.maxRequests;
83
+ }
84
+ return Math.max(0, this.maxRequests - timestamps.length);
85
+ }
86
+ /**
87
+ * Resets rate limiting for a single client or all clients.
88
+ *
89
+ * @param clientId - Optional client identifier to reset; omit to reset all
90
+ * @returns Nothing
91
+ */
92
+ reset(clientId) {
93
+ if (clientId) {
94
+ this.ensureValidClientId(clientId);
95
+ this.requests.delete(clientId);
96
+ return;
97
+ }
98
+ this.requests.clear();
99
+ }
100
+ /**
101
+ * Removes expired timestamps and deletes empty client entries.
102
+ *
103
+ * @param now - Current timestamp used as reference
104
+ * @param clientId - Optional client identifier to scope cleanup
105
+ * @returns Nothing
106
+ */
107
+ cleanupExpiredEntries(now, clientId) {
108
+ const cutoff = now - this.windowMs;
109
+ if (clientId) {
110
+ const timestamps = this.requests.get(clientId);
111
+ if (!timestamps) {
112
+ return;
113
+ }
114
+ const validTimestamps = timestamps.filter((timestamp) => timestamp > cutoff);
115
+ if (validTimestamps.length === 0) {
116
+ this.requests.delete(clientId);
117
+ }
118
+ else {
119
+ this.requests.set(clientId, validTimestamps);
120
+ }
121
+ return;
122
+ }
123
+ for (const [id, timestamps] of this.requests.entries()) {
124
+ const validTimestamps = timestamps.filter((timestamp) => timestamp > cutoff);
125
+ if (validTimestamps.length === 0) {
126
+ this.requests.delete(id);
127
+ }
128
+ else {
129
+ this.requests.set(id, validTimestamps);
130
+ }
131
+ }
132
+ }
133
+ /**
134
+ * Ensures the client identifier is valid.
135
+ *
136
+ * @param clientId - Identifier to validate
137
+ * @returns Nothing
138
+ * @throws AppError when clientId is invalid
139
+ */
140
+ ensureValidClientId(clientId) {
141
+ const validation = RateLimiter.clientIdSchema.safeParse(clientId);
142
+ if (!validation.success) {
143
+ throw new AppError('Invalid client identifier', 'INVALID_CLIENT_ID', {
144
+ errors: validation.error.errors,
145
+ received: clientId,
146
+ });
147
+ }
148
+ }
149
+ }
150
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * String Similarity Utilities for UAP
3
+ *
4
+ * Shared text comparison functions used across memory compression,
5
+ * deduplication, and retrieval systems.
6
+ */
7
+ /**
8
+ * Calculate Jaccard similarity between two strings (word-level)
9
+ * Returns a value between 0 (no overlap) and 1 (identical)
10
+ */
11
+ export declare function jaccardSimilarity(a: string, b: string): number;
12
+ /**
13
+ * Calculate content hash for deduplication
14
+ * Uses SHA-256 for reliable collision resistance
15
+ */
16
+ export declare function contentHash(text: string): string;
17
+ /**
18
+ * Improved token estimation
19
+ * More accurate than simple length/4 for mixed code and prose
20
+ */
21
+ export declare function estimateTokensAccurate(text: string): number;
22
+ /**
23
+ * Simple stemming for keyword matching
24
+ * Handles common English suffixes for better fuzzy matching
25
+ */
26
+ export declare function simpleStem(word: string): string;
27
+ /**
28
+ * Fuzzy keyword match using stemming
29
+ * Returns true if any stemmed form matches
30
+ */
31
+ export declare function fuzzyKeywordMatch(text: string, keyword: string): boolean;
32
+ /**
33
+ * Calculate text similarity using multiple methods
34
+ * Returns weighted average for more robust comparison
35
+ */
36
+ export declare function textSimilarity(a: string, b: string): number;
37
+ //# sourceMappingURL=string-similarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-similarity.d.ts","sourceRoot":"","sources":["../../src/utils/string-similarity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAW9D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuB3D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB/C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAkBxE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAa3D"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * String Similarity Utilities for UAP
3
+ *
4
+ * Shared text comparison functions used across memory compression,
5
+ * deduplication, and retrieval systems.
6
+ */
7
+ import { createHash } from 'crypto';
8
+ /**
9
+ * Calculate Jaccard similarity between two strings (word-level)
10
+ * Returns a value between 0 (no overlap) and 1 (identical)
11
+ */
12
+ export function jaccardSimilarity(a, b) {
13
+ const setA = new Set(a.toLowerCase().split(/\s+/).filter(w => w.length > 1));
14
+ const setB = new Set(b.toLowerCase().split(/\s+/).filter(w => w.length > 1));
15
+ if (setA.size === 0 && setB.size === 0)
16
+ return 1;
17
+ if (setA.size === 0 || setB.size === 0)
18
+ return 0;
19
+ const intersection = new Set([...setA].filter(x => setB.has(x)));
20
+ const union = new Set([...setA, ...setB]);
21
+ return intersection.size / union.size;
22
+ }
23
+ /**
24
+ * Calculate content hash for deduplication
25
+ * Uses SHA-256 for reliable collision resistance
26
+ */
27
+ export function contentHash(text) {
28
+ return createHash('sha256')
29
+ .update(text.toLowerCase().replace(/\s+/g, ' ').trim())
30
+ .digest('hex')
31
+ .slice(0, 16); // 16 hex chars = 64 bits, sufficient for dedup
32
+ }
33
+ /**
34
+ * Improved token estimation
35
+ * More accurate than simple length/4 for mixed code and prose
36
+ */
37
+ export function estimateTokensAccurate(text) {
38
+ if (!text || text.length === 0)
39
+ return 0;
40
+ // Split by whitespace and count
41
+ const words = text.split(/\s+/).filter(w => w.length > 0);
42
+ // Count special characters that typically become separate tokens
43
+ const specialChars = (text.match(/[{}()\[\]<>:;,."'`@#$%^&*+=|\\/?!~-]/g) || []).length;
44
+ // Code tokens: variable names split on camelCase/snake_case
45
+ const codeTokens = (text.match(/[a-z][A-Z]|_[a-z]/g) || []).length;
46
+ // Numbers often tokenize separately
47
+ const numbers = (text.match(/\d+/g) || []).length;
48
+ // Base: words + adjustments
49
+ // Average English word is ~1.3 tokens, code identifiers ~1.5
50
+ const baseTokens = words.length * 1.3;
51
+ const specialTokens = specialChars * 0.5;
52
+ const extraCodeTokens = codeTokens * 0.3;
53
+ const numberTokens = numbers * 0.5;
54
+ return Math.ceil(baseTokens + specialTokens + extraCodeTokens + numberTokens);
55
+ }
56
+ /**
57
+ * Simple stemming for keyword matching
58
+ * Handles common English suffixes for better fuzzy matching
59
+ */
60
+ export function simpleStem(word) {
61
+ const lower = word.toLowerCase();
62
+ // Common suffixes to strip
63
+ const suffixes = ['ing', 'ed', 'es', 's', 'er', 'est', 'ly', 'tion', 'ment', 'ness', 'able', 'ible'];
64
+ for (const suffix of suffixes) {
65
+ if (lower.endsWith(suffix) && lower.length > suffix.length + 2) {
66
+ const stem = lower.slice(0, -suffix.length);
67
+ // Handle doubling (e.g., "running" -> "run")
68
+ if (stem.length > 2 && stem[stem.length - 1] === stem[stem.length - 2]) {
69
+ return stem.slice(0, -1);
70
+ }
71
+ return stem;
72
+ }
73
+ }
74
+ return lower;
75
+ }
76
+ /**
77
+ * Fuzzy keyword match using stemming
78
+ * Returns true if any stemmed form matches
79
+ */
80
+ export function fuzzyKeywordMatch(text, keyword) {
81
+ const textLower = text.toLowerCase();
82
+ const keywordLower = keyword.toLowerCase();
83
+ // Exact match first
84
+ if (textLower.includes(keywordLower))
85
+ return true;
86
+ // Stemmed match
87
+ const keywordStem = simpleStem(keywordLower);
88
+ const textWords = textLower.split(/\s+/);
89
+ for (const word of textWords) {
90
+ if (simpleStem(word) === keywordStem)
91
+ return true;
92
+ // Also check if the stem is contained in the word (for compound words)
93
+ if (word.includes(keywordStem) && keywordStem.length >= 3)
94
+ return true;
95
+ }
96
+ return false;
97
+ }
98
+ /**
99
+ * Calculate text similarity using multiple methods
100
+ * Returns weighted average for more robust comparison
101
+ */
102
+ export function textSimilarity(a, b) {
103
+ // Jaccard on words
104
+ const jaccard = jaccardSimilarity(a, b);
105
+ // Character-level containment
106
+ const aLower = a.toLowerCase();
107
+ const bLower = b.toLowerCase();
108
+ const shorter = aLower.length < bLower.length ? aLower : bLower;
109
+ const longer = aLower.length >= bLower.length ? aLower : bLower;
110
+ const containment = shorter.length > 0 && longer.includes(shorter) ? 0.8 : 0;
111
+ // Weighted combination
112
+ return Math.max(jaccard, containment);
113
+ }
114
+ //# sourceMappingURL=string-similarity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-similarity.js","sourceRoot":"","sources":["../../src/utils/string-similarity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAE7E,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAE1C,OAAO,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;SACtD,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,+CAA+C;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEzC,gCAAgC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1D,iEAAiE;IACjE,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAExF,4DAA4D;IAC5D,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAEnE,oCAAoC;IACpC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAElD,4BAA4B;IAC5B,6DAA6D;IAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IACtC,MAAM,aAAa,GAAG,YAAY,GAAG,GAAG,CAAC;IACzC,MAAM,eAAe,GAAG,UAAU,GAAG,GAAG,CAAC;IACzC,MAAM,YAAY,GAAG,OAAO,GAAG,GAAG,CAAC;IAEnC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,YAAY,CAAC,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAErG,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,6CAA6C;YAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBACvE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAe;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAE3C,oBAAoB;IACpB,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,gBAAgB;IAChB,MAAM,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAClD,uEAAuE;QACvE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACzE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,CAAS,EAAE,CAAS;IACjD,mBAAmB;IACnB,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExC,8BAA8B;IAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAChE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,uBAAuB;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Custom error class for application-level errors with detailed context.
3
+ * Extends the built-in Error class to provide additional metadata.
4
+ */
5
+ export declare class AppError extends Error {
6
+ /** Error code for programmatic handling */
7
+ readonly code: string;
8
+ /** Additional context about the error */
9
+ readonly context?: Record<string, unknown>;
10
+ /**
11
+ * Creates a new AppError instance.
12
+ *
13
+ * @param message - Human-readable error message
14
+ * @param code - Error code for programmatic handling
15
+ * @param context - Optional additional context
16
+ */
17
+ constructor(message: string, code: string, context?: Record<string, unknown>);
18
+ }
19
+ /**
20
+ * Validates that a string is valid JSON and parses it.
21
+ *
22
+ * Uses zod for runtime validation to ensure the input is a valid string
23
+ * before attempting to parse. The parsed result is then validated
24
+ * against a permissive schema that accepts any valid JSON value.
25
+ *
26
+ * @param input - The string to validate and parse as JSON
27
+ * @returns The parsed JSON value (object, array, string, number, boolean, or null)
28
+ * @throws AppError with code 'INVALID_JSON' if the string is not valid JSON
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * // Parse a valid JSON object
33
+ * const obj = validateAndParseJSON('{"name": "test", "value": 42}');
34
+ * // Returns: { name: "test", value: 42 }
35
+ *
36
+ * // Parse a valid JSON array
37
+ * const arr = validateAndParseJSON('[1, 2, 3]');
38
+ * // Returns: [1, 2, 3]
39
+ *
40
+ * // Invalid JSON throws AppError
41
+ * try {
42
+ * validateAndParseJSON('{invalid}');
43
+ * } catch (error) {
44
+ * if (error instanceof AppError) {
45
+ * console.log(error.code); // 'INVALID_JSON'
46
+ * }
47
+ * }
48
+ * ```
49
+ */
50
+ export declare function validateAndParseJSON(input: string): unknown;
51
+ //# sourceMappingURL=validate-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-json.d.ts","sourceRoot":"","sources":["../../src/utils/validate-json.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3C;;;;;;OAMG;gBAED,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYpC;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAmC3D"}
@@ -0,0 +1,99 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Custom error class for application-level errors with detailed context.
4
+ * Extends the built-in Error class to provide additional metadata.
5
+ */
6
+ export class AppError extends Error {
7
+ /** Error code for programmatic handling */
8
+ code;
9
+ /** Additional context about the error */
10
+ context;
11
+ /**
12
+ * Creates a new AppError instance.
13
+ *
14
+ * @param message - Human-readable error message
15
+ * @param code - Error code for programmatic handling
16
+ * @param context - Optional additional context
17
+ */
18
+ constructor(message, code, context) {
19
+ super(message);
20
+ this.name = 'AppError';
21
+ this.code = code;
22
+ this.context = context;
23
+ // Maintains proper stack trace for where error was thrown (V8 engines)
24
+ if (Error.captureStackTrace) {
25
+ Error.captureStackTrace(this, AppError);
26
+ }
27
+ }
28
+ }
29
+ /**
30
+ * Zod schema for validating that a value is valid JSON.
31
+ * Accepts any valid JSON value (object, array, string, number, boolean, null).
32
+ */
33
+ const jsonSchema = z.unknown();
34
+ /** Maximum number of characters of the original input to include in error context. */
35
+ const MAX_ERROR_CONTEXT_CHARS = 100;
36
+ /**
37
+ * Validates that a string is valid JSON and parses it.
38
+ *
39
+ * Uses zod for runtime validation to ensure the input is a valid string
40
+ * before attempting to parse. The parsed result is then validated
41
+ * against a permissive schema that accepts any valid JSON value.
42
+ *
43
+ * @param input - The string to validate and parse as JSON
44
+ * @returns The parsed JSON value (object, array, string, number, boolean, or null)
45
+ * @throws AppError with code 'INVALID_JSON' if the string is not valid JSON
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * // Parse a valid JSON object
50
+ * const obj = validateAndParseJSON('{"name": "test", "value": 42}');
51
+ * // Returns: { name: "test", value: 42 }
52
+ *
53
+ * // Parse a valid JSON array
54
+ * const arr = validateAndParseJSON('[1, 2, 3]');
55
+ * // Returns: [1, 2, 3]
56
+ *
57
+ * // Invalid JSON throws AppError
58
+ * try {
59
+ * validateAndParseJSON('{invalid}');
60
+ * } catch (error) {
61
+ * if (error instanceof AppError) {
62
+ * console.log(error.code); // 'INVALID_JSON'
63
+ * }
64
+ * }
65
+ * ```
66
+ */
67
+ export function validateAndParseJSON(input) {
68
+ const jsonStringSchema = z
69
+ .string({
70
+ required_error: 'Input is required',
71
+ invalid_type_error: 'Input must be a string',
72
+ })
73
+ .transform((value, ctx) => {
74
+ try {
75
+ return JSON.parse(value);
76
+ }
77
+ catch (error) {
78
+ ctx.addIssue({
79
+ code: z.ZodIssueCode.custom,
80
+ message: error instanceof Error
81
+ ? `Invalid JSON: ${error.message}`
82
+ : 'Invalid JSON',
83
+ });
84
+ return z.NEVER;
85
+ }
86
+ })
87
+ .pipe(jsonSchema);
88
+ const result = jsonStringSchema.safeParse(input);
89
+ if (!result.success) {
90
+ throw new AppError('Input must be valid JSON', 'INVALID_JSON', {
91
+ errors: result.error.errors,
92
+ input: input.length > MAX_ERROR_CONTEXT_CHARS
93
+ ? `${input.substring(0, MAX_ERROR_CONTEXT_CHARS)}...`
94
+ : input,
95
+ });
96
+ }
97
+ return result.data;
98
+ }
99
+ //# sourceMappingURL=validate-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-json.js","sourceRoot":"","sources":["../../src/utils/validate-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,2CAA2C;IAClC,IAAI,CAAS;IACtB,yCAAyC;IAChC,OAAO,CAA2B;IAE3C;;;;;;OAMG;IACH,YACE,OAAe,EACf,IAAY,EACZ,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,uEAAuE;QACvE,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAE/B,sFAAsF;AACtF,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,gBAAgB,GAAG,CAAC;SACvB,MAAM,CAAC;QACN,cAAc,EAAE,mBAAmB;QACnC,kBAAkB,EAAE,wBAAwB;KAC7C,CAAC;SACD,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EACL,KAAK,YAAY,KAAK;oBACpB,CAAC,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE;oBAClC,CAAC,CAAC,cAAc;aACrB,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;SACD,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,0BAA0B,EAAE,cAAc,EAAE;YAC7D,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;YAC3B,KAAK,EACH,KAAK,CAAC,MAAM,GAAG,uBAAuB;gBACpC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC,KAAK;gBACrD,CAAC,CAAC,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "universal-agent-protocol",
3
+ "version": "0.5.0",
4
+ "description": "Autonomous AI agent memory system with CLAUDE.md protocol enforcement",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "universal-agent-protocol": "dist/bin/cli.js",
10
+ "uap": "dist/bin/cli.js",
11
+ "uap-tool-calls": "dist/bin/tool-calls.js"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "start": "node dist/bin/cli.js",
17
+ "test": "vitest",
18
+ "test:coverage": "vitest --coverage",
19
+ "lint": "eslint src --ext .ts",
20
+ "lint:fix": "eslint src --ext .ts --fix",
21
+ "format": "prettier --write src/**/*.ts",
22
+ "prepare": "npm run build",
23
+ "install:web": "bash scripts/install-web.sh",
24
+ "install:desktop": "bash scripts/install-desktop.sh",
25
+ "install:all": "bash scripts/install.sh",
26
+ "postinstall": "echo '\n✨ Run: npx universal-agent-protocol init --interactive'",
27
+ "update-uap": "bash scripts/update-uap-compliance.sh",
28
+ "verify-uap": "bash scripts/verify-compliance.sh",
29
+ "check-claude": "bash scripts/verify-compliance.sh"
30
+ },
31
+ "keywords": [
32
+ "claude",
33
+ "claude-code",
34
+ "factory-ai",
35
+ "opencode",
36
+ "vscode",
37
+ "ai-agent",
38
+ "context",
39
+ "memory",
40
+ "worktree",
41
+ "cli"
42
+ ],
43
+ "author": "Miller Tech",
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/DammianMiller/universal-agent-protocol.git"
48
+ },
49
+ "homepage": "https://github.com/DammianMiller/universal-agent-protocol#readme",
50
+ "bugs": {
51
+ "url": "https://github.com/DammianMiller/universal-agent-protocol/issues"
52
+ },
53
+ "publishConfig": {
54
+ "access": "public",
55
+ "registry": "https://registry.npmjs.org/"
56
+ },
57
+ "engines": {
58
+ "node": ">=18.0.0"
59
+ },
60
+ "dependencies": {
61
+ "@octokit/rest": "^20.0.2",
62
+ "@qdrant/js-client-rest": "^1.11.0",
63
+ "better-sqlite3": "^11.0.0",
64
+ "chalk": "^5.3.0",
65
+ "commander": "^12.1.0",
66
+ "dexie": "^4.0.8",
67
+ "glob": "^10.3.10",
68
+ "handlebars": "^4.7.8",
69
+ "inquirer": "^9.2.12",
70
+ "js-yaml": "^4.1.0",
71
+ "ora": "^8.0.1",
72
+ "simple-git": "^3.22.0",
73
+ "zod": "^3.22.4"
74
+ },
75
+ "devDependencies": {
76
+ "@types/better-sqlite3": "^7.6.8",
77
+ "@types/inquirer": "^9.0.7",
78
+ "@types/js-yaml": "^4.0.9",
79
+ "@types/node": "^20.11.0",
80
+ "@typescript-eslint/eslint-plugin": "^6.19.0",
81
+ "@typescript-eslint/parser": "^6.19.0",
82
+ "eslint": "^8.56.0",
83
+ "fake-indexeddb": "^6.0.0",
84
+ "prettier": "^3.2.4",
85
+ "tsx": "^4.21.0",
86
+ "typescript": "^5.3.3",
87
+ "vitest": "^1.2.0"
88
+ },
89
+ "files": [
90
+ "dist",
91
+ "templates",
92
+ "tools/agents",
93
+ "README.md",
94
+ "LICENSE"
95
+ ]
96
+ }
@@ -0,0 +1,11 @@
1
+ <!-- CLAUDE.md v2.3.0 - 34 Model Outcome Success Optimizations + Hooks Enforcement -->
2
+ <!-- Optimizations #22-27: Template Compression, Structured Iteration, Inline Domain Knowledge, Early Impossibility Exit, Conditional Context, Remove Emphasis Theater -->
3
+ <!-- Optimizations #28-34: Mandatory Verifier Loop, Decoder-First Gate, Context Stripping, Environment Check, Schema Diff, State Protection, Conditional Domain -->
4
+
5
+ <!-- ENFORCEMENT_CHECKS: SESSION_START,DECISION_LOOP,MANDATORY_WORKTREE,PARALLEL_REVIEW,SCHEMA_DIFF,GATES,RTK_INCLUDES,PATTERN_ROUTER -->
6
+ <!-- TEMPLATE_VERSION: 2.3.0 -->
7
+ <!-- LAST_VALIDATED: 2026-03-09 -->
8
+
9
+ @hooks-session-start.md
10
+ @PreCompact.md
11
+