agent-termo 1.0.1 → 1.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.
Files changed (65) hide show
  1. package/README.md +27 -2
  2. package/dist/agents/index.d.ts +5 -0
  3. package/dist/agents/index.d.ts.map +1 -0
  4. package/dist/agents/index.js +86 -0
  5. package/dist/agents/index.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +97 -168
  9. package/dist/cli.js.map +4 -4
  10. package/dist/diff/index.d.ts +9 -0
  11. package/dist/diff/index.d.ts.map +1 -0
  12. package/dist/diff/index.js +213 -0
  13. package/dist/diff/index.js.map +1 -0
  14. package/dist/llm/client.d.ts +39 -0
  15. package/dist/llm/client.d.ts.map +1 -0
  16. package/dist/llm/client.js +188 -0
  17. package/dist/llm/client.js.map +1 -0
  18. package/dist/llm/models.d.ts +19 -0
  19. package/dist/llm/models.d.ts.map +1 -0
  20. package/dist/llm/models.js +45 -0
  21. package/dist/llm/models.js.map +1 -0
  22. package/dist/llm/tools.d.ts +3 -0
  23. package/dist/llm/tools.d.ts.map +1 -0
  24. package/dist/llm/tools.js +204 -0
  25. package/dist/llm/tools.js.map +1 -0
  26. package/dist/main.d.ts +2 -0
  27. package/dist/main.d.ts.map +1 -0
  28. package/dist/main.js +91 -140
  29. package/dist/main.js.map +4 -4
  30. package/dist/memory/index.d.ts +10 -0
  31. package/dist/memory/index.d.ts.map +1 -0
  32. package/dist/memory/index.js +117 -0
  33. package/dist/memory/index.js.map +1 -0
  34. package/dist/tools/index.d.ts +5 -0
  35. package/dist/tools/index.d.ts.map +1 -0
  36. package/dist/tools/index.js +334 -0
  37. package/dist/tools/index.js.map +1 -0
  38. package/dist/types/index.d.ts +119 -0
  39. package/dist/types/index.d.ts.map +1 -0
  40. package/dist/types/index.js +5 -0
  41. package/dist/types/index.js.map +1 -0
  42. package/dist/ui/index.d.ts +47 -0
  43. package/dist/ui/index.d.ts.map +1 -0
  44. package/dist/ui/index.js +321 -0
  45. package/dist/ui/index.js.map +1 -0
  46. package/dist/ui/screen.d.ts +59 -0
  47. package/dist/ui/screen.d.ts.map +1 -0
  48. package/dist/ui/screen.js +629 -0
  49. package/dist/ui/screen.js.map +1 -0
  50. package/dist/utils/ansi.d.ts +62 -0
  51. package/dist/utils/ansi.d.ts.map +1 -0
  52. package/dist/utils/ansi.js +116 -0
  53. package/dist/utils/ansi.js.map +1 -0
  54. package/dist/utils/config.d.ts +9 -0
  55. package/dist/utils/config.d.ts.map +1 -0
  56. package/dist/utils/config.js +120 -0
  57. package/dist/utils/config.js.map +1 -0
  58. package/package.json +1 -1
  59. package/src/cli.ts +1 -1
  60. package/src/llm/client.ts +24 -0
  61. package/src/llm/models.ts +55 -0
  62. package/src/main.ts +201 -75
  63. package/src/ui/index.ts +256 -389
  64. package/src/ui/screen.ts +698 -0
  65. package/src/utils/config.ts +37 -20
@@ -0,0 +1,10 @@
1
+ export declare function loadAgentTermoMemory(): string;
2
+ export declare function appendToAgentTermoMemory(entry: string): void;
3
+ export declare function loadAgentTermoTimeline(): string;
4
+ export declare function logAgentTermoTimeline(message: string): void;
5
+ export declare function loadMemory(projectRoot: string): Promise<string>;
6
+ export declare function appendToMemory(projectRoot: string, entry: string): Promise<void>;
7
+ export declare function loadTimeline(projectRoot: string): Promise<string>;
8
+ export declare function appendToTimeline(projectRoot: string, agent: string, phase: string, actions: string[], notes?: string[]): Promise<void>;
9
+ export declare function logToTimeline(projectRoot: string, message: string): Promise<void>;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAqBA,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAQ5D;AAID,wBAAgB,sBAAsB,IAAI,MAAM,CAO/C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQ3D;AAID,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQrE;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF;AAMD,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAevE;AAED,wBAAsB,gBAAgB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,GAAE,MAAM,EAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvF"}
@@ -0,0 +1,117 @@
1
+ // =============================================================================
2
+ // Memory & Timeline Runtime
3
+ // =============================================================================
4
+ import { readFileSync as readFile, appendFileSync as appendFile, writeFileSync as writeFile, existsSync, mkdirSync } from 'node:fs';
5
+ import { resolve } from 'node:path';
6
+ // ── Agent-Termo Home Memory ──────────────────────────────────────────────────
7
+ function ensureAgentTermoDir() {
8
+ const dir = resolve(process.env.HOME || process.env.USERPROFILE || '.', '.agent-termo');
9
+ try {
10
+ if (!existsSync(dir))
11
+ mkdirSync(dir, { recursive: true });
12
+ }
13
+ catch {
14
+ // non-fatal; callers will handle missing file
15
+ }
16
+ return dir;
17
+ }
18
+ const AGENT_TERMO_MEMORY_PATH = resolve(ensureAgentTermoDir(), 'memory.md');
19
+ export function loadAgentTermoMemory() {
20
+ if (!existsSync(AGENT_TERMO_MEMORY_PATH))
21
+ return '';
22
+ try {
23
+ return readFile(AGENT_TERMO_MEMORY_PATH, 'utf-8');
24
+ }
25
+ catch {
26
+ return '';
27
+ }
28
+ }
29
+ export function appendToAgentTermoMemory(entry) {
30
+ const timestamp = new Date().toISOString().split('T')[0];
31
+ const content = '\n\n## ' + timestamp + '\n\n' + entry;
32
+ try {
33
+ appendFile(AGENT_TERMO_MEMORY_PATH, content, 'utf-8');
34
+ }
35
+ catch {
36
+ // ignore persistence failure
37
+ }
38
+ }
39
+ const AGENT_TERMO_TIMELINE_PATH = resolve(ensureAgentTermoDir(), 'timeline.md');
40
+ export function loadAgentTermoTimeline() {
41
+ if (!existsSync(AGENT_TERMO_TIMELINE_PATH))
42
+ return '';
43
+ try {
44
+ return readFile(AGENT_TERMO_TIMELINE_PATH, 'utf-8');
45
+ }
46
+ catch {
47
+ return '';
48
+ }
49
+ }
50
+ export function logAgentTermoTimeline(message) {
51
+ const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 16);
52
+ const entry = '\n- [' + timestamp + '] ' + message;
53
+ try {
54
+ appendFile(AGENT_TERMO_TIMELINE_PATH, entry, 'utf-8');
55
+ }
56
+ catch {
57
+ // ignore persistence failure
58
+ }
59
+ }
60
+ // ── Project Memory & Timeline Runtime ──────────────────────────────────────
61
+ export async function loadMemory(projectRoot) {
62
+ const path = resolve(projectRoot, 'docs', 'MEMORY.md');
63
+ if (!existsSync(path))
64
+ return '';
65
+ try {
66
+ return readFile(path, 'utf-8');
67
+ }
68
+ catch {
69
+ return '';
70
+ }
71
+ }
72
+ export async function appendToMemory(projectRoot, entry) {
73
+ const path = resolve(projectRoot, 'docs', 'MEMORY.md');
74
+ const timestamp = new Date().toISOString().split('T')[0];
75
+ appendFile(path, '\n\n## ' + timestamp + '\n\n' + entry, 'utf-8');
76
+ }
77
+ // ── Timeline System ──────────────────────────────────────────────────────────
78
+ const TIMELINE_TEMPLATE = '# Project Timeline\n\nThis document tracks the complete chronological history of the project.\n\n---\n\n';
79
+ export async function loadTimeline(projectRoot) {
80
+ const path = resolve(projectRoot, 'docs', 'TIMELINE.md');
81
+ if (!existsSync(path)) {
82
+ try {
83
+ writeFile(path, TIMELINE_TEMPLATE, 'utf-8');
84
+ }
85
+ catch {
86
+ // ignore
87
+ }
88
+ return '';
89
+ }
90
+ try {
91
+ return readFile(path, 'utf-8');
92
+ }
93
+ catch {
94
+ return '';
95
+ }
96
+ }
97
+ export async function appendToTimeline(projectRoot, agent, phase, actions, notes = []) {
98
+ const path = resolve(projectRoot, 'docs', 'TIMELINE.md');
99
+ const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 16);
100
+ const entry = '\n\n---\n\n## [' +
101
+ timestamp +
102
+ '] - ' +
103
+ agent +
104
+ '\n\n### Phase/Activity\n' +
105
+ phase +
106
+ '\n\n### Actions Taken\n' +
107
+ actions.map((a) => '- ' + a).join('\n') +
108
+ '\n\n### Notes\n' +
109
+ (notes.length > 0 ? notes.map((n) => '- ' + n).join('\n') : '- (none)');
110
+ appendFile(path, entry, 'utf-8');
111
+ }
112
+ export async function logToTimeline(projectRoot, message) {
113
+ const path = resolve(projectRoot, 'docs', 'TIMELINE.md');
114
+ const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 16);
115
+ appendFile(path, '\n- [' + timestamp + '] ' + message, 'utf-8');
116
+ }
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ToolResult, ProposedFileChange } from '../types/index.js';
2
+ export declare const TOOL_DEFS: Record<string, (...args: any[]) => Promise<ToolResult>>;
3
+ export declare function executeTool(name: string, args: Record<string, unknown>, projectRoot: string): Promise<ToolResult>;
4
+ export declare function applyFileChange(change: ProposedFileChange, projectRoot: string): Promise<ToolResult>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAqBxE,eAAO,MAAM,SAAS,2BAdmB,GAAG,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAcrC,CAAC;AAIlC,wBAAsB,WAAW,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAqED,wBAAsB,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAgC1G"}
@@ -0,0 +1,334 @@
1
+ // =============================================================================
2
+ // Agent-Termo Tool Executor — routes tool calls to implementations
3
+ // =============================================================================
4
+ import { readFile as readFileAsync, writeFile as writeFileAsync } from 'node:fs/promises';
5
+ import { resolve, isAbsolute, relative } from 'node:path';
6
+ import { exec as execAsync } from 'node:child_process';
7
+ import { promisify } from 'node:util';
8
+ import { default as globAsync } from 'glob';
9
+ import { simpleGit } from 'simple-git';
10
+ import { statSync, existsSync, mkdirSync } from 'node:fs';
11
+ import { getConfig } from '../utils/config.js';
12
+ import { computeDiff } from '../diff/index.js';
13
+ const exec = promisify(execAsync);
14
+ const globPromise = promisify(globAsync);
15
+ // ── Tool map ────────────────────────────────────────────────────────────────
16
+ const TOOL_MAP = {
17
+ 'file:read': toolFileRead,
18
+ 'file:write': toolFileWrite,
19
+ 'file:edit': toolFileEdit,
20
+ 'file:glob': toolFileGlob,
21
+ 'grep': toolGrep,
22
+ 'bash:execute': toolBash,
23
+ 'git:status': toolGitStatus,
24
+ 'git:commit': toolGitCommit,
25
+ 'git:push': toolGitPush,
26
+ 'git:log': toolGitLog,
27
+ };
28
+ // ── Re-exported tool definitions for OpenAI schema ───────────────────────────
29
+ export const TOOL_DEFS = TOOL_MAP;
30
+ // ── Public API ──────────────────────────────────────────────────────────────
31
+ export async function executeTool(name, args, projectRoot) {
32
+ const start = Date.now();
33
+ const id = crypto.randomUUID();
34
+ try {
35
+ const fn = TOOL_MAP[name];
36
+ if (!fn) {
37
+ return { id, name, success: false, error: 'Unknown tool: ' + name, durationMs: Date.now() - start };
38
+ }
39
+ return await fn(args, projectRoot);
40
+ }
41
+ catch (err) {
42
+ return {
43
+ id,
44
+ name,
45
+ success: false,
46
+ error: String(err instanceof Error ? err.message : err),
47
+ durationMs: Date.now() - start,
48
+ };
49
+ }
50
+ }
51
+ // ── Path helpers ─────────────────────────────────────────────────────────────
52
+ function toProjectPath(path, projectRoot) {
53
+ if (isAbsolute(path))
54
+ return path;
55
+ return resolve(projectRoot, path);
56
+ }
57
+ function withinProject(path, projectRoot) {
58
+ try {
59
+ const resolved = toProjectPath(path, projectRoot);
60
+ const rel = relative(projectRoot, resolved);
61
+ return !rel.startsWith('..') && !isAbsolute(rel);
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ // ── Propose a file change (returns ProposedFileChange without writing) ───────
68
+ function proposeFileChange(path, proposedContent, projectRoot, changeType, oldContent) {
69
+ const fullPath = toProjectPath(path, projectRoot);
70
+ const originalContent = oldContent ?? '';
71
+ const isNewFile = !existsSync(fullPath);
72
+ const isDeletion = proposedContent === '' && changeType === 'write';
73
+ const baseContent = isNewFile ? '' : originalContent;
74
+ const diff = computeDiff(baseContent, proposedContent);
75
+ const change = {
76
+ path,
77
+ originalContent,
78
+ proposedContent,
79
+ diff: { ...diff, file: path },
80
+ isNewFile,
81
+ isDeletion,
82
+ };
83
+ const lineCount = proposedContent.split('\n').length;
84
+ const summary = isDeletion
85
+ ? `Delete ${path} (${lineCount} lines removed)`
86
+ : isNewFile
87
+ ? `Create ${path} (${lineCount} lines)`
88
+ : `${changeType === 'edit' ? 'Edit' : 'Overwrite'} ${path} (${lineCount} lines, +${diff.additions}/-${diff.deletions})`;
89
+ const result = {
90
+ id: '',
91
+ name: `${changeType}:${path}`,
92
+ success: true,
93
+ output: JSON.stringify({
94
+ message: summary,
95
+ needsApproval: true,
96
+ proposedChange: change,
97
+ }),
98
+ durationMs: 0,
99
+ };
100
+ return { change, result };
101
+ }
102
+ // ── Apply an approved change to disk ────────────────────────────────────────
103
+ export async function applyFileChange(change, projectRoot) {
104
+ const start = Date.now();
105
+ const fullPath = toProjectPath(change.path, projectRoot);
106
+ try {
107
+ if (change.isDeletion) {
108
+ if (existsSync(fullPath)) {
109
+ await writeFileAsync(fullPath, '');
110
+ }
111
+ }
112
+ else {
113
+ const dir = resolve(fullPath, '..');
114
+ if (!existsSync(dir)) {
115
+ mkdirSync(dir, { recursive: true });
116
+ }
117
+ await writeFileAsync(fullPath, change.proposedContent, 'utf-8');
118
+ }
119
+ return {
120
+ id: '',
121
+ name: 'file:write',
122
+ success: true,
123
+ output: `Applied: ${change.path}`,
124
+ durationMs: Date.now() - start,
125
+ };
126
+ }
127
+ catch (err) {
128
+ return {
129
+ id: '',
130
+ name: 'file:write',
131
+ success: false,
132
+ error: 'Cannot apply ' + change.path + ': ' + (err instanceof Error ? err.message : String(err)),
133
+ durationMs: Date.now() - start,
134
+ };
135
+ }
136
+ }
137
+ // ── File Tools ──────────────────────────────────────────────────────────────
138
+ async function toolFileRead(args, projectRoot) {
139
+ const path = String(args.path ?? '');
140
+ if (!path)
141
+ return { id: '', name: 'file:read', success: false, error: 'path is required', durationMs: 0 };
142
+ if (!withinProject(path, projectRoot)) {
143
+ return { id: '', name: 'file:read', success: false, error: 'Access denied: ' + path, durationMs: 0 };
144
+ }
145
+ const fullPath = toProjectPath(path, projectRoot);
146
+ const limit = Number(args.limit ?? 0);
147
+ const offset = Number(args.offset ?? 0);
148
+ try {
149
+ const statResult = statSync(fullPath);
150
+ if (statResult.isDirectory()) {
151
+ return { id: '', name: 'file:read', success: false, error: 'Path "' + path + '" is a directory', durationMs: 0 };
152
+ }
153
+ const content = await readFileAsync(fullPath, 'utf-8');
154
+ const lines = content.split('\n');
155
+ const sliced = lines.slice(offset, limit > 0 ? offset + limit : undefined);
156
+ const summary = limit > 0 ? '[Showing lines ' + (offset + 1) + '-' + (offset + sliced.length) + ' of ' + lines.length + ']' : '';
157
+ return { id: '', name: 'file:read', success: true, output: (summary ? summary + '\n' : '') + sliced.join('\n'), durationMs: 0 };
158
+ }
159
+ catch (err) {
160
+ return { id: '', name: 'file:read', success: false, error: 'Cannot read ' + path + ': ' + (err instanceof Error ? err.message : String(err)), durationMs: 0 };
161
+ }
162
+ }
163
+ async function toolFileWrite(args, projectRoot) {
164
+ const path = String(args.path ?? '');
165
+ const content = String(args.content ?? '');
166
+ if (!path)
167
+ return { id: '', name: 'file:write', success: false, error: 'path is required', durationMs: 0 };
168
+ if (!withinProject(path, projectRoot)) {
169
+ return { id: '', name: 'file:write', success: false, error: 'Access denied: ' + path, durationMs: 0 };
170
+ }
171
+ const { result } = proposeFileChange(path, content, projectRoot, 'write');
172
+ return result;
173
+ }
174
+ async function toolFileEdit(args, projectRoot) {
175
+ const path = String(args.path ?? '');
176
+ const oldString = String(args.old_string ?? '');
177
+ const newString = String(args.new_string ?? '');
178
+ if (!path || !oldString)
179
+ return { id: '', name: 'file:edit', success: false, error: 'path and old_string are required', durationMs: 0 };
180
+ if (!withinProject(path, projectRoot)) {
181
+ return { id: '', name: 'file:edit', success: false, error: 'Access denied: ' + path, durationMs: 0 };
182
+ }
183
+ const fullPath = toProjectPath(path, projectRoot);
184
+ try {
185
+ const existingContent = existsSync(fullPath) ? await readFileAsync(fullPath, 'utf-8') : '';
186
+ if (!existingContent.includes(oldString)) {
187
+ return { id: '', name: 'file:edit', success: false, error: 'old_string not found in ' + path + '. Check whitespace.', durationMs: 0 };
188
+ }
189
+ const newContent = existingContent.replace(oldString, newString);
190
+ const { result } = proposeFileChange(path, newContent, projectRoot, 'edit', existingContent);
191
+ return result;
192
+ }
193
+ catch (err) {
194
+ return { id: '', name: 'file:edit', success: false, error: 'Cannot edit ' + path + ': ' + (err instanceof Error ? err.message : String(err)), durationMs: 0 };
195
+ }
196
+ }
197
+ async function toolFileGlob(args, projectRoot) {
198
+ const globPattern = String(args.pattern ?? '');
199
+ if (!globPattern)
200
+ return { id: '', name: 'file:glob', success: false, error: 'pattern is required', durationMs: 0 };
201
+ const cwd = args.cwd ? String(args.cwd) : projectRoot;
202
+ if (!withinProject(cwd, projectRoot)) {
203
+ return { id: '', name: 'file:glob', success: false, error: 'Access denied', durationMs: 0 };
204
+ }
205
+ try {
206
+ const files = await globPromise(globPattern, { cwd, absolute: false });
207
+ return { id: '', name: 'file:glob', success: true, output: files.length > 0 ? files.join('\n') : '(no files matched)', durationMs: 0 };
208
+ }
209
+ catch (err) {
210
+ return { id: '', name: 'file:glob', success: false, error: 'glob error: ' + (err instanceof Error ? err.message : String(err)), durationMs: 0 };
211
+ }
212
+ }
213
+ async function toolGrep(args, projectRoot) {
214
+ const pattern = String(args.pattern ?? '');
215
+ const path = args.path ? String(args.path) : '.';
216
+ const caseSensitive = args.case_sensitive !== false;
217
+ if (!pattern || !path)
218
+ return { id: '', name: 'grep', success: false, error: 'pattern and path are required', durationMs: 0 };
219
+ if (isAbsolute(path) && !withinProject(path, projectRoot)) {
220
+ return { id: '', name: 'grep', success: false, error: 'Access denied', durationMs: 0 };
221
+ }
222
+ const fullPath = isAbsolute(path) ? path : resolve(projectRoot, path);
223
+ const flags = caseSensitive ? '' : '-i';
224
+ const includeFlag = args.glob ? ['--include=' + String(args.glob)] : [];
225
+ try {
226
+ const cmd = ['grep', flags, '-rn', '--color=never', pattern, fullPath, ...includeFlag].join(' ');
227
+ const { stdout, stderr } = await exec(cmd, { timeout: 30000 });
228
+ const results = (stdout || stderr).trim();
229
+ return { id: '', name: 'grep', success: true, output: results || '(no matches found)', durationMs: 0 };
230
+ }
231
+ catch (err) {
232
+ const errorObj = err;
233
+ if (errorObj.code === 1)
234
+ return { id: '', name: 'grep', success: true, output: '(no matches found)', durationMs: 0 };
235
+ return { id: '', name: 'grep', success: false, error: 'grep error: ' + (err instanceof Error ? err.message : String(err)), durationMs: 0 };
236
+ }
237
+ }
238
+ // ── Bash ─────────────────────────────────────────────────────────────────────
239
+ const DANGEROUS_PATTERNS = [
240
+ /rm\s+-rf\s+['"]?\//i,
241
+ /dd\s+if=/i,
242
+ />\s*\/dev\/sda/i,
243
+ /mkfs\./i,
244
+ /:\s*\(\)\s*\{\s*:\|:&?\s*\};?\s*:/i,
245
+ ];
246
+ async function toolBash(args, projectRoot) {
247
+ const command = String(args.command ?? '');
248
+ const cwd = args.cwd ? String(args.cwd) : projectRoot;
249
+ const timeout = Number(args.timeout ?? getConfig(projectRoot).bashTimeout);
250
+ if (!command)
251
+ return { id: '', name: 'bash:execute', success: false, error: 'command is required', durationMs: 0 };
252
+ for (const pattern of DANGEROUS_PATTERNS) {
253
+ if (pattern.test(command)) {
254
+ return { id: '', name: 'bash:execute', success: false, error: 'Dangerous command blocked: ' + command.slice(0, 50), durationMs: 0 };
255
+ }
256
+ }
257
+ try {
258
+ const { stdout, stderr } = await exec(command, { cwd, timeout });
259
+ const output = [stdout, stderr].filter(Boolean).join('\n');
260
+ return { id: '', name: 'bash:execute', success: true, output: output || '(no output)', durationMs: 0 };
261
+ }
262
+ catch (err) {
263
+ const errorObj = err;
264
+ const combined = [errorObj.stdout, errorObj.stderr].filter(Boolean).join('\n');
265
+ return { id: '', name: 'bash:execute', success: false, error: combined.slice(0, 500) || errorObj.message, durationMs: 0 };
266
+ }
267
+ }
268
+ // ── Git Tools ────────────────────────────────────────────────────────────────
269
+ async function toolGitStatus(args, projectRoot) {
270
+ const cwd = args.cwd ? String(args.cwd) : projectRoot;
271
+ try {
272
+ const git = simpleGit(cwd);
273
+ const status = await git.status();
274
+ const tracking = status.tracking;
275
+ const lines = [
276
+ 'Current branch: ' + (status.current ?? 'unknown'),
277
+ tracking ? 'tracking: ' + tracking : '',
278
+ '',
279
+ 'Modified: ' + (status.modified.length > 0 ? status.modified.join(', ') : '(none)'),
280
+ 'Created: ' + (status.created.length > 0 ? status.created.join(', ') : '(none)'),
281
+ 'Deleted: ' + (status.deleted.length > 0 ? status.deleted.join(', ') : '(none)'),
282
+ '',
283
+ 'Not staged: ' + (status.not_added.length > 0 ? status.not_added.join(', ') : '(none)'),
284
+ '',
285
+ 'Untracked: ' + (status.files.length > 0 ? status.files.join(', ') : '(none)'),
286
+ ].filter(Boolean).join('\n');
287
+ return { id: '', name: 'git:status', success: true, output: lines, durationMs: 0 };
288
+ }
289
+ catch (err) {
290
+ return { id: '', name: 'git:status', success: false, error: err instanceof Error ? err.message : String(err), durationMs: 0 };
291
+ }
292
+ }
293
+ async function toolGitCommit(args, projectRoot) {
294
+ const message = String(args.message ?? '');
295
+ const cwd = args.cwd ? String(args.cwd) : projectRoot;
296
+ if (!message)
297
+ return { id: '', name: 'git:commit', success: false, error: 'message is required', durationMs: 0 };
298
+ try {
299
+ const git = simpleGit(cwd);
300
+ await git.add('.');
301
+ const result = await git.commit(message);
302
+ return { id: '', name: 'git:commit', success: true, output: 'Committed ' + result.commit + ' — ' + message, durationMs: 0 };
303
+ }
304
+ catch (err) {
305
+ return { id: '', name: 'git:commit', success: false, error: err instanceof Error ? err.message : String(err), durationMs: 0 };
306
+ }
307
+ }
308
+ async function toolGitPush(args, projectRoot) {
309
+ const cwd = args.cwd ? String(args.cwd) : projectRoot;
310
+ try {
311
+ const git = simpleGit(cwd);
312
+ await git.push();
313
+ return { id: '', name: 'git:push', success: true, output: 'Pushed to remote.', durationMs: 0 };
314
+ }
315
+ catch (err) {
316
+ return { id: '', name: 'git:push', success: false, error: err instanceof Error ? err.message : String(err), durationMs: 0 };
317
+ }
318
+ }
319
+ async function toolGitLog(args, projectRoot) {
320
+ const cwd = args.cwd ? String(args.cwd) : projectRoot;
321
+ const limit = Number(args.limit ?? 20);
322
+ try {
323
+ const git = simpleGit(cwd);
324
+ const log = await git.log({ maxCount: limit });
325
+ const lines = log.all
326
+ .map((c) => c.hash.slice(0, 7) + ' | ' + c.date.slice(0, 10) + ' | ' + c.message + ' (' + c.author_name + ')')
327
+ .join('\n');
328
+ return { id: '', name: 'git:log', success: true, output: lines, durationMs: 0 };
329
+ }
330
+ catch (err) {
331
+ return { id: '', name: 'git:log', success: false, error: err instanceof Error ? err.message : String(err), durationMs: 0 };
332
+ }
333
+ }
334
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ export type Role = 'system' | 'user' | 'assistant' | 'tool';
2
+ export interface Message {
3
+ role: Role;
4
+ content: string;
5
+ }
6
+ export interface ConversationMessage extends Message {
7
+ id: string;
8
+ timestamp: Date;
9
+ agent?: string;
10
+ }
11
+ export interface ToolCall {
12
+ id: string;
13
+ name: string;
14
+ arguments: Record<string, unknown>;
15
+ }
16
+ export interface ToolResult {
17
+ id: string;
18
+ name: string;
19
+ success: boolean;
20
+ output?: string;
21
+ error?: string;
22
+ durationMs: number;
23
+ }
24
+ export type DiffLineType = 'add' | 'remove' | 'context';
25
+ export interface DiffLine {
26
+ type: DiffLineType;
27
+ lineNumber: number;
28
+ content: string;
29
+ }
30
+ export interface DiffResult {
31
+ file: string;
32
+ lines: DiffLine[];
33
+ additions: number;
34
+ deletions: number;
35
+ }
36
+ export interface ProposedFileChange {
37
+ path: string;
38
+ originalContent: string;
39
+ proposedContent: string;
40
+ diff: DiffResult;
41
+ isNewFile: boolean;
42
+ isDeletion: boolean;
43
+ }
44
+ export type ReviewAction = 'accept' | 'reject' | 'edit' | 'batch';
45
+ export interface ReviewPrompt {
46
+ changes: ProposedFileChange[];
47
+ action: ReviewAction;
48
+ }
49
+ export interface LLMConfig {
50
+ apiKey: string;
51
+ baseUrl: string;
52
+ model: string;
53
+ timeout: number;
54
+ }
55
+ export interface LLMResponse {
56
+ content: string;
57
+ finishReason: 'stop' | 'length' | 'tool_calls' | 'content_filter';
58
+ toolCalls: ToolCall[];
59
+ usage?: {
60
+ promptTokens: number;
61
+ completionTokens: number;
62
+ totalTokens: number;
63
+ };
64
+ }
65
+ export interface ToolParameterProperty {
66
+ type: string;
67
+ description?: string;
68
+ default?: unknown;
69
+ enum?: string[];
70
+ }
71
+ export interface ToolParameter {
72
+ type: 'object';
73
+ properties: Record<string, ToolParameterProperty>;
74
+ required?: string[];
75
+ }
76
+ export interface ToolDef {
77
+ name: string;
78
+ description: string;
79
+ parameters: ToolParameter;
80
+ }
81
+ export interface Tool {
82
+ name: string;
83
+ description: string;
84
+ execute(args: Record<string, unknown>): Promise<ToolResult>;
85
+ }
86
+ export interface Session {
87
+ id: string;
88
+ projectRoot: string;
89
+ startedAt: Date;
90
+ messages: ConversationMessage[];
91
+ currentAgent: string;
92
+ }
93
+ export interface Agent {
94
+ name: string;
95
+ description: string;
96
+ systemPrompt: string;
97
+ tools: string[];
98
+ }
99
+ export interface RenderOptions {
100
+ timestamp?: boolean;
101
+ agentBadge?: string;
102
+ color?: 'user' | 'assistant' | 'error' | 'success' | 'info' | 'warning';
103
+ }
104
+ export interface InputHistory {
105
+ history: string[];
106
+ index: number;
107
+ }
108
+ export interface AppConfig {
109
+ nimApiKey: string;
110
+ nimBaseUrl: string;
111
+ nimModel: string;
112
+ agentTermoDir: string;
113
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
114
+ confirmDestructive: boolean;
115
+ allowedCommands: string[];
116
+ llmTimeout: number;
117
+ bashTimeout: number;
118
+ }
119
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ // =============================================================================
2
+ // Agent-Termo Type Definitions
3
+ // =============================================================================
4
+ export {};
5
+ //# sourceMappingURL=index.js.map