sisyphi 1.1.16 → 1.1.18
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 +209 -7
- package/dist/{chunk-6TIO23U3.js → chunk-22ZGZTGY.js} +3 -3
- package/dist/{chunk-6TIO23U3.js.map → chunk-22ZGZTGY.js.map} +1 -1
- package/dist/{chunk-UIVQXCWB.js → chunk-6PJVJEYQ.js} +2 -2
- package/dist/chunk-C2XKXERJ.js +1052 -0
- package/dist/chunk-C2XKXERJ.js.map +1 -0
- package/dist/{chunk-GSXF3TCZ.js → chunk-TMBAVPHH.js} +19 -3
- package/dist/chunk-TMBAVPHH.js.map +1 -0
- package/dist/chunk-V36NXMHP.js +299 -0
- package/dist/chunk-V36NXMHP.js.map +1 -0
- package/dist/cli.js +166 -8
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +1464 -129
- package/dist/daemon.js.map +1 -1
- package/dist/{paths-3EL2SCHI.js → paths-XRDEEJ5R.js} +10 -2
- package/dist/tui.js +1314 -984
- package/dist/tui.js.map +1 -1
- package/native/SisyphusNotify/AppIcon.icns +0 -0
- package/native/SisyphusNotify/Info.plist +26 -0
- package/native/SisyphusNotify/main.swift +126 -0
- package/native/SisyphusNotify/sisyphus-icon.jpg +0 -0
- package/native/build-notify.sh +58 -0
- package/package.json +3 -2
- package/dist/chunk-GSXF3TCZ.js.map +0 -1
- package/dist/chunk-HQZOAX6D.js +0 -240
- package/dist/chunk-HQZOAX6D.js.map +0 -1
- package/dist/chunk-IF55HPWX.js +0 -44
- package/dist/chunk-IF55HPWX.js.map +0 -1
- /package/dist/{chunk-UIVQXCWB.js.map → chunk-6PJVJEYQ.js.map} +0 -0
- /package/dist/{paths-3EL2SCHI.js.map → paths-XRDEEJ5R.js.map} +0 -0
package/README.md
CHANGED
|
@@ -48,8 +48,9 @@ The daemon handles the lifecycle: spawning panes, detecting when agents finish,
|
|
|
48
48
|
## Requirements
|
|
49
49
|
|
|
50
50
|
- **Node.js** >= 22
|
|
51
|
-
- **tmux** (you must be inside a tmux session)
|
|
51
|
+
- **tmux** >= 3.2 (you must be inside a tmux session)
|
|
52
52
|
- **Claude Code** CLI (`claude`) installed and authenticated
|
|
53
|
+
- **Neovim** (optional — enables embedded editor in the dashboard)
|
|
53
54
|
|
|
54
55
|
## Install
|
|
55
56
|
|
|
@@ -57,9 +58,27 @@ The daemon handles the lifecycle: spawning panes, detecting when agents finish,
|
|
|
57
58
|
npm install -g sisyphi
|
|
58
59
|
```
|
|
59
60
|
|
|
60
|
-
|
|
61
|
+
Then run one-time setup:
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
```bash
|
|
64
|
+
sisyphus setup
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
This installs the background daemon (macOS launchd), tmux keybindings (`M-s` to cycle sessions, `M-S` for dashboard), and checks your environment. The daemon auto-updates when new versions are published.
|
|
68
|
+
|
|
69
|
+
Verify everything is working:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
sisyphus doctor
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Quick start
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
sisyphus start "your task description" # Start a session
|
|
79
|
+
sisyphus dashboard # Open the TUI (auto-opens on start)
|
|
80
|
+
sisyphus status # Check session state from the CLI
|
|
81
|
+
```
|
|
63
82
|
|
|
64
83
|
Sisyphus is a CLI that Claude Code calls for you. You tell Claude to use it, and Claude handles the rest — calling `sisyphus start`, writing the task description, and kicking off the orchestration loop.
|
|
65
84
|
|
|
@@ -98,13 +117,161 @@ For large tasks, use the `sisyphus` CLI to orchestrate parallel agents.
|
|
|
98
117
|
Run `sisyphus start "detailed task description"` inside tmux.
|
|
99
118
|
```
|
|
100
119
|
|
|
101
|
-
###
|
|
120
|
+
### Interactive tutorial
|
|
121
|
+
|
|
122
|
+
If you're new to tmux or sisyphus, run the guided walkthrough:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
sisyphus getting-started
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Six steps covering tmux basics, neovim essentials, sisyphus concepts, and a live demo session.
|
|
129
|
+
|
|
130
|
+
## Dashboard
|
|
131
|
+
|
|
132
|
+
The dashboard is a full-screen TUI for monitoring and controlling sessions in real time.
|
|
102
133
|
|
|
103
134
|
```bash
|
|
104
|
-
sisyphus
|
|
105
|
-
sisyphus kill <session-id> # Stop everything
|
|
135
|
+
sisyphus dashboard # or press M-S (Alt-Shift-S)
|
|
106
136
|
```
|
|
107
137
|
|
|
138
|
+
It auto-opens when you `sisyphus start` a session.
|
|
139
|
+
|
|
140
|
+
**Layout:**
|
|
141
|
+
|
|
142
|
+
- **Left panel** — Session tree with collapsible hierarchy: sessions → cycles → agents → reports. Status indicators show active/completed/paused state at a glance.
|
|
143
|
+
- **Right panel** — Context-sensitive detail view for the selected node: session roadmap, agent instructions, report content, or live pane output. Opens files in an embedded neovim instance when available.
|
|
144
|
+
- **Bottom bar** — Current mode, keybinding hints, and transient notifications.
|
|
145
|
+
|
|
146
|
+
**Key bindings:**
|
|
147
|
+
|
|
148
|
+
| Key | Action |
|
|
149
|
+
|-----|--------|
|
|
150
|
+
| `j/k` or `↑/↓` | Navigate tree / scroll detail |
|
|
151
|
+
| `h/l` or `←/→` | Collapse/expand nodes |
|
|
152
|
+
| `n` | New session (compose mode) |
|
|
153
|
+
| `R` | Resume a paused/completed session |
|
|
154
|
+
| `w` | Jump to session's tmux window |
|
|
155
|
+
| `g` | Edit goal |
|
|
156
|
+
| `p` | Open roadmap |
|
|
157
|
+
| `m` | Message orchestrator |
|
|
158
|
+
| `r` | Re-run agent |
|
|
159
|
+
| `x` | Restart agent |
|
|
160
|
+
| `Space` | Leader menu (copy, delete, spawn agent, shell, etc.) |
|
|
161
|
+
| `Tab` | Cycle panel focus |
|
|
162
|
+
| `/` | Search sessions |
|
|
163
|
+
| `?` | Help overlay |
|
|
164
|
+
|
|
165
|
+
Compose mode opens a temp file in the embedded neovim for multi-line input (new sessions, messages, resume instructions). Falls back to tmux popups if neovim isn't available.
|
|
166
|
+
|
|
167
|
+
## Agent types
|
|
168
|
+
|
|
169
|
+
Agents can be spawned with role templates that define their model, behavior, and capabilities. The orchestrator discovers available types automatically and uses them to match the right agent to each subtask.
|
|
170
|
+
|
|
171
|
+
### Built-in types
|
|
172
|
+
|
|
173
|
+
Sisyphus ships these agent types:
|
|
174
|
+
|
|
175
|
+
| Type | Description |
|
|
176
|
+
|------|-------------|
|
|
177
|
+
| `sisyphus:worker` | Generic agent (default) |
|
|
178
|
+
| `sisyphus:plan` | Plan lead — breaks work into phases |
|
|
179
|
+
| `sisyphus:design` | Technical design and architecture |
|
|
180
|
+
| `sisyphus:requirements` | EARS-based requirements analysis |
|
|
181
|
+
| `sisyphus:problem` | Problem exploration and assumption challenging |
|
|
182
|
+
| `sisyphus:review` | Code review |
|
|
183
|
+
| `sisyphus:review-plan` | Plan review with parallel sub-reviewers |
|
|
184
|
+
| `sisyphus:debug` | Systematic debugging investigation |
|
|
185
|
+
| `sisyphus:explore` | Lightweight code exploration |
|
|
186
|
+
| `sisyphus:operator` | QA/testing with browser automation |
|
|
187
|
+
| `sisyphus:test-spec` | Test specification writing |
|
|
188
|
+
|
|
189
|
+
### Custom agent types
|
|
190
|
+
|
|
191
|
+
Define your own by creating a markdown file with YAML frontmatter:
|
|
192
|
+
|
|
193
|
+
```markdown
|
|
194
|
+
---
|
|
195
|
+
name: security-reviewer
|
|
196
|
+
description: Reviews code for security vulnerabilities
|
|
197
|
+
model: opus
|
|
198
|
+
color: red
|
|
199
|
+
effort: high
|
|
200
|
+
skills: [capture]
|
|
201
|
+
permissionMode: bypassPermissions
|
|
202
|
+
interactive: false
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
You are a security-focused code reviewer. Analyze the code for OWASP top 10
|
|
206
|
+
vulnerabilities, injection risks, auth bypasses, and data exposure...
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Resolution order** (first match wins):
|
|
210
|
+
1. `.claude/agents/{name}.md` (project-local)
|
|
211
|
+
2. `~/.claude/agents/{name}.md` (user-global)
|
|
212
|
+
3. Bundled `sisyphus:{name}`
|
|
213
|
+
4. Installed Claude Code plugins
|
|
214
|
+
|
|
215
|
+
### Frontmatter options
|
|
216
|
+
|
|
217
|
+
| Field | Description |
|
|
218
|
+
|-------|-------------|
|
|
219
|
+
| `model` | LLM model (`opus`, `sonnet`, `gpt-4`, `codex-mini`, etc.) |
|
|
220
|
+
| `color` | Tmux pane border color |
|
|
221
|
+
| `effort` | `low` / `medium` / `high` / `max` |
|
|
222
|
+
| `interactive` | `true` = agent can pause for user input |
|
|
223
|
+
| `skills` | Claude Code skills to enable |
|
|
224
|
+
| `permissionMode` | Permission handling mode |
|
|
225
|
+
|
|
226
|
+
Models prefixed with `gpt-` or `codex-` automatically route to the OpenAI provider (Codex CLI).
|
|
227
|
+
|
|
228
|
+
## Tmux integration
|
|
229
|
+
|
|
230
|
+
### Status bar
|
|
231
|
+
|
|
232
|
+
The daemon renders a live status indicator into your tmux status bar showing all sessions scoped to the current working directory:
|
|
233
|
+
|
|
234
|
+
- **Yellow dot** — orchestrator processing
|
|
235
|
+
- **Yellow diamond** — agents running
|
|
236
|
+
- **Green dot** — session completed
|
|
237
|
+
- **Red dot** — waiting for input
|
|
238
|
+
- **Gray** — idle / between cycles
|
|
239
|
+
|
|
240
|
+
Session phases update every 5 seconds. The currently focused session is highlighted.
|
|
241
|
+
|
|
242
|
+
### Keybindings
|
|
243
|
+
|
|
244
|
+
Installed by `sisyphus setup` into `~/.sisyphus/tmux.conf`:
|
|
245
|
+
|
|
246
|
+
| Key | Action |
|
|
247
|
+
|-----|--------|
|
|
248
|
+
| `M-s` | Cycle through sisyphus sessions in current project |
|
|
249
|
+
| `M-S` | Jump to dashboard window |
|
|
250
|
+
| `prefix-x` | Smart kill — kills pane or session depending on context |
|
|
251
|
+
|
|
252
|
+
### Native notifications (macOS)
|
|
253
|
+
|
|
254
|
+
On macOS, sisyphus builds a native notification helper (`SisyphusNotify.app`) during install. Notifications fire on session completion, agent crashes, and other lifecycle events. Clicking a notification switches your terminal to the relevant session.
|
|
255
|
+
|
|
256
|
+
Falls back to `terminal-notifier` or `osascript` if the native app isn't available.
|
|
257
|
+
|
|
258
|
+
## Companion
|
|
259
|
+
|
|
260
|
+
The companion is a persistent character that tracks your work across sessions. It earns XP, levels up (30 levels from *Boulder Intern* to *The Absurd Hero*), unlocks achievements, and shifts mood based on your usage patterns — time of day, session length, crash frequency, efficiency.
|
|
261
|
+
|
|
262
|
+
It manifests as:
|
|
263
|
+
- A mood-colored face in the tmux status bar (updates in real time)
|
|
264
|
+
- Commentary on lifecycle events (session start, level-up, late-night coding) generated by Haiku
|
|
265
|
+
- An achievement gallery with 66 unlockable badges across milestone, session, time, and behavioral categories
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
sisyphus companion # View profile, stats, and achievements
|
|
269
|
+
sisyphus companion --badges # Full achievement gallery
|
|
270
|
+
sisyphus companion --name Bub # Rename your companion
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
In the dashboard, press `Space` → `c` to open the companion overlay.
|
|
274
|
+
|
|
108
275
|
## Configuration
|
|
109
276
|
|
|
110
277
|
Project (`.sisyphus/config.json`) overrides global (`~/.sisyphus/config.json`):
|
|
@@ -112,10 +279,45 @@ Project (`.sisyphus/config.json`) overrides global (`~/.sisyphus/config.json`):
|
|
|
112
279
|
```json
|
|
113
280
|
{
|
|
114
281
|
"model": "sonnet",
|
|
115
|
-
"
|
|
282
|
+
"orchestratorEffort": "high",
|
|
283
|
+
"agentEffort": "medium",
|
|
284
|
+
"pollIntervalMs": 5000,
|
|
285
|
+
"autoUpdate": true,
|
|
286
|
+
"notifications": {
|
|
287
|
+
"enabled": true,
|
|
288
|
+
"sound": "/System/Library/Sounds/Hero.aiff"
|
|
289
|
+
}
|
|
116
290
|
}
|
|
117
291
|
```
|
|
118
292
|
|
|
293
|
+
| Option | Default | Description |
|
|
294
|
+
|--------|---------|-------------|
|
|
295
|
+
| `model` | *(Claude Code default)* | LLM model for orchestrator and agents |
|
|
296
|
+
| `orchestratorEffort` | `high` | Effort level for orchestrator (`low`/`medium`/`high`/`max`) |
|
|
297
|
+
| `agentEffort` | `medium` | Effort level for agents |
|
|
298
|
+
| `orchestratorPrompt` | *(built-in)* | Path to custom orchestrator system prompt |
|
|
299
|
+
| `pollIntervalMs` | `5000` | Daemon poll interval in milliseconds |
|
|
300
|
+
| `autoUpdate` | — | Auto-update via npm on new releases |
|
|
301
|
+
| `notifications.enabled` | `true` | Desktop notifications on lifecycle events |
|
|
302
|
+
| `notifications.sound` | macOS Hero | Notification sound file path |
|
|
303
|
+
| `requiredPlugins` | `[devcore]` | Claude Code plugins to auto-install for agents |
|
|
304
|
+
|
|
305
|
+
## CLI reference
|
|
306
|
+
|
|
307
|
+
**Session lifecycle:**
|
|
308
|
+
`start`, `kill`, `resume`, `continue`, `rollback`, `complete`
|
|
309
|
+
|
|
310
|
+
**Agent & orchestrator interaction:**
|
|
311
|
+
`spawn`, `submit`, `report`, `yield`, `message`, `restart-agent`, `update-task`
|
|
312
|
+
|
|
313
|
+
**Monitoring:**
|
|
314
|
+
`status` (`--verbose`), `list` (`--all`), `dashboard`
|
|
315
|
+
|
|
316
|
+
**Setup & utilities:**
|
|
317
|
+
`setup`, `init`, `doctor`, `getting-started`, `companion`, `uninstall`
|
|
318
|
+
|
|
319
|
+
Run `sisyphus --help` or `sisyphus <command> --help` for full usage.
|
|
320
|
+
|
|
119
321
|
## License
|
|
120
322
|
|
|
121
323
|
MIT
|
|
@@ -46,8 +46,8 @@ function execEnv() {
|
|
|
46
46
|
// src/shared/exec.ts
|
|
47
47
|
import { execSync } from "child_process";
|
|
48
48
|
var EXEC_ENV = execEnv();
|
|
49
|
-
function exec(cmd, cwd) {
|
|
50
|
-
return execSync(cmd, { encoding: "utf-8", env: EXEC_ENV, cwd }).trim();
|
|
49
|
+
function exec(cmd, cwd, timeoutMs = 3e4) {
|
|
50
|
+
return execSync(cmd, { encoding: "utf-8", env: EXEC_ENV, cwd, timeout: timeoutMs }).trim();
|
|
51
51
|
}
|
|
52
52
|
function execSafe(cmd, cwd) {
|
|
53
53
|
try {
|
|
@@ -64,4 +64,4 @@ export {
|
|
|
64
64
|
exec,
|
|
65
65
|
execSafe
|
|
66
66
|
};
|
|
67
|
-
//# sourceMappingURL=chunk-
|
|
67
|
+
//# sourceMappingURL=chunk-22ZGZTGY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/env.ts","../src/shared/exec.ts"],"sourcesContent":["import { resolve } from 'node:path';\n\n/**\n * Build a PATH string that includes common binary directories\n * across package managers and platforms.\n *\n * Prepends known directories that exist on the system to the current PATH.\n * This ensures tmux commands can find binaries installed by Homebrew,\n * MacPorts, nix, and other package managers.\n */\nexport function augmentedPath(): string {\n const rawPath = process.env['PATH'];\n const basePath = rawPath !== undefined && rawPath.length > 0 ? rawPath : '/usr/bin:/bin';\n\n // Common binary directories across platforms/package managers.\n // Only prepend ones that aren't already in PATH.\n const home = process.env['HOME'];\n const candidates = [\n ...(home ? [`${home}/.local/bin`] : []), // Claude CLI, pipx, user-local installs\n resolve(process.execPath, '..'), // Node.js bin dir (ensures node/npm available)\n '/opt/homebrew/bin', // Homebrew (Apple Silicon macOS)\n '/opt/homebrew/sbin', // Homebrew sbin\n '/usr/local/bin', // Homebrew (Intel macOS), manual installs\n '/usr/local/sbin', // Manual installs\n '/opt/local/bin', // MacPorts\n '/opt/local/sbin', // MacPorts\n '/home/linuxbrew/.linuxbrew/bin', // Linuxbrew\n ];\n\n // Check for nix profile paths\n const nixProfile = process.env['NIX_PROFILES'];\n if (nixProfile) {\n for (const p of nixProfile.split(' ').reverse()) {\n candidates.push(`${p}/bin`);\n }\n }\n\n const existing = new Set(basePath.split(':'));\n const prepend = candidates.filter(dir => !existing.has(dir));\n\n return prepend.length > 0 ? `${prepend.join(':')}:${basePath}` : basePath;\n}\n\n/**\n * Environment variables for child processes that need access to\n * user-installed binaries (tmux, git, claude, etc.).\n */\nexport function execEnv(): Record<string, string | undefined> {\n return {\n ...process.env,\n PATH: augmentedPath(),\n };\n}\n","import { execSync } from 'node:child_process';\nimport { execEnv } from './env.js';\n\nexport const EXEC_ENV = execEnv();\n\nexport function exec(cmd: string, cwd?: string): string {\n return execSync(cmd, { encoding: 'utf-8', env: EXEC_ENV, cwd }).trim();\n}\n\nexport function execSafe(cmd: string, cwd?: string): string | null {\n try {\n return execSync(cmd, { encoding: 'utf-8', env: EXEC_ENV, cwd, stdio: ['pipe', 'pipe', 'pipe'] }).trim();\n } catch { return null; }\n}\n"],"mappings":";;;AAAA,SAAS,eAAe;AAUjB,SAAS,gBAAwB;AACtC,QAAM,UAAU,QAAQ,IAAI,MAAM;AAClC,QAAM,WAAW,YAAY,UAAa,QAAQ,SAAS,IAAI,UAAU;AAIzE,QAAM,OAAO,QAAQ,IAAI,MAAM;AAC/B,QAAM,aAAa;AAAA,IACjB,GAAI,OAAO,CAAC,GAAG,IAAI,aAAa,IAAI,CAAC;AAAA;AAAA,IACrC,QAAQ,QAAQ,UAAU,IAAI;AAAA;AAAA,IAC9B;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EACF;AAGA,QAAM,aAAa,QAAQ,IAAI,cAAc;AAC7C,MAAI,YAAY;AACd,eAAW,KAAK,WAAW,MAAM,GAAG,EAAE,QAAQ,GAAG;AAC/C,iBAAW,KAAK,GAAG,CAAC,MAAM;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,IAAI,SAAS,MAAM,GAAG,CAAC;AAC5C,QAAM,UAAU,WAAW,OAAO,SAAO,CAAC,SAAS,IAAI,GAAG,CAAC;AAE3D,SAAO,QAAQ,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,CAAC,IAAI,QAAQ,KAAK;AACnE;AAMO,SAAS,UAA8C;AAC5D,SAAO;AAAA,IACL,GAAG,QAAQ;AAAA,IACX,MAAM,cAAc;AAAA,EACtB;AACF;;;ACpDA,SAAS,gBAAgB;AAGlB,IAAM,WAAW,QAAQ;AAEzB,SAAS,KAAK,KAAa,
|
|
1
|
+
{"version":3,"sources":["../src/shared/env.ts","../src/shared/exec.ts"],"sourcesContent":["import { resolve } from 'node:path';\n\n/**\n * Build a PATH string that includes common binary directories\n * across package managers and platforms.\n *\n * Prepends known directories that exist on the system to the current PATH.\n * This ensures tmux commands can find binaries installed by Homebrew,\n * MacPorts, nix, and other package managers.\n */\nexport function augmentedPath(): string {\n const rawPath = process.env['PATH'];\n const basePath = rawPath !== undefined && rawPath.length > 0 ? rawPath : '/usr/bin:/bin';\n\n // Common binary directories across platforms/package managers.\n // Only prepend ones that aren't already in PATH.\n const home = process.env['HOME'];\n const candidates = [\n ...(home ? [`${home}/.local/bin`] : []), // Claude CLI, pipx, user-local installs\n resolve(process.execPath, '..'), // Node.js bin dir (ensures node/npm available)\n '/opt/homebrew/bin', // Homebrew (Apple Silicon macOS)\n '/opt/homebrew/sbin', // Homebrew sbin\n '/usr/local/bin', // Homebrew (Intel macOS), manual installs\n '/usr/local/sbin', // Manual installs\n '/opt/local/bin', // MacPorts\n '/opt/local/sbin', // MacPorts\n '/home/linuxbrew/.linuxbrew/bin', // Linuxbrew\n ];\n\n // Check for nix profile paths\n const nixProfile = process.env['NIX_PROFILES'];\n if (nixProfile) {\n for (const p of nixProfile.split(' ').reverse()) {\n candidates.push(`${p}/bin`);\n }\n }\n\n const existing = new Set(basePath.split(':'));\n const prepend = candidates.filter(dir => !existing.has(dir));\n\n return prepend.length > 0 ? `${prepend.join(':')}:${basePath}` : basePath;\n}\n\n/**\n * Environment variables for child processes that need access to\n * user-installed binaries (tmux, git, claude, etc.).\n */\nexport function execEnv(): Record<string, string | undefined> {\n return {\n ...process.env,\n PATH: augmentedPath(),\n };\n}\n","import { execSync } from 'node:child_process';\nimport { execEnv } from './env.js';\n\nexport const EXEC_ENV = execEnv();\n\nexport function exec(cmd: string, cwd?: string, timeoutMs: number = 30_000): string {\n return execSync(cmd, { encoding: 'utf-8', env: EXEC_ENV, cwd, timeout: timeoutMs }).trim();\n}\n\nexport function execSafe(cmd: string, cwd?: string): string | null {\n try {\n return execSync(cmd, { encoding: 'utf-8', env: EXEC_ENV, cwd, stdio: ['pipe', 'pipe', 'pipe'] }).trim();\n } catch { return null; }\n}\n"],"mappings":";;;AAAA,SAAS,eAAe;AAUjB,SAAS,gBAAwB;AACtC,QAAM,UAAU,QAAQ,IAAI,MAAM;AAClC,QAAM,WAAW,YAAY,UAAa,QAAQ,SAAS,IAAI,UAAU;AAIzE,QAAM,OAAO,QAAQ,IAAI,MAAM;AAC/B,QAAM,aAAa;AAAA,IACjB,GAAI,OAAO,CAAC,GAAG,IAAI,aAAa,IAAI,CAAC;AAAA;AAAA,IACrC,QAAQ,QAAQ,UAAU,IAAI;AAAA;AAAA,IAC9B;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EACF;AAGA,QAAM,aAAa,QAAQ,IAAI,cAAc;AAC7C,MAAI,YAAY;AACd,eAAW,KAAK,WAAW,MAAM,GAAG,EAAE,QAAQ,GAAG;AAC/C,iBAAW,KAAK,GAAG,CAAC,MAAM;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,IAAI,SAAS,MAAM,GAAG,CAAC;AAC5C,QAAM,UAAU,WAAW,OAAO,SAAO,CAAC,SAAS,IAAI,GAAG,CAAC;AAE3D,SAAO,QAAQ,SAAS,IAAI,GAAG,QAAQ,KAAK,GAAG,CAAC,IAAI,QAAQ,KAAK;AACnE;AAMO,SAAS,UAA8C;AAC5D,SAAO;AAAA,IACL,GAAG,QAAQ;AAAA,IACX,MAAM,cAAc;AAAA,EACtB;AACF;;;ACpDA,SAAS,gBAAgB;AAGlB,IAAM,WAAW,QAAQ;AAEzB,SAAS,KAAK,KAAa,KAAc,YAAoB,KAAgB;AAClF,SAAO,SAAS,KAAK,EAAE,UAAU,SAAS,KAAK,UAAU,KAAK,SAAS,UAAU,CAAC,EAAE,KAAK;AAC3F;AAEO,SAAS,SAAS,KAAa,KAA6B;AACjE,MAAI;AACF,WAAO,SAAS,KAAK,EAAE,UAAU,SAAS,KAAK,UAAU,KAAK,OAAO,CAAC,QAAQ,QAAQ,MAAM,EAAE,CAAC,EAAE,KAAK;AAAA,EACxG,QAAQ;AAAE,WAAO;AAAA,EAAM;AACzB;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
loadConfig
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-V36NXMHP.js";
|
|
5
5
|
|
|
6
6
|
// src/daemon/plugins.ts
|
|
7
7
|
import { readFileSync } from "fs";
|
|
@@ -43,4 +43,4 @@ export {
|
|
|
43
43
|
resolveInstalledPlugin,
|
|
44
44
|
resolveRequiredPluginDirs
|
|
45
45
|
};
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
46
|
+
//# sourceMappingURL=chunk-6PJVJEYQ.js.map
|