surfcode 0.0.0-stage → 0.1.1

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.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +325 -2
  3. package/assets/surfcode-logo.gif +0 -0
  4. package/dist/cli/auth.js +315 -0
  5. package/dist/cli/auth.js.map +1 -0
  6. package/dist/cli/config.js +228 -0
  7. package/dist/cli/config.js.map +1 -0
  8. package/dist/cli/headless.js +355 -0
  9. package/dist/cli/headless.js.map +1 -0
  10. package/dist/cli/inspect.js +462 -0
  11. package/dist/cli/inspect.js.map +1 -0
  12. package/dist/cli/interactive.js +130 -0
  13. package/dist/cli/interactive.js.map +1 -0
  14. package/dist/cli/sessions.js +170 -0
  15. package/dist/cli/sessions.js.map +1 -0
  16. package/dist/cli/sync.js +190 -0
  17. package/dist/cli/sync.js.map +1 -0
  18. package/dist/cli/util.js +345 -0
  19. package/dist/cli/util.js.map +1 -0
  20. package/dist/cli.js +485 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/core/agent.js +298 -0
  23. package/dist/core/agent.js.map +1 -0
  24. package/dist/core/agents.js +55 -0
  25. package/dist/core/agents.js.map +1 -0
  26. package/dist/core/auth.js +107 -0
  27. package/dist/core/auth.js.map +1 -0
  28. package/dist/core/catalog.js +306 -0
  29. package/dist/core/catalog.js.map +1 -0
  30. package/dist/core/chat/anthropic.js +222 -0
  31. package/dist/core/chat/anthropic.js.map +1 -0
  32. package/dist/core/chat/common.js +367 -0
  33. package/dist/core/chat/common.js.map +1 -0
  34. package/dist/core/chat/google.js +180 -0
  35. package/dist/core/chat/google.js.map +1 -0
  36. package/dist/core/chat/index.js +80 -0
  37. package/dist/core/chat/index.js.map +1 -0
  38. package/dist/core/chat/openai.js +164 -0
  39. package/dist/core/chat/openai.js.map +1 -0
  40. package/dist/core/chat/types.js +2 -0
  41. package/dist/core/chat/types.js.map +1 -0
  42. package/dist/core/clipboard.js +34 -0
  43. package/dist/core/clipboard.js.map +1 -0
  44. package/dist/core/compact.js +39 -0
  45. package/dist/core/compact.js.map +1 -0
  46. package/dist/core/config.js +211 -0
  47. package/dist/core/config.js.map +1 -0
  48. package/dist/core/delegate.js +184 -0
  49. package/dist/core/delegate.js.map +1 -0
  50. package/dist/core/effort.js +80 -0
  51. package/dist/core/effort.js.map +1 -0
  52. package/dist/core/errors.js +32 -0
  53. package/dist/core/errors.js.map +1 -0
  54. package/dist/core/free.js +21 -0
  55. package/dist/core/free.js.map +1 -0
  56. package/dist/core/github.js +445 -0
  57. package/dist/core/github.js.map +1 -0
  58. package/dist/core/paths.js +51 -0
  59. package/dist/core/paths.js.map +1 -0
  60. package/dist/core/prompt.js +95 -0
  61. package/dist/core/prompt.js.map +1 -0
  62. package/dist/core/provider.js +298 -0
  63. package/dist/core/provider.js.map +1 -0
  64. package/dist/core/session.js +159 -0
  65. package/dist/core/session.js.map +1 -0
  66. package/dist/core/sync.js +126 -0
  67. package/dist/core/sync.js.map +1 -0
  68. package/dist/core/types.js +2 -0
  69. package/dist/core/types.js.map +1 -0
  70. package/dist/core/usage.js +127 -0
  71. package/dist/core/usage.js.map +1 -0
  72. package/dist/core/workspace.js +70 -0
  73. package/dist/core/workspace.js.map +1 -0
  74. package/dist/data/models.json +1 -0
  75. package/dist/sync/server.js +179 -0
  76. package/dist/sync/server.js.map +1 -0
  77. package/dist/tools/diff.js +21 -0
  78. package/dist/tools/diff.js.map +1 -0
  79. package/dist/tools/files.js +227 -0
  80. package/dist/tools/files.js.map +1 -0
  81. package/dist/tools/github.js +238 -0
  82. package/dist/tools/github.js.map +1 -0
  83. package/dist/tools/index.js +34 -0
  84. package/dist/tools/index.js.map +1 -0
  85. package/dist/tools/search.js +231 -0
  86. package/dist/tools/search.js.map +1 -0
  87. package/dist/tools/shell.js +118 -0
  88. package/dist/tools/shell.js.map +1 -0
  89. package/dist/tools/todos.js +50 -0
  90. package/dist/tools/todos.js.map +1 -0
  91. package/dist/tools/webfetch.js +108 -0
  92. package/dist/tools/webfetch.js.map +1 -0
  93. package/dist/tui/App.js +2984 -0
  94. package/dist/tui/App.js.map +1 -0
  95. package/dist/tui/ansi.js +151 -0
  96. package/dist/tui/ansi.js.map +1 -0
  97. package/dist/tui/commands.js +61 -0
  98. package/dist/tui/commands.js.map +1 -0
  99. package/dist/tui/explorer.js +152 -0
  100. package/dist/tui/explorer.js.map +1 -0
  101. package/dist/tui/icons.js +21 -0
  102. package/dist/tui/icons.js.map +1 -0
  103. package/dist/tui/layout.js +324 -0
  104. package/dist/tui/layout.js.map +1 -0
  105. package/dist/tui/markdown.js +355 -0
  106. package/dist/tui/markdown.js.map +1 -0
  107. package/dist/tui/overlays.js +316 -0
  108. package/dist/tui/overlays.js.map +1 -0
  109. package/dist/tui/render.js +234 -0
  110. package/dist/tui/render.js.map +1 -0
  111. package/dist/tui/theme.js +148 -0
  112. package/dist/tui/theme.js.map +1 -0
  113. package/dist/tui/types.js +73 -0
  114. package/dist/tui/types.js.map +1 -0
  115. package/dist/version.js +3 -0
  116. package/dist/version.js.map +1 -0
  117. package/package.json +75 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { readFile, stat } from 'node:fs/promises';
3
+ import { defaultConfig, loadConfig, readConfigValue, saveConfig, updateConfigPath } from '../core/config.js';
4
+ import { SurfError } from '../core/errors.js';
5
+ import { ensurePaths, getPaths } from '../core/paths.js';
6
+ import { accent, danger, muted, success, title, warning, write } from './util.js';
7
+ const TOP_LEVEL_KEYS = new Set([
8
+ 'version',
9
+ 'provider',
10
+ 'model',
11
+ 'theme',
12
+ 'mode',
13
+ 'permissions',
14
+ 'maxSteps',
15
+ 'maxTokens',
16
+ 'temperature',
17
+ 'effort',
18
+ 'showReasoning',
19
+ 'verboseTools',
20
+ 'streaming',
21
+ 'explorerWidth',
22
+ 'fullAccess',
23
+ 'agents',
24
+ 'allowOutsideWorkspace',
25
+ 'providers',
26
+ 'customProviders',
27
+ 'sync'
28
+ ]);
29
+ const SYNC_KEYS = new Set(['url', 'token', 'enabled', 'auto', 'cursor', 'lastSyncAt', 'deviceId']);
30
+ const PROVIDER_KEYS = new Set([
31
+ 'apiKey',
32
+ 'baseURL',
33
+ 'headers',
34
+ 'dialect',
35
+ 'apiVersion',
36
+ 'deployment',
37
+ 'project',
38
+ 'location',
39
+ 'extraBody',
40
+ 'timeout',
41
+ 'retries',
42
+ 'retryDelay',
43
+ 'keyless',
44
+ 'name',
45
+ 'env',
46
+ 'doc',
47
+ 'models'
48
+ ]);
49
+ const PERMISSION_KEYS = new Set(['read', 'write', 'shell', 'fetch']);
50
+ const AGENTS_KEYS = new Set(['enabled', 'workers']);
51
+ export async function configShowCommand() {
52
+ const paths = getPaths();
53
+ const config = await loadConfig();
54
+ let exists = false;
55
+ try {
56
+ await stat(paths.configFile);
57
+ exists = true;
58
+ }
59
+ catch {
60
+ // Defaults are in use.
61
+ }
62
+ write(`${title('Config')} ${muted(`· ${paths.configFile}`)}`);
63
+ if (!exists)
64
+ write(muted(' file does not exist yet · showing defaults'));
65
+ write();
66
+ write(JSON.stringify(redact(config), null, 2));
67
+ write();
68
+ write(muted('Secrets are redacted. Edit the file to change API keys.'));
69
+ return 0;
70
+ }
71
+ export async function configPathCommand() {
72
+ await ensurePaths();
73
+ write(getPaths().configFile);
74
+ return 0;
75
+ }
76
+ export async function configGetCommand(key, options) {
77
+ const raw = await readFile(getPaths().configFile, 'utf8').catch(() => undefined);
78
+ if (!raw) {
79
+ write(options.json ? 'null' : muted('(not set)'));
80
+ return 0;
81
+ }
82
+ const config = await loadConfig();
83
+ const value = redactValue(readConfigValue(config, key.split('.')), key.split('.').at(-1));
84
+ if (value === undefined) {
85
+ write(options.json ? 'null' : muted('(not set)'));
86
+ return 0;
87
+ }
88
+ if (options.json) {
89
+ write(JSON.stringify(value, null, 2));
90
+ return 0;
91
+ }
92
+ if (typeof value === 'string')
93
+ write(value);
94
+ else if (typeof value === 'number' || typeof value === 'boolean')
95
+ write(String(value));
96
+ else
97
+ write(JSON.stringify(value, null, 2));
98
+ return 0;
99
+ }
100
+ export async function configSetCommand(key, rawValue) {
101
+ const path = key.split('.').filter(Boolean);
102
+ if (path.length === 0)
103
+ throw new SurfError('A config key is required.');
104
+ if (!TOP_LEVEL_KEYS.has(path[0])) {
105
+ throw new SurfError(`Unknown config key "${path[0]}"`, {
106
+ hint: `Top-level keys: ${[...TOP_LEVEL_KEYS].join(', ')}.`
107
+ });
108
+ }
109
+ if (path[0] === 'permissions' && path[1] && !PERMISSION_KEYS.has(path[1])) {
110
+ throw new SurfError(`Unknown permission "${path[1]}"`, {
111
+ hint: `Permissions: ${[...PERMISSION_KEYS].join(', ')}.`
112
+ });
113
+ }
114
+ if (path[0] === 'sync' && path[1] && !SYNC_KEYS.has(path[1])) {
115
+ throw new SurfError(`Unknown sync setting "${path[1]}"`, {
116
+ hint: `Sync settings: ${[...SYNC_KEYS].join(', ')}.`
117
+ });
118
+ }
119
+ if (path[0] === 'agents' && path[1] && !AGENTS_KEYS.has(path[1])) {
120
+ throw new SurfError(`Unknown agent setting "${path[1]}"`, {
121
+ hint: `Agent settings: ${[...AGENTS_KEYS].join(', ')}.`
122
+ });
123
+ }
124
+ if ((path[0] === 'providers' || path[0] === 'customProviders') &&
125
+ path.length === 3 &&
126
+ !PROVIDER_KEYS.has(path[2])) {
127
+ throw new SurfError(`Unknown provider setting "${path[2]}"`, {
128
+ hint: `Provider settings: ${[...PROVIDER_KEYS].join(', ')}.`
129
+ });
130
+ }
131
+ const value = parseValue(rawValue);
132
+ const config = await updateConfigPath(path, value);
133
+ const saved = readConfigValue(config, path);
134
+ const shown = isSensitivePath(path) ? '<redacted>' : formatValue(saved);
135
+ write(`${success('✓')} ${accent(path.join('.'))} ${muted('=')} ${shown}`);
136
+ return 0;
137
+ }
138
+ export async function configValidateCommand() {
139
+ try {
140
+ const config = await loadConfig();
141
+ write(`${success('✓')} Valid config ${muted(`· ${getPaths().configFile}`)}`);
142
+ write(muted(` ${Object.keys(config.providers).length} provider settings · ${Object.keys(config.customProviders).length} custom providers`));
143
+ return 0;
144
+ }
145
+ catch (error) {
146
+ write(`${danger('✗')} ${error instanceof Error ? error.message : String(error)}`);
147
+ if (error instanceof SurfError && error.hint)
148
+ write(muted(` ${error.hint}`));
149
+ return 1;
150
+ }
151
+ }
152
+ export async function configEditCommand() {
153
+ const paths = await ensurePaths();
154
+ try {
155
+ await stat(paths.configFile);
156
+ }
157
+ catch {
158
+ await saveConfig(defaultConfig());
159
+ write(muted(`Created ${paths.configFile} with defaults.`));
160
+ }
161
+ const editor = process.env.VISUAL || process.env.EDITOR || (process.platform === 'win32' ? 'notepad' : 'vi');
162
+ const parts = editor.trim().split(/\s+/);
163
+ const command = parts[0] ?? 'vi';
164
+ const args = [...parts.slice(1), paths.configFile];
165
+ const code = await new Promise((resolvePromise, reject) => {
166
+ const child = spawn(command, args, { stdio: 'inherit' });
167
+ child.on('error', (error) => reject(new SurfError(`Could not open ${editor}`, {
168
+ hint: error.message
169
+ })));
170
+ child.on('close', (exitCode) => resolvePromise(exitCode));
171
+ });
172
+ if (code !== 0)
173
+ throw new SurfError(`The editor exited with code ${code}.`);
174
+ try {
175
+ await loadConfig();
176
+ }
177
+ catch (error) {
178
+ write(warning(`The config was saved but is not valid yet: ${error instanceof Error ? error.message : String(error)}`));
179
+ return 1;
180
+ }
181
+ write(`${success('✓')} Config updated.`);
182
+ return 0;
183
+ }
184
+ function parseValue(raw) {
185
+ const value = raw.trim();
186
+ if (value === '')
187
+ return '';
188
+ try {
189
+ return JSON.parse(value);
190
+ }
191
+ catch {
192
+ return raw;
193
+ }
194
+ }
195
+ function isSensitivePath(path) {
196
+ const last = path.at(-1) ?? '';
197
+ return /^(apiKey|api_key|authorization|token|secret|password|x-api-key)$/i.test(last) || path.includes('headers');
198
+ }
199
+ function formatValue(value) {
200
+ if (typeof value === 'string')
201
+ return JSON.stringify(value);
202
+ if (typeof value === 'number' || typeof value === 'boolean')
203
+ return String(value);
204
+ if (value === undefined)
205
+ return muted('(not set)');
206
+ return JSON.stringify(value);
207
+ }
208
+ function redact(config) {
209
+ return redactValue(config, undefined);
210
+ }
211
+ function redactValue(value, key) {
212
+ if (key && /^(apiKey|api_key|authorization|token|secret|password|x-api-key)$/i.test(key)) {
213
+ return value ? '<redacted>' : value;
214
+ }
215
+ if (key === 'headers' && value && typeof value === 'object') {
216
+ return Object.fromEntries(Object.entries(value).map(([name]) => [name, '<redacted>']));
217
+ }
218
+ if (Array.isArray(value))
219
+ return value.map((entry) => redactValue(entry));
220
+ if (value && typeof value === 'object') {
221
+ return Object.fromEntries(Object.entries(value).map(([name, entry]) => [
222
+ name,
223
+ redactValue(entry, name)
224
+ ]));
225
+ }
226
+ return value;
227
+ }
228
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,355 @@
1
+ import { createInterface } from 'node:readline/promises';
2
+ import { runAgent } from '../core/agent.js';
3
+ import { resolveAgentWorkers } from '../core/agents.js';
4
+ import { discoverLocalModels, loadCatalog } from '../core/catalog.js';
5
+ import { loadConfig, updateConfigPath } from '../core/config.js';
6
+ import { activeEffort } from '../core/effort.js';
7
+ import { SurfError, errorMessage } from '../core/errors.js';
8
+ import { resolveSelection } from '../core/provider.js';
9
+ import { resolveSyncSettings, syncSessions } from '../core/sync.js';
10
+ import { addSessionUsage, createSession, latestSession, loadSession, saveSession } from '../core/session.js';
11
+ import { formatCost, formatTokens } from '../core/usage.js';
12
+ import { createTools } from '../tools/index.js';
13
+ import { danger, formatDuration, muted, oneLine, prepareStartup, safeText, success, warning, writeError } from './util.js';
14
+ const LOCAL_PROVIDERS = new Set(['ollama', 'llamacpp', 'vllm', 'lmstudio']);
15
+ export async function runHeadless(options) {
16
+ const json = Boolean(options.json);
17
+ const quiet = Boolean(options.quiet) || json;
18
+ const emit = (event) => {
19
+ if (json)
20
+ process.stdout.write(`${JSON.stringify(event)}\n`);
21
+ };
22
+ let session;
23
+ try {
24
+ const input = await resolvePrompt(options.prompt);
25
+ const config = await loadConfig();
26
+ const catalog = await loadCatalog(config);
27
+ if (options.session && options.continue) {
28
+ throw new SurfError('Choose either --session or --continue, not both.');
29
+ }
30
+ if (options.session) {
31
+ session = await loadSession(options.session);
32
+ if (!session) {
33
+ throw new SurfError(`Session not found: ${options.session}`, {
34
+ hint: 'Run `surf sessions` to list saved sessions.'
35
+ });
36
+ }
37
+ }
38
+ else if (options.continue) {
39
+ session = await latestSession(options.cwd);
40
+ if (!session) {
41
+ throw new SurfError(`No saved sessions for ${options.cwd}`, {
42
+ hint: 'Run `surf` to start a new session.'
43
+ });
44
+ }
45
+ }
46
+ if (shouldDiscoverLocal(options, config)) {
47
+ await discoverLocalModels(catalog);
48
+ }
49
+ const startup = await prepareStartup({
50
+ config,
51
+ catalog,
52
+ provider: options.provider ?? session?.provider,
53
+ model: options.model ?? session?.model
54
+ });
55
+ if (startup.note && !quiet)
56
+ writeError(muted(startup.note));
57
+ const selection = await resolveSelection(catalog, startup.config, {
58
+ provider: startup.config.provider,
59
+ model: startup.config.model
60
+ });
61
+ const mode = options.plan ? 'plan' : (session?.mode ?? startup.config.mode);
62
+ const resumed = Boolean(session);
63
+ const activeSession = session ??
64
+ createSession({
65
+ cwd: options.cwd,
66
+ provider: selection.provider.id,
67
+ model: selection.model.id,
68
+ mode
69
+ });
70
+ session = {
71
+ ...activeSession,
72
+ provider: selection.provider.id,
73
+ model: selection.model.id,
74
+ mode
75
+ };
76
+ emit({
77
+ type: 'session',
78
+ sessionId: session.id,
79
+ provider: selection.provider.id,
80
+ model: selection.model.id,
81
+ resumed
82
+ });
83
+ const permissions = { ...startup.config.permissions };
84
+ if (startup.config.fullAccess) {
85
+ for (const key of Object.keys(permissions)) {
86
+ permissions[key] = 'allow';
87
+ }
88
+ }
89
+ if (options.yes) {
90
+ for (const key of Object.keys(permissions)) {
91
+ if (permissions[key] === 'ask')
92
+ permissions[key] = 'allow';
93
+ }
94
+ }
95
+ if (!options.yes && !process.stdin.isTTY && hasAskPermission(permissions) && !quiet) {
96
+ writeError(muted('note: permission prompts are unavailable here; use --yes to auto-approve tool actions.'));
97
+ }
98
+ const controller = new AbortController();
99
+ let interrupts = 0;
100
+ const onSigint = () => {
101
+ interrupts += 1;
102
+ if (interrupts === 1) {
103
+ controller.abort();
104
+ if (!quiet)
105
+ writeError(muted('stopping… (ctrl+c again to exit)'));
106
+ }
107
+ else {
108
+ process.exit(130);
109
+ }
110
+ };
111
+ const onSigterm = () => {
112
+ controller.abort();
113
+ process.exit(143);
114
+ };
115
+ process.on('SIGINT', onSigint);
116
+ process.on('SIGTERM', onSigterm);
117
+ const startedAt = Date.now();
118
+ let streamedText = '';
119
+ let lastUsage;
120
+ let permissionWarned = false;
121
+ let delegates = [];
122
+ if (startup.config.agents.enabled && startup.config.agents.workers.length > 0) {
123
+ const resolved = await resolveAgentWorkers(catalog, startup.config);
124
+ delegates = resolved.delegates;
125
+ if (!quiet && resolved.failures.length > 0) {
126
+ writeError(warning(`worker models skipped: ${resolved.failures.join('; ')}`));
127
+ }
128
+ }
129
+ try {
130
+ const outcome = await runAgent({
131
+ cwd: options.cwd,
132
+ provider: selection.provider,
133
+ model: selection.model,
134
+ history: session.messages,
135
+ input,
136
+ mode,
137
+ tools: createTools(),
138
+ permissions,
139
+ maxSteps: options.maxSteps ?? startup.config.maxSteps,
140
+ maxTokens: options.maxTokens ??
141
+ startup.config.maxTokens ??
142
+ Math.min(selection.model.maxOutput || 8192, 32_768),
143
+ temperature: options.temperature ?? startup.config.temperature,
144
+ effort: activeEffort(options.effort ?? startup.config.effort),
145
+ showReasoning: Boolean(options.reasoning),
146
+ delegates,
147
+ allowOutsideWorkspace: startup.config.fullAccess || startup.config.allowOutsideWorkspace,
148
+ signal: controller.signal,
149
+ callbacks: {
150
+ onText(delta) {
151
+ streamedText += delta;
152
+ if (json)
153
+ emit({ type: 'text', delta });
154
+ else
155
+ process.stdout.write(delta);
156
+ },
157
+ onReasoning(delta) {
158
+ if (json && options.reasoning)
159
+ emit({ type: 'reasoning', delta });
160
+ else if (!json && options.reasoning)
161
+ process.stderr.write(muted(delta));
162
+ },
163
+ onToolStart(call, tool) {
164
+ if (json) {
165
+ emit({
166
+ type: 'tool_start',
167
+ id: call.id,
168
+ name: call.name,
169
+ arguments: call.arguments
170
+ });
171
+ return;
172
+ }
173
+ if (quiet)
174
+ return;
175
+ const detail = toolDetail(call);
176
+ process.stderr.write(`\n${warning('◆')} ${tool?.name ?? call.name}${detail ? ` ${muted(detail)}` : ''}\n`);
177
+ },
178
+ onToolResult(call, result, durationMs) {
179
+ if (json) {
180
+ emit({
181
+ type: 'tool_result',
182
+ id: call.id,
183
+ name: call.name,
184
+ durationMs,
185
+ isError: Boolean(result.isError),
186
+ output: result.output
187
+ });
188
+ return;
189
+ }
190
+ if (quiet)
191
+ return;
192
+ if (result.isError) {
193
+ process.stderr.write(` ${danger('✗')} ${oneLine(firstLine(result.output), 220)}\n`);
194
+ }
195
+ else {
196
+ process.stderr.write(` ${success('✓')} ${muted(`${call.name} · ${formatDuration(durationMs)}`)}\n`);
197
+ }
198
+ },
199
+ onUsage(total) {
200
+ lastUsage = total;
201
+ if (json)
202
+ emit({ type: 'usage', usage: total });
203
+ },
204
+ async requestPermission(request) {
205
+ if (options.yes)
206
+ return 'allow';
207
+ if (!process.stdin.isTTY) {
208
+ if (!permissionWarned && !quiet) {
209
+ permissionWarned = true;
210
+ writeError(muted(`denied ${request.action}: no TTY for an approval prompt (use --yes to auto-approve).`));
211
+ }
212
+ return 'deny';
213
+ }
214
+ const decision = await askPermission(request);
215
+ if (decision === 'always')
216
+ permissions[request.action] = 'allow';
217
+ return decision;
218
+ }
219
+ }
220
+ });
221
+ const nextSession = {
222
+ ...session,
223
+ messages: outcome.messages,
224
+ usage: addSessionUsage(session.usage, outcome.usage)
225
+ };
226
+ session = nextSession;
227
+ if (options.save !== false) {
228
+ let saved = false;
229
+ try {
230
+ await saveSession(nextSession);
231
+ saved = true;
232
+ }
233
+ catch (error) {
234
+ if (!json)
235
+ writeError(warning(`Could not save session: ${errorMessage(error)}`));
236
+ }
237
+ if (saved) {
238
+ const sync = resolveSyncSettings(startup.config);
239
+ if (sync.enabled && sync.auto) {
240
+ try {
241
+ const result = await syncSessions({ config: startup.config, direction: 'push' });
242
+ await updateConfigPath(['sync', 'cursor'], result.cursor);
243
+ await updateConfigPath(['sync', 'lastSyncAt'], Date.now());
244
+ }
245
+ catch (error) {
246
+ if (!json)
247
+ writeError(warning(`Could not sync session: ${errorMessage(error)}`));
248
+ }
249
+ }
250
+ }
251
+ }
252
+ if (!json && streamedText && !streamedText.endsWith('\n'))
253
+ process.stdout.write('\n');
254
+ const durationMs = Date.now() - startedAt;
255
+ if (json) {
256
+ emit({
257
+ type: 'result',
258
+ text: streamedText,
259
+ usage: outcome.usage,
260
+ aborted: outcome.aborted,
261
+ sessionId: options.save === false ? undefined : nextSession.id,
262
+ durationMs
263
+ });
264
+ }
265
+ else if (!quiet) {
266
+ const usage = lastUsage ?? outcome.usage;
267
+ writeError(muted([
268
+ selection.provider.id,
269
+ selection.model.name,
270
+ `${formatTokens(usage.inputTokens)} in`,
271
+ `${formatTokens(usage.outputTokens)} out`,
272
+ formatCost(usage.cost),
273
+ formatDuration(durationMs),
274
+ options.save === false ? 'not saved' : nextSession.id
275
+ ].join(' · ')));
276
+ if (outcome.aborted)
277
+ writeError(warning('stopped'));
278
+ }
279
+ return outcome.aborted ? 130 : 0;
280
+ }
281
+ finally {
282
+ process.off('SIGINT', onSigint);
283
+ process.off('SIGTERM', onSigterm);
284
+ }
285
+ }
286
+ catch (error) {
287
+ const message = errorMessage(error);
288
+ const hint = error instanceof SurfError ? error.hint : undefined;
289
+ if (json)
290
+ emit({ type: 'error', message, ...(hint ? { hint } : {}) });
291
+ else {
292
+ writeError(`${danger('error')} ${safeText(message)}`);
293
+ if (hint)
294
+ writeError(muted(` ${hint}`));
295
+ }
296
+ return error instanceof SurfError ? error.exitCode : 1;
297
+ }
298
+ }
299
+ async function resolvePrompt(prompt) {
300
+ const given = prompt?.trim();
301
+ if (given && given !== '-')
302
+ return given;
303
+ if (process.stdin.isTTY && given !== '-') {
304
+ throw new SurfError('No prompt provided', {
305
+ hint: 'Pass a prompt, pipe text on stdin, or run `surf` for the interactive UI.'
306
+ });
307
+ }
308
+ const chunks = [];
309
+ for await (const chunk of process.stdin) {
310
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
311
+ }
312
+ const text = Buffer.concat(chunks).toString('utf8').trim();
313
+ if (!text) {
314
+ throw new SurfError('No prompt provided on stdin', {
315
+ hint: 'Example: echo "explain src/index.ts" | surf run'
316
+ });
317
+ }
318
+ return text;
319
+ }
320
+ function hasAskPermission(permissions) {
321
+ return Object.values(permissions).some((value) => value === 'ask');
322
+ }
323
+ function shouldDiscoverLocal(options, config) {
324
+ const ids = [options.provider, config.provider].filter(Boolean);
325
+ if (ids.some((id) => LOCAL_PROVIDERS.has(id)))
326
+ return true;
327
+ return Object.values(config.providers).some((settings) => settings?.baseURL && /localhost|127\.0\.0\.1|0\.0\.0\.0|\[::1\]/i.test(settings.baseURL));
328
+ }
329
+ function toolDetail(call) {
330
+ const args = call.arguments;
331
+ const value = args.command ?? args.path ?? args.pattern ?? args.url ?? args.query ?? args.file ?? args.content;
332
+ return typeof value === 'string' ? oneLine(value.replace(/\n/g, ' '), 110) : '';
333
+ }
334
+ function firstLine(value) {
335
+ return value.split('\n').find((line) => line.trim()) ?? value;
336
+ }
337
+ async function askPermission(request) {
338
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
339
+ try {
340
+ const detail = request.detail ? `\n ${muted(oneLine(request.detail, 200))}` : '';
341
+ const risk = request.risk ? ` ${muted(`[${request.risk} risk]`)}` : '';
342
+ const answer = (await rl.question(`\n${warning('permission')} ${request.title}${risk}${detail}\n allow? [y]es / [a]lways / [n]o › `))
343
+ .trim()
344
+ .toLowerCase();
345
+ if (answer === 'a' || answer === 'always')
346
+ return 'always';
347
+ if (answer === 'y' || answer === 'yes' || answer === '')
348
+ return 'allow';
349
+ return 'deny';
350
+ }
351
+ finally {
352
+ rl.close();
353
+ }
354
+ }
355
+ //# sourceMappingURL=headless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/cli/headless.ts"],"names":[],"mappings":"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"}