atom-lite 0.1.0 → 0.5.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 (169) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +58 -10
  3. package/dist/agent/loop.d.ts +11 -0
  4. package/dist/agent/loop.js +238 -47
  5. package/dist/agent/loop.js.map +1 -1
  6. package/dist/agent/model-turn.d.ts +37 -0
  7. package/dist/agent/model-turn.js +53 -0
  8. package/dist/agent/model-turn.js.map +1 -0
  9. package/dist/agent/turn-recorder.d.ts +33 -0
  10. package/dist/agent/turn-recorder.js +74 -0
  11. package/dist/agent/turn-recorder.js.map +1 -0
  12. package/dist/agent/types.d.ts +4 -0
  13. package/dist/cli/activity.d.ts +45 -0
  14. package/dist/cli/activity.js +141 -0
  15. package/dist/cli/activity.js.map +1 -0
  16. package/dist/cli/app.js +1234 -378
  17. package/dist/cli/app.js.map +1 -1
  18. package/dist/cli/approval-prompt.d.ts +24 -0
  19. package/dist/cli/approval-prompt.js +82 -0
  20. package/dist/cli/approval-prompt.js.map +1 -0
  21. package/dist/cli/banner.d.ts +5 -1
  22. package/dist/cli/banner.js +10 -4
  23. package/dist/cli/banner.js.map +1 -1
  24. package/dist/cli/commands.d.ts +92 -14
  25. package/dist/cli/commands.js +330 -52
  26. package/dist/cli/commands.js.map +1 -1
  27. package/dist/cli/diff.d.ts +1 -0
  28. package/dist/cli/diff.js +28 -0
  29. package/dist/cli/diff.js.map +1 -0
  30. package/dist/cli/input.d.ts +2 -0
  31. package/dist/cli/input.js +10 -0
  32. package/dist/cli/input.js.map +1 -0
  33. package/dist/cli/main.js +2 -2
  34. package/dist/cli/main.js.map +1 -1
  35. package/dist/cli/mouse.d.ts +54 -0
  36. package/dist/cli/mouse.js +86 -0
  37. package/dist/cli/mouse.js.map +1 -0
  38. package/dist/cli/palette.d.ts +41 -0
  39. package/dist/cli/palette.js +212 -0
  40. package/dist/cli/palette.js.map +1 -0
  41. package/dist/cli/panel.d.ts +29 -0
  42. package/dist/cli/panel.js +48 -0
  43. package/dist/cli/panel.js.map +1 -0
  44. package/dist/cli/picker.d.ts +8 -0
  45. package/dist/cli/picker.js +26 -28
  46. package/dist/cli/picker.js.map +1 -1
  47. package/dist/cli/status-line.d.ts +6 -0
  48. package/dist/cli/status-line.js +21 -7
  49. package/dist/cli/status-line.js.map +1 -1
  50. package/dist/cli/stream-text.d.ts +4 -8
  51. package/dist/cli/stream-text.js +26 -12
  52. package/dist/cli/stream-text.js.map +1 -1
  53. package/dist/cli/theme.d.ts +48 -0
  54. package/dist/cli/theme.js +160 -0
  55. package/dist/cli/theme.js.map +1 -0
  56. package/dist/cli/tool-box.d.ts +41 -0
  57. package/dist/cli/tool-box.js +177 -0
  58. package/dist/cli/tool-box.js.map +1 -0
  59. package/dist/cli/transcript.d.ts +24 -1
  60. package/dist/cli/transcript.js +65 -2
  61. package/dist/cli/transcript.js.map +1 -1
  62. package/dist/cli/trust-prompt.d.ts +24 -0
  63. package/dist/cli/trust-prompt.js +89 -0
  64. package/dist/cli/trust-prompt.js.map +1 -0
  65. package/dist/config/defaults.d.ts +12 -0
  66. package/dist/config/defaults.js +12 -0
  67. package/dist/config/defaults.js.map +1 -1
  68. package/dist/config/load.d.ts +2 -0
  69. package/dist/config/load.js +36 -0
  70. package/dist/config/load.js.map +1 -1
  71. package/dist/config/paths.d.ts +2 -0
  72. package/dist/config/paths.js +12 -1
  73. package/dist/config/paths.js.map +1 -1
  74. package/dist/config/schema.d.ts +53 -0
  75. package/dist/config/schema.js +33 -0
  76. package/dist/config/schema.js.map +1 -1
  77. package/dist/config/write.d.ts +2 -0
  78. package/dist/config/write.js +9 -0
  79. package/dist/config/write.js.map +1 -1
  80. package/dist/context/builder.d.ts +7 -0
  81. package/dist/context/builder.js +11 -0
  82. package/dist/context/builder.js.map +1 -0
  83. package/dist/context/manager.d.ts +17 -3
  84. package/dist/context/manager.js +129 -41
  85. package/dist/context/manager.js.map +1 -1
  86. package/dist/extensions/api.d.ts +101 -0
  87. package/dist/extensions/api.js +219 -0
  88. package/dist/extensions/api.js.map +1 -0
  89. package/dist/extensions/discovery.d.ts +42 -0
  90. package/dist/extensions/discovery.js +326 -0
  91. package/dist/extensions/discovery.js.map +1 -0
  92. package/dist/extensions/loader.d.ts +68 -0
  93. package/dist/extensions/loader.js +353 -0
  94. package/dist/extensions/loader.js.map +1 -0
  95. package/dist/extensions/session-manager.d.ts +44 -0
  96. package/dist/extensions/session-manager.js +137 -0
  97. package/dist/extensions/session-manager.js.map +1 -0
  98. package/dist/extensions/tool-adapter.d.ts +12 -0
  99. package/dist/extensions/tool-adapter.js +157 -0
  100. package/dist/extensions/tool-adapter.js.map +1 -0
  101. package/dist/extensions/trust.d.ts +6 -0
  102. package/dist/extensions/trust.js +55 -0
  103. package/dist/extensions/trust.js.map +1 -0
  104. package/dist/extensions/types.d.ts +94 -0
  105. package/dist/extensions/types.js +2 -0
  106. package/dist/extensions/types.js.map +1 -0
  107. package/dist/extensions/ui.d.ts +21 -0
  108. package/dist/extensions/ui.js +75 -0
  109. package/dist/extensions/ui.js.map +1 -0
  110. package/dist/index.d.ts +2 -0
  111. package/dist/index.js +2 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/mcp/client.d.ts +73 -0
  114. package/dist/mcp/client.js +363 -0
  115. package/dist/mcp/client.js.map +1 -0
  116. package/dist/mcp/format.d.ts +3 -0
  117. package/dist/mcp/format.js +37 -0
  118. package/dist/mcp/format.js.map +1 -0
  119. package/dist/mcp/index.d.ts +6 -0
  120. package/dist/mcp/index.js +7 -0
  121. package/dist/mcp/index.js.map +1 -0
  122. package/dist/mcp/manager.d.ts +53 -0
  123. package/dist/mcp/manager.js +349 -0
  124. package/dist/mcp/manager.js.map +1 -0
  125. package/dist/mcp/stdio-transport.d.ts +26 -0
  126. package/dist/mcp/stdio-transport.js +174 -0
  127. package/dist/mcp/stdio-transport.js.map +1 -0
  128. package/dist/mcp/tools.d.ts +22 -0
  129. package/dist/mcp/tools.js +162 -0
  130. package/dist/mcp/tools.js.map +1 -0
  131. package/dist/mcp/types.d.ts +92 -0
  132. package/dist/mcp/types.js +2 -0
  133. package/dist/mcp/types.js.map +1 -0
  134. package/dist/providers/factory.js +1 -0
  135. package/dist/providers/factory.js.map +1 -1
  136. package/dist/runtime/executor.d.ts +2 -0
  137. package/dist/runtime/executor.js +4 -0
  138. package/dist/runtime/executor.js.map +1 -0
  139. package/dist/runtime/scheduler.d.ts +4 -3
  140. package/dist/runtime/scheduler.js +7 -98
  141. package/dist/runtime/scheduler.js.map +1 -1
  142. package/dist/runtime/tool-executor.d.ts +18 -0
  143. package/dist/runtime/tool-executor.js +126 -0
  144. package/dist/runtime/tool-executor.js.map +1 -0
  145. package/dist/security/process.d.ts +10 -0
  146. package/dist/security/process.js +36 -0
  147. package/dist/security/process.js.map +1 -1
  148. package/dist/sessions/events.d.ts +9 -0
  149. package/dist/sessions/events.js +11 -6
  150. package/dist/sessions/events.js.map +1 -1
  151. package/dist/sessions/history.d.ts +18 -0
  152. package/dist/sessions/history.js +76 -0
  153. package/dist/sessions/history.js.map +1 -0
  154. package/dist/sessions/index.d.ts +2 -0
  155. package/dist/sessions/index.js +2 -0
  156. package/dist/sessions/index.js.map +1 -1
  157. package/dist/sessions/search.d.ts +16 -0
  158. package/dist/sessions/search.js +136 -0
  159. package/dist/sessions/search.js.map +1 -0
  160. package/dist/sessions/store.js +7 -4
  161. package/dist/sessions/store.js.map +1 -1
  162. package/dist/tools/bash.js +6 -3
  163. package/dist/tools/bash.js.map +1 -1
  164. package/dist/tools/edit.js +2 -1
  165. package/dist/tools/edit.js.map +1 -1
  166. package/dist/tools/types.d.ts +6 -0
  167. package/dist/types.d.ts +2 -1
  168. package/dist/types.js.map +1 -1
  169. package/package.json +3 -1
@@ -0,0 +1,157 @@
1
+ export function coerceToolArguments(schema, input) {
2
+ const result = { ...(input ?? {}) };
3
+ const properties = (schema?.properties ?? {});
4
+ const required = Array.isArray(schema?.required)
5
+ ? schema.required
6
+ : [];
7
+ for (const [key, prop] of Object.entries(properties)) {
8
+ if (result[key] === undefined)
9
+ continue;
10
+ const type = prop?.type;
11
+ if (result[key] === null && !required.includes(key)) {
12
+ delete result[key];
13
+ continue;
14
+ }
15
+ if (type === "number" || type === "integer") {
16
+ if (typeof result[key] === "string") {
17
+ const n = Number(result[key]);
18
+ if (!Number.isNaN(n))
19
+ result[key] = n;
20
+ }
21
+ else if (typeof result[key] === "boolean") {
22
+ result[key] = result[key] ? 1 : 0;
23
+ }
24
+ }
25
+ else if (type === "boolean") {
26
+ if (typeof result[key] === "string") {
27
+ if (result[key] === "true")
28
+ result[key] = true;
29
+ if (result[key] === "false")
30
+ result[key] = false;
31
+ }
32
+ else if (typeof result[key] === "number") {
33
+ result[key] = result[key] !== 0;
34
+ }
35
+ }
36
+ else if (type === "string") {
37
+ if (result[key] !== null && typeof result[key] !== "string") {
38
+ result[key] = String(result[key]);
39
+ }
40
+ }
41
+ else if (type === "array") {
42
+ if (!Array.isArray(result[key]) && result[key] !== null) {
43
+ result[key] = [result[key]];
44
+ }
45
+ if (Array.isArray(result[key]) && prop?.items) {
46
+ result[key] = result[key].map((item) => typeof prop.items === "object" && prop.items?.type
47
+ ? coerceScalar(prop.items, item)
48
+ : item);
49
+ }
50
+ }
51
+ else if (type === "object" && prop?.properties) {
52
+ if (result[key] && typeof result[key] === "object") {
53
+ result[key] = coerceToolArguments(prop, result[key]);
54
+ }
55
+ }
56
+ }
57
+ return result;
58
+ }
59
+ function coerceScalar(prop, value) {
60
+ if (value === null)
61
+ return value;
62
+ const type = prop?.type;
63
+ if (type === "number" || type === "integer") {
64
+ if (typeof value === "string") {
65
+ const n = Number(value);
66
+ if (!Number.isNaN(n))
67
+ return n;
68
+ }
69
+ }
70
+ if (type === "boolean" && typeof value === "string") {
71
+ if (value === "true")
72
+ return true;
73
+ if (value === "false")
74
+ return false;
75
+ }
76
+ if (type === "string" && value !== null && typeof value !== "string") {
77
+ return String(value);
78
+ }
79
+ return value;
80
+ }
81
+ export function extensionToolToAgentTool(extensionTool, extensionContext) {
82
+ const tool = {
83
+ definition: {
84
+ name: extensionTool.name,
85
+ description: extensionTool.description,
86
+ parameters: extensionTool.parameters ?? {},
87
+ },
88
+ annotations: extensionTool.annotations,
89
+ exposure: extensionTool.exposure,
90
+ execute: async (call, toolCtx) => {
91
+ const coerced = coerceToolArguments(extensionTool.parameters, call.arguments ?? {});
92
+ call.arguments = coerced;
93
+ const signal = toolCtx.signal;
94
+ const onUpdate = (partial) => {
95
+ toolCtx.onToolOutput?.(call, "stdout", JSON.stringify(partial));
96
+ };
97
+ const ctx = { ...extensionContext };
98
+ let raw;
99
+ try {
100
+ if (extensionTool.execute.length >= 3) {
101
+ raw = await extensionTool.execute(call.id, coerced, signal, onUpdate, ctx);
102
+ }
103
+ else if (extensionTool.execute.length === 2) {
104
+ raw = await extensionTool.execute(coerced, ctx);
105
+ }
106
+ else {
107
+ raw = await extensionTool.execute(coerced);
108
+ }
109
+ }
110
+ catch (error) {
111
+ return {
112
+ toolCallId: call.id,
113
+ name: call.name,
114
+ content: `COMMAND_FAILED: ${error instanceof Error ? error.message : String(error)}`,
115
+ isError: true,
116
+ };
117
+ }
118
+ const content = Array.isArray(raw?.content)
119
+ ? raw.content
120
+ .map((part) => part?.type === "text" ? String(part.text ?? "") : "")
121
+ .join("")
122
+ : typeof raw === "string"
123
+ ? raw
124
+ : raw === undefined
125
+ ? ""
126
+ : JSON.stringify(raw);
127
+ return {
128
+ toolCallId: call.id,
129
+ name: call.name,
130
+ content,
131
+ isError: raw?.isError === true,
132
+ details: raw?.details,
133
+ structuredContent: raw?.structuredContent,
134
+ usage: raw?.usage,
135
+ diff: raw?.diff,
136
+ };
137
+ },
138
+ };
139
+ return tool;
140
+ }
141
+ export function collectExtensionTools(loader) {
142
+ const out = [];
143
+ for (const loaded of loader.list()) {
144
+ const ctx = loaded.context ?? {
145
+ workspace: process.cwd(),
146
+ trusted: true,
147
+ hasUI: false,
148
+ ui: null,
149
+ log: () => { },
150
+ };
151
+ for (const tool of loaded.registries.tools.values()) {
152
+ out.push(extensionToolToAgentTool(tool, ctx));
153
+ }
154
+ }
155
+ return out;
156
+ }
157
+ //# sourceMappingURL=tool-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-adapter.js","sourceRoot":"","sources":["../../src/extensions/tool-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function normalizeProjectPath(projectDir: string): string;
2
+ export declare function isProjectTrusted(projectDir: string, configPath?: string): boolean;
3
+ export declare function isProjectDenied(projectDir: string, configPath?: string): boolean;
4
+ export declare function trustProject(projectDir: string, configPath?: string): void;
5
+ export declare function denyProject(projectDir: string, configPath?: string): void;
6
+ export declare function untrustProject(projectDir: string, configPath?: string): void;
@@ -0,0 +1,55 @@
1
+ import { loadConfig } from "../config/load.js";
2
+ import { updateUserConfig } from "../config/write.js";
3
+ import { resolve } from "node:path";
4
+ export function normalizeProjectPath(projectDir) {
5
+ return resolve(projectDir);
6
+ }
7
+ function readExtensions(configPath) {
8
+ const config = loadConfig(configPath ? { userConfigPath: configPath } : undefined);
9
+ return {
10
+ trustedProjects: [...(config.extensions?.trustedProjects ?? [])],
11
+ deniedProjects: [...(config.extensions?.deniedProjects ?? [])],
12
+ };
13
+ }
14
+ export function isProjectTrusted(projectDir, configPath) {
15
+ const normalized = normalizeProjectPath(projectDir);
16
+ return readExtensions(configPath).trustedProjects.includes(normalized);
17
+ }
18
+ export function isProjectDenied(projectDir, configPath) {
19
+ const normalized = normalizeProjectPath(projectDir);
20
+ return readExtensions(configPath).deniedProjects.includes(normalized);
21
+ }
22
+ function writeDecision(projectDir, decision, configPath) {
23
+ const normalized = normalizeProjectPath(projectDir);
24
+ updateUserConfig((config) => {
25
+ const extensions = config.extensions && typeof config.extensions === "object"
26
+ ? config.extensions
27
+ : {};
28
+ const trusted = Array.isArray(extensions.trustedProjects)
29
+ ? [...extensions.trustedProjects]
30
+ : [];
31
+ const denied = Array.isArray(extensions.deniedProjects)
32
+ ? [...extensions.deniedProjects]
33
+ : [];
34
+ const without = (paths) => paths.filter((path) => path !== normalized);
35
+ extensions.trustedProjects =
36
+ decision === "trusted"
37
+ ? [...without(trusted), normalized]
38
+ : without(trusted);
39
+ extensions.deniedProjects =
40
+ decision === "denied"
41
+ ? [...without(denied), normalized]
42
+ : without(denied);
43
+ config.extensions = extensions;
44
+ }, configPath);
45
+ }
46
+ export function trustProject(projectDir, configPath) {
47
+ writeDecision(projectDir, "trusted", configPath);
48
+ }
49
+ export function denyProject(projectDir, configPath) {
50
+ writeDecision(projectDir, "denied", configPath);
51
+ }
52
+ export function untrustProject(projectDir, configPath) {
53
+ writeDecision(projectDir, "none", configPath);
54
+ }
55
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/extensions/trust.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CACrB,UAAmB;IAEnB,MAAM,MAAM,GAAG,UAAU,CACvB,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CACxD,CAAC;IACF,OAAO;QACL,eAAe,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC;QAChE,cAAc,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,UAAmB;IAEnB,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACpD,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,UAAkB,EAClB,UAAmB;IAEnB,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACpD,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,aAAa,CACpB,UAAkB,EAClB,QAAuC,EACvC,UAAmB;IAEnB,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACpD,gBAAgB,CACd,CAAC,MAAM,EAAE,EAAE;QACT,MAAM,UAAU,GACd,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACxD,CAAC,CAAE,MAAM,CAAC,UAAsC;YAChD,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC;YACvD,CAAC,CAAC,CAAC,GAAI,UAAU,CAAC,eAA4B,CAAC;YAC/C,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;YACrD,CAAC,CAAC,CAAC,GAAI,UAAU,CAAC,cAA2B,CAAC;YAC9C,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAClC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAE9C,UAAU,CAAC,eAAe;YACxB,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;gBACnC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,UAAU,CAAC,cAAc;YACvB,QAAQ,KAAK,QAAQ;gBACnB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;gBAClC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC,EACD,UAAU,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,UAAmB;IAClE,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,UAAmB;IACjE,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,UAAmB;IACpE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,94 @@
1
+ export type AtomEvent = "extension_load" | "extension_activate" | "extension_unload" | "extension_error" | "session_start" | "session_end" | "turn_start" | "turn_end" | "tool_call" | "tool_result" | "message" | "context_build" | "config_change";
2
+ export interface ExtensionTool {
3
+ name: string;
4
+ label: string;
5
+ description: string;
6
+ parameters?: Record<string, unknown>;
7
+ exposure?: "direct" | "model-only" | "hidden" | "codemode" | "deferred";
8
+ annotations?: Record<string, unknown>;
9
+ execute: (...args: any[]) => Promise<unknown>;
10
+ }
11
+ export interface ExtensionCommand {
12
+ name: string;
13
+ description: string;
14
+ argumentHint?: string;
15
+ category?: string;
16
+ getArgumentCompletions?: (prefix: string) => unknown;
17
+ run?: (args: string, ctx: ExtensionContext) => void | Promise<void>;
18
+ handler?: (args: string, ctx: any) => void | Promise<void>;
19
+ }
20
+ export interface ExtensionWidget {
21
+ id: string;
22
+ location: "aboveInput" | "belowInput" | "footer";
23
+ render: (width: number) => string[];
24
+ }
25
+ export interface ExtensionUIContext {
26
+ select(title: string, options: string[], opts?: any): Promise<string | undefined>;
27
+ confirm(title: string, message: string, opts?: any): Promise<boolean>;
28
+ input(title: string, placeholder?: string, opts?: any): Promise<string | undefined>;
29
+ editor(title: string, prefill?: string, opts?: any): Promise<string | undefined>;
30
+ notify(message: string, type?: "info" | "warning" | "error"): void;
31
+ onTerminalInput(handler: (data: string) => {
32
+ consume?: boolean;
33
+ data?: string;
34
+ } | undefined): () => void;
35
+ setStatus(key: string, text: string | undefined): void;
36
+ setWorkingMessage(message?: string): void;
37
+ setWorkingVisible(visible: boolean): void;
38
+ setWorkingIndicator(options?: {
39
+ frames?: string[];
40
+ intervalMs?: number;
41
+ }): void;
42
+ setHiddenThinkingLabel(label?: string): void;
43
+ setWidget(key: string, content: string[] | ((tui: any, theme: any) => any) | undefined, options?: {
44
+ placement?: "aboveEditor" | "belowEditor";
45
+ }): void;
46
+ setFooter(factory: ((tui: any, theme: any, footerData: any) => any) | undefined): void;
47
+ setHeader(factory: ((tui: any, theme: any) => any) | undefined): void;
48
+ setTitle(title: string): void;
49
+ custom<T>(factory: any, options?: any): Promise<T>;
50
+ pasteToEditor(text: string): void;
51
+ setEditorText(text: string): void;
52
+ getEditorText(): string;
53
+ getToolsExpanded(): boolean;
54
+ setToolsExpanded(expanded: boolean): void;
55
+ getTheme(name: string): any;
56
+ setTheme(theme: string | any): {
57
+ success: boolean;
58
+ error?: string;
59
+ };
60
+ }
61
+ export interface ExtensionContext {
62
+ workspace: string;
63
+ trusted: boolean;
64
+ hasUI: boolean;
65
+ ui: ExtensionUIContext;
66
+ log: (message: string) => void;
67
+ sessionManager?: any;
68
+ }
69
+ export interface ExtensionProvider {
70
+ name: string;
71
+ config: Record<string, unknown>;
72
+ }
73
+ export interface ExtensionModel {
74
+ provider: string;
75
+ id: string;
76
+ metadata?: Record<string, unknown>;
77
+ }
78
+ export interface ExecResult {
79
+ stdout: string;
80
+ stderr: string;
81
+ exitCode: number;
82
+ }
83
+ export interface ExecOptions {
84
+ cwd?: string;
85
+ timeoutMs?: number;
86
+ }
87
+ export type ExtensionEventHandler = (event: unknown, ctx: ExtensionContext) => unknown | Promise<unknown>;
88
+ export interface ExtensionStatus {
89
+ id: string;
90
+ source: string;
91
+ entryPath: string;
92
+ status: "loaded" | "error" | "skipped";
93
+ error?: string;
94
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/extensions/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import type { ExtensionContext, ExtensionUIContext } from "./types.js";
2
+ import type { ExtensionRegistries } from "./api.js";
3
+ export interface ExtensionUICallbacks {
4
+ notify?: (message: string, type?: "info" | "warning" | "error") => void;
5
+ requestRender?: () => void;
6
+ getToolsExpanded?: () => boolean;
7
+ setToolsExpanded?: (expanded: boolean) => void;
8
+ select?: (title: string, options: string[], opts?: any) => Promise<string | undefined>;
9
+ confirm?: (title: string, message: string, opts?: any) => Promise<boolean>;
10
+ input?: (title: string, placeholder?: string, opts?: any) => Promise<string | undefined>;
11
+ editor?: (title: string, prefill?: string, opts?: any) => Promise<string | undefined>;
12
+ custom?: <T>(factory: any, options?: any) => Promise<T>;
13
+ pasteToEditor?: (text: string) => void;
14
+ setEditorText?: (text: string) => void;
15
+ getEditorText?: () => string;
16
+ onTerminalInput?: (handler: (data: string) => {
17
+ consume?: boolean;
18
+ data?: string;
19
+ } | undefined) => () => void;
20
+ }
21
+ export declare function createDefaultExtensionUI(registries: ExtensionRegistries, ctx: ExtensionContext, callbacks?: ExtensionUICallbacks): ExtensionUIContext;
@@ -0,0 +1,75 @@
1
+ export function createDefaultExtensionUI(registries, ctx, callbacks = {}) {
2
+ const noopUnsubscribe = () => { };
3
+ return {
4
+ notify: (message, type) => {
5
+ if (callbacks.notify)
6
+ callbacks.notify(message, type);
7
+ else {
8
+ // eslint-disable-next-line no-console
9
+ console.error(`[extension] ${type ?? "info"}: ${message}`);
10
+ }
11
+ },
12
+ setStatus: (key, text) => {
13
+ if (text === undefined)
14
+ registries.status.delete(key);
15
+ else
16
+ registries.status.set(key, text);
17
+ callbacks.requestRender?.();
18
+ },
19
+ setWorkingMessage: (message) => {
20
+ registries.workingMessage = message;
21
+ },
22
+ setWorkingVisible: (visible) => {
23
+ registries.workingVisible = visible;
24
+ },
25
+ setWorkingIndicator: (options) => {
26
+ registries.workingIndicator = options;
27
+ },
28
+ setHiddenThinkingLabel: (label) => {
29
+ registries.hiddenThinkingLabel = label;
30
+ },
31
+ setWidget: (key, content, options) => {
32
+ if (content === undefined)
33
+ registries.uiWidgets.delete(key);
34
+ else
35
+ registries.uiWidgets.set(key, {
36
+ key,
37
+ content,
38
+ placement: options?.placement ?? "aboveEditor",
39
+ });
40
+ callbacks.requestRender?.();
41
+ },
42
+ setFooter: (factory) => {
43
+ registries.footerFactory = factory;
44
+ callbacks.requestRender?.();
45
+ },
46
+ setHeader: (factory) => {
47
+ registries.headerFactory = factory;
48
+ callbacks.requestRender?.();
49
+ },
50
+ setTitle: (title) => {
51
+ registries.title = title;
52
+ callbacks.requestRender?.();
53
+ },
54
+ select: (title, options, opts) => callbacks.select ? callbacks.select(title, options, opts) : Promise.resolve(undefined),
55
+ confirm: (title, message, opts) => callbacks.confirm ? callbacks.confirm(title, message, opts) : Promise.resolve(false),
56
+ input: (title, placeholder, opts) => callbacks.input ? callbacks.input(title, placeholder, opts) : Promise.resolve(undefined),
57
+ editor: (title, prefill, opts) => callbacks.editor ? callbacks.editor(title, prefill, opts) : Promise.resolve(undefined),
58
+ custom: (factory, options) => callbacks.custom ? callbacks.custom(factory, options) : Promise.resolve(undefined),
59
+ pasteToEditor: (text) => callbacks.pasteToEditor?.(text),
60
+ setEditorText: (text) => callbacks.setEditorText?.(text),
61
+ getEditorText: () => (callbacks.getEditorText ? callbacks.getEditorText() : ""),
62
+ onTerminalInput: (handler) => callbacks.onTerminalInput ? callbacks.onTerminalInput(handler) : () => { },
63
+ getToolsExpanded: () => (callbacks.getToolsExpanded ? callbacks.getToolsExpanded() : registries.toolsExpanded),
64
+ setToolsExpanded: (expanded) => {
65
+ registries.toolsExpanded = expanded;
66
+ if (callbacks.setToolsExpanded)
67
+ callbacks.setToolsExpanded(expanded);
68
+ else
69
+ callbacks.requestRender?.();
70
+ },
71
+ getTheme: () => undefined,
72
+ setTheme: () => ({ success: false, error: "theme switching is not available" }),
73
+ };
74
+ }
75
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/extensions/ui.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,9 +8,11 @@ export { createProvider } from "./providers/factory.js";
8
8
  export { InMemoryProviderRegistry } from "./providers/registry.js";
9
9
  export { InMemorySession } from "./sessions/store.js";
10
10
  export * from "./sessions/store.js";
11
+ export * from "./extensions/session-manager.js";
11
12
  export * from "./sessions/events.js";
12
13
  export * from "./sessions/recovery.js";
13
14
  export { OllamaAdapter, OllamaProvider } from "./providers/ollama.js";
14
15
  export { GeminiAdapter } from "./providers/gemini.js";
15
16
  export { InMemoryToolRegistry } from "./tools/registry.js";
17
+ export * from "./mcp/index.js";
16
18
  export * from "./types.js";
package/dist/index.js CHANGED
@@ -7,10 +7,12 @@ export { createProvider } from "./providers/factory.js";
7
7
  export { InMemoryProviderRegistry } from "./providers/registry.js";
8
8
  export { InMemorySession } from "./sessions/store.js";
9
9
  export * from "./sessions/store.js";
10
+ export * from "./extensions/session-manager.js";
10
11
  export * from "./sessions/events.js";
11
12
  export * from "./sessions/recovery.js";
12
13
  export { OllamaAdapter, OllamaProvider } from "./providers/ollama.js";
13
14
  export { GeminiAdapter } from "./providers/gemini.js";
14
15
  export { InMemoryToolRegistry } from "./tools/registry.js";
16
+ export * from "./mcp/index.js";
15
17
  export * from "./types.js";
16
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,73 @@
1
+ import type { McpRemoteTool, McpTransport } from "./types.js";
2
+ export declare const SUPPORTED_PROTOCOL_VERSIONS: readonly ["2024-11-05", "2025-03-26", "2025-06-18"];
3
+ export declare const PREFERRED_PROTOCOL_VERSION = "2025-06-18";
4
+ export declare class McpError extends Error {
5
+ readonly code?: number;
6
+ readonly data?: unknown;
7
+ constructor(message: string, code?: number, data?: unknown);
8
+ }
9
+ export declare class McpNotConnectedError extends McpError {
10
+ constructor(message?: string);
11
+ }
12
+ export interface McpClientOptions {
13
+ clientName?: string;
14
+ clientVersion?: string;
15
+ /** Called when the transport closes unexpectedly (not via close()). */
16
+ onClose?: (info: {
17
+ code?: number | null;
18
+ signal?: string | null;
19
+ }) => void;
20
+ }
21
+ export interface McpRequestOptions {
22
+ timeoutMs?: number;
23
+ signal?: AbortSignal;
24
+ }
25
+ export interface McpConnectOptions extends McpRequestOptions {
26
+ /** Timeout for spawning the transport and completing the handshake. */
27
+ startupTimeoutMs?: number;
28
+ }
29
+ export interface McpClientConnectResult {
30
+ protocolVersion: string;
31
+ serverInfo?: unknown;
32
+ capabilities?: unknown;
33
+ }
34
+ /**
35
+ * Small JSON-RPC 2.0 client for MCP. The transport owns framing and process
36
+ * lifecycle; this class owns request ids, timeouts, cancellation, and
37
+ * notifications.
38
+ */
39
+ export declare class McpClient {
40
+ private readonly transport;
41
+ private readonly clientName;
42
+ private readonly clientVersion;
43
+ private readonly onClose?;
44
+ private nextId;
45
+ private pending;
46
+ private notificationHandlers;
47
+ private closed;
48
+ private started;
49
+ private startPromise?;
50
+ private protocolVersion?;
51
+ private serverInfo?;
52
+ private capabilities?;
53
+ private lastTransportError?;
54
+ constructor(transport: McpTransport, options?: McpClientOptions);
55
+ get protocolVersionValue(): string | undefined;
56
+ get serverInfoValue(): unknown;
57
+ get capabilitiesValue(): unknown;
58
+ get lastError(): Error | undefined;
59
+ isClosed(): boolean;
60
+ /** Spawn the transport and perform the MCP initialize handshake. */
61
+ connect(options?: McpConnectOptions): Promise<McpClientConnectResult>;
62
+ /** Discover every page of tools/list. */
63
+ listTools(options?: McpRequestOptions): Promise<McpRemoteTool[]>;
64
+ callTool(name: string, args: Record<string, unknown>, options?: McpRequestOptions): Promise<unknown>;
65
+ ping(options?: McpRequestOptions): Promise<unknown>;
66
+ onNotification(method: string, handler: (params: unknown) => void): () => void;
67
+ request(method: string, params: unknown, options?: McpRequestOptions): Promise<unknown>;
68
+ close(): Promise<void>;
69
+ private sendNotification;
70
+ private handleMessage;
71
+ private handleTransportError;
72
+ private handleClose;
73
+ }