hackwriter 0.0.2
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.
- package/LICENSE +9 -0
- package/README.md +55 -0
- package/dist/agent/Agent.d.ts +9 -0
- package/dist/agent/Agent.d.ts.map +1 -0
- package/dist/agent/Agent.js +2 -0
- package/dist/agent/Agent.js.map +1 -0
- package/dist/agent/AgentExecutor.d.ts +36 -0
- package/dist/agent/AgentExecutor.d.ts.map +1 -0
- package/dist/agent/AgentExecutor.js +306 -0
- package/dist/agent/AgentExecutor.js.map +1 -0
- package/dist/agent/ApprovalManager.d.ts +8 -0
- package/dist/agent/ApprovalManager.d.ts.map +1 -0
- package/dist/agent/ApprovalManager.js +45 -0
- package/dist/agent/ApprovalManager.js.map +1 -0
- package/dist/agent/ContextCompressor.d.ts +9 -0
- package/dist/agent/ContextCompressor.d.ts.map +1 -0
- package/dist/agent/ContextCompressor.js +58 -0
- package/dist/agent/ContextCompressor.js.map +1 -0
- package/dist/agent/ConversationContext.d.ts +19 -0
- package/dist/agent/ConversationContext.d.ts.map +1 -0
- package/dist/agent/ConversationContext.js +236 -0
- package/dist/agent/ConversationContext.js.map +1 -0
- package/dist/agent/ModelFactory.d.ts +4 -0
- package/dist/agent/ModelFactory.d.ts.map +1 -0
- package/dist/agent/ModelFactory.js +32 -0
- package/dist/agent/ModelFactory.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +146 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/setup.d.ts +2 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +110 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/config/ConfigSchema.d.ts +75 -0
- package/dist/config/ConfigSchema.d.ts.map +1 -0
- package/dist/config/ConfigSchema.js +54 -0
- package/dist/config/ConfigSchema.js.map +1 -0
- package/dist/config/Configuration.d.ts +30 -0
- package/dist/config/Configuration.d.ts.map +1 -0
- package/dist/config/Configuration.js +2 -0
- package/dist/config/Configuration.js.map +1 -0
- package/dist/config/ConfigurationLoader.d.ts +8 -0
- package/dist/config/ConfigurationLoader.d.ts.map +1 -0
- package/dist/config/ConfigurationLoader.js +75 -0
- package/dist/config/ConfigurationLoader.js.map +1 -0
- package/dist/messaging/MessageBus.d.ts +11 -0
- package/dist/messaging/MessageBus.d.ts.map +1 -0
- package/dist/messaging/MessageBus.js +23 -0
- package/dist/messaging/MessageBus.js.map +1 -0
- package/dist/messaging/MessageTypes.d.ts +39 -0
- package/dist/messaging/MessageTypes.d.ts.map +1 -0
- package/dist/messaging/MessageTypes.js +2 -0
- package/dist/messaging/MessageTypes.js.map +1 -0
- package/dist/session/SessionManager.d.ts +11 -0
- package/dist/session/SessionManager.d.ts.map +1 -0
- package/dist/session/SessionManager.js +56 -0
- package/dist/session/SessionManager.js.map +1 -0
- package/dist/tools/base/Tool.d.ts +19 -0
- package/dist/tools/base/Tool.d.ts.map +1 -0
- package/dist/tools/base/Tool.js +15 -0
- package/dist/tools/base/Tool.js.map +1 -0
- package/dist/tools/base/ToolRegistry.d.ts +16 -0
- package/dist/tools/base/ToolRegistry.d.ts.map +1 -0
- package/dist/tools/base/ToolRegistry.js +29 -0
- package/dist/tools/base/ToolRegistry.js.map +1 -0
- package/dist/tools/file/ListFilesTool.d.ts +17 -0
- package/dist/tools/file/ListFilesTool.d.ts.map +1 -0
- package/dist/tools/file/ListFilesTool.js +80 -0
- package/dist/tools/file/ListFilesTool.js.map +1 -0
- package/dist/tools/file/ReadFileTool.d.ts +13 -0
- package/dist/tools/file/ReadFileTool.d.ts.map +1 -0
- package/dist/tools/file/ReadFileTool.js +32 -0
- package/dist/tools/file/ReadFileTool.js.map +1 -0
- package/dist/tools/file/WriteFileTool.d.ts +18 -0
- package/dist/tools/file/WriteFileTool.d.ts.map +1 -0
- package/dist/tools/file/WriteFileTool.js +54 -0
- package/dist/tools/file/WriteFileTool.js.map +1 -0
- package/dist/tools/file/index.d.ts +4 -0
- package/dist/tools/file/index.d.ts.map +1 -0
- package/dist/tools/file/index.js +4 -0
- package/dist/tools/file/index.js.map +1 -0
- package/dist/tools/hackmd/CreateNoteTool.d.ts +27 -0
- package/dist/tools/hackmd/CreateNoteTool.d.ts.map +1 -0
- package/dist/tools/hackmd/CreateNoteTool.js +85 -0
- package/dist/tools/hackmd/CreateNoteTool.js.map +1 -0
- package/dist/tools/hackmd/DeleteNoteTool.d.ts +19 -0
- package/dist/tools/hackmd/DeleteNoteTool.d.ts.map +1 -0
- package/dist/tools/hackmd/DeleteNoteTool.js +54 -0
- package/dist/tools/hackmd/DeleteNoteTool.js.map +1 -0
- package/dist/tools/hackmd/ExportNoteTool.d.ts +18 -0
- package/dist/tools/hackmd/ExportNoteTool.d.ts.map +1 -0
- package/dist/tools/hackmd/ExportNoteTool.js +75 -0
- package/dist/tools/hackmd/ExportNoteTool.js.map +1 -0
- package/dist/tools/hackmd/GetHistoryTool.d.ts +16 -0
- package/dist/tools/hackmd/GetHistoryTool.d.ts.map +1 -0
- package/dist/tools/hackmd/GetHistoryTool.js +51 -0
- package/dist/tools/hackmd/GetHistoryTool.js.map +1 -0
- package/dist/tools/hackmd/GetUserInfoTool.d.ts +13 -0
- package/dist/tools/hackmd/GetUserInfoTool.d.ts.map +1 -0
- package/dist/tools/hackmd/GetUserInfoTool.js +30 -0
- package/dist/tools/hackmd/GetUserInfoTool.js.map +1 -0
- package/dist/tools/hackmd/ListNotesTool.d.ts +17 -0
- package/dist/tools/hackmd/ListNotesTool.d.ts.map +1 -0
- package/dist/tools/hackmd/ListNotesTool.js +48 -0
- package/dist/tools/hackmd/ListNotesTool.js.map +1 -0
- package/dist/tools/hackmd/ListTeamsTool.d.ts +13 -0
- package/dist/tools/hackmd/ListTeamsTool.d.ts.map +1 -0
- package/dist/tools/hackmd/ListTeamsTool.js +34 -0
- package/dist/tools/hackmd/ListTeamsTool.js.map +1 -0
- package/dist/tools/hackmd/ReadNoteTool.d.ts +16 -0
- package/dist/tools/hackmd/ReadNoteTool.d.ts.map +1 -0
- package/dist/tools/hackmd/ReadNoteTool.js +36 -0
- package/dist/tools/hackmd/ReadNoteTool.js.map +1 -0
- package/dist/tools/hackmd/SearchNotesTool.d.ts +17 -0
- package/dist/tools/hackmd/SearchNotesTool.d.ts.map +1 -0
- package/dist/tools/hackmd/SearchNotesTool.js +49 -0
- package/dist/tools/hackmd/SearchNotesTool.js.map +1 -0
- package/dist/tools/hackmd/UpdateNoteTool.d.ts +20 -0
- package/dist/tools/hackmd/UpdateNoteTool.d.ts.map +1 -0
- package/dist/tools/hackmd/UpdateNoteTool.js +62 -0
- package/dist/tools/hackmd/UpdateNoteTool.js.map +1 -0
- package/dist/tools/hackmd/errorHandler.d.ts +6 -0
- package/dist/tools/hackmd/errorHandler.d.ts.map +1 -0
- package/dist/tools/hackmd/errorHandler.js +59 -0
- package/dist/tools/hackmd/errorHandler.js.map +1 -0
- package/dist/tools/hackmd/index.d.ts +11 -0
- package/dist/tools/hackmd/index.d.ts.map +1 -0
- package/dist/tools/hackmd/index.js +24 -0
- package/dist/tools/hackmd/index.js.map +1 -0
- package/dist/ui/shell/CommandRegistry.d.ts +20 -0
- package/dist/ui/shell/CommandRegistry.d.ts.map +1 -0
- package/dist/ui/shell/CommandRegistry.js +77 -0
- package/dist/ui/shell/CommandRegistry.js.map +1 -0
- package/dist/ui/shell/InteractiveShell.d.ts +15 -0
- package/dist/ui/shell/InteractiveShell.d.ts.map +1 -0
- package/dist/ui/shell/InteractiveShell.js +94 -0
- package/dist/ui/shell/InteractiveShell.js.map +1 -0
- package/dist/ui/shell/OutputRenderer.d.ts +8 -0
- package/dist/ui/shell/OutputRenderer.d.ts.map +1 -0
- package/dist/ui/shell/OutputRenderer.js +85 -0
- package/dist/ui/shell/OutputRenderer.js.map +1 -0
- package/dist/utils/ErrorTypes.d.ts +58 -0
- package/dist/utils/ErrorTypes.d.ts.map +1 -0
- package/dist/utils/ErrorTypes.js +156 -0
- package/dist/utils/ErrorTypes.js.map +1 -0
- package/dist/utils/Logger.d.ts +13 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +72 -0
- package/dist/utils/Logger.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Tool } from "../base/Tool";
|
|
2
|
+
import { handleHackMDError } from "./errorHandler";
|
|
3
|
+
export class ListNotesTool extends Tool {
|
|
4
|
+
hackmdClient;
|
|
5
|
+
name = "list_notes";
|
|
6
|
+
description = "List notes from HackMD. Use teamPath to list team notes.";
|
|
7
|
+
inputSchema = {
|
|
8
|
+
type: "object",
|
|
9
|
+
properties: {
|
|
10
|
+
teamPath: {
|
|
11
|
+
type: "string",
|
|
12
|
+
description: "Optional: team path or ID to list team notes",
|
|
13
|
+
},
|
|
14
|
+
limit: {
|
|
15
|
+
type: "number",
|
|
16
|
+
description: "Maximum number of notes to return (default: 20)",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
constructor(hackmdClient) {
|
|
21
|
+
super();
|
|
22
|
+
this.hackmdClient = hackmdClient;
|
|
23
|
+
}
|
|
24
|
+
async call(params) {
|
|
25
|
+
const isTeamNotes = Boolean(params.teamPath);
|
|
26
|
+
try {
|
|
27
|
+
const notes = isTeamNotes
|
|
28
|
+
? await this.hackmdClient.getTeamNotes(params.teamPath)
|
|
29
|
+
: await this.hackmdClient.getNoteList();
|
|
30
|
+
const limit = params.limit ?? 20;
|
|
31
|
+
const limitedNotes = notes.slice(0, limit);
|
|
32
|
+
const output = limitedNotes
|
|
33
|
+
.map((note, index) => `${index + 1}. **${note.title}**\n` +
|
|
34
|
+
` ID: \`${note.id}\`\n` +
|
|
35
|
+
` Last changed: ${new Date(note.lastChangedAt).toLocaleString()}\n` +
|
|
36
|
+
` Link: ${note.publishLink ?? "N/A"}\n`)
|
|
37
|
+
.join("\n");
|
|
38
|
+
const noteType = isTeamNotes ? "team notes" : "notes";
|
|
39
|
+
return this.ok(output || `No ${noteType} found.`, `Found ${notes.length} ${noteType} (showing ${limitedNotes.length})`, `${notes.length} ${noteType}`);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const noteType = isTeamNotes ? "team notes" : "notes";
|
|
43
|
+
const appError = handleHackMDError(error, `Failed to list ${noteType}`);
|
|
44
|
+
return this.error(appError.toUserString(), appError.message, "List failed");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=ListNotesTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListNotesTool.js","sourceRoot":"","sources":["../../../src/tools/hackmd/ListNotesTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAoC,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQnD,MAAM,OAAO,aAAc,SAAQ,IAAqB;IAkBlC;IAjBX,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAClB,0DAA0D,CAAC;IACpD,WAAW,GAAe;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8CAA8C;aAC5D;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iDAAiD;aAC/D;SACF;KACF,CAAC;IAEF,YAAoB,YAAiB;QACnC,KAAK,EAAE,CAAC;QADU,iBAAY,GAAZ,YAAY,CAAK;IAErC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAuB;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,WAAW;gBACvB,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,QAAS,CAAC;gBACxD,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAE1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAE3C,MAAM,MAAM,GAAG,YAAY;iBACxB,GAAG,CACF,CAAC,IAAU,EAAE,KAAa,EAAE,EAAE,CAC5B,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM;gBACnC,YAAY,IAAI,CAAC,EAAE,MAAM;gBACzB,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,cAAc,EAAE,IAAI;gBACrE,YAAY,IAAI,CAAC,WAAW,IAAI,KAAK,IAAI,CAC5C;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;YACtD,OAAO,IAAI,CAAC,EAAE,CACZ,MAAM,IAAI,MAAM,QAAQ,SAAS,EACjC,SAAS,KAAK,CAAC,MAAM,IAAI,QAAQ,aAAa,YAAY,CAAC,MAAM,GAAG,EACpE,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;YACtD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,QAAQ,EAAE,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC,KAAK,CACf,QAAQ,CAAC,YAAY,EAAE,EACvB,QAAQ,CAAC,OAAO,EAChB,aAAa,CACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { API } from '@hackmd/api';
|
|
2
|
+
import { Tool, type ToolResult, type ToolSchema } from '../base/Tool';
|
|
3
|
+
type ListTeamsParams = Record<string, unknown>;
|
|
4
|
+
export declare class ListTeamsTool extends Tool<ListTeamsParams> {
|
|
5
|
+
private hackmdClient;
|
|
6
|
+
readonly name = "list_teams";
|
|
7
|
+
readonly description = "List all teams the user belongs to";
|
|
8
|
+
readonly inputSchema: ToolSchema;
|
|
9
|
+
constructor(hackmdClient: API);
|
|
10
|
+
call(_params: ListTeamsParams): Promise<ToolResult>;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ListTeamsTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListTeamsTool.d.ts","sourceRoot":"","sources":["../../../src/tools/hackmd/ListTeamsTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtE,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C,qBAAa,aAAc,SAAQ,IAAI,CAAC,eAAe,CAAC;IAQ1C,OAAO,CAAC,YAAY;IAPhC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,wCAAwC;IAC5D,QAAQ,CAAC,WAAW,EAAE,UAAU,CAG9B;gBAEkB,YAAY,EAAE,GAAG;IAI/B,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;CAmC1D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Tool } from '../base/Tool';
|
|
2
|
+
export class ListTeamsTool extends Tool {
|
|
3
|
+
hackmdClient;
|
|
4
|
+
name = 'list_teams';
|
|
5
|
+
description = 'List all teams the user belongs to';
|
|
6
|
+
inputSchema = {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {},
|
|
9
|
+
};
|
|
10
|
+
constructor(hackmdClient) {
|
|
11
|
+
super();
|
|
12
|
+
this.hackmdClient = hackmdClient;
|
|
13
|
+
}
|
|
14
|
+
async call(_params) {
|
|
15
|
+
try {
|
|
16
|
+
const teams = await this.hackmdClient.getTeams();
|
|
17
|
+
if (!teams || teams.length === 0) {
|
|
18
|
+
return this.ok('No teams found', 'No teams found', 'No teams');
|
|
19
|
+
}
|
|
20
|
+
const output = teams
|
|
21
|
+
.map((team, index) => `${index + 1}. **${team.name}**\n` +
|
|
22
|
+
` Path: \`${team.path}\`\n` +
|
|
23
|
+
` Logo: ${team.logo ?? 'N/A'}\n` +
|
|
24
|
+
` Description: ${team.description ?? 'N/A'}\n`)
|
|
25
|
+
.join('\n');
|
|
26
|
+
return this.ok(output, `Found ${teams.length} teams`, `${teams.length} teams`);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const errorMsg = `Failed to list teams: ${this.formatError(error)}`;
|
|
30
|
+
return this.error(errorMsg, errorMsg, 'List failed');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ListTeamsTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListTeamsTool.js","sourceRoot":"","sources":["../../../src/tools/hackmd/ListTeamsTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAoC,MAAM,cAAc,CAAC;AAItE,MAAM,OAAO,aAAc,SAAQ,IAAqB;IAQlC;IAPX,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAAG,oCAAoC,CAAC;IACnD,WAAW,GAAe;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,YAAoB,YAAiB;QACnC,KAAK,EAAE,CAAC;QADU,iBAAY,GAAZ,YAAY,CAAK;IAErC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAEjD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,EAAE,CACZ,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,CACX,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,KAAK;iBACjB,GAAG,CAAC,CAAC,IAAU,EAAE,KAAa,EAAE,EAAE,CACjC,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,MAAM;gBAClC,cAAc,IAAI,CAAC,IAAI,MAAM;gBAC7B,YAAY,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI;gBAClC,mBAAmB,IAAI,CAAC,WAAW,IAAI,KAAK,IAAI,CACjD;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,OAAO,IAAI,CAAC,EAAE,CACZ,MAAM,EACN,SAAS,KAAK,CAAC,MAAM,QAAQ,EAC7B,GAAG,KAAK,CAAC,MAAM,QAAQ,CACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,yBAAyB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC,KAAK,CACf,QAAQ,EACR,QAAQ,EACR,aAAa,CACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { API } from "@hackmd/api";
|
|
2
|
+
import { Tool, type ToolResult, type ToolSchema } from "../base/Tool";
|
|
3
|
+
interface ReadNoteParams {
|
|
4
|
+
noteId: string;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare class ReadNoteTool extends Tool<ReadNoteParams> {
|
|
8
|
+
private hackmdClient;
|
|
9
|
+
readonly name = "read_note";
|
|
10
|
+
readonly description = "Read the full content of a specific HackMD note by its ID. You must provide the noteId.";
|
|
11
|
+
readonly inputSchema: ToolSchema;
|
|
12
|
+
constructor(hackmdClient: API);
|
|
13
|
+
call(params: ReadNoteParams): Promise<ToolResult>;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=ReadNoteTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadNoteTool.d.ts","sourceRoot":"","sources":["../../../src/tools/hackmd/ReadNoteTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAGtE,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC;IAgBxC,OAAO,CAAC,YAAY;IAfhC,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,6FACwE;IAC5F,QAAQ,CAAC,WAAW,EAAE,UAAU,CAU9B;gBAEkB,YAAY,EAAE,GAAG;IAI/B,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CAwBxD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Tool } from "../base/Tool";
|
|
2
|
+
import { handleHackMDError } from "./errorHandler";
|
|
3
|
+
export class ReadNoteTool extends Tool {
|
|
4
|
+
hackmdClient;
|
|
5
|
+
name = "read_note";
|
|
6
|
+
description = "Read the full content of a specific HackMD note by its ID. You must provide the noteId.";
|
|
7
|
+
inputSchema = {
|
|
8
|
+
type: "object",
|
|
9
|
+
properties: {
|
|
10
|
+
noteId: {
|
|
11
|
+
type: "string",
|
|
12
|
+
description: "The ID of the note to read (required). This is the note ID from list_notes or search_notes results.",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
required: ["noteId"],
|
|
16
|
+
};
|
|
17
|
+
constructor(hackmdClient) {
|
|
18
|
+
super();
|
|
19
|
+
this.hackmdClient = hackmdClient;
|
|
20
|
+
}
|
|
21
|
+
async call(params) {
|
|
22
|
+
try {
|
|
23
|
+
const note = await this.hackmdClient.getNote(params.noteId);
|
|
24
|
+
const output = `**${note.title}**\n\n` +
|
|
25
|
+
`${note.content}\n\n` +
|
|
26
|
+
`---\n` +
|
|
27
|
+
`Last changed: ${new Date(note.lastChangedAt).toLocaleString()}`;
|
|
28
|
+
return this.ok(output, `Successfully read note: ${note.title}`, note.title);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const appError = handleHackMDError(error, params.noteId);
|
|
32
|
+
return this.error(appError.toUserString(), appError.message, "Read failed");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ReadNoteTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadNoteTool.js","sourceRoot":"","sources":["../../../src/tools/hackmd/ReadNoteTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAoC,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAOnD,MAAM,OAAO,YAAa,SAAQ,IAAoB;IAgBhC;IAfX,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAClB,yFAAyF,CAAC;IACnF,WAAW,GAAe;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qGAAqG;aACxG;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB,CAAC;IAEF,YAAoB,YAAiB;QACnC,KAAK,EAAE,CAAC;QADU,iBAAY,GAAZ,YAAY,CAAK;IAErC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAsB;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE5D,MAAM,MAAM,GACV,KAAK,IAAI,CAAC,KAAK,QAAQ;gBACvB,GAAG,IAAI,CAAC,OAAO,MAAM;gBACrB,OAAO;gBACP,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;YAEnE,OAAO,IAAI,CAAC,EAAE,CACZ,MAAM,EACN,2BAA2B,IAAI,CAAC,KAAK,EAAE,EACvC,IAAI,CAAC,KAAK,CACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,KAAK,CACf,QAAQ,CAAC,YAAY,EAAE,EACvB,QAAQ,CAAC,OAAO,EAChB,aAAa,CACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { API } from '@hackmd/api';
|
|
2
|
+
import { Tool, type ToolResult, type ToolSchema } from '../base/Tool';
|
|
3
|
+
interface SearchNotesParams {
|
|
4
|
+
query: string;
|
|
5
|
+
limit?: number;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
export declare class SearchNotesTool extends Tool<SearchNotesParams> {
|
|
9
|
+
private hackmdClient;
|
|
10
|
+
readonly name = "search_notes";
|
|
11
|
+
readonly description = "Search for notes by keyword in title. Provide a search query to find matching notes.";
|
|
12
|
+
readonly inputSchema: ToolSchema;
|
|
13
|
+
constructor(hackmdClient: API);
|
|
14
|
+
call(params: SearchNotesParams): Promise<ToolResult>;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=SearchNotesTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchNotesTool.d.ts","sourceRoot":"","sources":["../../../src/tools/hackmd/SearchNotesTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtE,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,eAAgB,SAAQ,IAAI,CAAC,iBAAiB,CAAC;IAkB9C,OAAO,CAAC,YAAY;IAjBhC,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,WAAW,0FAA0F;IAC9G,QAAQ,CAAC,WAAW,EAAE,UAAU,CAa9B;gBAEkB,YAAY,EAAE,GAAG;IAI/B,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;CA4C3D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Tool } from '../base/Tool';
|
|
2
|
+
export class SearchNotesTool extends Tool {
|
|
3
|
+
hackmdClient;
|
|
4
|
+
name = 'search_notes';
|
|
5
|
+
description = 'Search for notes by keyword in title. Provide a search query to find matching notes.';
|
|
6
|
+
inputSchema = {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
query: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'The search query or keyword to look for in note titles (required)',
|
|
12
|
+
},
|
|
13
|
+
limit: {
|
|
14
|
+
type: 'number',
|
|
15
|
+
description: 'Maximum number of results to return (default: 20)',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
required: ['query'],
|
|
19
|
+
};
|
|
20
|
+
constructor(hackmdClient) {
|
|
21
|
+
super();
|
|
22
|
+
this.hackmdClient = hackmdClient;
|
|
23
|
+
}
|
|
24
|
+
async call(params) {
|
|
25
|
+
try {
|
|
26
|
+
const allNotes = await this.hackmdClient.getNoteList();
|
|
27
|
+
const searchTerm = params.query.toLowerCase();
|
|
28
|
+
const matchedNotes = allNotes.filter((note) => note.title?.toLowerCase().includes(searchTerm) ||
|
|
29
|
+
note.tags?.some((tag) => tag.toLowerCase().includes(searchTerm)));
|
|
30
|
+
const limit = params.limit ?? 20;
|
|
31
|
+
const limitedNotes = matchedNotes.slice(0, limit);
|
|
32
|
+
if (limitedNotes.length === 0) {
|
|
33
|
+
return this.ok(`No notes found matching "${searchTerm}"`, 'No matches found', 'No results');
|
|
34
|
+
}
|
|
35
|
+
const output = limitedNotes
|
|
36
|
+
.map((note, index) => `${index + 1}. **${note.title}**\n` +
|
|
37
|
+
` ID: \`${note.id}\`\n` +
|
|
38
|
+
` Last changed: ${new Date(note.lastChangedAt).toLocaleString()}\n` +
|
|
39
|
+
` Link: ${note.publishLink ?? 'N/A'}\n`)
|
|
40
|
+
.join('\n');
|
|
41
|
+
return this.ok(output, `Found ${matchedNotes.length} notes matching "${searchTerm}" (showing ${limitedNotes.length})`, `${matchedNotes.length} results`);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const errorMsg = `Failed to search notes: ${this.formatError(error)}`;
|
|
45
|
+
return this.error(errorMsg, errorMsg, 'Search failed');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=SearchNotesTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchNotesTool.js","sourceRoot":"","sources":["../../../src/tools/hackmd/SearchNotesTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAoC,MAAM,cAAc,CAAC;AAQtE,MAAM,OAAO,eAAgB,SAAQ,IAAuB;IAkBtC;IAjBX,IAAI,GAAG,cAAc,CAAC;IACtB,WAAW,GAAG,sFAAsF,CAAC;IACrG,WAAW,GAAe;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mEAAmE;aACjF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mDAAmD;aACjE;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB,CAAC;IAEF,YAAoB,YAAiB;QACnC,KAAK,EAAE,CAAC;QADU,iBAAY,GAAZ,YAAY,CAAK;IAErC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAyB;QAClC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAE9C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5C,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC9C,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CACzE,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAElD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC,EAAE,CACZ,4BAA4B,UAAU,GAAG,EACzC,kBAAkB,EAClB,YAAY,CACb,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,YAAY;iBACxB,GAAG,CAAC,CAAC,IAAU,EAAE,KAAa,EAAE,EAAE,CACjC,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM;gBACnC,YAAY,IAAI,CAAC,EAAE,MAAM;gBACzB,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,cAAc,EAAE,IAAI;gBACrE,YAAY,IAAI,CAAC,WAAW,IAAI,KAAK,IAAI,CAC1C;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,OAAO,IAAI,CAAC,EAAE,CACZ,MAAM,EACN,SAAS,YAAY,CAAC,MAAM,oBAAoB,UAAU,cAAc,YAAY,CAAC,MAAM,GAAG,EAC9F,GAAG,YAAY,CAAC,MAAM,UAAU,CACjC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,2BAA2B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC,KAAK,CACf,QAAQ,EACR,QAAQ,EACR,eAAe,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { API } from "@hackmd/api";
|
|
2
|
+
import { Tool, type ToolResult, type ToolSchema } from "../base/Tool";
|
|
3
|
+
import type { ApprovalManager } from "../../agent/ApprovalManager";
|
|
4
|
+
interface UpdateNoteParams {
|
|
5
|
+
noteId: string;
|
|
6
|
+
content: string;
|
|
7
|
+
teamPath?: string;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
export declare class UpdateNoteTool extends Tool<UpdateNoteParams> {
|
|
11
|
+
private hackmdClient;
|
|
12
|
+
private approvalManager;
|
|
13
|
+
readonly name = "update_note";
|
|
14
|
+
readonly description = "Update an existing HackMD note. Use teamPath for team notes.";
|
|
15
|
+
readonly inputSchema: ToolSchema;
|
|
16
|
+
constructor(hackmdClient: API, approvalManager: ApprovalManager);
|
|
17
|
+
call(params: UpdateNoteParams): Promise<ToolResult>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=UpdateNoteTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdateNoteTool.d.ts","sourceRoot":"","sources":["../../../src/tools/hackmd/UpdateNoteTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,cAAe,SAAQ,IAAI,CAAC,gBAAgB,CAAC;IAwBtD,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IAxBzB,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,kEAC6C;IACjE,QAAQ,CAAC,WAAW,EAAE,UAAU,CAiB9B;gBAGQ,YAAY,EAAE,GAAG,EACjB,eAAe,EAAE,eAAe;IAKpC,IAAI,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;CAwD1D"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Tool } from "../base/Tool";
|
|
2
|
+
import { handleHackMDError } from "./errorHandler";
|
|
3
|
+
export class UpdateNoteTool extends Tool {
|
|
4
|
+
hackmdClient;
|
|
5
|
+
approvalManager;
|
|
6
|
+
name = "update_note";
|
|
7
|
+
description = "Update an existing HackMD note. Use teamPath for team notes.";
|
|
8
|
+
inputSchema = {
|
|
9
|
+
type: "object",
|
|
10
|
+
properties: {
|
|
11
|
+
noteId: {
|
|
12
|
+
type: "string",
|
|
13
|
+
description: "The ID of the note to update",
|
|
14
|
+
},
|
|
15
|
+
content: {
|
|
16
|
+
type: "string",
|
|
17
|
+
description: "New markdown content for the note",
|
|
18
|
+
},
|
|
19
|
+
teamPath: {
|
|
20
|
+
type: "string",
|
|
21
|
+
description: "Optional: team path or ID for team notes",
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
required: ["noteId", "content"],
|
|
25
|
+
};
|
|
26
|
+
constructor(hackmdClient, approvalManager) {
|
|
27
|
+
super();
|
|
28
|
+
this.hackmdClient = hackmdClient;
|
|
29
|
+
this.approvalManager = approvalManager;
|
|
30
|
+
}
|
|
31
|
+
async call(params) {
|
|
32
|
+
const isTeamNote = Boolean(params.teamPath);
|
|
33
|
+
const actionDesc = isTeamNote
|
|
34
|
+
? `Update team note ${params.noteId} in team "${params.teamPath}"`
|
|
35
|
+
: `Update note ${params.noteId}`;
|
|
36
|
+
const approved = await this.approvalManager.request(this.name, isTeamNote ? "update_team_note" : "update_note", actionDesc);
|
|
37
|
+
if (!approved) {
|
|
38
|
+
return this.error("Operation rejected by user", "Operation rejected by user", "Rejected");
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
if (isTeamNote) {
|
|
42
|
+
await this.hackmdClient.updateTeamNote(params.teamPath, params.noteId, {
|
|
43
|
+
content: params.content,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
await this.hackmdClient.updateNote(params.noteId, {
|
|
48
|
+
content: params.content,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const output = isTeamNote
|
|
52
|
+
? `ā
Team note updated successfully!\n**ID:** \`${params.noteId}\`\n**Team:** ${params.teamPath}`
|
|
53
|
+
: `ā
Note updated successfully!\n**ID:** \`${params.noteId}\``;
|
|
54
|
+
return this.ok(output, `${isTeamNote ? "Team note" : "Note"} updated successfully`, "Updated");
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
const appError = handleHackMDError(error, `Failed to update ${isTeamNote ? "team " : ""}note`);
|
|
58
|
+
return this.error(appError.toUserString(), appError.message, "Update failed");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=UpdateNoteTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdateNoteTool.js","sourceRoot":"","sources":["../../../src/tools/hackmd/UpdateNoteTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAoC,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AASnD,MAAM,OAAO,cAAe,SAAQ,IAAsB;IAwB9C;IACA;IAxBD,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAClB,8DAA8D,CAAC;IACxD,WAAW,GAAe;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8BAA8B;aAC5C;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0CAA0C;aACxD;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;KAChC,CAAC;IAEF,YACU,YAAiB,EACjB,eAAgC;QAExC,KAAK,EAAE,CAAC;QAHA,iBAAY,GAAZ,YAAY,CAAK;QACjB,oBAAe,GAAf,eAAe,CAAiB;IAG1C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAwB;QACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,UAAU;YAC3B,CAAC,CAAC,oBAAoB,MAAM,CAAC,MAAM,aAAa,MAAM,CAAC,QAAQ,GAAG;YAClE,CAAC,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC;QAEnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CACjD,IAAI,CAAC,IAAI,EACT,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,EAC/C,UAAU,CACX,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,KAAK,CACf,4BAA4B,EAC5B,4BAA4B,EAC5B,UAAU,CACX,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CACpC,MAAM,CAAC,QAAS,EAChB,MAAM,CAAC,MAAM,EACb;oBACE,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;oBAChD,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,UAAU;gBACvB,CAAC,CAAC,gDAAgD,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,QAAQ,EAAE;gBACjG,CAAC,CAAC,2CAA2C,MAAM,CAAC,MAAM,IAAI,CAAC;YAEjE,OAAO,IAAI,CAAC,EAAE,CACZ,MAAM,EACN,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,uBAAuB,EAC3D,SAAS,CACV,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,iBAAiB,CAChC,KAAK,EACL,oBAAoB,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CACpD,CAAC;YACF,OAAO,IAAI,CAAC,KAAK,CACf,QAAQ,CAAC,YAAY,EAAE,EACvB,QAAQ,CAAC,OAAO,EAChB,eAAe,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AppError } from "../../utils/ErrorTypes";
|
|
2
|
+
/**
|
|
3
|
+
* Helper to handle HackMD API errors with proper HTTP status code mapping
|
|
4
|
+
*/
|
|
5
|
+
export declare function handleHackMDError(error: unknown, context?: string): AppError;
|
|
6
|
+
//# sourceMappingURL=errorHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../../src/tools/hackmd/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAsEhE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAmC5E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ErrorFactory, AppError } from "../../utils/ErrorTypes";
|
|
2
|
+
/**
|
|
3
|
+
* Map HTTP status code to appropriate error type
|
|
4
|
+
*/
|
|
5
|
+
function mapStatusToError(status, message, response, context) {
|
|
6
|
+
switch (status) {
|
|
7
|
+
case 401: {
|
|
8
|
+
return ErrorFactory.auth("Invalid or expired HackMD API token", "HackMD");
|
|
9
|
+
}
|
|
10
|
+
case 403: {
|
|
11
|
+
return ErrorFactory.permission(context ?? "access this resource", "HackMD note");
|
|
12
|
+
}
|
|
13
|
+
case 404: {
|
|
14
|
+
return ErrorFactory.notFound("Note", context ? `(${context})` : undefined);
|
|
15
|
+
}
|
|
16
|
+
case 429: {
|
|
17
|
+
const retryAfter = response?.headers?.["retry-after"];
|
|
18
|
+
return ErrorFactory.rateLimit(retryAfter ? parseInt(retryAfter) : undefined);
|
|
19
|
+
}
|
|
20
|
+
case 500:
|
|
21
|
+
case 502:
|
|
22
|
+
case 503: {
|
|
23
|
+
return ErrorFactory.network(`HackMD service error: ${message}`, response?.config?.url);
|
|
24
|
+
}
|
|
25
|
+
default: {
|
|
26
|
+
return ErrorFactory.internal(context ? `${context}: ${message}` : message);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Helper to handle HackMD API errors with proper HTTP status code mapping
|
|
32
|
+
*/
|
|
33
|
+
export function handleHackMDError(error, context) {
|
|
34
|
+
// Check if it's already an AppError
|
|
35
|
+
if (error instanceof AppError) {
|
|
36
|
+
return error;
|
|
37
|
+
}
|
|
38
|
+
// Handle axios/fetch errors with response
|
|
39
|
+
if (error && typeof error === "object" && "response" in error) {
|
|
40
|
+
const err = error;
|
|
41
|
+
const response = err.response;
|
|
42
|
+
const status = response?.status;
|
|
43
|
+
const message = response?.data?.message ?? err.message ?? "Unknown error";
|
|
44
|
+
return mapStatusToError(status, message, response, context);
|
|
45
|
+
}
|
|
46
|
+
// Handle standard errors with status codes in message
|
|
47
|
+
if (error instanceof Error) {
|
|
48
|
+
// Try to extract status code from message like "Request failed with status code 404"
|
|
49
|
+
const statusMatch = /status code (\d+)/i.exec(error.message);
|
|
50
|
+
if (statusMatch) {
|
|
51
|
+
const status = parseInt(statusMatch[1]);
|
|
52
|
+
return mapStatusToError(status, error.message, undefined, context);
|
|
53
|
+
}
|
|
54
|
+
return ErrorFactory.internal(context ? `${context}: ${error.message}` : error.message, error);
|
|
55
|
+
}
|
|
56
|
+
// Handle unknown errors
|
|
57
|
+
return ErrorFactory.internal(context ? `${context}: ${String(error)}` : String(error));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=errorHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../src/tools/hackmd/errorHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { ListNotesTool } from "./ListNotesTool";
|
|
2
|
+
export { ReadNoteTool } from "./ReadNoteTool";
|
|
3
|
+
export { CreateNoteTool } from "./CreateNoteTool";
|
|
4
|
+
export { UpdateNoteTool } from "./UpdateNoteTool";
|
|
5
|
+
export { DeleteNoteTool } from "./DeleteNoteTool";
|
|
6
|
+
export { GetUserInfoTool } from "./GetUserInfoTool";
|
|
7
|
+
export { ListTeamsTool } from "./ListTeamsTool";
|
|
8
|
+
export { GetHistoryTool } from "./GetHistoryTool";
|
|
9
|
+
export { SearchNotesTool } from "./SearchNotesTool";
|
|
10
|
+
export { ExportNoteTool } from "./ExportNoteTool";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/hackmd/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASlD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Note tools (now support both personal and team notes via optional teamPath)
|
|
2
|
+
export { ListNotesTool } from "./ListNotesTool";
|
|
3
|
+
export { ReadNoteTool } from "./ReadNoteTool";
|
|
4
|
+
export { CreateNoteTool } from "./CreateNoteTool";
|
|
5
|
+
export { UpdateNoteTool } from "./UpdateNoteTool";
|
|
6
|
+
export { DeleteNoteTool } from "./DeleteNoteTool";
|
|
7
|
+
// Team tools removed - merged into main note tools with teamPath parameter
|
|
8
|
+
// export { ListTeamNotesTool } from './ListTeamNotesTool';
|
|
9
|
+
// export { CreateTeamNoteTool } from './CreateTeamNoteTool';
|
|
10
|
+
// export { UpdateTeamNoteTool } from './UpdateTeamNoteTool';
|
|
11
|
+
// export { DeleteTeamNoteTool } from './DeleteTeamNoteTool';
|
|
12
|
+
// User & team management
|
|
13
|
+
export { GetUserInfoTool } from "./GetUserInfoTool";
|
|
14
|
+
export { ListTeamsTool } from "./ListTeamsTool";
|
|
15
|
+
export { GetHistoryTool } from "./GetHistoryTool";
|
|
16
|
+
// Advanced features
|
|
17
|
+
export { SearchNotesTool } from "./SearchNotesTool";
|
|
18
|
+
export { ExportNoteTool } from "./ExportNoteTool";
|
|
19
|
+
// Composable tools removed - use tool combinations instead:
|
|
20
|
+
// export { ImportNoteTool } from './ImportNoteTool'; // = bash cat + create_note
|
|
21
|
+
// export { SyncNoteTool } from './SyncNoteTool'; // = read_note + bash
|
|
22
|
+
// export { BatchExportTool } from './BatchExportTool'; // = loop export_note
|
|
23
|
+
// export { CloneNoteTool } from './CloneNoteTool'; // = read_note + create_note
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/hackmd/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,2EAA2E;AAC3E,2DAA2D;AAC3D,6DAA6D;AAC7D,6DAA6D;AAC7D,6DAA6D;AAE7D,yBAAyB;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,4DAA4D;AAC5D,mFAAmF;AACnF,6EAA6E;AAC7E,6EAA6E;AAC7E,oFAAoF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AgentExecutor } from '../../agent/AgentExecutor';
|
|
2
|
+
type CommandHandler = (args: string[]) => Promise<void> | void;
|
|
3
|
+
interface CommandInfo {
|
|
4
|
+
name: string;
|
|
5
|
+
aliases?: string[];
|
|
6
|
+
description: string;
|
|
7
|
+
handler: CommandHandler;
|
|
8
|
+
}
|
|
9
|
+
export declare class CommandRegistry {
|
|
10
|
+
private executor;
|
|
11
|
+
private commands;
|
|
12
|
+
constructor(executor: AgentExecutor);
|
|
13
|
+
private registerDefaultCommands;
|
|
14
|
+
register(info: CommandInfo): void;
|
|
15
|
+
execute(commandLine: string): Promise<void>;
|
|
16
|
+
private showHelp;
|
|
17
|
+
private showStatus;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=CommandRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandRegistry.d.ts","sourceRoot":"","sources":["../../../src/ui/shell/CommandRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE/D,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,QAAQ,CAAkC;gBAE9B,QAAQ,EAAE,aAAa;IAI3C,OAAO,CAAC,uBAAuB;IA0B/B,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAO3B,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBjD,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,UAAU;CASnB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export class CommandRegistry {
|
|
3
|
+
executor;
|
|
4
|
+
commands = new Map();
|
|
5
|
+
constructor(executor) {
|
|
6
|
+
this.executor = executor;
|
|
7
|
+
this.registerDefaultCommands();
|
|
8
|
+
}
|
|
9
|
+
registerDefaultCommands() {
|
|
10
|
+
this.register({
|
|
11
|
+
name: 'help',
|
|
12
|
+
aliases: ['h', '?'],
|
|
13
|
+
description: 'Show help information',
|
|
14
|
+
handler: () => this.showHelp(),
|
|
15
|
+
});
|
|
16
|
+
this.register({
|
|
17
|
+
name: 'status',
|
|
18
|
+
aliases: ['s'],
|
|
19
|
+
description: 'Show current status',
|
|
20
|
+
handler: () => this.showStatus(),
|
|
21
|
+
});
|
|
22
|
+
this.register({
|
|
23
|
+
name: 'clear',
|
|
24
|
+
aliases: ['reset'],
|
|
25
|
+
description: 'Clear the screen',
|
|
26
|
+
handler: () => {
|
|
27
|
+
console.clear();
|
|
28
|
+
console.log(chalk.green('ā Screen cleared'));
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
register(info) {
|
|
33
|
+
this.commands.set(info.name, info);
|
|
34
|
+
info.aliases?.forEach(alias => {
|
|
35
|
+
this.commands.set(alias, info);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async execute(commandLine) {
|
|
39
|
+
const [name, ...args] = commandLine.split(' ');
|
|
40
|
+
const command = this.commands.get(name);
|
|
41
|
+
if (!command) {
|
|
42
|
+
console.log(chalk.red(`Unknown command: /${name}`));
|
|
43
|
+
console.log(chalk.gray('Type /help for available commands'));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
await command.handler(args);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.log(chalk.red('Command failed: '), error instanceof Error ? error.message : String(error));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
showHelp() {
|
|
54
|
+
console.log(chalk.bold('\nš Available Commands:\n'));
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
for (const [, info] of this.commands) {
|
|
57
|
+
if (seen.has(info.name))
|
|
58
|
+
continue;
|
|
59
|
+
seen.add(info.name);
|
|
60
|
+
const aliases = info.aliases?.length
|
|
61
|
+
? chalk.gray(` (${info.aliases.join(', ')})`)
|
|
62
|
+
: '';
|
|
63
|
+
console.log(` /${info.name}${aliases}`);
|
|
64
|
+
console.log(chalk.gray(` ${info.description}`));
|
|
65
|
+
}
|
|
66
|
+
console.log();
|
|
67
|
+
}
|
|
68
|
+
showStatus() {
|
|
69
|
+
const status = this.executor.status;
|
|
70
|
+
console.log(chalk.bold('\nš Status:\n'));
|
|
71
|
+
console.log(` Context usage: ${chalk.cyan((status.contextUsage * 100).toFixed(1) + '%')}`);
|
|
72
|
+
console.log(` Token count: ${chalk.cyan(status.tokenCount.toLocaleString())}`);
|
|
73
|
+
console.log(` Current step: ${chalk.cyan(status.currentStep)}`);
|
|
74
|
+
console.log();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=CommandRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandRegistry.js","sourceRoot":"","sources":["../../../src/ui/shell/CommandRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AgentExecutor } from '../../agent/AgentExecutor';
|
|
2
|
+
export declare class InteractiveShell {
|
|
3
|
+
private executor;
|
|
4
|
+
private renderer;
|
|
5
|
+
private commandRegistry;
|
|
6
|
+
private rl;
|
|
7
|
+
private isClosed;
|
|
8
|
+
constructor(executor: AgentExecutor);
|
|
9
|
+
start(initialCommand?: string): Promise<void>;
|
|
10
|
+
private handleInput;
|
|
11
|
+
private setupMessageHandling;
|
|
12
|
+
private getPrompt;
|
|
13
|
+
private printWelcome;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=InteractiveShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractiveShell.d.ts","sourceRoot":"","sources":["../../../src/ui/shell/InteractiveShell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAM/D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,aAAa;IAY7B,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAsCrC,WAAW;IA0BzB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,YAAY;CAKrB"}
|