threadwell 0.0.6 → 0.0.7
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/CHANGELOG.md +19 -0
- package/README.md +4 -8
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +5 -7
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +4 -2
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/core/settings-manager.d.ts +3 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +5 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +7 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +12 -4
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +2 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +43 -4
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +4 -3
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +31 -8
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +4 -3
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +32 -8
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -9
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +3 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +33 -20
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js +70 -0
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +61 -49
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/framed-message.d.ts +17 -0
- package/dist/modes/interactive/components/framed-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/framed-message.js +39 -0
- package/dist/modes/interactive/components/framed-message.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +0 -4
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +0 -20
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +4 -3
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +31 -9
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/split-info-card.d.ts.map +1 -1
- package/dist/modes/interactive/components/split-info-card.js +24 -17
- package/dist/modes/interactive/components/split-info-card.js.map +1 -1
- package/dist/modes/interactive/components/thinking-card.d.ts +6 -0
- package/dist/modes/interactive/components/thinking-card.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-card.js +17 -0
- package/dist/modes/interactive/components/thinking-card.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +5 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +72 -2
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +16 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +86 -73
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/visual-profile.d.ts +69 -0
- package/dist/modes/interactive/theme/visual-profile.d.ts.map +1 -0
- package/dist/modes/interactive/theme/visual-profile.js +131 -0
- package/dist/modes/interactive/theme/visual-profile.js.map +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +1 -1
- package/dist/package-manager-cli.js.map +1 -1
- package/docs/docs.json +1 -5
- package/docs/extensions.md +7 -16
- package/docs/index.md +6 -5
- package/docs/packages.md +8 -30
- package/docs/quickstart.md +1 -1
- package/docs/sdk.md +2 -3
- package/docs/settings.md +24 -7
- package/docs/themes.md +5 -295
- package/docs/usage.md +14 -17
- package/package.json +4 -4
package/docs/packages.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
> Threadwell can help you create Threadwell packages. Ask it to bundle your extensions, skills, prompt templates
|
|
1
|
+
> Threadwell can help you create Threadwell packages. Ask it to bundle your extensions, skills, or prompt templates.
|
|
2
2
|
|
|
3
3
|
# Threadwell Packages
|
|
4
4
|
|
|
5
|
-
Threadwell packages
|
|
5
|
+
Threadwell packages are an advanced local customization and distribution mechanism. They can bundle extensions, skills, and prompt templates through npm, git, or local paths. Normal Threadwell use does not require package authoring.
|
|
6
|
+
|
|
7
|
+
A package can declare resources in `package.json` under the `thread` key, or use conventional directories.
|
|
6
8
|
|
|
7
9
|
## Table of Contents
|
|
8
10
|
|
|
@@ -119,35 +121,13 @@ Add a `thread` manifest to `package.json` or use conventional directories. Inclu
|
|
|
119
121
|
"threadwell": {
|
|
120
122
|
"extensions": ["./extensions"],
|
|
121
123
|
"skills": ["./skills"],
|
|
122
|
-
"prompts": ["./prompts"]
|
|
123
|
-
"themes": ["./themes"]
|
|
124
|
+
"prompts": ["./prompts"]
|
|
124
125
|
}
|
|
125
126
|
}
|
|
126
127
|
```
|
|
127
128
|
|
|
128
129
|
Paths are relative to the package root. Arrays support glob patterns and `!exclusions`.
|
|
129
130
|
|
|
130
|
-
### Gallery Metadata
|
|
131
|
-
|
|
132
|
-
The [package gallery](https://threadwell.local/packages) displays packages tagged with `threadwell-package`. Add `video` or `image` fields to show a preview:
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"name": "my-package",
|
|
137
|
-
"keywords": ["threadwell-package"],
|
|
138
|
-
"threadwell": {
|
|
139
|
-
"extensions": ["./extensions"],
|
|
140
|
-
"video": "https://example.com/demo.mp4",
|
|
141
|
-
"image": "https://example.com/screenshot.png"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
- **video**: MP4 only. On desktop, autoplays on hover. Clicking opens a fullscreen player.
|
|
147
|
-
- **image**: PNG, JPEG, GIF, or WebP. Displayed as a static preview.
|
|
148
|
-
|
|
149
|
-
If both are set, video takes precedence.
|
|
150
|
-
|
|
151
131
|
## Package Structure
|
|
152
132
|
|
|
153
133
|
### Convention Directories
|
|
@@ -157,11 +137,10 @@ If no `thread` manifest is present, Threadwell auto-discovers resources from the
|
|
|
157
137
|
- `extensions/` loads `.ts` and `.js` files
|
|
158
138
|
- `skills/` recursively finds `SKILL.md` folders and loads top-level `.md` files as skills
|
|
159
139
|
- `prompts/` loads `.md` files
|
|
160
|
-
- `themes/` loads `.json` files
|
|
161
140
|
|
|
162
141
|
## Dependencies
|
|
163
142
|
|
|
164
|
-
Third party runtime dependencies belong in `dependencies` in `package.json`. Dependencies that do not register extensions, skills, prompt templates
|
|
143
|
+
Third party runtime dependencies belong in `dependencies` in `package.json`. Dependencies that do not register extensions, skills, or prompt templates also belong in `dependencies`. When Threadwell installs a package from npm or git, it runs `npm install`, so those dependencies are installed automatically.
|
|
165
144
|
|
|
166
145
|
Threadwell bundles core packages for extensions and skills. If you import any of these, list them in `peerDependencies` with a `"*"` range and do not bundle them: `@threadwell/ai`, `@threadwell/agent-core`, `threadwell`, `@threadwell/tui`, `typebox`.
|
|
167
146
|
|
|
@@ -194,8 +173,7 @@ Filter what a package loads using the object form in settings:
|
|
|
194
173
|
"source": "npm:my-package",
|
|
195
174
|
"extensions": ["extensions/*.ts", "!extensions/legacy.ts"],
|
|
196
175
|
"skills": [],
|
|
197
|
-
"prompts": ["prompts/review.md"]
|
|
198
|
-
"themes": ["+themes/legacy.json"]
|
|
176
|
+
"prompts": ["prompts/review.md"]
|
|
199
177
|
}
|
|
200
178
|
]
|
|
201
179
|
}
|
|
@@ -212,7 +190,7 @@ Filter what a package loads using the object form in settings:
|
|
|
212
190
|
|
|
213
191
|
## Enable and Disable Resources
|
|
214
192
|
|
|
215
|
-
Use `thread config` to enable or disable extensions, skills, prompt templates
|
|
193
|
+
Use `thread config` to enable or disable extensions, skills, and prompt templates from installed packages and local directories. Works for both global (`~/.threadwell/agent`) and project (`.threadwell/`) scopes.
|
|
216
194
|
|
|
217
195
|
## Scope and Deduplication
|
|
218
196
|
|
package/docs/quickstart.md
CHANGED
|
@@ -137,6 +137,6 @@ Use `--mode json` for JSON event output or `--mode rpc` for process integration.
|
|
|
137
137
|
- [Providers](providers.md) - authentication and model setup.
|
|
138
138
|
- [Settings](settings.md) - global and project configuration.
|
|
139
139
|
- [Keybindings](keybindings.md) - shortcuts and customization.
|
|
140
|
-
- [Threadwell Packages](packages.md) - install shared extensions, skills,
|
|
140
|
+
- [Threadwell Packages](packages.md) - install shared extensions, skills, and prompts.
|
|
141
141
|
|
|
142
142
|
Platform notes: [Windows](windows.md), [Termux](termux.md), [tmux](tmux.md), [Terminal setup](terminal-setup.md), [Shell aliases](shell-aliases.md).
|
package/docs/sdk.md
CHANGED
|
@@ -51,7 +51,7 @@ The SDK is included in the main package. No separate installation needed.
|
|
|
51
51
|
|
|
52
52
|
The main factory function for a single `AgentSession`.
|
|
53
53
|
|
|
54
|
-
`createAgentSession()` uses a `ResourceLoader` to supply extensions, skills, prompt templates,
|
|
54
|
+
`createAgentSession()` uses a `ResourceLoader` to supply extensions, skills, prompt templates, and context files. If you do not provide one, it uses `DefaultResourceLoader` with standard discovery.
|
|
55
55
|
|
|
56
56
|
```typescript
|
|
57
57
|
import { createAgentSession } from "threadwell";
|
|
@@ -834,7 +834,7 @@ Project overrides global. Nested objects merge keys. Setters modify global setti
|
|
|
834
834
|
|
|
835
835
|
## ResourceLoader
|
|
836
836
|
|
|
837
|
-
Use `DefaultResourceLoader` to discover extensions, skills, prompts,
|
|
837
|
+
Use `DefaultResourceLoader` to discover extensions, skills, prompts, and context files.
|
|
838
838
|
|
|
839
839
|
```typescript
|
|
840
840
|
import {
|
|
@@ -851,7 +851,6 @@ await loader.reload();
|
|
|
851
851
|
const extensions = loader.getExtensions();
|
|
852
852
|
const skills = loader.getSkills();
|
|
853
853
|
const prompts = loader.getPrompts();
|
|
854
|
-
const themes = loader.getThemes();
|
|
855
854
|
const contextFiles = loader.getAgentsFiles().agentsFiles;
|
|
856
855
|
```
|
|
857
856
|
|
package/docs/settings.md
CHANGED
|
@@ -48,7 +48,6 @@ Edit directly or use `/settings` for common options.
|
|
|
48
48
|
|
|
49
49
|
| Setting | Type | Default | Description |
|
|
50
50
|
|---------|------|---------|-------------|
|
|
51
|
-
| `theme` | string | `"dark"` | Theme name (`"dark"`, `"light"`, or custom) |
|
|
52
51
|
| `quietStartup` | boolean | `false` | Hide startup header |
|
|
53
52
|
| `collapseChangelog` | boolean | `false` | Show condensed changelog after updates |
|
|
54
53
|
| `enableInstallTelemetry` | boolean | `true` | Send an anonymous install/update version ping after first install or changelog-detected updates. This does not control update checks |
|
|
@@ -57,10 +56,32 @@ Edit directly or use `/settings` for common options.
|
|
|
57
56
|
| `editorPaddingX` | number | `0` | Horizontal padding for input editor (0-3) |
|
|
58
57
|
| `autocompleteMaxVisible` | number | `5` | Max visible items in autocomplete dropdown (3-20) |
|
|
59
58
|
| `showHardwareCursor` | boolean | `false` | Show terminal cursor |
|
|
59
|
+
| `interface.visualProfile` | string | `"auto"` | Terminal visual profile: `"auto"`, `"baseline"`, or `"enhanced"` |
|
|
60
|
+
|
|
61
|
+
#### Enhanced visual profile
|
|
62
|
+
|
|
63
|
+
Threadwell works in normal terminals with the baseline profile. New visual polish targets WezTerm-first progressive enhancement.
|
|
64
|
+
|
|
65
|
+
Recommended enhanced setup:
|
|
66
|
+
|
|
67
|
+
- WezTerm
|
|
68
|
+
- JetBrains Mono
|
|
69
|
+
- Symbols Nerd Font Mono
|
|
70
|
+
- truecolor support
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"interface": {
|
|
75
|
+
"visualProfile": "auto"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Use `"baseline"` to force plain fallback rendering, or `"enhanced"` to force the WezTerm/Nerd Font-oriented token set for local experimentation.
|
|
60
81
|
|
|
61
82
|
### Telemetry and update checks
|
|
62
83
|
|
|
63
|
-
`enableInstallTelemetry` only controls the anonymous install/update ping
|
|
84
|
+
`enableInstallTelemetry` only controls the anonymous install/update ping. Opting out of telemetry does not disable update checks; Threadwell can still fetch `https://registry.npmjs.org/threadwell/latest` to look for the latest npm version.
|
|
64
85
|
|
|
65
86
|
Set `THREADWELL_SKIP_VERSION_CHECK=1` to disable the Threadwell version update check. Use `--offline` or `THREADWELL_OFFLINE=1` to disable all startup network operations described here, including update checks, package update checks, and install/update telemetry.
|
|
66
87
|
|
|
@@ -287,7 +308,7 @@ When multiple sources specify a session directory, precedence is `--session-dir`
|
|
|
287
308
|
|
|
288
309
|
### Resources
|
|
289
310
|
|
|
290
|
-
These settings define where to load extensions, skills,
|
|
311
|
+
These settings define where to load extensions, skills, and prompts from.
|
|
291
312
|
|
|
292
313
|
Paths in `~/.threadwell/agent/settings.json` resolve relative to `~/.threadwell/agent`. Paths in `.threadwell/settings.json` resolve relative to `.threadwell`; `.threadwell/settings.json` is still read as a compatibility fallback when `.threadwell/settings.json` is absent. Absolute paths and `~` are supported.
|
|
293
314
|
|
|
@@ -298,7 +319,6 @@ Paths in `~/.threadwell/agent/settings.json` resolve relative to `~/.threadwell/
|
|
|
298
319
|
| `skills` | string[] | `[]` | Local skill file paths or directories |
|
|
299
320
|
| `skillsEnabled` | boolean | `true` | Load and inject installed skills |
|
|
300
321
|
| `prompts` | string[] | `[]` | Local prompt template paths or directories |
|
|
301
|
-
| `themes` | string[] | `[]` | Local theme file paths or directories |
|
|
302
322
|
| `enableSkillCommands` | boolean | `true` | Register loaded skills as `/skill:name` commands |
|
|
303
323
|
|
|
304
324
|
Set `skillsEnabled` to `false` to disable skills for this Threadwell configuration without deleting or moving skill files. Arrays support glob patterns and exclusions. Use `!pattern` to exclude. Use `+path` to force-include an exact path and `-path` to force-exclude an exact path.
|
|
@@ -336,7 +356,6 @@ See [packages.md](packages.md) for package management details.
|
|
|
336
356
|
"defaultProvider": "anthropic",
|
|
337
357
|
"defaultModel": "claude-sonnet-4-20250514",
|
|
338
358
|
"defaultThinkingLevel": "medium",
|
|
339
|
-
"theme": "dark",
|
|
340
359
|
"compaction": {
|
|
341
360
|
"enabled": true,
|
|
342
361
|
"reserveTokens": 16384,
|
|
@@ -361,7 +380,6 @@ Project settings (`.threadwell/settings.json`, or `.threadwell/settings.json` fa
|
|
|
361
380
|
```json
|
|
362
381
|
// ~/.threadwell/agent/settings.json (global)
|
|
363
382
|
{
|
|
364
|
-
"theme": "dark",
|
|
365
383
|
"compaction": { "enabled": true, "reserveTokens": 16384 }
|
|
366
384
|
}
|
|
367
385
|
|
|
@@ -372,7 +390,6 @@ Project settings (`.threadwell/settings.json`, or `.threadwell/settings.json` fa
|
|
|
372
390
|
|
|
373
391
|
// Result
|
|
374
392
|
{
|
|
375
|
-
"theme": "dark",
|
|
376
393
|
"compaction": { "enabled": true, "reserveTokens": 8192 }
|
|
377
394
|
}
|
|
378
395
|
```
|
package/docs/themes.md
CHANGED
|
@@ -1,295 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## Table of Contents
|
|
8
|
-
|
|
9
|
-
- [Locations](#locations)
|
|
10
|
-
- [Selecting a Theme](#selecting-a-theme)
|
|
11
|
-
- [Creating a Custom Theme](#creating-a-custom-theme)
|
|
12
|
-
- [Theme Format](#theme-format)
|
|
13
|
-
- [Color Tokens](#color-tokens)
|
|
14
|
-
- [Color Values](#color-values)
|
|
15
|
-
- [Tips](#tips)
|
|
16
|
-
|
|
17
|
-
## Locations
|
|
18
|
-
|
|
19
|
-
Threadwell loads themes from:
|
|
20
|
-
|
|
21
|
-
- Built-in: `dark`, `light`
|
|
22
|
-
- Global: `~/.threadwell/agent/themes/*.json`
|
|
23
|
-
- Project: `.threadwell/themes/*.json`
|
|
24
|
-
- Packages: `themes/` directories or `threadwell.themes` entries in `package.json`
|
|
25
|
-
- Settings: `themes` array with files or directories
|
|
26
|
-
- CLI: `--theme <path>` (repeatable)
|
|
27
|
-
|
|
28
|
-
Disable discovery with `--no-themes`.
|
|
29
|
-
|
|
30
|
-
## Selecting a Theme
|
|
31
|
-
|
|
32
|
-
Select a theme via `/settings` or in `settings.json`:
|
|
33
|
-
|
|
34
|
-
```json
|
|
35
|
-
{
|
|
36
|
-
"theme": "my-theme"
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
On first run, Threadwell detects your terminal background and defaults to `dark` or `light`.
|
|
41
|
-
|
|
42
|
-
## Creating a Custom Theme
|
|
43
|
-
|
|
44
|
-
1. Create a theme file:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
mkdir -p ~/.threadwell/agent/themes
|
|
48
|
-
vim ~/.threadwell/agent/themes/my-theme.json
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
2. Define the theme with all required colors (see [Color Tokens](#color-tokens)):
|
|
52
|
-
|
|
53
|
-
```json
|
|
54
|
-
{
|
|
55
|
-
"$schema": "https://raw.githubusercontent.com/Threadwell source/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
56
|
-
"name": "my-theme",
|
|
57
|
-
"vars": {
|
|
58
|
-
"primary": "#00aaff",
|
|
59
|
-
"secondary": 242
|
|
60
|
-
},
|
|
61
|
-
"colors": {
|
|
62
|
-
"accent": "primary",
|
|
63
|
-
"border": "primary",
|
|
64
|
-
"borderAccent": "#00ffff",
|
|
65
|
-
"borderMuted": "secondary",
|
|
66
|
-
"success": "#00ff00",
|
|
67
|
-
"error": "#ff0000",
|
|
68
|
-
"warning": "#ffff00",
|
|
69
|
-
"muted": "secondary",
|
|
70
|
-
"dim": 240,
|
|
71
|
-
"text": "",
|
|
72
|
-
"thinkingText": "secondary",
|
|
73
|
-
"selectedBg": "#2d2d30",
|
|
74
|
-
"userMessageBg": "#2d2d30",
|
|
75
|
-
"userMessageText": "",
|
|
76
|
-
"customMessageBg": "#2d2d30",
|
|
77
|
-
"customMessageText": "",
|
|
78
|
-
"customMessageLabel": "primary",
|
|
79
|
-
"toolPendingBg": "#1e1e2e",
|
|
80
|
-
"toolSuccessBg": "#1e2e1e",
|
|
81
|
-
"toolErrorBg": "#2e1e1e",
|
|
82
|
-
"toolTitle": "primary",
|
|
83
|
-
"toolOutput": "",
|
|
84
|
-
"mdHeading": "#ffaa00",
|
|
85
|
-
"mdLink": "primary",
|
|
86
|
-
"mdLinkUrl": "secondary",
|
|
87
|
-
"mdCode": "#00ffff",
|
|
88
|
-
"mdCodeBlock": "",
|
|
89
|
-
"mdCodeBlockBorder": "secondary",
|
|
90
|
-
"mdQuote": "secondary",
|
|
91
|
-
"mdQuoteBorder": "secondary",
|
|
92
|
-
"mdHr": "secondary",
|
|
93
|
-
"mdListBullet": "#00ffff",
|
|
94
|
-
"toolDiffAdded": "#00ff00",
|
|
95
|
-
"toolDiffRemoved": "#ff0000",
|
|
96
|
-
"toolDiffContext": "secondary",
|
|
97
|
-
"syntaxComment": "secondary",
|
|
98
|
-
"syntaxKeyword": "primary",
|
|
99
|
-
"syntaxFunction": "#00aaff",
|
|
100
|
-
"syntaxVariable": "#ffaa00",
|
|
101
|
-
"syntaxString": "#00ff00",
|
|
102
|
-
"syntaxNumber": "#ff00ff",
|
|
103
|
-
"syntaxType": "#00aaff",
|
|
104
|
-
"syntaxOperator": "primary",
|
|
105
|
-
"syntaxPunctuation": "secondary",
|
|
106
|
-
"thinkingOff": "secondary",
|
|
107
|
-
"thinkingMinimal": "primary",
|
|
108
|
-
"thinkingLow": "#00aaff",
|
|
109
|
-
"thinkingMedium": "#00ffff",
|
|
110
|
-
"thinkingHigh": "#ff00ff",
|
|
111
|
-
"thinkingXhigh": "#ff0000",
|
|
112
|
-
"bashMode": "#ffaa00"
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
3. Select the theme via `/settings`.
|
|
118
|
-
|
|
119
|
-
**Hot reload:** When you edit the currently active custom theme file, Threadwell reloads it automatically for immediate visual feedback.
|
|
120
|
-
|
|
121
|
-
## Theme Format
|
|
122
|
-
|
|
123
|
-
```json
|
|
124
|
-
{
|
|
125
|
-
"$schema": "https://raw.githubusercontent.com/Threadwell source/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
126
|
-
"name": "my-theme",
|
|
127
|
-
"vars": {
|
|
128
|
-
"blue": "#0066cc",
|
|
129
|
-
"gray": 242
|
|
130
|
-
},
|
|
131
|
-
"colors": {
|
|
132
|
-
"accent": "blue",
|
|
133
|
-
"muted": "gray",
|
|
134
|
-
"text": "",
|
|
135
|
-
...
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
- `name` is required and must be unique.
|
|
141
|
-
- `vars` is optional. Define reusable colors here, then reference them in `colors`.
|
|
142
|
-
- `colors` must define all 51 required tokens.
|
|
143
|
-
|
|
144
|
-
The `$schema` field enables editor auto-completion and validation.
|
|
145
|
-
|
|
146
|
-
## Color Tokens
|
|
147
|
-
|
|
148
|
-
Every theme must define all 51 color tokens. There are no optional colors.
|
|
149
|
-
|
|
150
|
-
### Core UI (11 colors)
|
|
151
|
-
|
|
152
|
-
| Token | Purpose |
|
|
153
|
-
|-------|---------|
|
|
154
|
-
| `accent` | Primary accent (logo, selected items, cursor) |
|
|
155
|
-
| `border` | Normal borders |
|
|
156
|
-
| `borderAccent` | Highlighted borders |
|
|
157
|
-
| `borderMuted` | Subtle borders (editor) |
|
|
158
|
-
| `success` | Success states |
|
|
159
|
-
| `error` | Error states |
|
|
160
|
-
| `warning` | Warning states |
|
|
161
|
-
| `muted` | Secondary text |
|
|
162
|
-
| `dim` | Tertiary text |
|
|
163
|
-
| `text` | Default text (usually `""`) |
|
|
164
|
-
| `thinkingText` | Thinking block text |
|
|
165
|
-
|
|
166
|
-
### Backgrounds & Content (11 colors)
|
|
167
|
-
|
|
168
|
-
| Token | Purpose |
|
|
169
|
-
|-------|---------|
|
|
170
|
-
| `selectedBg` | Selected line background |
|
|
171
|
-
| `userMessageBg` | User message background |
|
|
172
|
-
| `userMessageText` | User message text |
|
|
173
|
-
| `customMessageBg` | Extension message background |
|
|
174
|
-
| `customMessageText` | Extension message text |
|
|
175
|
-
| `customMessageLabel` | Extension message label |
|
|
176
|
-
| `toolPendingBg` | Tool box (pending) |
|
|
177
|
-
| `toolSuccessBg` | Tool box (success) |
|
|
178
|
-
| `toolErrorBg` | Tool box (error) |
|
|
179
|
-
| `toolTitle` | Tool title |
|
|
180
|
-
| `toolOutput` | Tool output text |
|
|
181
|
-
|
|
182
|
-
### Markdown (10 colors)
|
|
183
|
-
|
|
184
|
-
| Token | Purpose |
|
|
185
|
-
|-------|---------|
|
|
186
|
-
| `mdHeading` | Headings |
|
|
187
|
-
| `mdLink` | Link text |
|
|
188
|
-
| `mdLinkUrl` | Link URL |
|
|
189
|
-
| `mdCode` | Inline code |
|
|
190
|
-
| `mdCodeBlock` | Code block content |
|
|
191
|
-
| `mdCodeBlockBorder` | Code block fences |
|
|
192
|
-
| `mdQuote` | Blockquote text |
|
|
193
|
-
| `mdQuoteBorder` | Blockquote border |
|
|
194
|
-
| `mdHr` | Horizontal rule |
|
|
195
|
-
| `mdListBullet` | List bullets |
|
|
196
|
-
|
|
197
|
-
### Tool Diffs (3 colors)
|
|
198
|
-
|
|
199
|
-
| Token | Purpose |
|
|
200
|
-
|-------|---------|
|
|
201
|
-
| `toolDiffAdded` | Added lines |
|
|
202
|
-
| `toolDiffRemoved` | Removed lines |
|
|
203
|
-
| `toolDiffContext` | Context lines |
|
|
204
|
-
|
|
205
|
-
### Syntax Highlighting (9 colors)
|
|
206
|
-
|
|
207
|
-
| Token | Purpose |
|
|
208
|
-
|-------|---------|
|
|
209
|
-
| `syntaxComment` | Comments |
|
|
210
|
-
| `syntaxKeyword` | Keywords |
|
|
211
|
-
| `syntaxFunction` | Function names |
|
|
212
|
-
| `syntaxVariable` | Variables |
|
|
213
|
-
| `syntaxString` | Strings |
|
|
214
|
-
| `syntaxNumber` | Numbers |
|
|
215
|
-
| `syntaxType` | Types |
|
|
216
|
-
| `syntaxOperator` | Operators |
|
|
217
|
-
| `syntaxPunctuation` | Punctuation |
|
|
218
|
-
|
|
219
|
-
### Thinking Level Borders (6 colors)
|
|
220
|
-
|
|
221
|
-
Editor border colors indicating thinking level (visual hierarchy from subtle to prominent):
|
|
222
|
-
|
|
223
|
-
| Token | Purpose |
|
|
224
|
-
|-------|---------|
|
|
225
|
-
| `thinkingOff` | Thinking off |
|
|
226
|
-
| `thinkingMinimal` | Minimal thinking |
|
|
227
|
-
| `thinkingLow` | Low thinking |
|
|
228
|
-
| `thinkingMedium` | Medium thinking |
|
|
229
|
-
| `thinkingHigh` | High thinking |
|
|
230
|
-
| `thinkingXhigh` | Extra high thinking |
|
|
231
|
-
|
|
232
|
-
### Bash Mode (1 color)
|
|
233
|
-
|
|
234
|
-
| Token | Purpose |
|
|
235
|
-
|-------|---------|
|
|
236
|
-
| `bashMode` | Editor border in bash mode (`!` prefix) |
|
|
237
|
-
|
|
238
|
-
### HTML Export (optional)
|
|
239
|
-
|
|
240
|
-
The `export` section controls colors for `/export` HTML output. If omitted, colors are derived from `userMessageBg`.
|
|
241
|
-
|
|
242
|
-
```json
|
|
243
|
-
{
|
|
244
|
-
"export": {
|
|
245
|
-
"pageBg": "#18181e",
|
|
246
|
-
"cardBg": "#1e1e24",
|
|
247
|
-
"infoBg": "#3c3728"
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
## Color Values
|
|
253
|
-
|
|
254
|
-
Four formats are supported:
|
|
255
|
-
|
|
256
|
-
| Format | Example | Description |
|
|
257
|
-
|--------|---------|-------------|
|
|
258
|
-
| Hex | `"#ff0000"` | 6-digit hex RGB |
|
|
259
|
-
| 256-color | `39` | xterm 256-color palette index (0-255) |
|
|
260
|
-
| Variable | `"primary"` | Reference to a `vars` entry |
|
|
261
|
-
| Default | `""` | Terminal's default color |
|
|
262
|
-
|
|
263
|
-
### 256-Color Palette
|
|
264
|
-
|
|
265
|
-
- `0-15`: Basic ANSI colors (terminal-dependent)
|
|
266
|
-
- `16-231`: 6×6×6 RGB cube (`16 + 36×R + 6×G + B` where R,G,B are 0-5)
|
|
267
|
-
- `232-255`: Grayscale ramp
|
|
268
|
-
|
|
269
|
-
### Terminal Compatibility
|
|
270
|
-
|
|
271
|
-
Threadwell uses 24-bit RGB colors. Most modern terminals support this (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). For older terminals with only 256-color support, Threadwell falls back to the nearest approximation.
|
|
272
|
-
|
|
273
|
-
Check truecolor support:
|
|
274
|
-
|
|
275
|
-
```bash
|
|
276
|
-
echo $COLORTERM # Should output "truecolor" or "24bit"
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
## Tips
|
|
280
|
-
|
|
281
|
-
**Dark terminals:** Use bright, saturated colors with higher contrast.
|
|
282
|
-
|
|
283
|
-
**Light terminals:** Use darker, muted colors with lower contrast.
|
|
284
|
-
|
|
285
|
-
**Color harmony:** Start with a base palette (Nord, Gruvbox, Tokyo Night), define it in `vars`, and reference consistently.
|
|
286
|
-
|
|
287
|
-
**Testing:** Check your theme with different message types, tool states, markdown content, and long wrapped text.
|
|
288
|
-
|
|
289
|
-
**VS Code:** Set `terminal.integrated.minimumContrastRatio` to `1` for accurate colors.
|
|
290
|
-
|
|
291
|
-
## Examples
|
|
292
|
-
|
|
293
|
-
See the built-in themes:
|
|
294
|
-
- [dark.json](../src/modes/interactive/theme/dark.json)
|
|
295
|
-
- [light.json](../src/modes/interactive/theme/light.json)
|
|
1
|
+
# Themes
|
|
2
|
+
|
|
3
|
+
Threadwell currently ships with a fixed built-in terminal theme.
|
|
4
|
+
|
|
5
|
+
The theme engine remains internal because the TUI components depend on theme tokens, but user-facing custom theme selection and package theme management are frozen for now. Existing `theme` or `themes` settings are ignored by the interactive UI and should not be used for new configuration.
|
package/docs/usage.md
CHANGED
|
@@ -13,7 +13,7 @@ The interface has four main areas:
|
|
|
13
13
|
- **Editor** - where you type; border color indicates the current thinking level
|
|
14
14
|
- **Footer** - working directory, session name, token/cache usage, cost, context usage, and current model
|
|
15
15
|
|
|
16
|
-
The editor can be replaced temporarily by built-in UI such as `/settings`
|
|
16
|
+
The editor can be replaced temporarily by built-in UI such as `/settings` and other terminal-native overlays.
|
|
17
17
|
|
|
18
18
|
### Editor Features
|
|
19
19
|
|
|
@@ -31,14 +31,14 @@ See [Keybindings](keybindings.md) for all shortcuts and customization.
|
|
|
31
31
|
|
|
32
32
|
## Slash Commands
|
|
33
33
|
|
|
34
|
-
Type `/` in the editor to open command completion.
|
|
34
|
+
Type `/` in the editor to open command completion. Built-in commands cover model selection, settings, sessions, memory, context, and exports. Skills and prompt templates can also appear as slash commands when configured.
|
|
35
35
|
|
|
36
36
|
| Command | Description |
|
|
37
37
|
|---------|-------------|
|
|
38
38
|
| `/login`, `/logout` | Manage OAuth or API-key credentials |
|
|
39
39
|
| `/model` | Switch models |
|
|
40
40
|
| `/scoped-models` | Enable/disable models for Ctrl+P cycling |
|
|
41
|
-
| `/settings` | Thinking level,
|
|
41
|
+
| `/settings` | Thinking level, message delivery, transport |
|
|
42
42
|
| `/resume` | Pick from previous sessions |
|
|
43
43
|
| `/new` | Start a new session |
|
|
44
44
|
| `/name <name>` | Set session display name |
|
|
@@ -126,15 +126,14 @@ thread [options] [@files...] [messages...]
|
|
|
126
126
|
### Package Commands
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
|
-
thread
|
|
130
|
-
thread
|
|
131
|
-
thread
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
thread
|
|
135
|
-
thread
|
|
136
|
-
thread
|
|
137
|
-
thread config # Enable/disable package resources
|
|
129
|
+
thread update # Update Threadwell and packages; skips pinned packages
|
|
130
|
+
thread update --self # Update Threadwell only
|
|
131
|
+
thread list # List installed packages
|
|
132
|
+
|
|
133
|
+
# Advanced local package management
|
|
134
|
+
thread install <source> [-l] # Install package, -l for project-local
|
|
135
|
+
thread remove <source> [-l] # Remove package
|
|
136
|
+
thread config # Enable/disable package resources
|
|
138
137
|
```
|
|
139
138
|
|
|
140
139
|
See [Threadwell Packages](packages.md) for package sources and security notes.
|
|
@@ -187,7 +186,7 @@ cat README.md | Threadwell -p "Summarize this text"
|
|
|
187
186
|
|
|
188
187
|
Built-in tools: `read`, `bash`, `edit`, `write`, `grep`, `find`, `ls`.
|
|
189
188
|
|
|
190
|
-
### Resource Options
|
|
189
|
+
### Advanced Resource Options
|
|
191
190
|
|
|
192
191
|
| Option | Description |
|
|
193
192
|
|--------|-------------|
|
|
@@ -197,11 +196,9 @@ Built-in tools: `read`, `bash`, `edit`, `write`, `grep`, `find`, `ls`.
|
|
|
197
196
|
| `--no-skills` | Disable skill discovery |
|
|
198
197
|
| `--prompt-template <path>` | Load a prompt template; repeatable |
|
|
199
198
|
| `--no-prompt-templates` | Disable prompt template discovery |
|
|
200
|
-
| `--theme <path>` | Load a theme; repeatable |
|
|
201
|
-
| `--no-themes` | Disable theme discovery |
|
|
202
199
|
| `--no-context-files`, `-nc` | Disable `AGENTS.md` and `CLAUDE.md` discovery |
|
|
203
200
|
|
|
204
|
-
Combine `--no-*` with explicit flags to load exactly what you need, ignoring settings. Example:
|
|
201
|
+
These are mainly for extension/package development and troubleshooting. Combine `--no-*` with explicit flags to load exactly what you need, ignoring settings. Example:
|
|
205
202
|
|
|
206
203
|
```bash
|
|
207
204
|
thread --no-extensions -e ./my-extension.ts
|
|
@@ -270,7 +267,7 @@ thread --tools read,grep,find,ls -p "Review the code"
|
|
|
270
267
|
|
|
271
268
|
## Design Principles
|
|
272
269
|
|
|
273
|
-
Threadwell keeps the
|
|
270
|
+
Threadwell keeps the day-to-day surface small and terminal-native. Advanced workflow-specific behavior can still live in extensions, skills, prompt templates, and packages.
|
|
274
271
|
|
|
275
272
|
It intentionally does not include built-in MCP, sub-agents, permission popups, plan mode, to-dos, or background bash. You can build or install those workflows as extensions or packages, or use external tools such as containers and tmux.
|
|
276
273
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "threadwell",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"threadwellConfig": {
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"prepublishOnly": "npm run clean && npm run build"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@threadwell/agent-core": "^0.0.
|
|
43
|
-
"@threadwell/ai": "^0.0.
|
|
44
|
-
"@threadwell/tui": "^0.0.
|
|
42
|
+
"@threadwell/agent-core": "^0.0.7",
|
|
43
|
+
"@threadwell/ai": "^0.0.7",
|
|
44
|
+
"@threadwell/tui": "^0.0.7",
|
|
45
45
|
"@silvia-odwyer/photon-node": "^0.3.4",
|
|
46
46
|
"@types/better-sqlite3": "^7.6.13",
|
|
47
47
|
"better-sqlite3": "^12.10.0",
|