@vetala/vetala 0.1.0-dev → 0.2.1-dev

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 (73) hide show
  1. package/README.md +31 -1
  2. package/dist/src/agent.d.ts +12 -1
  3. package/dist/src/agent.js +92 -14
  4. package/dist/src/agent.js.map +1 -1
  5. package/dist/src/app-meta.d.ts +3 -0
  6. package/dist/src/app-meta.js +4 -0
  7. package/dist/src/app-meta.js.map +1 -0
  8. package/dist/src/cli.js +28 -10
  9. package/dist/src/cli.js.map +1 -1
  10. package/dist/src/config.d.ts +10 -1
  11. package/dist/src/config.js +160 -67
  12. package/dist/src/config.js.map +1 -1
  13. package/dist/src/edit-history.d.ts +4 -0
  14. package/dist/src/edit-history.js +77 -0
  15. package/dist/src/edit-history.js.map +1 -0
  16. package/dist/src/edits/diff.d.ts +1 -0
  17. package/dist/src/edits/diff.js +176 -0
  18. package/dist/src/edits/diff.js.map +1 -0
  19. package/dist/src/ink/command-suggestions.js +1 -0
  20. package/dist/src/ink/command-suggestions.js.map +1 -1
  21. package/dist/src/ink/ink-terminal-ui.d.ts +2 -2
  22. package/dist/src/ink/ink-terminal-ui.js +7 -3
  23. package/dist/src/ink/ink-terminal-ui.js.map +1 -1
  24. package/dist/src/ink/repl-app.d.ts +3 -2
  25. package/dist/src/ink/repl-app.js +419 -111
  26. package/dist/src/ink/repl-app.js.map +1 -1
  27. package/dist/src/process-utils.d.ts +1 -0
  28. package/dist/src/process-utils.js +3 -1
  29. package/dist/src/process-utils.js.map +1 -1
  30. package/dist/src/providers/catalog.d.ts +29 -0
  31. package/dist/src/providers/catalog.js +121 -0
  32. package/dist/src/providers/catalog.js.map +1 -0
  33. package/dist/src/providers/index.d.ts +9 -0
  34. package/dist/src/providers/index.js +11 -0
  35. package/dist/src/providers/index.js.map +1 -0
  36. package/dist/src/providers/openai-compatible-client.d.ts +23 -0
  37. package/dist/src/providers/openai-compatible-client.js +183 -0
  38. package/dist/src/providers/openai-compatible-client.js.map +1 -0
  39. package/dist/src/repl.d.ts +2 -1
  40. package/dist/src/repl.js +1 -1
  41. package/dist/src/repl.js.map +1 -1
  42. package/dist/src/runtime-profile.d.ts +16 -0
  43. package/dist/src/runtime-profile.js +112 -0
  44. package/dist/src/runtime-profile.js.map +1 -0
  45. package/dist/src/search-provider.d.ts +6 -1
  46. package/dist/src/search-provider.js +257 -0
  47. package/dist/src/search-provider.js.map +1 -1
  48. package/dist/src/session-store.d.ts +5 -3
  49. package/dist/src/session-store.js +75 -4
  50. package/dist/src/session-store.js.map +1 -1
  51. package/dist/src/terminal-ui.d.ts +3 -1
  52. package/dist/src/terminal-ui.js +13 -3
  53. package/dist/src/terminal-ui.js.map +1 -1
  54. package/dist/src/tools/filesystem.js +141 -143
  55. package/dist/src/tools/filesystem.js.map +1 -1
  56. package/dist/src/tools/index.js +2 -0
  57. package/dist/src/tools/index.js.map +1 -1
  58. package/dist/src/tools/repo-search.d.ts +23 -0
  59. package/dist/src/tools/repo-search.js +221 -0
  60. package/dist/src/tools/repo-search.js.map +1 -0
  61. package/dist/src/tools/shell.js +26 -3
  62. package/dist/src/tools/shell.js.map +1 -1
  63. package/dist/src/tools/timing.d.ts +2 -0
  64. package/dist/src/tools/timing.js +58 -0
  65. package/dist/src/tools/timing.js.map +1 -0
  66. package/dist/src/tools/web.js +70 -5
  67. package/dist/src/tools/web.js.map +1 -1
  68. package/dist/src/types.d.ts +89 -17
  69. package/dist/src/update-notifier.d.ts +41 -0
  70. package/dist/src/update-notifier.js +145 -0
  71. package/dist/src/update-notifier.js.map +1 -0
  72. package/package.json +13 -2
  73. package/terminal.png +0 -0
@@ -1,38 +1,36 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { readFile, writeFile } from "node:fs/promises";
3
+ import { getProviderDefinition, listProviders, resolveProviderName } from "./providers/index.js";
4
+ import { normalizeSearchProviderName } from "./search-provider.js";
3
5
  import { ensureAppPaths } from "./xdg.js";
4
- const DEFAULT_BASE_URL = "https://api.sarvam.ai";
5
- const DEFAULT_MODEL = "sarvam-105b";
6
+ const DEFAULT_PROVIDER = "sarvam";
7
+ const DEFAULT_SEARCH_PROVIDER = "duckduckgo";
6
8
  export async function loadConfig() {
7
9
  const paths = await ensureAppPaths();
8
10
  const fileConfig = await readFileConfig(paths.configFile);
9
- const envAuth = readEnvAuth();
10
- const savedAuth = normalizeSavedAuth(fileConfig.savedAuth);
11
- const savedAuthValue = savedAuth?.value;
12
- const authValue = envAuth.authValue ?? savedAuthValue;
13
- const authMode = envAuth.authMode ?? savedAuth?.mode ?? "missing";
14
- const authFingerprint = envAuth.authValue
15
- ? sha256(envAuth.authValue)
16
- : savedAuth?.sha256;
17
- const authSource = envAuth.authValue
18
- ? "env"
19
- : savedAuthValue
20
- ? "stored"
21
- : savedAuth
22
- ? "stored_hash"
23
- : "missing";
11
+ const defaultProvider = resolveProviderName(process.env.VETALA_PROVIDER ?? process.env.TATTVA_PROVIDER) ??
12
+ normalizeProviderName(fileConfig.defaultProvider) ??
13
+ DEFAULT_PROVIDER;
14
+ const providers = Object.fromEntries(listProviders().map((provider) => [provider.name, resolveProviderRuntimeConfig(provider.name, fileConfig)]));
15
+ const active = providers[defaultProvider];
24
16
  return {
25
- authMode,
26
- authValue,
27
- authFingerprint,
28
- authSource,
29
- baseUrl: process.env.SARVAM_BASE_URL ?? fileConfig.baseUrl ?? DEFAULT_BASE_URL,
30
- defaultModel: process.env.SARVAM_MODEL ?? fileConfig.defaultModel ?? DEFAULT_MODEL,
31
- reasoningEffort: normalizeReasoningEffort(process.env.SARVAM_REASONING_EFFORT) ?? normalizeReasoningEffort(fileConfig.reasoningEffort) ?? null,
17
+ defaultProvider,
18
+ authMode: active.authMode,
19
+ authValue: active.authValue,
20
+ authFingerprint: active.authFingerprint,
21
+ authSource: active.authSource,
22
+ baseUrl: active.baseUrl,
23
+ defaultModel: active.defaultModel,
24
+ reasoningEffort: normalizeReasoningEffort(process.env.SARVAM_REASONING_EFFORT) ??
25
+ normalizeReasoningEffort(fileConfig.reasoningEffort) ??
26
+ null,
32
27
  configPath: paths.configFile,
33
28
  dataPath: paths.dataDir,
34
- searchProviderName: fileConfig.searchProvider?.name ?? "disabled",
35
- trustedWorkspaces: normalizeTrustedWorkspaces(fileConfig.trustedWorkspaces)
29
+ searchProviderName: normalizeSearchProviderName(process.env.VETALA_SEARCH_PROVIDER ?? process.env.TATTVA_SEARCH_PROVIDER) ??
30
+ normalizeSearchProviderName(fileConfig.searchProvider?.name) ??
31
+ DEFAULT_SEARCH_PROVIDER,
32
+ trustedWorkspaces: normalizeTrustedWorkspaces(fileConfig.trustedWorkspaces),
33
+ providers
36
34
  };
37
35
  }
38
36
  export async function saveFileConfig(nextConfig) {
@@ -40,42 +38,54 @@ export async function saveFileConfig(nextConfig) {
40
38
  await writeFile(paths.configFile, `${JSON.stringify(nextConfig, null, 2)}\n`, "utf8");
41
39
  }
42
40
  export async function saveDefaultModel(model) {
43
- await updateFileConfig((current) => ({
44
- ...current,
45
- defaultModel: model
46
- }));
41
+ await saveProviderDefaults("sarvam", model);
47
42
  }
48
43
  export async function saveChatDefaults(model, reasoningEffort) {
49
- await updateFileConfig((current) => ({
50
- ...current,
51
- defaultModel: model,
52
- reasoningEffort
53
- }));
44
+ await saveProviderDefaults("sarvam", model, { reasoningEffort });
45
+ }
46
+ export async function saveProviderDefaults(provider, model, options = {}) {
47
+ await updateFileConfig((current) => {
48
+ const next = setProviderFileConfig(current, provider, (profile) => ({
49
+ ...profile,
50
+ defaultModel: model
51
+ }));
52
+ return {
53
+ ...next,
54
+ defaultProvider: provider,
55
+ ...(options.reasoningEffort !== undefined ? { reasoningEffort: options.reasoningEffort } : {})
56
+ };
57
+ });
54
58
  }
55
59
  export async function saveAuthFingerprint(mode, authValue) {
56
- await updateFileConfig((current) => ({
57
- ...current,
60
+ await saveProviderAuthFingerprint("sarvam", mode, authValue);
61
+ }
62
+ export async function saveProviderAuthFingerprint(provider, mode, authValue) {
63
+ await updateFileConfig((current) => setProviderFileConfig(current, provider, (profile) => ({
64
+ ...profile,
58
65
  savedAuth: {
59
66
  mode,
60
67
  sha256: sha256(authValue)
61
68
  }
62
- }));
69
+ })));
63
70
  }
64
71
  export async function savePersistentAuth(mode, authValue) {
65
- await updateFileConfig((current) => ({
66
- ...current,
72
+ await saveProviderPersistentAuth("sarvam", mode, authValue);
73
+ }
74
+ export async function saveProviderPersistentAuth(provider, mode, authValue) {
75
+ await updateFileConfig((current) => setProviderFileConfig(current, provider, (profile) => ({
76
+ ...profile,
67
77
  savedAuth: {
68
78
  mode,
69
79
  sha256: sha256(authValue),
70
80
  value: authValue
71
81
  }
72
- }));
82
+ })));
73
83
  }
74
84
  export async function clearSavedAuth() {
75
- await updateFileConfig((current) => {
76
- const { savedAuth: _savedAuth, ...rest } = current;
77
- return rest;
78
- });
85
+ await clearProviderSavedAuth("sarvam");
86
+ }
87
+ export async function clearProviderSavedAuth(provider) {
88
+ await updateFileConfig((current) => setProviderFileConfig(current, provider, (profile) => removeSavedAuth(profile)));
79
89
  }
80
90
  export async function trustWorkspace(workspaceRoot) {
81
91
  await updateFileConfig((current) => {
@@ -94,19 +104,33 @@ export function isWorkspaceTrusted(config, workspaceRoot) {
94
104
  return config.trustedWorkspaces.includes(workspaceRoot);
95
105
  }
96
106
  export function withSessionAuth(config, mode, authValue) {
97
- return withResolvedAuth(config, mode, authValue, "session");
107
+ return withProviderSessionAuth(config, "sarvam", mode, authValue);
108
+ }
109
+ export function withProviderSessionAuth(config, provider, mode, authValue) {
110
+ return withResolvedAuth(config, provider, mode, authValue, "session");
98
111
  }
99
112
  export function withStoredAuth(config, mode, authValue) {
100
- return withResolvedAuth(config, mode, authValue, "stored");
113
+ return withProviderStoredAuth(config, "sarvam", mode, authValue);
101
114
  }
102
- function withResolvedAuth(config, mode, authValue, authSource) {
103
- return {
104
- ...config,
115
+ export function withProviderStoredAuth(config, provider, mode, authValue) {
116
+ return withResolvedAuth(config, provider, mode, authValue, "stored");
117
+ }
118
+ export function providerConfigFor(config, provider) {
119
+ return config.providers[provider];
120
+ }
121
+ function withResolvedAuth(config, provider, mode, authValue, authSource) {
122
+ const profile = {
123
+ ...config.providers[provider],
105
124
  authMode: mode,
106
125
  authValue,
107
126
  authFingerprint: sha256(authValue),
108
127
  authSource
109
128
  };
129
+ const providers = {
130
+ ...config.providers,
131
+ [provider]: profile
132
+ };
133
+ return applyActiveProvider(config, providers, config.defaultProvider);
110
134
  }
111
135
  async function readFileConfig(configPath) {
112
136
  try {
@@ -126,6 +150,9 @@ function isMissingFile(error) {
126
150
  function normalizeTrustedWorkspaces(value) {
127
151
  return Array.isArray(value) ? value.filter((item) => typeof item === "string" && item.length > 0) : [];
128
152
  }
153
+ function normalizeProviderName(value) {
154
+ return typeof value === "string" ? resolveProviderName(value) : undefined;
155
+ }
129
156
  function normalizeSavedAuth(value) {
130
157
  if (value &&
131
158
  (value.mode === "bearer" || value.mode === "subscription_key") &&
@@ -147,28 +174,73 @@ function normalizeSavedAuth(value) {
147
174
  function normalizeReasoningEffort(value) {
148
175
  return value === "low" || value === "medium" || value === "high" ? value : undefined;
149
176
  }
150
- function readEnvAuth() {
151
- if (process.env.SARVAM_TOKEN) {
152
- return {
153
- authMode: "bearer",
154
- authValue: process.env.SARVAM_TOKEN
155
- };
156
- }
157
- if (process.env.SARVAM_API_KEY) {
158
- return {
159
- authMode: "subscription_key",
160
- authValue: process.env.SARVAM_API_KEY
161
- };
177
+ function resolveProviderRuntimeConfig(provider, fileConfig) {
178
+ const definition = getProviderDefinition(provider);
179
+ const providerFile = providerFileConfig(fileConfig, provider);
180
+ const env = definition.readEnv(process.env);
181
+ const savedAuth = normalizeSavedAuth(providerFile.savedAuth);
182
+ const savedAuthValue = savedAuth?.value;
183
+ const authValue = env.authValue ?? savedAuthValue;
184
+ const authMode = env.authMode ?? savedAuth?.mode ?? "missing";
185
+ const authFingerprint = env.authValue ? sha256(env.authValue) : savedAuth?.sha256;
186
+ const authSource = env.authValue
187
+ ? "env"
188
+ : savedAuthValue
189
+ ? "stored"
190
+ : savedAuth
191
+ ? "stored_hash"
192
+ : "missing";
193
+ return {
194
+ name: provider,
195
+ baseUrl: env.baseUrl ?? providerFile.baseUrl ?? definition.defaultBaseUrl,
196
+ defaultModel: env.defaultModel ?? providerFile.defaultModel ?? definition.defaultModel,
197
+ authMode,
198
+ authValue,
199
+ authFingerprint,
200
+ authSource
201
+ };
202
+ }
203
+ function providerFileConfig(fileConfig, provider) {
204
+ const explicit = compactProviderFileConfig(fileConfig.providers?.[provider] ?? {});
205
+ if (provider !== "sarvam") {
206
+ return explicit;
162
207
  }
163
- if (process.env.SARVAM_SUBSCRIPTION_KEY) {
208
+ return compactProviderFileConfig({
209
+ ...(explicit.defaultModel ?? fileConfig.defaultModel
210
+ ? { defaultModel: explicit.defaultModel ?? fileConfig.defaultModel }
211
+ : {}),
212
+ ...(explicit.baseUrl ?? fileConfig.baseUrl
213
+ ? { baseUrl: explicit.baseUrl ?? fileConfig.baseUrl }
214
+ : {}),
215
+ ...(explicit.savedAuth ?? fileConfig.savedAuth
216
+ ? { savedAuth: explicit.savedAuth ?? fileConfig.savedAuth }
217
+ : {})
218
+ });
219
+ }
220
+ function removeSavedAuth(profile) {
221
+ const { savedAuth: _savedAuth, ...rest } = profile;
222
+ return rest;
223
+ }
224
+ function setProviderFileConfig(current, provider, mutate) {
225
+ const currentProviders = current.providers ?? {};
226
+ const nextProfile = mutate(providerFileConfig(current, provider));
227
+ const nextProviders = {
228
+ ...currentProviders,
229
+ [provider]: nextProfile
230
+ };
231
+ if (provider !== "sarvam") {
164
232
  return {
165
- authMode: "subscription_key",
166
- authValue: process.env.SARVAM_SUBSCRIPTION_KEY
233
+ ...current,
234
+ providers: nextProviders
167
235
  };
168
236
  }
237
+ const { defaultModel: _legacyDefaultModel, baseUrl: _legacyBaseUrl, savedAuth: _legacySavedAuth, ...rest } = current;
169
238
  return {
170
- authMode: undefined,
171
- authValue: undefined
239
+ ...rest,
240
+ ...(nextProfile.defaultModel ? { defaultModel: nextProfile.defaultModel } : {}),
241
+ ...(nextProfile.baseUrl ? { baseUrl: nextProfile.baseUrl } : {}),
242
+ ...(nextProfile.savedAuth ? { savedAuth: nextProfile.savedAuth } : {}),
243
+ providers: nextProviders
172
244
  };
173
245
  }
174
246
  async function updateFileConfig(mutator) {
@@ -177,7 +249,28 @@ async function updateFileConfig(mutator) {
177
249
  const next = mutator(current);
178
250
  await saveFileConfig(next);
179
251
  }
252
+ function applyActiveProvider(current, providers, defaultProvider) {
253
+ const active = providers[defaultProvider];
254
+ return {
255
+ ...current,
256
+ defaultProvider,
257
+ providers,
258
+ authMode: active.authMode,
259
+ authValue: active.authValue,
260
+ authFingerprint: active.authFingerprint,
261
+ authSource: active.authSource,
262
+ baseUrl: active.baseUrl,
263
+ defaultModel: active.defaultModel
264
+ };
265
+ }
180
266
  function sha256(value) {
181
267
  return createHash("sha256").update(value).digest("hex");
182
268
  }
269
+ function compactProviderFileConfig(profile) {
270
+ return {
271
+ ...(profile.defaultModel ? { defaultModel: profile.defaultModel } : {}),
272
+ ...(profile.baseUrl ? { baseUrl: profile.baseUrl } : {}),
273
+ ...(profile.savedAuth ? { savedAuth: profile.savedAuth } : {})
274
+ };
275
+ }
183
276
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACjD,MAAM,aAAa,GAAG,aAAa,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,SAAS,EAAE,KAAK,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS,EAAE,IAAI,IAAI,SAAS,CAAC;IAClE,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS;QACvC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAC3B,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC;IACtB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS;QAClC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,cAAc;YACd,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,QAAQ;QACR,SAAS;QACT,eAAe;QACf,UAAU;QACV,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,OAAO,IAAI,gBAAgB;QAC9E,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,IAAI,aAAa;QAClF,eAAe,EAAE,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,wBAAwB,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,IAAI;QAC9I,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,kBAAkB,EAAE,UAAU,CAAC,cAAc,EAAE,IAAI,IAAI,UAAU;QACjE,iBAAiB,EAAE,0BAA0B,CAAC,UAAU,CAAC,iBAAiB,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAsB;IACzD,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa;IAClD,MAAM,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnC,GAAG,OAAO;QACV,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,eAAuC;IAEvC,MAAM,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnC,GAAG,OAAO;QACV,YAAY,EAAE,KAAK;QACnB,eAAe;KAChB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAmC,EAAE,SAAiB;IAC9F,MAAM,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnC,GAAG,OAAO;QACV,SAAS,EAAE;YACT,IAAI;YACJ,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;SAC1B;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAmC,EAAE,SAAiB;IAC7F,MAAM,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnC,GAAG,OAAO;QACV,SAAS,EAAE;YACT,IAAI;YACJ,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;YACzB,KAAK,EAAE,SAAS;SACjB;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE;QACjC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,aAAqB;IACxD,MAAM,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEtE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO;YACL,GAAG,OAAO;YACV,iBAAiB,EAAE,OAAO;SAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAuB,EAAE,aAAqB;IAC/E,OAAO,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAuB,EACvB,IAAmC,EACnC,SAAiB;IAEjB,OAAO,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAuB,EACvB,IAAmC,EACnC,SAAiB;IAEjB,OAAO,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAuB,EACvB,IAAmC,EACnC,SAAiB,EACjB,UAAgC;IAEhC,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,IAAI;QACd,SAAS;QACT,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC;QAClC,UAAU;KACX,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnG,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA2B;IAC7D,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA8B;IACxD,IACE,KAAK;QACL,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAC9D,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EACvB,CAAC;QACD,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAC9D,CAAC,CAAC;gBACE,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;IACR,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC;AAED,SAAS,WAAW;IAIlB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;SACpC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE,kBAAkB;YAC5B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;SACtC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QACxC,OAAO;YACL,QAAQ,EAAE,kBAAkB;YAC5B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;SAC/C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE,SAAS;KACrB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAA4C;IAC1E,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { SessionStore } from "./session-store.js";
2
+ import type { ApprovalRequest, FileEdit, SessionState, ToolResult } from "./types.js";
3
+ export declare function latestUndoableEdit(session: SessionState): FileEdit | null;
4
+ export declare function undoLastEdit(session: SessionState, store: SessionStore, requestApproval: (request: ApprovalRequest) => Promise<boolean>): Promise<ToolResult>;
@@ -0,0 +1,77 @@
1
+ import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { buildDiffPreview } from "./edits/diff.js";
4
+ export function latestUndoableEdit(session) {
5
+ for (let index = session.edits.length - 1; index >= 0; index -= 1) {
6
+ const candidate = session.edits[index];
7
+ if (candidate && !candidate.revertedAt) {
8
+ return candidate;
9
+ }
10
+ }
11
+ return null;
12
+ }
13
+ export async function undoLastEdit(session, store, requestApproval) {
14
+ const edit = latestUndoableEdit(session);
15
+ if (!edit) {
16
+ return denied("No undoable edits are recorded in this session.");
17
+ }
18
+ const currentContent = await readCurrentContent(edit.path);
19
+ if (currentContent !== edit.afterContent) {
20
+ return denied(`Cannot undo ${edit.path} because the file no longer matches the last recorded edit. Read or inspect the file before changing it again.`);
21
+ }
22
+ const approved = await requestApproval({
23
+ kind: "write_file",
24
+ key: `undo_edit:${edit.id}`,
25
+ label: [
26
+ "Allow undoing the last tracked edit?",
27
+ `path: ${edit.path}`,
28
+ `summary: ${edit.summary}`,
29
+ "",
30
+ buildDiffPreview(edit.path, currentContent, edit.beforeContent)
31
+ ].join("\n")
32
+ });
33
+ if (!approved) {
34
+ return denied(`Undo denied for ${edit.path}`);
35
+ }
36
+ if (edit.beforeContent === null) {
37
+ await rm(edit.path, { force: true });
38
+ }
39
+ else {
40
+ await mkdir(path.dirname(edit.path), { recursive: true });
41
+ await writeFile(edit.path, edit.beforeContent, "utf8");
42
+ }
43
+ await store.markEditReverted(session, edit.id);
44
+ return {
45
+ summary: `Reverted ${edit.path}`,
46
+ content: [
47
+ `Reverted the last tracked edit in ${edit.path}.`,
48
+ "",
49
+ buildDiffPreview(edit.path, currentContent, edit.beforeContent)
50
+ ].join("\n"),
51
+ isError: false,
52
+ referencedFiles: [edit.path]
53
+ };
54
+ }
55
+ async function readCurrentContent(target) {
56
+ try {
57
+ const targetStats = await stat(target);
58
+ if (!targetStats.isFile()) {
59
+ return null;
60
+ }
61
+ return await readFile(target, "utf8");
62
+ }
63
+ catch (error) {
64
+ if (error !== null && typeof error === "object" && "code" in error && error.code === "ENOENT") {
65
+ return null;
66
+ }
67
+ throw error;
68
+ }
69
+ }
70
+ function denied(message) {
71
+ return {
72
+ summary: message,
73
+ content: message,
74
+ isError: true
75
+ };
76
+ }
77
+ //# sourceMappingURL=edit-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-history.js","sourceRoot":"","sources":["../../src/edit-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function buildDiffPreview(filePath: string, beforeContent: string | null, afterContent: string | null, contextLines?: number): string;
@@ -0,0 +1,176 @@
1
+ const DEFAULT_CONTEXT_LINES = 2;
2
+ const MAX_PREVIEW_LINES = 64;
3
+ const MAX_LINE_PRODUCT = 120_000;
4
+ export function buildDiffPreview(filePath, beforeContent, afterContent, contextLines = DEFAULT_CONTEXT_LINES) {
5
+ const beforeLines = splitLines(beforeContent);
6
+ const afterLines = splitLines(afterContent);
7
+ if (beforeContent === afterContent) {
8
+ return `No visible changes for ${filePath}.`;
9
+ }
10
+ const ops = beforeLines.length * afterLines.length > MAX_LINE_PRODUCT
11
+ ? fallbackOps(beforeLines, afterLines)
12
+ : lcsDiff(beforeLines, afterLines);
13
+ const stats = summarizeOps(ops);
14
+ const hunks = renderPreviewHunks(ops, contextLines, MAX_PREVIEW_LINES);
15
+ return [
16
+ `--- ${beforeContent === null ? "/dev/null" : filePath}`,
17
+ `+++ ${afterContent === null ? "/dev/null" : filePath}`,
18
+ `changes: +${stats.added} -${stats.removed}`,
19
+ ...hunks
20
+ ].join("\n");
21
+ }
22
+ function splitLines(content) {
23
+ if (content === null || content.length === 0) {
24
+ return [];
25
+ }
26
+ const normalized = content.replace(/\r\n/g, "\n");
27
+ const lines = normalized.split("\n");
28
+ return lines.at(-1) === "" ? lines.slice(0, -1) : lines;
29
+ }
30
+ function summarizeOps(ops) {
31
+ let added = 0;
32
+ let removed = 0;
33
+ for (const op of ops) {
34
+ if (op.type === "add") {
35
+ added += 1;
36
+ }
37
+ else if (op.type === "remove") {
38
+ removed += 1;
39
+ }
40
+ }
41
+ return { added, removed };
42
+ }
43
+ function renderPreviewHunks(ops, contextLines, maxLines) {
44
+ const hunks = [];
45
+ const ranges = collectHunkRanges(ops, contextLines);
46
+ let renderedLines = 0;
47
+ for (const range of ranges) {
48
+ if (hunks.length > 0) {
49
+ hunks.push("...");
50
+ renderedLines += 1;
51
+ }
52
+ for (let index = range.start; index <= range.end; index += 1) {
53
+ const op = ops[index];
54
+ if (!op) {
55
+ continue;
56
+ }
57
+ hunks.push(prefixLine(op));
58
+ renderedLines += 1;
59
+ if (renderedLines >= maxLines) {
60
+ hunks.push("... (diff preview truncated)");
61
+ return hunks;
62
+ }
63
+ }
64
+ }
65
+ return hunks.length > 0 ? hunks : ["... (unable to render diff preview)"];
66
+ }
67
+ function collectHunkRanges(ops, contextLines) {
68
+ const ranges = [];
69
+ for (let index = 0; index < ops.length; index += 1) {
70
+ if (ops[index]?.type === "equal") {
71
+ continue;
72
+ }
73
+ const nextRange = {
74
+ start: Math.max(0, index - contextLines),
75
+ end: Math.min(ops.length - 1, index + contextLines)
76
+ };
77
+ const previous = ranges.at(-1);
78
+ if (previous && nextRange.start <= previous.end + 1) {
79
+ previous.end = Math.max(previous.end, nextRange.end);
80
+ continue;
81
+ }
82
+ ranges.push(nextRange);
83
+ }
84
+ return ranges;
85
+ }
86
+ function prefixLine(op) {
87
+ switch (op.type) {
88
+ case "add":
89
+ return `+ ${op.line}`;
90
+ case "remove":
91
+ return `- ${op.line}`;
92
+ case "equal":
93
+ return ` ${op.line}`;
94
+ }
95
+ }
96
+ function fallbackOps(beforeLines, afterLines) {
97
+ const prefix = commonPrefixLength(beforeLines, afterLines);
98
+ const suffix = commonSuffixLength(beforeLines, afterLines, prefix);
99
+ const ops = [];
100
+ for (const line of beforeLines.slice(0, prefix)) {
101
+ ops.push({ type: "equal", line });
102
+ }
103
+ for (const line of beforeLines.slice(prefix, beforeLines.length - suffix)) {
104
+ ops.push({ type: "remove", line });
105
+ }
106
+ for (const line of afterLines.slice(prefix, afterLines.length - suffix)) {
107
+ ops.push({ type: "add", line });
108
+ }
109
+ for (const line of beforeLines.slice(beforeLines.length - suffix)) {
110
+ ops.push({ type: "equal", line });
111
+ }
112
+ return ops;
113
+ }
114
+ function commonPrefixLength(left, right) {
115
+ let index = 0;
116
+ while (index < left.length && index < right.length && left[index] === right[index]) {
117
+ index += 1;
118
+ }
119
+ return index;
120
+ }
121
+ function commonSuffixLength(left, right, prefix) {
122
+ let index = 0;
123
+ while (left.length - index - 1 >= prefix &&
124
+ right.length - index - 1 >= prefix &&
125
+ left[left.length - index - 1] === right[right.length - index - 1]) {
126
+ index += 1;
127
+ }
128
+ return index;
129
+ }
130
+ function lcsDiff(beforeLines, afterLines) {
131
+ const matrix = buildLcsMatrix(beforeLines, afterLines);
132
+ const ops = [];
133
+ let leftIndex = beforeLines.length;
134
+ let rightIndex = afterLines.length;
135
+ while (leftIndex > 0 && rightIndex > 0) {
136
+ if (beforeLines[leftIndex - 1] === afterLines[rightIndex - 1]) {
137
+ ops.push({ type: "equal", line: beforeLines[leftIndex - 1] ?? "" });
138
+ leftIndex -= 1;
139
+ rightIndex -= 1;
140
+ continue;
141
+ }
142
+ if ((matrix[leftIndex - 1]?.[rightIndex] ?? 0) >= (matrix[leftIndex]?.[rightIndex - 1] ?? 0)) {
143
+ ops.push({ type: "remove", line: beforeLines[leftIndex - 1] ?? "" });
144
+ leftIndex -= 1;
145
+ }
146
+ else {
147
+ ops.push({ type: "add", line: afterLines[rightIndex - 1] ?? "" });
148
+ rightIndex -= 1;
149
+ }
150
+ }
151
+ while (leftIndex > 0) {
152
+ ops.push({ type: "remove", line: beforeLines[leftIndex - 1] ?? "" });
153
+ leftIndex -= 1;
154
+ }
155
+ while (rightIndex > 0) {
156
+ ops.push({ type: "add", line: afterLines[rightIndex - 1] ?? "" });
157
+ rightIndex -= 1;
158
+ }
159
+ return ops.reverse();
160
+ }
161
+ function buildLcsMatrix(beforeLines, afterLines) {
162
+ const matrix = Array.from({ length: beforeLines.length + 1 }, () => Array(afterLines.length + 1).fill(0));
163
+ for (let leftIndex = 1; leftIndex <= beforeLines.length; leftIndex += 1) {
164
+ const row = matrix[leftIndex];
165
+ if (!row) {
166
+ continue;
167
+ }
168
+ for (let rightIndex = 1; rightIndex <= afterLines.length; rightIndex += 1) {
169
+ row[rightIndex] = beforeLines[leftIndex - 1] === afterLines[rightIndex - 1]
170
+ ? (matrix[leftIndex - 1]?.[rightIndex - 1] ?? 0) + 1
171
+ : Math.max(matrix[leftIndex - 1]?.[rightIndex] ?? 0, matrix[leftIndex]?.[rightIndex - 1] ?? 0);
172
+ }
173
+ }
174
+ return matrix;
175
+ }
176
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/edits/diff.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  const ROOT_COMMANDS = [
2
2
  { name: "help", completion: "/help", detail: "Show known commands" },
3
3
  { name: "model", completion: "/model", detail: "Model, reasoning, and auth settings" },
4
+ { name: "undo", completion: "/undo", detail: "Revert the last tracked file edit" },
4
5
  { name: "skill", completion: "/skill", detail: "List, pin, inspect, and read local skills", aliases: ["skills"] },
5
6
  { name: "tools", completion: "/tools", detail: "List available tools" },
6
7
  { name: "history", completion: "/history", detail: "Show recent message history" },