subconscious-cli 6.0.1 → 6.1.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.
- package/README.md +119 -0
- package/bin/agent-data.js +242 -0
- package/bin/agent-help.js +106 -0
- package/bin/agent-install.js +354 -0
- package/bin/agent-launch.js +199 -0
- package/bin/agent-spawn.js +137 -0
- package/bin/agents.js +236 -932
- package/bin/auth.js +9 -1
- package/bin/claude-picker.js +143 -0
- package/bin/cli.js +60 -1
- package/bin/clipboard-image.js +2 -0
- package/bin/feedback.js +14 -3
- package/bin/harness-manifest.js +286 -0
- package/bin/headless-args.js +35 -0
- package/bin/launch-values.js +25 -0
- package/bin/model-capabilities.js +10 -9
- package/bin/models.js +13 -13
- package/bin/native/subc-tui-darwin-amd64 +0 -0
- package/bin/native/subc-tui-darwin-arm64 +0 -0
- package/bin/native/subc-tui-linux-amd64 +0 -0
- package/bin/native/subc-tui-linux-arm64 +0 -0
- package/bin/native/subc-tui-windows-amd64.exe +0 -0
- package/bin/native/subc-tui-windows-arm64.exe +0 -0
- package/bin/opencode-provider.js +21 -0
- package/bin/profile-settings.js +129 -0
- package/bin/profiles.js +29 -424
- package/bin/runbook/README.md +66 -23
- package/bin/runbook/claude-code/agent.json +300 -0
- package/bin/runbook/claude-code/install.sh +9 -252
- package/bin/runbook/codex/agent.json +461 -0
- package/bin/runbook/codex/hooks-lib.sh +17 -4
- package/bin/runbook/codex/install.sh +0 -4
- package/bin/runbook/codex/run.sh +16 -235
- package/bin/runbook/copilot/agent.json +185 -0
- package/bin/runbook/copilot/install.sh +45 -63
- package/bin/runbook/cursor/agent.json +137 -0
- package/bin/runbook/cursor/install.sh +8 -35
- package/bin/runbook/deepseek-harness/agent.json +163 -0
- package/bin/runbook/deepseek-harness/run.sh +20 -59
- package/bin/runbook/image-window/index.ts +14 -0
- package/bin/runbook/image-window/window.d.ts +19 -0
- package/bin/runbook/image-window/window.js +140 -0
- package/bin/runbook/lib.sh +41 -0
- package/bin/runbook/opencode/agent.json +158 -0
- package/bin/runbook/opencode/install.sh +9 -183
- package/bin/runbook/opencode/opencode-plugin.d.ts +10 -3
- package/bin/runbook/opencode/subconscious-image-window.ts +24 -0
- package/bin/runbook/pi/agent.json +216 -0
- package/bin/runbook/pi/install.sh +18 -44
- package/bin/runbook/pi/run.sh +6 -18
- package/bin/runbook/pi/subconscious-compaction.ts +3 -1
- package/bin/runbook/shared.json +58 -0
- package/bin/runbook/subconscious-code/agent.json +156 -0
- package/bin/sessions.js +52 -22
- package/bin/tui.js +13 -0
- package/bin/update-check.js +5 -1
- package/bin/upgrade.js +24 -31
- package/bin/usage.js +21 -10
- package/bin/windows/agents.js +18 -17
- package/bin/windows/common.js +2 -28
- package/bin/windows/install.js +11 -17
- package/bin/windows/launch.js +252 -231
- package/bin/windows/process.js +12 -1
- package/bin/windows/setup.js +29 -9
- package/package.json +2 -3
- package/bin/registry.generated.json +0 -406
- package/bin/runbook/claude-code/run.sh +0 -254
- package/bin/runbook/model-capabilities.generated.sh +0 -9
- package/bin/runbook/opencode/provider.sh +0 -93
- package/bin/runbook/opencode/run.sh +0 -99
- package/bin/runbook/opencode/subconscious-compaction.ts +0 -100
- package/bin/runbook/subconscious-code/run.sh +0 -21
- package/bin/windows/claude.js +0 -100
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"_generated": "Source of truth: agents/registry.json. Do not edit by hand.",
|
|
3
|
-
"defaults": {
|
|
4
|
-
"model": "subconscious/glm-5.3-marathon",
|
|
5
|
-
"models": [
|
|
6
|
-
"subconscious/glm-5.3-marathon",
|
|
7
|
-
"subconscious/glm-5.2",
|
|
8
|
-
"subconscious/tim-qwen3.6-27b",
|
|
9
|
-
"subconscious/deepseek-v4-flash-marathon",
|
|
10
|
-
"subconscious/deepseek-v4.1-flash-marathon"
|
|
11
|
-
],
|
|
12
|
-
"baseUrl": "https://api.subconscious.dev",
|
|
13
|
-
"baseUrlV1": "https://api.subconscious.dev/v1",
|
|
14
|
-
"keyPlaceholder": "your_key",
|
|
15
|
-
"platformUrl": "https://platform.subconscious.dev"
|
|
16
|
-
},
|
|
17
|
-
"modelCapabilities": {
|
|
18
|
-
"subconscious/deepseek-v4.1-flash-marathon": {
|
|
19
|
-
"vision": true
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"agents": [
|
|
23
|
-
{
|
|
24
|
-
"id": "subconscious-code",
|
|
25
|
-
"command": "marathon",
|
|
26
|
-
"name": "Marathon",
|
|
27
|
-
"aliases": [
|
|
28
|
-
"sc",
|
|
29
|
-
"subconscious-code"
|
|
30
|
-
],
|
|
31
|
-
"description": "Launch the native Subconscious coding agent with the active profile, gateway, and model.",
|
|
32
|
-
"framework": "Subconscious Code",
|
|
33
|
-
"language": "rust",
|
|
34
|
-
"category": "coding-agent",
|
|
35
|
-
"tags": [
|
|
36
|
-
"local",
|
|
37
|
-
"cli",
|
|
38
|
-
"agents"
|
|
39
|
-
],
|
|
40
|
-
"protocol": "openai",
|
|
41
|
-
"homepage": "https://github.com/subconscious-systems/subconscious-code",
|
|
42
|
-
"bin": "marathon",
|
|
43
|
-
"install": {
|
|
44
|
-
"darwin": "subc marathon install",
|
|
45
|
-
"linux": "subc marathon install",
|
|
46
|
-
"win32": "subc marathon install"
|
|
47
|
-
},
|
|
48
|
-
"runbook": {
|
|
49
|
-
"mode": "launch",
|
|
50
|
-
"script": "subconscious-code/run.sh",
|
|
51
|
-
"setupScript": "subconscious-code/install.sh",
|
|
52
|
-
"binaryInstallScript": "subconscious-code/install.sh",
|
|
53
|
-
"installDirEnv": "SC_INSTALL_DIR",
|
|
54
|
-
"installDir": ".local/bin",
|
|
55
|
-
"setupActions": [
|
|
56
|
-
"install"
|
|
57
|
-
],
|
|
58
|
-
"setupNeedsAuth": false
|
|
59
|
-
},
|
|
60
|
-
"launch": "marathon",
|
|
61
|
-
"env": {
|
|
62
|
-
"SC_BASE_URL": "{baseUrlV1}",
|
|
63
|
-
"SC_DLR_URL": "{baseUrl}",
|
|
64
|
-
"SC_DLR_ENABLED": "true",
|
|
65
|
-
"SC_API_KEY": "{apiKey}",
|
|
66
|
-
"SC_MODEL": "{model}"
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"id": "claude-code",
|
|
71
|
-
"command": "claude",
|
|
72
|
-
"exampleDir": "claude_code",
|
|
73
|
-
"name": "Claude Code",
|
|
74
|
-
"aliases": [
|
|
75
|
-
"claude-code",
|
|
76
|
-
"claudecode"
|
|
77
|
-
],
|
|
78
|
-
"displayName": "Claude Code + Subconscious",
|
|
79
|
-
"description": "Run Claude Code on your hosted Subconscious model with gateway env, context limits, and telemetry.",
|
|
80
|
-
"framework": "Claude Code",
|
|
81
|
-
"language": "shell",
|
|
82
|
-
"category": "coding-agent",
|
|
83
|
-
"tags": [
|
|
84
|
-
"local",
|
|
85
|
-
"cli",
|
|
86
|
-
"agents"
|
|
87
|
-
],
|
|
88
|
-
"protocol": "anthropic",
|
|
89
|
-
"homepage": "https://docs.anthropic.com/en/docs/claude-code",
|
|
90
|
-
"bin": "claude",
|
|
91
|
-
"install": {
|
|
92
|
-
"darwin": "curl -fsSL https://claude.ai/install.sh | bash",
|
|
93
|
-
"linux": "curl -fsSL https://claude.ai/install.sh | bash",
|
|
94
|
-
"win32": "powershell -ExecutionPolicy Bypass -Command \"irm https://claude.ai/install.ps1 | iex\"",
|
|
95
|
-
"fallback": "npm i -g @anthropic-ai/claude-code"
|
|
96
|
-
},
|
|
97
|
-
"runbook": {
|
|
98
|
-
"mode": "launch",
|
|
99
|
-
"script": "claude-code/run.sh",
|
|
100
|
-
"setupScript": "claude-code/install.sh",
|
|
101
|
-
"setupActions": [
|
|
102
|
-
"status",
|
|
103
|
-
"uninstall"
|
|
104
|
-
]
|
|
105
|
-
},
|
|
106
|
-
"launch": "claude",
|
|
107
|
-
"env": {
|
|
108
|
-
"ANTHROPIC_BASE_URL": "{baseUrl}",
|
|
109
|
-
"ANTHROPIC_AUTH_TOKEN": "{apiKey}",
|
|
110
|
-
"ANTHROPIC_MODEL": "{model}",
|
|
111
|
-
"ANTHROPIC_SMALL_FAST_MODEL": "{model}",
|
|
112
|
-
"ANTHROPIC_DEFAULT_OPUS_MODEL": "subconscious/glm-5.3-marathon",
|
|
113
|
-
"ANTHROPIC_DEFAULT_OPUS_MODEL_NAME": "subconscious/glm-5.3-marathon",
|
|
114
|
-
"ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION": "Subconscious default model",
|
|
115
|
-
"ANTHROPIC_DEFAULT_SONNET_MODEL": "subconscious/tim-qwen3.6-27b",
|
|
116
|
-
"ANTHROPIC_DEFAULT_SONNET_MODEL_NAME": "subconscious/tim-qwen3.6-27b",
|
|
117
|
-
"ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION": "Subconscious TIM Qwen 3.6 27B",
|
|
118
|
-
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "subconscious/deepseek-v4-flash-marathon",
|
|
119
|
-
"ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME": "subconscious/deepseek-v4-flash-marathon",
|
|
120
|
-
"ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION": "Subconscious DeepSeek V4 Flash Marathon",
|
|
121
|
-
"CLAUDE_CODE_SUBAGENT_MODEL": "{model}",
|
|
122
|
-
"CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS": "4",
|
|
123
|
-
"CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH": "1",
|
|
124
|
-
"CLAUDE_CODE_AUTO_COMPACT_WINDOW": "1000000",
|
|
125
|
-
"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "3000000",
|
|
126
|
-
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
|
|
127
|
-
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
|
|
128
|
-
"OTEL_LOGS_EXPORTER": "otlp",
|
|
129
|
-
"OTEL_EXPORTER_OTLP_PROTOCOL": "http/json",
|
|
130
|
-
"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT": "{baseUrl}/v1/logs",
|
|
131
|
-
"OTEL_EXPORTER_OTLP_HEADERS": "x-api-key={apiKey}",
|
|
132
|
-
"OTEL_EXPORTER_OTLP_TIMEOUT": "2000",
|
|
133
|
-
"OTEL_LOGS_EXPORT_INTERVAL": "2000"
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
"id": "codex",
|
|
138
|
-
"command": "codex",
|
|
139
|
-
"exampleDir": "codex",
|
|
140
|
-
"name": "Codex CLI",
|
|
141
|
-
"aliases": [],
|
|
142
|
-
"displayName": "Codex + Subconscious",
|
|
143
|
-
"description": "Run Codex on your hosted Subconscious model with a temporary provider catalog and compaction hooks.",
|
|
144
|
-
"framework": "Codex",
|
|
145
|
-
"language": "shell",
|
|
146
|
-
"category": "coding-agent",
|
|
147
|
-
"tags": [
|
|
148
|
-
"local",
|
|
149
|
-
"cli",
|
|
150
|
-
"agents"
|
|
151
|
-
],
|
|
152
|
-
"protocol": "openai",
|
|
153
|
-
"homepage": "https://developers.openai.com/codex",
|
|
154
|
-
"bin": "codex",
|
|
155
|
-
"install": {
|
|
156
|
-
"darwin": "npm i -g @openai/codex",
|
|
157
|
-
"linux": "npm i -g @openai/codex",
|
|
158
|
-
"win32": "npm i -g @openai/codex"
|
|
159
|
-
},
|
|
160
|
-
"runbook": {
|
|
161
|
-
"mode": "launch",
|
|
162
|
-
"script": "codex/run.sh",
|
|
163
|
-
"setupScript": "codex/install.sh",
|
|
164
|
-
"setupActions": [
|
|
165
|
-
"install",
|
|
166
|
-
"status",
|
|
167
|
-
"uninstall"
|
|
168
|
-
]
|
|
169
|
-
},
|
|
170
|
-
"launch": "codex -c model={model} -c model_provider=subconscious -c web_search=disabled -c model_providers.subconscious.name=Subconscious -c model_providers.subconscious.base_url={baseUrlV1} -c model_providers.subconscious.wire_api=responses -c model_providers.subconscious.env_key=SUBCONSCIOUS_API_KEY -c model_providers.subconscious.stream_idle_timeout_ms=900000",
|
|
171
|
-
"env": {
|
|
172
|
-
"SUBCONSCIOUS_API_KEY": "{apiKey}",
|
|
173
|
-
"SUBCONSCIOUS_GATEWAY_URL": "{baseUrl}"
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"id": "opencode",
|
|
178
|
-
"command": "opencode",
|
|
179
|
-
"exampleDir": "opencode",
|
|
180
|
-
"name": "OpenCode",
|
|
181
|
-
"aliases": [
|
|
182
|
-
"open-code"
|
|
183
|
-
],
|
|
184
|
-
"displayName": "OpenCode + Subconscious",
|
|
185
|
-
"description": "Run OpenCode on your hosted Subconscious model with the Subconscious provider and context settings.",
|
|
186
|
-
"framework": "OpenCode",
|
|
187
|
-
"language": "shell",
|
|
188
|
-
"category": "coding-agent",
|
|
189
|
-
"tags": [
|
|
190
|
-
"local",
|
|
191
|
-
"cli",
|
|
192
|
-
"agents"
|
|
193
|
-
],
|
|
194
|
-
"protocol": "openai",
|
|
195
|
-
"homepage": "https://opencode.ai",
|
|
196
|
-
"bin": "opencode",
|
|
197
|
-
"install": {
|
|
198
|
-
"darwin": "npm i -g opencode-ai",
|
|
199
|
-
"linux": "npm i -g opencode-ai",
|
|
200
|
-
"win32": "npm i -g opencode-ai"
|
|
201
|
-
},
|
|
202
|
-
"runbook": {
|
|
203
|
-
"mode": "launch",
|
|
204
|
-
"script": "opencode/run.sh",
|
|
205
|
-
"setupScript": "opencode/install.sh",
|
|
206
|
-
"installDir": ".opencode/bin",
|
|
207
|
-
"setupActions": [
|
|
208
|
-
"status",
|
|
209
|
-
"uninstall"
|
|
210
|
-
]
|
|
211
|
-
},
|
|
212
|
-
"launch": "opencode",
|
|
213
|
-
"configEnv": "OPENCODE_CONFIG_CONTENT",
|
|
214
|
-
"env": {
|
|
215
|
-
"SUBCONSCIOUS_API_KEY": "{apiKey}",
|
|
216
|
-
"SUBCONSCIOUS_GATEWAY_URL": "{baseUrl}",
|
|
217
|
-
"OPENCODE_CONFIG_CONTENT": {
|
|
218
|
-
"$json": {
|
|
219
|
-
"$schema": "https://opencode.ai/config.json",
|
|
220
|
-
"provider": {
|
|
221
|
-
"subconscious": {
|
|
222
|
-
"npm": "@ai-sdk/openai-compatible",
|
|
223
|
-
"name": "Subconscious Gateway",
|
|
224
|
-
"options": {
|
|
225
|
-
"baseURL": "{baseUrlV1}",
|
|
226
|
-
"apiKey": "{env:SUBCONSCIOUS_API_KEY}",
|
|
227
|
-
"headers": {
|
|
228
|
-
"x-subconscious-client": "opencode"
|
|
229
|
-
}
|
|
230
|
-
},
|
|
231
|
-
"models": {
|
|
232
|
-
"subconscious/glm-5.3-marathon": {
|
|
233
|
-
"name": "subconscious/glm-5.3-marathon",
|
|
234
|
-
"tools": true,
|
|
235
|
-
"limit": {
|
|
236
|
-
"context": 5000000,
|
|
237
|
-
"output": 65536
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
"subconscious/glm-5.2": {
|
|
241
|
-
"name": "subconscious/glm-5.2",
|
|
242
|
-
"tools": true,
|
|
243
|
-
"limit": {
|
|
244
|
-
"context": 5000000,
|
|
245
|
-
"output": 65536
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
"subconscious/tim-qwen3.6-27b": {
|
|
249
|
-
"name": "subconscious/tim-qwen3.6-27b",
|
|
250
|
-
"tools": true,
|
|
251
|
-
"limit": {
|
|
252
|
-
"context": 5000000,
|
|
253
|
-
"output": 65536
|
|
254
|
-
}
|
|
255
|
-
},
|
|
256
|
-
"subconscious/deepseek-v4-flash-marathon": {
|
|
257
|
-
"name": "subconscious/deepseek-v4-flash-marathon",
|
|
258
|
-
"tools": true,
|
|
259
|
-
"limit": {
|
|
260
|
-
"context": 5000000,
|
|
261
|
-
"output": 65536
|
|
262
|
-
}
|
|
263
|
-
},
|
|
264
|
-
"subconscious/deepseek-v4.1-flash-marathon": {
|
|
265
|
-
"name": "subconscious/deepseek-v4.1-flash-marathon",
|
|
266
|
-
"tools": true,
|
|
267
|
-
"attachment": true,
|
|
268
|
-
"modalities": {
|
|
269
|
-
"input": [
|
|
270
|
-
"text",
|
|
271
|
-
"image"
|
|
272
|
-
],
|
|
273
|
-
"output": [
|
|
274
|
-
"text"
|
|
275
|
-
]
|
|
276
|
-
},
|
|
277
|
-
"limit": {
|
|
278
|
-
"context": 5000000,
|
|
279
|
-
"output": 65536
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
},
|
|
285
|
-
"model": "subconscious/{model}"
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
},
|
|
290
|
-
{
|
|
291
|
-
"id": "cursor",
|
|
292
|
-
"command": "cursor",
|
|
293
|
-
"name": "Cursor",
|
|
294
|
-
"aliases": [],
|
|
295
|
-
"description": "Install Cursor conversation and compaction hooks, then finish model setup in Cursor Settings.",
|
|
296
|
-
"framework": "Cursor",
|
|
297
|
-
"language": "shell",
|
|
298
|
-
"category": "coding-agent",
|
|
299
|
-
"tags": [
|
|
300
|
-
"local",
|
|
301
|
-
"ide",
|
|
302
|
-
"agents"
|
|
303
|
-
],
|
|
304
|
-
"protocol": "openai",
|
|
305
|
-
"homepage": "https://cursor.com",
|
|
306
|
-
"runbook": {
|
|
307
|
-
"mode": "setup",
|
|
308
|
-
"script": "cursor/install.sh",
|
|
309
|
-
"setupScript": "cursor/install.sh",
|
|
310
|
-
"setupActions": [
|
|
311
|
-
"install",
|
|
312
|
-
"status",
|
|
313
|
-
"uninstall"
|
|
314
|
-
]
|
|
315
|
-
}
|
|
316
|
-
},
|
|
317
|
-
{
|
|
318
|
-
"id": "copilot",
|
|
319
|
-
"command": "copilot",
|
|
320
|
-
"name": "GitHub Copilot (VS Code)",
|
|
321
|
-
"aliases": [
|
|
322
|
-
"vscode",
|
|
323
|
-
"vs-code"
|
|
324
|
-
],
|
|
325
|
-
"description": "Install the VS Code custom endpoint and Copilot conversation/compaction hooks.",
|
|
326
|
-
"framework": "GitHub Copilot",
|
|
327
|
-
"language": "shell",
|
|
328
|
-
"category": "coding-agent",
|
|
329
|
-
"tags": [
|
|
330
|
-
"local",
|
|
331
|
-
"ide",
|
|
332
|
-
"agents"
|
|
333
|
-
],
|
|
334
|
-
"protocol": "openai",
|
|
335
|
-
"homepage": "https://code.visualstudio.com/docs/copilot/overview",
|
|
336
|
-
"runbook": {
|
|
337
|
-
"mode": "setup",
|
|
338
|
-
"script": "copilot/install.sh",
|
|
339
|
-
"setupScript": "copilot/install.sh",
|
|
340
|
-
"setupActions": [
|
|
341
|
-
"install",
|
|
342
|
-
"status",
|
|
343
|
-
"uninstall"
|
|
344
|
-
]
|
|
345
|
-
}
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
"id": "pi",
|
|
349
|
-
"command": "pi",
|
|
350
|
-
"name": "Pi",
|
|
351
|
-
"aliases": [],
|
|
352
|
-
"description": "Refresh Pi with the live Subconscious model catalog and launch the active profile model.",
|
|
353
|
-
"framework": "Pi",
|
|
354
|
-
"language": "shell",
|
|
355
|
-
"category": "coding-agent",
|
|
356
|
-
"tags": [
|
|
357
|
-
"local",
|
|
358
|
-
"cli",
|
|
359
|
-
"agents"
|
|
360
|
-
],
|
|
361
|
-
"protocol": "openai",
|
|
362
|
-
"homepage": "https://pi.dev",
|
|
363
|
-
"bin": "pi",
|
|
364
|
-
"runbook": {
|
|
365
|
-
"mode": "launch",
|
|
366
|
-
"script": "pi/run.sh",
|
|
367
|
-
"setupScript": "pi/install.sh",
|
|
368
|
-
"setupActions": [
|
|
369
|
-
"install",
|
|
370
|
-
"status",
|
|
371
|
-
"uninstall"
|
|
372
|
-
]
|
|
373
|
-
}
|
|
374
|
-
},
|
|
375
|
-
{
|
|
376
|
-
"id": "deepseek-harness",
|
|
377
|
-
"command": "dsh",
|
|
378
|
-
"name": "DeepSeek Harness",
|
|
379
|
-
"aliases": [
|
|
380
|
-
"deepseek-harness",
|
|
381
|
-
"deepseek"
|
|
382
|
-
],
|
|
383
|
-
"description": "Launch DeepSeek Harness with an ephemeral Subconscious provider populated from the live model catalog.",
|
|
384
|
-
"framework": "DeepSeek Harness",
|
|
385
|
-
"language": "shell",
|
|
386
|
-
"category": "coding-agent",
|
|
387
|
-
"tags": [
|
|
388
|
-
"local",
|
|
389
|
-
"web",
|
|
390
|
-
"agents"
|
|
391
|
-
],
|
|
392
|
-
"protocol": "openai",
|
|
393
|
-
"homepage": "https://www.deepseek.com/harness/en/",
|
|
394
|
-
"bin": "dsh",
|
|
395
|
-
"install": {
|
|
396
|
-
"darwin": "npm i -g @deepseek-ai/dsh",
|
|
397
|
-
"linux": "npm i -g @deepseek-ai/dsh",
|
|
398
|
-
"win32": "npm i -g @deepseek-ai/dsh"
|
|
399
|
-
},
|
|
400
|
-
"runbook": {
|
|
401
|
-
"mode": "launch",
|
|
402
|
-
"script": "deepseek-harness/run.sh"
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
]
|
|
406
|
-
}
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Point the `claude` CLI at the Subconscious gateway — ephemerally.
|
|
3
|
-
#
|
|
4
|
-
# Uses env vars only (ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN) so nothing is
|
|
5
|
-
# written to ~/.claude/ config files.
|
|
6
|
-
#
|
|
7
|
-
# Usage:
|
|
8
|
-
# ./run.sh # uses GATEWAY_URL/API_KEY from ../.env
|
|
9
|
-
# ./run.sh --continue # pass args through to claude
|
|
10
|
-
# ./run.sh --compact-window 1000000 -- --continue
|
|
11
|
-
# ./run.sh --model subconscious/glm-5.3-marathon -p "hi"
|
|
12
|
-
#
|
|
13
|
-
# Config: copy ../env.example to ../.env and edit. .env is gitignored.
|
|
14
|
-
# Profile env is injected by subc. A sibling .env is only used when SUBC_ENV_FILE is unset.
|
|
15
|
-
#
|
|
16
|
-
# Or source it to just export the env:
|
|
17
|
-
# source run.sh
|
|
18
|
-
|
|
19
|
-
set -euo pipefail
|
|
20
|
-
|
|
21
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
22
|
-
|
|
23
|
-
# Load shared env from SUBC_ENV_FILE, or a sibling .env / env.example.
|
|
24
|
-
SHARED_ENV="${SUBC_ENV_FILE:-${SCRIPT_DIR}/../.env}"
|
|
25
|
-
[[ -f "$SHARED_ENV" ]] || SHARED_ENV="${SCRIPT_DIR}/../env.example"
|
|
26
|
-
if [[ -f "$SHARED_ENV" ]]; then set -a; source "$SHARED_ENV"; set +a; fi
|
|
27
|
-
|
|
28
|
-
DEFAULT_MODEL="subconscious/glm-5.3-marathon"
|
|
29
|
-
DEFAULT_COMPACT_WINDOW="1000000"
|
|
30
|
-
DEFAULT_MAX_CONTEXT_TOKENS="3000000"
|
|
31
|
-
DEFAULT_MAX_CONCURRENT_SUBAGENTS="4"
|
|
32
|
-
DEFAULT_MAX_SUBAGENT_SPAWN_DEPTH="1"
|
|
33
|
-
|
|
34
|
-
GATEWAY_URL="${GATEWAY_URL:-}"
|
|
35
|
-
API_KEY="${CLAUDE_CODE_API_KEY:-${API_KEY:-}}"
|
|
36
|
-
MODEL="${MODEL:-$DEFAULT_MODEL}"
|
|
37
|
-
COMPACT_WINDOW="${CLAUDE_CODE_AUTO_COMPACT_WINDOW:-${COMPACT_WINDOW:-$DEFAULT_COMPACT_WINDOW}}"
|
|
38
|
-
MAX_CONTEXT_TOKENS="${CLAUDE_CODE_MAX_CONTEXT_TOKENS:-${MAX_CONTEXT_TOKENS:-$DEFAULT_MAX_CONTEXT_TOKENS}}"
|
|
39
|
-
MAX_CONCURRENT_SUBAGENTS="${MAX_CONCURRENT_SUBAGENTS:-$DEFAULT_MAX_CONCURRENT_SUBAGENTS}"
|
|
40
|
-
MAX_SUBAGENT_SPAWN_DEPTH="${MAX_SUBAGENT_SPAWN_DEPTH:-$DEFAULT_MAX_SUBAGENT_SPAWN_DEPTH}"
|
|
41
|
-
|
|
42
|
-
# Claude's Opus/Sonnet/Haiku/Fable/custom slots must follow the live catalog
|
|
43
|
-
# (SUBCONSCIOUS_MODELS). Packaged DeepSeek/GLM defaults are not a capability.
|
|
44
|
-
PICKER_MODELS=()
|
|
45
|
-
if [[ -n "${SUBCONSCIOUS_MODELS:-}" ]]; then
|
|
46
|
-
while IFS= read -r picker_model; do
|
|
47
|
-
[[ -n "$picker_model" ]] && PICKER_MODELS+=("$picker_model")
|
|
48
|
-
done <<< "$SUBCONSCIOUS_MODELS"
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
picker_model_at() {
|
|
52
|
-
local index="$1"
|
|
53
|
-
local count="${#PICKER_MODELS[@]}"
|
|
54
|
-
if [[ "$count" -eq 0 ]]; then
|
|
55
|
-
printf '%s' "$MODEL"
|
|
56
|
-
return
|
|
57
|
-
fi
|
|
58
|
-
if [[ "$index" -ge "$count" ]]; then
|
|
59
|
-
index=$((count - 1))
|
|
60
|
-
fi
|
|
61
|
-
printf '%s' "${PICKER_MODELS[$index]}"
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
in_picker_catalog() {
|
|
65
|
-
local candidate="$1" existing
|
|
66
|
-
[[ -z "$candidate" ]] && return 1
|
|
67
|
-
[[ "${#PICKER_MODELS[@]}" -eq 0 ]] && return 0
|
|
68
|
-
for existing in "${PICKER_MODELS[@]}"; do
|
|
69
|
-
[[ "$existing" == "$candidate" ]] && return 0
|
|
70
|
-
done
|
|
71
|
-
return 1
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if [[ "${#PICKER_MODELS[@]}" -gt 0 ]]; then
|
|
75
|
-
in_picker_catalog "${ANTHROPIC_DEFAULT_OPUS_MODEL:-}" || ANTHROPIC_DEFAULT_OPUS_MODEL=""
|
|
76
|
-
in_picker_catalog "${ANTHROPIC_DEFAULT_SONNET_MODEL:-}" || ANTHROPIC_DEFAULT_SONNET_MODEL=""
|
|
77
|
-
in_picker_catalog "${ANTHROPIC_DEFAULT_HAIKU_MODEL:-}" || ANTHROPIC_DEFAULT_HAIKU_MODEL=""
|
|
78
|
-
in_picker_catalog "${ANTHROPIC_DEFAULT_FABLE_MODEL:-}" || unset ANTHROPIC_DEFAULT_FABLE_MODEL ANTHROPIC_DEFAULT_FABLE_MODEL_NAME ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION
|
|
79
|
-
if [[ "${#PICKER_MODELS[@]}" -lt 5 ]] || ! in_picker_catalog "${ANTHROPIC_CUSTOM_MODEL_OPTION:-}"; then
|
|
80
|
-
unset ANTHROPIC_CUSTOM_MODEL_OPTION ANTHROPIC_CUSTOM_MODEL_OPTION_NAME ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION
|
|
81
|
-
fi
|
|
82
|
-
fi
|
|
83
|
-
|
|
84
|
-
DEFAULT_OPUS_MODEL="$(picker_model_at 0)"
|
|
85
|
-
DEFAULT_SONNET_MODEL="$(picker_model_at 1)"
|
|
86
|
-
DEFAULT_HAIKU_MODEL="$(picker_model_at 2)"
|
|
87
|
-
DEFAULT_FABLE_MODEL="$(picker_model_at 3)"
|
|
88
|
-
OPUS_MODEL="${ANTHROPIC_DEFAULT_OPUS_MODEL:-$DEFAULT_OPUS_MODEL}"
|
|
89
|
-
OPUS_MODEL_NAME="${ANTHROPIC_DEFAULT_OPUS_MODEL_NAME:-$OPUS_MODEL}"
|
|
90
|
-
OPUS_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION:-Subconscious model ${OPUS_MODEL}}"
|
|
91
|
-
SONNET_MODEL="${ANTHROPIC_DEFAULT_SONNET_MODEL:-$DEFAULT_SONNET_MODEL}"
|
|
92
|
-
SONNET_MODEL_NAME="${ANTHROPIC_DEFAULT_SONNET_MODEL_NAME:-$SONNET_MODEL}"
|
|
93
|
-
SONNET_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION:-Subconscious model ${SONNET_MODEL}}"
|
|
94
|
-
HAIKU_MODEL="${ANTHROPIC_DEFAULT_HAIKU_MODEL:-$DEFAULT_HAIKU_MODEL}"
|
|
95
|
-
HAIKU_MODEL_NAME="${ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME:-$HAIKU_MODEL}"
|
|
96
|
-
HAIKU_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION:-Subconscious model ${HAIKU_MODEL}}"
|
|
97
|
-
FABLE_MODEL="${ANTHROPIC_DEFAULT_FABLE_MODEL:-$DEFAULT_FABLE_MODEL}"
|
|
98
|
-
FABLE_MODEL_NAME="${ANTHROPIC_DEFAULT_FABLE_MODEL_NAME:-$FABLE_MODEL}"
|
|
99
|
-
FABLE_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION:-Subconscious model ${FABLE_MODEL}}"
|
|
100
|
-
|
|
101
|
-
# Model IDs are already restricted to [-A-Za-z0-9._:/+], so they are JSON-safe.
|
|
102
|
-
build_claude_picker_settings() {
|
|
103
|
-
local ids=() model_id first options allowlist
|
|
104
|
-
if [[ "${#PICKER_MODELS[@]}" -gt 0 ]]; then
|
|
105
|
-
ids=("${PICKER_MODELS[@]}")
|
|
106
|
-
else
|
|
107
|
-
ids=("$MODEL")
|
|
108
|
-
fi
|
|
109
|
-
options=""
|
|
110
|
-
allowlist=""
|
|
111
|
-
first=1
|
|
112
|
-
for model_id in "${ids[@]}"; do
|
|
113
|
-
[[ -n "$model_id" ]] || continue
|
|
114
|
-
if [[ "$first" -eq 1 ]]; then
|
|
115
|
-
first=0
|
|
116
|
-
else
|
|
117
|
-
options="${options},"
|
|
118
|
-
allowlist="${allowlist},"
|
|
119
|
-
fi
|
|
120
|
-
options="${options}{\"model\":\"${model_id}\",\"label\":\"${model_id}\",\"description\":\"Subconscious model ${model_id}\"}"
|
|
121
|
-
allowlist="${allowlist}\"${model_id}\""
|
|
122
|
-
done
|
|
123
|
-
printf '{"availableModels":[%s],"modelPicker":{"replaceBuiltInOptions":true,"options":[%s]}}' "$allowlist" "$options"
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if [[ -z "${SUBC_CLAUDE_SETTINGS:-}" ]]; then
|
|
127
|
-
SUBC_CLAUDE_SETTINGS="$(build_claude_picker_settings)"
|
|
128
|
-
fi
|
|
129
|
-
|
|
130
|
-
usage() {
|
|
131
|
-
cat <<'EOF'
|
|
132
|
-
Usage:
|
|
133
|
-
run.sh [options] [-- CLAUDE_ARGS...]
|
|
134
|
-
run.sh [options] CLAUDE_ARGS...
|
|
135
|
-
|
|
136
|
-
Options (same as install.sh; flags override env for this run):
|
|
137
|
-
--gateway-url URL Gateway origin (e.g. https://gateway.example)
|
|
138
|
-
--api-key KEY Gateway API key (sk-gw-...)
|
|
139
|
-
--model MODEL Model name (default: subconscious/glm-5.3-marathon)
|
|
140
|
-
--compact-window N CLAUDE_CODE_AUTO_COMPACT_WINDOW (default: 1000000; Claude Code clamps to 100000–1000000)
|
|
141
|
-
See https://code.claude.com/docs/en/env-vars and
|
|
142
|
-
https://code.claude.com/docs/en/context-window#set-the-auto-compact-window
|
|
143
|
-
--max-context-tokens N CLAUDE_CODE_MAX_CONTEXT_TOKENS (default: 3000000)
|
|
144
|
-
See https://code.claude.com/docs/en/env-vars
|
|
145
|
-
-h, --help Show this help
|
|
146
|
-
|
|
147
|
-
Anything after --, or unrecognized flags/args, is passed through to `claude`.
|
|
148
|
-
EOF
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
# Parse args (only when executed, not sourced)
|
|
152
|
-
PASSTHRU=()
|
|
153
|
-
if [[ "${BASH_SOURCE[0]:-$0}" == "${0}" ]]; then
|
|
154
|
-
while [[ $# -gt 0 ]]; do
|
|
155
|
-
case "$1" in
|
|
156
|
-
--gateway-url)
|
|
157
|
-
GATEWAY_URL="${2:-}"
|
|
158
|
-
shift 2
|
|
159
|
-
;;
|
|
160
|
-
--api-key)
|
|
161
|
-
API_KEY="${2:-}"
|
|
162
|
-
shift 2
|
|
163
|
-
;;
|
|
164
|
-
--model)
|
|
165
|
-
MODEL="${2:-}"
|
|
166
|
-
shift 2
|
|
167
|
-
;;
|
|
168
|
-
--compact-window)
|
|
169
|
-
COMPACT_WINDOW="${2:-}"
|
|
170
|
-
shift 2
|
|
171
|
-
;;
|
|
172
|
-
--max-context-tokens)
|
|
173
|
-
MAX_CONTEXT_TOKENS="${2:-}"
|
|
174
|
-
shift 2
|
|
175
|
-
;;
|
|
176
|
-
-h|--help)
|
|
177
|
-
usage
|
|
178
|
-
exit 0
|
|
179
|
-
;;
|
|
180
|
-
--)
|
|
181
|
-
shift
|
|
182
|
-
PASSTHRU+=("$@")
|
|
183
|
-
break
|
|
184
|
-
;;
|
|
185
|
-
*)
|
|
186
|
-
PASSTHRU+=("$1")
|
|
187
|
-
shift
|
|
188
|
-
;;
|
|
189
|
-
esac
|
|
190
|
-
done
|
|
191
|
-
fi
|
|
192
|
-
|
|
193
|
-
if [[ -z "$GATEWAY_URL" || -z "$API_KEY" ]]; then
|
|
194
|
-
echo "error: GATEWAY_URL and API_KEY must be set in ../.env (or pass --gateway-url / --api-key)" >&2
|
|
195
|
-
exit 1
|
|
196
|
-
fi
|
|
197
|
-
|
|
198
|
-
# Optional CLAUDE_GATEWAY_URL in shared .env overrides GATEWAY_URL for Claude only
|
|
199
|
-
# (CLI --gateway-url already updated GATEWAY_URL above).
|
|
200
|
-
EFFECTIVE_GATEWAY_URL="${CLAUDE_GATEWAY_URL:-$GATEWAY_URL}"
|
|
201
|
-
|
|
202
|
-
export ANTHROPIC_BASE_URL="$EFFECTIVE_GATEWAY_URL"
|
|
203
|
-
export ANTHROPIC_AUTH_TOKEN="$API_KEY"
|
|
204
|
-
export ANTHROPIC_MODEL="${ANTHROPIC_MODEL:-$MODEL}"
|
|
205
|
-
export ANTHROPIC_SMALL_FAST_MODEL="${ANTHROPIC_SMALL_FAST_MODEL:-$MODEL}"
|
|
206
|
-
export ANTHROPIC_DEFAULT_OPUS_MODEL="${ANTHROPIC_DEFAULT_OPUS_MODEL:-$OPUS_MODEL}"
|
|
207
|
-
export ANTHROPIC_DEFAULT_OPUS_MODEL_NAME="${ANTHROPIC_DEFAULT_OPUS_MODEL_NAME:-$OPUS_MODEL_NAME}"
|
|
208
|
-
export ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION:-$OPUS_MODEL_DESCRIPTION}"
|
|
209
|
-
export ANTHROPIC_DEFAULT_SONNET_MODEL="${ANTHROPIC_DEFAULT_SONNET_MODEL:-$SONNET_MODEL}"
|
|
210
|
-
export ANTHROPIC_DEFAULT_SONNET_MODEL_NAME="${ANTHROPIC_DEFAULT_SONNET_MODEL_NAME:-$SONNET_MODEL_NAME}"
|
|
211
|
-
export ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION:-$SONNET_MODEL_DESCRIPTION}"
|
|
212
|
-
export ANTHROPIC_DEFAULT_HAIKU_MODEL="${ANTHROPIC_DEFAULT_HAIKU_MODEL:-$HAIKU_MODEL}"
|
|
213
|
-
export ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME="${ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME:-$HAIKU_MODEL_NAME}"
|
|
214
|
-
export ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION:-$HAIKU_MODEL_DESCRIPTION}"
|
|
215
|
-
export ANTHROPIC_DEFAULT_FABLE_MODEL="${ANTHROPIC_DEFAULT_FABLE_MODEL:-$FABLE_MODEL}"
|
|
216
|
-
export ANTHROPIC_DEFAULT_FABLE_MODEL_NAME="${ANTHROPIC_DEFAULT_FABLE_MODEL_NAME:-$FABLE_MODEL_NAME}"
|
|
217
|
-
export ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION="${ANTHROPIC_DEFAULT_FABLE_MODEL_DESCRIPTION:-$FABLE_MODEL_DESCRIPTION}"
|
|
218
|
-
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY="${CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY:-0}"
|
|
219
|
-
# Gateway upstreams can't perform Anthropic's server-side auto mode classifier
|
|
220
|
-
# checks; opting out avoids the "isn't eligible for no-charge classifier
|
|
221
|
-
# requests" fallback and keeps classifier requests billed locally.
|
|
222
|
-
# https://code.claude.com/docs/en/auto-mode-classifier-billing
|
|
223
|
-
export CLAUDE_CODE_AUTO_MODE_SERVER="${CLAUDE_CODE_AUTO_MODE_SERVER:-0}"
|
|
224
|
-
export CLAUDE_CODE_SUBAGENT_MODEL="${CLAUDE_CODE_SUBAGENT_MODEL:-$MODEL}"
|
|
225
|
-
export CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS="${MAX_CONCURRENT_SUBAGENTS}"
|
|
226
|
-
export CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH="${MAX_SUBAGENT_SPAWN_DEPTH}"
|
|
227
|
-
export CLAUDE_CODE_AUTO_COMPACT_WINDOW="${COMPACT_WINDOW}"
|
|
228
|
-
export CLAUDE_CODE_MAX_CONTEXT_TOKENS="${MAX_CONTEXT_TOKENS}"
|
|
229
|
-
# Claude Code purpose attribution only: api_request logs → gateway POST /v1/logs
|
|
230
|
-
# (not a general logs API). Docs:
|
|
231
|
-
# https://code.claude.com/docs/en/monitoring-usage#api-request-event
|
|
232
|
-
# Requires Claude Code >= 2.1.152.
|
|
233
|
-
export CLAUDE_CODE_ENABLE_TELEMETRY="${CLAUDE_CODE_ENABLE_TELEMETRY:-1}"
|
|
234
|
-
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="${CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:-1}"
|
|
235
|
-
# claude.ai connectors require subscription OAuth and cannot be used while the
|
|
236
|
-
# Subconscious bearer token and gateway URL are active.
|
|
237
|
-
export ENABLE_CLAUDEAI_MCP_SERVERS=false
|
|
238
|
-
export OTEL_LOGS_EXPORTER="${OTEL_LOGS_EXPORTER:-otlp}"
|
|
239
|
-
export OTEL_EXPORTER_OTLP_PROTOCOL="${OTEL_EXPORTER_OTLP_PROTOCOL:-http/json}"
|
|
240
|
-
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT="${EFFECTIVE_GATEWAY_URL%/}/v1/logs"
|
|
241
|
-
export OTEL_EXPORTER_OTLP_HEADERS="x-api-key=${API_KEY}"
|
|
242
|
-
export OTEL_EXPORTER_OTLP_TIMEOUT="${OTEL_EXPORTER_OTLP_TIMEOUT:-2000}"
|
|
243
|
-
export OTEL_LOGS_EXPORT_INTERVAL="${OTEL_LOGS_EXPORT_INTERVAL:-2000}"
|
|
244
|
-
# Do not set OTEL_TRACES_EXPORTER / OTEL_METRICS_EXPORTER (including to "none") -
|
|
245
|
-
# Claude's telemetry init can abort the whole pipeline on unknown exporter types.
|
|
246
|
-
# If sourced, export env and return (caller can unset when done).
|
|
247
|
-
if [[ "${BASH_SOURCE[0]:-$0}" != "${0}" ]]; then
|
|
248
|
-
return 0 2>/dev/null || true
|
|
249
|
-
fi
|
|
250
|
-
|
|
251
|
-
# If executed, launch claude with any passed-through args.
|
|
252
|
-
# --settings is additional JSON: it replaces the built-in Fable/Opus lineup
|
|
253
|
-
# with the live catalog and allowlists only those models.
|
|
254
|
-
exec claude --settings "${SUBC_CLAUDE_SETTINGS}" ${PASSTHRU[@]+"${PASSTHRU[@]}"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Generated from agents/registry.json. Do not edit by hand.
|
|
3
|
-
# Exact IDs only: similarly named models do not inherit capabilities.
|
|
4
|
-
subc_model_supports_vision() {
|
|
5
|
-
case "${1:-}" in
|
|
6
|
-
'subconscious/deepseek-v4.1-flash-marathon') return 0 ;;
|
|
7
|
-
*) return 1 ;;
|
|
8
|
-
esac
|
|
9
|
-
}
|