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,164 @@
1
+ import { supportsOpenAiEffort } from '../effort.js';
2
+ import { SurfError } from '../errors.js';
3
+ import { baseHeaders, emptyResult, fetchWithRetry, generateToolCallId, mergeUsage, parseToolArguments, readSse, requestSignal, retryAttempts, retryBaseDelay, streamHeaders, textContent, thinkingText, toolCallFromDelta, usageFromOpenAi } from './common.js';
4
+ export async function streamOpenAi(request, endpoint) {
5
+ const { provider, model, options, callbacks } = request;
6
+ const result = emptyResult();
7
+ const signal = requestSignal(options);
8
+ const body = {
9
+ ...(provider.settings.extraBody ?? {}),
10
+ model: model.id,
11
+ messages: toOpenAiMessages(request.messages, request.system, provider.id),
12
+ stream: true,
13
+ stream_options: { include_usage: true }
14
+ };
15
+ if (request.tools.length > 0 && model.meta?.tool_call !== false) {
16
+ body.tools = request.tools.map((tool) => ({
17
+ type: 'function',
18
+ function: { name: tool.name, description: tool.description, parameters: tool.parameters }
19
+ }));
20
+ body.tool_choice = 'auto';
21
+ }
22
+ const reasoningModel = model.meta?.reasoning === true ||
23
+ ((provider.id === 'openai' || provider.id === 'azure') && /^(o[1-9]|gpt-5)/i.test(model.id));
24
+ const effort = options.effort && supportsOpenAiEffort(provider.id) && reasoningModel
25
+ ? options.effort
26
+ : undefined;
27
+ if (effort && provider.id === 'openrouter') {
28
+ body.reasoning = { effort };
29
+ }
30
+ else if (effort) {
31
+ body.reasoning_effort = effort;
32
+ }
33
+ // Reasoning models reject custom sampling controls on several endpoints.
34
+ if (options.temperature !== undefined && !(effort && reasoningModel)) {
35
+ body.temperature = options.temperature;
36
+ }
37
+ if (options.maxTokens > 0) {
38
+ const useCompletionTokens = provider.id === 'openai' && /^(o[1-9]|gpt-5)/i.test(model.id);
39
+ body[useCompletionTokens ? 'max_completion_tokens' : 'max_tokens'] = options.maxTokens;
40
+ }
41
+ const url = endpoint ?? chatCompletionsUrl(provider.baseURL);
42
+ const attempts = retryAttempts(provider.settings);
43
+ const delay = retryBaseDelay(provider.settings);
44
+ const init = {
45
+ method: 'POST',
46
+ headers: baseHeaders(streamHeaders(provider.headers, request.idempotencyKey)),
47
+ body: JSON.stringify(body)
48
+ };
49
+ let response;
50
+ try {
51
+ response = await fetchWithRetry(url, init, signal, attempts, delay);
52
+ }
53
+ catch (error) {
54
+ // A handful of OpenAI-compatible servers reject stream_options instead of ignoring it.
55
+ if (error instanceof SurfError &&
56
+ (error.status === 400 || error.status === 422) &&
57
+ /stream_options|include_usage/i.test(error.message) &&
58
+ 'stream_options' in body) {
59
+ delete body.stream_options;
60
+ response = await fetchWithRetry(url, { ...init, body: JSON.stringify(body) }, signal, attempts, delay);
61
+ }
62
+ else {
63
+ throw error;
64
+ }
65
+ }
66
+ const callParts = new Map();
67
+ let usage = {};
68
+ for await (const event of readSse(response)) {
69
+ if (event.data === '[DONE]')
70
+ break;
71
+ const payload = parseJson(event.data);
72
+ if (!payload)
73
+ continue;
74
+ if (payload.error) {
75
+ const message = payload.error.message ?? String(payload.error);
76
+ throw new SurfError(`${provider.name}: ${message}`, {
77
+ hint: payload.error.code ? `Provider error code: ${payload.error.code}` : undefined,
78
+ retryable: false
79
+ });
80
+ }
81
+ if (payload.usage)
82
+ usage = mergeUsage(usage, usageFromOpenAi(payload.usage));
83
+ const choice = payload.choices?.[0];
84
+ if (!choice)
85
+ continue;
86
+ const delta = choice.delta ?? choice.message ?? {};
87
+ const reasoning = thinkingText(delta.reasoning_content ?? delta.reasoning ?? delta.reasoning_text);
88
+ if (reasoning) {
89
+ result.reasoning += reasoning;
90
+ callbacks.onReasoning(reasoning);
91
+ }
92
+ const text = textContent(delta.content ?? delta.text);
93
+ if (text) {
94
+ result.text += text;
95
+ callbacks.onText(text);
96
+ }
97
+ if (Array.isArray(delta.tool_calls)) {
98
+ delta.tool_calls.forEach((entry, index) => {
99
+ toolCallFromDelta(callParts, entry, Number.isInteger(entry?.index) ? entry.index : index);
100
+ });
101
+ }
102
+ if (delta.function_call) {
103
+ toolCallFromDelta(callParts, { index: 0, function: delta.function_call }, 0);
104
+ }
105
+ if (choice.finish_reason)
106
+ result.finishReason = choice.finish_reason;
107
+ usage = mergeUsage(usage, usageFromOpenAi(choice.usage));
108
+ }
109
+ result.toolCalls = [...callParts.entries()]
110
+ .sort(([a], [b]) => a - b)
111
+ .map(([, call]) => ({
112
+ id: call.id || generateToolCallId(),
113
+ name: call.name,
114
+ arguments: parseToolArguments(call.raw),
115
+ rawArguments: call.raw || undefined
116
+ }))
117
+ .filter((call) => call.name.length > 0);
118
+ result.usage = usage;
119
+ return result;
120
+ }
121
+ export function toOpenAiMessages(messages, system, providerId) {
122
+ const output = [];
123
+ if (system.trim())
124
+ output.push({ role: 'system', content: system });
125
+ for (const message of messages) {
126
+ if (message.role === 'user') {
127
+ output.push({ role: 'user', content: message.content });
128
+ }
129
+ else if (message.role === 'assistant') {
130
+ const entry = {
131
+ role: 'assistant',
132
+ content: message.content || null
133
+ };
134
+ if (message.toolCalls?.length) {
135
+ entry.tool_calls = message.toolCalls.map((call) => ({
136
+ id: call.id,
137
+ type: 'function',
138
+ function: { name: call.name, arguments: JSON.stringify(call.arguments) }
139
+ }));
140
+ }
141
+ if (providerId === 'deepseek' && message.reasoning)
142
+ entry.reasoning_content = message.reasoning;
143
+ output.push(entry);
144
+ }
145
+ else {
146
+ output.push({ role: 'tool', tool_call_id: message.toolCallId, content: message.content });
147
+ }
148
+ }
149
+ return output;
150
+ }
151
+ export function chatCompletionsUrl(baseURL) {
152
+ if (/\/chat\/completions\/?$/.test(baseURL))
153
+ return baseURL;
154
+ return `${baseURL.replace(/\/+$/, '')}/chat/completions`;
155
+ }
156
+ function parseJson(value) {
157
+ try {
158
+ return JSON.parse(value);
159
+ }
160
+ catch {
161
+ return undefined;
162
+ }
163
+ }
164
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/core/chat/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/chat/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const execFileAsync = promisify(execFile);
4
+ const COMMANDS = process.platform === 'darwin'
5
+ ? [{ command: 'pbpaste', args: [] }]
6
+ : process.platform === 'win32'
7
+ ? [{ command: 'powershell', args: ['-NoProfile', '-Command', 'Get-Clipboard -Raw'] }]
8
+ : [
9
+ { command: 'wl-paste', args: ['--no-newline'] },
10
+ { command: 'xclip', args: ['-selection', 'clipboard', '-o'] },
11
+ { command: 'xsel', args: ['--clipboard', '--output'] }
12
+ ];
13
+ /**
14
+ * Read the system clipboard without adding a native dependency. Returns
15
+ * undefined when no clipboard helper exists or the command fails.
16
+ */
17
+ export async function readClipboard() {
18
+ for (const candidate of COMMANDS) {
19
+ try {
20
+ const { stdout } = await execFileAsync(candidate.command, candidate.args, {
21
+ timeout: 1_500,
22
+ maxBuffer: 1_000_000,
23
+ encoding: 'utf8'
24
+ });
25
+ if (typeof stdout === 'string' && stdout.length > 0)
26
+ return stdout;
27
+ }
28
+ catch {
29
+ // Try the next helper.
30
+ }
31
+ }
32
+ return undefined;
33
+ }
34
+ //# sourceMappingURL=clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/core/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,KAAK,QAAQ;IAC3B,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC5B,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,oBAAoB,CAAC,EAAE,CAAC;QACrF,CAAC,CAAC;YACE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,cAAc,CAAC,EAAE;YAC/C,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;YAC7D,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE;SACvD,CAAC;AAEV;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE;gBACxE,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;YACH,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { streamChat } from './chat/index.js';
2
+ import { costForUsage } from './usage.js';
3
+ export async function compactConversation(options) {
4
+ const transcript = options.messages
5
+ .map((message) => {
6
+ if (message.role === 'tool')
7
+ return `TOOL ${message.name}:\n${message.content}`;
8
+ if (message.role === 'assistant') {
9
+ const tools = message.toolCalls?.map((call) => `${call.name}(${JSON.stringify(call.arguments)})`).join(', ');
10
+ return `ASSISTANT:\n${message.content}${tools ? `\nTOOL CALLS: ${tools}` : ''}`;
11
+ }
12
+ return `USER:\n${message.content}`;
13
+ })
14
+ .join('\n\n')
15
+ .slice(-120_000);
16
+ const result = await streamChat({
17
+ provider: options.provider,
18
+ model: options.model,
19
+ messages: [
20
+ {
21
+ role: 'user',
22
+ content: `Summarize this coding session so another engineer can continue the work with no other context. Preserve: the user's goals, decisions and constraints, files changed, important code locations, commands/tests run and their outcomes, open questions, and next steps. Be dense and specific. Use Markdown headings and bullets. Do not add commentary.\n\n<sessions>\n${transcript}\n</sessions>`
23
+ }
24
+ ],
25
+ system: 'You are a precise technical summarizer. Output only the summary.',
26
+ tools: [],
27
+ options: { signal: options.signal, maxTokens: 4096 },
28
+ callbacks: { onText: () => { }, onReasoning: () => { } }
29
+ });
30
+ return {
31
+ summary: result.text.trim() || 'Earlier conversation was compacted, but the summary was empty.',
32
+ usage: {
33
+ ...result.usage,
34
+ cost: costForUsage(options.model.meta, result.usage, options.provider.dialect),
35
+ requests: 1
36
+ }
37
+ };
38
+ }
39
+ //# sourceMappingURL=compact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../src/core/compact.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO1C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAKzC;IACC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ;SAChC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,QAAQ,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAChF,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7G,OAAO,eAAe,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClF,CAAC;QACD,OAAO,UAAU,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC;SACZ,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,yWAAyW,UAAU,eAAe;aAC5Y;SACF;QACD,MAAM,EAAE,kEAAkE;QAC1E,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACpD,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;KACvD,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,gEAAgE;QAC/F,KAAK,EAAE;YACL,GAAG,MAAM,CAAC,KAAK;YACf,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC9E,QAAQ,EAAE,CAAC;SACZ;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,211 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { parse, modify, applyEdits } from 'jsonc-parser';
3
+ import { z } from 'zod';
4
+ import { EFFORT_SETTINGS } from './effort.js';
5
+ import { SurfError } from './errors.js';
6
+ import { ensurePaths, getPaths, writeFileAtomic } from './paths.js';
7
+ const permissionMode = z.enum(['allow', 'ask', 'deny']);
8
+ const providerSettingsSchema = z.object({
9
+ apiKey: z.string().optional(),
10
+ baseURL: z.string().url().optional(),
11
+ headers: z.record(z.string(), z.string()).optional(),
12
+ dialect: z.enum(['openai', 'anthropic', 'google', 'azure', 'google-vertex']).optional(),
13
+ apiVersion: z.string().optional(),
14
+ deployment: z.string().optional(),
15
+ project: z.string().optional(),
16
+ location: z.string().optional(),
17
+ extraBody: z.record(z.string(), z.unknown()).optional(),
18
+ timeout: z.number().positive().optional(),
19
+ retries: z.number().int().min(0).max(10).optional(),
20
+ retryDelay: z.number().int().min(0).max(60_000).optional(),
21
+ keyless: z.boolean().optional()
22
+ });
23
+ const syncSchema = z.object({
24
+ url: z.string().url().optional(),
25
+ token: z.string().optional(),
26
+ enabled: z.boolean().default(false),
27
+ auto: z.boolean().default(false),
28
+ cursor: z.number().int().min(0).default(0),
29
+ lastSyncAt: z.number().optional(),
30
+ deviceId: z.string().optional()
31
+ });
32
+ const customProviderSchema = providerSettingsSchema.extend({
33
+ name: z.string().min(1),
34
+ env: z.array(z.string()).optional(),
35
+ doc: z.string().optional(),
36
+ models: z
37
+ .array(z.object({
38
+ id: z.string().min(1),
39
+ name: z.string().optional(),
40
+ context: z.number().positive().optional(),
41
+ output: z.number().positive().optional(),
42
+ tool_call: z.boolean().optional(),
43
+ reasoning: z.boolean().optional()
44
+ }))
45
+ .optional()
46
+ });
47
+ const agentWorkerSchema = z.object({
48
+ provider: z.string().min(1),
49
+ model: z.string().min(1)
50
+ });
51
+ const agentsSchema = z.object({
52
+ enabled: z.boolean().default(false),
53
+ workers: z.array(agentWorkerSchema).default([])
54
+ });
55
+ export const configSchema = z.object({
56
+ version: z.literal(1).default(1),
57
+ provider: z.string().optional(),
58
+ model: z.string().optional(),
59
+ theme: z.string().default('aurora'),
60
+ mode: z.enum(['build', 'plan']).default('build'),
61
+ permissions: z
62
+ .object({
63
+ read: permissionMode.default('allow'),
64
+ write: permissionMode.default('ask'),
65
+ shell: permissionMode.default('ask'),
66
+ fetch: permissionMode.default('allow')
67
+ })
68
+ .default({ read: 'allow', write: 'ask', shell: 'ask', fetch: 'allow' }),
69
+ maxSteps: z.number().int().min(1).max(200).default(40),
70
+ maxTokens: z.number().int().positive().optional(),
71
+ temperature: z.number().min(0).max(2).optional(),
72
+ effort: z.enum(EFFORT_SETTINGS).default('auto'),
73
+ showReasoning: z.boolean().default(false),
74
+ verboseTools: z.boolean().default(false),
75
+ streaming: z.boolean().default(false),
76
+ explorerWidth: z.number().int().min(24).max(80).default(34),
77
+ fullAccess: z.boolean().default(false),
78
+ agents: agentsSchema.default({ enabled: false, workers: [] }),
79
+ allowOutsideWorkspace: z.boolean().default(false),
80
+ providers: z.record(z.string(), providerSettingsSchema).default({}),
81
+ customProviders: z.record(z.string(), customProviderSchema).default({}),
82
+ sync: syncSchema.default({ enabled: false, auto: false, cursor: 0 })
83
+ });
84
+ export function defaultConfig() {
85
+ return configSchema.parse({});
86
+ }
87
+ export async function loadConfig() {
88
+ const paths = getPaths();
89
+ let raw;
90
+ try {
91
+ raw = await readFile(paths.configFile, 'utf8');
92
+ }
93
+ catch (error) {
94
+ if (error.code === 'ENOENT') {
95
+ return applyEnvOverrides(defaultConfig());
96
+ }
97
+ throw error;
98
+ }
99
+ const errors = [];
100
+ const parsed = parse(raw, errors, { allowTrailingComma: true, disallowComments: false });
101
+ if (errors.length > 0) {
102
+ throw new SurfError(`Could not parse ${paths.configFile}`, {
103
+ hint: 'Fix the JSONC syntax, or remove the file to start with defaults.'
104
+ });
105
+ }
106
+ const result = configSchema.safeParse(parsed ?? {});
107
+ if (!result.success) {
108
+ throw new SurfError(`Invalid config at ${paths.configFile}`, {
109
+ hint: result.error.issues.map((issue) => `${issue.path.join('.') || 'config'}: ${issue.message}`).join('\n')
110
+ });
111
+ }
112
+ return applyEnvOverrides(result.data);
113
+ }
114
+ function applyEnvOverrides(config) {
115
+ if (process.env.SURFCODE_PROVIDER)
116
+ config.provider = process.env.SURFCODE_PROVIDER;
117
+ if (process.env.SURFCODE_MODEL)
118
+ config.model = process.env.SURFCODE_MODEL;
119
+ if (process.env.SURFCODE_THEME)
120
+ config.theme = process.env.SURFCODE_THEME;
121
+ const syncUrl = process.env.SURFCODE_SYNC_URL?.trim();
122
+ const syncToken = process.env.SURFCODE_SYNC_TOKEN?.trim();
123
+ if (syncUrl)
124
+ config.sync.url = syncUrl;
125
+ if (syncToken)
126
+ config.sync.token = syncToken;
127
+ // Supplying both through the environment is enough to opt in, so ephemeral
128
+ // CI/container runs never need to write the bearer token to disk.
129
+ if (syncUrl && syncToken)
130
+ config.sync.enabled = true;
131
+ return config;
132
+ }
133
+ export async function saveConfig(config) {
134
+ await ensurePaths();
135
+ const paths = getPaths();
136
+ const result = configSchema.safeParse(config);
137
+ if (!result.success) {
138
+ throw new SurfError(`Refusing to write an invalid config: ${result.error.issues[0]?.message ?? 'unknown error'}`);
139
+ }
140
+ await writeFileAtomic(paths.configFile, `${JSON.stringify(result.data, null, 2)}\n`);
141
+ }
142
+ export async function updateConfig(values) {
143
+ await ensurePaths();
144
+ const paths = getPaths();
145
+ let raw;
146
+ try {
147
+ raw = await readFile(paths.configFile, 'utf8');
148
+ }
149
+ catch (error) {
150
+ if (error.code === 'ENOENT')
151
+ raw = '{}\n';
152
+ else
153
+ throw error;
154
+ }
155
+ let updated = raw;
156
+ for (const [key, value] of Object.entries(values)) {
157
+ if (value === undefined)
158
+ continue;
159
+ updated = applyEdits(updated, modify(updated, [key], value, {
160
+ formattingOptions: { insertSpaces: true, tabSize: 2, eol: '\n' }
161
+ }));
162
+ }
163
+ if (!updated.endsWith('\n'))
164
+ updated += '\n';
165
+ const parsed = configSchema.safeParse(parse(updated) ?? {});
166
+ if (!parsed.success) {
167
+ throw new SurfError(`Refusing to write invalid config: ${parsed.error.issues[0]?.message ?? 'unknown error'}`);
168
+ }
169
+ await writeFileAtomic(paths.configFile, updated);
170
+ return loadConfig();
171
+ }
172
+ /** Write a single value at a dot-separated path while preserving JSONC comments. */
173
+ export async function updateConfigPath(path, value) {
174
+ await ensurePaths();
175
+ const paths = getPaths();
176
+ let raw;
177
+ try {
178
+ raw = await readFile(paths.configFile, 'utf8');
179
+ }
180
+ catch (error) {
181
+ if (error.code === 'ENOENT')
182
+ raw = '{}\n';
183
+ else
184
+ throw error;
185
+ }
186
+ let updated = applyEdits(raw, modify(raw, path, value, {
187
+ formattingOptions: { insertSpaces: true, tabSize: 2, eol: '\n' }
188
+ }));
189
+ if (!updated.endsWith('\n'))
190
+ updated += '\n';
191
+ const parsed = configSchema.safeParse(parse(updated) ?? {});
192
+ if (!parsed.success) {
193
+ const issue = parsed.error.issues[0];
194
+ throw new SurfError(`Refusing to write invalid config: ${issue ? `${issue.path.join('.') || 'config'}: ${issue.message}` : 'unknown error'}`);
195
+ }
196
+ await writeFileAtomic(paths.configFile, updated);
197
+ return loadConfig();
198
+ }
199
+ export function readConfigValue(config, path) {
200
+ let current = config;
201
+ for (const segment of path) {
202
+ if (!current || typeof current !== 'object')
203
+ return undefined;
204
+ if (Array.isArray(current) && /^\d+$/.test(segment))
205
+ current = current[Number(segment)];
206
+ else
207
+ current = current[segment];
208
+ }
209
+ return current;
210
+ }
211
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}