dr-claw 1.1.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 (287) hide show
  1. package/LICENSE +1380 -0
  2. package/NOTICE +17 -0
  3. package/README.md +875 -0
  4. package/README.zh-CN.md +857 -0
  5. package/dist/api-docs.html +878 -0
  6. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  7. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  8. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  9. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  10. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  11. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  12. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  13. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  14. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  15. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  16. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  17. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  18. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  19. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  20. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  21. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  22. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  23. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  24. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  25. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  26. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  27. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  28. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  29. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  30. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  31. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  32. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  33. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  34. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  35. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  36. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  37. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  38. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  39. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  40. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  41. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  42. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  43. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  44. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  45. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  46. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  47. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  48. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  49. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  50. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  51. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  52. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  53. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  54. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  55. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  56. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  57. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  58. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  59. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  60. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  61. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  62. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  63. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  64. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  65. package/dist/assets/_basePickBy-C0n1uo4u.js +1 -0
  66. package/dist/assets/_baseUniq-BRNmhFkc.js +1 -0
  67. package/dist/assets/arc-DOMBmC_A.js +1 -0
  68. package/dist/assets/architectureDiagram-VXUJARFQ-CtMWglbD.js +36 -0
  69. package/dist/assets/blockDiagram-VD42YOAC-DK_gTkJy.js +122 -0
  70. package/dist/assets/c4Diagram-YG6GDRKO-DrDAvsn7.js +10 -0
  71. package/dist/assets/channel-BFOE7OyC.js +1 -0
  72. package/dist/assets/chunk-4BX2VUAB-CGbhdZcN.js +1 -0
  73. package/dist/assets/chunk-55IACEB6-sGeFSxen.js +1 -0
  74. package/dist/assets/chunk-B4BG7PRW-RxgHAU_P.js +165 -0
  75. package/dist/assets/chunk-DI55MBZ5-CvHUXZrx.js +220 -0
  76. package/dist/assets/chunk-FMBD7UC4-Sn7cXVNU.js +15 -0
  77. package/dist/assets/chunk-QN33PNHL-bDKOHppN.js +1 -0
  78. package/dist/assets/chunk-QZHKN3VN-B9kN5LGm.js +1 -0
  79. package/dist/assets/chunk-TZMSLE5B-CCBe6len.js +1 -0
  80. package/dist/assets/classDiagram-2ON5EDUG-DQoMNYlY.js +1 -0
  81. package/dist/assets/classDiagram-v2-WZHVMYZB-DQoMNYlY.js +1 -0
  82. package/dist/assets/clone-BulQSblH.js +1 -0
  83. package/dist/assets/cose-bilkent-S5V4N54A-r6sLiHBW.js +1 -0
  84. package/dist/assets/cytoscape.esm-5J0xJHOV.js +321 -0
  85. package/dist/assets/dagre-6UL2VRFP-AbsaR1Oa.js +4 -0
  86. package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  87. package/dist/assets/diagram-PSM6KHXK-DjCvdUyy.js +24 -0
  88. package/dist/assets/diagram-QEK2KX5R-CqiocXkH.js +43 -0
  89. package/dist/assets/diagram-S2PKOQOG-D5ALeoII.js +24 -0
  90. package/dist/assets/erDiagram-Q2GNP2WA-C1AeOsiz.js +60 -0
  91. package/dist/assets/flowDiagram-NV44I4VS-C98ve_DO.js +162 -0
  92. package/dist/assets/ganttDiagram-JELNMOA3-3zdLvcxD.js +267 -0
  93. package/dist/assets/gitGraphDiagram-V2S2FVAM-nDuDMsHh.js +65 -0
  94. package/dist/assets/graph-Blm-emkR.js +1 -0
  95. package/dist/assets/index-B8Yutsnm.css +1 -0
  96. package/dist/assets/index-Cf6gyhc3.js +654 -0
  97. package/dist/assets/infoDiagram-HS3SLOUP-CmzE3q0R.js +2 -0
  98. package/dist/assets/init-Gi6I4Gst.js +1 -0
  99. package/dist/assets/journeyDiagram-XKPGCS4Q-CYaW7LrP.js +139 -0
  100. package/dist/assets/kanban-definition-3W4ZIXB7-mkmW7p0j.js +89 -0
  101. package/dist/assets/layout-Ct2kFIId.js +1 -0
  102. package/dist/assets/linear-CKG9EwIJ.js +1 -0
  103. package/dist/assets/mermaid.core-CaKcUnnd.js +250 -0
  104. package/dist/assets/mindmap-definition-VGOIOE7T-Bct-pYin.js +68 -0
  105. package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  106. package/dist/assets/pieDiagram-ADFJNKIX-C8wFD4Jr.js +30 -0
  107. package/dist/assets/quadrantDiagram-AYHSOK5B-CuiE_f46.js +7 -0
  108. package/dist/assets/requirementDiagram-UZGBJVZJ-C4v1CqU8.js +64 -0
  109. package/dist/assets/sankeyDiagram-TZEHDZUN-keAqqs-Y.js +10 -0
  110. package/dist/assets/sequenceDiagram-WL72ISMW-ClNbvKTB.js +145 -0
  111. package/dist/assets/stateDiagram-FKZM4ZOC-D8We-2vq.js +1 -0
  112. package/dist/assets/stateDiagram-v2-4FDKWEC3-BUURfjrE.js +1 -0
  113. package/dist/assets/timeline-definition-IT6M3QCI-DsvEMT5T.js +61 -0
  114. package/dist/assets/treemap-GDKQZRPO-TJrzN7Bj.js +162 -0
  115. package/dist/assets/vendor-codemirror-ansM-eig.js +33 -0
  116. package/dist/assets/vendor-react-BWF6YQQ3.js +8 -0
  117. package/dist/assets/vendor-xterm-DfcmCpbH.js +66 -0
  118. package/dist/assets/xychartDiagram-PRI3JC2R-BdATmY5F.js +7 -0
  119. package/dist/clear-cache.html +85 -0
  120. package/dist/convert-icons.md +53 -0
  121. package/dist/dr-claw.png +0 -0
  122. package/dist/favicon.png +0 -0
  123. package/dist/generate-icons.js +49 -0
  124. package/dist/icons/claude-ai-icon.svg +1 -0
  125. package/dist/icons/codex-white.svg +3 -0
  126. package/dist/icons/codex.svg +3 -0
  127. package/dist/icons/cursor-white.svg +12 -0
  128. package/dist/icons/cursor.svg +1 -0
  129. package/dist/icons/file.svg +16997 -0
  130. package/dist/icons/generate-icons.md +19 -0
  131. package/dist/icons/icon-128x128.png +0 -0
  132. package/dist/icons/icon-144x144.png +0 -0
  133. package/dist/icons/icon-152x152.png +0 -0
  134. package/dist/icons/icon-192x192.png +0 -0
  135. package/dist/icons/icon-384x384.png +0 -0
  136. package/dist/icons/icon-512x512.png +0 -0
  137. package/dist/icons/icon-72x72.png +0 -0
  138. package/dist/icons/icon-96x96.png +0 -0
  139. package/dist/icons/news/arxiv.svg +1 -0
  140. package/dist/icons/news/huggingface.svg +8 -0
  141. package/dist/icons/news/x-black.png +0 -0
  142. package/dist/icons/news/x-white.png +0 -0
  143. package/dist/icons/news/xiaohongshu.png +0 -0
  144. package/dist/index.html +51 -0
  145. package/dist/leveraged-cognition.png +0 -0
  146. package/dist/manifest.json +61 -0
  147. package/dist/screenshots/chat.png +0 -0
  148. package/dist/screenshots/new_claw.png +0 -0
  149. package/dist/screenshots/news_dashboard.png +0 -0
  150. package/dist/screenshots/project_dashboard.png +0 -0
  151. package/dist/screenshots/research_lab.png +0 -0
  152. package/dist/screenshots/skill_library.png +0 -0
  153. package/dist/screenshots/task_list.png +0 -0
  154. package/dist/screenshots/terminal_example.png +0 -0
  155. package/dist/screenshots/terminal_example1.png +0 -0
  156. package/dist/sw.js +58 -0
  157. package/dist/wechat-group-qr.jpg +0 -0
  158. package/package.json +133 -0
  159. package/public/api-docs.html +878 -0
  160. package/public/clear-cache.html +85 -0
  161. package/public/convert-icons.md +53 -0
  162. package/public/dr-claw.png +0 -0
  163. package/public/favicon.png +0 -0
  164. package/public/generate-icons.js +49 -0
  165. package/public/icons/claude-ai-icon.svg +1 -0
  166. package/public/icons/codex-white.svg +3 -0
  167. package/public/icons/codex.svg +3 -0
  168. package/public/icons/cursor-white.svg +12 -0
  169. package/public/icons/cursor.svg +1 -0
  170. package/public/icons/file.svg +16997 -0
  171. package/public/icons/generate-icons.md +19 -0
  172. package/public/icons/icon-128x128.png +0 -0
  173. package/public/icons/icon-144x144.png +0 -0
  174. package/public/icons/icon-152x152.png +0 -0
  175. package/public/icons/icon-192x192.png +0 -0
  176. package/public/icons/icon-384x384.png +0 -0
  177. package/public/icons/icon-512x512.png +0 -0
  178. package/public/icons/icon-72x72.png +0 -0
  179. package/public/icons/icon-96x96.png +0 -0
  180. package/public/icons/news/arxiv.svg +1 -0
  181. package/public/icons/news/huggingface.svg +8 -0
  182. package/public/icons/news/x-black.png +0 -0
  183. package/public/icons/news/x-white.png +0 -0
  184. package/public/icons/news/xiaohongshu.png +0 -0
  185. package/public/leveraged-cognition.png +0 -0
  186. package/public/manifest.json +61 -0
  187. package/public/screenshots/chat.png +0 -0
  188. package/public/screenshots/new_claw.png +0 -0
  189. package/public/screenshots/news_dashboard.png +0 -0
  190. package/public/screenshots/project_dashboard.png +0 -0
  191. package/public/screenshots/research_lab.png +0 -0
  192. package/public/screenshots/skill_library.png +0 -0
  193. package/public/screenshots/task_list.png +0 -0
  194. package/public/screenshots/terminal_example.png +0 -0
  195. package/public/screenshots/terminal_example1.png +0 -0
  196. package/public/sw.js +58 -0
  197. package/public/wechat-group-qr.jpg +0 -0
  198. package/scripts/export-skills-catalog-v2.mjs +746 -0
  199. package/scripts/fix-node-pty.js +45 -0
  200. package/scripts/gemini_image_core.py +470 -0
  201. package/scripts/install-python-tools.js +64 -0
  202. package/server/AGENTS.md +73 -0
  203. package/server/__tests__/gemini-legacy-thought.test.mjs +88 -0
  204. package/server/__tests__/runtimePorts.test.mjs +115 -0
  205. package/server/__tests__/session-delete.test.mjs +166 -0
  206. package/server/bin/compute-node +70 -0
  207. package/server/claude-sdk.js +799 -0
  208. package/server/cli-chat.js +488 -0
  209. package/server/cli.js +354 -0
  210. package/server/compute-node.js +439 -0
  211. package/server/constants/config.js +5 -0
  212. package/server/cursor-cli.js +340 -0
  213. package/server/database/auth.db +0 -0
  214. package/server/database/db.js +1852 -0
  215. package/server/database/init.sql +194 -0
  216. package/server/gemini-cli.js +1352 -0
  217. package/server/index.js +3154 -0
  218. package/server/load-env.js +71 -0
  219. package/server/local-gpu.js +860 -0
  220. package/server/middleware/auth.js +100 -0
  221. package/server/openai-codex.js +724 -0
  222. package/server/openrouter.js +890 -0
  223. package/server/project-token-usage.js +407 -0
  224. package/server/projects.js +3973 -0
  225. package/server/routes/agent.js +1272 -0
  226. package/server/routes/auth.js +128 -0
  227. package/server/routes/auto-research.js +558 -0
  228. package/server/routes/cli-auth.js +958 -0
  229. package/server/routes/codex.js +344 -0
  230. package/server/routes/commands.js +601 -0
  231. package/server/routes/compute.js +358 -0
  232. package/server/routes/cursor.js +795 -0
  233. package/server/routes/git.js +1348 -0
  234. package/server/routes/mcp-utils.js +48 -0
  235. package/server/routes/mcp.js +618 -0
  236. package/server/routes/news.js +711 -0
  237. package/server/routes/projects.js +633 -0
  238. package/server/routes/references.js +338 -0
  239. package/server/routes/settings.js +285 -0
  240. package/server/routes/skills.js +914 -0
  241. package/server/routes/taskmaster.js +2566 -0
  242. package/server/routes/telemetry.js +89 -0
  243. package/server/routes/user.js +155 -0
  244. package/server/scripts/fix_session_names.js +57 -0
  245. package/server/scripts/research-news/common_words.py +19 -0
  246. package/server/scripts/research-news/link_keywords.py +298 -0
  247. package/server/scripts/research-news/scan_existing_notes.py +266 -0
  248. package/server/scripts/research-news/scoring_utils.py +227 -0
  249. package/server/scripts/research-news/search_arxiv.py +842 -0
  250. package/server/scripts/research-news/search_huggingface.py +438 -0
  251. package/server/scripts/research-news/search_x.py +490 -0
  252. package/server/scripts/research-news/search_xiaohongshu.py +610 -0
  253. package/server/taskmaster-templates/README.md +150 -0
  254. package/server/taskmaster-templates/README.zh-CN.md +150 -0
  255. package/server/taskmaster-templates/ai-research-dataset.json +230 -0
  256. package/server/taskmaster-templates/ai-research-method-model.json +230 -0
  257. package/server/taskmaster-templates/ai-research-position-paper.json +230 -0
  258. package/server/telemetry.js +121 -0
  259. package/server/templates/AGENTS.md +103 -0
  260. package/server/templates/CLAUDE.md +104 -0
  261. package/server/templates/GEMINI.md +103 -0
  262. package/server/templates/cursor-project.md +108 -0
  263. package/server/templates/index.js +37 -0
  264. package/server/utils/__tests__/sessionTokenUsage.test.js +82 -0
  265. package/server/utils/auto-research-mailer.js +57 -0
  266. package/server/utils/cliResolution.js +170 -0
  267. package/server/utils/commandParser.js +303 -0
  268. package/server/utils/cursorCommand.js +61 -0
  269. package/server/utils/geminiApiKey.js +28 -0
  270. package/server/utils/gitConfig.js +24 -0
  271. package/server/utils/imageAttachmentFiles.js +35 -0
  272. package/server/utils/mcp-detector.js +198 -0
  273. package/server/utils/parsers/bibtex-parser.js +207 -0
  274. package/server/utils/permissions.js +100 -0
  275. package/server/utils/runtimePorts.js +212 -0
  276. package/server/utils/sessionFormatting.js +68 -0
  277. package/server/utils/sessionIndex.js +100 -0
  278. package/server/utils/sessionMode.js +95 -0
  279. package/server/utils/sessionTokenUsage.js +105 -0
  280. package/server/utils/taskmaster-websocket.js +129 -0
  281. package/server/utils/zotero-client.js +136 -0
  282. package/shared/errorClassifier.js +102 -0
  283. package/shared/geminiThinkingSupport.d.ts +22 -0
  284. package/shared/geminiThinkingSupport.js +96 -0
  285. package/shared/geminiThoughtParser.d.ts +8 -0
  286. package/shared/geminiThoughtParser.js +30 -0
  287. package/shared/modelConstants.js +139 -0
@@ -0,0 +1,230 @@
1
+ {
2
+ "id": "ai-research-method-model",
3
+ "name": "AI Research - Method/Model",
4
+ "description": "For algorithmic, architectural, and model innovation projects",
5
+ "domain": "ai-research",
6
+ "category": "ai-research",
7
+ "format": "research-brief-json",
8
+ "fileName": "research_brief.json",
9
+ "metaFields": [
10
+ { "key": "title", "label": "Paper Title", "path": "meta.title", "placeholder": "Optional project title" },
11
+ { "key": "lead_author", "label": "Lead Author", "path": "meta.lead_author", "placeholder": "Optional lead author" },
12
+ { "key": "target_venue", "label": "Target Venue", "path": "meta.target_venue", "placeholder": "Optional venue" }
13
+ ],
14
+ "sectionFields": {
15
+ "survey": [
16
+ { "key": "literature_scope", "label": "Literature Scope", "path": "sections.survey.literature_scope", "placeholder": "Search boundary, keywords, and covered subtopics" },
17
+ { "key": "key_references", "label": "Key References", "path": "sections.survey.key_references", "type": "array", "placeholder": "One reference or paper family per line" },
18
+ { "key": "synthesis_summary", "label": "Synthesis Summary", "path": "sections.survey.synthesis_summary", "placeholder": "Main trends, dominant baselines, unresolved tensions" },
19
+ { "key": "open_gaps", "label": "Open Gaps", "path": "sections.survey.open_gaps", "type": "array", "placeholder": "One gap per line" }
20
+ ],
21
+ "ideation": [
22
+ { "key": "research_goal", "label": "Research Goal", "path": "sections.ideation.research_goal", "placeholder": "Main hypothesis and expected gains" },
23
+ { "key": "problem_framing", "label": "Problem Framing", "path": "sections.ideation.problem_framing", "placeholder": "Novelty boundary vs prior work" },
24
+ { "key": "evidence_plan", "label": "Evidence Plan", "path": "sections.ideation.evidence_plan", "placeholder": "Related work and intended comparisons" },
25
+ { "key": "success_criteria", "label": "Success Criteria", "path": "sections.ideation.success_criteria", "type": "array", "placeholder": "One criterion per line" }
26
+ ],
27
+ "experiment": [
28
+ { "key": "hypothesis_or_validation_goal", "label": "Validation Goal", "path": "sections.experiment.hypothesis_or_validation_goal", "placeholder": "What should ablations prove?" },
29
+ { "key": "dataset_or_data_source", "label": "Dataset Plan", "path": "sections.experiment.dataset_or_data_source", "placeholder": "Datasets and splits" },
30
+ { "key": "method_or_protocol", "label": "Method Protocol", "path": "sections.experiment.method_or_protocol", "placeholder": "Architecture/training/inference plan" },
31
+ { "key": "evaluation_plan", "label": "Evaluation Plan", "path": "sections.experiment.evaluation_plan", "placeholder": "Metrics, robustness, significance tests" }
32
+ ],
33
+ "publication": [
34
+ { "key": "paper_outline", "label": "Paper Outline", "path": "sections.publication.paper_outline", "placeholder": "Contribution narrative and sections" },
35
+ { "key": "figures_tables_plan", "label": "Figures/Tables Plan", "path": "sections.publication.figures_tables_plan", "placeholder": "Ablation and benchmark tables" },
36
+ { "key": "artifact_plan", "label": "Artifact Plan", "path": "sections.publication.artifact_plan", "placeholder": "Code/config/repro script release" },
37
+ { "key": "submission_checklist", "label": "Submission Checklist", "path": "sections.publication.submission_checklist", "type": "array", "placeholder": "One item per line" }
38
+ ],
39
+ "promotion": [
40
+ { "key": "slide_outline", "label": "Slide Outline", "path": "sections.promotion.slide_outline", "placeholder": "One slide or scene per line" },
41
+ { "key": "deck_style", "label": "Deck Style", "path": "sections.promotion.deck_style", "placeholder": "Visual style, color, layout, and pacing guidance" },
42
+ { "key": "homepage_plan", "label": "Homepage Plan", "path": "sections.promotion.homepage_plan", "placeholder": "Sections, assets, links, and CTA for the project page" },
43
+ { "key": "tts_config", "label": "TTS Config", "path": "sections.promotion.tts_config", "placeholder": "Voice, engine, pacing, and narration constraints" },
44
+ { "key": "video_assembly_plan", "label": "Video Assembly Plan", "path": "sections.promotion.video_assembly_plan", "placeholder": "How slides, audio, captions, and demo clips should be assembled" }
45
+ ]
46
+ },
47
+ "pipeline": {
48
+ "version": "1.1",
49
+ "mode": "idea",
50
+ "stages": {
51
+ "survey": {
52
+ "required_elements": [
53
+ "sections.survey.literature_scope",
54
+ "sections.survey.synthesis_summary"
55
+ ],
56
+ "optional_elements": [
57
+ "sections.survey.key_references",
58
+ "sections.survey.open_gaps"
59
+ ],
60
+ "quality_gate": [
61
+ "Method families and strongest baselines are mapped",
62
+ "Open gaps connect directly to the proposed method direction"
63
+ ],
64
+ "task_blueprints": [
65
+ {
66
+ "id": "method_literature_landscape",
67
+ "title": "Map literature landscape and dominant baseline families",
68
+ "description": "Survey recent methods, identify dominant design patterns, and cluster representative baselines.",
69
+ "taskType": "exploration",
70
+ "recommended_skills": ["inno-deep-research", "academic-researcher"]
71
+ },
72
+ {
73
+ "id": "method_gap_synthesis",
74
+ "title": "Synthesize unresolved gaps for method innovation",
75
+ "description": "Summarize what current methods miss and where a new method can create measurable value.",
76
+ "taskType": "analysis",
77
+ "recommended_skills": ["inno-deep-research", "academic-researcher"]
78
+ }
79
+ ],
80
+ "recommended_skills": [
81
+ "inno-deep-research",
82
+ "academic-researcher"
83
+ ]
84
+ },
85
+ "ideation": {
86
+ "required_elements": [
87
+ "sections.ideation.research_goal",
88
+ "sections.ideation.problem_framing"
89
+ ],
90
+ "optional_elements": [
91
+ "sections.ideation.evidence_plan",
92
+ "sections.ideation.success_criteria"
93
+ ],
94
+ "quality_gate": [
95
+ "Novel method contribution over baselines is explicit",
96
+ "Claim boundaries and target setting are concrete"
97
+ ],
98
+ "task_blueprints": [
99
+ {
100
+ "id": "method_novelty_and_claim_definition",
101
+ "title": "Define novelty claim and theoretical motivation",
102
+ "description": "Clarify what is new, why it should work, and expected tradeoffs.",
103
+ "taskType": "analysis",
104
+ "recommended_skills": ["inno-idea-generation", "academic-researcher"]
105
+ },
106
+ {
107
+ "id": "method_design_space_and_baselines",
108
+ "title": "Map design space and baseline comparison plan",
109
+ "description": "Identify main design alternatives and strong baseline families.",
110
+ "taskType": "exploration",
111
+ "recommended_skills": ["inno-idea-generation", "inno-code-survey"]
112
+ }
113
+ ],
114
+ "recommended_skills": [
115
+ "inno-pipeline-planner",
116
+ "inno-idea-generation"
117
+ ]
118
+ },
119
+ "experiment": {
120
+ "required_elements": [
121
+ "sections.experiment.hypothesis_or_validation_goal",
122
+ "sections.experiment.method_or_protocol",
123
+ "sections.experiment.evaluation_plan"
124
+ ],
125
+ "optional_elements": [
126
+ "sections.experiment.dataset_or_data_source"
127
+ ],
128
+ "quality_gate": [
129
+ "Ablation matrix and training protocol are executable",
130
+ "Evaluation includes robustness and significance checks"
131
+ ],
132
+ "task_blueprints": [
133
+ {
134
+ "id": "method_implementation_and_repro_setup",
135
+ "title": "Implement method and reproducible training setup",
136
+ "description": "Prepare code path, hyperparameter defaults, seeds, and run manifests.",
137
+ "taskType": "implementation",
138
+ "recommended_skills": ["inno-experiment-dev"]
139
+ },
140
+ {
141
+ "id": "method_ablation_and_robustness_evaluation",
142
+ "title": "Run ablations, robustness checks, and statistical validation",
143
+ "description": "Execute core benchmarks, ablations, and reliability analysis.",
144
+ "taskType": "analysis",
145
+ "recommended_skills": ["inno-experiment-analysis"]
146
+ }
147
+ ],
148
+ "recommended_skills": [
149
+ "inno-experiment-dev",
150
+ "inno-experiment-analysis"
151
+ ]
152
+ },
153
+ "publication": {
154
+ "required_elements": [
155
+ "sections.publication.paper_outline",
156
+ "sections.publication.submission_checklist"
157
+ ],
158
+ "optional_elements": [
159
+ "sections.publication.figures_tables_plan",
160
+ "sections.publication.artifact_plan"
161
+ ],
162
+ "quality_gate": [
163
+ "Claims are aligned with empirical evidence",
164
+ "Figures/tables communicate ablations and comparisons clearly"
165
+ ],
166
+ "task_blueprints": [
167
+ {
168
+ "id": "method_results_narrative_and_figures",
169
+ "title": "Draft results narrative and key comparison figures",
170
+ "description": "Turn experiment outcomes into coherent claim-evidence storytelling.",
171
+ "taskType": "writing",
172
+ "recommended_skills": ["inno-paper-writing", "inno-reference-audit"]
173
+ },
174
+ {
175
+ "id": "method_repro_appendix_and_submission_polish",
176
+ "title": "Finalize reproducibility appendix and submission-ready manuscript",
177
+ "description": "Complete appendix/checklists and final manuscript polish for submission.",
178
+ "taskType": "writing",
179
+ "recommended_skills": ["inno-paper-writing"]
180
+ }
181
+ ],
182
+ "recommended_skills": [
183
+ "inno-paper-writing",
184
+ "inno-reference-audit"
185
+ ]
186
+ },
187
+ "promotion": {
188
+ "required_elements": [
189
+ "sections.promotion.slide_outline"
190
+ ],
191
+ "optional_elements": [
192
+ "sections.promotion.deck_style",
193
+ "sections.promotion.tts_config",
194
+ "sections.promotion.video_assembly_plan",
195
+ "sections.promotion.homepage_plan"
196
+ ],
197
+ "quality_gate": [
198
+ "Slide flow reflects the method contribution and strongest results",
199
+ "Homepage and narration plans are specific enough to produce assets"
200
+ ],
201
+ "task_blueprints": [
202
+ {
203
+ "id": "method_promotion_outline_and_script",
204
+ "title": "Draft slide outline, speaking track, and homepage structure",
205
+ "description": "Turn the paper narrative into a promotion-ready deck outline, narration plan, and homepage information architecture.",
206
+ "taskType": "scripting",
207
+ "recommended_skills": ["making-academic-presentations"]
208
+ },
209
+ {
210
+ "id": "method_promotion_visual_assets",
211
+ "title": "Generate slide visuals and supporting homepage assets",
212
+ "description": "Prepare presentation visuals and homepage-ready figures from paper assets.",
213
+ "taskType": "rendering",
214
+ "recommended_skills": ["making-academic-presentations"]
215
+ },
216
+ {
217
+ "id": "method_promotion_audio_video_delivery",
218
+ "title": "Produce narration audio and assemble delivery outputs",
219
+ "description": "Generate TTS narration and package slide, homepage, and demo-video deliverables.",
220
+ "taskType": "delivery",
221
+ "recommended_skills": ["making-academic-presentations"]
222
+ }
223
+ ],
224
+ "recommended_skills": [
225
+ "making-academic-presentations"
226
+ ]
227
+ }
228
+ }
229
+ }
230
+ }
@@ -0,0 +1,230 @@
1
+ {
2
+ "id": "ai-research-position-paper",
3
+ "name": "AI Research - Position Paper",
4
+ "description": "For argument-driven papers: framing, taxonomy, agenda, and critical synthesis",
5
+ "domain": "ai-research",
6
+ "category": "ai-research",
7
+ "format": "research-brief-json",
8
+ "fileName": "research_brief.json",
9
+ "metaFields": [
10
+ { "key": "title", "label": "Paper Title", "path": "meta.title", "placeholder": "Optional project title" },
11
+ { "key": "lead_author", "label": "Lead Author", "path": "meta.lead_author", "placeholder": "Optional lead author" },
12
+ { "key": "target_venue", "label": "Target Venue", "path": "meta.target_venue", "placeholder": "Optional venue" }
13
+ ],
14
+ "sectionFields": {
15
+ "survey": [
16
+ { "key": "literature_scope", "label": "Literature Scope", "path": "sections.survey.literature_scope", "placeholder": "Communities, debates, and time window to cover" },
17
+ { "key": "key_references", "label": "Key References", "path": "sections.survey.key_references", "type": "array", "placeholder": "One foundational or contradictory source per line" },
18
+ { "key": "synthesis_summary", "label": "Synthesis Summary", "path": "sections.survey.synthesis_summary", "placeholder": "What positions exist, where they agree, and where they clash" },
19
+ { "key": "open_gaps", "label": "Open Gaps", "path": "sections.survey.open_gaps", "type": "array", "placeholder": "One unresolved debate or synthesis gap per line" }
20
+ ],
21
+ "ideation": [
22
+ { "key": "research_goal", "label": "Core Thesis", "path": "sections.ideation.research_goal", "placeholder": "State your central claim" },
23
+ { "key": "problem_framing", "label": "Problem Framing", "path": "sections.ideation.problem_framing", "placeholder": "Why now and for whom" },
24
+ { "key": "evidence_plan", "label": "Evidence Plan", "path": "sections.ideation.evidence_plan", "placeholder": "Canonical + contradictory evidence" },
25
+ { "key": "success_criteria", "label": "Success Criteria", "path": "sections.ideation.success_criteria", "type": "array", "placeholder": "One criterion per line" }
26
+ ],
27
+ "experiment": [
28
+ { "key": "hypothesis_or_validation_goal", "label": "Validation Goal", "path": "sections.experiment.hypothesis_or_validation_goal", "placeholder": "What should empirical support validate?" },
29
+ { "key": "dataset_or_data_source", "label": "Data/Case Source", "path": "sections.experiment.dataset_or_data_source", "placeholder": "Case studies or datasets if needed" },
30
+ { "key": "method_or_protocol", "label": "Validation Protocol", "path": "sections.experiment.method_or_protocol", "placeholder": "Audit/survey/small-scale protocol" },
31
+ { "key": "evaluation_plan", "label": "Evaluation Plan", "path": "sections.experiment.evaluation_plan", "placeholder": "Internal/external validity checks" }
32
+ ],
33
+ "publication": [
34
+ { "key": "paper_outline", "label": "Paper Outline", "path": "sections.publication.paper_outline", "placeholder": "Argument structure and sections" },
35
+ { "key": "figures_tables_plan", "label": "Figures/Tables Plan", "path": "sections.publication.figures_tables_plan", "placeholder": "Taxonomy/checklist/evidence tables" },
36
+ { "key": "artifact_plan", "label": "Artifact Plan", "path": "sections.publication.artifact_plan", "placeholder": "Appendix and reproducibility artifacts" },
37
+ { "key": "submission_checklist", "label": "Submission Checklist", "path": "sections.publication.submission_checklist", "type": "array", "placeholder": "One item per line" }
38
+ ],
39
+ "promotion": [
40
+ { "key": "slide_outline", "label": "Slide Outline", "path": "sections.promotion.slide_outline", "placeholder": "Talk track or slide-by-slide outline" },
41
+ { "key": "deck_style", "label": "Deck Style", "path": "sections.promotion.deck_style", "placeholder": "Visual tone, pace, and audience framing" },
42
+ { "key": "homepage_plan", "label": "Homepage Plan", "path": "sections.promotion.homepage_plan", "placeholder": "Landing page structure, visuals, and references" },
43
+ { "key": "tts_config", "label": "TTS Config", "path": "sections.promotion.tts_config", "placeholder": "Voice, pacing, and narration constraints" },
44
+ { "key": "video_assembly_plan", "label": "Video Assembly Plan", "path": "sections.promotion.video_assembly_plan", "placeholder": "How to combine slides, narration, and optional demo footage" }
45
+ ]
46
+ },
47
+ "pipeline": {
48
+ "version": "1.1",
49
+ "mode": "idea",
50
+ "stages": {
51
+ "survey": {
52
+ "required_elements": [
53
+ "sections.survey.literature_scope",
54
+ "sections.survey.synthesis_summary"
55
+ ],
56
+ "optional_elements": [
57
+ "sections.survey.key_references",
58
+ "sections.survey.open_gaps"
59
+ ],
60
+ "quality_gate": [
61
+ "The surveyed debate space is explicit and balanced",
62
+ "Contradictions and synthesis gaps are documented clearly"
63
+ ],
64
+ "task_blueprints": [
65
+ {
66
+ "id": "position_debate_landscape",
67
+ "title": "Map the debate landscape and canonical positions",
68
+ "description": "Survey major viewpoints, representative sources, and the assumptions behind each position.",
69
+ "taskType": "exploration",
70
+ "recommended_skills": ["inno-deep-research", "academic-researcher"]
71
+ },
72
+ {
73
+ "id": "position_tension_synthesis",
74
+ "title": "Synthesize unresolved tensions and framing gaps",
75
+ "description": "Summarize where the literature disagrees and what conceptual gap the position paper should address.",
76
+ "taskType": "analysis",
77
+ "recommended_skills": ["inno-deep-research", "academic-researcher"]
78
+ }
79
+ ],
80
+ "recommended_skills": [
81
+ "inno-deep-research",
82
+ "academic-researcher"
83
+ ]
84
+ },
85
+ "ideation": {
86
+ "required_elements": [
87
+ "sections.ideation.research_goal",
88
+ "sections.ideation.problem_framing"
89
+ ],
90
+ "optional_elements": [
91
+ "sections.ideation.evidence_plan",
92
+ "sections.ideation.success_criteria"
93
+ ],
94
+ "quality_gate": [
95
+ "Core thesis and scope boundaries are testable and explicit",
96
+ "Counterarguments and alternative framings are acknowledged"
97
+ ],
98
+ "task_blueprints": [
99
+ {
100
+ "id": "position_thesis_and_scope_definition",
101
+ "title": "Formulate central thesis and argument scope",
102
+ "description": "Define the core position, audience, and limits of the argument.",
103
+ "taskType": "analysis",
104
+ "recommended_skills": ["inno-idea-generation", "academic-researcher"]
105
+ },
106
+ {
107
+ "id": "position_evidence_map_and_counterpoints",
108
+ "title": "Build evidence map with supporting and opposing views",
109
+ "description": "Collect canonical support and strongest counter-evidence for balance.",
110
+ "taskType": "exploration",
111
+ "recommended_skills": ["inno-idea-generation", "academic-researcher"]
112
+ }
113
+ ],
114
+ "recommended_skills": [
115
+ "inno-pipeline-planner",
116
+ "inno-idea-generation"
117
+ ]
118
+ },
119
+ "experiment": {
120
+ "required_elements": [
121
+ "sections.experiment.hypothesis_or_validation_goal",
122
+ "sections.experiment.method_or_protocol",
123
+ "sections.experiment.evaluation_plan"
124
+ ],
125
+ "optional_elements": [
126
+ "sections.experiment.dataset_or_data_source"
127
+ ],
128
+ "quality_gate": [
129
+ "Validation protocol is appropriate for argument claims",
130
+ "Evidence synthesis addresses internal and external validity"
131
+ ],
132
+ "task_blueprints": [
133
+ {
134
+ "id": "position_validation_protocol_design",
135
+ "title": "Design argument-validation protocol",
136
+ "description": "Specify survey/audit/case-study protocol to stress-test key claims.",
137
+ "taskType": "implementation",
138
+ "recommended_skills": ["inno-experiment-dev"]
139
+ },
140
+ {
141
+ "id": "position_synthesis_and_conflict_resolution",
142
+ "title": "Synthesize evidence and resolve claim conflicts",
143
+ "description": "Aggregate findings, reconcile contradictions, and refine claim strength.",
144
+ "taskType": "analysis",
145
+ "recommended_skills": ["inno-experiment-analysis"]
146
+ }
147
+ ],
148
+ "recommended_skills": [
149
+ "inno-experiment-dev",
150
+ "inno-experiment-analysis"
151
+ ]
152
+ },
153
+ "publication": {
154
+ "required_elements": [
155
+ "sections.publication.paper_outline",
156
+ "sections.publication.submission_checklist"
157
+ ],
158
+ "optional_elements": [
159
+ "sections.publication.figures_tables_plan",
160
+ "sections.publication.artifact_plan"
161
+ ],
162
+ "quality_gate": [
163
+ "Argument flow is coherent end-to-end",
164
+ "Taxonomy/checklists and evidence tables are publication-ready"
165
+ ],
166
+ "task_blueprints": [
167
+ {
168
+ "id": "position_taxonomy_and_argument_structure",
169
+ "title": "Draft taxonomy and argument structure",
170
+ "description": "Translate thesis into sectioned narrative with clear argumentative progression.",
171
+ "taskType": "writing",
172
+ "recommended_skills": ["inno-paper-writing", "inno-reference-audit"]
173
+ },
174
+ {
175
+ "id": "position_manuscript_finalization",
176
+ "title": "Finalize position manuscript and submission package",
177
+ "description": "Complete final revisions, checklist, and supplementary rationale artifacts.",
178
+ "taskType": "writing",
179
+ "recommended_skills": ["inno-paper-writing"]
180
+ }
181
+ ],
182
+ "recommended_skills": [
183
+ "inno-paper-writing",
184
+ "inno-reference-audit"
185
+ ]
186
+ },
187
+ "promotion": {
188
+ "required_elements": [
189
+ "sections.promotion.slide_outline"
190
+ ],
191
+ "optional_elements": [
192
+ "sections.promotion.deck_style",
193
+ "sections.promotion.tts_config",
194
+ "sections.promotion.video_assembly_plan",
195
+ "sections.promotion.homepage_plan"
196
+ ],
197
+ "quality_gate": [
198
+ "Deck and homepage communicate the thesis clearly to the target audience",
199
+ "Narration and delivery plan are specific enough to produce final assets"
200
+ ],
201
+ "task_blueprints": [
202
+ {
203
+ "id": "position_promotion_storyboard",
204
+ "title": "Storyboard the talk and homepage narrative",
205
+ "description": "Translate the position argument into a concise slide sequence, talk track, and homepage summary.",
206
+ "taskType": "scripting",
207
+ "recommended_skills": ["making-academic-presentations"]
208
+ },
209
+ {
210
+ "id": "position_promotion_visual_packaging",
211
+ "title": "Package visual assets for slides and homepage",
212
+ "description": "Prepare diagrams, highlight boxes, and supporting visuals for public-facing communication.",
213
+ "taskType": "rendering",
214
+ "recommended_skills": ["making-academic-presentations"]
215
+ },
216
+ {
217
+ "id": "position_promotion_delivery_outputs",
218
+ "title": "Generate narration and assemble promotion outputs",
219
+ "description": "Produce TTS or narration guidance and assemble shareable slide, homepage, and video deliverables.",
220
+ "taskType": "delivery",
221
+ "recommended_skills": ["making-academic-presentations"]
222
+ }
223
+ ],
224
+ "recommended_skills": [
225
+ "making-academic-presentations"
226
+ ]
227
+ }
228
+ }
229
+ }
230
+ }
@@ -0,0 +1,121 @@
1
+ import fetch from 'node-fetch';
2
+
3
+ const DEFAULT_TELEMETRY_ENDPOINT =
4
+ 'https://vibe-telemetry-collector-1002374823539.us-central1.run.app/events';
5
+ const DEFAULT_TELEMETRY_AUTH_TOKEN =
6
+ 'a02ba6627d6515a1b59521772f074c6bd9bfc2734c333760bd0b83acf28e1f71';
7
+
8
+ const TELEMETRY_ENDPOINT = (process.env.TELEMETRY_ENDPOINT ?? DEFAULT_TELEMETRY_ENDPOINT).trim();
9
+ const TELEMETRY_AUTH_TOKEN = (process.env.TELEMETRY_AUTH_TOKEN ?? DEFAULT_TELEMETRY_AUTH_TOKEN).trim();
10
+ const TELEMETRY_FORCE_DISABLE = process.env.TELEMETRY_FORCE_DISABLE === 'true';
11
+ const TELEMETRY_BATCH_SIZE = Math.max(1, Number.parseInt(process.env.TELEMETRY_BATCH_SIZE || '20', 10));
12
+ const TELEMETRY_FLUSH_INTERVAL_MS = Math.max(
13
+ 200,
14
+ Number.parseInt(process.env.TELEMETRY_FLUSH_INTERVAL_MS || '1500', 10),
15
+ );
16
+ const TELEMETRY_MAX_QUEUE = Math.max(100, Number.parseInt(process.env.TELEMETRY_MAX_QUEUE || '2000', 10));
17
+
18
+ let queue = [];
19
+ let flushTimer = null;
20
+ let isFlushing = false;
21
+
22
+ export function isTelemetryEnabled() {
23
+ return !TELEMETRY_FORCE_DISABLE && Boolean(TELEMETRY_ENDPOINT);
24
+ }
25
+
26
+ function scheduleFlush() {
27
+ if (flushTimer) {
28
+ return;
29
+ }
30
+ flushTimer = setTimeout(() => {
31
+ flushTimer = null;
32
+ flushTelemetryQueue().catch((error) => {
33
+ console.error('[telemetry] flush timer failed:', error);
34
+ });
35
+ }, TELEMETRY_FLUSH_INTERVAL_MS);
36
+ }
37
+
38
+ async function postEvents(events) {
39
+ const headers = {
40
+ 'Content-Type': 'application/json',
41
+ };
42
+ if (TELEMETRY_AUTH_TOKEN) {
43
+ headers.Authorization = `Bearer ${TELEMETRY_AUTH_TOKEN}`;
44
+ }
45
+
46
+ const response = await fetch(TELEMETRY_ENDPOINT, {
47
+ method: 'POST',
48
+ headers,
49
+ body: JSON.stringify({
50
+ source: 'dr-claw',
51
+ sentAt: new Date().toISOString(),
52
+ events,
53
+ }),
54
+ });
55
+
56
+ if (!response.ok) {
57
+ const body = await response.text().catch(() => '');
58
+ throw new Error(`HTTP ${response.status}${body ? `: ${body.slice(0, 300)}` : ''}`);
59
+ }
60
+ }
61
+
62
+ export async function flushTelemetryQueue() {
63
+ if (!isTelemetryEnabled() || isFlushing || queue.length === 0) {
64
+ return;
65
+ }
66
+
67
+ isFlushing = true;
68
+ const batch = queue.splice(0, TELEMETRY_BATCH_SIZE);
69
+
70
+ try {
71
+ await postEvents(batch);
72
+ } catch (error) {
73
+ // Requeue at front on transient failures, bounded to max queue size.
74
+ queue = [...batch, ...queue].slice(0, TELEMETRY_MAX_QUEUE);
75
+ console.error('[telemetry] failed to send events:', error.message || error);
76
+ } finally {
77
+ isFlushing = false;
78
+ if (queue.length > 0) {
79
+ scheduleFlush();
80
+ }
81
+ }
82
+ }
83
+
84
+ export function enqueueTelemetryEvent(event) {
85
+ if (!isTelemetryEnabled() || !event || typeof event !== 'object') {
86
+ return false;
87
+ }
88
+
89
+ queue.push({
90
+ ...event,
91
+ receivedAt: event.receivedAt || new Date().toISOString(),
92
+ });
93
+
94
+ if (queue.length > TELEMETRY_MAX_QUEUE) {
95
+ queue = queue.slice(queue.length - TELEMETRY_MAX_QUEUE);
96
+ }
97
+
98
+ if (queue.length >= TELEMETRY_BATCH_SIZE) {
99
+ flushTelemetryQueue().catch((error) => {
100
+ console.error('[telemetry] immediate flush failed:', error);
101
+ });
102
+ } else {
103
+ scheduleFlush();
104
+ }
105
+
106
+ return true;
107
+ }
108
+
109
+ export function enqueueTelemetryEvents(events) {
110
+ if (!Array.isArray(events) || events.length === 0) {
111
+ return 0;
112
+ }
113
+
114
+ let accepted = 0;
115
+ for (const event of events) {
116
+ if (enqueueTelemetryEvent(event)) {
117
+ accepted += 1;
118
+ }
119
+ }
120
+ return accepted;
121
+ }