devloom 1.0.0 → 1.2.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 (142) hide show
  1. package/.ai/core.dsl +44 -0
  2. package/.ai/skills.dsl +39 -0
  3. package/.ai/verify.dsl +97 -0
  4. package/.ai/workflow.dsl +81 -0
  5. package/.opencode/themes/devloom-night-owl.json +103 -0
  6. package/GUIDE.md +572 -115
  7. package/README.md +583 -109
  8. package/SECURITY.md +93 -0
  9. package/agents/devloom-developer-flash.md +31 -0
  10. package/agents/devloom-developer-senior.md +32 -0
  11. package/agents/devloom-developer.md +21 -55
  12. package/agents/devloom-documenter-flash.md +28 -0
  13. package/agents/devloom-documenter.md +17 -56
  14. package/agents/devloom-orchestrator.md +236 -356
  15. package/agents/devloom-planner-flash.md +34 -0
  16. package/agents/devloom-planner-senior.md +35 -0
  17. package/agents/devloom-planner.md +36 -0
  18. package/agents/devloom-qa-flash.md +32 -0
  19. package/agents/devloom-qa.md +21 -83
  20. package/agents/devloom-security-senior.md +35 -0
  21. package/agents/devloom-security.md +34 -0
  22. package/agents/devloom-verifier.md +33 -0
  23. package/agents/devloom-vision.md +113 -0
  24. package/agents/devloom-visual-critic.md +102 -0
  25. package/agents/devloom-visual-director.md +84 -0
  26. package/commands/devloom-agents.md +49 -0
  27. package/commands/devloom-auto.md +11 -0
  28. package/commands/devloom-context.md +82 -0
  29. package/commands/devloom-deepseek-mimo.md +11 -0
  30. package/commands/devloom-deepseek.md +11 -0
  31. package/commands/devloom-free.md +11 -0
  32. package/commands/devloom-go-economy.md +11 -0
  33. package/commands/devloom-go-flash.md +11 -0
  34. package/commands/devloom-go.md +11 -0
  35. package/commands/devloom-init.md +28 -50
  36. package/commands/devloom-loop-status.md +25 -0
  37. package/commands/devloom-loop.md +36 -0
  38. package/commands/devloom-mimo.md +11 -0
  39. package/commands/devloom-plan.md +13 -0
  40. package/commands/devloom-refresh.md +22 -0
  41. package/commands/devloom-resume.md +30 -49
  42. package/commands/devloom-save.md +69 -0
  43. package/commands/devloom-status.md +9 -18
  44. package/commands/devloom.md +99 -67
  45. package/dist/agents.d.ts +30 -0
  46. package/dist/agents.d.ts.map +1 -0
  47. package/dist/agents.js +139 -0
  48. package/dist/agents.js.map +1 -0
  49. package/dist/bootstrap.d.ts +56 -0
  50. package/dist/bootstrap.d.ts.map +1 -0
  51. package/dist/bootstrap.js +116 -0
  52. package/dist/bootstrap.js.map +1 -0
  53. package/dist/constraints.d.ts +5 -0
  54. package/dist/constraints.d.ts.map +1 -0
  55. package/dist/constraints.js +45 -0
  56. package/dist/constraints.js.map +1 -0
  57. package/dist/context.d.ts +42 -0
  58. package/dist/context.d.ts.map +1 -0
  59. package/dist/context.js +636 -0
  60. package/dist/context.js.map +1 -0
  61. package/dist/guard.d.ts +19 -0
  62. package/dist/guard.d.ts.map +1 -0
  63. package/dist/guard.js +418 -0
  64. package/dist/guard.js.map +1 -0
  65. package/dist/loop.d.ts +64 -0
  66. package/dist/loop.d.ts.map +1 -0
  67. package/dist/loop.js +164 -0
  68. package/dist/loop.js.map +1 -0
  69. package/dist/plugin.d.ts.map +1 -1
  70. package/dist/plugin.js +101 -1
  71. package/dist/plugin.js.map +1 -1
  72. package/dist/tui-agents.d.ts +61 -0
  73. package/dist/tui-agents.d.ts.map +1 -0
  74. package/dist/tui-agents.js +89 -0
  75. package/dist/tui-agents.js.map +1 -0
  76. package/dist/tui.d.ts +6 -0
  77. package/dist/tui.d.ts.map +1 -0
  78. package/dist/tui.js +92 -0
  79. package/dist/tui.js.map +1 -0
  80. package/dist/worktree.d.ts +46 -0
  81. package/dist/worktree.d.ts.map +1 -0
  82. package/dist/worktree.js +272 -0
  83. package/dist/worktree.js.map +1 -0
  84. package/package.json +46 -6
  85. package/patterns/changelog-drafter.md +38 -0
  86. package/patterns/ci-sweeper.md +40 -0
  87. package/patterns/daily-triage.md +37 -0
  88. package/patterns/dependency-sweeper.md +40 -0
  89. package/patterns/design-audit.md +63 -0
  90. package/patterns/issue-triage.md +37 -0
  91. package/patterns/post-merge-cleanup.md +34 -0
  92. package/patterns/pr-babysitter.md +37 -0
  93. package/patterns/registry.yaml +52 -0
  94. package/postinstall.mjs +264 -64
  95. package/project/README.md +29 -0
  96. package/protocol/agent-contracts.md +27 -0
  97. package/protocol/artifact-system.md +53 -0
  98. package/protocol/model-routing.md +194 -0
  99. package/protocol/orchestrator-core.md +43 -0
  100. package/protocol/project-system.md +45 -0
  101. package/protocol/rules.md +18 -0
  102. package/protocol/verification-policy.md +48 -0
  103. package/scripts/briefing.mjs +192 -0
  104. package/scripts/loop-run.mjs +205 -0
  105. package/scripts/model-capabilities.mjs +194 -0
  106. package/scripts/plugin-cache.mjs +269 -0
  107. package/scripts/profile.mjs +755 -0
  108. package/scripts/visual-benchmark.mjs +149 -0
  109. package/scripts/worktree.mjs +445 -0
  110. package/skills/build/development.md +33 -0
  111. package/skills/build/live-docs.md +38 -0
  112. package/skills/build/simplify.md +50 -0
  113. package/skills/build/vision-analysis.md +98 -0
  114. package/skills/design/app-design.md +31 -0
  115. package/skills/design/design-grounding.md +30 -0
  116. package/skills/design/design-system.md +27 -0
  117. package/skills/design/game-design.md +35 -0
  118. package/skills/design/motion-design.md +34 -0
  119. package/skills/design/visual-direction.md +32 -0
  120. package/skills/design/web-design.md +33 -0
  121. package/skills/loop/changelog-drafter.md +32 -0
  122. package/skills/loop/ci-sweeper.md +24 -0
  123. package/skills/loop/constraints.md +21 -0
  124. package/skills/loop/dependency-sweeper.md +24 -0
  125. package/skills/loop/design-audit.md +67 -0
  126. package/skills/loop/issue-triage.md +27 -0
  127. package/skills/loop/post-merge-cleanup.md +24 -0
  128. package/skills/loop/pr-babysitter.md +26 -0
  129. package/skills/loop/triage.md +25 -0
  130. package/skills/loop/verifier.md +20 -0
  131. package/skills/meta/skill-discovery.md +23 -0
  132. package/skills/plan/planning.md +27 -0
  133. package/skills/plan/verification-planning.md +40 -0
  134. package/skills/review/security-review.md +63 -0
  135. package/skills/ship/documentation.md +11 -0
  136. package/skills/verify/app-verification.md +19 -0
  137. package/skills/verify/quality-assurance.md +17 -0
  138. package/skills/verify/visual-critique.md +30 -0
  139. package/skills/verify/visual-quality-gate.md +29 -0
  140. package/skills/verify/visual-regression.md +25 -0
  141. package/agents/devloom-analyst.md +0 -83
  142. package/agents/devloom-architect.md +0 -88
package/.ai/core.dsl ADDED
@@ -0,0 +1,44 @@
1
+ VER:1
2
+ LANG:EN
3
+ STYLE: Deterministic|LowToken|GitDiffable|HumanMaintainable
4
+ FMT:
5
+ - MD=human or mixed docs
6
+ - JSONM=minified JSON for AI-only state
7
+ TERMS: AC|ADR|A11y|API|Arch|BE|CleanArch|Ctx|Docs|E2E|FE|NFR|QA|RCA|Regr|ResponsiveUI|TDD|US
8
+ STATE:
9
+ - CFG=.opencode/devloom/project/config.json
10
+ - BOARD=.opencode/devloom/project/board.json
11
+ - PSTATE=.opencode/devloom/project/state.json
12
+ - REQ=.opencode/devloom/requirements.md
13
+ - PLAN=.opencode/devloom/plan.md
14
+ - DEF=.opencode/devloom/defects.json
15
+ PRINCIPLES:
16
+ - SOLID|CleanCode|CleanArch|DRY|KISS|YAGNI
17
+ - TDD: test-first for logic, failing-repro-first for bugs
18
+ - LayeredArch: domain<-app<-infra<-ui|DependencyInversion|no domain->framework coupling
19
+ - SmallFns|IntentionRevealingNames|NoDeadCode|HandleErrors|GuardEdges
20
+ - UX: Accessible(WCAG-AA)|Consistent|Responsive|ClearFeedback|ErrorRecovery
21
+ - Surgical: change only what the task requires, smallest correct diff
22
+ - Forensic: evidence-based, trace before acting, prove cause, verify after
23
+ - CorrectSolution: root-cause fix using the right/idiomatic approach; NO workarounds/hacks/suppression
24
+ - Precise: confirm assumptions against code/docs, never guess
25
+ RULES:
26
+ - EnglishOnly
27
+ - ApplyPrinciples
28
+ - SingleActive
29
+ - PersistAll
30
+ - NoDropPending
31
+ - LoadMemoryEveryPrompt
32
+ - UseRelevantSkillsEveryPrompt
33
+ - OfficialDocsFirst
34
+ - LatestStableCheck for stack-specific work
35
+ - TDDReq for code change
36
+ - RegrReq for code change
37
+ - NoScopeCreep
38
+ - SecureByDefault
39
+ - DeltaCommOnly
40
+ - AppendPromptAsLastTask
41
+ - AutoMaintainTicketsTodosPlan
42
+ - DelegateByDefault
43
+ - ShortStableKeys in JSONM
44
+ JSON_KEYS: v|id|type|title|status|ac|deps|files|tests|cols|ts|ctx|next
package/.ai/skills.dsl ADDED
@@ -0,0 +1,39 @@
1
+ LOAD_ORDER:
2
+ - detect domain
3
+ - load matching skills
4
+ - always apply core flow
5
+ MAP:
6
+ - REQ|PLAN|FE|BE|API arch=planning
7
+ - FE|BE|API impl|BUG|FIX|RCA=development
8
+ - TEST|PERF|REVIEW|REGR=quality-assurance
9
+ - EXP|ROUTE|FORM|DOM|A11Y|APIV|CONTRACT|JOURNEY|STATE|VISUAL|RESPONSIVE|MOTION=app-verification
10
+ - SEC=security-review
11
+ - DOC=documentation
12
+ - DESIGN|VISUALDIR|DESIGNFILE=visual-direction
13
+ - DESIGNGROUND|TOKENS|STYLEGUIDE=design-grounding
14
+ - WEBUI|LANDING|WEBSITE=web-design
15
+ - APPUI|MOBILEUI=app-design
16
+ - GAMEUI|HUD|GAMESCREEN=game-design
17
+ - ANIMATION|TRANSITION|MICROINTERACTION=motion-design
18
+ - DESIGNSYSTEM|COMPONENTLIBRARY=design-system
19
+ - VISUALCRITIQUE|VISUALSCORE|VISUALGATE=visual-critique
20
+ - VISUALQUALITY|UIQUALITYBAR=visual-quality-gate
21
+ - VISUALREGRESSION|SHOTDIFF=visual-regression
22
+ MATCH:
23
+ - ui|react|vue|angular|css|html|component|layout=>FE
24
+ - design|design brief|design file|visual direction|redesign|mockup fidelity|design contract=>DESIGN
25
+ - web page|landing|website|responsive layout=>WEBUI|DESIGN
26
+ - app screen|mobile ui|dashboard ui=>APPUI|DESIGN
27
+ - game hud|game ui|game screen=>GAMEUI|DESIGN
28
+ - animation|transition|micro-interaction|motion|hover effect=>MOTION|DESIGN
29
+ - design system|tokens|style guide|component library|spacing scale=>DESIGNSYSTEM
30
+ - visual critique|visual score|visual pass|visual fail|screenshot review|looks off|ugly=>VISUALCRITIQUE
31
+ - visual quality|quality bar|polish|visual regression|shot diff=>VISUALQUALITY|VISUALREGRESSION
32
+ - api|endpoint|service|route|graphql|rest=>BE|API
33
+ - crud|dto|schema|serializer|mapper|expose|exposure|payload|input|output|internal component|internal module=>SEC
34
+ - test|spec|jest|vitest|pytest|e2e=>TEST
35
+ - auth|secret|cors|xss|csrf|owasp=>SEC
36
+ - perf|slow|cache|bundle|lcp=>PERF
37
+ - bug|error|fail|crash|broken=>BUG
38
+ - readme|docs|adr|comment=>DOC
39
+ REPORT: ActivatedSkills=<list>
package/.ai/verify.dsl ADDED
@@ -0,0 +1,97 @@
1
+ UX_BAR: Accessible(WCAG-AA)|Consistent|Responsive|ClearFeedback|ErrorRecovery|NoLayoutShift
2
+ EXPLORE:
3
+ - visit all reachable routes
4
+ - enumerate buttons|links|forms|modals|tables|tabs
5
+ - continue until no new surface
6
+ - OUT: exploration-report.json
7
+ DOM:
8
+ - size>0
9
+ - visible
10
+ - inViewport
11
+ - notBlocked
12
+ - computedStyleSane
13
+ ROUTE:
14
+ - render
15
+ - noBlank
16
+ - noCrash
17
+ - noConsoleErr
18
+ - noNavFail
19
+ - noHydrationErr
20
+ - domVisible
21
+ - noBlockedClick
22
+ FORM:
23
+ - valid
24
+ - invalid
25
+ - required
26
+ - boundary
27
+ - loading
28
+ - successMsg
29
+ - errorMsg
30
+ A11Y:
31
+ - role
32
+ - label
33
+ - focus
34
+ - kbNav
35
+ - escClose
36
+ - contrast
37
+ - semanticHtml
38
+ API:
39
+ - auth
40
+ - authz
41
+ - inputVal
42
+ - outputSchema
43
+ - statusCodes
44
+ - errorShape
45
+ - paging/filter/sort if applicable
46
+ CONTRACT:
47
+ - generate/open OpenAPI when needed
48
+ - compare runtime fields/types/status to contract
49
+ STATE:
50
+ - enumerate valid states
51
+ - verify transitions + recovery paths
52
+ JOURNEY:
53
+ - derive from REQ+routes+ui
54
+ - CRUD
55
+ - LoginFlow
56
+ - SearchFilterSort
57
+ - ErrorRecovery
58
+ SEC:
59
+ - depAudit
60
+ - noSecrets
61
+ - cors
62
+ - sanitize
63
+ - auth
64
+ - authz
65
+ - inputVal
66
+ - outputSchema
67
+ - leastPrivilege
68
+ - noInternalFieldLeak
69
+ - massAssignment
70
+ - overposting
71
+ - xss
72
+ - csrf
73
+ - idor
74
+ PERF:
75
+ - loadTime
76
+ - noLeak
77
+ - noExcessRender
78
+ - bundleOk
79
+ VISUAL:
80
+ - screenshots available? if no: VISUAL_CRITIQUE_LIMITED (never fake VISUAL_PASS)
81
+ - score vs design.md contract (10 dims: hierarchy, spacing, typography, color, alignment, consistency, affordance, density, polish, fidelity)
82
+ - no layout overflow|no clipped text|no overlapping elements
83
+ - component states match design tokens
84
+ - accept critic verdict passed by orchestrator (CRITIC_VERDICT)
85
+ - OUT: VISUAL_PASS|VISUAL_FAIL with scores
86
+ RESPONSIVE:
87
+ - 360|768|1280 viewports
88
+ - no horizontal scroll
89
+ - no overlap|no truncation of critical content
90
+ - touch targets >=44px on small viewport
91
+ - images/svg scale correctly
92
+ MOTION:
93
+ - respects prefers-reduced-motion
94
+ - durations within budget (<=300ms standard|<=500ms complex)
95
+ - no layout shift during animation
96
+ - entrance/exit states complete (no stuck opacity/transform)
97
+ - easing consistent with design.md
@@ -0,0 +1,81 @@
1
+ FLOW: Triage>MinimalChain>Verify>Regr>Done
2
+ TRIAGE: classify intent first|run only matching chain+conditions|never full pipeline by default
3
+ CHAINS:
4
+ - feature=planner>developer>qa>documenter
5
+ - bug=developer(rootCause+fix)>qa(regr)
6
+ - refactor=planner(plan)>developer>qa
7
+ - small(<=2files,noNewBehavior)=developer>qa
8
+ - docsOnly=planner(validate)>documenter
9
+ - specOnly=planner(REQ)
10
+ - planOnly=planner(PLAN)
11
+ - explore=verifier(scope=explore)
12
+ - verifyOnly=qa+verifier(applicableScopes)
13
+ COND_ADDONS:
14
+ - UI=>verifier(scope=route,form,a11y)
15
+ - UI=>visual-director(DESIGN_FILE)>persist .opencode/devloom/context/design.md>developer>visual-critic(loop<=3)
16
+ - visualRequired=>criticVerdict recorded before DONE|VISUAL_CRITIQUE_LIMITED only if no screenshots available
17
+ - backendOnly(API|infra|docs)=>never route visual agents|never set VISUAL_REQUIRED
18
+ - API=>verifier(scope=api,contract)
19
+ - CRUD|exposure=>security(mandatory)
20
+ - userFlow=>verifier(scope=journey,state)
21
+ DEPS:
22
+ - developer requires plan for non-trivial work
23
+ - documenter only after verified impl
24
+ - qa regression always after a defect fix
25
+ ANTILOOP:
26
+ - no orchestrator self-delegation
27
+ - no subagent calls orchestrator
28
+ - every orchestrator turn: task()|DEVLOOM_DONE|BLOCKED+reason
29
+ - same agent+same input max2 then mark blocked + BLOCKED report (orchestrator handles recovery inline)
30
+ SUBAGENTS:
31
+ - Plan=devloom-planner
32
+ - Impl/Fix=devloom-developer
33
+ - Verify/Review/Regr=devloom-qa
34
+ - AppVerify=devloom-verifier(scope=explore|route|dom|form|a11y|api|contract|journey|state|visual|responsive|motion)
35
+ - Security=devloom-security
36
+ - Docs=devloom-documenter
37
+ - ImageAnalysis=devloom-vision
38
+ - DesignBrief=devloom-visual-director(emits DESIGN_FILE|read-only)
39
+ - VisualCritique=devloom-visual-critic(VISUAL_SCORE+TOP_3_PROBLEMS+DO_NOT_CHANGE+VISUAL_DELTA|read-only|max 3 cycles)
40
+ QUEUE:
41
+ - load CFG|BOARD|PSTATE on every prompt
42
+ - load memory and relevant skills on every prompt before planning new work
43
+ - append the current user prompt as the last task/todo before routing execution
44
+ - create or update tickets, todos, and plan entries automatically for every prompt
45
+ - if pending work exists: continue it first
46
+ - if user reprioritizes: persist old active, then switch
47
+ - doing<=1 unless explicit override
48
+ PHASES:
49
+ - Analysis=req+constraints+openqs
50
+ - Docs=source check+plan+ticket map+ADR/doc deltas
51
+ - Impl=one ticket only|min change|tests
52
+ - Verify=lint+unit+integration+e2e as applicable
53
+ - Regr=targeted impacted checks + full gate before done
54
+ - Done=all AC pass|gates pass|no open high defect
55
+ GATES:
56
+ - build
57
+ - lint
58
+ - unit
59
+ - integration
60
+ - e2e
61
+ - routes
62
+ - buttons
63
+ - forms
64
+ - links
65
+ - journeys
66
+ - api
67
+ - a11y
68
+ - responsive
69
+ - visual
70
+ - perf
71
+ - security
72
+ - noOpenDefects
73
+ FAIL_PATH: defect>developer(rootCauseFix)>qa(regr)|max3cycles>mark blocked+escalate
74
+ DELEGATION:
75
+ - use the mapped DevLoom subagent for each phase whenever one exists
76
+ - do not perform specialist phase work directly in the orchestrator when a mapped subagent is available
77
+ - run devloom-security whenever work adds/changes CRUD endpoints or exposes internal component/module data through inputs or outputs
78
+ - orchestrator may summarize, route, persist state, and decide next action, but implementation and verification work must be delegated
79
+ - orchestrator must keep task/todo/plan state current before and after each delegated phase
80
+ - orchestrator must save state at every phase boundary, before reprioritization, and before pause/finish
81
+ - if delegation fails or a subagent is unavailable, log the failure, retry once with a corrected prompt, then mark blocked and report BLOCKED
@@ -0,0 +1,103 @@
1
+ {
2
+ "$schema": "https://opencode.ai/theme.json",
3
+ "name": "DevLoom Night Owl",
4
+ "author": "DevLoom",
5
+ "defs": {
6
+ "owlBg": "#011627",
7
+ "owlBgPanel": "#0a1f2e",
8
+ "owlBgElement": "#0f2a3d",
9
+ "owlBgHover": "#15344a",
10
+ "owlBgSelection": "#1d3b52",
11
+ "owlFg": "#d6deeb",
12
+ "owlFgMuted": "#607e99",
13
+ "owlFgDim": "#3a6075",
14
+ "owlBorder": "#1b3b4f",
15
+ "owlBorderActive": "#7fdbca",
16
+ "owlCyan": "#7fdbca",
17
+ "owlTeal": "#5f7e97",
18
+ "owlOrange": "#f78c6c",
19
+ "owlYellow": "#ecc48d",
20
+ "owlGreen": "#addb67",
21
+ "owlRed": "#ff5874",
22
+ "owlPurple": "#c792ea",
23
+ "owlBlue": "#82aaff",
24
+ "owlPink": "#f07178",
25
+ "owlDiffAdd": "#1a3a2a",
26
+ "owlDiffRemove": "#3a1520",
27
+ "owlHighlightAdd": "#2d5a3d",
28
+ "owlHighlightRemove": "#5a2030"
29
+ },
30
+ "theme": {
31
+ "primary": { "dark": "owlCyan", "light": "owlTeal" },
32
+ "secondary": { "dark": "owlTeal", "light": "owlBlue" },
33
+ "accent": { "dark": "owlPurple", "light": "owlPink" },
34
+ "error": { "dark": "owlRed", "light": "owlRed" },
35
+ "warning": { "dark": "owlOrange", "light": "owlOrange" },
36
+ "success": { "dark": "owlGreen", "light": "owlGreen" },
37
+ "info": { "dark": "owlBlue", "light": "owlBlue" },
38
+ "text": { "dark": "owlFg", "light": "owlBg" },
39
+ "textMuted": { "dark": "owlFgMuted", "light": "owlFgMuted" },
40
+ "background": { "dark": "owlBg", "light": "#f0f4f8" },
41
+ "backgroundPanel": { "dark": "owlBgPanel", "light": "#e2e8f0" },
42
+ "backgroundElement": { "dark": "owlBgElement", "light": "#cbd5e1" },
43
+ "backgroundHover": { "dark": "owlBgHover", "light": "#b0c4de" },
44
+ "backgroundSelection": { "dark": "owlBgSelection", "light": "#94a3b8" },
45
+ "border": { "dark": "owlBorder", "light": "#94a3b8" },
46
+ "borderActive": { "dark": "owlBorderActive", "light": "owlCyan" },
47
+ "borderSubtle": { "dark": "owlBgSelection", "light": "#cbd5e1" },
48
+ "diffAdded": { "dark": "owlGreen", "light": "owlGreen" },
49
+ "diffRemoved": { "dark": "owlRed", "light": "owlRed" },
50
+ "diffContext": { "dark": "owlFgMuted", "light": "owlFgMuted" },
51
+ "diffHunkHeader": { "dark": "owlTeal", "light": "owlTeal" },
52
+ "diffHighlightAdded": { "dark": "owlGreen", "light": "owlGreen" },
53
+ "diffHighlightRemoved": { "dark": "owlRed", "light": "owlRed" },
54
+ "diffAddedBg": { "dark": "owlDiffAdd", "light": "#dcfce7" },
55
+ "diffRemovedBg": { "dark": "owlDiffRemove", "light": "#fee2e2" },
56
+ "diffContextBg": { "dark": "owlBgPanel", "light": "#f1f5f9" },
57
+ "diffLineNumber": { "dark": "owlFgDim", "light": "#94a3b8" },
58
+ "diffAddedLineNumberBg": { "dark": "owlDiffAdd", "light": "#dcfce7" },
59
+ "diffRemovedLineNumberBg": { "dark": "owlDiffRemove", "light": "#fee2e2" },
60
+ "markdownText": { "dark": "owlFg", "light": "#1e293b" },
61
+ "markdownHeading": { "dark": "owlCyan", "light": "owlTeal" },
62
+ "markdownLink": { "dark": "owlBlue", "light": "owlBlue" },
63
+ "markdownLinkText": { "dark": "owlCyan", "light": "owlCyan" },
64
+ "markdownCode": { "dark": "owlGreen", "light": "owlGreen" },
65
+ "markdownBlockQuote": { "dark": "owlFgDim", "light": "#94a3b8" },
66
+ "markdownEmph": { "dark": "owlOrange", "light": "owlOrange" },
67
+ "markdownStrong": { "dark": "owlYellow", "light": "owlYellow" },
68
+ "markdownHorizontalRule": { "dark": "owlBorder", "light": "#94a3b8" },
69
+ "markdownListItem": { "dark": "owlCyan", "light": "owlTeal" },
70
+ "markdownListEnumeration": { "dark": "owlOrange", "light": "owlOrange" },
71
+ "markdownImage": { "dark": "owlPurple", "light": "owlPurple" },
72
+ "markdownImageText": { "dark": "owlPink", "light": "owlPink" },
73
+ "markdownCodeBlock": { "dark": "owlFg", "light": "owlBg" },
74
+ "syntaxComment": { "dark": "owlFgDim", "light": "#94a3b8" },
75
+ "syntaxKeyword": { "dark": "owlPurple", "light": "owlPurple" },
76
+ "syntaxFunction": { "dark": "owlCyan", "light": "owlTeal" },
77
+ "syntaxVariable": { "dark": "owlOrange", "light": "owlOrange" },
78
+ "syntaxString": { "dark": "owlGreen", "light": "owlGreen" },
79
+ "syntaxNumber": { "dark": "owlYellow", "light": "owlYellow" },
80
+ "syntaxType": { "dark": "owlBlue", "light": "owlBlue" },
81
+ "syntaxOperator": { "dark": "owlPink", "light": "owlPink" },
82
+ "syntaxPunctuation": { "dark": "owlFg", "light": "#1e293b" },
83
+ "syntaxConstant": { "dark": "owlPurple", "light": "owlPurple" },
84
+ "syntaxBuiltin": { "dark": "owlCyan", "light": "owlTeal" },
85
+ "syntaxProperty": { "dark": "owlBlue", "light": "owlBlue" },
86
+ "syntaxMethod": { "dark": "owlCyan", "light": "owlTeal" },
87
+ "syntaxTag": { "dark": "owlRed", "light": "owlRed" },
88
+ "syntaxAttribute": { "dark": "owlOrange", "light": "owlOrange" },
89
+ "syntaxRegexp": { "dark": "owlPink", "light": "owlPink" },
90
+ "syntaxNamespace": { "dark": "owlYellow", "light": "owlYellow" },
91
+ "syntaxParameter": { "dark": "owlOrange", "light": "owlOrange" },
92
+ "syntaxField": { "dark": "owlBlue", "light": "owlBlue" },
93
+ "syntaxBoolean": { "dark": "owlPurple", "light": "owlPurple" },
94
+ "syntaxSpecial": { "dark": "owlPink", "light": "owlPink" },
95
+ "syntaxEscapeChar": { "dark": "owlPink", "light": "owlPink" },
96
+ "syntaxLabel": { "dark": "owlPurple", "light": "owlPurple" },
97
+ "syntaxImport": { "dark": "owlCyan", "light": "owlTeal" },
98
+ "syntaxPreproc": { "dark": "owlOrange", "light": "owlOrange" },
99
+ "syntaxDiffPlus": { "dark": "owlGreen", "light": "owlGreen" },
100
+ "syntaxDiffMinus": { "dark": "owlRed", "light": "owlRed" },
101
+ "syntaxDiffLine": { "dark": "owlBlue", "light": "owlBlue" }
102
+ }
103
+ }