atom-lite 0.4.1 → 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 (88) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/dist/agent/loop.d.ts +9 -0
  4. package/dist/agent/loop.js +233 -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/app.js +373 -33
  14. package/dist/cli/app.js.map +1 -1
  15. package/dist/cli/commands.d.ts +3 -0
  16. package/dist/cli/commands.js +20 -5
  17. package/dist/cli/commands.js.map +1 -1
  18. package/dist/cli/main.js +2 -2
  19. package/dist/cli/main.js.map +1 -1
  20. package/dist/cli/mouse.js +4 -1
  21. package/dist/cli/mouse.js.map +1 -1
  22. package/dist/cli/stream-text.js +1 -0
  23. package/dist/cli/stream-text.js.map +1 -1
  24. package/dist/cli/theme.d.ts +1 -1
  25. package/dist/cli/theme.js +2 -0
  26. package/dist/cli/theme.js.map +1 -1
  27. package/dist/cli/transcript.d.ts +15 -1
  28. package/dist/cli/transcript.js +40 -1
  29. package/dist/cli/transcript.js.map +1 -1
  30. package/dist/cli/trust-prompt.d.ts +24 -0
  31. package/dist/cli/trust-prompt.js +89 -0
  32. package/dist/cli/trust-prompt.js.map +1 -0
  33. package/dist/config/defaults.d.ts +2 -0
  34. package/dist/config/defaults.js +2 -0
  35. package/dist/config/defaults.js.map +1 -1
  36. package/dist/config/load.js +4 -0
  37. package/dist/config/load.js.map +1 -1
  38. package/dist/config/paths.d.ts +2 -0
  39. package/dist/config/paths.js +12 -1
  40. package/dist/config/paths.js.map +1 -1
  41. package/dist/config/schema.d.ts +4 -0
  42. package/dist/config/schema.js +2 -0
  43. package/dist/config/schema.js.map +1 -1
  44. package/dist/context/manager.d.ts +17 -3
  45. package/dist/context/manager.js +129 -41
  46. package/dist/context/manager.js.map +1 -1
  47. package/dist/extensions/api.d.ts +51 -1
  48. package/dist/extensions/api.js +124 -6
  49. package/dist/extensions/api.js.map +1 -1
  50. package/dist/extensions/discovery.d.ts +16 -0
  51. package/dist/extensions/discovery.js +191 -108
  52. package/dist/extensions/discovery.js.map +1 -1
  53. package/dist/extensions/loader.d.ts +42 -1
  54. package/dist/extensions/loader.js +272 -32
  55. package/dist/extensions/loader.js.map +1 -1
  56. package/dist/extensions/session-manager.d.ts +44 -0
  57. package/dist/extensions/session-manager.js +137 -0
  58. package/dist/extensions/session-manager.js.map +1 -0
  59. package/dist/extensions/tool-adapter.d.ts +12 -0
  60. package/dist/extensions/tool-adapter.js +157 -0
  61. package/dist/extensions/tool-adapter.js.map +1 -0
  62. package/dist/extensions/trust.d.ts +2 -0
  63. package/dist/extensions/trust.js +32 -17
  64. package/dist/extensions/trust.js.map +1 -1
  65. package/dist/extensions/types.d.ts +45 -3
  66. package/dist/extensions/ui.d.ts +21 -0
  67. package/dist/extensions/ui.js +75 -0
  68. package/dist/extensions/ui.js.map +1 -0
  69. package/dist/index.d.ts +1 -0
  70. package/dist/index.js +1 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/mcp/stdio-transport.js +3 -20
  73. package/dist/mcp/stdio-transport.js.map +1 -1
  74. package/dist/runtime/scheduler.d.ts +4 -3
  75. package/dist/runtime/scheduler.js +7 -105
  76. package/dist/runtime/scheduler.js.map +1 -1
  77. package/dist/runtime/tool-executor.d.ts +18 -0
  78. package/dist/runtime/tool-executor.js +126 -0
  79. package/dist/runtime/tool-executor.js.map +1 -0
  80. package/dist/security/process.d.ts +10 -0
  81. package/dist/security/process.js +36 -0
  82. package/dist/security/process.js.map +1 -1
  83. package/dist/sessions/store.js +2 -3
  84. package/dist/sessions/store.js.map +1 -1
  85. package/dist/tools/bash.js +6 -3
  86. package/dist/tools/bash.js.map +1 -1
  87. package/dist/tools/types.d.ts +6 -0
  88. 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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"}
@@ -1,4 +1,6 @@
1
1
  export declare function normalizeProjectPath(projectDir: string): string;
2
2
  export declare function isProjectTrusted(projectDir: string, configPath?: string): boolean;
3
+ export declare function isProjectDenied(projectDir: string, configPath?: string): boolean;
3
4
  export declare function trustProject(projectDir: string, configPath?: string): void;
5
+ export declare function denyProject(projectDir: string, configPath?: string): void;
4
6
  export declare function untrustProject(projectDir: string, configPath?: string): void;
@@ -4,12 +4,22 @@ import { resolve } from "node:path";
4
4
  export function normalizeProjectPath(projectDir) {
5
5
  return resolve(projectDir);
6
6
  }
7
- export function isProjectTrusted(projectDir, configPath) {
7
+ function readExtensions(configPath) {
8
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) {
9
15
  const normalized = normalizeProjectPath(projectDir);
10
- return (config.extensions?.trustedProjects ?? []).includes(normalized);
16
+ return readExtensions(configPath).trustedProjects.includes(normalized);
11
17
  }
12
- export function trustProject(projectDir, configPath) {
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) {
13
23
  const normalized = normalizeProjectPath(projectDir);
14
24
  updateUserConfig((config) => {
15
25
  const extensions = config.extensions && typeof config.extensions === "object"
@@ -18,23 +28,28 @@ export function trustProject(projectDir, configPath) {
18
28
  const trusted = Array.isArray(extensions.trustedProjects)
19
29
  ? [...extensions.trustedProjects]
20
30
  : [];
21
- if (!trusted.includes(normalized))
22
- trusted.push(normalized);
23
- extensions.trustedProjects = trusted;
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);
24
43
  config.extensions = extensions;
25
44
  }, configPath);
26
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
+ }
27
52
  export function untrustProject(projectDir, configPath) {
28
- const normalized = normalizeProjectPath(projectDir);
29
- updateUserConfig((config) => {
30
- const extensions = config.extensions && typeof config.extensions === "object"
31
- ? config.extensions
32
- : {};
33
- const trusted = Array.isArray(extensions.trustedProjects)
34
- ? extensions.trustedProjects.filter((path) => path !== normalized)
35
- : [];
36
- extensions.trustedProjects = trusted;
37
- config.extensions = extensions;
38
- }, configPath);
53
+ writeDecision(projectDir, "none", configPath);
39
54
  }
40
55
  //# sourceMappingURL=trust.js.map
@@ -1 +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,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,UAAmB;IAEnB,MAAM,MAAM,GAAG,UAAU,CACvB,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CACxD,CAAC;IACF,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACpD,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,UAAmB;IAClE,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,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,UAAU,CAAC,eAAe,GAAG,OAAO,CAAC;QACrC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC,EACD,UAAU,CACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,UAAmB;IACpE,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,CAAE,UAAU,CAAC,eAA4B,CAAC,MAAM,CAC7C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,CAC9B;YACH,CAAC,CAAC,EAAE,CAAC;QACP,UAAU,CAAC,eAAe,GAAG,OAAO,CAAC;QACrC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC,EACD,UAAU,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/extensions/trust.ts"],"names":[],"mappings":"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"}
@@ -4,25 +4,67 @@ export interface ExtensionTool {
4
4
  label: string;
5
5
  description: string;
6
6
  parameters?: Record<string, unknown>;
7
- exposure?: "direct" | "model-only" | "hidden";
8
- execute: (args: Record<string, unknown>, ctx: ExtensionContext) => Promise<unknown>;
7
+ exposure?: "direct" | "model-only" | "hidden" | "codemode" | "deferred";
8
+ annotations?: Record<string, unknown>;
9
+ execute: (...args: any[]) => Promise<unknown>;
9
10
  }
10
11
  export interface ExtensionCommand {
11
12
  name: string;
12
13
  description: string;
13
14
  argumentHint?: string;
14
15
  category?: string;
15
- run: (args: string, ctx: ExtensionContext) => void | Promise<void>;
16
+ getArgumentCompletions?: (prefix: string) => unknown;
17
+ run?: (args: string, ctx: ExtensionContext) => void | Promise<void>;
18
+ handler?: (args: string, ctx: any) => void | Promise<void>;
16
19
  }
17
20
  export interface ExtensionWidget {
18
21
  id: string;
19
22
  location: "aboveInput" | "belowInput" | "footer";
20
23
  render: (width: number) => string[];
21
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
+ }
22
61
  export interface ExtensionContext {
23
62
  workspace: string;
24
63
  trusted: boolean;
64
+ hasUI: boolean;
65
+ ui: ExtensionUIContext;
25
66
  log: (message: string) => void;
67
+ sessionManager?: any;
26
68
  }
27
69
  export interface ExtensionProvider {
28
70
  name: string;
@@ -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,6 +8,7 @@ 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";
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ 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";
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,gBAAgB,CAAC;AAC/B,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"}
@@ -1,5 +1,6 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { createInterface } from "node:readline";
3
+ import { terminateProcessTree } from "../security/process.js";
3
4
  const ENV_ALLOWLIST = new Set([
4
5
  "PATH",
5
6
  "HOME",
@@ -157,28 +158,10 @@ export class StdioTransport {
157
158
  }
158
159
  if (child.exitCode !== null || child.signalCode !== null)
159
160
  return;
160
- const pid = child.pid;
161
- const killGroup = (signal) => {
162
- if (process.platform !== "win32" && pid) {
163
- try {
164
- process.kill(-pid, signal);
165
- return;
166
- }
167
- catch {
168
- // Fall through to direct child kill.
169
- }
170
- }
171
- try {
172
- child.kill(signal);
173
- }
174
- catch {
175
- // Ignore.
176
- }
177
- };
178
- killGroup("SIGTERM");
161
+ terminateProcessTree(child, "SIGTERM");
179
162
  await new Promise((resolve) => {
180
163
  const timer = setTimeout(() => {
181
- killGroup("SIGKILL");
164
+ terminateProcessTree(child, "SIGKILL");
182
165
  resolve();
183
166
  }, 750);
184
167
  child.once("close", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"stdio-transport.js","sourceRoot":"","sources":["../../src/mcp/stdio-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stdio-transport.js","sourceRoot":"","sources":["../../src/mcp/stdio-transport.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import type { ToolCall } from "../types.js";
2
2
  import type { Tool, ToolContext } from "../tools/types.js";
3
3
  import type { ToolResult } from "../tools/types.js";
4
- import { LockManager, type Release } from "./locks.js";
5
- export declare function executeToolBatch(calls: ToolCall[], toolMap: Map<string, Tool>, ctx: ToolContext, maxParallel: number, signal: AbortSignal, lockManager?: LockManager, bashConcurrency?: "serial" | "parallel"): Promise<ToolResult[]>;
4
+ import { LockManager } from "./locks.js";
5
+ export { ToolExecutor } from "./tool-executor.js";
6
6
  export { LockManager };
7
- export type { Release };
7
+ export type { Release } from "./locks.js";
8
+ export declare function executeToolBatch(calls: ToolCall[], toolMap: Map<string, Tool>, ctx: ToolContext, maxParallel: number, signal: AbortSignal, lockManager?: LockManager, bashConcurrency?: "serial" | "parallel"): Promise<ToolResult[]>;