hackwriter 0.0.7 → 0.0.9

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 (80) hide show
  1. package/dist/agent/AgentExecutor.d.ts.map +1 -1
  2. package/dist/agent/AgentExecutor.js +19 -4
  3. package/dist/agent/AgentExecutor.js.map +1 -1
  4. package/dist/cli.js +87 -22
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/setup.d.ts.map +1 -1
  7. package/dist/commands/setup.js +4 -3
  8. package/dist/commands/setup.js.map +1 -1
  9. package/dist/config/ConfigSchema.d.ts +6 -4
  10. package/dist/config/ConfigSchema.d.ts.map +1 -1
  11. package/dist/config/ConfigSchema.js +3 -2
  12. package/dist/config/ConfigSchema.js.map +1 -1
  13. package/dist/config/Configuration.d.ts +2 -1
  14. package/dist/config/Configuration.d.ts.map +1 -1
  15. package/dist/config/ConfigurationLoader.d.ts.map +1 -1
  16. package/dist/config/ConfigurationLoader.js +27 -14
  17. package/dist/config/ConfigurationLoader.js.map +1 -1
  18. package/dist/config/ProviderRegistry.d.ts.map +1 -1
  19. package/dist/config/ProviderRegistry.js +1 -11
  20. package/dist/config/ProviderRegistry.js.map +1 -1
  21. package/dist/config/constants.d.ts +22 -0
  22. package/dist/config/constants.d.ts.map +1 -0
  23. package/dist/config/constants.js +30 -0
  24. package/dist/config/constants.js.map +1 -0
  25. package/dist/mcp/MCPClient.d.ts +56 -0
  26. package/dist/mcp/MCPClient.d.ts.map +1 -0
  27. package/dist/mcp/MCPClient.js +134 -0
  28. package/dist/mcp/MCPClient.js.map +1 -0
  29. package/dist/mcp/MCPToolAdapter.d.ts +28 -0
  30. package/dist/mcp/MCPToolAdapter.d.ts.map +1 -0
  31. package/dist/mcp/MCPToolAdapter.js +91 -0
  32. package/dist/mcp/MCPToolAdapter.js.map +1 -0
  33. package/dist/mcp/index.d.ts +3 -0
  34. package/dist/mcp/index.d.ts.map +1 -0
  35. package/dist/mcp/index.js +3 -0
  36. package/dist/mcp/index.js.map +1 -0
  37. package/dist/session/SessionManager.d.ts.map +1 -1
  38. package/dist/session/SessionManager.js +2 -1
  39. package/dist/session/SessionManager.js.map +1 -1
  40. package/dist/tools/base/ToolRegistry.d.ts +13 -4
  41. package/dist/tools/base/ToolRegistry.d.ts.map +1 -1
  42. package/dist/tools/base/ToolRegistry.js.map +1 -1
  43. package/dist/tools/file/ListFilesTool.d.ts.map +1 -1
  44. package/dist/tools/file/ListFilesTool.js +19 -3
  45. package/dist/tools/file/ListFilesTool.js.map +1 -1
  46. package/dist/tools/file/ReadFileTool.d.ts.map +1 -1
  47. package/dist/tools/file/ReadFileTool.js +20 -0
  48. package/dist/tools/file/ReadFileTool.js.map +1 -1
  49. package/dist/tools/file/WriteFileTool.d.ts.map +1 -1
  50. package/dist/tools/file/WriteFileTool.js +15 -0
  51. package/dist/tools/file/WriteFileTool.js.map +1 -1
  52. package/dist/tools/hackmd/CreateNoteTool.d.ts.map +1 -1
  53. package/dist/tools/hackmd/CreateNoteTool.js +22 -3
  54. package/dist/tools/hackmd/CreateNoteTool.js.map +1 -1
  55. package/dist/tools/hackmd/DeleteNoteTool.d.ts.map +1 -1
  56. package/dist/tools/hackmd/DeleteNoteTool.js +16 -6
  57. package/dist/tools/hackmd/DeleteNoteTool.js.map +1 -1
  58. package/dist/tools/hackmd/UpdateNoteTool.d.ts.map +1 -1
  59. package/dist/tools/hackmd/UpdateNoteTool.js +29 -10
  60. package/dist/tools/hackmd/UpdateNoteTool.js.map +1 -1
  61. package/dist/tools/hackmd/index.d.ts.map +1 -1
  62. package/dist/tools/hackmd/index.js +0 -13
  63. package/dist/tools/hackmd/index.js.map +1 -1
  64. package/dist/ui/shell/CommandRegistry.d.ts +1 -0
  65. package/dist/ui/shell/CommandRegistry.d.ts.map +1 -1
  66. package/dist/ui/shell/CommandRegistry.js +97 -0
  67. package/dist/ui/shell/CommandRegistry.js.map +1 -1
  68. package/dist/ui/shell/InteractiveShell.d.ts +9 -0
  69. package/dist/ui/shell/InteractiveShell.d.ts.map +1 -1
  70. package/dist/ui/shell/InteractiveShell.js +33 -0
  71. package/dist/ui/shell/InteractiveShell.js.map +1 -1
  72. package/dist/utils/RateLimiter.d.ts +36 -0
  73. package/dist/utils/RateLimiter.d.ts.map +1 -0
  74. package/dist/utils/RateLimiter.js +62 -0
  75. package/dist/utils/RateLimiter.js.map +1 -0
  76. package/dist/utils/retry.d.ts +55 -0
  77. package/dist/utils/retry.d.ts.map +1 -0
  78. package/dist/utils/retry.js +97 -0
  79. package/dist/utils/retry.js.map +1 -0
  80. package/package.json +2 -1
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Application-wide constants
3
+ * Centralizes magic strings and configuration values
4
+ */
5
+ export declare const CONFIG_DIR = ".hackwriter";
6
+ export declare const CONFIG_FILE = "config.json";
7
+ export declare const SESSIONS_DIR = "sessions";
8
+ export declare const MAX_FILE_SIZE: number;
9
+ export declare const MAX_HACKMD_CONTENT_SIZE: number;
10
+ export declare const MAX_FILE_DISPLAY_SIZE: number;
11
+ export declare const MAX_FILES_DISPLAY = 100;
12
+ export declare const DEFAULT_RATE_LIMIT_REQUESTS = 10;
13
+ export declare const DEFAULT_RATE_LIMIT_WINDOW_MS = 60000;
14
+ export declare const DEFAULT_MAX_RETRIES = 3;
15
+ export declare const DEFAULT_RETRY_DELAY_MS = 1000;
16
+ export declare const DEFAULT_MAX_RETRY_DELAY_MS = 30000;
17
+ export declare const DEFAULT_HACKMD_API_URL = "https://api.hackmd.io/v1";
18
+ export declare const DEFAULT_HACKMD_MCP_URL = "https://mcp.hackmd.io/v1";
19
+ export declare const DEFAULT_MODEL = "anthropic-claude-3-5-haiku-latest";
20
+ export declare const DEFAULT_MAX_STEPS_PER_RUN = 100;
21
+ export declare const DEFAULT_MAX_RETRIES_PER_STEP = 3;
22
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,UAAU,gBAAgB,CAAC;AACxC,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,YAAY,aAAa,CAAC;AAGvC,eAAO,MAAM,aAAa,QAAmB,CAAC;AAC9C,eAAO,MAAM,uBAAuB,QAAkB,CAAC;AACvD,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAGjD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAGrC,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAGlD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAGhD,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AACjE,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AAGjE,eAAO,MAAM,aAAa,sCAAsC,CAAC;AAGjE,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Application-wide constants
3
+ * Centralizes magic strings and configuration values
4
+ */
5
+ // Directory and file paths
6
+ export const CONFIG_DIR = '.hackwriter';
7
+ export const CONFIG_FILE = 'config.json';
8
+ export const SESSIONS_DIR = 'sessions';
9
+ // File size limits
10
+ export const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB for local files
11
+ export const MAX_HACKMD_CONTENT_SIZE = 5 * 1024 * 1024; // 5MB for HackMD API
12
+ export const MAX_FILE_DISPLAY_SIZE = 1024 * 1024; // 1MB display limit
13
+ // Display limits
14
+ export const MAX_FILES_DISPLAY = 100; // Maximum files to display in list
15
+ // Rate limiting defaults
16
+ export const DEFAULT_RATE_LIMIT_REQUESTS = 10; // requests per window
17
+ export const DEFAULT_RATE_LIMIT_WINDOW_MS = 60000; // 1 minute
18
+ // Retry defaults
19
+ export const DEFAULT_MAX_RETRIES = 3;
20
+ export const DEFAULT_RETRY_DELAY_MS = 1000;
21
+ export const DEFAULT_MAX_RETRY_DELAY_MS = 30000;
22
+ // HackMD API defaults
23
+ export const DEFAULT_HACKMD_API_URL = 'https://api.hackmd.io/v1';
24
+ export const DEFAULT_HACKMD_MCP_URL = 'https://mcp.hackmd.io/v1';
25
+ // Model defaults
26
+ export const DEFAULT_MODEL = 'anthropic-claude-3-5-haiku-latest';
27
+ // Loop control defaults
28
+ export const DEFAULT_MAX_STEPS_PER_RUN = 100;
29
+ export const DEFAULT_MAX_RETRIES_PER_STEP = 3;
30
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,mBAAmB;AACnB,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,uBAAuB;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,qBAAqB;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,oBAAoB;AAEtE,iBAAiB;AACjB,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC,CAAC,mCAAmC;AAEzE,yBAAyB;AACzB,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC,CAAC,sBAAsB;AACrE,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC,CAAC,WAAW;AAE9D,iBAAiB;AACjB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD,sBAAsB;AACtB,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AACjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAEjE,iBAAiB;AACjB,MAAM,CAAC,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAEjE,wBAAwB;AACxB,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAC7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ export interface MCPClientConfig {
2
+ serverUrl: string;
3
+ apiToken: string;
4
+ }
5
+ export interface MCPToolDefinition {
6
+ name: string;
7
+ description?: string;
8
+ inputSchema?: Record<string, unknown>;
9
+ }
10
+ export interface MCPToolCallResult {
11
+ content: {
12
+ type: string;
13
+ text?: string;
14
+ }[];
15
+ isError?: boolean;
16
+ }
17
+ export declare class MCPClient {
18
+ private client;
19
+ private transport;
20
+ private config;
21
+ private connected;
22
+ constructor(config: MCPClientConfig);
23
+ /**
24
+ * Connect to MCP server
25
+ */
26
+ connect(): Promise<void>;
27
+ /**
28
+ * Disconnect from MCP server
29
+ */
30
+ disconnect(): Promise<void>;
31
+ /**
32
+ * Check if connected
33
+ */
34
+ isConnected(): boolean;
35
+ /**
36
+ * List available tools from MCP server
37
+ */
38
+ listTools(): Promise<MCPToolDefinition[]>;
39
+ /**
40
+ * Call a tool on the MCP server
41
+ */
42
+ callTool(name: string, args?: Record<string, unknown>): Promise<MCPToolCallResult>;
43
+ /**
44
+ * List available resources from MCP server
45
+ */
46
+ listResources(): Promise<{
47
+ uri: string;
48
+ name?: string;
49
+ mimeType?: string;
50
+ }[]>;
51
+ /**
52
+ * Read a resource from MCP server
53
+ */
54
+ readResource(uri: string): Promise<string>;
55
+ }
56
+ //# sourceMappingURL=MCPClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPClient.d.ts","sourceRoot":"","sources":["../../src/mcp/MCPClient.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,eAAe;IAInC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAa/C;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkB5F;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAanF;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBjD"}
@@ -0,0 +1,134 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
3
+ import { Logger } from "../utils/Logger.js";
4
+ import { readFileSync } from "fs";
5
+ import { dirname, join } from "path";
6
+ import { fileURLToPath } from "url";
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+ const packageJson = JSON.parse(readFileSync(join(__dirname, "../../package.json"), "utf-8"));
10
+ export class MCPClient {
11
+ client = null;
12
+ transport = null;
13
+ config;
14
+ connected = false;
15
+ constructor(config) {
16
+ this.config = config;
17
+ }
18
+ /**
19
+ * Connect to MCP server
20
+ */
21
+ async connect() {
22
+ if (this.connected) {
23
+ Logger.debug("MCPClient", "Already connected");
24
+ return;
25
+ }
26
+ Logger.debug("MCPClient", `Connecting to ${this.config.serverUrl}`);
27
+ this.transport = new StreamableHTTPClientTransport(new URL(this.config.serverUrl), {
28
+ requestInit: {
29
+ headers: {
30
+ Authorization: `Bearer ${this.config.apiToken}`,
31
+ },
32
+ },
33
+ });
34
+ this.client = new Client({
35
+ name: "hackwriter-cli",
36
+ version: packageJson.version,
37
+ }, {
38
+ capabilities: {},
39
+ });
40
+ await this.client.connect(this.transport);
41
+ this.connected = true;
42
+ Logger.info("MCPClient", "Connected to MCP server");
43
+ }
44
+ /**
45
+ * Disconnect from MCP server
46
+ */
47
+ async disconnect() {
48
+ if (!this.connected)
49
+ return;
50
+ try {
51
+ if (this.client) {
52
+ await this.client.close();
53
+ this.client = null;
54
+ }
55
+ if (this.transport) {
56
+ await this.transport.close();
57
+ this.transport = null;
58
+ }
59
+ this.connected = false;
60
+ Logger.debug("MCPClient", "Disconnected from MCP server");
61
+ }
62
+ catch (error) {
63
+ const msg = error instanceof Error ? error.message : String(error);
64
+ Logger.warn("MCPClient", `Error during disconnect: ${msg}`);
65
+ }
66
+ }
67
+ /**
68
+ * Check if connected
69
+ */
70
+ isConnected() {
71
+ return this.connected;
72
+ }
73
+ /**
74
+ * List available tools from MCP server
75
+ */
76
+ async listTools() {
77
+ if (!this.client) {
78
+ throw new Error("Not connected to MCP server");
79
+ }
80
+ const response = await this.client.listTools();
81
+ return (response.tools || []).map((tool) => ({
82
+ name: tool.name,
83
+ description: tool.description,
84
+ inputSchema: tool.inputSchema,
85
+ }));
86
+ }
87
+ /**
88
+ * Call a tool on the MCP server
89
+ */
90
+ async callTool(name, args = {}) {
91
+ if (!this.client) {
92
+ throw new Error("Not connected to MCP server");
93
+ }
94
+ Logger.debug("MCPClient", `Calling tool: ${name}`);
95
+ const response = await this.client.callTool({
96
+ name,
97
+ arguments: args,
98
+ });
99
+ return {
100
+ content: response.content,
101
+ isError: response.isError === true,
102
+ };
103
+ }
104
+ /**
105
+ * List available resources from MCP server
106
+ */
107
+ async listResources() {
108
+ if (!this.client) {
109
+ throw new Error("Not connected to MCP server");
110
+ }
111
+ const response = await this.client.listResources();
112
+ return (response.resources || []).map((r) => ({
113
+ uri: r.uri,
114
+ name: r.name,
115
+ mimeType: r.mimeType,
116
+ }));
117
+ }
118
+ /**
119
+ * Read a resource from MCP server
120
+ */
121
+ async readResource(uri) {
122
+ if (!this.client) {
123
+ throw new Error("Not connected to MCP server");
124
+ }
125
+ Logger.debug("MCPClient", `Reading resource: ${uri}`);
126
+ const response = await this.client.readResource({ uri });
127
+ const textContents = response.contents
128
+ .filter((c) => "text" in c)
129
+ .map((c) => c.text)
130
+ .join("\n");
131
+ return textContents;
132
+ }
133
+ }
134
+ //# sourceMappingURL=MCPClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPClient.js","sourceRoot":"","sources":["../../src/mcp/MCPClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { ToolResult, ToolSchema } from "../tools/base/Tool.js";
2
+ import type { MCPClient, MCPToolDefinition } from "./MCPClient.js";
3
+ /**
4
+ * Interface matching Tool abstract class for compatibility
5
+ */
6
+ export interface ToolLike {
7
+ name: string;
8
+ description: string;
9
+ inputSchema: ToolSchema;
10
+ call(params: Record<string, unknown>): Promise<ToolResult>;
11
+ }
12
+ /**
13
+ * Adapter that wraps MCP remote tools to match our local Tool interface
14
+ */
15
+ export declare class MCPToolAdapter implements ToolLike {
16
+ private mcpClient;
17
+ private toolDef;
18
+ readonly name: string;
19
+ readonly description: string;
20
+ readonly inputSchema: ToolSchema;
21
+ constructor(mcpClient: MCPClient, toolDef: MCPToolDefinition);
22
+ call(params: Record<string, unknown>): Promise<ToolResult>;
23
+ /**
24
+ * Extract a meaningful brief from the response content
25
+ */
26
+ private extractBrief;
27
+ }
28
+ //# sourceMappingURL=MCPToolAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPToolAdapter.d.ts","sourceRoot":"","sources":["../../src/mcp/MCPToolAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnE;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAM3C,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IANjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;gBAGvB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,iBAAiB;IAU9B,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IA0ChE;;OAEG;IACH,OAAO,CAAC,YAAY;CAyBrB"}
@@ -0,0 +1,91 @@
1
+ import { Logger } from "../utils/Logger.js";
2
+ /**
3
+ * Adapter that wraps MCP remote tools to match our local Tool interface
4
+ */
5
+ export class MCPToolAdapter {
6
+ mcpClient;
7
+ toolDef;
8
+ name;
9
+ description;
10
+ inputSchema;
11
+ constructor(mcpClient, toolDef) {
12
+ this.mcpClient = mcpClient;
13
+ this.toolDef = toolDef;
14
+ this.name = toolDef.name;
15
+ this.description = toolDef.description ?? "";
16
+ this.inputSchema = toolDef.inputSchema ?? {
17
+ type: "object",
18
+ properties: {},
19
+ };
20
+ }
21
+ async call(params) {
22
+ try {
23
+ Logger.debug("MCPToolAdapter", `Calling remote tool: ${this.name}`);
24
+ const response = await this.mcpClient.callTool(this.name, params);
25
+ // Extract text content from MCP response
26
+ const textContent = response.content
27
+ .filter((c) => c.type === "text" && c.text)
28
+ .map((c) => c.text)
29
+ .join("\n");
30
+ if (response.isError) {
31
+ return {
32
+ ok: false,
33
+ output: textContent || "Unknown error",
34
+ message: textContent || "Tool call failed",
35
+ brief: "Error",
36
+ };
37
+ }
38
+ // Extract a meaningful brief from the response
39
+ const brief = this.extractBrief(textContent);
40
+ return {
41
+ ok: true,
42
+ output: textContent,
43
+ message: "Success",
44
+ brief,
45
+ };
46
+ }
47
+ catch (error) {
48
+ const message = error instanceof Error ? error.message : String(error);
49
+ Logger.error("MCPToolAdapter", `Failed to call ${this.name}: ${message}`);
50
+ return {
51
+ ok: false,
52
+ output: message,
53
+ message,
54
+ brief: "Error",
55
+ };
56
+ }
57
+ }
58
+ /**
59
+ * Extract a meaningful brief from the response content
60
+ */
61
+ extractBrief(content) {
62
+ // Try to parse as JSON and extract a meaningful field
63
+ try {
64
+ const json = JSON.parse(content);
65
+ // Common fields that make good briefs
66
+ if (json.name)
67
+ return json.name;
68
+ if (json.title)
69
+ return json.title;
70
+ if (json.email)
71
+ return json.email;
72
+ if (json.id)
73
+ return `ID: ${json.id}`;
74
+ if (Array.isArray(json))
75
+ return `${json.length} items`;
76
+ }
77
+ catch {
78
+ // Not JSON, try to find first meaningful line
79
+ }
80
+ // Find first non-empty, non-bracket line
81
+ const lines = content.split("\n");
82
+ for (const line of lines) {
83
+ const trimmed = line.trim();
84
+ if (trimmed && !["[", "]", "{", "}"].includes(trimmed)) {
85
+ return trimmed.slice(0, 50);
86
+ }
87
+ }
88
+ return "Done";
89
+ }
90
+ }
91
+ //# sourceMappingURL=MCPToolAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPToolAdapter.js","sourceRoot":"","sources":["../../src/mcp/MCPToolAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { MCPClient, type MCPClientConfig, type MCPToolDefinition } from "./MCPClient.js";
2
+ export { MCPToolAdapter } from "./MCPToolAdapter.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { MCPClient } from "./MCPClient.js";
2
+ export { MCPToolAdapter } from "./MCPToolAdapter.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgD,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../src/session/SessionManager.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,WAAW,CAIxB;WAEW,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAqBzC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAuChE"}
1
+ {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../src/session/SessionManager.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,WAAW,CAIxB;WAEW,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAqBzC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAuChE"}
@@ -3,8 +3,9 @@ import * as path from 'path';
3
3
  import * as os from 'os';
4
4
  import * as crypto from 'crypto';
5
5
  import { Logger } from '../utils/Logger.js';
6
+ import { CONFIG_DIR, SESSIONS_DIR } from '../config/constants.js';
6
7
  export class SessionManager {
7
- static sessionsDir = path.join(os.homedir(), '.hackwriter', 'sessions');
8
+ static sessionsDir = path.join(os.homedir(), CONFIG_DIR, SESSIONS_DIR);
8
9
  static async create(workDir) {
9
10
  const sessionId = crypto.randomUUID();
10
11
  const workDirHash = crypto
@@ -1 +1 @@
1
- {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../src/session/SessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../src/session/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,18 @@
1
- import type { Tool } from './Tool.js';
1
+ import type { ToolResult, ToolSchema } from './Tool.js';
2
+ /**
3
+ * Interface for tool-like objects (compatible with both Tool class and MCPToolAdapter)
4
+ */
5
+ export interface ToolLike {
6
+ name: string;
7
+ description: string;
8
+ inputSchema: ToolSchema;
9
+ call(params: Record<string, unknown>): Promise<ToolResult>;
10
+ }
2
11
  export declare class ToolRegistry {
3
12
  private tools;
4
- register(tool: Tool): void;
5
- get(name: string): Tool | undefined;
6
- getAll(): Tool[];
13
+ register(tool: ToolLike): void;
14
+ get(name: string): ToolLike | undefined;
15
+ getAll(): ToolLike[];
7
16
  getSchemas(): {
8
17
  name: string;
9
18
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ToolRegistry.d.ts","sourceRoot":"","sources":["../../../src/tools/base/ToolRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA2B;IAExC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,MAAM,IAAI,IAAI,EAAE;IAIhB,UAAU,IAAI;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,OAAO,CAAC;KACvB,EAAE;IAQH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"ToolRegistry.d.ts","sourceRoot":"","sources":["../../../src/tools/base/ToolRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5D;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA+B;IAE5C,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAI9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIvC,MAAM,IAAI,QAAQ,EAAE;IAIpB,UAAU,IAAI;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,OAAO,CAAC;KACvB,EAAE;IAQH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,KAAK,IAAI,IAAI;CAGd"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToolRegistry.js","sourceRoot":"","sources":["../../../src/tools/base/ToolRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAExC,QAAQ,CAAC,IAAU;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,UAAU;QAKR,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"ToolRegistry.js","sourceRoot":"","sources":["../../../src/tools/base/ToolRegistry.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE5C,QAAQ,CAAC,IAAc;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,UAAU;QAKR,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ListFilesTool.d.ts","sourceRoot":"","sources":["../../../src/tools/file/ListFilesTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzE,UAAU,eAAe;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,IAAI,CAAC,eAAe,CAAC;IACtD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,qCAAqC;IACzD,QAAQ,CAAC,WAAW,EAAE,UAAU,CAiB9B;IAEI,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;YAyC1C,SAAS;IAmCvB,OAAO,CAAC,YAAY;CAMrB"}
1
+ {"version":3,"file":"ListFilesTool.d.ts","sourceRoot":"","sources":["../../../src/tools/file/ListFilesTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGzE,UAAU,eAAe;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,IAAI,CAAC,eAAe,CAAC;IACtD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,qCAAqC;IACzD,QAAQ,CAAC,WAAW,EAAE,UAAU,CAiB9B;IAEI,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;YAoE1C,SAAS;IAmCvB,OAAO,CAAC,YAAY;CAMrB"}
@@ -1,6 +1,7 @@
1
1
  import { promises as fs } from 'node:fs';
2
- import { join, relative } from 'node:path';
2
+ import { join, relative, dirname } from 'node:path';
3
3
  import { Tool } from '../base/Tool.js';
4
+ import { MAX_FILES_DISPLAY } from '../../config/constants.js';
4
5
  export class ListFilesTool extends Tool {
5
6
  name = 'list_files';
6
7
  description = 'List files in a local directory';
@@ -23,12 +24,24 @@ export class ListFilesTool extends Tool {
23
24
  required: ['directoryPath'],
24
25
  };
25
26
  async call(params) {
27
+ // Validate directory path
28
+ if (!params.directoryPath || params.directoryPath.trim() === '') {
29
+ return this.error('Directory path cannot be empty', 'Directory path is required', 'Invalid path');
30
+ }
31
+ // Prevent path traversal attacks
32
+ const normalizedPath = dirname(params.directoryPath);
33
+ if (normalizedPath.includes('..')) {
34
+ return this.error('Path traversal is not allowed for security reasons', 'Security violation: path traversal detected', 'Security error');
35
+ }
26
36
  try {
27
37
  const files = await this.listFiles(params.directoryPath, params.recursive ?? false, params.pattern);
28
38
  if (files.length === 0) {
29
39
  return this.ok('No files found', 'No files found', 'Empty');
30
40
  }
31
- const output = files
41
+ // Limit output for very large directories
42
+ const displayFiles = files.slice(0, MAX_FILES_DISPLAY);
43
+ const hasMore = files.length > MAX_FILES_DISPLAY;
44
+ const output = displayFiles
32
45
  .map((file, index) => {
33
46
  const stats = file.stats;
34
47
  const type = stats.isDirectory() ? '📁' : '📄';
@@ -37,7 +50,10 @@ export class ListFilesTool extends Tool {
37
50
  ` Modified: ${stats.mtime.toLocaleString()}`;
38
51
  })
39
52
  .join('\n\n');
40
- return this.ok(output, `Found ${files.length} items in ${params.directoryPath}`, `${files.length} items`);
53
+ const finalOutput = hasMore
54
+ ? `${output}\n\n... and ${files.length - MAX_FILES_DISPLAY} more items (truncated for display)`
55
+ : output;
56
+ return this.ok(finalOutput, `Found ${files.length} items in ${params.directoryPath}`, `${files.length} items`);
41
57
  }
42
58
  catch (error) {
43
59
  const errorMsg = `Failed to list files: ${this.formatError(error)}`;
@@ -1 +1 @@
1
- {"version":3,"file":"ListFilesTool.js","sourceRoot":"","sources":["../../../src/tools/file/ListFilesTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListFilesTool.js","sourceRoot":"","sources":["../../../src/tools/file/ListFilesTool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReadFileTool.d.ts","sourceRoot":"","sources":["../../../src/tools/file/ReadFileTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGzE,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC;IACpD,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,sCAAsC;IAC1D,QAAQ,CAAC,WAAW,EAAE,UAAU,CAS9B;IAEI,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CAyBxD"}
1
+ {"version":3,"file":"ReadFileTool.d.ts","sourceRoot":"","sources":["../../../src/tools/file/ReadFileTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKzE,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC;IACpD,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,sCAAsC;IAC1D,QAAQ,CAAC,WAAW,EAAE,UAAU,CAS9B;IAEI,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CA0DxD"}
@@ -1,5 +1,7 @@
1
1
  import { Tool } from '../base/Tool.js';
2
2
  import { promises as fs } from 'node:fs';
3
+ import { dirname } from 'node:path';
4
+ import { MAX_FILE_DISPLAY_SIZE } from '../../config/constants.js';
3
5
  export class ReadFileTool extends Tool {
4
6
  name = 'read_file';
5
7
  description = 'Read the content of a local file';
@@ -14,9 +16,27 @@ export class ReadFileTool extends Tool {
14
16
  required: ['filePath'],
15
17
  };
16
18
  async call(params) {
19
+ // Validate file path
20
+ if (!params.filePath || params.filePath.trim() === '') {
21
+ return this.error('File path cannot be empty', 'File path is required', 'Invalid path');
22
+ }
23
+ // Prevent path traversal attacks
24
+ const normalizedPath = dirname(params.filePath);
25
+ if (normalizedPath.includes('..')) {
26
+ return this.error('Path traversal is not allowed for security reasons', 'Security violation: path traversal detected', 'Security error');
27
+ }
17
28
  try {
18
29
  const content = await fs.readFile(params.filePath, 'utf-8');
19
30
  const stats = await fs.stat(params.filePath);
31
+ // Warn if file is very large
32
+ if (stats.size > MAX_FILE_DISPLAY_SIZE) {
33
+ const sizeMB = (stats.size / (1024 * 1024)).toFixed(2);
34
+ return this.ok(`⚠️ File is very large (${sizeMB}MB)\n\n` +
35
+ `**File:** ${params.filePath}\n` +
36
+ `**Size:** ${stats.size} bytes\n` +
37
+ `**Modified:** ${stats.mtime.toLocaleString()}\n\n` +
38
+ `**Content (truncated to 1MB):**\n\`\`\`\n${content.slice(0, MAX_FILE_DISPLAY_SIZE)}\n...\n[truncated]\n\`\`\``, `Read file (truncated): ${params.filePath}`, 'Read (truncated)');
39
+ }
20
40
  const output = `**File:** ${params.filePath}\n` +
21
41
  `**Size:** ${stats.size} bytes\n` +
22
42
  `**Modified:** ${stats.mtime.toLocaleString()}\n\n` +
@@ -1 +1 @@
1
- {"version":3,"file":"ReadFileTool.js","sourceRoot":"","sources":["../../../src/tools/file/ReadFileTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoC,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAOzC,MAAM,OAAO,YAAa,SAAQ,IAAoB;IAC3C,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAAG,kCAAkC,CAAC;IACjD,WAAW,GAAe;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0BAA0B;aACxC;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,MAAsB;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE7C,MAAM,MAAM,GACV,aAAa,MAAM,CAAC,QAAQ,IAAI;gBAChC,aAAa,KAAK,CAAC,IAAI,UAAU;gBACjC,iBAAiB,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM;gBACnD,yBAAyB,OAAO,UAAU,CAAC;YAE7C,OAAO,IAAI,CAAC,EAAE,CACZ,MAAM,EACN,2BAA2B,MAAM,CAAC,QAAQ,EAAE,EAC5C,MAAM,CACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,wBAAwB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC,KAAK,CACf,QAAQ,EACR,QAAQ,EACR,aAAa,CACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"ReadFileTool.js","sourceRoot":"","sources":["../../../src/tools/file/ReadFileTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoC,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAOlE,MAAM,OAAO,YAAa,SAAQ,IAAoB;IAC3C,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAAG,kCAAkC,CAAC;IACjD,WAAW,GAAe;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0BAA0B;aACxC;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,MAAsB;QAC/B,qBAAqB;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,KAAK,CACf,2BAA2B,EAC3B,uBAAuB,EACvB,cAAc,CACf,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,KAAK,CACf,oDAAoD,EACpD,6CAA6C,EAC7C,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE7C,6BAA6B;YAC7B,IAAI,KAAK,CAAC,IAAI,GAAG,qBAAqB,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvD,OAAO,IAAI,CAAC,EAAE,CACZ,0BAA0B,MAAM,SAAS;oBACzC,aAAa,MAAM,CAAC,QAAQ,IAAI;oBAChC,aAAa,KAAK,CAAC,IAAI,UAAU;oBACjC,iBAAiB,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM;oBACnD,4CAA4C,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,4BAA4B,EAC/G,0BAA0B,MAAM,CAAC,QAAQ,EAAE,EAC3C,kBAAkB,CACnB,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GACV,aAAa,MAAM,CAAC,QAAQ,IAAI;gBAChC,aAAa,KAAK,CAAC,IAAI,UAAU;gBACjC,iBAAiB,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM;gBACnD,yBAAyB,OAAO,UAAU,CAAC;YAE7C,OAAO,IAAI,CAAC,EAAE,CACZ,MAAM,EACN,2BAA2B,MAAM,CAAC,QAAQ,EAAE,EAC5C,MAAM,CACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,wBAAwB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC,KAAK,CACf,QAAQ,EACR,QAAQ,EACR,aAAa,CACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"WriteFileTool.d.ts","sourceRoot":"","sources":["../../../src/tools/file/WriteFileTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAItE,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,IAAI,CAAC,eAAe,CAAC;IAsB1C,OAAO,CAAC,eAAe;IArBnC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,mCAAmC;IACvD,QAAQ,CAAC,WAAW,EAAE,UAAU,CAiB9B;gBAEkB,eAAe,EAAE,eAAe;IAI9C,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;CA6CzD"}
1
+ {"version":3,"file":"WriteFileTool.d.ts","sourceRoot":"","sources":["../../../src/tools/file/WriteFileTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAKtE,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,IAAI,CAAC,eAAe,CAAC;IAsB1C,OAAO,CAAC,eAAe;IArBnC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,mCAAmC;IACvD,QAAQ,CAAC,WAAW,EAAE,UAAU,CAiB9B;gBAEkB,eAAe,EAAE,eAAe;IAI9C,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;CA0EzD"}