syntaur 0.14.0 → 0.16.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/dashboard/dist/assets/{_basePickBy-qEDLAY_J.js → _basePickBy-B1S22H85.js} +1 -1
- package/dashboard/dist/assets/{_baseUniq-7tDs18Gn.js → _baseUniq-CJIRCCsh.js} +1 -1
- package/dashboard/dist/assets/{arc-Brdw0dYW.js → arc-CdlNYTcd.js} +1 -1
- package/dashboard/dist/assets/{architectureDiagram-2XIMDMQ5-BiEdLT9m.js → architectureDiagram-2XIMDMQ5-KVI0HWOy.js} +1 -1
- package/dashboard/dist/assets/{blockDiagram-WCTKOSBZ-HC-j_hPZ.js → blockDiagram-WCTKOSBZ-ClnG7gaq.js} +1 -1
- package/dashboard/dist/assets/{c4Diagram-IC4MRINW-DA_rWbl7.js → c4Diagram-IC4MRINW-BD9lkttL.js} +1 -1
- package/dashboard/dist/assets/channel-Cm_FzKJq.js +1 -0
- package/dashboard/dist/assets/{chunk-4BX2VUAB-CF3hguyj.js → chunk-4BX2VUAB-BM3DXZMG.js} +1 -1
- package/dashboard/dist/assets/{chunk-55IACEB6-BTeCeIc_.js → chunk-55IACEB6-DUIbFJ3r.js} +1 -1
- package/dashboard/dist/assets/{chunk-FMBD7UC4-8qVvxmks.js → chunk-FMBD7UC4-B_cxCRkA.js} +1 -1
- package/dashboard/dist/assets/{chunk-JSJVCQXG-DCf8n7EO.js → chunk-JSJVCQXG-2mLf1WoM.js} +1 -1
- package/dashboard/dist/assets/{chunk-KX2RTZJC-CcpjTmME.js → chunk-KX2RTZJC-BMz3ND2R.js} +1 -1
- package/dashboard/dist/assets/{chunk-NQ4KR5QH-BnFPKo4-.js → chunk-NQ4KR5QH-DiCxpw3L.js} +1 -1
- package/dashboard/dist/assets/{chunk-QZHKN3VN-IPMVLLv2.js → chunk-QZHKN3VN-BcaWPzd5.js} +1 -1
- package/dashboard/dist/assets/{chunk-WL4C6EOR-D1pQmHqX.js → chunk-WL4C6EOR-BbsfhS6J.js} +1 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-Bdan2Dp5.js +1 -0
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-Bdan2Dp5.js +1 -0
- package/dashboard/dist/assets/clone-9PoPEM_s.js +1 -0
- package/dashboard/dist/assets/{cose-bilkent-S5V4N54A-tvJjvBQr.js → cose-bilkent-S5V4N54A-iuQzyyrA.js} +1 -1
- package/dashboard/dist/assets/{dagre-KLK3FWXG-qp1vt6LY.js → dagre-KLK3FWXG-C0TB1zg5.js} +1 -1
- package/dashboard/dist/assets/{diagram-E7M64L7V-VF5eizNr.js → diagram-E7M64L7V-Ck8tvxP2.js} +1 -1
- package/dashboard/dist/assets/{diagram-IFDJBPK2-C3pCbJ1e.js → diagram-IFDJBPK2-rQKIi-sc.js} +1 -1
- package/dashboard/dist/assets/{diagram-P4PSJMXO-D-taXZwH.js → diagram-P4PSJMXO-DS1RGSgx.js} +1 -1
- package/dashboard/dist/assets/{erDiagram-INFDFZHY-QjY-NHVs.js → erDiagram-INFDFZHY-BqWCybWW.js} +1 -1
- package/dashboard/dist/assets/{flowDiagram-PKNHOUZH-FjO8P5Tq.js → flowDiagram-PKNHOUZH-BCoQtyQ5.js} +1 -1
- package/dashboard/dist/assets/{ganttDiagram-A5KZAMGK-Bsn7CyK3.js → ganttDiagram-A5KZAMGK-CD1BmicP.js} +1 -1
- package/dashboard/dist/assets/{gitGraphDiagram-K3NZZRJ6-BZ8DjhnF.js → gitGraphDiagram-K3NZZRJ6-tGDYOZuO.js} +1 -1
- package/dashboard/dist/assets/{graph-AdliIYqX.js → graph-BT0s-094.js} +1 -1
- package/dashboard/dist/assets/index-BdSkANCC.js +510 -0
- package/dashboard/dist/assets/index-D2Yoi6DJ.css +1 -0
- package/dashboard/dist/assets/{infoDiagram-LFFYTUFH-BfZjLA86.js → infoDiagram-LFFYTUFH-E4dVb8BD.js} +1 -1
- package/dashboard/dist/assets/{ishikawaDiagram-PHBUUO56-BSgSGMp5.js → ishikawaDiagram-PHBUUO56-CubuM_ev.js} +1 -1
- package/dashboard/dist/assets/{journeyDiagram-4ABVD52K-BlQ7qeMC.js → journeyDiagram-4ABVD52K-DfyJbgMF.js} +1 -1
- package/dashboard/dist/assets/{kanban-definition-K7BYSVSG-CifO0AUu.js → kanban-definition-K7BYSVSG-BXamajyZ.js} +1 -1
- package/dashboard/dist/assets/{layout-B9r-gpD9.js → layout-6b_SlWD_.js} +1 -1
- package/dashboard/dist/assets/{linear-CaaIRxVZ.js → linear-BE0O-66A.js} +1 -1
- package/dashboard/dist/assets/{mermaid.core-C8wCWYw-.js → mermaid.core-DM3qWr07.js} +4 -4
- package/dashboard/dist/assets/{mindmap-definition-YRQLILUH-BpX5T7iT.js → mindmap-definition-YRQLILUH-puOtERrG.js} +1 -1
- package/dashboard/dist/assets/{pieDiagram-SKSYHLDU-BNGYtWrc.js → pieDiagram-SKSYHLDU-cE6l8UBX.js} +1 -1
- package/dashboard/dist/assets/{quadrantDiagram-337W2JSQ-CR4GeM9D.js → quadrantDiagram-337W2JSQ-CgDAyZQP.js} +1 -1
- package/dashboard/dist/assets/{requirementDiagram-Z7DCOOCP-CXrPkMLl.js → requirementDiagram-Z7DCOOCP-CJrai_8U.js} +1 -1
- package/dashboard/dist/assets/{sankeyDiagram-WA2Y5GQK-CIzof7Dm.js → sankeyDiagram-WA2Y5GQK-Bf72l7UW.js} +1 -1
- package/dashboard/dist/assets/{sequenceDiagram-2WXFIKYE-BJZLt0O2.js → sequenceDiagram-2WXFIKYE-0D8RN7ds.js} +1 -1
- package/dashboard/dist/assets/{stateDiagram-RAJIS63D-x9gC6zy6.js → stateDiagram-RAJIS63D-B8LucUIt.js} +1 -1
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-D0dc7wxQ.js +1 -0
- package/dashboard/dist/assets/{timeline-definition-YZTLITO2-D_ZSQn1K.js → timeline-definition-YZTLITO2-DL3Hq8ii.js} +1 -1
- package/dashboard/dist/assets/{treemap-KZPCXAKY-LPpMEco4.js → treemap-KZPCXAKY-wF1X4_uI.js} +1 -1
- package/dashboard/dist/assets/{vennDiagram-LZ73GAT5-CRFZQpr7.js → vennDiagram-LZ73GAT5-DDAjoGTZ.js} +1 -1
- package/dashboard/dist/assets/{xychartDiagram-JWTSCODW-Bivutynw.js → xychartDiagram-JWTSCODW-T-YmzRW8.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/dashboard/server.js +7664 -5884
- package/dist/dashboard/server.js.map +1 -1
- package/dist/db/leases-db.js.map +1 -1
- package/dist/index.js +6438 -2094
- package/dist/index.js.map +1 -1
- package/dist/launch/index.d.ts +318 -0
- package/dist/launch/index.js +3122 -0
- package/dist/launch/index.js.map +1 -0
- package/package.json +15 -2
- package/platforms/claude-code/commands/track-session/track-session.md +2 -1
- package/platforms/claude-code/hooks/session-start.sh +14 -1
- package/platforms/claude-code/references/protocol-summary.md +1 -1
- package/platforms/claude-code/skills/capture-artifacts/SKILL.md +2 -1
- package/platforms/claude-code/skills/complete-assignment/SKILL.md +2 -0
- package/platforms/claude-code/skills/syntaur-protocol/references/protocol-summary.md +1 -1
- package/platforms/claude-code/skills/track-session/SKILL.md +2 -1
- package/platforms/codex/agents/syntaur-operator.md +2 -2
- package/platforms/codex/references/protocol-summary.md +1 -1
- package/platforms/codex/skills/capture-artifacts/SKILL.md +2 -1
- package/platforms/codex/skills/complete-assignment/SKILL.md +2 -0
- package/platforms/codex/skills/syntaur-protocol/references/protocol-summary.md +1 -1
- package/platforms/codex/skills/track-session/SKILL.md +2 -1
- package/scripts/install-macos-url-handler.mjs +540 -0
- package/skills/capture-artifacts/SKILL.md +2 -1
- package/skills/complete-assignment/SKILL.md +2 -0
- package/skills/syntaur-protocol/references/protocol-summary.md +1 -1
- package/skills/track-session/SKILL.md +2 -1
- package/dashboard/dist/assets/channel-D2-caOn6.js +0 -1
- package/dashboard/dist/assets/classDiagram-VBA2DB6C-HFOb_XEt.js +0 -1
- package/dashboard/dist/assets/classDiagram-v2-RAHNMMFH-HFOb_XEt.js +0 -1
- package/dashboard/dist/assets/clone-BrYOwgIq.js +0 -1
- package/dashboard/dist/assets/index-BoR_oyUZ.css +0 -1
- package/dashboard/dist/assets/index-RCBI4aX2.js +0 -525
- package/dashboard/dist/assets/stateDiagram-v2-FVOUBMTO-CN5Dcv7u.js +0 -1
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import { SpawnOptions, ChildProcess } from 'node:child_process';
|
|
2
|
+
|
|
3
|
+
type OpenUrlErrorCode = 'bad-scheme' | 'bad-host' | 'missing-id' | 'both-ids' | 'malformed' | 'duplicate-param' | 'bad-mode';
|
|
4
|
+
declare class OpenUrlError extends Error {
|
|
5
|
+
readonly code: OpenUrlErrorCode;
|
|
6
|
+
constructor(code: OpenUrlErrorCode, message: string);
|
|
7
|
+
}
|
|
8
|
+
type SessionMode = 'resume' | 'fork';
|
|
9
|
+
interface ParsedOpenUrl {
|
|
10
|
+
kind: 'assignment' | 'session';
|
|
11
|
+
id: string;
|
|
12
|
+
/**
|
|
13
|
+
* Only set when `kind === 'session'`. Defaults to `'resume'` when the URL
|
|
14
|
+
* has no `mode` query param. Distinguishes "continue this session under the
|
|
15
|
+
* same id" (resume) from "branch a new session id at this point in
|
|
16
|
+
* history" (fork) so the dashboard can disable Resume while the original
|
|
17
|
+
* process may still be writing the transcript.
|
|
18
|
+
*/
|
|
19
|
+
mode?: SessionMode;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse a `syntaur://open?assignment=<id>` or `syntaur://open?session=<id>` URL.
|
|
23
|
+
*
|
|
24
|
+
* Validation:
|
|
25
|
+
* - scheme must be `syntaur:`
|
|
26
|
+
* - host must be `open`
|
|
27
|
+
* - exactly one of `assignment` or `session` query params must be present
|
|
28
|
+
* - neither param may be duplicated
|
|
29
|
+
* - when `session` is present, optional `mode=resume|fork` (default `resume`)
|
|
30
|
+
*
|
|
31
|
+
* Throws OpenUrlError with a structured code on any failure.
|
|
32
|
+
*/
|
|
33
|
+
declare function parseOpenUrl(input: string): ParsedOpenUrl;
|
|
34
|
+
|
|
35
|
+
type BindableActionKind = 'new-workspace' | 'new-project' | 'new-todo' | 'new-assignment';
|
|
36
|
+
|
|
37
|
+
type PromptArgPosition = 'first' | 'last' | 'none';
|
|
38
|
+
/**
|
|
39
|
+
* Per-agent argv recipe for continuing a recorded session in a specific mode.
|
|
40
|
+
*
|
|
41
|
+
* `args` is a literal argv list with the substring `{id}` substituted for the
|
|
42
|
+
* agent's session id at launch time. `command` overrides the agent's main
|
|
43
|
+
* `command` field — used by subcommand-style agents (e.g. `codex resume <id>`
|
|
44
|
+
* is documented as command=codex, args=['resume','{id}']; the override exists
|
|
45
|
+
* for future agents whose subcommand binary differs).
|
|
46
|
+
*/
|
|
47
|
+
interface SessionInvocation {
|
|
48
|
+
command?: string;
|
|
49
|
+
args: string[];
|
|
50
|
+
}
|
|
51
|
+
interface AgentConfig {
|
|
52
|
+
id: string;
|
|
53
|
+
label: string;
|
|
54
|
+
command: string;
|
|
55
|
+
args?: string[];
|
|
56
|
+
promptArgPosition?: PromptArgPosition;
|
|
57
|
+
default?: boolean;
|
|
58
|
+
resolveFromShellAliases?: boolean;
|
|
59
|
+
resume?: SessionInvocation;
|
|
60
|
+
fork?: SessionInvocation;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
interface StatusDefinition {
|
|
64
|
+
id: string;
|
|
65
|
+
label: string;
|
|
66
|
+
description?: string;
|
|
67
|
+
color?: string;
|
|
68
|
+
icon?: string;
|
|
69
|
+
terminal?: boolean;
|
|
70
|
+
}
|
|
71
|
+
interface StatusTransition {
|
|
72
|
+
from: string;
|
|
73
|
+
command: string;
|
|
74
|
+
to: string;
|
|
75
|
+
label?: string;
|
|
76
|
+
description?: string;
|
|
77
|
+
requiresReason?: boolean;
|
|
78
|
+
}
|
|
79
|
+
interface StatusConfig {
|
|
80
|
+
statuses: StatusDefinition[];
|
|
81
|
+
order: string[];
|
|
82
|
+
transitions: StatusTransition[];
|
|
83
|
+
}
|
|
84
|
+
interface TypeDefinition {
|
|
85
|
+
id: string;
|
|
86
|
+
label?: string;
|
|
87
|
+
description?: string;
|
|
88
|
+
color?: string;
|
|
89
|
+
icon?: string;
|
|
90
|
+
}
|
|
91
|
+
interface TypesConfig {
|
|
92
|
+
definitions: TypeDefinition[];
|
|
93
|
+
default: string;
|
|
94
|
+
}
|
|
95
|
+
interface IntegrationConfig {
|
|
96
|
+
claudePluginDir: string | null;
|
|
97
|
+
codexPluginDir: string | null;
|
|
98
|
+
codexMarketplacePath: string | null;
|
|
99
|
+
}
|
|
100
|
+
interface OnboardingConfig {
|
|
101
|
+
completed: boolean;
|
|
102
|
+
}
|
|
103
|
+
interface BackupConfig {
|
|
104
|
+
repo: string | null;
|
|
105
|
+
categories: string;
|
|
106
|
+
lastBackup: string | null;
|
|
107
|
+
lastRestore: string | null;
|
|
108
|
+
}
|
|
109
|
+
type AutoCreateWorktree = 'skip' | 'ask' | 'always';
|
|
110
|
+
interface PlaybooksConfig {
|
|
111
|
+
disabled: string[];
|
|
112
|
+
}
|
|
113
|
+
interface ThemeConfig {
|
|
114
|
+
preset: string;
|
|
115
|
+
}
|
|
116
|
+
interface HotkeyBindingsConfig {
|
|
117
|
+
bindings: Partial<Record<BindableActionKind, string>>;
|
|
118
|
+
}
|
|
119
|
+
type TerminalChoice = 'terminal-app' | 'iterm' | 'ghostty' | 'alacritty' | 'warp' | 'kitty';
|
|
120
|
+
interface SyntaurConfig {
|
|
121
|
+
version: string;
|
|
122
|
+
defaultProjectDir: string;
|
|
123
|
+
onboarding: OnboardingConfig;
|
|
124
|
+
agentDefaults: {
|
|
125
|
+
trustLevel: 'low' | 'medium' | 'high';
|
|
126
|
+
autoApprove: boolean;
|
|
127
|
+
autoCreateWorktree: AutoCreateWorktree;
|
|
128
|
+
};
|
|
129
|
+
integrations: IntegrationConfig;
|
|
130
|
+
backup: BackupConfig | null;
|
|
131
|
+
statuses: StatusConfig | null;
|
|
132
|
+
types: TypesConfig | null;
|
|
133
|
+
agents: AgentConfig[] | null;
|
|
134
|
+
playbooks: PlaybooksConfig;
|
|
135
|
+
theme: ThemeConfig | null;
|
|
136
|
+
hotkeys: HotkeyBindingsConfig | null;
|
|
137
|
+
terminal: TerminalChoice | null;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The resolved command + args shape returned by both fresh-launch and
|
|
142
|
+
* resume-launch argv builders. When `resolveFromShellAliases: true` is set on
|
|
143
|
+
* the agent, `command` is rewritten to the user's shell (or /bin/sh fallback)
|
|
144
|
+
* and `args` becomes `['-i', '-c', '<quoted invocation>']` — so callers must
|
|
145
|
+
* consume both fields, not just args.
|
|
146
|
+
*/
|
|
147
|
+
interface ResolvedArgv {
|
|
148
|
+
command: string;
|
|
149
|
+
args: string[];
|
|
150
|
+
}
|
|
151
|
+
interface BuiltArgv {
|
|
152
|
+
argv: ResolvedArgv;
|
|
153
|
+
shellFallbackWarning: string | null;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
type LaunchErrorCode = 'no-agents-configured' | 'assignment-not-found' | 'session-not-found' | 'agent-not-configured' | 'mode-not-supported';
|
|
157
|
+
declare class LaunchError extends Error {
|
|
158
|
+
readonly code: LaunchErrorCode;
|
|
159
|
+
constructor(code: LaunchErrorCode, message: string);
|
|
160
|
+
}
|
|
161
|
+
interface LaunchPlan {
|
|
162
|
+
terminal: TerminalChoice;
|
|
163
|
+
cwd: string;
|
|
164
|
+
argv: ResolvedArgv;
|
|
165
|
+
env: NodeJS.ProcessEnv;
|
|
166
|
+
agentId: string;
|
|
167
|
+
/** Non-fatal warning about a fallback cwd (worktree path missing). */
|
|
168
|
+
fallbackWarning: string | null;
|
|
169
|
+
/** Non-fatal warning from shell-alias resolution falling back to /bin/sh. */
|
|
170
|
+
shellFallbackWarning: string | null;
|
|
171
|
+
}
|
|
172
|
+
interface ResolveLaunchPlanInput {
|
|
173
|
+
kind: 'assignment' | 'session';
|
|
174
|
+
id: string;
|
|
175
|
+
/**
|
|
176
|
+
* Only consulted when `kind === 'session'`. Defaults to `'resume'` so
|
|
177
|
+
* callers that haven't been updated to thread the URL mode through still
|
|
178
|
+
* get the prior behavior (continue the same session id).
|
|
179
|
+
*/
|
|
180
|
+
mode?: SessionMode;
|
|
181
|
+
config: SyntaurConfig;
|
|
182
|
+
projectsDir: string;
|
|
183
|
+
assignmentsDir: string;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Pick the agent the "Open in agent" flow should use. Order of preference:
|
|
187
|
+
* - the first agent with `default: true`
|
|
188
|
+
* - else the first entry in the list
|
|
189
|
+
* Throws LaunchError('no-agents-configured') if the list is empty (only
|
|
190
|
+
* possible when the user explicitly wrote `agents: []` — absence falls back to
|
|
191
|
+
* BUILTIN_AGENTS via `getAgents()`).
|
|
192
|
+
*/
|
|
193
|
+
declare function pickAgent(config: SyntaurConfig): AgentConfig;
|
|
194
|
+
/**
|
|
195
|
+
* Resolve the launch plan for a "Open in agent" click. Reads the assignment or
|
|
196
|
+
* session record, picks the cwd + agent, builds the argv, and returns a
|
|
197
|
+
* structured plan that `executeLaunchPlan` (or an Electron caller) can run.
|
|
198
|
+
*/
|
|
199
|
+
declare function resolveLaunchPlan(input: ResolveLaunchPlanInput): Promise<LaunchPlan>;
|
|
200
|
+
|
|
201
|
+
declare class TerminalNotFoundError extends Error {
|
|
202
|
+
readonly terminal: TerminalChoice;
|
|
203
|
+
readonly remediation: string;
|
|
204
|
+
constructor(terminal: TerminalChoice, remediation: string);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Test hook: a function that replaces `child_process.spawn` so unit tests can
|
|
208
|
+
* assert exactly what the launcher invoked without spawning real processes.
|
|
209
|
+
* Must return a `ChildProcess`-shaped object — `executeLaunchPlan` listens for
|
|
210
|
+
* `'error'`, `'spawn'`, and `'exit'` events to detect missing terminals.
|
|
211
|
+
*/
|
|
212
|
+
type SpawnFn = (command: string, args: readonly string[], options: SpawnOptions) => ChildProcess;
|
|
213
|
+
/**
|
|
214
|
+
* Run the launch plan: spawn the configured terminal in a new window with the
|
|
215
|
+
* resolved cwd + agent argv. Returns once the spawn has been initiated and
|
|
216
|
+
* confirmed; for wrapper commands (osascript/open) it briefly waits for the
|
|
217
|
+
* wrapper to exit so that missing apps surface as a non-zero CLI exit.
|
|
218
|
+
*
|
|
219
|
+
* Throws `TerminalNotFoundError` when the spawn errors (ENOENT on direct CLI
|
|
220
|
+
* launchers) or when a wrapper exits non-zero (target app missing).
|
|
221
|
+
*/
|
|
222
|
+
declare function executeLaunchPlan(plan: LaunchPlan, spawnFn?: SpawnFn): Promise<void>;
|
|
223
|
+
interface TerminalInvocation {
|
|
224
|
+
command: string;
|
|
225
|
+
args: string[];
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Build the argv that will be handed to `spawn` to open `plan.argv` in a new
|
|
229
|
+
* window of `plan.terminal` at `plan.cwd`. Exported for unit testing.
|
|
230
|
+
*/
|
|
231
|
+
declare function buildTerminalInvocation(plan: LaunchPlan): TerminalInvocation;
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Build argv for an agent launch. Handles:
|
|
235
|
+
* - `resolveFromShellAliases: true` → `$SHELL -i -c '<quoted...>'`
|
|
236
|
+
* - `promptArgPosition: 'first' | 'last' | 'none'`
|
|
237
|
+
* - plain absolute or bare-name command.
|
|
238
|
+
*/
|
|
239
|
+
declare function buildAgentArgv(agent: AgentConfig, prompt: string, env?: NodeJS.ProcessEnv): BuiltArgv;
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Re-export the fresh-launch argv builder under a parallel name so the launch
|
|
243
|
+
* core has a single import surface: `buildFreshArgv` (new run) and
|
|
244
|
+
* `buildSessionArgv` (resume/fork an existing session).
|
|
245
|
+
*/
|
|
246
|
+
declare const buildFreshArgv: typeof buildAgentArgv;
|
|
247
|
+
/**
|
|
248
|
+
* Build argv for continuing an existing agent session under a specific mode.
|
|
249
|
+
*
|
|
250
|
+
* The argv shape per agent is declared in `AgentConfig.resume` / `.fork`
|
|
251
|
+
* (`SessionInvocation`):
|
|
252
|
+
* - `args` is a literal argv list. The substring `{id}` is replaced with
|
|
253
|
+
* `sessionId`.
|
|
254
|
+
* - `command` optionally overrides `agent.command` for subcommand-style
|
|
255
|
+
* agents whose binary differs (none in builtins).
|
|
256
|
+
*
|
|
257
|
+
* Existing `agent.args` (the base flags applied to a fresh launch — e.g.
|
|
258
|
+
* `--dangerously-skip-permissions`) are preserved and prefixed before the
|
|
259
|
+
* invocation args, matching the prior `buildResumeArgv` behavior.
|
|
260
|
+
*
|
|
261
|
+
* The `resolveFromShellAliases` rewriting is preserved identically: the
|
|
262
|
+
* command is rewritten to `$SHELL`/`/bin/sh` and args become
|
|
263
|
+
* `['-i', '-c', '<quoted>']`. The quoted command line uses the (possibly
|
|
264
|
+
* overridden) executable.
|
|
265
|
+
*
|
|
266
|
+
* Throws `LaunchError('mode-not-supported', ...)` when the agent has no
|
|
267
|
+
* entry for the requested mode.
|
|
268
|
+
*/
|
|
269
|
+
declare function buildSessionArgv(agent: AgentConfig, sessionId: string, mode: SessionMode, env?: NodeJS.ProcessEnv): BuiltArgv;
|
|
270
|
+
|
|
271
|
+
type InstallKind = 'npx' | 'global' | 'local' | 'unknown';
|
|
272
|
+
interface DetectOptions {
|
|
273
|
+
realpath?: (p: string) => string;
|
|
274
|
+
readFile?: (p: string) => string;
|
|
275
|
+
envUserAgent?: string;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Classify the install origin of the running CLI.
|
|
279
|
+
*
|
|
280
|
+
* Decision order:
|
|
281
|
+
* 1. npx-style cache patterns (anchored to `/node_modules/` suffix).
|
|
282
|
+
* 2. `npm_config_user_agent` containing `npx/` (some pnpm-shim invocations
|
|
283
|
+
* don't put dlx in the path).
|
|
284
|
+
* 3. Canonical npm global layout `/lib/node_modules/syntaur/`.
|
|
285
|
+
* 4. Local checkout (walks up to find a `package.json` named `syntaur`
|
|
286
|
+
* whose dir is not under any `node_modules/`).
|
|
287
|
+
* 5. `unknown` — the subcommand refuses these alongside `npx` to avoid
|
|
288
|
+
* registering a bundle path that may not survive.
|
|
289
|
+
*/
|
|
290
|
+
declare function detectInstallKind(scriptUrl: string, opts?: DetectOptions): InstallKind;
|
|
291
|
+
/**
|
|
292
|
+
* Extract the cache-hash segment from an npx-style script URL.
|
|
293
|
+
* Returns null for global/local/unknown installs.
|
|
294
|
+
*/
|
|
295
|
+
declare function extractNpxHash(scriptUrl: string, opts?: DetectOptions): string | null;
|
|
296
|
+
declare function nudgeStampDir(): string;
|
|
297
|
+
declare function nudgeStampPath(hash: string): string;
|
|
298
|
+
declare function hasNudgedHash(hash: string): Promise<boolean>;
|
|
299
|
+
declare function recordNudge(hash: string): Promise<void>;
|
|
300
|
+
/**
|
|
301
|
+
* Truthiness rules for `SYNTAUR_SKIP_HANDLER_NUDGE`:
|
|
302
|
+
* - `'1'`, `'true'`, `'yes'` (case-insensitive, trimmed) → disabled
|
|
303
|
+
* - empty, unset, `'0'`, `'false'`, whitespace → enabled
|
|
304
|
+
*
|
|
305
|
+
* Deliberately narrow so users who set the var to `'0'` to mean "off the
|
|
306
|
+
* skip" don't accidentally disable the nudge.
|
|
307
|
+
*/
|
|
308
|
+
declare function isHandlerNudgeDisabled(): boolean;
|
|
309
|
+
declare function nudgeMessage(): string;
|
|
310
|
+
declare function shouldNudgeForNpx(hash: string | null): Promise<boolean>;
|
|
311
|
+
/**
|
|
312
|
+
* Pre-Commander startup hook. Mirrors `maybePromptInstall` from
|
|
313
|
+
* `src/utils/npx-prompt.ts` in shape so `src/index.ts` can call them
|
|
314
|
+
* back-to-back.
|
|
315
|
+
*/
|
|
316
|
+
declare function maybeNudgeForNpxInstall(scriptUrl: string): Promise<void>;
|
|
317
|
+
|
|
318
|
+
export { type BuiltArgv, type InstallKind, LaunchError, type LaunchErrorCode, type LaunchPlan, OpenUrlError, type OpenUrlErrorCode, type ParsedOpenUrl, type ResolveLaunchPlanInput, type ResolvedArgv, type SessionMode, type SpawnFn, TerminalNotFoundError, buildFreshArgv, buildSessionArgv, buildTerminalInvocation, detectInstallKind, executeLaunchPlan, extractNpxHash, hasNudgedHash, isHandlerNudgeDisabled, maybeNudgeForNpxInstall, nudgeMessage, nudgeStampDir, nudgeStampPath, parseOpenUrl, pickAgent, recordNudge, resolveLaunchPlan, shouldNudgeForNpx };
|