harubashi 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 (172) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +293 -0
  3. package/README.ru.md +293 -0
  4. package/dist/agent/agent.module.d.ts +2 -0
  5. package/dist/agent/agent.module.js +34 -0
  6. package/dist/agent/agent.module.js.map +1 -0
  7. package/dist/agent/agent.processor.d.ts +31 -0
  8. package/dist/agent/agent.processor.js +266 -0
  9. package/dist/agent/agent.processor.js.map +1 -0
  10. package/dist/agent/command-guard.service.d.ts +10 -0
  11. package/dist/agent/command-guard.service.js +48 -0
  12. package/dist/agent/command-guard.service.js.map +1 -0
  13. package/dist/agent/interruption.service.d.ts +11 -0
  14. package/dist/agent/interruption.service.js +52 -0
  15. package/dist/agent/interruption.service.js.map +1 -0
  16. package/dist/agent/system-executor.service.d.ts +32 -0
  17. package/dist/agent/system-executor.service.js +200 -0
  18. package/dist/agent/system-executor.service.js.map +1 -0
  19. package/dist/app.module.d.ts +2 -0
  20. package/dist/app.module.js +38 -0
  21. package/dist/app.module.js.map +1 -0
  22. package/dist/bin.d.ts +2 -0
  23. package/dist/bin.js +137 -0
  24. package/dist/bin.js.map +1 -0
  25. package/dist/cli.d.ts +2 -0
  26. package/dist/cli.js +141 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/commands/config.command.d.ts +2 -0
  29. package/dist/commands/config.command.js +83 -0
  30. package/dist/commands/config.command.js.map +1 -0
  31. package/dist/commands/logs.command.d.ts +5 -0
  32. package/dist/commands/logs.command.js +130 -0
  33. package/dist/commands/logs.command.js.map +1 -0
  34. package/dist/commands/profile.command.d.ts +5 -0
  35. package/dist/commands/profile.command.js +293 -0
  36. package/dist/commands/profile.command.js.map +1 -0
  37. package/dist/commands/setup.command.d.ts +1 -0
  38. package/dist/commands/setup.command.js +94 -0
  39. package/dist/commands/setup.command.js.map +1 -0
  40. package/dist/commands/setup.helpers.d.ts +34 -0
  41. package/dist/commands/setup.helpers.js +265 -0
  42. package/dist/commands/setup.helpers.js.map +1 -0
  43. package/dist/commands/skills.command.d.ts +2 -0
  44. package/dist/commands/skills.command.js +111 -0
  45. package/dist/commands/skills.command.js.map +1 -0
  46. package/dist/common/adapters/cli-interaction.adapter.d.ts +8 -0
  47. package/dist/common/adapters/cli-interaction.adapter.js +67 -0
  48. package/dist/common/adapters/cli-interaction.adapter.js.map +1 -0
  49. package/dist/common/adapters/interaction-adapter.interface.d.ts +6 -0
  50. package/dist/common/adapters/interaction-adapter.interface.js +10 -0
  51. package/dist/common/adapters/interaction-adapter.interface.js.map +1 -0
  52. package/dist/common/constants.d.ts +3 -0
  53. package/dist/common/constants.js +7 -0
  54. package/dist/common/constants.js.map +1 -0
  55. package/dist/common/index.d.ts +4 -0
  56. package/dist/common/index.js +21 -0
  57. package/dist/common/index.js.map +1 -0
  58. package/dist/common/logger.d.ts +9 -0
  59. package/dist/common/logger.js +87 -0
  60. package/dist/common/logger.js.map +1 -0
  61. package/dist/common/paths.d.ts +12 -0
  62. package/dist/common/paths.js +28 -0
  63. package/dist/common/paths.js.map +1 -0
  64. package/dist/common/types/message.types.d.ts +48 -0
  65. package/dist/common/types/message.types.js +18 -0
  66. package/dist/common/types/message.types.js.map +1 -0
  67. package/dist/common/types/tool.types.d.ts +20 -0
  68. package/dist/common/types/tool.types.js +3 -0
  69. package/dist/common/types/tool.types.js.map +1 -0
  70. package/dist/common/utils/type-guards.d.ts +8 -0
  71. package/dist/common/utils/type-guards.js +46 -0
  72. package/dist/common/utils/type-guards.js.map +1 -0
  73. package/dist/config/config-loader.d.ts +6 -0
  74. package/dist/config/config-loader.js +90 -0
  75. package/dist/config/config-loader.js.map +1 -0
  76. package/dist/config/config.module.d.ts +2 -0
  77. package/dist/config/config.module.js +28 -0
  78. package/dist/config/config.module.js.map +1 -0
  79. package/dist/config/config.types.d.ts +55 -0
  80. package/dist/config/config.types.js +21 -0
  81. package/dist/config/config.types.js.map +1 -0
  82. package/dist/daemon.d.ts +2 -0
  83. package/dist/daemon.js +28 -0
  84. package/dist/daemon.js.map +1 -0
  85. package/dist/llm/anthropic/anthropic.provider.d.ts +15 -0
  86. package/dist/llm/anthropic/anthropic.provider.js +162 -0
  87. package/dist/llm/anthropic/anthropic.provider.js.map +1 -0
  88. package/dist/llm/google/google.provider.d.ts +14 -0
  89. package/dist/llm/google/google.provider.js +189 -0
  90. package/dist/llm/google/google.provider.js.map +1 -0
  91. package/dist/llm/llm-factory.service.d.ts +24 -0
  92. package/dist/llm/llm-factory.service.js +76 -0
  93. package/dist/llm/llm-factory.service.js.map +1 -0
  94. package/dist/llm/llm.interface.d.ts +19 -0
  95. package/dist/llm/llm.interface.js +5 -0
  96. package/dist/llm/llm.interface.js.map +1 -0
  97. package/dist/llm/llm.module.d.ts +2 -0
  98. package/dist/llm/llm.module.js +34 -0
  99. package/dist/llm/llm.module.js.map +1 -0
  100. package/dist/llm/nvidia/nvidia.provider.d.ts +11 -0
  101. package/dist/llm/nvidia/nvidia.provider.js +49 -0
  102. package/dist/llm/nvidia/nvidia.provider.js.map +1 -0
  103. package/dist/llm/openai/openai.provider.d.ts +9 -0
  104. package/dist/llm/openai/openai.provider.js +35 -0
  105. package/dist/llm/openai/openai.provider.js.map +1 -0
  106. package/dist/llm/openai-compatible/openai-compatible.helper.d.ts +4 -0
  107. package/dist/llm/openai-compatible/openai-compatible.helper.js +155 -0
  108. package/dist/llm/openai-compatible/openai-compatible.helper.js.map +1 -0
  109. package/dist/llm/proxy/proxy.provider.d.ts +9 -0
  110. package/dist/llm/proxy/proxy.provider.js +35 -0
  111. package/dist/llm/proxy/proxy.provider.js.map +1 -0
  112. package/dist/main.d.ts +1 -0
  113. package/dist/main.js +14 -0
  114. package/dist/main.js.map +1 -0
  115. package/dist/prisma/prisma.module.d.ts +2 -0
  116. package/dist/prisma/prisma.module.js +22 -0
  117. package/dist/prisma/prisma.module.js.map +1 -0
  118. package/dist/prisma/prisma.service.d.ts +9 -0
  119. package/dist/prisma/prisma.service.js +40 -0
  120. package/dist/prisma/prisma.service.js.map +1 -0
  121. package/dist/sessions/sessions.module.d.ts +2 -0
  122. package/dist/sessions/sessions.module.js +23 -0
  123. package/dist/sessions/sessions.module.js.map +1 -0
  124. package/dist/sessions/sessions.service.d.ts +21 -0
  125. package/dist/sessions/sessions.service.js +82 -0
  126. package/dist/sessions/sessions.service.js.map +1 -0
  127. package/dist/skills/definitions/directory_explorer.md +69 -0
  128. package/dist/skills/definitions/execute_command.md +27 -0
  129. package/dist/skills/definitions/git_manager.md +98 -0
  130. package/dist/skills/definitions/read_file.md +25 -0
  131. package/dist/skills/skills-bundle.d.ts +7 -0
  132. package/dist/skills/skills-bundle.js +27 -0
  133. package/dist/skills/skills-bundle.js.map +1 -0
  134. package/dist/skills/skills-parser.d.ts +8 -0
  135. package/dist/skills/skills-parser.js +67 -0
  136. package/dist/skills/skills-parser.js.map +1 -0
  137. package/dist/skills/skills.module.d.ts +2 -0
  138. package/dist/skills/skills.module.js +22 -0
  139. package/dist/skills/skills.module.js.map +1 -0
  140. package/dist/skills/skills.service.d.ts +22 -0
  141. package/dist/skills/skills.service.js +150 -0
  142. package/dist/skills/skills.service.js.map +1 -0
  143. package/dist/skills/skills.types.d.ts +16 -0
  144. package/dist/skills/skills.types.js +3 -0
  145. package/dist/skills/skills.types.js.map +1 -0
  146. package/dist/soul/prompts/core.md +28 -0
  147. package/dist/soul/prompts/rules.md +40 -0
  148. package/dist/soul/prompts/runtime.md +13 -0
  149. package/dist/soul/prompts/voice.md +45 -0
  150. package/dist/soul/soul.module.d.ts +2 -0
  151. package/dist/soul/soul.module.js +22 -0
  152. package/dist/soul/soul.module.js.map +1 -0
  153. package/dist/soul/soul.service.d.ts +22 -0
  154. package/dist/soul/soul.service.js +89 -0
  155. package/dist/soul/soul.service.js.map +1 -0
  156. package/dist/telegram/pairing.service.d.ts +11 -0
  157. package/dist/telegram/pairing.service.js +81 -0
  158. package/dist/telegram/pairing.service.js.map +1 -0
  159. package/dist/telegram/telegram-interaction.adapter.d.ts +16 -0
  160. package/dist/telegram/telegram-interaction.adapter.js +54 -0
  161. package/dist/telegram/telegram-interaction.adapter.js.map +1 -0
  162. package/dist/telegram/telegram.module.d.ts +2 -0
  163. package/dist/telegram/telegram.module.js +25 -0
  164. package/dist/telegram/telegram.module.js.map +1 -0
  165. package/dist/telegram/telegram.service.d.ts +28 -0
  166. package/dist/telegram/telegram.service.js +255 -0
  167. package/dist/telegram/telegram.service.js.map +1 -0
  168. package/dist/tsconfig.build.tsbuildinfo +1 -0
  169. package/package.json +68 -0
  170. package/prisma/migrations/20260403134611_init/migration.sql +40 -0
  171. package/prisma/migrations/migration_lock.toml +3 -0
  172. package/prisma/schema.prisma +74 -0
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var OpenAiProvider_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.OpenAiProvider = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const config_1 = require("@nestjs/config");
16
+ let OpenAiProvider = OpenAiProvider_1 = class OpenAiProvider {
17
+ configService;
18
+ logger = new common_1.Logger(OpenAiProvider_1.name);
19
+ constructor(configService) {
20
+ this.configService = configService;
21
+ const apiKey = this.configService.get('OPENAI_API_KEY');
22
+ if (!apiKey) {
23
+ this.logger.warn('OPENAI_API_KEY is not set.');
24
+ }
25
+ }
26
+ async generateResponse(_systemPrompt, _messages, _tools, _signal) {
27
+ throw new common_1.NotImplementedException('OpenAiProvider.generateResponse() will be implemented later');
28
+ }
29
+ };
30
+ exports.OpenAiProvider = OpenAiProvider;
31
+ exports.OpenAiProvider = OpenAiProvider = OpenAiProvider_1 = __decorate([
32
+ (0, common_1.Injectable)(),
33
+ __metadata("design:paramtypes", [config_1.ConfigService])
34
+ ], OpenAiProvider);
35
+ //# sourceMappingURL=openai.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.provider.js","sourceRoot":"","sources":["../../../src/llm/openai/openai.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA6E;AAC7E,2CAA+C;AASxC,IAAM,cAAc,sBAApB,MAAM,cAAc;IAGI;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;IAE1D,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,gBAAgB,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,aAAqB,EACrB,SAAuB,EACvB,MAAwB,EACxB,OAAqB;QAGrB,MAAM,IAAI,gCAAuB,CAC/B,6DAA6D,CAC9D,CAAC;IACJ,CAAC;CACF,CAAA;AArBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAIiC,sBAAa;GAH9C,cAAc,CAqB1B"}
@@ -0,0 +1,4 @@
1
+ import OpenAI from 'openai';
2
+ import { LlmMessage, LlmResponse } from '../llm.interface';
3
+ import { ToolDefinition } from '../../common/types/tool.types';
4
+ export declare function generateViaOpenAiCompatible(client: OpenAI, model: string, systemPrompt: string, messages: LlmMessage[], tools: ToolDefinition[], signal?: AbortSignal): Promise<LlmResponse>;
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateViaOpenAiCompatible = generateViaOpenAiCompatible;
4
+ const message_types_1 = require("../../common/types/message.types");
5
+ async function generateViaOpenAiCompatible(client, model, systemPrompt, messages, tools, signal) {
6
+ const chatMessages = buildChatMessages(systemPrompt, messages);
7
+ const chatTools = buildTools(tools);
8
+ const response = await client.chat.completions.create({
9
+ model,
10
+ messages: chatMessages,
11
+ tools: chatTools.length > 0 ? chatTools : undefined,
12
+ }, { signal });
13
+ const choice = response.choices[0];
14
+ const contentBlocks = choice
15
+ ? parseMessage(choice.message)
16
+ : [{ type: message_types_1.ContentBlockType.Text, text: '' }];
17
+ return {
18
+ contentBlocks,
19
+ tokenUsage: {
20
+ inputTokens: response.usage?.prompt_tokens ?? 0,
21
+ outputTokens: response.usage?.completion_tokens ?? 0,
22
+ totalTokens: response.usage?.total_tokens ?? 0,
23
+ },
24
+ };
25
+ }
26
+ function buildChatMessages(systemPrompt, messages) {
27
+ const out = [];
28
+ if (systemPrompt?.trim()) {
29
+ out.push({ role: 'system', content: systemPrompt });
30
+ }
31
+ for (const msg of messages) {
32
+ if (msg.role === 'user') {
33
+ pushUserMessage(out, msg.content);
34
+ }
35
+ else {
36
+ pushAssistantMessage(out, msg.content);
37
+ }
38
+ }
39
+ return out;
40
+ }
41
+ function pushUserMessage(out, blocks) {
42
+ const toolResults = blocks.filter((b) => b.type === message_types_1.ContentBlockType.ToolResult);
43
+ const userParts = blocks.filter((b) => b.type !== message_types_1.ContentBlockType.ToolResult);
44
+ if (userParts.length > 0) {
45
+ out.push({
46
+ role: 'user',
47
+ content: buildUserContent(userParts),
48
+ });
49
+ }
50
+ for (const tr of toolResults) {
51
+ const text = tr.content
52
+ .filter((c) => c.type === message_types_1.ContentBlockType.Text)
53
+ .map((c) => c.text)
54
+ .join('\n');
55
+ out.push({
56
+ role: 'tool',
57
+ tool_call_id: tr.tool_use_id,
58
+ content: tr.is_error ? `ERROR: ${text}` : text || '(no output)',
59
+ });
60
+ }
61
+ }
62
+ function pushAssistantMessage(out, blocks) {
63
+ const textParts = blocks.filter((b) => b.type === message_types_1.ContentBlockType.Text);
64
+ const toolUses = blocks.filter((b) => b.type === message_types_1.ContentBlockType.ToolUse);
65
+ const joinedText = textParts.map((t) => t.text).join('\n').trim();
66
+ const assistantMsg = {
67
+ role: 'assistant',
68
+ content: joinedText || null,
69
+ };
70
+ if (toolUses.length > 0) {
71
+ assistantMsg.tool_calls = toolUses.map((tu) => ({
72
+ id: tu.id,
73
+ type: 'function',
74
+ function: {
75
+ name: tu.name,
76
+ arguments: JSON.stringify(tu.input ?? {}),
77
+ },
78
+ }));
79
+ }
80
+ out.push(assistantMsg);
81
+ }
82
+ function buildUserContent(blocks) {
83
+ const hasImage = blocks.some((b) => b.type === message_types_1.ContentBlockType.Image);
84
+ if (!hasImage) {
85
+ return blocks
86
+ .filter((b) => b.type === message_types_1.ContentBlockType.Text)
87
+ .map((b) => b.text)
88
+ .join('\n');
89
+ }
90
+ const parts = [];
91
+ for (const b of blocks) {
92
+ if (b.type === message_types_1.ContentBlockType.Image) {
93
+ const img = b;
94
+ parts.push({
95
+ type: 'image_url',
96
+ image_url: {
97
+ url: `data:${img.source.media_type};base64,${img.source.data}`,
98
+ },
99
+ });
100
+ }
101
+ else if (b.type === message_types_1.ContentBlockType.Text) {
102
+ parts.push({ type: 'text', text: b.text });
103
+ }
104
+ }
105
+ return parts;
106
+ }
107
+ function buildTools(tools) {
108
+ return tools.map((t) => ({
109
+ type: 'function',
110
+ function: {
111
+ name: t.name,
112
+ description: t.description,
113
+ parameters: {
114
+ type: t.input_schema.type,
115
+ properties: t.input_schema.properties,
116
+ required: t.input_schema.required,
117
+ },
118
+ },
119
+ }));
120
+ }
121
+ function parseMessage(message) {
122
+ const blocks = [];
123
+ if (message.content && typeof message.content === 'string') {
124
+ blocks.push({
125
+ type: message_types_1.ContentBlockType.Text,
126
+ text: message.content,
127
+ });
128
+ }
129
+ if (message.tool_calls?.length) {
130
+ for (const call of message.tool_calls) {
131
+ if (call.type !== 'function')
132
+ continue;
133
+ let input = {};
134
+ try {
135
+ input = call.function.arguments
136
+ ? JSON.parse(call.function.arguments)
137
+ : {};
138
+ }
139
+ catch {
140
+ input = { _raw_arguments: call.function.arguments };
141
+ }
142
+ blocks.push({
143
+ type: message_types_1.ContentBlockType.ToolUse,
144
+ id: call.id,
145
+ name: call.function.name,
146
+ input,
147
+ });
148
+ }
149
+ }
150
+ if (blocks.length === 0) {
151
+ blocks.push({ type: message_types_1.ContentBlockType.Text, text: '' });
152
+ }
153
+ return blocks;
154
+ }
155
+ //# sourceMappingURL=openai-compatible.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.helper.js","sourceRoot":"","sources":["../../../src/llm/openai-compatible/openai-compatible.helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { ILlmProvider, LlmMessage, LlmResponse } from '../llm.interface';
3
+ import { ToolDefinition } from '../../common/types/tool.types';
4
+ export declare class ProxyProvider implements ILlmProvider {
5
+ private readonly configService;
6
+ private readonly logger;
7
+ constructor(configService: ConfigService);
8
+ generateResponse(_systemPrompt: string, _messages: LlmMessage[], _tools: ToolDefinition[], _signal?: AbortSignal): Promise<LlmResponse>;
9
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var ProxyProvider_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ProxyProvider = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const config_1 = require("@nestjs/config");
16
+ let ProxyProvider = ProxyProvider_1 = class ProxyProvider {
17
+ configService;
18
+ logger = new common_1.Logger(ProxyProvider_1.name);
19
+ constructor(configService) {
20
+ this.configService = configService;
21
+ const baseUrl = this.configService.get('HARUBASHI_PROXY_BASE_URL');
22
+ if (!baseUrl) {
23
+ this.logger.warn('HARUBASHI_PROXY_BASE_URL is not set.');
24
+ }
25
+ }
26
+ async generateResponse(_systemPrompt, _messages, _tools, _signal) {
27
+ throw new common_1.NotImplementedException('ProxyProvider.generateResponse() will be implemented later');
28
+ }
29
+ };
30
+ exports.ProxyProvider = ProxyProvider;
31
+ exports.ProxyProvider = ProxyProvider = ProxyProvider_1 = __decorate([
32
+ (0, common_1.Injectable)(),
33
+ __metadata("design:paramtypes", [config_1.ConfigService])
34
+ ], ProxyProvider);
35
+ //# sourceMappingURL=proxy.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.provider.js","sourceRoot":"","sources":["../../../src/llm/proxy/proxy.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA6E;AAC7E,2CAA+C;AAkBxC,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAGK;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,eAAa,CAAC,IAAI,CAAC,CAAC;IAEzD,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,aAAqB,EACrB,SAAuB,EACvB,MAAwB,EACxB,OAAqB;QAGrB,MAAM,IAAI,gCAAuB,CAC/B,4DAA4D,CAC7D,CAAC;IACJ,CAAC;CACF,CAAA;AArBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAIiC,sBAAa;GAH9C,aAAa,CAqBzB"}
package/dist/main.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/main.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@nestjs/core");
4
+ const common_1 = require("@nestjs/common");
5
+ const app_module_1 = require("./app.module");
6
+ async function bootstrap() {
7
+ const logger = new common_1.Logger('Harubashi');
8
+ const app = await core_1.NestFactory.create(app_module_1.AppModule);
9
+ const port = process.env.PORT || 3000;
10
+ await app.listen(port);
11
+ logger.log(`Harubashi daemon running on port ${port}`);
12
+ }
13
+ bootstrap();
14
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,2CAAwC;AACxC,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACtB,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEvB,MAAM,CAAC,GAAG,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare class PrismaModule {
2
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PrismaModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const prisma_service_1 = require("./prisma.service");
12
+ let PrismaModule = class PrismaModule {
13
+ };
14
+ exports.PrismaModule = PrismaModule;
15
+ exports.PrismaModule = PrismaModule = __decorate([
16
+ (0, common_1.Global)(),
17
+ (0, common_1.Module)({
18
+ providers: [prisma_service_1.PrismaService],
19
+ exports: [prisma_service_1.PrismaService],
20
+ })
21
+ ], PrismaModule);
22
+ //# sourceMappingURL=prisma.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.module.js","sourceRoot":"","sources":["../../src/prisma/prisma.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,qDAAiD;AAO1C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"}
@@ -0,0 +1,9 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import { PrismaClient } from '@prisma/client';
4
+ export declare class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
5
+ private readonly logger;
6
+ constructor(configService: ConfigService);
7
+ onModuleInit(): Promise<void>;
8
+ onModuleDestroy(): Promise<void>;
9
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var PrismaService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.PrismaService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const config_1 = require("@nestjs/config");
16
+ const client_1 = require("@prisma/client");
17
+ let PrismaService = PrismaService_1 = class PrismaService extends client_1.PrismaClient {
18
+ logger = new common_1.Logger(PrismaService_1.name);
19
+ constructor(configService) {
20
+ const url = configService.get('DATABASE_URL');
21
+ if (!url) {
22
+ throw new Error('DATABASE_URL is not configured. Make sure ~/.harubashi/config.yaml is loaded.');
23
+ }
24
+ super({ datasources: { db: { url } } });
25
+ }
26
+ async onModuleInit() {
27
+ await this.$connect();
28
+ this.logger.log('Prisma connected to database');
29
+ }
30
+ async onModuleDestroy() {
31
+ await this.$disconnect();
32
+ this.logger.log('Prisma disconnected from database');
33
+ }
34
+ };
35
+ exports.PrismaService = PrismaService;
36
+ exports.PrismaService = PrismaService = PrismaService_1 = __decorate([
37
+ (0, common_1.Injectable)(),
38
+ __metadata("design:paramtypes", [config_1.ConfigService])
39
+ ], PrismaService);
40
+ //# sourceMappingURL=prisma.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.service.js","sourceRoot":"","sources":["../../src/prisma/prisma.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAmF;AACnF,2CAA+C;AAC/C,2CAA8C;AAGvC,IAAM,aAAa,qBAAnB,MAAM,aACX,SAAQ,qBAAY;IAGH,MAAM,GAAG,IAAI,eAAM,CAAC,eAAa,CAAC,IAAI,CAAC,CAAC;IAEzD,YAAY,aAA4B;QACtC,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAS,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;AAzBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAOgB,sBAAa;GAN7B,aAAa,CAyBzB"}
@@ -0,0 +1,2 @@
1
+ export declare class SessionsModule {
2
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SessionsModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const prisma_module_1 = require("../prisma/prisma.module");
12
+ const sessions_service_1 = require("./sessions.service");
13
+ let SessionsModule = class SessionsModule {
14
+ };
15
+ exports.SessionsModule = SessionsModule;
16
+ exports.SessionsModule = SessionsModule = __decorate([
17
+ (0, common_1.Module)({
18
+ imports: [prisma_module_1.PrismaModule],
19
+ providers: [sessions_service_1.SessionsService],
20
+ exports: [sessions_service_1.SessionsService],
21
+ })
22
+ ], SessionsModule);
23
+ //# sourceMappingURL=sessions.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.module.js","sourceRoot":"","sources":["../../src/sessions/sessions.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2DAAuD;AACvD,yDAAqD;AAO9C,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAL1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAY,CAAC;QACvB,SAAS,EAAE,CAAC,kCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"}
@@ -0,0 +1,21 @@
1
+ import { ChatSession } from '@prisma/client';
2
+ import { PrismaService } from '../prisma/prisma.service';
3
+ export interface SessionSummary {
4
+ id: string;
5
+ title: string | null;
6
+ updatedAt: Date;
7
+ }
8
+ export declare class SessionsService {
9
+ private readonly prisma;
10
+ private readonly logger;
11
+ constructor(prisma: PrismaService);
12
+ ensureUser(id: string, name?: string): Promise<void>;
13
+ ensureDefaultUser(): Promise<void>;
14
+ ensureSession(id: string, userId: string, title?: string): Promise<ChatSession>;
15
+ ensureDefaultSession(): Promise<ChatSession>;
16
+ listSessions(userId: string): Promise<SessionSummary[]>;
17
+ getSession(id: string): Promise<ChatSession | null>;
18
+ switchOrCreate(userId: string, name: string): Promise<ChatSession>;
19
+ getPairedTelegramId(): Promise<string | null>;
20
+ setTelegramPairing(telegramId: string): Promise<void>;
21
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var SessionsService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.SessionsService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const prisma_service_1 = require("../prisma/prisma.service");
16
+ const constants_1 = require("../common/constants");
17
+ let SessionsService = SessionsService_1 = class SessionsService {
18
+ prisma;
19
+ logger = new common_1.Logger(SessionsService_1.name);
20
+ constructor(prisma) {
21
+ this.prisma = prisma;
22
+ }
23
+ async ensureUser(id, name) {
24
+ await this.prisma.user.upsert({
25
+ where: { id },
26
+ update: {},
27
+ create: {
28
+ id,
29
+ name: name ?? null,
30
+ },
31
+ });
32
+ }
33
+ async ensureDefaultUser() {
34
+ return this.ensureUser(constants_1.DEFAULT_USER_ID, constants_1.DEFAULT_USER_NAME);
35
+ }
36
+ async ensureSession(id, userId, title) {
37
+ return this.prisma.chatSession.upsert({
38
+ where: { id },
39
+ update: { userId },
40
+ create: {
41
+ id,
42
+ userId,
43
+ title: title ?? id,
44
+ status: 'ACTIVE',
45
+ },
46
+ });
47
+ }
48
+ async ensureDefaultSession() {
49
+ return this.ensureSession(constants_1.DEFAULT_SESSION_ID, constants_1.DEFAULT_USER_ID);
50
+ }
51
+ async listSessions(userId) {
52
+ return this.prisma.chatSession.findMany({
53
+ where: { userId },
54
+ select: { id: true, title: true, updatedAt: true },
55
+ orderBy: { updatedAt: 'desc' },
56
+ });
57
+ }
58
+ async getSession(id) {
59
+ return this.prisma.chatSession.findUnique({ where: { id } });
60
+ }
61
+ async switchOrCreate(userId, name) {
62
+ return this.ensureSession(name, userId);
63
+ }
64
+ async getPairedTelegramId() {
65
+ const user = await this.prisma.user.findUnique({
66
+ where: { id: constants_1.DEFAULT_USER_ID },
67
+ });
68
+ return user?.telegramId ?? null;
69
+ }
70
+ async setTelegramPairing(telegramId) {
71
+ await this.prisma.user.update({
72
+ where: { id: constants_1.DEFAULT_USER_ID },
73
+ data: { telegramId },
74
+ });
75
+ }
76
+ };
77
+ exports.SessionsService = SessionsService;
78
+ exports.SessionsService = SessionsService = SessionsService_1 = __decorate([
79
+ (0, common_1.Injectable)(),
80
+ __metadata("design:paramtypes", [prisma_service_1.PrismaService])
81
+ ], SessionsService);
82
+ //# sourceMappingURL=sessions.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.service.js","sourceRoot":"","sources":["../../src/sessions/sessions.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,6DAAyD;AACzD,mDAI6B;AAkBtB,IAAM,eAAe,uBAArB,MAAM,eAAe;IAGG;IAFZ,MAAM,GAAG,IAAI,eAAM,CAAC,iBAAe,CAAC,IAAI,CAAC,CAAC;IAE3D,YAA6B,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAAG,CAAC;IAQtD,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,IAAa;QACxC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5B,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,MAAM,EAAE,EAAE;YACV,MAAM,EAAE;gBACN,EAAE;gBACF,IAAI,EAAE,IAAI,IAAI,IAAI;aACnB;SACF,CAAC,CAAC;IACL,CAAC;IAMD,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,2BAAe,EAAE,6BAAiB,CAAC,CAAC;IAC7D,CAAC;IASD,KAAK,CAAC,aAAa,CACjB,EAAU,EACV,MAAc,EACd,KAAc;QAEd,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;YACpC,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,MAAM,EAAE,EAAE,MAAM,EAAE;YAClB,MAAM,EAAE;gBACN,EAAE;gBACF,MAAM;gBACN,KAAK,EAAE,KAAK,IAAI,EAAE;gBAClB,MAAM,EAAE,QAAQ;aACjB;SACF,CAAC,CAAC;IACL,CAAC;IAGD,KAAK,CAAC,oBAAoB;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,8BAAkB,EAAE,2BAAe,CAAC,CAAC;IACjE,CAAC;IAKD,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;YACtC,KAAK,EAAE,EAAE,MAAM,EAAE;YACjB,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;YAClD,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC;IAOD,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,IAAY;QAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAOD,KAAK,CAAC,mBAAmB;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C,KAAK,EAAE,EAAE,EAAE,EAAE,2BAAe,EAAE;SAC/B,CAAC,CAAC;QACH,OAAO,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC;IAClC,CAAC;IAKD,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QACzC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5B,KAAK,EAAE,EAAE,EAAE,EAAE,2BAAe,EAAE;YAC9B,IAAI,EAAE,EAAE,UAAU,EAAE;SACrB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA3GY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;qCAI0B,8BAAa;GAHvC,eAAe,CA2G3B"}
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: directory_explorer
3
+ description: Guidance for safely exploring the filesystem of a project using `system_execute_command`. No standalone tool — read this before using `dir` / `ls` / `find` to avoid expensive recursion into dependency or build directories.
4
+ ---
5
+
6
+ ## When to use this guidance
7
+
8
+ Whenever the user asks you to explore a codebase, locate a file, summarize a project, or answer a question that requires inspecting the file tree. The actual listing is performed via `system_execute_command`; this guidance teaches you **how** to do it efficiently and safely.
9
+
10
+ ## Cross-platform listing
11
+
12
+ The host OS determines the right command:
13
+
14
+ - **POSIX (Linux, macOS)**: `ls -la <path>` for a single-level listing with hidden files and metadata.
15
+ - **Windows / cmd.exe**: `dir <path>` for the equivalent.
16
+ - **Windows / PowerShell**: `Get-ChildItem -Force <path>` or its alias `gci -Force <path>`.
17
+
18
+ If you do not yet know the OS, run `uname -a` (POSIX) or `ver` (Windows) once at the start of the session.
19
+
20
+ ## Forbidden directories — never recurse into these
21
+
22
+ The following directories are large, mostly auto-generated, and almost never relevant to user questions. **Always exclude them** when doing recursive listings or searches:
23
+
24
+ - `node_modules`
25
+ - `.git`
26
+ - `.svn`, `.hg`
27
+ - `dist`, `build`, `out`, `bin`, `obj`
28
+ - `target` (Rust / Java)
29
+ - `.cache`, `.parcel-cache`, `.turbo`, `.next`, `.nuxt`
30
+ - `.venv`, `venv`, `env`, `__pycache__`, `.pytest_cache`, `.mypy_cache`, `.ruff_cache`
31
+ - `vendor` (Go / PHP)
32
+ - `coverage`, `.nyc_output`
33
+ - `.idea`, `.vscode`, `.vs`
34
+
35
+ If you must recurse, prefer tools with built-in ignore semantics:
36
+
37
+ - `git ls-files` — respects `.gitignore` automatically.
38
+ - `rg --files` (ripgrep) — respects `.gitignore` and is fast.
39
+ - `find . -type f -not -path '*/node_modules/*' -not -path '*/.git/*'` — explicit excludes.
40
+
41
+ ## Strategy: shallow first, deep only when targeted
42
+
43
+ 1. **Start with the project root** at depth 1. List it with `ls -la` / `dir`. Form a mental model of the top-level layout (`src/`, `package.json`, `README.md`, etc.).
44
+ 2. **Drill down by intent**, one directory at a time. Do not run `ls -laR` or `dir /s` on an unknown tree — you will drown in `node_modules` output and waste tokens.
45
+ 3. **For "find the file" tasks**, prefer `git ls-files | grep <pattern>` or `rg --files | rg <pattern>`.
46
+ 4. **For "find the symbol" tasks**, prefer `rg <symbol>` over reading every file.
47
+
48
+ ## When in doubt
49
+
50
+ If the user asks you to "scan the entire project" without context, **ask for clarification** before running an unbounded command. Mention that you can target a subtree (e.g. `src/`) instead, which is usually what they meant.
51
+
52
+ ## Examples
53
+
54
+ ```
55
+ # Good — shallow listing of project root
56
+ ls -la
57
+
58
+ # Good — find all TypeScript files tracked by git
59
+ git ls-files '*.ts'
60
+
61
+ # Good — search for a symbol across source files
62
+ rg 'class AgentProcessorService'
63
+
64
+ # Bad — recursive listing that will dump node_modules
65
+ ls -laR
66
+
67
+ # Bad — find without excludes on a JS project
68
+ find . -name '*.js'
69
+ ```
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: system_execute_command
3
+ description: Execute a shell command on the host operating system and return its stdout and stderr output.
4
+ input_schema:
5
+ type: object
6
+ properties:
7
+ command:
8
+ type: string
9
+ description: The shell command to execute
10
+ workdir:
11
+ type: string
12
+ description: Working directory for command execution. Defaults to the process cwd if omitted.
13
+ timeout:
14
+ type: integer
15
+ description: Maximum execution time in milliseconds. Defaults to 30000.
16
+ required:
17
+ - command
18
+ ---
19
+
20
+ ## Usage Guidelines
21
+
22
+ - Prefer simple, single-purpose commands over complex pipelines.
23
+ - Always specify `workdir` when operating on a specific project or directory.
24
+ - For long-running processes, set an appropriate `timeout`.
25
+ - Never execute destructive commands (rm -rf, format, etc.) without explicit user confirmation.
26
+ - When chaining commands, prefer `&&` over `;` to fail fast on errors.
27
+ - Capture both stdout and stderr — errors are as valuable as output.