saeeol 1.0.7 → 1.0.9
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.
- package/package.json +30 -30
- package/specs/effect/http-api.md +17 -17
- package/src/cli/cmd/providers.ts +75 -1
- package/src/cli/cmd/tui/app-events.ts +32 -0
- package/src/cli/cmd/tui/component/prompt/PromptStatusBar.tsx +15 -6
- package/src/cli/cmd/tui/component/prompt/use-prompt-memos.ts +9 -3
- package/src/index.ts +14 -109
- package/src/provider/bundled-providers.ts +3 -3
- package/src/provider/provider-events.ts +29 -0
- package/src/provider/provider-resolve.ts +23 -3
- package/src/provider/tiers/code.ts +0 -1
- package/src/provider/tiers/light.ts +2 -6
- package/src/saeeol/plugins/sidebar-usage.tsx +25 -0
- package/src/saeeol/provider/provider.ts +2 -12
- package/src/saeeol/session/compaction-chunks-utils.ts +53 -2
- package/src/server/routes/instance/event.ts +2 -0
- package/src/server/routes/instance/httpapi/api.ts +2 -0
- package/src/server/routes/ui.ts +0 -1
- package/src/session/compaction.ts +30 -6
- package/src/session/prompt/anthropic.txt +4 -4
- package/src/session/prompt/default.txt +4 -4
- package/src/session/prompt/ling.txt +5 -5
- package/src/tool/package.ts +168 -0
- package/src/tool/registry.ts +4 -0
- package/test/fixture/skills/agents-sdk/SKILL.md +30 -30
- package/test/fixture/skills/cloudflare/SKILL.md +66 -66
- package/test/saeeol/compaction-smart-select.test.ts +100 -0
- package/src/cli/cmd/tui/context/theme/opencode.json +0 -245
|
@@ -102,110 +102,110 @@ Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)
|
|
|
102
102
|
|
|
103
103
|
### Compute & Runtime
|
|
104
104
|
|
|
105
|
-
| Product
|
|
106
|
-
|
|
107
|
-
| Workers
|
|
108
|
-
| Pages
|
|
109
|
-
| Pages Functions
|
|
110
|
-
| Durable Objects
|
|
111
|
-
| Workflows
|
|
112
|
-
| Containers
|
|
105
|
+
| Product | Reference |
|
|
106
|
+
|---|---|
|
|
107
|
+
| Workers | `references/workers/` |
|
|
108
|
+
| Pages | `references/pages/` |
|
|
109
|
+
| Pages Functions | `references/pages-functions/` |
|
|
110
|
+
| Durable Objects | `references/durable-objects/` |
|
|
111
|
+
| Workflows | `references/workflows/` |
|
|
112
|
+
| Containers | `references/containers/` |
|
|
113
113
|
| Workers for Platforms | `references/workers-for-platforms/` |
|
|
114
|
-
| Cron Triggers
|
|
115
|
-
| Tail Workers
|
|
116
|
-
| Snippets
|
|
117
|
-
| Smart Placement
|
|
114
|
+
| Cron Triggers | `references/cron-triggers/` |
|
|
115
|
+
| Tail Workers | `references/tail-workers/` |
|
|
116
|
+
| Snippets | `references/snippets/` |
|
|
117
|
+
| Smart Placement | `references/smart-placement/` |
|
|
118
118
|
|
|
119
119
|
### Storage & Data
|
|
120
120
|
|
|
121
|
-
| Product
|
|
122
|
-
|
|
123
|
-
| KV
|
|
124
|
-
| D1
|
|
125
|
-
| R2
|
|
126
|
-
| Queues
|
|
127
|
-
| Hyperdrive
|
|
128
|
-
| DO Storage
|
|
129
|
-
| Secrets Store
|
|
130
|
-
| Pipelines
|
|
121
|
+
| Product | Reference |
|
|
122
|
+
|---|---|
|
|
123
|
+
| KV | `references/kv/` |
|
|
124
|
+
| D1 | `references/d1/` |
|
|
125
|
+
| R2 | `references/r2/` |
|
|
126
|
+
| Queues | `references/queues/` |
|
|
127
|
+
| Hyperdrive | `references/hyperdrive/` |
|
|
128
|
+
| DO Storage | `references/do-storage/` |
|
|
129
|
+
| Secrets Store | `references/secrets-store/` |
|
|
130
|
+
| Pipelines | `references/pipelines/` |
|
|
131
131
|
| R2 Data Catalog | `references/r2-data-catalog/` |
|
|
132
|
-
| R2 SQL
|
|
132
|
+
| R2 SQL | `references/r2-sql/` |
|
|
133
133
|
|
|
134
134
|
### AI & Machine Learning
|
|
135
135
|
|
|
136
|
-
| Product
|
|
137
|
-
|
|
136
|
+
| Product | Reference |
|
|
137
|
+
|---|---|
|
|
138
138
|
| Workers AI | `references/workers-ai/` |
|
|
139
|
-
| Vectorize
|
|
139
|
+
| Vectorize | `references/vectorize/` |
|
|
140
140
|
| Agents SDK | `references/agents-sdk/` |
|
|
141
141
|
| AI Gateway | `references/ai-gateway/` |
|
|
142
|
-
| AI Search
|
|
142
|
+
| AI Search | `references/ai-search/` |
|
|
143
143
|
|
|
144
144
|
### Networking & Connectivity
|
|
145
145
|
|
|
146
|
-
| Product
|
|
147
|
-
|
|
148
|
-
| Tunnel
|
|
149
|
-
| Spectrum
|
|
150
|
-
| TURN
|
|
146
|
+
| Product | Reference |
|
|
147
|
+
|---|---|
|
|
148
|
+
| Tunnel | `references/tunnel/` |
|
|
149
|
+
| Spectrum | `references/spectrum/` |
|
|
150
|
+
| TURN | `references/turn/` |
|
|
151
151
|
| Network Interconnect | `references/network-interconnect/` |
|
|
152
|
-
| Argo Smart Routing
|
|
153
|
-
| Workers VPC
|
|
152
|
+
| Argo Smart Routing | `references/argo-smart-routing/` |
|
|
153
|
+
| Workers VPC | `references/workers-vpc/` |
|
|
154
154
|
|
|
155
155
|
### Security
|
|
156
156
|
|
|
157
|
-
| Product
|
|
158
|
-
|
|
159
|
-
| WAF
|
|
160
|
-
| DDoS Protection | `references/ddos/`
|
|
161
|
-
| Bot Management
|
|
162
|
-
| API Shield
|
|
163
|
-
| Turnstile
|
|
157
|
+
| Product | Reference |
|
|
158
|
+
|---|---|
|
|
159
|
+
| WAF | `references/waf/` |
|
|
160
|
+
| DDoS Protection | `references/ddos/` |
|
|
161
|
+
| Bot Management | `references/bot-management/` |
|
|
162
|
+
| API Shield | `references/api-shield/` |
|
|
163
|
+
| Turnstile | `references/turnstile/` |
|
|
164
164
|
|
|
165
165
|
### Media & Content
|
|
166
166
|
|
|
167
|
-
| Product
|
|
168
|
-
|
|
169
|
-
| Images
|
|
170
|
-
| Stream
|
|
167
|
+
| Product | Reference |
|
|
168
|
+
|---|---|
|
|
169
|
+
| Images | `references/images/` |
|
|
170
|
+
| Stream | `references/stream/` |
|
|
171
171
|
| Browser Rendering | `references/browser-rendering/` |
|
|
172
|
-
| Zaraz
|
|
172
|
+
| Zaraz | `references/zaraz/` |
|
|
173
173
|
|
|
174
174
|
### Real-Time Communication
|
|
175
175
|
|
|
176
|
-
| Product
|
|
177
|
-
|
|
178
|
-
| RealtimeKit
|
|
176
|
+
| Product | Reference |
|
|
177
|
+
|---|---|
|
|
178
|
+
| RealtimeKit | `references/realtimekit/` |
|
|
179
179
|
| Realtime SFU | `references/realtime-sfu/` |
|
|
180
180
|
|
|
181
181
|
### Developer Tools
|
|
182
182
|
|
|
183
|
-
| Product
|
|
184
|
-
|
|
185
|
-
| Wrangler
|
|
186
|
-
| Miniflare
|
|
187
|
-
| C3
|
|
188
|
-
| Observability
|
|
189
|
-
| Analytics Engine
|
|
190
|
-
| Web Analytics
|
|
191
|
-
| Sandbox
|
|
192
|
-
| Workerd
|
|
183
|
+
| Product | Reference |
|
|
184
|
+
|---|---|
|
|
185
|
+
| Wrangler | `references/wrangler/` |
|
|
186
|
+
| Miniflare | `references/miniflare/` |
|
|
187
|
+
| C3 | `references/c3/` |
|
|
188
|
+
| Observability | `references/observability/` |
|
|
189
|
+
| Analytics Engine | `references/analytics-engine/` |
|
|
190
|
+
| Web Analytics | `references/web-analytics/` |
|
|
191
|
+
| Sandbox | `references/sandbox/` |
|
|
192
|
+
| Workerd | `references/workerd/` |
|
|
193
193
|
| Workers Playground | `references/workers-playground/` |
|
|
194
194
|
|
|
195
195
|
### Infrastructure as Code
|
|
196
196
|
|
|
197
|
-
| Product
|
|
198
|
-
|
|
199
|
-
| Pulumi
|
|
197
|
+
| Product | Reference |
|
|
198
|
+
|---|---|
|
|
199
|
+
| Pulumi | `references/pulumi/` |
|
|
200
200
|
| Terraform | `references/terraform/` |
|
|
201
|
-
| API
|
|
201
|
+
| API | `references/api/` |
|
|
202
202
|
|
|
203
203
|
### Other Services
|
|
204
204
|
|
|
205
|
-
| Product
|
|
206
|
-
|
|
205
|
+
| Product | Reference |
|
|
206
|
+
|---|---|
|
|
207
207
|
| Email Routing | `references/email-routing/` |
|
|
208
208
|
| Email Workers | `references/email-workers/` |
|
|
209
209
|
| Static Assets | `references/static-assets/` |
|
|
210
|
-
| Bindings
|
|
210
|
+
| Bindings | `references/bindings/` |
|
|
211
211
|
| Cache Reserve | `references/cache-reserve/` |
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test"
|
|
2
|
+
import { Config } from "@/config/config"
|
|
3
|
+
import type { Provider } from "@/provider/provider"
|
|
4
|
+
import { batchSplit, BATCH_TOKEN_TARGET, BATCH_TOKEN_MAX } from "@/saeeol/session/compaction-chunks-utils"
|
|
5
|
+
import type { MessageV2 } from "@/session/message-v2"
|
|
6
|
+
import { MessageID, PartID, SessionID } from "@/session/schema"
|
|
7
|
+
|
|
8
|
+
function cfg(compaction?: Config.Info["compaction"]) {
|
|
9
|
+
return Config.Info.zod.parse({ compaction })
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function msg(text: string, role: "user" | "assistant" = "user"): MessageV2.WithParts {
|
|
13
|
+
const sid = SessionID.make("test")
|
|
14
|
+
const mid = MessageID.ascending()
|
|
15
|
+
return {
|
|
16
|
+
info: {
|
|
17
|
+
id: mid,
|
|
18
|
+
role,
|
|
19
|
+
sessionID: sid,
|
|
20
|
+
time: { created: Date.now() },
|
|
21
|
+
parentID: role === "assistant" ? MessageID.ascending() : undefined,
|
|
22
|
+
} as MessageV2.Info,
|
|
23
|
+
parts: [
|
|
24
|
+
{
|
|
25
|
+
id: PartID.ascending(),
|
|
26
|
+
messageID: mid,
|
|
27
|
+
sessionID: sid,
|
|
28
|
+
type: "text",
|
|
29
|
+
text,
|
|
30
|
+
} as MessageV2.TextPart,
|
|
31
|
+
],
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
describe("compaction select budget", () => {
|
|
36
|
+
test("preserveRecentBudget scales with model context size", () => {
|
|
37
|
+
expect(BATCH_TOKEN_TARGET).toBeGreaterThan(0)
|
|
38
|
+
expect(BATCH_TOKEN_MAX).toBeGreaterThan(BATCH_TOKEN_TARGET)
|
|
39
|
+
})
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
describe("batchSplit token-aware splitting", () => {
|
|
43
|
+
test("produces batches with head/tail/middle structure", () => {
|
|
44
|
+
const messages = Array.from({ length: 20 }, (_, i) => msg(`message ${i}`))
|
|
45
|
+
const batches = batchSplit(messages, cfg())
|
|
46
|
+
expect(batches.length).toBeGreaterThan(0)
|
|
47
|
+
for (const batch of batches) {
|
|
48
|
+
expect(batch).toHaveProperty("first")
|
|
49
|
+
expect(batch).toHaveProperty("middle")
|
|
50
|
+
expect(batch).toHaveProperty("last")
|
|
51
|
+
expect(batch).toHaveProperty("index")
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
test("handles empty messages", () => {
|
|
56
|
+
const batches = batchSplit([], cfg())
|
|
57
|
+
expect(batches).toEqual([])
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
test("handles fewer messages than batch size", () => {
|
|
61
|
+
const messages = [msg("a"), msg("b"), msg("c")]
|
|
62
|
+
const batches = batchSplit(messages, cfg())
|
|
63
|
+
expect(batches.length).toBe(1)
|
|
64
|
+
expect(batches[0].first.length + batches[0].middle.length + batches[0].last.length).toBe(3)
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
test("respects custom batch_size config", () => {
|
|
68
|
+
const longText = "x".repeat(2_000)
|
|
69
|
+
const messages = Array.from({ length: 30 }, (_, i) => msg(`${longText} ${i}`))
|
|
70
|
+
const batches = batchSplit(messages, cfg({ batch_size: 5 }))
|
|
71
|
+
const total = batches.reduce((s, b) => s + b.first.length + b.middle.length + b.last.length, 0)
|
|
72
|
+
expect(total).toBe(30)
|
|
73
|
+
expect(batches.length).toBeGreaterThanOrEqual(2)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test("every message appears in exactly one batch", () => {
|
|
77
|
+
const messages = Array.from({ length: 25 }, (_, i) => msg(`message ${i}`))
|
|
78
|
+
const batches = batchSplit(messages, cfg())
|
|
79
|
+
const total = batches.reduce((sum, b) => sum + b.first.length + b.middle.length + b.last.length, 0)
|
|
80
|
+
expect(total).toBe(25)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
test("expands batch when messages are short (under token target)", () => {
|
|
84
|
+
const messages = Array.from({ length: 30 }, () => msg("hi"))
|
|
85
|
+
const batches = batchSplit(messages, cfg({ batch_size: 5 }))
|
|
86
|
+
expect(batches.length).toBeGreaterThan(0)
|
|
87
|
+
const firstBatch = batches[0]
|
|
88
|
+
const firstBatchTotal = firstBatch.first.length + firstBatch.middle.length + firstBatch.last.length
|
|
89
|
+
expect(firstBatchTotal).toBeGreaterThan(5)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
test("shrinks batch when messages are large (over token max)", () => {
|
|
93
|
+
const longText = "x".repeat(40_000)
|
|
94
|
+
const messages = Array.from({ length: 15 }, () => msg(longText))
|
|
95
|
+
const batches = batchSplit(messages, cfg({ batch_size: 10 }))
|
|
96
|
+
const firstBatch = batches[0]
|
|
97
|
+
const firstBatchTotal = firstBatch.first.length + firstBatch.middle.length + firstBatch.last.length
|
|
98
|
+
expect(firstBatchTotal).toBeLessThanOrEqual(10)
|
|
99
|
+
})
|
|
100
|
+
})
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://saeeol.ai/theme.json",
|
|
3
|
-
"defs": {
|
|
4
|
-
"darkStep1": "#0a0a0a",
|
|
5
|
-
"darkStep2": "#141414",
|
|
6
|
-
"darkStep3": "#1e1e1e",
|
|
7
|
-
"darkStep4": "#282828",
|
|
8
|
-
"darkStep5": "#323232",
|
|
9
|
-
"darkStep6": "#3c3c3c",
|
|
10
|
-
"darkStep7": "#484848",
|
|
11
|
-
"darkStep8": "#606060",
|
|
12
|
-
"darkStep9": "#fab283",
|
|
13
|
-
"darkStep10": "#ffc09f",
|
|
14
|
-
"darkStep11": "#808080",
|
|
15
|
-
"darkStep12": "#eeeeee",
|
|
16
|
-
"darkSecondary": "#5c9cf5",
|
|
17
|
-
"darkAccent": "#9d7cd8",
|
|
18
|
-
"darkRed": "#e06c75",
|
|
19
|
-
"darkOrange": "#f5a742",
|
|
20
|
-
"darkGreen": "#7fd88f",
|
|
21
|
-
"darkCyan": "#56b6c2",
|
|
22
|
-
"darkYellow": "#e5c07b",
|
|
23
|
-
"lightStep1": "#ffffff",
|
|
24
|
-
"lightStep2": "#fafafa",
|
|
25
|
-
"lightStep3": "#f5f5f5",
|
|
26
|
-
"lightStep4": "#ebebeb",
|
|
27
|
-
"lightStep5": "#e1e1e1",
|
|
28
|
-
"lightStep6": "#d4d4d4",
|
|
29
|
-
"lightStep7": "#b8b8b8",
|
|
30
|
-
"lightStep8": "#a0a0a0",
|
|
31
|
-
"lightStep9": "#3b7dd8",
|
|
32
|
-
"lightStep10": "#2968c3",
|
|
33
|
-
"lightStep11": "#8a8a8a",
|
|
34
|
-
"lightStep12": "#1a1a1a",
|
|
35
|
-
"lightSecondary": "#7b5bb6",
|
|
36
|
-
"lightAccent": "#d68c27",
|
|
37
|
-
"lightRed": "#d1383d",
|
|
38
|
-
"lightOrange": "#d68c27",
|
|
39
|
-
"lightGreen": "#3d9a57",
|
|
40
|
-
"lightCyan": "#318795",
|
|
41
|
-
"lightYellow": "#b0851f"
|
|
42
|
-
},
|
|
43
|
-
"theme": {
|
|
44
|
-
"primary": {
|
|
45
|
-
"dark": "darkStep9",
|
|
46
|
-
"light": "lightStep9"
|
|
47
|
-
},
|
|
48
|
-
"secondary": {
|
|
49
|
-
"dark": "darkSecondary",
|
|
50
|
-
"light": "lightSecondary"
|
|
51
|
-
},
|
|
52
|
-
"accent": {
|
|
53
|
-
"dark": "darkAccent",
|
|
54
|
-
"light": "lightAccent"
|
|
55
|
-
},
|
|
56
|
-
"error": {
|
|
57
|
-
"dark": "darkRed",
|
|
58
|
-
"light": "lightRed"
|
|
59
|
-
},
|
|
60
|
-
"warning": {
|
|
61
|
-
"dark": "darkOrange",
|
|
62
|
-
"light": "lightOrange"
|
|
63
|
-
},
|
|
64
|
-
"success": {
|
|
65
|
-
"dark": "darkGreen",
|
|
66
|
-
"light": "lightGreen"
|
|
67
|
-
},
|
|
68
|
-
"info": {
|
|
69
|
-
"dark": "darkCyan",
|
|
70
|
-
"light": "lightCyan"
|
|
71
|
-
},
|
|
72
|
-
"text": {
|
|
73
|
-
"dark": "darkStep12",
|
|
74
|
-
"light": "lightStep12"
|
|
75
|
-
},
|
|
76
|
-
"textMuted": {
|
|
77
|
-
"dark": "darkStep11",
|
|
78
|
-
"light": "lightStep11"
|
|
79
|
-
},
|
|
80
|
-
"background": {
|
|
81
|
-
"dark": "darkStep1",
|
|
82
|
-
"light": "lightStep1"
|
|
83
|
-
},
|
|
84
|
-
"backgroundPanel": {
|
|
85
|
-
"dark": "darkStep2",
|
|
86
|
-
"light": "lightStep2"
|
|
87
|
-
},
|
|
88
|
-
"backgroundElement": {
|
|
89
|
-
"dark": "darkStep3",
|
|
90
|
-
"light": "lightStep3"
|
|
91
|
-
},
|
|
92
|
-
"border": {
|
|
93
|
-
"dark": "darkStep7",
|
|
94
|
-
"light": "lightStep7"
|
|
95
|
-
},
|
|
96
|
-
"borderActive": {
|
|
97
|
-
"dark": "darkStep8",
|
|
98
|
-
"light": "lightStep8"
|
|
99
|
-
},
|
|
100
|
-
"borderSubtle": {
|
|
101
|
-
"dark": "darkStep6",
|
|
102
|
-
"light": "lightStep6"
|
|
103
|
-
},
|
|
104
|
-
"diffAdded": {
|
|
105
|
-
"dark": "#4fd6be",
|
|
106
|
-
"light": "#1e725c"
|
|
107
|
-
},
|
|
108
|
-
"diffRemoved": {
|
|
109
|
-
"dark": "#c53b53",
|
|
110
|
-
"light": "#c53b53"
|
|
111
|
-
},
|
|
112
|
-
"diffContext": {
|
|
113
|
-
"dark": "#828bb8",
|
|
114
|
-
"light": "#7086b5"
|
|
115
|
-
},
|
|
116
|
-
"diffHunkHeader": {
|
|
117
|
-
"dark": "#828bb8",
|
|
118
|
-
"light": "#7086b5"
|
|
119
|
-
},
|
|
120
|
-
"diffHighlightAdded": {
|
|
121
|
-
"dark": "#b8db87",
|
|
122
|
-
"light": "#4db380"
|
|
123
|
-
},
|
|
124
|
-
"diffHighlightRemoved": {
|
|
125
|
-
"dark": "#e26a75",
|
|
126
|
-
"light": "#f52a65"
|
|
127
|
-
},
|
|
128
|
-
"diffAddedBg": {
|
|
129
|
-
"dark": "#20303b",
|
|
130
|
-
"light": "#d5e5d5"
|
|
131
|
-
},
|
|
132
|
-
"diffRemovedBg": {
|
|
133
|
-
"dark": "#37222c",
|
|
134
|
-
"light": "#f7d8db"
|
|
135
|
-
},
|
|
136
|
-
"diffContextBg": {
|
|
137
|
-
"dark": "darkStep2",
|
|
138
|
-
"light": "lightStep2"
|
|
139
|
-
},
|
|
140
|
-
"diffLineNumber": {
|
|
141
|
-
"dark": "#8f8f8f",
|
|
142
|
-
"light": "#595959"
|
|
143
|
-
},
|
|
144
|
-
"diffAddedLineNumberBg": {
|
|
145
|
-
"dark": "#1b2b34",
|
|
146
|
-
"light": "#c5d5c5"
|
|
147
|
-
},
|
|
148
|
-
"diffRemovedLineNumberBg": {
|
|
149
|
-
"dark": "#2d1f26",
|
|
150
|
-
"light": "#e7c8cb"
|
|
151
|
-
},
|
|
152
|
-
"markdownText": {
|
|
153
|
-
"dark": "darkStep12",
|
|
154
|
-
"light": "lightStep12"
|
|
155
|
-
},
|
|
156
|
-
"markdownHeading": {
|
|
157
|
-
"dark": "darkAccent",
|
|
158
|
-
"light": "lightAccent"
|
|
159
|
-
},
|
|
160
|
-
"markdownLink": {
|
|
161
|
-
"dark": "darkStep9",
|
|
162
|
-
"light": "lightStep9"
|
|
163
|
-
},
|
|
164
|
-
"markdownLinkText": {
|
|
165
|
-
"dark": "darkCyan",
|
|
166
|
-
"light": "lightCyan"
|
|
167
|
-
},
|
|
168
|
-
"markdownCode": {
|
|
169
|
-
"dark": "darkGreen",
|
|
170
|
-
"light": "lightGreen"
|
|
171
|
-
},
|
|
172
|
-
"markdownBlockQuote": {
|
|
173
|
-
"dark": "darkYellow",
|
|
174
|
-
"light": "lightYellow"
|
|
175
|
-
},
|
|
176
|
-
"markdownEmph": {
|
|
177
|
-
"dark": "darkYellow",
|
|
178
|
-
"light": "lightYellow"
|
|
179
|
-
},
|
|
180
|
-
"markdownStrong": {
|
|
181
|
-
"dark": "darkOrange",
|
|
182
|
-
"light": "lightOrange"
|
|
183
|
-
},
|
|
184
|
-
"markdownHorizontalRule": {
|
|
185
|
-
"dark": "darkStep11",
|
|
186
|
-
"light": "lightStep11"
|
|
187
|
-
},
|
|
188
|
-
"markdownListItem": {
|
|
189
|
-
"dark": "darkStep9",
|
|
190
|
-
"light": "lightStep9"
|
|
191
|
-
},
|
|
192
|
-
"markdownListEnumeration": {
|
|
193
|
-
"dark": "darkCyan",
|
|
194
|
-
"light": "lightCyan"
|
|
195
|
-
},
|
|
196
|
-
"markdownImage": {
|
|
197
|
-
"dark": "darkStep9",
|
|
198
|
-
"light": "lightStep9"
|
|
199
|
-
},
|
|
200
|
-
"markdownImageText": {
|
|
201
|
-
"dark": "darkCyan",
|
|
202
|
-
"light": "lightCyan"
|
|
203
|
-
},
|
|
204
|
-
"markdownCodeBlock": {
|
|
205
|
-
"dark": "darkStep12",
|
|
206
|
-
"light": "lightStep12"
|
|
207
|
-
},
|
|
208
|
-
"syntaxComment": {
|
|
209
|
-
"dark": "darkStep11",
|
|
210
|
-
"light": "lightStep11"
|
|
211
|
-
},
|
|
212
|
-
"syntaxKeyword": {
|
|
213
|
-
"dark": "darkAccent",
|
|
214
|
-
"light": "lightAccent"
|
|
215
|
-
},
|
|
216
|
-
"syntaxFunction": {
|
|
217
|
-
"dark": "darkStep9",
|
|
218
|
-
"light": "lightStep9"
|
|
219
|
-
},
|
|
220
|
-
"syntaxVariable": {
|
|
221
|
-
"dark": "darkRed",
|
|
222
|
-
"light": "lightRed"
|
|
223
|
-
},
|
|
224
|
-
"syntaxString": {
|
|
225
|
-
"dark": "darkGreen",
|
|
226
|
-
"light": "lightGreen"
|
|
227
|
-
},
|
|
228
|
-
"syntaxNumber": {
|
|
229
|
-
"dark": "darkOrange",
|
|
230
|
-
"light": "lightOrange"
|
|
231
|
-
},
|
|
232
|
-
"syntaxType": {
|
|
233
|
-
"dark": "darkYellow",
|
|
234
|
-
"light": "lightYellow"
|
|
235
|
-
},
|
|
236
|
-
"syntaxOperator": {
|
|
237
|
-
"dark": "darkCyan",
|
|
238
|
-
"light": "lightCyan"
|
|
239
|
-
},
|
|
240
|
-
"syntaxPunctuation": {
|
|
241
|
-
"dark": "darkStep12",
|
|
242
|
-
"light": "lightStep12"
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|