@dlnk/cli 0.1.0 → 0.3.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.
package/dist/memory.js ADDED
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MemoryManager = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ // ── Memory Manager ─────────────────────────────────────────────
41
+ const MEMORY_DIR = path.join(os.homedir(), '.dlnk', 'memory');
42
+ const LONG_TERM_FILE = path.join(MEMORY_DIR, 'longterm.json');
43
+ class MemoryManager {
44
+ short;
45
+ session;
46
+ longTerm;
47
+ constructor(cwd) {
48
+ if (!fs.existsSync(MEMORY_DIR))
49
+ fs.mkdirSync(MEMORY_DIR, { recursive: true });
50
+ this.short = { messages: [], maxMessages: 50 };
51
+ this.session = {
52
+ sessionId: Date.now().toString(36),
53
+ startedAt: new Date().toISOString(),
54
+ cwd,
55
+ filesRead: [],
56
+ filesWritten: [],
57
+ commandsRun: [],
58
+ notes: [],
59
+ };
60
+ this.longTerm = this.loadLongTerm();
61
+ }
62
+ // Short-term: sliding window of messages
63
+ addMessage(role, content) {
64
+ this.short.messages.push({ role, content });
65
+ if (this.short.messages.length > this.short.maxMessages) {
66
+ // Keep system prompt + last N messages
67
+ const sys = this.short.messages.filter(m => m.role === 'system');
68
+ const rest = this.short.messages.filter(m => m.role !== 'system');
69
+ this.short.messages = [...sys, ...rest.slice(-40)];
70
+ }
71
+ }
72
+ getMessages() {
73
+ return this.short.messages;
74
+ }
75
+ // Session tracking
76
+ trackFileRead(filePath) {
77
+ if (!this.session.filesRead.includes(filePath)) {
78
+ this.session.filesRead.push(filePath);
79
+ }
80
+ }
81
+ trackFileWrite(filePath) {
82
+ if (!this.session.filesWritten.includes(filePath)) {
83
+ this.session.filesWritten.push(filePath);
84
+ }
85
+ }
86
+ trackCommand(command) {
87
+ this.session.commandsRun.push(command.slice(0, 100));
88
+ }
89
+ addNote(note) {
90
+ this.session.notes.push(note);
91
+ }
92
+ // Long-term: persisted across sessions
93
+ loadLongTerm() {
94
+ try {
95
+ if (fs.existsSync(LONG_TERM_FILE)) {
96
+ return JSON.parse(fs.readFileSync(LONG_TERM_FILE, 'utf-8'));
97
+ }
98
+ }
99
+ catch { }
100
+ return {
101
+ facts: [],
102
+ preferences: [],
103
+ projectContext: {},
104
+ lastUpdated: new Date().toISOString(),
105
+ };
106
+ }
107
+ saveLongTerm() {
108
+ this.longTerm.lastUpdated = new Date().toISOString();
109
+ fs.writeFileSync(LONG_TERM_FILE, JSON.stringify(this.longTerm, null, 2));
110
+ }
111
+ addFact(fact) {
112
+ if (!this.longTerm.facts.includes(fact)) {
113
+ this.longTerm.facts.push(fact);
114
+ this.saveLongTerm();
115
+ }
116
+ }
117
+ setProjectContext(key, value) {
118
+ this.longTerm.projectContext[key] = value;
119
+ this.saveLongTerm();
120
+ }
121
+ // Build memory context block for system prompt
122
+ getMemoryContext() {
123
+ const parts = [];
124
+ if (this.longTerm.facts.length > 0) {
125
+ parts.push(`## Known Facts\n${this.longTerm.facts.slice(-10).map(f => `- ${f}`).join('\n')}`);
126
+ }
127
+ if (Object.keys(this.longTerm.projectContext).length > 0) {
128
+ const ctx = Object.entries(this.longTerm.projectContext)
129
+ .map(([k, v]) => `- ${k}: ${v}`)
130
+ .join('\n');
131
+ parts.push(`## Project Context\n${ctx}`);
132
+ }
133
+ if (this.session.filesRead.length > 0 || this.session.filesWritten.length > 0) {
134
+ const sessionInfo = [];
135
+ if (this.session.filesRead.length)
136
+ sessionInfo.push(`Read: ${this.session.filesRead.slice(-5).join(', ')}`);
137
+ if (this.session.filesWritten.length)
138
+ sessionInfo.push(`Written: ${this.session.filesWritten.slice(-5).join(', ')}`);
139
+ parts.push(`## This Session\n${sessionInfo.join('\n')}`);
140
+ }
141
+ return parts.length ? '\n\n' + parts.join('\n\n') : '';
142
+ }
143
+ // Save session summary to disk
144
+ saveSession() {
145
+ const sessionFile = path.join(MEMORY_DIR, `session-${this.session.sessionId}.json`);
146
+ fs.writeFileSync(sessionFile, JSON.stringify(this.session, null, 2));
147
+ // Clean old sessions (keep last 10)
148
+ const sessions = fs.readdirSync(MEMORY_DIR)
149
+ .filter(f => f.startsWith('session-'))
150
+ .sort()
151
+ .reverse();
152
+ sessions.slice(10).forEach(f => {
153
+ try {
154
+ fs.unlinkSync(path.join(MEMORY_DIR, f));
155
+ }
156
+ catch { }
157
+ });
158
+ }
159
+ }
160
+ exports.MemoryManager = MemoryManager;
161
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface ReActStep {
2
+ type: 'thought' | 'tool_call' | 'tool_result' | 'final';
3
+ content: string;
4
+ toolName?: string;
5
+ success?: boolean;
6
+ }
7
+ export interface ReActResult {
8
+ steps: ReActStep[];
9
+ finalAnswer: string;
10
+ success: boolean;
11
+ iterations: number;
12
+ }
13
+ export declare function runReAct(task: string, agentRole?: string, onStep?: (step: ReActStep) => void, verbose?: boolean): Promise<ReActResult>;
14
+ export declare function printReActStep(step: ReActStep): void;
15
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAAkB,EAC7B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,EAClC,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,WAAW,CAAC,CAwFtB;AAuCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAwBpD"}
package/dist/react.js ADDED
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runReAct = runReAct;
40
+ exports.printReActStep = printReActStep;
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const tools_js_1 = require("./tools.js");
43
+ const config_js_1 = require("./config.js");
44
+ const MAX_ITERATIONS = 15;
45
+ async function runReAct(task, agentRole = 'general', onStep, verbose = false) {
46
+ const config = (0, config_js_1.loadConfig)();
47
+ const steps = [];
48
+ const messages = [];
49
+ const systemPrompt = `${agentRole ? `You are a ${agentRole} agent.` : 'You are a helpful AI agent.'}
50
+
51
+ ${(0, tools_js_1.getToolsSystemPrompt)(process.cwd())}
52
+
53
+ Current working directory: ${process.cwd()}`;
54
+ messages.push({ role: 'system', content: systemPrompt });
55
+ messages.push({ role: 'user', content: task });
56
+ for (let i = 0; i < MAX_ITERATIONS; i++) {
57
+ // Call LLM
58
+ let response;
59
+ try {
60
+ response = await callLLM(messages, config);
61
+ }
62
+ catch (e) {
63
+ return {
64
+ steps,
65
+ finalAnswer: `Error calling LLM: ${e.message}`,
66
+ success: false,
67
+ iterations: i
68
+ };
69
+ }
70
+ // Parse tool call
71
+ const toolCall = (0, tools_js_1.parseToolCall)(response);
72
+ if (!toolCall) {
73
+ // No tool call = final answer
74
+ const finalStep = { type: 'final', content: response };
75
+ steps.push(finalStep);
76
+ if (onStep)
77
+ onStep(finalStep);
78
+ return {
79
+ steps,
80
+ finalAnswer: response,
81
+ success: true,
82
+ iterations: i + 1
83
+ };
84
+ }
85
+ // Has tool call — extract thought (text before the tool block)
86
+ const thoughtText = response.replace(/```tool[\s\S]*?```/g, '').trim();
87
+ if (thoughtText) {
88
+ const thoughtStep = { type: 'thought', content: thoughtText };
89
+ steps.push(thoughtStep);
90
+ if (onStep)
91
+ onStep(thoughtStep);
92
+ }
93
+ // Log tool call
94
+ const callStep = {
95
+ type: 'tool_call',
96
+ content: JSON.stringify(toolCall),
97
+ toolName: toolCall.tool
98
+ };
99
+ steps.push(callStep);
100
+ if (onStep)
101
+ onStep(callStep);
102
+ // Execute tool
103
+ const result = await (0, tools_js_1.executeTool)(toolCall, { cwd: process.cwd(), confirm: async () => true });
104
+ const resultStep = {
105
+ type: 'tool_result',
106
+ content: result.success ? result.output : `ERROR: ${result.error}`,
107
+ toolName: toolCall.tool,
108
+ success: result.success
109
+ };
110
+ steps.push(resultStep);
111
+ if (onStep)
112
+ onStep(resultStep);
113
+ // Add to conversation
114
+ messages.push({ role: 'assistant', content: response });
115
+ messages.push({
116
+ role: 'user',
117
+ content: `Tool result (${toolCall.tool}): ${result.success ? result.output : `ERROR: ${result.error}`}\n\nContinue with the task.`
118
+ });
119
+ }
120
+ return {
121
+ steps,
122
+ finalAnswer: 'Max iterations reached without completion.',
123
+ success: false,
124
+ iterations: MAX_ITERATIONS
125
+ };
126
+ }
127
+ async function callLLM(messages, config) {
128
+ const fetch = (await Promise.resolve().then(() => __importStar(require('node-fetch')))).default;
129
+ const endpoint = config.endpoint || 'http://localhost:8000';
130
+ const model = config.model || 'claude-haiku-4.5';
131
+ const apiKey = config.apiKey || 'dlnk-key';
132
+ const res = await fetch(`${endpoint}/v1/chat/completions`, {
133
+ method: 'POST',
134
+ headers: {
135
+ 'Content-Type': 'application/json',
136
+ 'Authorization': `Bearer ${apiKey}`
137
+ },
138
+ body: JSON.stringify({
139
+ model,
140
+ messages: messages.filter(m => m.role !== 'system').length > 0
141
+ ? messages
142
+ : [...messages, { role: 'user', content: 'Hello' }],
143
+ temperature: 0.3,
144
+ max_tokens: 4096,
145
+ stream: false
146
+ }),
147
+ timeout: 60000
148
+ });
149
+ if (!res.ok) {
150
+ const err = await res.text();
151
+ throw new Error(`LLM API error ${res.status}: ${err}`);
152
+ }
153
+ const data = await res.json();
154
+ return data.choices?.[0]?.message?.content || '';
155
+ }
156
+ function printReActStep(step) {
157
+ switch (step.type) {
158
+ case 'thought':
159
+ console.log(chalk_1.default.cyan('\n💭 ' + step.content));
160
+ break;
161
+ case 'tool_call': {
162
+ const call = JSON.parse(step.content);
163
+ console.log(chalk_1.default.yellow(`\n🔧 ${step.toolName}`) + chalk_1.default.gray(` ${JSON.stringify(call.params)}`));
164
+ break;
165
+ }
166
+ case 'tool_result':
167
+ if (step.success !== false) {
168
+ const preview = step.content.length > 200
169
+ ? step.content.slice(0, 200) + '...'
170
+ : step.content;
171
+ console.log(chalk_1.default.green(' ✓ ') + chalk_1.default.gray(preview));
172
+ }
173
+ else {
174
+ console.log(chalk_1.default.red(' ✗ ' + step.content));
175
+ }
176
+ break;
177
+ case 'final':
178
+ console.log(chalk_1.default.white('\n' + step.content));
179
+ break;
180
+ }
181
+ }
182
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ export type PermissionMode = 'auto' | 'ask' | 'deny';
3
+ export interface ToolPermission {
4
+ mode: PermissionMode;
5
+ allowedCommands?: string[];
6
+ blockedPatterns?: RegExp[];
7
+ }
8
+ export interface ToolDef {
9
+ name: string;
10
+ description: string;
11
+ schema: z.ZodTypeAny;
12
+ permission: ToolPermission;
13
+ execute: (params: any, ctx: ToolContext) => Promise<ToolResult>;
14
+ }
15
+ export interface ToolContext {
16
+ cwd: string;
17
+ confirm: (message: string) => Promise<boolean>;
18
+ }
19
+ export interface ToolResult {
20
+ success: boolean;
21
+ output: string;
22
+ error?: string;
23
+ }
24
+ export interface ToolCall {
25
+ tool: string;
26
+ params: Record<string, unknown>;
27
+ id?: string;
28
+ }
29
+ export declare const readFileTool: ToolDef;
30
+ export declare const writeFileTool: ToolDef;
31
+ export declare const patchFileTool: ToolDef;
32
+ export declare const listDirTool: ToolDef;
33
+ export declare const shellTool: ToolDef;
34
+ export declare const fetchUrlTool: ToolDef;
35
+ export declare const searchTool: ToolDef;
36
+ export declare const gitTool: ToolDef;
37
+ export declare const ALL_TOOLS: ToolDef[];
38
+ export declare const TOOL_MAP: Record<string, ToolDef>;
39
+ export declare function getToolsSystemPrompt(cwd: string): string;
40
+ export declare function parseToolCall(text: string): ToolCall | null;
41
+ export declare function executeTool(call: ToolCall, ctx: ToolContext): Promise<ToolResult>;
42
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAGD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IACrB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAmBD,eAAO,MAAM,YAAY,EAAE,OAoB1B,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,OAkB3B,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,OAsB3B,CAAC;AAGF,eAAO,MAAM,WAAW,EAAE,OAmBzB,CAAC;AAGF,eAAO,MAAM,SAAS,EAAE,OAgCvB,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,OA0B1B,CAAC;AAGF,eAAO,MAAM,UAAU,EAAE,OAyBxB,CAAC;AAGF,eAAO,MAAM,OAAO,EAAE,OAoBrB,CAAC;AAGF,eAAO,MAAM,SAAS,EAAE,OAAO,EAS9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAE5C,CAAC;AAGF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA+BxD;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAU3D;AAGD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAyBrB"}