janissary 0.5.2 → 0.5.5
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 +0 -18
- package/dist/instance-lock.js +1 -1
- package/harness-models.json +52 -0
- package/package.json +4 -1
- package/profiles/claude/_files.json +3 -0
- package/profiles/claude/_monitors.json +6 -0
- package/profiles/claude/_notifications.json +3 -0
- package/profiles/claude/claude.json +7 -0
- package/profiles/coding/execute.json +9 -0
- package/profiles/coding/plan.json +9 -0
- package/profiles/coding/review.json +19 -0
- package/profiles/small-fix/opencode.json +11 -0
- package/web/dist/assets/index-DKEtQh6C.css +1 -0
- package/web/dist/assets/index-Dz5j8yq-.js +1066 -0
- package/web/dist/index.html +13 -0
package/README.md
CHANGED
|
@@ -8,21 +8,3 @@ See the [User Docs](https://thirtysixthspan.github.io/janissary/user-documentati
|
|
|
8
8
|
|
|
9
9
|
See the [Developer Docs](https://thirtysixthspan.github.io/janissary/developer-documentation/) for advanced usage, coding, linting and testing practices.
|
|
10
10
|
|
|
11
|
-
## Prerequisites
|
|
12
|
-
|
|
13
|
-
- macOS
|
|
14
|
-
- Node.js 24+
|
|
15
|
-
- Google Chrome
|
|
16
|
-
|
|
17
|
-
## Usage
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
npx janus
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
Or install globally:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
npm install -g janissary
|
|
27
|
-
janus
|
|
28
|
-
```
|
package/dist/instance-lock.js
CHANGED
|
@@ -17,7 +17,7 @@ export function acquireLock(projectDir) {
|
|
|
17
17
|
if (existsSync(file)) {
|
|
18
18
|
const pid = Number(readFileSync(file, 'utf8').trim());
|
|
19
19
|
if (isPidAlive(pid)) {
|
|
20
|
-
throw new Error(`another janus instance is already running in this directory (pid ${pid}). Run janus <other-directory> to start a second instance elsewhere.`);
|
|
20
|
+
throw new Error(`another janus instance is already running in this directory (pid ${pid}). Run janus <other-directory> to start a second instance elsewhere. If you're sure no other instance is running, delete ${file} to clear the lock.`);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
mkdirSync(path.dirname(file), { recursive: true });
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"claude": [
|
|
3
|
+
"claude-fable-5",
|
|
4
|
+
"claude-opus-4-8",
|
|
5
|
+
"claude-sonnet-5",
|
|
6
|
+
"claude-haiku-4-5-20251001"
|
|
7
|
+
],
|
|
8
|
+
"codex": [
|
|
9
|
+
"gpt-5.6-terra",
|
|
10
|
+
"gpt-5.6-luna",
|
|
11
|
+
"gpt-5.5",
|
|
12
|
+
"gpt-5.4-mini"
|
|
13
|
+
],
|
|
14
|
+
"opencode": [
|
|
15
|
+
"opencode/big-pickle",
|
|
16
|
+
"opencode/deepseek-v4-flash-free",
|
|
17
|
+
"opencode/mimo-v2.5-free",
|
|
18
|
+
"opencode/nemotron-3-ultra-free",
|
|
19
|
+
"opencode/north-mini-code-free",
|
|
20
|
+
"opencode-go/deepseek-v4-flash",
|
|
21
|
+
"opencode-go/deepseek-v4-pro",
|
|
22
|
+
"opencode-go/glm-5.1",
|
|
23
|
+
"opencode-go/glm-5.2",
|
|
24
|
+
"opencode-go/kimi-k2.6",
|
|
25
|
+
"opencode-go/kimi-k2.7-code",
|
|
26
|
+
"opencode-go/mimo-v2.5",
|
|
27
|
+
"opencode-go/mimo-v2.5-pro",
|
|
28
|
+
"opencode-go/minimax-m2.7",
|
|
29
|
+
"opencode-go/minimax-m3",
|
|
30
|
+
"opencode-go/qwen3.6-plus",
|
|
31
|
+
"opencode-go/qwen3.7-max",
|
|
32
|
+
"opencode-go/qwen3.7-plus",
|
|
33
|
+
"google/gemini-2.5-flash",
|
|
34
|
+
"google/gemini-2.5-flash-image",
|
|
35
|
+
"google/gemini-2.5-flash-lite",
|
|
36
|
+
"google/gemini-2.5-flash-preview-tts",
|
|
37
|
+
"google/gemini-2.5-pro",
|
|
38
|
+
"google/gemini-2.5-pro-preview-tts",
|
|
39
|
+
"google/gemini-3-flash-preview",
|
|
40
|
+
"google/gemini-3-pro-image-preview",
|
|
41
|
+
"google/gemini-3.1-flash-image-preview",
|
|
42
|
+
"google/gemini-3.1-flash-lite",
|
|
43
|
+
"google/gemini-3.1-pro-preview",
|
|
44
|
+
"google/gemini-3.1-pro-preview-customtools",
|
|
45
|
+
"google/gemini-3.5-flash",
|
|
46
|
+
"google/gemini-embedding-001",
|
|
47
|
+
"google/gemini-flash-latest",
|
|
48
|
+
"google/gemini-flash-lite-latest",
|
|
49
|
+
"google/gemma-4-26b-a4b-it",
|
|
50
|
+
"google/gemma-4-31b-it"
|
|
51
|
+
]
|
|
52
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "janissary",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"description": "A terminal UI shell with built-in commands and shell execution",
|
|
5
5
|
"bin": {
|
|
6
6
|
"janus": "./bin/janus.mjs"
|
|
@@ -80,10 +80,13 @@
|
|
|
80
80
|
},
|
|
81
81
|
"files": [
|
|
82
82
|
"ai",
|
|
83
|
+
"profiles",
|
|
83
84
|
"bin",
|
|
84
85
|
"dist",
|
|
86
|
+
"web/dist",
|
|
85
87
|
"chrome-extension",
|
|
86
88
|
"agent-names.json",
|
|
89
|
+
"harness-models.json",
|
|
87
90
|
"help.md",
|
|
88
91
|
"scripts"
|
|
89
92
|
],
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "execute",
|
|
3
|
+
"dotColor": "#6bcb77",
|
|
4
|
+
"active": false,
|
|
5
|
+
"number": 2,
|
|
6
|
+
"context": [
|
|
7
|
+
"You are the Execute agent in a coding profile. Implement the plan from the plan agent: make the code changes, keep edits focused, and run the tests/build/lint. When the change is complete and green, hand it to the review agent."
|
|
8
|
+
]
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "plan",
|
|
3
|
+
"dotColor": "#5b9cff",
|
|
4
|
+
"active": false,
|
|
5
|
+
"number": 1,
|
|
6
|
+
"context": [
|
|
7
|
+
"You are the Plan agent in a coding profile. Investigate the codebase and design an implementation approach. Break the work into clear, ordered steps and identify the files to change. Hand the plan to the execute agent; do not write code yourself."
|
|
8
|
+
]
|
|
9
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "review",
|
|
3
|
+
"dotColor": "#ffd93d",
|
|
4
|
+
"active": false,
|
|
5
|
+
"number": 3,
|
|
6
|
+
"context": [
|
|
7
|
+
"You are the Review agent in a coding profile. Review the execute agent's changes for correctness, simplicity, and adherence to the codebase conventions (ai/guidelines/code-guidelines.md, ai/guidelines/architecture-principles.md). Flag bugs and cleanups, and confirm tests, build, and lint pass before sign-off."
|
|
8
|
+
],
|
|
9
|
+
"schedule": [
|
|
10
|
+
{
|
|
11
|
+
"command": "ls",
|
|
12
|
+
"spec": "every 1m",
|
|
13
|
+
"recurring": true,
|
|
14
|
+
"intervalMs": 60000,
|
|
15
|
+
"nextRun": 1782280999860,
|
|
16
|
+
"id": "files"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}:root,[data-theme=dark]{--bg:#17181b;--bg-soft:#26292f;--fg:#e4e5e7;--muted:#8a8d94;--faint:#5b5e66;--border:#292b30;--accent:#5b9cff;--running:#ffd93d;--success:#58c07a;--error:#e06c75;--search-hit-bg:#6b5b00;--search-hit-fg:#ffe27a;--terminal-bg:#17181b;--editor-current-line:#ffffff0a;--editor-selection:#5b9cff4d;--mono:ui-monospace, "SFMono-Regular", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace}[data-theme=light]{--bg:#fff;--bg-soft:#f0f1f3;--fg:#1f2328;--muted:#6e747d;--faint:#a3a8b0;--border:#d9dce1;--accent:#0969da;--running:#9a6700;--success:#1a7f37;--error:#cf222e;--search-hit-bg:#fff8c5;--search-hit-fg:#4d3800;--terminal-bg:#fff;--editor-current-line:#0000000a;--editor-selection:#0969da40}[data-theme=solarized-dark]{--bg:#002b36;--bg-soft:#073642;--fg:#93a1a1;--muted:#657b83;--faint:#586e75;--border:#0a4050;--accent:#268bd2;--running:#b58900;--success:#859900;--error:#dc322f;--search-hit-bg:#b58900;--search-hit-fg:#002b36;--terminal-bg:#002b36;--editor-current-line:#ffffff0a;--editor-selection:#268bd24d}[data-theme=solarized-light]{--bg:#fdf6e3;--bg-soft:#eee8d5;--fg:#586e75;--muted:#839496;--faint:#93a1a1;--border:#ddd6c1;--accent:#268bd2;--running:#b58900;--success:#859900;--error:#dc322f;--search-hit-bg:#b58900;--search-hit-fg:#fdf6e3;--terminal-bg:#fdf6e3;--editor-current-line:#0000000a;--editor-selection:#268bd240}[data-theme=nord]{--bg:#2e3440;--bg-soft:#3b4252;--fg:#d8dee9;--muted:#949cad;--faint:#616e88;--border:#434c5e;--accent:#88c0d0;--running:#ebcb8b;--success:#a3be8c;--error:#bf616a;--search-hit-bg:#ebcb8b;--search-hit-fg:#2e3440;--terminal-bg:#2e3440;--editor-current-line:#ffffff0a;--editor-selection:#88c0d04d}[data-theme=dracula]{--bg:#282a36;--bg-soft:#343746;--fg:#f8f8f2;--muted:#8f93a8;--faint:#6272a4;--border:#44475a;--accent:#bd93f9;--running:#f1fa8c;--success:#50fa7b;--error:#f55;--search-hit-bg:#ffb86c;--search-hit-fg:#282a36;--terminal-bg:#282a36;--editor-current-line:#ffffff0a;--editor-selection:#bd93f94d}.theme-swatch{border:1px solid var(--border);background:var(--bg);vertical-align:middle;border-radius:3px;gap:2px;margin-right:8px;padding:2px;display:inline-flex}.theme-swatch .chip{border-radius:2px;width:10px;height:10px}.theme-swatch .chip-bg{background:var(--bg-soft)}.theme-swatch .chip-fg{background:var(--fg)}.theme-swatch .chip-accent{background:var(--accent)}*{box-sizing:border-box}html,body,#root{background:var(--bg);height:100%;color:var(--fg);font-family:var(--mono);margin:0;font-size:13.1625px}.app{flex-direction:row;height:100%;display:flex}.app-center{flex-direction:column;flex:1;min-width:0;height:100%;display:flex}.tabstrip{background:var(--bg-soft);flex-wrap:wrap;align-items:stretch;display:flex}.tab{cursor:pointer;color:var(--muted);border-top:3px solid var(--accent);align-items:center;gap:6px;padding:4px 14px 6px;display:flex}.tab.active{background:var(--bg);color:var(--fg)}.tab .dot{font-size:10px;line-height:1}.tab .tab-close{cursor:pointer;color:var(--muted);background:0 0;border:none;margin-left:auto;padding:0 2px;font-size:14px;line-height:1}.tab .tab-close:hover{color:var(--fg)}.tab-rename-input{font:inherit;color:inherit;background:0 0;border:none;outline:none;width:10em;margin:0;padding:0}.image-tab{flex-direction:column;flex:1;gap:8px;min-height:0;padding:8px 12px;display:flex}.image-meta{color:var(--muted);-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:baseline;gap:4px 16px;display:flex}.image-meta .image-name{color:var(--fg);font-weight:600}.image-meta .image-loc{word-break:break-all;font-size:12px}.image-stage{cursor:grab;scrollbar-width:none;flex:1;justify-content:safe center;align-items:safe center;min-height:0;display:flex;position:relative;overflow:auto}.image-stage::-webkit-scrollbar{display:none}.image-stage .image-landscape{flex-shrink:0;width:100%;height:auto}.image-stage .image-portrait{flex-shrink:0;width:auto;height:100%}.image-zoom-badge{color:var(--fg);pointer-events:none;background:#00000073;border-radius:4px;padding:2px 6px;font-size:12px;position:absolute;top:8px;right:8px}.page-tab{flex-direction:column;flex:1;min-height:0;display:flex}.page-header{color:var(--muted);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:6px 12px;font-size:12px;display:flex}.page-meta{flex-wrap:wrap;flex:1;align-items:baseline;gap:4px 16px;min-width:0;display:flex}.tab-meta{color:var(--muted);border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:4px 16px;padding:6px 12px;font-size:12px;display:flex}.tab-cwd{word-break:break-all}.tab-flags{align-items:center;gap:4px;display:flex}.tab-flag{cursor:default;font-size:13px}.tab-open-files{color:var(--muted);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:0 4px;font-size:13px;line-height:1}.tab-open-files:hover{color:var(--fg)}.page-domain{color:var(--fg);font-weight:600}.page-url{word-break:break-all;font-size:12px}.page-actions{flex-shrink:0;align-items:center;gap:2px;display:flex}.page-close{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:13px;line-height:1}.page-close:hover{color:var(--fg)}.page-frame{background:#fff;border:0;flex:1;width:100%;height:100%}.markdown-stage{background:var(--bg);min-height:0;color:var(--fg);flex:1;padding:16px 20px;overflow:auto}.markdown-stage ::selection{background:var(--editor-selection)}.markdown-stage h1,.markdown-stage h2,.markdown-stage h3,.markdown-stage h4,.markdown-stage h5,.markdown-stage h6{color:var(--fg);margin:.6em 0 .3em;font-weight:600;line-height:1.3}.markdown-stage h1{font-size:1.6em}.markdown-stage h2{font-size:1.35em}.markdown-stage h3{font-size:1.15em}.markdown-stage p{margin:.5em 0}.markdown-stage a{color:var(--accent)}.markdown-stage ul,.markdown-stage ol{margin:.4em 0;padding-left:1.5em}.markdown-stage li{margin:.15em 0}.markdown-stage code{font-family:var(--mono);background:var(--bg-soft);color:var(--fg);border-radius:4px;padding:.1em .35em;font-size:.92em}.markdown-stage pre{background:var(--bg-soft);border-radius:6px;margin:.5em 0;padding:8px 12px;overflow-x:auto}.markdown-stage pre code{background:0 0;padding:0;font-size:.9em}.markdown-stage blockquote{color:var(--muted);border-left:3px solid var(--border);margin:.5em 0;padding:.1em .9em}.markdown-stage hr{border:none;border-top:1px solid var(--border);margin:.8em 0}.markdown-stage table{border-collapse:collapse;margin:.5em 0}.markdown-stage th,.markdown-stage td{border:1px solid var(--border);text-align:left;padding:4px 10px}.markdown-stage th{background:var(--bg-soft);font-weight:600}.tab .dot.busy{animation:1.2s step-end infinite dot-blink}@keyframes dot-blink{0%{opacity:1}50%{opacity:0}}.tab .tab-badge{font-size:.8em;line-height:1}.tab-body{flex-direction:column;flex:1;min-height:0;display:flex}.main{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.transcript{flex:1;min-height:0;padding:8px 12px;overflow-y:auto}.status-panels{z-index:20;pointer-events:none;flex-direction:column;gap:6px;max-width:60%;display:flex;position:absolute;top:6px;right:10px}.panel{background:var(--bg-soft);border:1px solid var(--border);border-radius:6px;min-width:120px;padding:3px 8px 5px;font-size:12px}.panel-title{color:var(--muted);margin-bottom:2px}.panel-row{white-space:nowrap;color:var(--fg)}.panel-row.conn-shell{color:var(--muted)}.panel-row.conn-acp,.panel-row.conn-browser,.panel-row.conn-terminal{color:var(--accent)}.panel-row.conn-sqlite{color:var(--fg)}.panel-row.conn-ssh,.panel-row.recurring{color:var(--accent)}.line{white-space:pre-wrap;overflow-wrap:break-word;line-height:1.4}.line.prompt{color:var(--accent)}.line.prompt .cwd{color:var(--faint);margin-right:6px}.line.prompt .prompt-text{cursor:pointer}.line.output{color:var(--fg)}.line.output .file-link{color:var(--accent);cursor:pointer;text-decoration:underline}.line.output .file-link:hover{color:var(--fg)}.line.output.running{color:var(--running)}.ansi-fg-0{color:var(--faint)}.ansi-fg-1{color:#cd3131}.ansi-fg-2{color:#0dbc79}.ansi-fg-3{color:#e5e510}.ansi-fg-4{color:#2472c8}.ansi-fg-5{color:#bc3fbc}.ansi-fg-6{color:#11a8cd}.ansi-fg-7{color:#e5e5e5}.ansi-fg-8{color:var(--muted)}.ansi-fg-9{color:#f14c4c}.ansi-fg-10{color:#23d18b}.ansi-fg-11{color:#f5f543}.ansi-fg-12{color:#3b8eea}.ansi-fg-13{color:#d670d6}.ansi-fg-14{color:#29b8db}.ansi-fg-15{color:#e5e5e5}.ansi-bg-0{background:#000}.ansi-bg-1{background:#cd3131}.ansi-bg-2{background:#0dbc79}.ansi-bg-3{background:#e5e510}.ansi-bg-4{background:#2472c8}.ansi-bg-5{background:#bc3fbc}.ansi-bg-6{background:#11a8cd}.ansi-bg-7{background:#e5e5e5}.ansi-bg-8{background:#666}.ansi-bg-9{background:#f14c4c}.ansi-bg-10{background:#23d18b}.ansi-bg-11{background:#f5f543}.ansi-bg-12{background:#3b8eea}.ansi-bg-13{background:#d670d6}.ansi-bg-14{background:#29b8db}.ansi-bg-15{background:#e5e5e5}.ansi-bold{font-weight:700}.ansi-underline{text-decoration:underline}.line.empty-state{color:var(--faint)}.line.spacer{height:8px}.line.collapsed{color:var(--accent);cursor:pointer}.line.collapsed:hover{text-decoration:underline}.line.prompt.acp{color:var(--muted);cursor:pointer}.line.output.acp{color:var(--faint);cursor:pointer;padding-left:1.5em}.line.message{font-weight:600}.line.markdown{white-space:normal;color:var(--fg)}.line.markdown>:first-child{margin-top:0}.line.markdown>:last-child{margin-bottom:0}.line.markdown p{margin:.4em 0}.line.markdown h1,.line.markdown h2,.line.markdown h3,.line.markdown h4,.line.markdown h5,.line.markdown h6{margin:.6em 0 .3em;font-weight:600;line-height:1.3}.line.markdown h1{font-size:1.4em}.line.markdown h2{font-size:1.25em}.line.markdown h3{font-size:1.1em}.line.markdown a{color:var(--accent)}.line.markdown ul,.line.markdown ol{margin:.4em 0;padding-left:1.5em}.line.markdown li{margin:.15em 0}.line.markdown code{font-family:var(--mono);background:var(--bg-soft);border-radius:4px;padding:.1em .35em;font-size:.92em}.line.markdown pre{background:var(--bg-soft);border-radius:6px;margin:.5em 0;padding:8px 12px;overflow-x:auto}.line.markdown pre code{background:0 0;padding:0;font-size:.9em}.line.markdown blockquote{color:var(--muted);border-left:3px solid var(--border);margin:.5em 0;padding:.1em .9em}.line.markdown hr{border:none;border-top:1px solid var(--border);margin:.8em 0}.line.markdown table{border-collapse:collapse;margin:.5em 0}.line.markdown th,.line.markdown td{border:1px solid var(--border);text-align:left;padding:4px 10px}.line.markdown th{background:var(--bg-soft);font-weight:600}.picker{z-index:40;background:var(--bg-soft);border-top:1px solid var(--border);max-height:70%;position:absolute;bottom:0;left:0;right:0;overflow-y:auto;box-shadow:0 -6px 24px #0006}.picker-title{color:var(--muted);border-bottom:1px solid var(--border);padding:4px 10px}.picker-row{cursor:pointer;white-space:nowrap;align-items:center;padding:3px 10px;display:flex}.picker-row.picker-empty{color:var(--muted);cursor:default}.picker-row.selected{background:var(--accent);color:var(--bg)}.picker-row:hover{background:var(--border)}.picker-row.selected:hover{background:var(--accent);color:var(--bg)}.picker-chevron{width:1em;color:var(--muted);flex:none;font-size:10px}.tab-nav-picker .picker-row .dot{margin-right:4px;font-size:10px}.tab-nav-picker .picker-row mark{background:var(--accent);color:var(--bg);border-radius:2px}.tab-nav-picker .picker-row.selected mark{background:var(--bg);color:var(--accent)}.modal-backdrop{z-index:60;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--bg-soft);border:1px solid var(--border);border-radius:8px;min-width:280px;padding:16px 20px;box-shadow:0 6px 24px #0006}.modal-title{margin-bottom:14px}.modal-actions{justify-content:flex-end;gap:10px;display:flex}.modal-button{background:var(--bg);color:var(--fg);border:1px solid var(--border);cursor:pointer;font-family:var(--mono);border-radius:4px;padding:4px 12px;font-size:13px}.modal-button:hover{background:var(--border)}.modal-button.selected{background:var(--accent);color:var(--bg);border-color:var(--accent)}.command-area{flex-direction:column;display:flex}.completions{color:var(--muted);white-space:pre-wrap;overflow-wrap:break-word;border-top:1px solid var(--border);padding:2px 12px}.command{border-top:1px solid var(--border);align-items:flex-start;gap:8px;padding:8px 12px;display:flex}.command .dot{font-size:10px;line-height:21px}.command .dot.busy{animation:1.2s step-end infinite dot-blink}.command .dot+span{line-height:1.6}.command textarea{color:var(--fg);resize:none;background:0 0;border:none;outline:none;flex:1;max-height:9em;padding:0;position:relative;overflow-y:auto}.command textarea,.command .ghost{font-family:var(--mono);font-size:13.1625px;line-height:1.6}.command .input-wrap{flex:1;display:flex;position:relative}.command .ghost{color:var(--muted);white-space:pre-wrap;overflow-wrap:break-word;pointer-events:none;align-items:flex-start;display:flex;position:absolute;inset:0;overflow:hidden}.command .ghost .ghost-typed{visibility:hidden}.search-bar .command{align-items:center;gap:8px}.search-bar .command input{color:var(--fg);font-family:var(--mono);background:0 0;border:none;outline:none;flex:1;font-size:13.1625px}.search-result{color:var(--muted);white-space:pre-wrap;overflow-wrap:break-word;border-top:1px solid var(--border);padding:2px 12px}.search-hit{background:var(--search-hit-bg);color:var(--search-hit-fg);border-radius:2px}.harness-tab{flex-direction:column;flex:1;min-height:0;display:flex}.harness-body{background:var(--terminal-bg);flex:1;min-height:0}.harness-exited{background:var(--bg-soft);color:var(--faint);border-bottom:1px solid var(--border);padding:4px 10px;font-size:12px}.terminal-card{border:1px solid var(--border);border-radius:6px;margin:6px 0;overflow:hidden}.terminal-card.maximized{z-index:50;background:var(--bg);flex-direction:column;margin:0;display:flex;position:fixed;inset:8px}.terminal-card .head{background:var(--bg-soft);align-items:center;gap:8px;padding:4px 8px;font-size:12px;display:flex}.terminal-card .head .name{color:var(--accent)}.terminal-card .head .status{color:var(--muted)}.terminal-card .head .status.exited{color:var(--faint)}.terminal-card .head .spacer{flex:1}.terminal-card .head button{border:1px solid var(--border);color:var(--muted);cursor:pointer;background:0 0;border-radius:4px;padding:1px 6px;font-size:11px}.terminal-card .body{height:360px}.terminal-card.maximized .body{flex:1;height:auto}.reporting-section{flex-direction:column;min-height:0;display:flex}.reporting-resize{cursor:row-resize;border-top:1px solid var(--border);flex-shrink:0;height:4px}.sidebar{flex-direction:row;min-width:0;display:flex}.sidebar-body{flex-direction:column;flex:1;min-width:0;display:flex}.sidebar-resize{cursor:col-resize;flex-shrink:0;width:4px}.sidebar-left .sidebar-resize{border-right:1px solid var(--border)}.sidebar-right .sidebar-resize{border-left:1px solid var(--border)}.sidebar-tabstrip{background:var(--bg-soft);border-bottom:1px solid var(--border);display:flex}.sidebar-tab{cursor:pointer;color:var(--muted);border-bottom:2px solid #0000;flex:1;align-items:center;gap:6px;padding:4px 10px 6px;font-size:13px;display:flex}.sidebar-tab.active{color:var(--fg);border-bottom-color:var(--accent)}.sidebar-tab-label{flex:1}.sidebar-tab-close{cursor:pointer;color:var(--muted);background:0 0;border:none;margin-left:auto;padding:0 2px;font-size:14px;line-height:1}.sidebar-tab-close:hover{color:var(--fg)}.reporting-strip .tab{padding:2px 10px 4px;font-size:12px}.reporting-body{flex-direction:column;flex:1;min-height:0;display:flex}.monitor-header{color:var(--muted);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:6px 12px;font-size:12px;display:flex}.monitor-meta{flex-wrap:wrap;flex:1;align-items:baseline;gap:4px 16px;min-width:0;display:flex}.monitor-persona{color:var(--fg);font-weight:600}.monitor-targets,.monitor-context{color:var(--muted);font-size:12px}.monitor-actions{flex-shrink:0;align-items:center;gap:2px;display:flex}.monitor-snapshot,.monitor-reset{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:13px;line-height:1}.monitor-snapshot:hover,.monitor-reset:hover{color:var(--fg)}.monitor-view{flex:1;min-height:0;padding:8px 12px;overflow-y:auto}.monitor-view.monitor-empty{color:var(--faint);text-align:center;padding-top:24px}.monitor-suggestion{color:var(--fg);align-items:flex-start;gap:8px;margin-bottom:10px;font-size:13px;display:flex}.monitor-suggestion .text{flex:1}.monitor-suggestion .rate{flex-direction:column;flex-shrink:0;align-items:center;gap:2px;display:flex}.monitor-suggestion .rate button{cursor:pointer;opacity:.35;background:0 0;border:none;padding:0 2px;font-size:12px}.monitor-suggestion .rate button:hover{opacity:1}.monitor-suggestion .cmd{text-align:left;color:var(--accent);font-family:var(--mono);cursor:pointer;background:0 0;border:none;margin-top:2px;padding:0;font-size:12px;display:block}.monitor-suggestion .cmd:hover{text-decoration:underline}.editor-body{cursor:text;min-height:0;font-family:var(--mono);flex:1;line-height:1.45;position:relative;overflow-y:auto}.editor-row{min-height:1.45em;display:flex}.editor-row-current{background:var(--editor-current-line)}.editor-gutter{text-align:right;color:var(--faint);-webkit-user-select:none;user-select:none;cursor:default;flex:none;padding-right:14px}.editor-row-current .editor-gutter{color:var(--muted)}.editor-content{white-space:pre-wrap;word-break:break-all;flex:1;min-width:0}.editor-sel{background:var(--editor-selection)}.editor-caret{width:0;position:relative}.editor-caret:after{content:"";background:var(--accent);width:2px;height:100%;animation:1s step-end infinite editor-caret-blink;position:absolute;top:0;left:0}@keyframes editor-caret-blink{50%{opacity:0}}.editor-textarea{opacity:0;resize:none;border:none;outline:none;width:1px;height:1px;margin:0;padding:0;position:absolute;top:0;left:0}.editor-saved{color:var(--success)}.editor-error{color:var(--error)}.files-tab{outline:none;flex-direction:column;flex:1;min-height:0;display:flex}.files-header{color:var(--muted);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:6px 12px;font-size:12px;display:flex}.files-meta{flex-wrap:wrap;flex:1;align-items:baseline;gap:4px 16px;min-width:0;display:flex}.files-loc{word-break:break-all;color:var(--muted);font-size:12px}.files-branch{color:var(--muted);font-size:12px}.files-actions{flex-shrink:0;align-items:center;gap:2px;display:flex}.files-collapse-all,.files-dock-cycle{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:13px;line-height:1}.files-collapse-all:hover,.files-dock-cycle:hover{color:var(--fg)}.files-rows{flex:1;min-height:0;padding:4px 0 22px;overflow-y:auto}.files-row{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;border-left:2px solid #0000;align-items:center;gap:4px;padding:2px 12px;display:flex;overflow:hidden}.files-row:hover{background:var(--bg-soft)}.files-row.selected{background:var(--bg-soft);border-left-color:var(--accent)}.files-row.drop-target{background:var(--bg-soft);border-left-color:var(--accent);outline:1px dashed var(--accent);outline-offset:-1px}.files-drag-ghost{pointer-events:none;z-index:100;background:var(--bg-soft);border:1px solid var(--border);color:var(--fg);white-space:nowrap;border-radius:3px;padding:2px 8px;font-size:12px;position:fixed;transform:translate(12px,-8px)}.files-chevron{width:1em;color:var(--muted);flex:none;font-size:10px}.files-name{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.files-name--changed{color:var(--running)}.sidebar .files-rows{scrollbar-width:none}.sidebar .files-rows::-webkit-scrollbar{display:none}.sidebar .transcript{scrollbar-width:none}.sidebar .transcript::-webkit-scrollbar{display:none}.notifications-tab{flex-direction:column;flex:1;min-height:0;display:flex}.notifications-header{color:var(--muted);border-bottom:1px solid var(--border);justify-content:flex-end;align-items:center;padding:6px 12px;font-size:12px;display:flex}.notifications-actions{flex-shrink:0;align-items:center;gap:2px;display:flex}.notifications-dock-cycle{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:13px;line-height:1}.notifications-dock-cycle:hover{color:var(--fg)}
|