@caddis/cli 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/bundles/antigravity-plugin/agents/knowledge-transfer.md +17 -32
  2. package/bundles/antigravity-plugin/caddis_statusline.py +25 -3
  3. package/bundles/antigravity-plugin/guard_agy.py +41 -9
  4. package/bundles/antigravity-plugin/plugin.json +1 -1
  5. package/bundles/antigravity-plugin/scripts/caddis_inventory.py +73 -3
  6. package/bundles/antigravity-plugin/scripts/caddis_statusline.py +25 -3
  7. package/bundles/antigravity-plugin/scripts/claudster_config.py +0 -5
  8. package/bundles/antigravity-plugin/scripts/hook_log.py +1 -1
  9. package/bundles/antigravity-plugin/scripts/new-machine.ps1 +170 -0
  10. package/bundles/antigravity-plugin/scripts/oss_ask.py +1 -1
  11. package/bundles/antigravity-plugin/scripts/oss_model.py +10 -2
  12. package/bundles/antigravity-plugin/scripts/oss_review.py +1 -1
  13. package/bundles/antigravity-plugin/scripts/setup_project_ai.py +9 -6
  14. package/bundles/antigravity-plugin/session_end_agy.py +31 -6
  15. package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +44 -0
  16. package/bundles/antigravity-plugin/skills/code-review/SKILL.md +11 -0
  17. package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +21 -0
  18. package/bundles/antigravity-plugin/skills/gate-review/SKILL.md +11 -0
  19. package/bundles/antigravity-plugin/skills/implement/SKILL.md +36 -0
  20. package/bundles/antigravity-plugin/skills/security-review/SKILL.md +9 -0
  21. package/bundles/antigravity-plugin/skills/validate-phase/SKILL.md +31 -0
  22. package/bundles/antigravity-plugin/warm_start_agy.py +96 -9
  23. package/bundles/antigravity-plugin-extras/plugin.json +1 -1
  24. package/bundles/codex/.codex/config.toml.example +36 -0
  25. package/bundles/codex/.codex/skills/coding/api-design/SKILL.md +249 -0
  26. package/bundles/codex/.codex/skills/coding/backend-development/SKILL.md +305 -0
  27. package/bundles/codex/.codex/skills/coding/code-review/SKILL.md +140 -0
  28. package/bundles/codex/.codex/skills/coding/codebase-audit/SKILL.md +204 -0
  29. package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/SKILL.md +132 -0
  30. package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/scripts/perf_sweep.py +249 -0
  31. package/bundles/codex/.codex/skills/coding/error-handling/SKILL.md +260 -0
  32. package/bundles/codex/.codex/skills/coding/fastapi-dev/SKILL.md +300 -0
  33. package/bundles/codex/.codex/skills/coding/javascript-typescript/SKILL.md +142 -0
  34. package/bundles/codex/.codex/skills/coding/python/SKILL.md +388 -0
  35. package/bundles/codex/.codex/skills/coding/refactoring/SKILL.md +486 -0
  36. package/bundles/codex/.codex/skills/coding/security-review/SKILL.md +205 -0
  37. package/bundles/codex/.codex/skills/coding/sql/SKILL.md +321 -0
  38. package/bundles/codex/.codex/skills/data/database-design/SKILL.md +177 -0
  39. package/bundles/codex/.codex/skills/data/db-diagram/SKILL.md +148 -0
  40. package/bundles/codex/.codex/skills/data/db-diagram/scripts/sql_to_graph.py +1212 -0
  41. package/bundles/codex/.codex/skills/devops/ci-cd-pipeline/SKILL.md +315 -0
  42. package/bundles/codex/.codex/skills/devops/gh-cli/SKILL.md +195 -0
  43. package/bundles/codex/.codex/skills/devops/git-commit/SKILL.md +285 -0
  44. package/bundles/codex/.codex/skills/devops/using-git-worktrees/SKILL.md +217 -0
  45. package/bundles/codex/.codex/skills/devops/windows-deployment/SKILL.md +880 -0
  46. package/bundles/codex/.codex/skills/docs/code-documentation/SKILL.md +271 -0
  47. package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +97 -0
  48. package/bundles/codex/.codex/skills/docs/technical-writing/SKILL.md +286 -0
  49. package/bundles/codex/.codex/skills/docs/writing-plans/SKILL.md +387 -0
  50. package/bundles/codex/.codex/skills/frontend/css-architecture/SKILL.md +305 -0
  51. package/bundles/codex/.codex/skills/frontend/css-architecture/references/RESPONSIVE-DESIGN.md +604 -0
  52. package/bundles/codex/.codex/skills/frontend/frontend-design/SKILL.md +193 -0
  53. package/bundles/codex/.codex/skills/frontend/frontend-design/references/my-tech-stack.md +127 -0
  54. package/bundles/codex/.codex/skills/frontend/mockup/SKILL.md +242 -0
  55. package/bundles/codex/.codex/skills/frontend/react-best-practices/SKILL.md +269 -0
  56. package/bundles/codex/.codex/skills/frontend/react-dev/README.md +404 -0
  57. package/bundles/codex/.codex/skills/frontend/react-dev/SKILL.md +459 -0
  58. package/bundles/codex/.codex/skills/frontend/react-dev/examples/generic-components.md +579 -0
  59. package/bundles/codex/.codex/skills/frontend/react-dev/examples/server-components.md +579 -0
  60. package/bundles/codex/.codex/skills/frontend/react-dev/references/event-handlers.md +574 -0
  61. package/bundles/codex/.codex/skills/frontend/react-dev/references/hooks.md +456 -0
  62. package/bundles/codex/.codex/skills/frontend/react-dev/references/react-19-patterns.md +638 -0
  63. package/bundles/codex/.codex/skills/frontend/react-dev/references/react-router.md +1002 -0
  64. package/bundles/codex/.codex/skills/frontend/react-dev/references/tanstack-router.md +587 -0
  65. package/bundles/codex/.codex/skills/frontend/ui-review/SKILL.md +176 -0
  66. package/bundles/codex/.codex/skills/frontend/ui-review/references/framework-fixes.md +471 -0
  67. package/bundles/codex/.codex/skills/frontend/ui-review/references/visual-checklist.md +236 -0
  68. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/DESIGN_TOKENS.md +487 -0
  69. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/IMPLEMENTATION_GUIDE.md +177 -0
  70. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/SKILL.md +732 -0
  71. package/bundles/codex/.codex/skills/media/draw-io/SKILL.md +162 -0
  72. package/bundles/codex/.codex/skills/media/draw-io/references/aws-icons.md +677 -0
  73. package/bundles/codex/.codex/skills/media/draw-io/references/layout-guidelines.md +142 -0
  74. package/bundles/codex/.codex/skills/media/draw-io/references/troubleshooting.md +118 -0
  75. package/bundles/codex/.codex/skills/media/draw-io/references/workflows.md +103 -0
  76. package/bundles/codex/.codex/skills/media/draw-io/scripts/convert-drawio-to-png.sh +25 -0
  77. package/bundles/codex/.codex/skills/media/draw-io/scripts/find_aws_icon.py +79 -0
  78. package/bundles/codex/.codex/skills/media/mermaid-diagrams/SKILL.md +292 -0
  79. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/ENHANCEMENTS.md +264 -0
  80. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/MERMAID-SUMMARY.md +137 -0
  81. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/advanced-features.md +556 -0
  82. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/architecture-diagrams.md +192 -0
  83. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/c4-diagrams.md +410 -0
  84. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/class-diagrams.md +361 -0
  85. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/erd-diagrams.md +510 -0
  86. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/flowcharts.md +450 -0
  87. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/sequence-diagrams.md +394 -0
  88. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/troubleshooting.md +335 -0
  89. package/bundles/codex/.codex/skills/media/mermaid-diagrams/references/workflows.md +418 -0
  90. package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +243 -0
  91. package/bundles/codex/.codex/skills/media/particle-art/references/canvas-utils.ts +171 -0
  92. package/bundles/codex/.codex/skills/media/particle-art/references/dot-field.template.tsx +203 -0
  93. package/bundles/codex/.codex/skills/media/particle-art/references/flow-field.template.tsx +263 -0
  94. package/bundles/codex/.codex/skills/media/particle-art/references/node-shape.template.tsx +261 -0
  95. package/bundles/codex/.codex/skills/media/particle-art/references/shape-sampler.ts +281 -0
  96. package/bundles/codex/.codex/skills/media/particle-art/references/stipple-morph.template.tsx +167 -0
  97. package/bundles/codex/.codex/skills/media/particle-art/references/stipple.template.tsx +175 -0
  98. package/bundles/codex/.codex/skills/media/particle-art/references/trail-ghost.template.tsx +266 -0
  99. package/bundles/codex/.codex/skills/media/particle-art/references/usage-examples.md +320 -0
  100. package/bundles/codex/.codex/skills/testing/playwright/API_REFERENCE.md +653 -0
  101. package/bundles/codex/.codex/skills/testing/playwright/SKILL.md +454 -0
  102. package/bundles/codex/.codex/skills/testing/playwright/lib/helpers.js +441 -0
  103. package/bundles/codex/.codex/skills/testing/playwright/package.json +26 -0
  104. package/bundles/codex/.codex/skills/testing/playwright/run.js +228 -0
  105. package/bundles/codex/.codex/skills/testing/tdd-workflow/SKILL.md +188 -0
  106. package/bundles/codex/.codex/skills/testing/test-strategy/SKILL.md +155 -0
  107. package/bundles/codex/.codex/skills/testing/webapp-testing/LICENSE.txt +202 -0
  108. package/bundles/codex/.codex/skills/testing/webapp-testing/SKILL.md +97 -0
  109. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/console_logging.py +35 -0
  110. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/element_discovery.py +40 -0
  111. package/bundles/codex/.codex/skills/testing/webapp-testing/examples/static_html_automation.py +33 -0
  112. package/bundles/codex/.codex/skills/testing/webapp-testing/scripts/with_server.py +106 -0
  113. package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +227 -0
  114. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/context-template.md +214 -0
  115. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/hub-handbook.md +233 -0
  116. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/report-contract.md +94 -0
  117. package/bundles/codex/.codex/skills/workflow/advisory-hub/reference/succession.md +118 -0
  118. package/bundles/codex/.codex/skills/workflow/best-practices/SKILL.md +500 -0
  119. package/bundles/codex/.codex/skills/workflow/best-practices/agents/best-practices-referencer.md +263 -0
  120. package/bundles/codex/.codex/skills/workflow/best-practices/agents/codebase-context-builder.md +326 -0
  121. package/bundles/codex/.codex/skills/workflow/best-practices/agents/task-intent-analyzer.md +245 -0
  122. package/bundles/codex/.codex/skills/workflow/best-practices/references/anti-patterns.md +571 -0
  123. package/bundles/codex/.codex/skills/workflow/best-practices/references/before-after-examples.md +1114 -0
  124. package/bundles/codex/.codex/skills/workflow/best-practices/references/best-practices-guide.md +513 -0
  125. package/bundles/codex/.codex/skills/workflow/best-practices/references/common-workflows.md +692 -0
  126. package/bundles/codex/.codex/skills/workflow/best-practices/references/prompt-patterns.md +547 -0
  127. package/bundles/codex/.codex/skills/workflow/brainstorming/SKILL.md +57 -0
  128. package/bundles/codex/.codex/skills/workflow/context-curator/SKILL.md +157 -0
  129. package/bundles/codex/.codex/skills/workflow/golden-plan/SKILL.md +586 -0
  130. package/bundles/codex/.codex/skills/workflow/preflight/SKILL.md +440 -0
  131. package/bundles/codex/.codex/skills/workflow/skill-creator/LICENSE.txt +202 -0
  132. package/bundles/codex/.codex/skills/workflow/skill-creator/SKILL.md +491 -0
  133. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/analyzer.md +274 -0
  134. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/comparator.md +202 -0
  135. package/bundles/codex/.codex/skills/workflow/skill-creator/agents/grader.md +223 -0
  136. package/bundles/codex/.codex/skills/workflow/skill-creator/assets/eval_review.html +146 -0
  137. package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/generate_review.py +471 -0
  138. package/bundles/codex/.codex/skills/workflow/skill-creator/eval-viewer/viewer.html +1325 -0
  139. package/bundles/codex/.codex/skills/workflow/skill-creator/references/schemas.md +430 -0
  140. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/__init__.py +0 -0
  141. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/aggregate_benchmark.py +401 -0
  142. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/generate_report.py +326 -0
  143. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/improve_description.py +247 -0
  144. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/package_skill.py +136 -0
  145. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/quick_validate.py +103 -0
  146. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_eval.py +310 -0
  147. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/run_loop.py +328 -0
  148. package/bundles/codex/.codex/skills/workflow/skill-creator/scripts/utils.py +47 -0
  149. package/bundles/codex/AGENTS.md +146 -0
  150. package/bundles/manifest.json +4 -3
  151. package/dist/claude-deepseek.js +2 -2
  152. package/dist/claude-glm.js +2 -2
  153. package/dist/claude-oss.js +2 -2
  154. package/dist/cli.js +187 -56
  155. package/package.json +1 -1
  156. package/bundles/antigravity-plugin/scripts/dream_capture.py +0 -249
  157. package/bundles/antigravity-plugin/scripts/dream_memory.py +0 -438
  158. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  159. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  160. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  161. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  162. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  163. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  164. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  165. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  166. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  167. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  168. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  169. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  170. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  171. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  172. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  173. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  174. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  175. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  176. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  177. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  178. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  179. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  180. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  181. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  182. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  183. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  184. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  185. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  186. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  187. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  188. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  189. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  190. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  191. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  192. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  193. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  194. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  195. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  196. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  197. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  198. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  199. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  200. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  201. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  202. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  203. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  204. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  205. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  206. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  207. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  208. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  209. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  210. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  211. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  212. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  213. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  214. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  215. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  216. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  217. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  218. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  219. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  220. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  221. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  222. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  223. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  224. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  225. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  226. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  227. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  228. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  229. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  230. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  231. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  232. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  233. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  234. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  235. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  236. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  237. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  238. package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
@@ -1,438 +0,0 @@
1
- """Dream Memory — caddis's short-term, self-maintaining per-repo fact store (fann Phase 5a).
2
-
3
- Ports the dedupe / reinforce / prune / conflict logic of fann-core's
4
- ``src/memory/consolidator.ts`` into caddis's hooks-and-scripts world. This module is the
5
- **pure consolidation engine** — the genuinely portable, fully-testable core. It owns the fact
6
- schema and the four pure functions the design names (``merge`` / ``prune`` / ``conflicts`` /
7
- ``rank_for_surfacing``), plus thin, fail-open filesystem glue to load/save the JSONL store.
8
-
9
- Mental model (see ``.caddis/plans/dream-memory-design.md``): Dream Memory is *short-term working
10
- memory* — automatic, structured facts that get **reinforced** when they recur and **decay** when
11
- they don't. It complements (never replaces) the curated layers: ``relay.md`` (session handoff),
12
- ``.caddis/kb/*.md`` (curated code docs), and the central ``.claude`` MEMORY.md (cross-repo
13
- durable facts). A fact that proves durable is *promoted* up into a curated store and then allowed
14
- to decay out here.
15
-
16
- Design split mirrors ``check_doc_coverage.py``: a filesystem-free pure core (text/dicts in →
17
- dicts out, unit-tested without a tree) and a small glue layer (``load_facts`` / ``save_facts`` /
18
- the CLI) that does all I/O and **fails open & silent** — Dream Memory must never block or slow a
19
- turn.
20
-
21
- A fact (one JSON object per line in ``.caddis/memory.jsonl``)::
22
-
23
- {
24
- "kind": "failure-mode | rejected-approach | repo-fact | workflow-success",
25
- "key": "pytest::import-error", # normalized dedup key (kind-scoped)
26
- "summary": "pytest fails on a cold checkout — run `alembic upgrade` first",
27
- "hitCount": 3,
28
- "firstSeen": "2026-07-01T09:00:00Z",
29
- "lastSeen": "2026-07-01T15:00:00Z",
30
- "source": "auto | knowledge-transfer | manual",
31
- "evidence": "tests/test_api.py" # optional, short
32
- }
33
-
34
- Fingerprint = ``kind + ":" + normalize(key)``. The file holds **consolidated** facts (not raw
35
- events) — it self-compacts each cycle (``merge`` then ``prune``).
36
- """
37
-
38
- from __future__ import annotations
39
-
40
- import argparse
41
- import json
42
- import sys
43
- from datetime import datetime, timedelta, timezone
44
- from pathlib import Path
45
-
46
- # --------------------------------------------------------------------------- #
47
- # Schema constants. Tunables live here (a per-repo ``.caddis/config.toml``
48
- # override is a deliberate fast-follow, matching check_doc_coverage / guard).
49
- # --------------------------------------------------------------------------- #
50
- KINDS: tuple[str, ...] = ("failure-mode", "rejected-approach", "repo-fact", "workflow-success")
51
- SOURCES: tuple[str, ...] = ("auto", "knowledge-transfer", "manual")
52
-
53
- # The "don't repeat this" kinds — weighted up when surfacing (they cost the most to relearn).
54
- WEIGHTED_KINDS: frozenset[str] = frozenset({"failure-mode", "rejected-approach"})
55
-
56
- PRUNE_AGE_DAYS = 14 # single-hit facts older than this decay out
57
- MAX_FACTS = 200 # hard cap on the store; oldest-by-recency overflow drops first
58
- SURFACE_LIMIT = 5 # SessionStart shows at most this many (context-economy-safe)
59
-
60
- STORE_NAME = "memory.jsonl"
61
- DEFAULT_STORE = f".caddis/{STORE_NAME}" # nominal path; resolve per-repo via store_path()
62
-
63
- _REQUIRED_FIELDS = ("kind", "key", "summary", "hitCount", "firstSeen", "lastSeen", "source")
64
- _EPOCH = datetime.min.replace(tzinfo=timezone.utc)
65
-
66
-
67
- def store_path(root) -> Path:
68
- """This repo's fact store, at ``.caddis/memory.jsonl``."""
69
- try:
70
- from claudster_config import artifact_read
71
- return artifact_read(root, STORE_NAME)
72
- except Exception:
73
- return Path(root) / DEFAULT_STORE
74
-
75
-
76
- # --------------------------------------------------------------------------- #
77
- # Pure helpers (no filesystem) — the testable core.
78
- # --------------------------------------------------------------------------- #
79
- def normalize_key(value: str) -> str:
80
- """Lowercase, trim, and collapse internal whitespace — the dedup-key canonical form."""
81
- return " ".join((value or "").strip().lower().split())
82
-
83
-
84
- def fingerprint(fact: dict) -> str:
85
- """The dedup identity. Prefers an explicit ``fp`` (a hash of the FULL command, set at capture) so two
86
- distinct commands that share a truncated 80-char head don't collapse into one inflated ``hitCount``;
87
- falls back to ``kind:normalize(key)`` for facts written before ``fp`` existed (and for non-command facts)."""
88
- fp = fact.get("fp")
89
- if isinstance(fp, str) and fp:
90
- return f"{fact.get('kind', '')}:{fp}"
91
- basis = fact.get("key") or fact.get("summary") or ""
92
- return f"{fact.get('kind', '')}:{normalize_key(basis)}"
93
-
94
-
95
- def _parse_iso(value) -> datetime:
96
- """Parse an ISO-8601 timestamp to an aware datetime; unparseable/empty → the epoch floor.
97
-
98
- Tolerant by design (the store may be hand-edited): a bad timestamp must never crash a cycle,
99
- it just sorts as oldest. Accepts a trailing ``Z`` (Python <3.11 ``fromisoformat`` rejects it).
100
- """
101
- if isinstance(value, datetime):
102
- return value if value.tzinfo else value.replace(tzinfo=timezone.utc)
103
- s = (value or "").strip()
104
- if not s:
105
- return _EPOCH
106
- if s.endswith(("Z", "z")):
107
- s = s[:-1] + "+00:00"
108
- try:
109
- dt = datetime.fromisoformat(s)
110
- except ValueError:
111
- return _EPOCH
112
- return dt if dt.tzinfo else dt.replace(tzinfo=timezone.utc)
113
-
114
-
115
- def make_fact(
116
- kind: str,
117
- key: str,
118
- summary: str,
119
- observed_at: str,
120
- *,
121
- source: str = "auto",
122
- evidence: str | None = None,
123
- fp: str | None = None,
124
- ) -> dict:
125
- """Construct a well-formed single-hit fact (``hitCount=1``, first==last==observed).
126
-
127
- ``fp`` (optional) is the full-command dedup fingerprint; when set it overrides the key-based
128
- fingerprint so distinct commands sharing a truncated display key don't merge."""
129
- fact = {
130
- "kind": kind,
131
- "key": key,
132
- "summary": summary,
133
- "hitCount": 1,
134
- "firstSeen": observed_at,
135
- "lastSeen": observed_at,
136
- "source": source,
137
- }
138
- if evidence:
139
- fact["evidence"] = evidence
140
- if fp:
141
- fact["fp"] = fp
142
- return fact
143
-
144
-
145
- def is_valid_fact(fact) -> bool:
146
- """True if ``fact`` has every required field, a known ``kind``, and a positive int hitCount.
147
-
148
- Used to reject malformed/hand-broken lines when loading and to validate capture candidates.
149
- """
150
- if not isinstance(fact, dict):
151
- return False
152
- if any(f not in fact for f in _REQUIRED_FIELDS):
153
- return False
154
- if fact["kind"] not in KINDS:
155
- return False
156
- hc = fact["hitCount"]
157
- if not isinstance(hc, int) or isinstance(hc, bool) or hc < 1:
158
- return False
159
- return bool(str(fact["summary"]).strip())
160
-
161
-
162
- def _hit(fact: dict) -> int:
163
- try:
164
- n = int(fact.get("hitCount", 1))
165
- except (TypeError, ValueError):
166
- return 1
167
- return n if n >= 1 else 1
168
-
169
-
170
- # --------------------------------------------------------------------------- #
171
- # The four pure consolidation functions the design names. Filesystem-free.
172
- # --------------------------------------------------------------------------- #
173
- def merge(facts: list[dict]) -> list[dict]:
174
- """Group by fingerprint into consolidated facts (insertion order of first appearance).
175
-
176
- For each group: sum ``hitCount``; ``firstSeen`` = min, ``lastSeen`` = max; the **newest**
177
- (latest ``lastSeen``) member's ``summary`` / ``source`` / ``evidence`` win. This is the
178
- reinforce step — re-running it over (existing ⧺ new candidates) accretes hit counts. Each
179
- returned fact is a fresh dict; inputs are never mutated.
180
- """
181
- merged: dict[str, dict] = {}
182
- order: list[str] = []
183
-
184
- for f in facts:
185
- fp = fingerprint(f)
186
- if fp not in merged:
187
- first = f.get("firstSeen") or f.get("lastSeen") or ""
188
- last = f.get("lastSeen") or f.get("firstSeen") or ""
189
- g = dict(f)
190
- g["hitCount"] = _hit(f)
191
- g["firstSeen"] = first
192
- g["lastSeen"] = last
193
- merged[fp] = g
194
- order.append(fp)
195
- continue
196
-
197
- g = merged[fp]
198
- g["hitCount"] += _hit(f)
199
-
200
- f_first = f.get("firstSeen") or f.get("lastSeen") or ""
201
- if _parse_iso(f_first) < _parse_iso(g["firstSeen"]):
202
- g["firstSeen"] = f_first
203
-
204
- f_last = f.get("lastSeen") or f.get("firstSeen") or ""
205
- # >= so a later-in-list tie counts as "newest wins" (last writer for same timestamp).
206
- if _parse_iso(f_last) >= _parse_iso(g["lastSeen"]):
207
- g["lastSeen"] = f_last
208
- if f.get("summary"):
209
- g["summary"] = f["summary"]
210
- if f.get("source"):
211
- g["source"] = f["source"]
212
- if f.get("evidence"):
213
- g["evidence"] = f["evidence"]
214
-
215
- return [merged[fp] for fp in order]
216
-
217
-
218
- def prune(facts: list[dict], now, *, max_age_days: int = PRUNE_AGE_DAYS, cap: int = MAX_FACTS) -> list[dict]:
219
- """Decay then cap.
220
-
221
- 1. Drop ``hitCount <= 1`` facts whose ``lastSeen`` is older than ``max_age_days`` (one-hit
222
- noise fades on its own). Reinforced facts (hitCount >= 2) are never aged out.
223
- 2. Keep the top ``cap`` by ``(hitCount desc, lastSeen desc)`` — overflow drops the
224
- least-reinforced, oldest facts first.
225
-
226
- ``now`` may be an ISO string or a datetime. Returns a new list; inputs are never mutated.
227
- """
228
- now_dt = _parse_iso(now)
229
- cutoff = now_dt - timedelta(days=max_age_days)
230
-
231
- kept = [
232
- f for f in facts
233
- if not (_hit(f) <= 1 and _parse_iso(f.get("lastSeen")) < cutoff)
234
- ]
235
- kept.sort(key=lambda f: (_hit(f), _parse_iso(f.get("lastSeen"))), reverse=True)
236
- return kept[:cap]
237
-
238
-
239
- def conflicts(facts: list[dict]) -> list[dict]:
240
- """Flag fingerprints carrying materially different summaries — don't auto-resolve, surface.
241
-
242
- "Materially different" = distinct after :func:`normalize_key`. Returns one entry per
243
- conflicting fingerprint: ``{"kind", "key", "summaries": [...]}`` with the distinct summaries
244
- in first-seen order. Intended to run over (existing ⧺ incoming) *before* merge collapses them.
245
- """
246
- by_fp: dict[str, list[dict]] = {}
247
- for f in facts:
248
- by_fp.setdefault(fingerprint(f), []).append(f)
249
-
250
- out: list[dict] = []
251
- for group in by_fp.values():
252
- distinct: list[str] = []
253
- seen_norm: set[str] = set()
254
- for f in group:
255
- summary = str(f.get("summary", ""))
256
- norm = normalize_key(summary)
257
- if norm and norm not in seen_norm:
258
- seen_norm.add(norm)
259
- distinct.append(summary)
260
- if len(distinct) > 1:
261
- out.append({
262
- "kind": group[0].get("kind", ""),
263
- "key": group[0].get("key", ""),
264
- "summaries": distinct,
265
- })
266
- return out
267
-
268
-
269
- def rank_for_surfacing(facts: list[dict], n: int = SURFACE_LIMIT, *, now=None) -> list[dict]:
270
- """Top ``n`` facts to show at SessionStart — score ≈ ``weight × hitCount × recency``.
271
-
272
- ``failure-mode`` / ``rejected-approach`` (the "don't repeat this" kinds) are weighted up. If
273
- ``now`` is given, recency decays continuously with age; otherwise facts are ordered by
274
- ``lastSeen`` directly (a now-free, deterministic proxy). Stable: ties break by ``lastSeen``
275
- desc then fingerprint. Returns a new list; inputs are never mutated.
276
- """
277
- now_dt = _parse_iso(now) if now is not None else None
278
-
279
- def score(f: dict) -> float:
280
- weight = 2.0 if f.get("kind") in WEIGHTED_KINDS else 1.0
281
- if now_dt is None:
282
- return weight * _hit(f)
283
- age_days = max(0.0, (now_dt - _parse_iso(f.get("lastSeen"))).total_seconds() / 86400.0)
284
- recency = 1.0 / (1.0 + age_days) # 1.0 today, halves after a day, decays smoothly
285
- return weight * _hit(f) * recency
286
-
287
- ranked = sorted(
288
- facts,
289
- key=lambda f: (score(f), _parse_iso(f.get("lastSeen")), fingerprint(f)),
290
- reverse=True,
291
- )
292
- return ranked[:n]
293
-
294
-
295
- def consolidate(facts: list[dict], now, *, max_age_days: int = PRUNE_AGE_DAYS, cap: int = MAX_FACTS) -> list[dict]:
296
- """One full cycle: ``merge`` (reinforce + dedup) then ``prune`` (decay + cap). Pure."""
297
- return prune(merge(facts), now, max_age_days=max_age_days, cap=cap)
298
-
299
-
300
- # --------------------------------------------------------------------------- #
301
- # Filesystem glue — fail-open & silent. All I/O lives here, mirroring
302
- # check_doc_coverage's pure-core / glue split. Never raises into a hook.
303
- # --------------------------------------------------------------------------- #
304
- def load_facts(path: Path) -> list[dict]:
305
- """Read the JSONL store, skipping blank/malformed/invalid lines. Missing file → ``[]``.
306
-
307
- Tolerant by design: a hand-edited or partially-written store must never crash a turn.
308
- """
309
- path = Path(path)
310
- if not path.exists():
311
- return []
312
- facts: list[dict] = []
313
- try:
314
- text = path.read_text(encoding="utf-8", errors="replace")
315
- except OSError:
316
- return []
317
- for line in text.splitlines():
318
- line = line.strip()
319
- if not line:
320
- continue
321
- try:
322
- obj = json.loads(line)
323
- except (json.JSONDecodeError, ValueError):
324
- continue
325
- if is_valid_fact(obj):
326
- facts.append(obj)
327
- return facts
328
-
329
-
330
- def save_facts(path: Path, facts: list[dict]) -> bool:
331
- """Write facts as JSONL (one compact object per line). Returns True on success, never raises.
332
-
333
- Writes via a temp file + atomic replace so a crash mid-write can't corrupt the store.
334
- """
335
- path = Path(path)
336
- try:
337
- path.parent.mkdir(parents=True, exist_ok=True)
338
- tmp = path.with_suffix(path.suffix + ".tmp")
339
- lines = [json.dumps(f, ensure_ascii=False, sort_keys=True) for f in facts]
340
- tmp.write_text("\n".join(lines) + ("\n" if lines else ""), encoding="utf-8")
341
- tmp.replace(path)
342
- return True
343
- except OSError:
344
- return False
345
-
346
-
347
- def load_tunables(root) -> dict:
348
- """Read ``[dream_memory]`` overrides from the repo's ``config.toml``; defaults otherwise.
349
-
350
- Returns ``{"prune_age_days", "max_facts", "surface_limit"}``. Fail-open — a missing config, a
351
- missing helper, or a bad value degrades to the baked-in default, never raising into a hook.
352
- """
353
- defaults = {"prune_age_days": PRUNE_AGE_DAYS, "max_facts": MAX_FACTS, "surface_limit": SURFACE_LIMIT}
354
- try:
355
- from claudster_config import get_int, load_config
356
- cfg = load_config(root, "dream_memory")
357
- return {
358
- "prune_age_days": get_int(cfg, "prune_age_days", PRUNE_AGE_DAYS),
359
- "max_facts": get_int(cfg, "max_facts", MAX_FACTS),
360
- "surface_limit": get_int(cfg, "surface_limit", SURFACE_LIMIT),
361
- }
362
- except Exception:
363
- return defaults
364
-
365
-
366
- def _repo_root() -> Path:
367
- """Git top-level if available, else cwd — location-independent (matches the caddis hooks)."""
368
- try:
369
- import subprocess
370
- out = subprocess.run(
371
- ["git", "rev-parse", "--show-toplevel"],
372
- capture_output=True, text=True, timeout=5,
373
- )
374
- if out.returncode == 0 and out.stdout.strip():
375
- return Path(out.stdout.strip())
376
- except Exception:
377
- pass
378
- return Path.cwd()
379
-
380
-
381
- def _format_surface(facts: list[dict]) -> list[str]:
382
- """Render ranked facts as the ≤5 SessionStart lines (the surfacing hook reuses this in 5c)."""
383
- lines: list[str] = []
384
- for f in facts:
385
- mark = "⚠ " if f.get("kind") in WEIGHTED_KINDS else " "
386
- hits = _hit(f)
387
- suffix = f" (×{hits})" if hits > 1 else ""
388
- lines.append(f" {mark}{f.get('kind')}: {f.get('summary')}{suffix}")
389
- return lines
390
-
391
-
392
- def main() -> None:
393
- if hasattr(sys.stdout, "reconfigure"):
394
- sys.stdout.reconfigure(encoding="utf-8") # Windows cp1252 can't encode ⚠/× glyphs
395
- parser = argparse.ArgumentParser(
396
- description="Inspect / consolidate the Dream Memory fact store (.caddis/memory.jsonl).",
397
- )
398
- parser.add_argument(
399
- "--consolidate",
400
- action="store_true",
401
- help="Run a merge+prune cycle and rewrite the store (no-op if it would not change).",
402
- )
403
- parser.add_argument(
404
- "--now",
405
- default=None,
406
- help="ISO timestamp to use as 'now' for decay/ranking (default: current UTC).",
407
- )
408
- args = parser.parse_args()
409
-
410
- now = args.now or datetime.now(timezone.utc).isoformat()
411
- root = _repo_root()
412
- store = store_path(root)
413
- tune = load_tunables(root)
414
- facts = load_facts(store)
415
-
416
- if not facts:
417
- print("[memory] no facts yet.")
418
- return
419
-
420
- if args.consolidate:
421
- consolidated = consolidate(facts, now, max_age_days=tune["prune_age_days"], cap=tune["max_facts"])
422
- save_facts(store, consolidated)
423
- print(f"[memory] consolidated: {len(facts)} → {len(consolidated)} facts.")
424
- facts = consolidated
425
-
426
- top = rank_for_surfacing(facts, tune["surface_limit"], now=now)
427
- print("[memory] reinforced facts for this repo (auto; fades if not seen):")
428
- for line in _format_surface(top):
429
- print(line)
430
- issues = conflicts(facts)
431
- if issues:
432
- print(f"\n[memory] {len(issues)} conflicting fact(s) — review:")
433
- for c in issues:
434
- print(f" {c['kind']}: {c['key']} → {len(c['summaries'])} differing summaries")
435
-
436
-
437
- if __name__ == "__main__":
438
- main()
@@ -1,93 +0,0 @@
1
- Copyright 2012 The Arsenal Project Authors (andrij.design@gmail.com)
2
-
3
- This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
- This license is copied below, and is also available with a FAQ at:
5
- https://openfontlicense.org
6
-
7
-
8
- -----------------------------------------------------------
9
- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
- -----------------------------------------------------------
11
-
12
- PREAMBLE
13
- The goals of the Open Font License (OFL) are to stimulate worldwide
14
- development of collaborative font projects, to support the font creation
15
- efforts of academic and linguistic communities, and to provide a free and
16
- open framework in which fonts may be shared and improved in partnership
17
- with others.
18
-
19
- The OFL allows the licensed fonts to be used, studied, modified and
20
- redistributed freely as long as they are not sold by themselves. The
21
- fonts, including any derivative works, can be bundled, embedded,
22
- redistributed and/or sold with any software provided that any reserved
23
- names are not used by derivative works. The fonts and derivatives,
24
- however, cannot be released under any other type of license. The
25
- requirement for fonts to remain under this license does not apply
26
- to any document created using the fonts or their derivatives.
27
-
28
- DEFINITIONS
29
- "Font Software" refers to the set of files released by the Copyright
30
- Holder(s) under this license and clearly marked as such. This may
31
- include source files, build scripts and documentation.
32
-
33
- "Reserved Font Name" refers to any names specified as such after the
34
- copyright statement(s).
35
-
36
- "Original Version" refers to the collection of Font Software components as
37
- distributed by the Copyright Holder(s).
38
-
39
- "Modified Version" refers to any derivative made by adding to, deleting,
40
- or substituting -- in part or in whole -- any of the components of the
41
- Original Version, by changing formats or by porting the Font Software to a
42
- new environment.
43
-
44
- "Author" refers to any designer, engineer, programmer, technical
45
- writer or other person who contributed to the Font Software.
46
-
47
- PERMISSION & CONDITIONS
48
- Permission is hereby granted, free of charge, to any person obtaining
49
- a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
- redistribute, and sell modified and unmodified copies of the Font
51
- Software, subject to the following conditions:
52
-
53
- 1) Neither the Font Software nor any of its individual components,
54
- in Original or Modified Versions, may be sold by itself.
55
-
56
- 2) Original or Modified Versions of the Font Software may be bundled,
57
- redistributed and/or sold with any software, provided that each copy
58
- contains the above copyright notice and this license. These can be
59
- included either as stand-alone text files, human-readable headers or
60
- in the appropriate machine-readable metadata fields within text or
61
- binary files as long as those fields can be easily viewed by the user.
62
-
63
- 3) No Modified Version of the Font Software may use the Reserved Font
64
- Name(s) unless explicit written permission is granted by the corresponding
65
- Copyright Holder. This restriction only applies to the primary font name as
66
- presented to the users.
67
-
68
- 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
- Software shall not be used to promote, endorse or advertise any
70
- Modified Version, except to acknowledge the contribution(s) of the
71
- Copyright Holder(s) and the Author(s) or with their explicit written
72
- permission.
73
-
74
- 5) The Font Software, modified or unmodified, in part or in whole,
75
- must be distributed entirely under this license, and must not be
76
- distributed under any other license. The requirement for fonts to
77
- remain under this license does not apply to any document created
78
- using the Font Software.
79
-
80
- TERMINATION
81
- This license becomes null and void if any of the above conditions are
82
- not met.
83
-
84
- DISCLAIMER
85
- THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
- OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
- COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
- INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
- DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
- FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
- OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -1,93 +0,0 @@
1
- Copyright 2019 The Big Shoulders Project Authors (https://github.com/xotypeco/big_shoulders)
2
-
3
- This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
- This license is copied below, and is also available with a FAQ at:
5
- https://openfontlicense.org
6
-
7
-
8
- -----------------------------------------------------------
9
- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
- -----------------------------------------------------------
11
-
12
- PREAMBLE
13
- The goals of the Open Font License (OFL) are to stimulate worldwide
14
- development of collaborative font projects, to support the font creation
15
- efforts of academic and linguistic communities, and to provide a free and
16
- open framework in which fonts may be shared and improved in partnership
17
- with others.
18
-
19
- The OFL allows the licensed fonts to be used, studied, modified and
20
- redistributed freely as long as they are not sold by themselves. The
21
- fonts, including any derivative works, can be bundled, embedded,
22
- redistributed and/or sold with any software provided that any reserved
23
- names are not used by derivative works. The fonts and derivatives,
24
- however, cannot be released under any other type of license. The
25
- requirement for fonts to remain under this license does not apply
26
- to any document created using the fonts or their derivatives.
27
-
28
- DEFINITIONS
29
- "Font Software" refers to the set of files released by the Copyright
30
- Holder(s) under this license and clearly marked as such. This may
31
- include source files, build scripts and documentation.
32
-
33
- "Reserved Font Name" refers to any names specified as such after the
34
- copyright statement(s).
35
-
36
- "Original Version" refers to the collection of Font Software components as
37
- distributed by the Copyright Holder(s).
38
-
39
- "Modified Version" refers to any derivative made by adding to, deleting,
40
- or substituting -- in part or in whole -- any of the components of the
41
- Original Version, by changing formats or by porting the Font Software to a
42
- new environment.
43
-
44
- "Author" refers to any designer, engineer, programmer, technical
45
- writer or other person who contributed to the Font Software.
46
-
47
- PERMISSION & CONDITIONS
48
- Permission is hereby granted, free of charge, to any person obtaining
49
- a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
- redistribute, and sell modified and unmodified copies of the Font
51
- Software, subject to the following conditions:
52
-
53
- 1) Neither the Font Software nor any of its individual components,
54
- in Original or Modified Versions, may be sold by itself.
55
-
56
- 2) Original or Modified Versions of the Font Software may be bundled,
57
- redistributed and/or sold with any software, provided that each copy
58
- contains the above copyright notice and this license. These can be
59
- included either as stand-alone text files, human-readable headers or
60
- in the appropriate machine-readable metadata fields within text or
61
- binary files as long as those fields can be easily viewed by the user.
62
-
63
- 3) No Modified Version of the Font Software may use the Reserved Font
64
- Name(s) unless explicit written permission is granted by the corresponding
65
- Copyright Holder. This restriction only applies to the primary font name as
66
- presented to the users.
67
-
68
- 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
- Software shall not be used to promote, endorse or advertise any
70
- Modified Version, except to acknowledge the contribution(s) of the
71
- Copyright Holder(s) and the Author(s) or with their explicit written
72
- permission.
73
-
74
- 5) The Font Software, modified or unmodified, in part or in whole,
75
- must be distributed entirely under this license, and must not be
76
- distributed under any other license. The requirement for fonts to
77
- remain under this license does not apply to any document created
78
- using the Font Software.
79
-
80
- TERMINATION
81
- This license becomes null and void if any of the above conditions are
82
- not met.
83
-
84
- DISCLAIMER
85
- THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
- OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
- COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
- INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
- DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
- FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
- OTHER DEALINGS IN THE FONT SOFTWARE.