@jcheesepkg/nanobot 0.1.0

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 (130) hide show
  1. package/README.md +139 -0
  2. package/dist/_virtual/_rolldown/runtime.mjs +40 -0
  3. package/dist/agent/context.d.mts +44 -0
  4. package/dist/agent/context.d.mts.map +1 -0
  5. package/dist/agent/context.mjs +153 -0
  6. package/dist/agent/context.mjs.map +1 -0
  7. package/dist/agent/loop.d.mts +56 -0
  8. package/dist/agent/loop.d.mts.map +1 -0
  9. package/dist/agent/loop.mjs +232 -0
  10. package/dist/agent/loop.mjs.map +1 -0
  11. package/dist/agent/memory.d.mts +30 -0
  12. package/dist/agent/memory.d.mts.map +1 -0
  13. package/dist/agent/memory.mjs +77 -0
  14. package/dist/agent/memory.mjs.map +1 -0
  15. package/dist/agent/skills.d.mts +43 -0
  16. package/dist/agent/skills.d.mts.map +1 -0
  17. package/dist/agent/skills.mjs +159 -0
  18. package/dist/agent/skills.mjs.map +1 -0
  19. package/dist/agent/subagent.d.mts +39 -0
  20. package/dist/agent/subagent.d.mts.map +1 -0
  21. package/dist/agent/subagent.mjs +167 -0
  22. package/dist/agent/subagent.mjs.map +1 -0
  23. package/dist/agent/tools/base.d.mts +16 -0
  24. package/dist/agent/tools/base.d.mts.map +1 -0
  25. package/dist/agent/tools/base.mjs +19 -0
  26. package/dist/agent/tools/base.mjs.map +1 -0
  27. package/dist/agent/tools/cron.d.mts +49 -0
  28. package/dist/agent/tools/cron.d.mts.map +1 -0
  29. package/dist/agent/tools/cron.mjs +101 -0
  30. package/dist/agent/tools/cron.mjs.map +1 -0
  31. package/dist/agent/tools/filesystem.d.mts +87 -0
  32. package/dist/agent/tools/filesystem.d.mts.map +1 -0
  33. package/dist/agent/tools/filesystem.mjs +145 -0
  34. package/dist/agent/tools/filesystem.mjs.map +1 -0
  35. package/dist/agent/tools/message.d.mts +44 -0
  36. package/dist/agent/tools/message.d.mts.map +1 -0
  37. package/dist/agent/tools/message.mjs +68 -0
  38. package/dist/agent/tools/message.mjs.map +1 -0
  39. package/dist/agent/tools/registry.d.mts +29 -0
  40. package/dist/agent/tools/registry.d.mts.map +1 -0
  41. package/dist/agent/tools/registry.mjs +49 -0
  42. package/dist/agent/tools/registry.mjs.map +1 -0
  43. package/dist/agent/tools/shell.d.mts +36 -0
  44. package/dist/agent/tools/shell.d.mts.map +1 -0
  45. package/dist/agent/tools/shell.mjs +73 -0
  46. package/dist/agent/tools/shell.mjs.map +1 -0
  47. package/dist/agent/tools/spawn.d.mts +35 -0
  48. package/dist/agent/tools/spawn.d.mts.map +1 -0
  49. package/dist/agent/tools/spawn.mjs +50 -0
  50. package/dist/agent/tools/spawn.mjs.map +1 -0
  51. package/dist/agent/tools/web.d.mts +63 -0
  52. package/dist/agent/tools/web.d.mts.map +1 -0
  53. package/dist/agent/tools/web.mjs +195 -0
  54. package/dist/agent/tools/web.mjs.map +1 -0
  55. package/dist/bus/events.d.mts +29 -0
  56. package/dist/bus/events.d.mts.map +1 -0
  57. package/dist/bus/events.mjs +30 -0
  58. package/dist/bus/events.mjs.map +1 -0
  59. package/dist/bus/queue.d.mts +38 -0
  60. package/dist/bus/queue.d.mts.map +1 -0
  61. package/dist/bus/queue.mjs +90 -0
  62. package/dist/bus/queue.mjs.map +1 -0
  63. package/dist/channels/base.d.mts +31 -0
  64. package/dist/channels/base.d.mts.map +1 -0
  65. package/dist/channels/base.mjs +49 -0
  66. package/dist/channels/base.mjs.map +1 -0
  67. package/dist/channels/manager.d.mts +30 -0
  68. package/dist/channels/manager.d.mts.map +1 -0
  69. package/dist/channels/manager.mjs +100 -0
  70. package/dist/channels/manager.mjs.map +1 -0
  71. package/dist/channels/telegram.d.mts +23 -0
  72. package/dist/channels/telegram.d.mts.map +1 -0
  73. package/dist/channels/telegram.mjs +161 -0
  74. package/dist/channels/telegram.mjs.map +1 -0
  75. package/dist/cli/index.d.mts +1 -0
  76. package/dist/cli/index.mjs +337 -0
  77. package/dist/cli/index.mjs.map +1 -0
  78. package/dist/config/loader.d.mts +14 -0
  79. package/dist/config/loader.d.mts.map +1 -0
  80. package/dist/config/loader.mjs +40 -0
  81. package/dist/config/loader.mjs.map +1 -0
  82. package/dist/config/schema.d.mts +724 -0
  83. package/dist/config/schema.d.mts.map +1 -0
  84. package/dist/config/schema.mjs +123 -0
  85. package/dist/config/schema.mjs.map +1 -0
  86. package/dist/cron/service.d.mts +42 -0
  87. package/dist/cron/service.d.mts.map +1 -0
  88. package/dist/cron/service.mjs +256 -0
  89. package/dist/cron/service.mjs.map +1 -0
  90. package/dist/cron/types.d.mts +55 -0
  91. package/dist/cron/types.d.mts.map +1 -0
  92. package/dist/cron/types.mjs +30 -0
  93. package/dist/cron/types.mjs.map +1 -0
  94. package/dist/heartbeat/service.d.mts +29 -0
  95. package/dist/heartbeat/service.d.mts.map +1 -0
  96. package/dist/heartbeat/service.mjs +96 -0
  97. package/dist/heartbeat/service.mjs.map +1 -0
  98. package/dist/index.d.mts +23 -0
  99. package/dist/index.d.mts.map +1 -0
  100. package/dist/index.mjs +23 -0
  101. package/dist/index.mjs.map +1 -0
  102. package/dist/providers/base.d.mts +65 -0
  103. package/dist/providers/base.d.mts.map +1 -0
  104. package/dist/providers/base.mjs +1 -0
  105. package/dist/providers/openai-provider.d.mts +27 -0
  106. package/dist/providers/openai-provider.d.mts.map +1 -0
  107. package/dist/providers/openai-provider.mjs +67 -0
  108. package/dist/providers/openai-provider.mjs.map +1 -0
  109. package/dist/providers/transcription.d.mts +14 -0
  110. package/dist/providers/transcription.d.mts.map +1 -0
  111. package/dist/providers/transcription.mjs +46 -0
  112. package/dist/providers/transcription.mjs.map +1 -0
  113. package/dist/session/manager.d.mts +56 -0
  114. package/dist/session/manager.d.mts.map +1 -0
  115. package/dist/session/manager.mjs +144 -0
  116. package/dist/session/manager.mjs.map +1 -0
  117. package/dist/utils/helpers.d.mts +26 -0
  118. package/dist/utils/helpers.d.mts.map +1 -0
  119. package/dist/utils/helpers.mjs +60 -0
  120. package/dist/utils/helpers.mjs.map +1 -0
  121. package/dist/utils/which.d.mts +6 -0
  122. package/dist/utils/which.d.mts.map +1 -0
  123. package/dist/utils/which.mjs +20 -0
  124. package/dist/utils/which.mjs.map +1 -0
  125. package/package.json +45 -0
  126. package/skills/cron/SKILL.md +40 -0
  127. package/skills/github/SKILL.md +48 -0
  128. package/skills/skill-creator/SKILL.md +73 -0
  129. package/skills/summarize/SKILL.md +47 -0
  130. package/skills/weather/SKILL.md +43 -0
@@ -0,0 +1,44 @@
1
+ import { OutboundMessage } from "../../bus/events.mjs";
2
+ import { Tool } from "./base.mjs";
3
+
4
+ //#region src/agent/tools/message.d.ts
5
+ type SendCallback = (msg: OutboundMessage) => Promise<void>;
6
+ /** Tool to send messages to users on chat channels. */
7
+ declare class MessageTool extends Tool {
8
+ readonly name = "message";
9
+ readonly description = "Send a message to the user. Use this when you want to communicate something.";
10
+ readonly parameters: {
11
+ type: string;
12
+ properties: {
13
+ content: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ channel: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ chat_id: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ };
26
+ required: string[];
27
+ };
28
+ private sendCallback;
29
+ private defaultChannel;
30
+ private defaultChatId;
31
+ constructor(params?: {
32
+ sendCallback?: SendCallback;
33
+ defaultChannel?: string;
34
+ defaultChatId?: string;
35
+ });
36
+ /** Set the current message context. */
37
+ setContext(channel: string, chatId: string): void;
38
+ /** Set the callback for sending messages. */
39
+ setSendCallback(callback: SendCallback): void;
40
+ execute(args: Record<string, unknown>): Promise<string>;
41
+ }
42
+ //#endregion
43
+ export { MessageTool };
44
+ //# sourceMappingURL=message.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.mts","names":[],"sources":["../../../src/agent/tools/message.ts"],"mappings":";;;;KAGK,YAAA,IAAgB,GAAA,EAAK,eAAA,KAAoB,OAAA;;cAGjC,WAAA,SAAoB,IAAA;EAAA,SACtB,IAAA;EAAA,SACA,WAAA;EAAA,SAEA,UAAA;;;;;;;;;;;;;;;;;;UAmBD,YAAA;EAAA,QACA,cAAA;EAAA,QACA,aAAA;cAEI,MAAA;IACV,YAAA,GAAe,YAAA;IACf,cAAA;IACA,aAAA;EAAA;;EASF,UAAA,CAAW,OAAA,UAAiB,MAAA;;EAM5B,eAAA,CAAgB,QAAA,EAAU,YAAA;EAIpB,OAAA,CAAQ,IAAA,EAAM,MAAA,oBAA0B,OAAA;AAAA"}
@@ -0,0 +1,68 @@
1
+ import { Tool } from "./base.mjs";
2
+
3
+ //#region src/agent/tools/message.ts
4
+ /** Tool to send messages to users on chat channels. */
5
+ var MessageTool = class extends Tool {
6
+ name = "message";
7
+ description = "Send a message to the user. Use this when you want to communicate something.";
8
+ parameters = {
9
+ type: "object",
10
+ properties: {
11
+ content: {
12
+ type: "string",
13
+ description: "The message content to send"
14
+ },
15
+ channel: {
16
+ type: "string",
17
+ description: "Optional: target channel (telegram, etc.)"
18
+ },
19
+ chat_id: {
20
+ type: "string",
21
+ description: "Optional: target chat/user ID"
22
+ }
23
+ },
24
+ required: ["content"]
25
+ };
26
+ sendCallback;
27
+ defaultChannel;
28
+ defaultChatId;
29
+ constructor(params) {
30
+ super();
31
+ this.sendCallback = params?.sendCallback ?? null;
32
+ this.defaultChannel = params?.defaultChannel ?? "";
33
+ this.defaultChatId = params?.defaultChatId ?? "";
34
+ }
35
+ /** Set the current message context. */
36
+ setContext(channel, chatId) {
37
+ this.defaultChannel = channel;
38
+ this.defaultChatId = chatId;
39
+ }
40
+ /** Set the callback for sending messages. */
41
+ setSendCallback(callback) {
42
+ this.sendCallback = callback;
43
+ }
44
+ async execute(args) {
45
+ const content = String(args.content);
46
+ const channel = args.channel ? String(args.channel) : this.defaultChannel;
47
+ const chatId = args.chat_id ? String(args.chat_id) : this.defaultChatId;
48
+ if (!channel || !chatId) return "Error: No target channel/chat specified";
49
+ if (!this.sendCallback) return "Error: Message sending not configured";
50
+ const msg = {
51
+ channel,
52
+ chatId,
53
+ content,
54
+ media: [],
55
+ metadata: {}
56
+ };
57
+ try {
58
+ await this.sendCallback(msg);
59
+ return `Message sent to ${channel}:${chatId}`;
60
+ } catch (err) {
61
+ return `Error sending message: ${err instanceof Error ? err.message : err}`;
62
+ }
63
+ }
64
+ };
65
+
66
+ //#endregion
67
+ export { MessageTool };
68
+ //# sourceMappingURL=message.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.mjs","names":[],"sources":["../../../src/agent/tools/message.ts"],"sourcesContent":["import type { OutboundMessage } from \"../../bus/events.js\";\nimport { Tool } from \"./base.js\";\n\ntype SendCallback = (msg: OutboundMessage) => Promise<void>;\n\n/** Tool to send messages to users on chat channels. */\nexport class MessageTool extends Tool {\n readonly name = \"message\";\n readonly description =\n \"Send a message to the user. Use this when you want to communicate something.\";\n readonly parameters = {\n type: \"object\",\n properties: {\n content: {\n type: \"string\",\n description: \"The message content to send\",\n },\n channel: {\n type: \"string\",\n description: \"Optional: target channel (telegram, etc.)\",\n },\n chat_id: {\n type: \"string\",\n description: \"Optional: target chat/user ID\",\n },\n },\n required: [\"content\"],\n };\n\n private sendCallback: SendCallback | null;\n private defaultChannel: string;\n private defaultChatId: string;\n\n constructor(params?: {\n sendCallback?: SendCallback;\n defaultChannel?: string;\n defaultChatId?: string;\n }) {\n super();\n this.sendCallback = params?.sendCallback ?? null;\n this.defaultChannel = params?.defaultChannel ?? \"\";\n this.defaultChatId = params?.defaultChatId ?? \"\";\n }\n\n /** Set the current message context. */\n setContext(channel: string, chatId: string): void {\n this.defaultChannel = channel;\n this.defaultChatId = chatId;\n }\n\n /** Set the callback for sending messages. */\n setSendCallback(callback: SendCallback): void {\n this.sendCallback = callback;\n }\n\n async execute(args: Record<string, unknown>): Promise<string> {\n const content = String(args.content);\n const channel = args.channel\n ? String(args.channel)\n : this.defaultChannel;\n const chatId = args.chat_id ? String(args.chat_id) : this.defaultChatId;\n\n if (!channel || !chatId) {\n return \"Error: No target channel/chat specified\";\n }\n if (!this.sendCallback) {\n return \"Error: Message sending not configured\";\n }\n\n const msg: OutboundMessage = {\n channel,\n chatId,\n content,\n media: [],\n metadata: {},\n };\n\n try {\n await this.sendCallback(msg);\n return `Message sent to ${channel}:${chatId}`;\n } catch (err) {\n return `Error sending message: ${err instanceof Error ? err.message : err}`;\n }\n }\n}\n"],"mappings":";;;;AAMA,IAAa,cAAb,cAAiC,KAAK;CACpC,AAAS,OAAO;CAChB,AAAS,cACP;CACF,AAAS,aAAa;EACpB,MAAM;EACN,YAAY;GACV,SAAS;IACP,MAAM;IACN,aAAa;IACd;GACD,SAAS;IACP,MAAM;IACN,aAAa;IACd;GACD,SAAS;IACP,MAAM;IACN,aAAa;IACd;GACF;EACD,UAAU,CAAC,UAAU;EACtB;CAED,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,QAIT;AACD,SAAO;AACP,OAAK,eAAe,QAAQ,gBAAgB;AAC5C,OAAK,iBAAiB,QAAQ,kBAAkB;AAChD,OAAK,gBAAgB,QAAQ,iBAAiB;;;CAIhD,WAAW,SAAiB,QAAsB;AAChD,OAAK,iBAAiB;AACtB,OAAK,gBAAgB;;;CAIvB,gBAAgB,UAA8B;AAC5C,OAAK,eAAe;;CAGtB,MAAM,QAAQ,MAAgD;EAC5D,MAAM,UAAU,OAAO,KAAK,QAAQ;EACpC,MAAM,UAAU,KAAK,UACjB,OAAO,KAAK,QAAQ,GACpB,KAAK;EACT,MAAM,SAAS,KAAK,UAAU,OAAO,KAAK,QAAQ,GAAG,KAAK;AAE1D,MAAI,CAAC,WAAW,CAAC,OACf,QAAO;AAET,MAAI,CAAC,KAAK,aACR,QAAO;EAGT,MAAM,MAAuB;GAC3B;GACA;GACA;GACA,OAAO,EAAE;GACT,UAAU,EAAE;GACb;AAED,MAAI;AACF,SAAM,KAAK,aAAa,IAAI;AAC5B,UAAO,mBAAmB,QAAQ,GAAG;WAC9B,KAAK;AACZ,UAAO,0BAA0B,eAAe,QAAQ,IAAI,UAAU"}
@@ -0,0 +1,29 @@
1
+ import { ToolDefinition } from "../../providers/base.mjs";
2
+ import { Tool } from "./base.mjs";
3
+
4
+ //#region src/agent/tools/registry.d.ts
5
+ /**
6
+ * Dynamic tool registration and execution.
7
+ */
8
+ declare class ToolRegistry {
9
+ private tools;
10
+ /** Register a tool. */
11
+ register(tool: Tool): void;
12
+ /** Unregister a tool by name. */
13
+ unregister(name: string): boolean;
14
+ /** Get a tool by name. */
15
+ get(name: string): Tool | undefined;
16
+ /** Check if a tool exists. */
17
+ has(name: string): boolean;
18
+ /** Get tool definitions for the LLM. */
19
+ getDefinitions(): ToolDefinition[];
20
+ /** Execute a tool by name with arguments. */
21
+ execute(name: string, args: Record<string, unknown>): Promise<string>;
22
+ /** Get all registered tool names. */
23
+ getNames(): string[];
24
+ /** Get count of registered tools. */
25
+ get size(): number;
26
+ }
27
+ //#endregion
28
+ export { ToolRegistry };
29
+ //# sourceMappingURL=registry.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.mts","names":[],"sources":["../../../src/agent/tools/registry.ts"],"mappings":";;;;;;AAMA;cAAa,YAAA;EAAA,QACH,KAAA;EAGO;EAAf,QAAA,CAAS,IAAA,EAAM,IAAA;EAoBG;EAflB,UAAA,CAAW,IAAA;EAuBR;EAlBH,GAAA,CAAI,IAAA,WAAe,IAAA;EAkBT;EAbV,GAAA,CAAI,IAAA;EAfJ;EAoBA,cAAA,CAAA,GAAkB,cAAA;EApBT;EAyBH,OAAA,CACJ,IAAA,UACA,IAAA,EAAM,MAAA,oBACL,OAAA;EAvBQ;EAqCX,QAAA,CAAA;EAhCI;EAAA,IAqCA,IAAA,CAAA;AAAA"}
@@ -0,0 +1,49 @@
1
+ //#region src/agent/tools/registry.ts
2
+ /**
3
+ * Dynamic tool registration and execution.
4
+ */
5
+ var ToolRegistry = class {
6
+ tools = /* @__PURE__ */ new Map();
7
+ /** Register a tool. */
8
+ register(tool) {
9
+ this.tools.set(tool.name, tool);
10
+ }
11
+ /** Unregister a tool by name. */
12
+ unregister(name) {
13
+ return this.tools.delete(name);
14
+ }
15
+ /** Get a tool by name. */
16
+ get(name) {
17
+ return this.tools.get(name);
18
+ }
19
+ /** Check if a tool exists. */
20
+ has(name) {
21
+ return this.tools.has(name);
22
+ }
23
+ /** Get tool definitions for the LLM. */
24
+ getDefinitions() {
25
+ return Array.from(this.tools.values()).map((t) => t.getDefinition());
26
+ }
27
+ /** Execute a tool by name with arguments. */
28
+ async execute(name, args) {
29
+ const tool = this.tools.get(name);
30
+ if (!tool) return `Error: Unknown tool '${name}'`;
31
+ try {
32
+ return await tool.execute(args);
33
+ } catch (err) {
34
+ return `Error executing ${name}: ${err instanceof Error ? err.message : String(err)}`;
35
+ }
36
+ }
37
+ /** Get all registered tool names. */
38
+ getNames() {
39
+ return Array.from(this.tools.keys());
40
+ }
41
+ /** Get count of registered tools. */
42
+ get size() {
43
+ return this.tools.size;
44
+ }
45
+ };
46
+
47
+ //#endregion
48
+ export { ToolRegistry };
49
+ //# sourceMappingURL=registry.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.mjs","names":[],"sources":["../../../src/agent/tools/registry.ts"],"sourcesContent":["import type { ToolDefinition } from \"../../providers/base.js\";\nimport type { Tool } from \"./base.js\";\n\n/**\n * Dynamic tool registration and execution.\n */\nexport class ToolRegistry {\n private tools = new Map<string, Tool>();\n\n /** Register a tool. */\n register(tool: Tool): void {\n this.tools.set(tool.name, tool);\n }\n\n /** Unregister a tool by name. */\n unregister(name: string): boolean {\n return this.tools.delete(name);\n }\n\n /** Get a tool by name. */\n get(name: string): Tool | undefined {\n return this.tools.get(name);\n }\n\n /** Check if a tool exists. */\n has(name: string): boolean {\n return this.tools.has(name);\n }\n\n /** Get tool definitions for the LLM. */\n getDefinitions(): ToolDefinition[] {\n return Array.from(this.tools.values()).map((t) => t.getDefinition());\n }\n\n /** Execute a tool by name with arguments. */\n async execute(\n name: string,\n args: Record<string, unknown>,\n ): Promise<string> {\n const tool = this.tools.get(name);\n if (!tool) {\n return `Error: Unknown tool '${name}'`;\n }\n try {\n return await tool.execute(args);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return `Error executing ${name}: ${message}`;\n }\n }\n\n /** Get all registered tool names. */\n getNames(): string[] {\n return Array.from(this.tools.keys());\n }\n\n /** Get count of registered tools. */\n get size(): number {\n return this.tools.size;\n }\n}\n"],"mappings":";;;;AAMA,IAAa,eAAb,MAA0B;CACxB,AAAQ,wBAAQ,IAAI,KAAmB;;CAGvC,SAAS,MAAkB;AACzB,OAAK,MAAM,IAAI,KAAK,MAAM,KAAK;;;CAIjC,WAAW,MAAuB;AAChC,SAAO,KAAK,MAAM,OAAO,KAAK;;;CAIhC,IAAI,MAAgC;AAClC,SAAO,KAAK,MAAM,IAAI,KAAK;;;CAI7B,IAAI,MAAuB;AACzB,SAAO,KAAK,MAAM,IAAI,KAAK;;;CAI7B,iBAAmC;AACjC,SAAO,MAAM,KAAK,KAAK,MAAM,QAAQ,CAAC,CAAC,KAAK,MAAM,EAAE,eAAe,CAAC;;;CAItE,MAAM,QACJ,MACA,MACiB;EACjB,MAAM,OAAO,KAAK,MAAM,IAAI,KAAK;AACjC,MAAI,CAAC,KACH,QAAO,wBAAwB,KAAK;AAEtC,MAAI;AACF,UAAO,MAAM,KAAK,QAAQ,KAAK;WACxB,KAAK;AAEZ,UAAO,mBAAmB,KAAK,IADf,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;;;;CAMpE,WAAqB;AACnB,SAAO,MAAM,KAAK,KAAK,MAAM,MAAM,CAAC;;;CAItC,IAAI,OAAe;AACjB,SAAO,KAAK,MAAM"}
@@ -0,0 +1,36 @@
1
+ import { Tool } from "./base.mjs";
2
+
3
+ //#region src/agent/tools/shell.d.ts
4
+ /**
5
+ * Execute shell commands.
6
+ */
7
+ declare class ExecTool extends Tool {
8
+ readonly name = "exec";
9
+ readonly description = "Execute a shell command and return its output. Use for running programs, scripts, git, etc.";
10
+ readonly parameters: {
11
+ type: string;
12
+ properties: {
13
+ command: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ timeout: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ };
22
+ required: string[];
23
+ };
24
+ private workingDir;
25
+ private defaultTimeout;
26
+ private restrictToWorkspace;
27
+ constructor(params?: {
28
+ workingDir?: string;
29
+ timeout?: number;
30
+ restrictToWorkspace?: boolean;
31
+ });
32
+ execute(args: Record<string, unknown>): Promise<string>;
33
+ }
34
+ //#endregion
35
+ export { ExecTool };
36
+ //# sourceMappingURL=shell.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.mts","names":[],"sources":["../../../src/agent/tools/shell.ts"],"mappings":";;;;;AAMA;cAAa,QAAA,SAAiB,IAAA;EAAA,SACnB,IAAA;EAAA,SACA,WAAA;EAAA,SAEA,UAAA;;;;;;;;;;;;;;UAYD,UAAA;EAAA,QACA,cAAA;EAAA,QACA,mBAAA;cAEI,MAAA;IACV,UAAA;IACA,OAAA;IACA,mBAAA;EAAA;EAQI,OAAA,CAAQ,IAAA,EAAM,MAAA,oBAA0B,OAAA;AAAA"}
@@ -0,0 +1,73 @@
1
+ import { Tool } from "./base.mjs";
2
+ import { exec } from "node:child_process";
3
+
4
+ //#region src/agent/tools/shell.ts
5
+ /**
6
+ * Execute shell commands.
7
+ */
8
+ var ExecTool = class extends Tool {
9
+ name = "exec";
10
+ description = "Execute a shell command and return its output. Use for running programs, scripts, git, etc.";
11
+ parameters = {
12
+ type: "object",
13
+ properties: {
14
+ command: {
15
+ type: "string",
16
+ description: "Shell command to execute"
17
+ },
18
+ timeout: {
19
+ type: "integer",
20
+ description: "Timeout in seconds (default: 60)"
21
+ }
22
+ },
23
+ required: ["command"]
24
+ };
25
+ workingDir;
26
+ defaultTimeout;
27
+ restrictToWorkspace;
28
+ constructor(params) {
29
+ super();
30
+ this.workingDir = params?.workingDir ?? process.cwd();
31
+ this.defaultTimeout = params?.timeout ?? 60;
32
+ this.restrictToWorkspace = params?.restrictToWorkspace ?? false;
33
+ }
34
+ async execute(args) {
35
+ const command = String(args.command);
36
+ const timeout = args.timeout ? Number(args.timeout) : this.defaultTimeout;
37
+ if (!command.trim()) return "Error: Empty command";
38
+ if (this.restrictToWorkspace) {
39
+ for (const pattern of [
40
+ "rm -rf /",
41
+ "mkfs",
42
+ "dd if=",
43
+ "> /dev/"
44
+ ]) if (command.includes(pattern)) return `Error: Command blocked for safety: ${pattern}`;
45
+ }
46
+ return new Promise((resolve) => {
47
+ exec(command, {
48
+ cwd: this.workingDir,
49
+ timeout: timeout * 1e3,
50
+ maxBuffer: 1024 * 1024,
51
+ env: {
52
+ ...process.env,
53
+ HOME: process.env.HOME ?? ""
54
+ }
55
+ }, (error, stdout, stderr) => {
56
+ const parts = [];
57
+ if (stdout) parts.push(stdout);
58
+ if (stderr) parts.push(`[stderr]\n${stderr}`);
59
+ if (error) {
60
+ if (error.killed) parts.push(`\n[Timed out after ${timeout}s]`);
61
+ else if (error.code !== void 0) parts.push(`\n[Exit code: ${error.code}]`);
62
+ }
63
+ const output = parts.join("\n").trim();
64
+ if (output.length > 5e4) resolve(output.slice(0, 5e4) + "\n... (truncated, output too large)");
65
+ else resolve(output || "(no output)");
66
+ });
67
+ });
68
+ }
69
+ };
70
+
71
+ //#endregion
72
+ export { ExecTool };
73
+ //# sourceMappingURL=shell.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.mjs","names":[],"sources":["../../../src/agent/tools/shell.ts"],"sourcesContent":["import { exec } from \"node:child_process\";\nimport { Tool } from \"./base.js\";\n\n/**\n * Execute shell commands.\n */\nexport class ExecTool extends Tool {\n readonly name = \"exec\";\n readonly description =\n \"Execute a shell command and return its output. Use for running programs, scripts, git, etc.\";\n readonly parameters = {\n type: \"object\",\n properties: {\n command: { type: \"string\", description: \"Shell command to execute\" },\n timeout: {\n type: \"integer\",\n description: \"Timeout in seconds (default: 60)\",\n },\n },\n required: [\"command\"],\n };\n\n private workingDir: string;\n private defaultTimeout: number;\n private restrictToWorkspace: boolean;\n\n constructor(params?: {\n workingDir?: string;\n timeout?: number;\n restrictToWorkspace?: boolean;\n }) {\n super();\n this.workingDir = params?.workingDir ?? process.cwd();\n this.defaultTimeout = params?.timeout ?? 60;\n this.restrictToWorkspace = params?.restrictToWorkspace ?? false;\n }\n\n async execute(args: Record<string, unknown>): Promise<string> {\n const command = String(args.command);\n const timeout = args.timeout ? Number(args.timeout) : this.defaultTimeout;\n\n if (!command.trim()) {\n return \"Error: Empty command\";\n }\n\n // Basic safety check\n if (this.restrictToWorkspace) {\n const dangerous = [\"rm -rf /\", \"mkfs\", \"dd if=\", \"> /dev/\"];\n for (const pattern of dangerous) {\n if (command.includes(pattern)) {\n return `Error: Command blocked for safety: ${pattern}`;\n }\n }\n }\n\n return new Promise<string>((resolve) => {\n const child = exec(\n command,\n {\n cwd: this.workingDir,\n timeout: timeout * 1000,\n maxBuffer: 1024 * 1024, // 1MB\n env: { ...process.env, HOME: process.env.HOME ?? \"\" },\n },\n (error, stdout, stderr) => {\n const parts: string[] = [];\n\n if (stdout) parts.push(stdout);\n if (stderr) parts.push(`[stderr]\\n${stderr}`);\n\n if (error) {\n if (error.killed) {\n parts.push(`\\n[Timed out after ${timeout}s]`);\n } else if (error.code !== undefined) {\n parts.push(`\\n[Exit code: ${error.code}]`);\n }\n }\n\n const output = parts.join(\"\\n\").trim();\n // Truncate large output\n if (output.length > 50000) {\n resolve(\n output.slice(0, 50000) + \"\\n... (truncated, output too large)\",\n );\n } else {\n resolve(output || \"(no output)\");\n }\n },\n );\n });\n }\n}\n"],"mappings":";;;;;;;AAMA,IAAa,WAAb,cAA8B,KAAK;CACjC,AAAS,OAAO;CAChB,AAAS,cACP;CACF,AAAS,aAAa;EACpB,MAAM;EACN,YAAY;GACV,SAAS;IAAE,MAAM;IAAU,aAAa;IAA4B;GACpE,SAAS;IACP,MAAM;IACN,aAAa;IACd;GACF;EACD,UAAU,CAAC,UAAU;EACtB;CAED,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,QAIT;AACD,SAAO;AACP,OAAK,aAAa,QAAQ,cAAc,QAAQ,KAAK;AACrD,OAAK,iBAAiB,QAAQ,WAAW;AACzC,OAAK,sBAAsB,QAAQ,uBAAuB;;CAG5D,MAAM,QAAQ,MAAgD;EAC5D,MAAM,UAAU,OAAO,KAAK,QAAQ;EACpC,MAAM,UAAU,KAAK,UAAU,OAAO,KAAK,QAAQ,GAAG,KAAK;AAE3D,MAAI,CAAC,QAAQ,MAAM,CACjB,QAAO;AAIT,MAAI,KAAK,qBAEP;QAAK,MAAM,WADO;IAAC;IAAY;IAAQ;IAAU;IAAU,CAEzD,KAAI,QAAQ,SAAS,QAAQ,CAC3B,QAAO,sCAAsC;;AAKnD,SAAO,IAAI,SAAiB,YAAY;AACxB,QACZ,SACA;IACE,KAAK,KAAK;IACV,SAAS,UAAU;IACnB,WAAW,OAAO;IAClB,KAAK;KAAE,GAAG,QAAQ;KAAK,MAAM,QAAQ,IAAI,QAAQ;KAAI;IACtD,GACA,OAAO,QAAQ,WAAW;IACzB,MAAM,QAAkB,EAAE;AAE1B,QAAI,OAAQ,OAAM,KAAK,OAAO;AAC9B,QAAI,OAAQ,OAAM,KAAK,aAAa,SAAS;AAE7C,QAAI,OACF;SAAI,MAAM,OACR,OAAM,KAAK,sBAAsB,QAAQ,IAAI;cACpC,MAAM,SAAS,OACxB,OAAM,KAAK,iBAAiB,MAAM,KAAK,GAAG;;IAI9C,MAAM,SAAS,MAAM,KAAK,KAAK,CAAC,MAAM;AAEtC,QAAI,OAAO,SAAS,IAClB,SACE,OAAO,MAAM,GAAG,IAAM,GAAG,sCAC1B;QAED,SAAQ,UAAU,cAAc;KAGrC;IACD"}
@@ -0,0 +1,35 @@
1
+ import { Tool } from "./base.mjs";
2
+ import { SubagentManager } from "../subagent.mjs";
3
+
4
+ //#region src/agent/tools/spawn.d.ts
5
+ /**
6
+ * Tool to spawn a subagent for background task execution.
7
+ */
8
+ declare class SpawnTool extends Tool {
9
+ readonly name = "spawn";
10
+ readonly description: string;
11
+ readonly parameters: {
12
+ type: string;
13
+ properties: {
14
+ task: {
15
+ type: string;
16
+ description: string;
17
+ };
18
+ label: {
19
+ type: string;
20
+ description: string;
21
+ };
22
+ };
23
+ required: string[];
24
+ };
25
+ private manager;
26
+ private originChannel;
27
+ private originChatId;
28
+ constructor(manager: SubagentManager);
29
+ /** Set the origin context for subagent announcements. */
30
+ setContext(channel: string, chatId: string): void;
31
+ execute(args: Record<string, unknown>): Promise<string>;
32
+ }
33
+ //#endregion
34
+ export { SpawnTool };
35
+ //# sourceMappingURL=spawn.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.d.mts","names":[],"sources":["../../../src/agent/tools/spawn.ts"],"mappings":";;;;;;AAMA;cAAa,SAAA,SAAkB,IAAA;EAAA,SACpB,IAAA;EAAA,SACA,WAAA;EAAA,SAIA,UAAA;;;;;;;;;;;;;;UAeD,OAAA;EAAA,QACA,aAAA;EAAA,QACA,YAAA;cAEI,OAAA,EAAS,eAAA;EAJb;EAUR,UAAA,CAAW,OAAA,UAAiB,MAAA;EAKtB,OAAA,CAAQ,IAAA,EAAM,MAAA,oBAA0B,OAAA;AAAA"}
@@ -0,0 +1,50 @@
1
+ import { Tool } from "./base.mjs";
2
+
3
+ //#region src/agent/tools/spawn.ts
4
+ /**
5
+ * Tool to spawn a subagent for background task execution.
6
+ */
7
+ var SpawnTool = class extends Tool {
8
+ name = "spawn";
9
+ description = "Spawn a subagent to handle a task in the background. Use this for complex or time-consuming tasks that can run independently. The subagent will complete the task and report back when done.";
10
+ parameters = {
11
+ type: "object",
12
+ properties: {
13
+ task: {
14
+ type: "string",
15
+ description: "The task for the subagent to complete"
16
+ },
17
+ label: {
18
+ type: "string",
19
+ description: "Optional short label for the task (for display)"
20
+ }
21
+ },
22
+ required: ["task"]
23
+ };
24
+ manager;
25
+ originChannel = "cli";
26
+ originChatId = "direct";
27
+ constructor(manager) {
28
+ super();
29
+ this.manager = manager;
30
+ }
31
+ /** Set the origin context for subagent announcements. */
32
+ setContext(channel, chatId) {
33
+ this.originChannel = channel;
34
+ this.originChatId = chatId;
35
+ }
36
+ async execute(args) {
37
+ const task = String(args.task);
38
+ const label = args.label ? String(args.label) : void 0;
39
+ return this.manager.spawn({
40
+ task,
41
+ label,
42
+ originChannel: this.originChannel,
43
+ originChatId: this.originChatId
44
+ });
45
+ }
46
+ };
47
+
48
+ //#endregion
49
+ export { SpawnTool };
50
+ //# sourceMappingURL=spawn.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.mjs","names":[],"sources":["../../../src/agent/tools/spawn.ts"],"sourcesContent":["import { Tool } from \"./base.js\";\nimport type { SubagentManager } from \"../subagent.js\";\n\n/**\n * Tool to spawn a subagent for background task execution.\n */\nexport class SpawnTool extends Tool {\n readonly name = \"spawn\";\n readonly description =\n \"Spawn a subagent to handle a task in the background. \" +\n \"Use this for complex or time-consuming tasks that can run independently. \" +\n \"The subagent will complete the task and report back when done.\";\n readonly parameters = {\n type: \"object\",\n properties: {\n task: {\n type: \"string\",\n description: \"The task for the subagent to complete\",\n },\n label: {\n type: \"string\",\n description: \"Optional short label for the task (for display)\",\n },\n },\n required: [\"task\"],\n };\n\n private manager: SubagentManager;\n private originChannel = \"cli\";\n private originChatId = \"direct\";\n\n constructor(manager: SubagentManager) {\n super();\n this.manager = manager;\n }\n\n /** Set the origin context for subagent announcements. */\n setContext(channel: string, chatId: string): void {\n this.originChannel = channel;\n this.originChatId = chatId;\n }\n\n async execute(args: Record<string, unknown>): Promise<string> {\n const task = String(args.task);\n const label = args.label ? String(args.label) : undefined;\n return this.manager.spawn({\n task,\n label,\n originChannel: this.originChannel,\n originChatId: this.originChatId,\n });\n }\n}\n"],"mappings":";;;;;;AAMA,IAAa,YAAb,cAA+B,KAAK;CAClC,AAAS,OAAO;CAChB,AAAS,cACP;CAGF,AAAS,aAAa;EACpB,MAAM;EACN,YAAY;GACV,MAAM;IACJ,MAAM;IACN,aAAa;IACd;GACD,OAAO;IACL,MAAM;IACN,aAAa;IACd;GACF;EACD,UAAU,CAAC,OAAO;EACnB;CAED,AAAQ;CACR,AAAQ,gBAAgB;CACxB,AAAQ,eAAe;CAEvB,YAAY,SAA0B;AACpC,SAAO;AACP,OAAK,UAAU;;;CAIjB,WAAW,SAAiB,QAAsB;AAChD,OAAK,gBAAgB;AACrB,OAAK,eAAe;;CAGtB,MAAM,QAAQ,MAAgD;EAC5D,MAAM,OAAO,OAAO,KAAK,KAAK;EAC9B,MAAM,QAAQ,KAAK,QAAQ,OAAO,KAAK,MAAM,GAAG;AAChD,SAAO,KAAK,QAAQ,MAAM;GACxB;GACA;GACA,eAAe,KAAK;GACpB,cAAc,KAAK;GACpB,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { Tool } from "./base.mjs";
2
+
3
+ //#region src/agent/tools/web.d.ts
4
+ /** Search the web using Brave Search API. */
5
+ declare class WebSearchTool extends Tool {
6
+ readonly name = "web_search";
7
+ readonly description = "Search the web. Returns titles, URLs, and snippets.";
8
+ readonly parameters: {
9
+ type: string;
10
+ properties: {
11
+ query: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ count: {
16
+ type: string;
17
+ description: string;
18
+ minimum: number;
19
+ maximum: number;
20
+ };
21
+ };
22
+ required: string[];
23
+ };
24
+ private apiKey;
25
+ private maxResults;
26
+ constructor(params?: {
27
+ apiKey?: string;
28
+ maxResults?: number;
29
+ });
30
+ execute(args: Record<string, unknown>): Promise<string>;
31
+ }
32
+ /** Fetch and extract content from a URL. */
33
+ declare class WebFetchTool extends Tool {
34
+ readonly name = "web_fetch";
35
+ readonly description = "Fetch URL and extract readable content (HTML -> markdown/text).";
36
+ readonly parameters: {
37
+ type: string;
38
+ properties: {
39
+ url: {
40
+ type: string;
41
+ description: string;
42
+ };
43
+ extractMode: {
44
+ type: string;
45
+ enum: string[];
46
+ description: string;
47
+ };
48
+ maxChars: {
49
+ type: string;
50
+ minimum: number;
51
+ };
52
+ };
53
+ required: string[];
54
+ };
55
+ private defaultMaxChars;
56
+ constructor(params?: {
57
+ maxChars?: number;
58
+ });
59
+ execute(args: Record<string, unknown>): Promise<string>;
60
+ }
61
+ //#endregion
62
+ export { WebFetchTool, WebSearchTool };
63
+ //# sourceMappingURL=web.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.mts","names":[],"sources":["../../../src/agent/tools/web.ts"],"mappings":";;;;cA2Ea,aAAA,SAAsB,IAAA;EAAA,SACxB,IAAA;EAAA,SACA,WAAA;EAAA,SACA,UAAA;;;;;;;;;;;;;;;;UAcD,MAAA;EAAA,QACA,UAAA;cAEI,MAAA;IAAW,MAAA;IAAiB,UAAA;EAAA;EAMlC,OAAA,CAAQ,IAAA,EAAM,MAAA,oBAA0B,OAAA;AAAA;;cAqDnC,YAAA,SAAqB,IAAA;EAAA,SACvB,IAAA;EAAA,SACA,WAAA;EAAA,SAEA,UAAA;;;;;;;;;;;;;;;;;;;UAcD,eAAA;cAEI,MAAA;IAAW,QAAA;EAAA;EAKjB,OAAA,CAAQ,IAAA,EAAM,MAAA,oBAA0B,OAAA;AAAA"}