rdstudio 0.2.0__py3-none-any.whl

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 (251) hide show
  1. rdstudio/__init__.py +3 -0
  2. rdstudio/_node/rdstudio.mjs +59351 -0
  3. rdstudio/brief.py +46 -0
  4. rdstudio/build.py +218 -0
  5. rdstudio/classify.py +131 -0
  6. rdstudio/cli.py +369 -0
  7. rdstudio/config.py +115 -0
  8. rdstudio/gitlog.py +92 -0
  9. rdstudio/launcher.py +63 -0
  10. rdstudio/learner.py +187 -0
  11. rdstudio/mcp_server.py +313 -0
  12. rdstudio/okf.py +775 -0
  13. rdstudio/procedures.py +233 -0
  14. rdstudio/references.py +228 -0
  15. rdstudio/reports.py +75 -0
  16. rdstudio/scaffold.py +227 -0
  17. rdstudio/scopes.py +162 -0
  18. rdstudio/search.py +149 -0
  19. rdstudio/serve.py +214 -0
  20. rdstudio/store.py +161 -0
  21. rdstudio/templates/agents/critic.md +20 -0
  22. rdstudio/templates/agents/librarian.md +21 -0
  23. rdstudio/templates/agents/searcher.md +21 -0
  24. rdstudio/templates/agents_section.md +31 -0
  25. rdstudio/templates/claude_section.md +3 -0
  26. rdstudio/templates/knowledge/overview.md +20 -0
  27. rdstudio/templates/knowledge/tasks/bootstrap-knowledge-base.md +45 -0
  28. rdstudio/templates/skills/decision/SKILL.md +47 -0
  29. rdstudio/templates/skills/handoff/SKILL.md +18 -0
  30. rdstudio/templates/skills/ingest-ref/SKILL.md +32 -0
  31. rdstudio/templates/skills/lint-okf/SKILL.md +15 -0
  32. rdstudio/templates/skills/promote/SKILL.md +25 -0
  33. rdstudio/templates/skills/question/SKILL.md +33 -0
  34. rdstudio/templates/skills/record-okf/SKILL.md +61 -0
  35. rdstudio/templates/skills/report/SKILL.md +46 -0
  36. rdstudio/templates/skills/report/template.html +74 -0
  37. rdstudio/templates/skills/search-okf/SKILL.md +36 -0
  38. rdstudio/templates/skills/task/SKILL.md +51 -0
  39. rdstudio/web/app.js +140 -0
  40. rdstudio/web/fonts.css +48 -0
  41. rdstudio/web/icon-192.png +0 -0
  42. rdstudio/web/icon-512.png +0 -0
  43. rdstudio/web/index.html +109 -0
  44. rdstudio/web/js/data.js +125 -0
  45. rdstudio/web/js/diagrams.js +116 -0
  46. rdstudio/web/js/graph.js +396 -0
  47. rdstudio/web/js/knowledge.js +212 -0
  48. rdstudio/web/js/layout-worker.js +15 -0
  49. rdstudio/web/js/layout.js +226 -0
  50. rdstudio/web/js/learn.js +83 -0
  51. rdstudio/web/js/map.js +1293 -0
  52. rdstudio/web/js/markdown.js +173 -0
  53. rdstudio/web/js/pages.js +219 -0
  54. rdstudio/web/js/procedures.js +262 -0
  55. rdstudio/web/js/settings.js +95 -0
  56. rdstudio/web/js/util.js +99 -0
  57. rdstudio/web/report.css +35 -0
  58. rdstudio/web/report.js +104 -0
  59. rdstudio/web/style.css +566 -0
  60. rdstudio/web/sw.js +166 -0
  61. rdstudio/web/themes/cyber.css +139 -0
  62. rdstudio/web/themes/map.css +133 -0
  63. rdstudio/web/themes/notebook.css +134 -0
  64. rdstudio/web/themes/space.css +135 -0
  65. rdstudio/web/themes/studio.css +110 -0
  66. rdstudio/web/vendor/d3.min.js +2 -0
  67. rdstudio/web/vendor/fonts/atkinson-hyperlegible-next-latin-ext-wght-italic.woff2 +0 -0
  68. rdstudio/web/vendor/fonts/atkinson-hyperlegible-next-latin-ext-wght-normal.woff2 +0 -0
  69. rdstudio/web/vendor/fonts/atkinson-hyperlegible-next-latin-wght-italic.woff2 +0 -0
  70. rdstudio/web/vendor/fonts/atkinson-hyperlegible-next-latin-wght-normal.woff2 +0 -0
  71. rdstudio/web/vendor/fonts/caveat-latin-wght-normal.woff2 +0 -0
  72. rdstudio/web/vendor/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  73. rdstudio/web/vendor/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  74. rdstudio/web/vendor/fonts/ibm-plex-sans-latin-wght-italic.woff2 +0 -0
  75. rdstudio/web/vendor/fonts/ibm-plex-sans-latin-wght-normal.woff2 +0 -0
  76. rdstudio/web/vendor/fonts/inter-latin-opsz-italic.woff2 +0 -0
  77. rdstudio/web/vendor/fonts/inter-latin-opsz-normal.woff2 +0 -0
  78. rdstudio/web/vendor/fonts/jetbrains-mono-latin-wght-italic.woff2 +0 -0
  79. rdstudio/web/vendor/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
  80. rdstudio/web/vendor/fonts/literata-latin-ext-opsz-italic.woff2 +0 -0
  81. rdstudio/web/vendor/fonts/literata-latin-ext-opsz-normal.woff2 +0 -0
  82. rdstudio/web/vendor/fonts/literata-latin-opsz-italic.woff2 +0 -0
  83. rdstudio/web/vendor/fonts/literata-latin-opsz-normal.woff2 +0 -0
  84. rdstudio/web/vendor/fonts/source-sans-3-latin-wght-italic.woff2 +0 -0
  85. rdstudio/web/vendor/fonts/source-sans-3-latin-wght-normal.woff2 +0 -0
  86. rdstudio/web/vendor/fonts/source-serif-4-latin-opsz-italic.woff2 +0 -0
  87. rdstudio/web/vendor/fonts/source-serif-4-latin-opsz-normal.woff2 +0 -0
  88. rdstudio/web/vendor/hljs/github-dark.min.css +10 -0
  89. rdstudio/web/vendor/hljs/github.min.css +10 -0
  90. rdstudio/web/vendor/hljs/highlight.min.js +1262 -0
  91. rdstudio/web/vendor/hljs/julia.min.js +18 -0
  92. rdstudio/web/vendor/hljs/latex.min.js +33 -0
  93. rdstudio/web/vendor/hljs/matlab.min.js +15 -0
  94. rdstudio/web/vendor/katex/auto-render.min.js +1 -0
  95. rdstudio/web/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  96. rdstudio/web/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  97. rdstudio/web/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  98. rdstudio/web/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  99. rdstudio/web/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  100. rdstudio/web/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  101. rdstudio/web/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  102. rdstudio/web/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  103. rdstudio/web/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  104. rdstudio/web/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  105. rdstudio/web/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  106. rdstudio/web/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  107. rdstudio/web/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  108. rdstudio/web/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  109. rdstudio/web/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  110. rdstudio/web/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  111. rdstudio/web/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  112. rdstudio/web/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  113. rdstudio/web/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  114. rdstudio/web/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  115. rdstudio/web/vendor/katex/katex.min.css +1 -0
  116. rdstudio/web/vendor/katex/katex.min.js +1 -0
  117. rdstudio/web/vendor/licenses/atkinson-hyperlegible-next-OFL.txt +93 -0
  118. rdstudio/web/vendor/licenses/caveat-OFL.txt +93 -0
  119. rdstudio/web/vendor/licenses/d3-7.9.0.txt +13 -0
  120. rdstudio/web/vendor/licenses/highlightjs-cdn-assets-11.12.0.txt +29 -0
  121. rdstudio/web/vendor/licenses/ibm-plex-mono-OFL.txt +93 -0
  122. rdstudio/web/vendor/licenses/ibm-plex-sans-OFL.txt +93 -0
  123. rdstudio/web/vendor/licenses/inter-OFL.txt +93 -0
  124. rdstudio/web/vendor/licenses/jetbrains-mono-OFL.txt +93 -0
  125. rdstudio/web/vendor/licenses/katex-0.18.7.txt +21 -0
  126. rdstudio/web/vendor/licenses/literata-OFL.txt +93 -0
  127. rdstudio/web/vendor/licenses/markdown-it-15.0.2.txt +22 -0
  128. rdstudio/web/vendor/licenses/markdown-it-footnote-4.0.0.txt +22 -0
  129. rdstudio/web/vendor/licenses/markdown-it-texmath-1.0.0.txt +21 -0
  130. rdstudio/web/vendor/licenses/mermaid-12.0.0.txt +21 -0
  131. rdstudio/web/vendor/licenses/source-sans-3-OFL.txt +93 -0
  132. rdstudio/web/vendor/licenses/source-serif-4-OFL.txt +93 -0
  133. rdstudio/web/vendor/licenses/vega-6.4.0.txt +27 -0
  134. rdstudio/web/vendor/licenses/vega-embed-7.2.0.txt +27 -0
  135. rdstudio/web/vendor/licenses/vega-lite-6.4.3.txt +27 -0
  136. rdstudio/web/vendor/markdown-it-footnote.min.js +2 -0
  137. rdstudio/web/vendor/markdown-it.min.js +14 -0
  138. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/abnfDiagram-DGLNOSUI.mjs +1 -0
  139. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/architecture-7GRP2DOG-HF4J73XS.mjs +1 -0
  140. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/architectureDiagram-IU6H5EVY.mjs +36 -0
  141. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/blockDiagram-FSX6DT2V.mjs +140 -0
  142. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/c4Diagram-YNRVYILN.mjs +38 -0
  143. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-22SYA5HA.mjs +1 -0
  144. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-2FTYKNOQ.mjs +1 -0
  145. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-36VM3LGA.mjs +1 -0
  146. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-3SEI7E7V.mjs +1 -0
  147. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-3T2MNPEU.mjs +1 -0
  148. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-44AU3KAP.mjs +174 -0
  149. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-4MZOTL6B.mjs +1 -0
  150. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-52IMQVNL.mjs +1 -0
  151. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-5NYYYZGL.mjs +1 -0
  152. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-BOZ75642.mjs +15 -0
  153. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-CVBX6EWK.mjs +1 -0
  154. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-D36F7FYG.mjs +14 -0
  155. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-DEGLBX6O.mjs +213 -0
  156. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-F6PIGZHG.mjs +1 -0
  157. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-FE53TMRB.mjs +133 -0
  158. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-FNR2RGIF.mjs +1 -0
  159. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-GDOATIN3.mjs +32 -0
  160. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-H7BX327W.mjs +2 -0
  161. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-HI3EPXIC.mjs +2 -0
  162. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-JCBDXJ5W.mjs +1 -0
  163. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-JGXDHUYS.mjs +1 -0
  164. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-L2B47AAZ.mjs +1 -0
  165. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-LIEGGFIX.mjs +1 -0
  166. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-LLWYPJEZ.mjs +1 -0
  167. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-MFYRHTYG.mjs +1 -0
  168. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-MIE3LDYP.mjs +1 -0
  169. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-MLQVGYRW.mjs +1 -0
  170. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-MNT3HHAC.mjs +1 -0
  171. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-NRRTYJAG.mjs +1 -0
  172. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-OCMJQKYE.mjs +10 -0
  173. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-PKJCTQEK.mjs +339 -0
  174. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-QADHU5CF.mjs +2 -0
  175. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-QVIEFLGF.mjs +1 -0
  176. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-QX7LGXZU.mjs +1 -0
  177. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-R2KH53MI.mjs +1 -0
  178. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-RXM7Z7NK.mjs +2 -0
  179. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-S4TE5DX6.mjs +1 -0
  180. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-SDIBIOXT.mjs +1 -0
  181. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-TDFULVG6.mjs +1 -0
  182. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-TECWHJ6D.mjs +62 -0
  183. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-TINYC7RT.mjs +70 -0
  184. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-V3KJR4XU.mjs +1 -0
  185. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-VTMXW4ES.mjs +1 -0
  186. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-Y5NT6LW5.mjs +88 -0
  187. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-Y5O5OPKC.mjs +3 -0
  188. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-YZG4BXY6.mjs +1 -0
  189. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZZ52EIBP.mjs +1 -0
  190. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/classDiagram-v2-VV4INRHB.mjs +217 -0
  191. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/cose-bilkent-MSIMRU2B.mjs +1 -0
  192. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/cynefin-OW5HDTMX-KMPDV6GS.mjs +1 -0
  193. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/cynefinDiagram-KTGLXFXK.mjs +62 -0
  194. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/dagre-QJJCSHY4.mjs +4 -0
  195. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-2ZIM67RP.mjs +3 -0
  196. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-FYHH5O6R.mjs +24 -0
  197. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-LYLDACMS.mjs +200 -0
  198. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-TYT3HRBC.mjs +24 -0
  199. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-XVIN6YVD.mjs +30 -0
  200. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/diagram-ZO2NLLYC.mjs +41 -0
  201. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/ebnfDiagram-TU3FGH35.mjs +1 -0
  202. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/elk-GHAXNSLK.mjs +27 -0
  203. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/erDiagram-XID3VV23.mjs +99 -0
  204. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/eventmodeling-NTZA5JFV-P5QJSWSK.mjs +1 -0
  205. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/flowDiagram-WPHQAKTU.mjs +1 -0
  206. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/ganttDiagram-QACGSKG6.mjs +292 -0
  207. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/gitGraph-4MIJSDKK-V5NEQQYP.mjs +1 -0
  208. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/gitGraphDiagram-EB76O4HC.mjs +106 -0
  209. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/info-A6RAGUB7-IGBHH2L7.mjs +1 -0
  210. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/infoDiagram-343ZKIDN.mjs +2 -0
  211. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/ishikawaDiagram-UEEU5D75.mjs +70 -0
  212. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/journeyDiagram-4QTZOVLF.mjs +139 -0
  213. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/kanban-definition-VEJL4RG2.mjs +89 -0
  214. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/katex-QVRI4OIV.mjs +257 -0
  215. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/mindmap-definition-C5K5ZT7T.mjs +96 -0
  216. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/packet-AYTQ26CC-PJTKDECJ.mjs +1 -0
  217. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/pegDiagram-FHIILVJB.mjs +1 -0
  218. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/pie-WAS4IAKB-U3JFQXZN.mjs +1 -0
  219. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/pieDiagram-S76BU6V7.mjs +39 -0
  220. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/quadrantDiagram-HZBLWUZE.mjs +7 -0
  221. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/radar-RG4KPBEZ-7T2UW32D.mjs +1 -0
  222. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroad-74A4TZTK-DZY7ARDL.mjs +1 -0
  223. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroad-abnf-HS5TGJTU-LWS535ZK.mjs +1 -0
  224. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroad-ebnf-LZEXJU2U-EA3S4ZFM.mjs +1 -0
  225. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroad-peg-WCYAUIDC-DUKZONPX.mjs +1 -0
  226. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/railroadDiagram-R6RP3MQ2.mjs +1 -0
  227. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/requirementDiagram-SGBABQV6.mjs +84 -0
  228. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/sankeyDiagram-IM6M5BOW.mjs +40 -0
  229. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/sequenceDiagram-FGJOIFJ2.mjs +169 -0
  230. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/sizeCapture-ERV5D3W5.mjs +1 -0
  231. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/stateDiagram-v2-6KDGCZ5J.mjs +291 -0
  232. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/swimlanes-OJBUSBEF.mjs +1 -0
  233. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/swimlanesDiagram-LNXYTHDW.mjs +8 -0
  234. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/timeline-definition-7G6YQRTY.mjs +120 -0
  235. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/treeView-Q6P3EWNA-AABPVERA.mjs +1 -0
  236. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/treemap-WGGIJYW6-F2JSY3V3.mjs +1 -0
  237. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/usecaseDiagram-6Y6TMLBO.mjs +383 -0
  238. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/vennDiagram-6RODYPCK.mjs +34 -0
  239. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/wardley-WFR3VGLG-EIT5NWVN.mjs +1 -0
  240. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/wardleyDiagram-RFZKLAPA.mjs +78 -0
  241. rdstudio/web/vendor/mermaid/chunks/mermaid.esm.min/xychartDiagram-TWWI2QJZ.mjs +7 -0
  242. rdstudio/web/vendor/mermaid/mermaid.esm.min.mjs +14 -0
  243. rdstudio/web/vendor/texmath.js +368 -0
  244. rdstudio/web/vendor/vega/vega-embed.min.js +7 -0
  245. rdstudio/web/vendor/vega/vega-lite.min.js +2 -0
  246. rdstudio/web/vendor/vega/vega.min.js +1 -0
  247. rdstudio-0.2.0.dist-info/METADATA +201 -0
  248. rdstudio-0.2.0.dist-info/RECORD +251 -0
  249. rdstudio-0.2.0.dist-info/WHEEL +4 -0
  250. rdstudio-0.2.0.dist-info/entry_points.txt +3 -0
  251. rdstudio-0.2.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: promote
3
+ description: Move knowledge that is not specific to this project into the developer's global knowledge base. Use when a finding, procedure or practice would help in other projects, or when the developer asks to keep something globally.
4
+ ---
5
+
6
+ # Promote to the global knowledge base
7
+
8
+ The developer keeps a private, cross-project knowledge base (search it with
9
+ `scope: "global"`). Project and global knowledge never link to each other, so
10
+ a promoted concept must make sense on its own.
11
+
12
+ 1. **Propose, don't act.** Name the concept and say why it is general. Promote
13
+ only after the developer agrees.
14
+ 2. **Make it self-contained.** If it links to project concepts, either inline
15
+ the essential facts or accept that those links will not resolve in the
16
+ global base.
17
+ 3. **Promote:** use the rdstudio `promote` tool with the concept id. Use `keep: true`
18
+ to copy rather than move when the project still needs its own copy (the tool
19
+ refuses to move a concept other project concepts link to).
20
+ 4. Report the new global id to the developer.
21
+
22
+ Material that is general from the start (tooling habits, reading notes outside
23
+ this project) can be recorded straight into the global base with
24
+ the rdstudio `record` tool and `scope: "global"`, again only when the developer
25
+ asked for it.
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: question
3
+ description: Record an open question, or record the answer to one. Use when an unresolved question comes up that should not be forgotten, or when a recorded question gets answered.
4
+ ---
5
+
6
+ # Questions
7
+
8
+ ## Opening a question
9
+
10
+ Search `type: Question` first. Then record at `questions/<short-slug>`:
11
+
12
+ ```markdown
13
+ ---
14
+ type: Question
15
+ title: <the question, ending with ?>
16
+ description: <why it matters, one sentence>
17
+ tags: [open]
18
+ ---
19
+
20
+ # Question
21
+
22
+ The question in full, with context and what depends on it.
23
+
24
+ # Leads
25
+
26
+ What might answer it (references, experiments, people).
27
+ ```
28
+
29
+ ## Answering a question
30
+
31
+ Update the concept: add an `# Answer` section (with sources or the experiment
32
+ that settled it), change the `open` tag to `answered`, and link any decision
33
+ that followed. Keep the question text unchanged so the history reads clearly.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: record-okf
3
+ description: Record knowledge in the project knowledge base (OKF) — findings, designs, references, procedures, research notes. Use whenever something worth remembering was learned or settled.
4
+ ---
5
+
6
+ # Record knowledge
7
+
8
+ Write to the knowledge base through the rdstudio `record` tool, which stamps
9
+ provenance and regenerates indexes. Do not hand-edit `index.md` files; they are
10
+ generated.
11
+
12
+ ## Before writing
13
+
14
+ 1. Search first (the `search-okf` skill). Update an existing concept rather than creating
15
+ a near-duplicate.
16
+ 2. Pick the directory that fits; list the root with
17
+ the rdstudio `list_concepts` tool if unsure. Create a new directory only when no
18
+ existing one fits, and mention it to the developer.
19
+
20
+ ## A good concept
21
+
22
+ - **One idea per concept.** Split long material into linked concepts.
23
+ - **Frontmatter:** `type` (required; e.g. `Design`, `Decision`, `Question`,
24
+ `Task`, `Procedure`, `Reference`, `Research`, `Experiment`), `title`, and a
25
+ one-sentence `description` (it appears in indexes and search results). Add
26
+ `tags` sparingly.
27
+ - **Links** use bundle-absolute paths: `[model](/design/model.md)`. Linking to a
28
+ concept that does not exist yet is fine; it marks knowledge worth writing.
29
+ - **Rate links** by how consequential they are, with the link's title:
30
+ `[model](/design/model.md "requires")`. `requires`: this concept cannot be
31
+ understood without that one (a prerequisite). `uses`: relies on it in a key
32
+ fact, example or proof, but not to define it. `see also`: a forward reference
33
+ (something that builds on this concept) or a tangent. Unrated links count as
34
+ `uses`. The map filters by rating and hides links implied by chains of
35
+ others, so honest ratings make it clearer. Do not rate a link `requires` in
36
+ both directions unless the concepts truly depend on each other; the Review
37
+ tab flags such cycles.
38
+ - **Sources:** list external material under `sources` with a stable `id`, and
39
+ attribute claims with footnotes keyed by that id: `...text.[^tao-vu]`.
40
+ - Prefer structure (headings, lists, tables) over long prose. Maths in `$...$`
41
+ and `$$...$$` renders in the dashboard.
42
+ - **Diagrams** go in ` ```mermaid ` fences (flowchart, sequenceDiagram,
43
+ stateDiagram-v2, classDiagram, erDiagram, timeline, mindmap). The text is the
44
+ source of truth: anyone can read and edit it, and the dashboard draws it
45
+ offline. Keep each diagram small and focused; split rather than sprawl. If
46
+ the developer sketches something (a photo or screenshot), transcribe it into
47
+ Mermaid rather than storing only the image.
48
+
49
+ ## Significance
50
+
51
+ A significant edit updates `generated` and, if a human had reviewed the
52
+ concept, flags it as changed since review. Set `significant: false` for trivial
53
+ edits (typos, formatting) or content the developer dictated verbatim, `true` for
54
+ anything that changes meaning, or leave it out to let rdstudio judge from the
55
+ size of the change. Never add `verified` entries yourself; only the developer verifies
56
+ (`rdstudio verify <id>`).
57
+
58
+ ## Updating part of a concept
59
+
60
+ Use `section_heading` with `body` to replace one section, or `append` to add to
61
+ the end, instead of resending the whole body.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: report
3
+ description: Write an HTML report for the developer after substantial work — a task, an experiment, an investigation or a long session. Reports appear in the dashboard's Reports tab.
4
+ ---
5
+
6
+ # Write a report
7
+
8
+ Reports are the agent's channel to the developer: richer than chat, kept
9
+ permanently, and browsable in the dashboard. They are HTML, not markdown, so
10
+ they can hold charts, maths, figures and tables.
11
+
12
+ ## When
13
+
14
+ After completing a task, running an experiment, finishing an investigation, or
15
+ when the developer asks. One report per piece of work.
16
+
17
+ ## Where and how
18
+
19
+ 1. Copy `.claude/skills/report/template.html` to
20
+ `{reports}/YYYY-MM-DD-<short-slug>.html`.
21
+ 2. Fill in the `<meta name="rdstudio:...">` tags (title, date, author as your
22
+ actor id, activity) and the description.
23
+ 3. Write the body. Structure it for a reader who was not watching:
24
+ - **Summary**: two to four sentences on what was done and the result.
25
+ - **What changed**: files, concepts, decisions (link them).
26
+ - **Results**: figures, tables, charts, with honest caveats.
27
+ - **Deviations and issues**: anything that did not go to plan.
28
+ - **For you to do**: what the developer should check, test or decide.
29
+ 4. Link knowledge with `<a href="/{knowledge}/<id>.md">`. Those links open in the
30
+ dashboard and draw the report into the graph. Reports link to knowledge, never
31
+ the reverse.
32
+
33
+ ## Rich content
34
+
35
+ The template loads the dashboard's bundled libraries (no internet needed):
36
+
37
+ - Maths: `\( ... \)` inline and `\[ ... \]` display, rendered by KaTeX.
38
+ - Charts: a Vega-Lite spec in `<script type="application/json" class="vega-lite">`
39
+ is rendered in place. Inline data under `data.values`, or reference a CSV/JSON
40
+ file saved next to the report.
41
+ - Diagrams: Mermaid source in `<pre class="mermaid">...</pre>` is drawn in
42
+ place, in the dashboard's theme.
43
+ - Figures: save images next to the report (e.g. `{reports}/media/`) and use
44
+ relative paths.
45
+
46
+ Keep reports factual. State what was measured, not what you hoped.
@@ -0,0 +1,74 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>REPORT TITLE</title>
7
+ <meta name="rdstudio:date" content="YYYY-MM-DD">
8
+ <meta name="rdstudio:author" content="AGENT ACTOR ID">
9
+ <meta name="rdstudio:activity" content="Task / Experiment / Investigation / Session">
10
+ <meta name="description" content="One sentence: what this report is about.">
11
+ <!-- Shared assets from the dashboard (paths are relative to reports/). -->
12
+ <link rel="stylesheet" href="../vendor/katex/katex.min.css">
13
+ <link rel="stylesheet" href="../report.css">
14
+ <script defer src="../vendor/katex/katex.min.js"></script>
15
+ <script defer src="../vendor/katex/auto-render.min.js"></script>
16
+ <script defer src="../vendor/vega/vega.min.js"></script>
17
+ <script defer src="../vendor/vega/vega-lite.min.js"></script>
18
+ <script defer src="../vendor/vega/vega-embed.min.js"></script>
19
+ <script defer src="../report.js"></script>
20
+ </head>
21
+ <body>
22
+ <main>
23
+ <header class="report-head">
24
+ <p class="report-meta">Report, YYYY-MM-DD, AGENT ACTOR ID</p>
25
+ <h1>REPORT TITLE</h1>
26
+ </header>
27
+
28
+ <p class="summary">Two to four sentences: what was done and what came of it.</p>
29
+
30
+ <h2>What changed</h2>
31
+ <ul>
32
+ <li>Files, with a clause each on why.</li>
33
+ <li>Knowledge recorded, e.g. <a href="/knowledge/decisions/example.md">the decision</a>.</li>
34
+ </ul>
35
+
36
+ <h2>Results</h2>
37
+ <p>Inline maths like \( \rho(W) < 1 \) and display maths:</p>
38
+ \[ \lambda_{\max} \approx g \sqrt{N p (1 - p)} \]
39
+
40
+ <script type="application/json" class="vega-lite">
41
+ {
42
+ "$schema": "https://vega.github.io/schema/vega-lite/v6.json",
43
+ "data": { "values": [
44
+ { "g": 0.5, "radius": 0.49 }, { "g": 1.0, "radius": 1.01 }, { "g": 1.5, "radius": 1.52 }
45
+ ] },
46
+ "mark": { "type": "line", "point": true },
47
+ "encoding": {
48
+ "x": { "field": "g", "type": "quantitative", "title": "Gain g" },
49
+ "y": { "field": "radius", "type": "quantitative", "title": "Spectral radius" }
50
+ },
51
+ "height": 220
52
+ }
53
+ </script>
54
+ <p class="chart-caption">What the chart shows, and how it was produced.</p>
55
+
56
+ <p>Structure (pipelines, dependencies, state machines) as a Mermaid diagram:</p>
57
+ <pre class="mermaid">
58
+ flowchart LR
59
+ G[Genome] --> M[Block matrix] --> S[Simulate] --> F{Fitness}
60
+ F -->|select| G
61
+ </pre>
62
+
63
+ <h2>Deviations and issues</h2>
64
+ <p>Anything that did not go to plan.</p>
65
+
66
+ <section class="todo">
67
+ <h2>For you to do</h2>
68
+ <ul>
69
+ <li>What to check, test or decide.</li>
70
+ </ul>
71
+ </section>
72
+ </main>
73
+ </body>
74
+ </html>
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: search-okf
3
+ description: Look something up in the project knowledge base (OKF) before re-deriving it. Use when a question may already be answered, a decision may already be recorded, or you need project context.
4
+ ---
5
+
6
+ # Search the knowledge base
7
+
8
+ The knowledge base in `{knowledge}/` records what this project has already
9
+ settled: design, decisions, answered questions, procedures, references and
10
+ findings. Check it before re-deriving anything or reopening a settled question.
11
+
12
+ ## Steps
13
+
14
+ 1. The rdstudio `search` tool with a few specific keywords. Filter with `type`
15
+ (e.g. `Decision`, `Question`, `Procedure`), `tags` or `under` (a directory)
16
+ when you know them.
17
+ 2. For promising hits, the rdstudio `outline` tool to see the headings.
18
+ 3. The rdstudio `read` tool with `section_heading` to read only the part you need.
19
+ Read a whole concept only when it is short or all of it is relevant.
20
+ 4. Follow `links_to` / `linked_from` from the outline when the answer spans
21
+ concepts.
22
+
23
+ For lookups that need several searches, delegate to the **librarian** subagent
24
+ so the intermediate results stay out of your context; it returns a short answer
25
+ with concept ids.
26
+
27
+ ## Reporting what you found
28
+
29
+ - Cite concept ids (e.g. `decisions/activation-function`) so the developer can
30
+ open them in the dashboard.
31
+ - Say how much to trust each source: `human-reviewed`, `machine-confirmed` or
32
+ `unverified`, and whether it has changed since review.
33
+ - If a recorded decision applies, follow it. If you believe its stated
34
+ assumption no longer holds, say so explicitly instead of silently diverging.
35
+ - If nothing is recorded, say so. If the answer you then work out is worth
36
+ keeping, record it with the `record-okf` skill.
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: task
3
+ description: Create or work through a task concept (prompt, plan, approval, implementation, outcome). Use when the developer hands over a piece of work as a task, or points at a task concept.
4
+ ---
5
+
6
+ # Tasks
7
+
8
+ Tasks are concepts in `tasks/` with `type: Task`. Their state is a tag:
9
+ `todo`, `active`, `done` or `dropped`.
10
+
11
+ ## Creating a task
12
+
13
+ ```markdown
14
+ ---
15
+ type: Task
16
+ title: <imperative summary>
17
+ description: <one sentence>
18
+ tags: [task, todo]
19
+ ---
20
+
21
+ # Prompt
22
+
23
+ What is wanted, in the developer's words.
24
+
25
+ # Plan
26
+
27
+ (Filled in by the agent before implementation.)
28
+
29
+ # Acceptance
30
+
31
+ How we will know it is done.
32
+
33
+ # Outcome
34
+
35
+ Not started.
36
+ ```
37
+
38
+ ## Working a task
39
+
40
+ 1. Read the task. Search the knowledge base for related decisions and designs.
41
+ 2. Write the `# Plan` section: files to change, approach, assumptions, and open
42
+ questions. Set the tag to `active`. **Stop and wait for the developer's
43
+ approval.**
44
+ 3. Implement. Record decisions and findings as they arise (the `decision` skill,
45
+ the `record-okf` skill).
46
+ 4. Write `# Outcome`: what changed, deviations from the plan and why, follow-ups,
47
+ and anything the developer should test. Link the report if you wrote one.
48
+ Set the tag to `done`.
49
+ 5. Write a report with the `report` skill for substantial tasks.
50
+
51
+ Never edit the `# Prompt` section.
rdstudio/web/app.js ADDED
@@ -0,0 +1,140 @@
1
+ // rdstudio dashboard: hash router and shell.
2
+
3
+ import { store, load, watch, loadLearner } from "./js/data.js";
4
+ import { conceptView, dirView } from "./js/knowledge.js";
5
+ import { graphView, leaveGraph } from "./js/graph.js";
6
+ import { mapView } from "./js/map.js";
7
+ import { changesView, reviewView, reviewCount, reportsView, reportView, skillsView, skillView } from "./js/pages.js";
8
+ import { proceduresView, procedureView, procedures } from "./js/procedures.js";
9
+ import { settingsView } from "./js/settings.js";
10
+ import { learnView } from "./js/learn.js";
11
+ import { renderDiagrams } from "./js/diagrams.js";
12
+ import { h } from "./js/util.js";
13
+
14
+ const view = document.getElementById("view");
15
+ const menu = document.querySelector(".menu");
16
+ let current = null; // { tab, key, node }
17
+
18
+ function parse() {
19
+ const raw = location.hash.replace(/^#/, "") || "/";
20
+ const [, head = "", ...rest] = raw.split("/");
21
+ const tail = rest.map(decodeURIComponent).join("/");
22
+ switch (head) {
23
+ case "": return { tab: "knowledge", key: "d:", render: () => dirView("") };
24
+ case "d": return { tab: "knowledge", key: "d:" + tail, render: () => dirView(tail) };
25
+ case "k": return { tab: "knowledge", key: "k:" + tail, render: () => conceptView(tail) };
26
+ case "graph": return { tab: "graph", key: "graph", render: graphView };
27
+ case "map": return { tab: "map", key: "map:" + tail, render: () => mapView(tail) };
28
+ case "path": return { tab: "map", key: "path:" + tail, render: () => mapView("", { path: tail }) };
29
+ case "learn": return { tab: "learn", key: "learn", render: learnView };
30
+ case "changes": return { tab: "changes", key: "changes", render: changesView };
31
+ case "review": return { tab: "review", key: "review", render: reviewView };
32
+ case "reports": return { tab: "reports", key: "reports", render: reportsView };
33
+ case "r": return { tab: "reports", key: "r:" + tail, render: () => reportView(tail) };
34
+ case "procedures": return { tab: "procedures", key: "procedures", render: proceduresView };
35
+ case "p": return { tab: "procedures", key: "p:" + tail, render: () => procedureView(tail) };
36
+ case "settings": return { tab: "settings", key: "settings", render: settingsView };
37
+ case "skills": return { tab: "skills", key: "skills", render: skillsView };
38
+ case "skill": return { tab: "skills", key: "skill:" + tail, render: () => skillView("skill", tail) };
39
+ case "agent": return { tab: "skills", key: "agent:" + tail, render: () => skillView("agent", tail) };
40
+ default: return { tab: "knowledge", key: "404", render: () => h("div", { class: "page" }, h("h1", {}, "Page not found"), h("p", {}, h("a", { href: "#/" }, "Go to knowledge"))) };
41
+ }
42
+ }
43
+
44
+ function updateChrome(tab) {
45
+ for (const a of document.querySelectorAll(".tabs a, .settings-link")) {
46
+ a.toggleAttribute("aria-current", a.dataset.tab === tab);
47
+ if (a.dataset.tab === tab) a.setAttribute("aria-current", "page");
48
+ }
49
+ const brand = document.querySelector(".brand");
50
+ brand.textContent = store.site.title || "rdstudio";
51
+ const review = reviewCount();
52
+ const rc = document.querySelector('[data-count="review"]');
53
+ rc.textContent = review || "";
54
+ rc.hidden = !review;
55
+ const reports = store.reports.length;
56
+ const rp = document.querySelector('[data-count="reports"]');
57
+ rp.textContent = reports || "";
58
+ rp.hidden = !reports;
59
+ menu.hidden = tab !== "knowledge";
60
+ document.querySelector('[data-tab="procedures"]').hidden = !procedures().length && tab !== "procedures";
61
+ }
62
+
63
+ async function route({ keepScroll = false } = {}) {
64
+ const next = parse();
65
+ if (current?.tab === "graph" && next.tab !== "graph") leaveGraph();
66
+ current?.node?.leave?.();
67
+ closeDrawer();
68
+ const scroll = keepScroll ? window.scrollY : 0;
69
+ const node = await next.render();
70
+ if (!keepScroll || current?.key !== next.key) {
71
+ view.replaceChildren(node);
72
+ window.scrollTo(0, scroll);
73
+ } else {
74
+ view.replaceChildren(node);
75
+ window.scrollTo(0, scroll);
76
+ }
77
+ current = { ...next, node };
78
+ updateChrome(next.tab);
79
+ renderDiagrams(view);
80
+ }
81
+
82
+ function closeDrawer() {
83
+ document.body.classList.remove("drawer-open");
84
+ menu.setAttribute("aria-expanded", "false");
85
+ }
86
+
87
+ menu.addEventListener("click", () => {
88
+ const open = !document.body.classList.contains("drawer-open");
89
+ document.body.classList.toggle("drawer-open", open);
90
+ menu.setAttribute("aria-expanded", String(open));
91
+ });
92
+ document.querySelector(".scrim").addEventListener("click", closeDrawer);
93
+
94
+ // Full screen (hides the phone's status and navigation bars), where supported.
95
+ const fullscreen = document.querySelector(".fullscreen");
96
+ if (document.fullscreenEnabled && !matchMedia("(display-mode: fullscreen)").matches) {
97
+ fullscreen.hidden = false;
98
+ fullscreen.addEventListener("click", () => {
99
+ if (document.fullscreenElement) document.exitFullscreen();
100
+ else document.documentElement.requestFullscreen({ navigationUI: "hide" }).catch(() => {});
101
+ });
102
+ document.addEventListener("fullscreenchange", () => fullscreen.setAttribute("aria-pressed", String(!!document.fullscreenElement)));
103
+ }
104
+ document.addEventListener("keydown", (e) => { if (e.key === "Escape") closeDrawer(); });
105
+ window.addEventListener("hashchange", () => route());
106
+
107
+ async function refresh() {
108
+ // Live update: the graph merges new data in place; other views re-render keeping scroll.
109
+ if ((current?.tab === "graph" || current?.tab === "map") && current.node?.refresh) {
110
+ current.node.refresh();
111
+ updateChrome(current.tab);
112
+ return;
113
+ }
114
+ await route({ keepScroll: true });
115
+ }
116
+
117
+ try {
118
+ await load();
119
+ await loadLearner();
120
+ await route();
121
+ const live = document.querySelector(".live");
122
+ if (store.site.static) {
123
+ live.hidden = true; // an exported snapshot does not change
124
+ } else {
125
+ watch(refresh, (ok) => { live.classList.toggle("offline", !ok); live.textContent = ok ? "Live" : "Offline"; });
126
+ }
127
+ } catch (err) {
128
+ view.replaceChildren(h("div", { class: "page" }, h("h1", {}, "The dashboard data could not be loaded"),
129
+ h("p", { class: "lede" }, "Run rdstudio build (or rdstudio serve) in the project, then reload this page."),
130
+ h("pre", {}, String(err))));
131
+ }
132
+
133
+ // The service worker is registered in index.html. The first time, hand it the
134
+ // files this page loaded before it was in control, so the next visit is served
135
+ // from the cache.
136
+ if ("serviceWorker" in navigator && !navigator.serviceWorker.controller) {
137
+ navigator.serviceWorker.ready.then((reg) => reg.active?.postMessage({
138
+ warm: [location.href.split("#")[0], ...performance.getEntriesByType("resource").map((e) => e.name)],
139
+ }));
140
+ }
rdstudio/web/fonts.css ADDED
@@ -0,0 +1,48 @@
1
+ /* Every font the themes use. Browsers download a face only when a theme uses it. */
2
+
3
+ @font-face { font-family: "Literata"; font-style: normal; font-weight: 200 900; font-display: swap;
4
+ src: url(vendor/fonts/literata-latin-opsz-normal.woff2) format("woff2-variations");
5
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
6
+ @font-face { font-family: "Literata"; font-style: normal; font-weight: 200 900; font-display: swap;
7
+ src: url(vendor/fonts/literata-latin-ext-opsz-normal.woff2) format("woff2-variations");
8
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
9
+ @font-face { font-family: "Literata"; font-style: italic; font-weight: 200 900; font-display: swap;
10
+ src: url(vendor/fonts/literata-latin-opsz-italic.woff2) format("woff2-variations");
11
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
12
+ @font-face { font-family: "Literata"; font-style: italic; font-weight: 200 900; font-display: swap;
13
+ src: url(vendor/fonts/literata-latin-ext-opsz-italic.woff2) format("woff2-variations");
14
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1E00-1E9F, U+2113, U+A720-A7FF; }
15
+ @font-face { font-family: "Atkinson"; font-style: normal; font-weight: 200 800; font-display: swap;
16
+ src: url(vendor/fonts/atkinson-hyperlegible-next-latin-wght-normal.woff2) format("woff2-variations");
17
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
18
+ @font-face { font-family: "Atkinson"; font-style: normal; font-weight: 200 800; font-display: swap;
19
+ src: url(vendor/fonts/atkinson-hyperlegible-next-latin-ext-wght-normal.woff2) format("woff2-variations");
20
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1E00-1E9F, U+2113, U+A720-A7FF; }
21
+ @font-face { font-family: "Atkinson"; font-style: italic; font-weight: 200 800; font-display: swap;
22
+ src: url(vendor/fonts/atkinson-hyperlegible-next-latin-wght-italic.woff2) format("woff2-variations"); }
23
+ @font-face { font-family: "JetBrains Mono"; font-style: normal; font-weight: 100 800; font-display: swap;
24
+ src: url(vendor/fonts/jetbrains-mono-latin-wght-normal.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
25
+ @font-face { font-family: "JetBrains Mono"; font-style: italic; font-weight: 100 800; font-display: swap;
26
+ src: url(vendor/fonts/jetbrains-mono-latin-wght-italic.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
27
+ @font-face { font-family: "Source Serif 4"; font-style: normal; font-weight: 200 900; font-display: swap;
28
+ src: url(vendor/fonts/source-serif-4-latin-opsz-normal.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
29
+ @font-face { font-family: "Source Serif 4"; font-style: italic; font-weight: 200 900; font-display: swap;
30
+ src: url(vendor/fonts/source-serif-4-latin-opsz-italic.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
31
+ @font-face { font-family: "Source Sans 3"; font-style: normal; font-weight: 200 900; font-display: swap;
32
+ src: url(vendor/fonts/source-sans-3-latin-wght-normal.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
33
+ @font-face { font-family: "Source Sans 3"; font-style: italic; font-weight: 200 900; font-display: swap;
34
+ src: url(vendor/fonts/source-sans-3-latin-wght-italic.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
35
+ @font-face { font-family: "Inter"; font-style: normal; font-weight: 100 900; font-display: swap;
36
+ src: url(vendor/fonts/inter-latin-opsz-normal.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
37
+ @font-face { font-family: "Inter"; font-style: italic; font-weight: 100 900; font-display: swap;
38
+ src: url(vendor/fonts/inter-latin-opsz-italic.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
39
+ @font-face { font-family: "IBM Plex Sans"; font-style: normal; font-weight: 100 700; font-display: swap;
40
+ src: url(vendor/fonts/ibm-plex-sans-latin-wght-normal.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
41
+ @font-face { font-family: "IBM Plex Sans"; font-style: italic; font-weight: 100 700; font-display: swap;
42
+ src: url(vendor/fonts/ibm-plex-sans-latin-wght-italic.woff2) format("woff2-variations"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
43
+ @font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; font-display: swap;
44
+ src: url(vendor/fonts/ibm-plex-mono-latin-400-normal.woff2) format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
45
+ @font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 600; font-display: swap;
46
+ src: url(vendor/fonts/ibm-plex-mono-latin-600-normal.woff2) format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
47
+ @font-face { font-family: "Caveat"; font-style: normal; font-weight: 400 700; font-display: swap;
48
+ src: url(vendor/fonts/caveat-latin-wght-normal.woff2) format("woff2-variations"); }
Binary file
Binary file
@@ -0,0 +1,109 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
6
+ <title>rdstudio</title>
7
+ <link rel="manifest" href="manifest.webmanifest" crossorigin="use-credentials">
8
+ <meta name="theme-color" content="#141a20">
9
+ <meta name="mobile-web-app-capable" content="yes">
10
+ <meta name="apple-mobile-web-app-capable" content="yes">
11
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
12
+ <link rel="apple-touch-icon" href="icon-192.png">
13
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%235646c0'/%3E%3Ccircle cx='11' cy='12' r='3.2' fill='%23f4f6f2'/%3E%3Ccircle cx='22' cy='10' r='2.4' fill='%23f4f6f2'/%3E%3Ccircle cx='19' cy='22' r='3.6' fill='%23f4f6f2'/%3E%3Cpath d='M11 12 22 10M11 12l8 10M22 10l-3 12' stroke='%23f4f6f2' stroke-width='1.4'/%3E%3C/svg%3E">
14
+ <script>
15
+ // Instant reopening and offline reading (sw.js), registered before anything
16
+ // else loads so it installs even when a file fails. Browsers allow it only
17
+ // on https or localhost; everything works without it. ?nosw skips it.
18
+ (function () {
19
+ if (!("serviceWorker" in navigator) || new URLSearchParams(location.search).has("nosw")) return;
20
+ var had = Boolean(navigator.serviceWorker.controller);
21
+ (function register(tries) {
22
+ navigator.serviceWorker.register("sw.js").catch(function () {
23
+ if (tries < 3) setTimeout(function () { register(tries + 1); }, 800);
24
+ });
25
+ })(0);
26
+ // A new rdstudio took over just as this page opened: show the new version.
27
+ navigator.serviceWorker.addEventListener("controllerchange", function () {
28
+ if (had && performance.now() < 10000) location.reload();
29
+ });
30
+ // Tunnels sometimes drop a request (a 504). If a script or style fails,
31
+ // reload once, when the service worker (which retries) is ready or after
32
+ // a few seconds without it.
33
+ var failed = false;
34
+ addEventListener("error", function (e) {
35
+ var t = e.target;
36
+ if (failed || !t || !/^(SCRIPT|LINK)$/.test(t.tagName)) return;
37
+ var last = Number(sessionStorage.getItem("rdstudio.retry") || 0);
38
+ if (Date.now() - last < 30000) return; // tried already: show the error instead
39
+ failed = true;
40
+ sessionStorage.setItem("rdstudio.retry", String(Date.now()));
41
+ var wait = new Promise(function (r) { setTimeout(r, 4000); });
42
+ Promise.race([navigator.serviceWorker.ready, wait]).then(function () { location.reload(); });
43
+ }, true);
44
+ })();
45
+ </script>
46
+ <link rel="stylesheet" href="vendor/katex/katex.min.css">
47
+ <link id="code-light" rel="stylesheet" href="vendor/hljs/github.min.css" media="(prefers-color-scheme: light)">
48
+ <link id="code-dark" rel="stylesheet" href="vendor/hljs/github-dark.min.css" media="(prefers-color-scheme: dark)">
49
+ <link id="theme-css" rel="stylesheet" href="themes/studio.css">
50
+ <script>
51
+ // Apply the saved theme before first paint (see js/settings.js).
52
+ (function () {
53
+ try {
54
+ var themes = ["studio", "notebook", "map", "space", "cyber"];
55
+ var former = { notebook: "studio", journal: "studio", modern: "studio", blueprint: "map", terminal: "cyber" };
56
+ var theme = localStorage.getItem("rdstudio.look") || former[localStorage.getItem("rdstudio.theme")];
57
+ var mode = localStorage.getItem("rdstudio.mode");
58
+ if (themes.indexOf(theme) > 0) document.getElementById("theme-css").href = "themes/" + theme + ".css";
59
+ if (mode === "light" || mode === "dark") {
60
+ document.documentElement.dataset.mode = mode;
61
+ document.getElementById("code-light").media = mode === "light" ? "all" : "not all";
62
+ document.getElementById("code-dark").media = mode === "dark" ? "all" : "not all";
63
+ }
64
+ } catch (e) { /* storage unavailable: defaults apply */ }
65
+ })();
66
+ </script>
67
+ <link rel="stylesheet" href="style.css">
68
+ </head>
69
+ <body>
70
+ <header class="bar">
71
+ <button class="menu" type="button" aria-label="Show contents" aria-expanded="false">
72
+ <svg width="18" height="18" viewBox="0 0 18 18" aria-hidden="true"><path d="M2 4h14M2 9h14M2 14h14" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>
73
+ </button>
74
+ <a class="brand" href="#/">rdstudio</a>
75
+ <nav class="tabs" aria-label="Sections">
76
+ <a href="#/" data-tab="knowledge">Knowledge</a>
77
+ <a href="#/map" data-tab="map">Map</a>
78
+ <a href="#/graph" data-tab="graph">Graph</a>
79
+ <a href="#/learn" data-tab="learn">Learn</a>
80
+ <a href="#/changes" data-tab="changes">Changes</a>
81
+ <a href="#/review" data-tab="review">Review <span class="count" data-count="review"></span></a>
82
+ <a href="#/reports" data-tab="reports">Reports <span class="count" data-count="reports"></span></a>
83
+ <a href="#/procedures" data-tab="procedures" hidden>Procedures</a>
84
+ <a href="#/skills" data-tab="skills">Skills &amp; agents</a>
85
+ </nav>
86
+ <span class="live" title="The page refreshes when files change">Live</span>
87
+ <button class="fullscreen" type="button" aria-label="Full screen" aria-pressed="false" title="Full screen" hidden>
88
+ <svg width="17" height="17" viewBox="0 0 24 24" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" d="M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5"/></svg>
89
+ </button>
90
+ <a class="settings-link" href="#/settings" data-tab="settings" aria-label="Settings">
91
+ <svg width="17" height="17" viewBox="0 0 24 24" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" d="M4 7h10M18 7h2M4 17h4M12 17h8"/><circle cx="16" cy="7" r="2.2" fill="none" stroke="currentColor" stroke-width="1.8"/><circle cx="10" cy="17" r="2.2" fill="none" stroke="currentColor" stroke-width="1.8"/></svg>
92
+ <span>Settings</span>
93
+ </a>
94
+ </header>
95
+ <div class="scrim"></div>
96
+ <main id="view" tabindex="-1"></main>
97
+
98
+ <script src="vendor/markdown-it.min.js"></script>
99
+ <script src="vendor/markdown-it-footnote.min.js"></script>
100
+ <script src="vendor/katex/katex.min.js"></script>
101
+ <script src="vendor/texmath.js"></script>
102
+ <script src="vendor/hljs/highlight.min.js"></script>
103
+ <script src="vendor/hljs/latex.min.js"></script>
104
+ <script src="vendor/hljs/julia.min.js"></script>
105
+ <script src="vendor/hljs/matlab.min.js"></script>
106
+ <script src="vendor/d3.min.js"></script>
107
+ <script type="module" src="app.js"></script>
108
+ </body>
109
+ </html>