borderless-agent 0.0.1-alpha.1

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 (90) hide show
  1. package/README.md +274 -0
  2. package/dist/agentBuilder.d.ts +51 -0
  3. package/dist/agentBuilder.d.ts.map +1 -0
  4. package/dist/agentBuilder.js +130 -0
  5. package/dist/agentBuilder.js.map +1 -0
  6. package/dist/agentInstance.d.ts +45 -0
  7. package/dist/agentInstance.d.ts.map +1 -0
  8. package/dist/agentInstance.js +501 -0
  9. package/dist/agentInstance.js.map +1 -0
  10. package/dist/agentsCore.d.ts +16 -0
  11. package/dist/agentsCore.d.ts.map +1 -0
  12. package/dist/agentsCore.js +50 -0
  13. package/dist/agentsCore.js.map +1 -0
  14. package/dist/cli/index.d.ts +5 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +11 -0
  17. package/dist/cli/index.js.map +1 -0
  18. package/dist/cli/main.d.ts +36 -0
  19. package/dist/cli/main.d.ts.map +1 -0
  20. package/dist/cli/main.js +306 -0
  21. package/dist/cli/main.js.map +1 -0
  22. package/dist/config.d.ts +26 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +98 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/contextCore.d.ts +97 -0
  27. package/dist/contextCore.d.ts.map +1 -0
  28. package/dist/contextCore.js +533 -0
  29. package/dist/contextCore.js.map +1 -0
  30. package/dist/index.d.ts +28 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +46 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/llmProtocol.d.ts +60 -0
  35. package/dist/llmProtocol.d.ts.map +1 -0
  36. package/dist/llmProtocol.js +202 -0
  37. package/dist/llmProtocol.js.map +1 -0
  38. package/dist/loopCore.d.ts +22 -0
  39. package/dist/loopCore.d.ts.map +1 -0
  40. package/dist/loopCore.js +288 -0
  41. package/dist/loopCore.js.map +1 -0
  42. package/dist/main.d.ts +9 -0
  43. package/dist/main.d.ts.map +1 -0
  44. package/dist/main.js +15 -0
  45. package/dist/main.js.map +1 -0
  46. package/dist/memoryCore.d.ts +37 -0
  47. package/dist/memoryCore.d.ts.map +1 -0
  48. package/dist/memoryCore.js +346 -0
  49. package/dist/memoryCore.js.map +1 -0
  50. package/dist/server/app.d.ts +13 -0
  51. package/dist/server/app.d.ts.map +1 -0
  52. package/dist/server/app.js +200 -0
  53. package/dist/server/app.js.map +1 -0
  54. package/dist/sessionCore.d.ts +54 -0
  55. package/dist/sessionCore.d.ts.map +1 -0
  56. package/dist/sessionCore.js +312 -0
  57. package/dist/sessionCore.js.map +1 -0
  58. package/dist/skillsCore.d.ts +23 -0
  59. package/dist/skillsCore.d.ts.map +1 -0
  60. package/dist/skillsCore.js +202 -0
  61. package/dist/skillsCore.js.map +1 -0
  62. package/dist/storage/cloudBackend.d.ts +48 -0
  63. package/dist/storage/cloudBackend.d.ts.map +1 -0
  64. package/dist/storage/cloudBackend.js +301 -0
  65. package/dist/storage/cloudBackend.js.map +1 -0
  66. package/dist/storage/fileBackend.d.ts +41 -0
  67. package/dist/storage/fileBackend.d.ts.map +1 -0
  68. package/dist/storage/fileBackend.js +240 -0
  69. package/dist/storage/fileBackend.js.map +1 -0
  70. package/dist/storage/index.d.ts +21 -0
  71. package/dist/storage/index.d.ts.map +1 -0
  72. package/dist/storage/index.js +58 -0
  73. package/dist/storage/index.js.map +1 -0
  74. package/dist/storage/protocols.d.ts +29 -0
  75. package/dist/storage/protocols.d.ts.map +1 -0
  76. package/dist/storage/protocols.js +20 -0
  77. package/dist/storage/protocols.js.map +1 -0
  78. package/dist/todoCore.d.ts +15 -0
  79. package/dist/todoCore.d.ts.map +1 -0
  80. package/dist/todoCore.js +52 -0
  81. package/dist/todoCore.js.map +1 -0
  82. package/dist/toolsCore.d.ts +31 -0
  83. package/dist/toolsCore.d.ts.map +1 -0
  84. package/dist/toolsCore.js +609 -0
  85. package/dist/toolsCore.js.map +1 -0
  86. package/dist/types.d.ts +144 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +8 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +48 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * llmProtocol.ts - LLM provider abstraction for library-style agent usage.
3
+ *
4
+ * Protocol and types allow swapping OpenAI, Anthropic, or local backends without
5
+ * changing the agent loop. chat() accepts list-of-dicts messages and returns
6
+ * normalized LLMResponse (or an async iterator when stream=true).
7
+ */
8
+ export interface ToolCall {
9
+ id: string;
10
+ name: string;
11
+ arguments: Record<string, any>;
12
+ }
13
+ export interface LLMResponse {
14
+ content: string | null;
15
+ toolCalls: ToolCall[];
16
+ usage: Record<string, number>;
17
+ model: string;
18
+ }
19
+ export interface ChatMessage {
20
+ role: string;
21
+ content?: string | any[];
22
+ tool_calls?: any[];
23
+ tool_call_id?: string;
24
+ [key: string]: any;
25
+ }
26
+ export interface LLMProvider {
27
+ readonly contextWindowSize: number;
28
+ readonly supportsStreaming: boolean;
29
+ chat(messages: ChatMessage[] | Record<string, any>[], options?: {
30
+ tools?: any[];
31
+ temperature?: number;
32
+ maxTokens?: number;
33
+ stream?: boolean;
34
+ }): Promise<LLMResponse> | AsyncGenerator<LLMResponse>;
35
+ }
36
+ export declare class OpenAIProvider implements LLMProvider {
37
+ private _apiKey;
38
+ private _model;
39
+ private _baseUrl?;
40
+ private _timeout;
41
+ private _client;
42
+ constructor(options: {
43
+ apiKey: string;
44
+ model: string;
45
+ baseUrl?: string;
46
+ timeout?: number;
47
+ });
48
+ private get openaiClient();
49
+ get contextWindowSize(): number;
50
+ get supportsStreaming(): boolean;
51
+ chat(messages: ChatMessage[] | Record<string, any>[], options?: {
52
+ tools?: any[];
53
+ temperature?: number;
54
+ maxTokens?: number;
55
+ stream?: boolean;
56
+ }): Promise<LLMResponse> | AsyncGenerator<LLMResponse>;
57
+ private _chatNonStream;
58
+ private _chatStream;
59
+ }
60
+ //# sourceMappingURL=llmProtocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmProtocol.d.ts","sourceRoot":"","sources":["../src/llmProtocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAMD,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAEpC,IAAI,CACA,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC/C,OAAO,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB,GACF,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;CACzD;AAsCD,qBAAa,cAAe,YAAW,WAAW;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,OAAO,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB;IAOD,OAAO,KAAK,YAAY,GAYvB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,CACA,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC/C,OAAO,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB,GACF,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC;YA0CvC,cAAc;YAab,WAAW;CAuE7B"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /**
3
+ * llmProtocol.ts - LLM provider abstraction for library-style agent usage.
4
+ *
5
+ * Protocol and types allow swapping OpenAI, Anthropic, or local backends without
6
+ * changing the agent loop. chat() accepts list-of-dicts messages and returns
7
+ * normalized LLMResponse (or an async iterator when stream=true).
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.OpenAIProvider = void 0;
14
+ const openai_1 = __importDefault(require("openai"));
15
+ // ---------------------------------------------------------------------------
16
+ // Helpers
17
+ // ---------------------------------------------------------------------------
18
+ function usageFromOpenAI(usage) {
19
+ if (!usage)
20
+ return {};
21
+ return {
22
+ input_tokens: usage?.input_tokens ?? usage?.prompt_tokens ?? 0,
23
+ output_tokens: usage?.output_tokens ?? usage?.completion_tokens ?? 0,
24
+ cache_creation_input_tokens: usage?.cache_creation_input_tokens ?? 0,
25
+ cache_read_input_tokens: usage?.cache_read_input_tokens ?? 0,
26
+ };
27
+ }
28
+ function toolCallsFromOpenAIMessage(msg) {
29
+ const result = [];
30
+ const raw = msg?.tool_calls ?? [];
31
+ for (const tc of raw) {
32
+ const fn = tc?.function;
33
+ const name = fn?.name ?? '';
34
+ const argsStr = fn?.arguments ?? '{}';
35
+ let args = {};
36
+ try {
37
+ args = JSON.parse(argsStr);
38
+ }
39
+ catch {
40
+ args = {};
41
+ }
42
+ result.push({ id: tc?.id ?? '', name, arguments: args });
43
+ }
44
+ return result;
45
+ }
46
+ // ---------------------------------------------------------------------------
47
+ // OpenAI implementation
48
+ // ---------------------------------------------------------------------------
49
+ class OpenAIProvider {
50
+ _apiKey;
51
+ _model;
52
+ _baseUrl;
53
+ _timeout;
54
+ _client = null;
55
+ constructor(options) {
56
+ this._apiKey = options.apiKey;
57
+ this._model = options.model;
58
+ this._baseUrl = options.baseUrl;
59
+ this._timeout = options.timeout ?? 120;
60
+ }
61
+ get openaiClient() {
62
+ if (!this._client) {
63
+ const opts = {
64
+ apiKey: this._apiKey,
65
+ timeout: this._timeout * 1000,
66
+ };
67
+ if (this._baseUrl) {
68
+ opts.baseURL = this._baseUrl;
69
+ }
70
+ this._client = new openai_1.default(opts);
71
+ }
72
+ return this._client;
73
+ }
74
+ get contextWindowSize() {
75
+ return 128_000;
76
+ }
77
+ get supportsStreaming() {
78
+ return true;
79
+ }
80
+ chat(messages, options) {
81
+ const tools = options?.tools ?? undefined;
82
+ const temperature = options?.temperature ?? 0.7;
83
+ const maxTokens = options?.maxTokens ?? 8000;
84
+ const stream = options?.stream ?? false;
85
+ let openaiTools;
86
+ if (tools && tools.length > 0) {
87
+ const first = tools[0];
88
+ if (first.type === 'function') {
89
+ openaiTools = tools;
90
+ }
91
+ else {
92
+ openaiTools = tools.map((t) => ({
93
+ type: 'function',
94
+ function: {
95
+ name: t.name,
96
+ description: t.description ?? '',
97
+ parameters: t.input_schema ??
98
+ t.parameters ?? { type: 'object', properties: {} },
99
+ },
100
+ }));
101
+ }
102
+ }
103
+ const kwargs = {
104
+ model: this._model,
105
+ messages,
106
+ max_tokens: maxTokens,
107
+ temperature,
108
+ };
109
+ if (openaiTools) {
110
+ kwargs.tools = openaiTools;
111
+ kwargs.tool_choice = 'auto';
112
+ }
113
+ if (stream) {
114
+ return this._chatStream(kwargs);
115
+ }
116
+ return this._chatNonStream(kwargs);
117
+ }
118
+ async _chatNonStream(kwargs) {
119
+ const resp = await this.openaiClient.chat.completions.create(kwargs);
120
+ const msg = resp.choices[0].message;
121
+ const usage = usageFromOpenAI(resp.usage);
122
+ const toolCalls = toolCallsFromOpenAIMessage(msg);
123
+ return {
124
+ content: (msg.content ?? '').trim() || null,
125
+ toolCalls,
126
+ usage,
127
+ model: this._model,
128
+ };
129
+ }
130
+ async *_chatStream(kwargs) {
131
+ kwargs.stream = true;
132
+ const stream = await this.openaiClient.chat.completions.create(kwargs);
133
+ const contentParts = [];
134
+ const toolCallsAccum = [];
135
+ let usage = {};
136
+ for await (const chunk of stream) {
137
+ if (!chunk.choices || chunk.choices.length === 0) {
138
+ if (chunk.usage) {
139
+ usage = usageFromOpenAI(chunk.usage);
140
+ }
141
+ continue;
142
+ }
143
+ const choice = chunk.choices[0];
144
+ const delta = choice?.delta;
145
+ if (!delta)
146
+ continue;
147
+ const part = delta?.content;
148
+ if (part) {
149
+ contentParts.push(part);
150
+ yield {
151
+ content: part,
152
+ toolCalls: [],
153
+ usage: {},
154
+ model: this._model,
155
+ };
156
+ }
157
+ for (const tc of delta?.tool_calls ?? []) {
158
+ const idx = tc?.index;
159
+ if (idx == null)
160
+ continue;
161
+ while (toolCallsAccum.length <= idx) {
162
+ toolCallsAccum.push({ id: '', name: '', arguments: '' });
163
+ }
164
+ const acc = toolCallsAccum[idx];
165
+ if (tc.id)
166
+ acc.id = tc.id;
167
+ const fn = tc.function;
168
+ if (fn) {
169
+ if (fn.name)
170
+ acc.name = fn.name;
171
+ if (fn.arguments)
172
+ acc.arguments += fn.arguments;
173
+ }
174
+ }
175
+ if (chunk.usage) {
176
+ usage = usageFromOpenAI(chunk.usage);
177
+ }
178
+ }
179
+ const fullContent = contentParts.join('');
180
+ const toolCallsOut = [];
181
+ for (const acc of toolCallsAccum) {
182
+ if (acc.id || acc.name || acc.arguments) {
183
+ let args = {};
184
+ try {
185
+ args = JSON.parse(acc.arguments || '{}');
186
+ }
187
+ catch {
188
+ args = {};
189
+ }
190
+ toolCallsOut.push({ id: acc.id, name: acc.name, arguments: args });
191
+ }
192
+ }
193
+ yield {
194
+ content: fullContent || null,
195
+ toolCalls: toolCallsOut,
196
+ usage,
197
+ model: this._model,
198
+ };
199
+ }
200
+ }
201
+ exports.OpenAIProvider = OpenAIProvider;
202
+ //# sourceMappingURL=llmProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmProtocol.js","sourceRoot":"","sources":["../src/llmProtocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * loopCore.ts - Main agent loop and system prompt (LLM provider abstraction).
3
+ *
4
+ * Integrates long-term memory: optional retrieved_memories injected into system prompt,
5
+ * and returns last assistant text for consolidation.
6
+ */
7
+ import { LLMProvider } from './llmProtocol';
8
+ export declare function getBaseSystem(): string;
9
+ export declare function agentLoop(options: {
10
+ messages: Record<string, any>[];
11
+ retrievedMemories?: string[];
12
+ systemOverride?: string;
13
+ budget?: Record<string, number>;
14
+ sessionId?: string;
15
+ onContentDelta?: (chunk: string) => void;
16
+ llm?: LLMProvider;
17
+ }): Promise<{
18
+ messages: Record<string, any>[];
19
+ lastAssistantText: string;
20
+ hadToolCalls: boolean;
21
+ }>;
22
+ //# sourceMappingURL=loopCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loopCore.d.ts","sourceRoot":"","sources":["../src/loopCore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAsC,MAAM,eAAe,CAAC;AAoFhF,wBAAgB,aAAa,IAAI,MAAM,CAiBtC;AAiBD,wBAAsB,SAAS,CAAC,OAAO,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,GAAG,CAAC,EAAE,WAAW,CAAC;CACrB,GAAG,OAAO,CAAC;IACR,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACzB,CAAC,CAkMD"}
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /**
3
+ * loopCore.ts - Main agent loop and system prompt (LLM provider abstraction).
4
+ *
5
+ * Integrates long-term memory: optional retrieved_memories injected into system prompt,
6
+ * and returns last assistant text for consolidation.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getBaseSystem = getBaseSystem;
10
+ exports.agentLoop = agentLoop;
11
+ const config_1 = require("./config");
12
+ const skillsCore_1 = require("./skillsCore");
13
+ const agentsCore_1 = require("./agentsCore");
14
+ const toolsCore_1 = require("./toolsCore");
15
+ const contextCore_1 = require("./contextCore");
16
+ // ---------------------------------------------------------------------------
17
+ // Helpers
18
+ // ---------------------------------------------------------------------------
19
+ function toolsToOpenAI(tools) {
20
+ return tools.map((t) => ({
21
+ type: 'function',
22
+ function: {
23
+ name: t.name,
24
+ description: t.description ?? '',
25
+ parameters: t.input_schema ?? { type: 'object', properties: {} },
26
+ },
27
+ }));
28
+ }
29
+ function messagesToOpenAI(messages) {
30
+ const out = [];
31
+ for (const m of messages) {
32
+ const role = m.role;
33
+ const content = m.content;
34
+ if (role === 'user' &&
35
+ Array.isArray(content) &&
36
+ content.length > 0 &&
37
+ content[0]?.type === 'tool_result') {
38
+ for (const r of content) {
39
+ out.push({
40
+ role: 'tool',
41
+ tool_call_id: r.tool_call_id ?? '',
42
+ content: r.content ?? '',
43
+ });
44
+ }
45
+ continue;
46
+ }
47
+ out.push({ ...m });
48
+ }
49
+ return out;
50
+ }
51
+ function lastAssistantText(messages) {
52
+ for (let i = messages.length - 1; i >= 0; i--) {
53
+ const msg = messages[i];
54
+ if (msg.role !== 'assistant')
55
+ continue;
56
+ const content = msg.content;
57
+ if (typeof content === 'string')
58
+ return content.trim();
59
+ if (Array.isArray(content)) {
60
+ for (const block of content) {
61
+ if (typeof block === 'object' && block?.type === 'text') {
62
+ return (block.text ?? '').trim();
63
+ }
64
+ }
65
+ }
66
+ }
67
+ return '';
68
+ }
69
+ function toolCallsToMsgShape(toolCalls) {
70
+ return toolCalls.map((tc) => ({
71
+ id: tc.id,
72
+ function: {
73
+ name: tc.name,
74
+ arguments: tc.arguments ? JSON.stringify(tc.arguments) : '{}',
75
+ },
76
+ }));
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // System prompt
80
+ // ---------------------------------------------------------------------------
81
+ function getBaseSystem() {
82
+ return `You are a general-purpose assistant. Your workspace is ${config_1.WORKDIR}.
83
+
84
+ You can help with many kinds of tasks: answering questions, searching and reading files, writing or editing content, running commands, and using specialized knowledge via skills and subagents.
85
+
86
+ **Skills** (invoke with Skill tool when the task matches a domain):
87
+ ${skillsCore_1.SKILLS.getDescriptions()}
88
+
89
+ **Subagents** (invoke with Task tool for focused subtasks—e.g. exploration vs. execution):
90
+ ${(0, agentsCore_1.getAgentDescriptions)()}
91
+
92
+ Rules:
93
+ - Use Skill at most ONCE per request; after loading a skill, answer using that knowledge and do not call Skill again.
94
+ - Use Task when a subtask fits an Explorer (read-only) or Executor (write/run, with approval) agent.
95
+ - Use TodoWrite to track multi-step work.
96
+ - Prefer using tools when they help; otherwise respond clearly in natural language.
97
+ - Be concise and helpful. If you take actions, briefly say what you did.`;
98
+ }
99
+ function buildSystem(retrievedMemories) {
100
+ let base = getBaseSystem();
101
+ if (retrievedMemories?.length) {
102
+ const memoryBlock = '**Relevant past context (long-term memory):**\n' +
103
+ retrievedMemories.map((m) => `- ${m}`).join('\n');
104
+ base = base + '\n\n' + memoryBlock;
105
+ }
106
+ return base;
107
+ }
108
+ // ---------------------------------------------------------------------------
109
+ // Agent loop
110
+ // ---------------------------------------------------------------------------
111
+ async function agentLoop(options) {
112
+ const llm = options.llm ?? config_1.defaultLlmProvider;
113
+ const loopStart = Date.now();
114
+ let toolRounds = 0;
115
+ let hadToolCalls = false;
116
+ let totalToolCount = 0;
117
+ const system = options.systemOverride ?? buildSystem(options.retrievedMemories);
118
+ const openaiTools = toolsToOpenAI(toolsCore_1.ALL_TOOLS);
119
+ const messages = options.messages;
120
+ const apiMessages = [
121
+ { role: 'system', content: system },
122
+ ...messagesToOpenAI(messages),
123
+ ];
124
+ const sidTag = options.sessionId?.slice(0, 8) ?? '-';
125
+ config_1.slog.debug(`agent_loop start session=${sidTag} rounds_limit=${toolsCore_1.MAX_TOOL_ROUNDS}`);
126
+ while (true) {
127
+ const reqStart = Date.now();
128
+ const useStream = ((0, config_1.streamEnabled)() || options.onContentDelta != null) &&
129
+ llm.supportsStreaming;
130
+ let msgContent = '';
131
+ let msgToolCalls = [];
132
+ let usage = {};
133
+ if (useStream) {
134
+ const stream = llm.chat(apiMessages, {
135
+ tools: openaiTools,
136
+ maxTokens: 8000,
137
+ stream: true,
138
+ });
139
+ let lastResponse = null;
140
+ for await (const r of stream) {
141
+ if (r.content && options.onContentDelta) {
142
+ options.onContentDelta(r.content);
143
+ }
144
+ else if (r.content && (0, config_1.streamEnabled)()) {
145
+ process.stdout.write(r.content);
146
+ }
147
+ lastResponse = r;
148
+ }
149
+ if (lastResponse?.content && (0, config_1.streamEnabled)() && !options.onContentDelta) {
150
+ process.stdout.write('\n');
151
+ }
152
+ msgContent = lastResponse?.content ?? '';
153
+ const tcs = lastResponse?.toolCalls ?? [];
154
+ msgToolCalls = tcs.length ? toolCallsToMsgShape(tcs) : [];
155
+ usage = lastResponse?.usage ?? {};
156
+ const reqMs = Date.now() - reqStart;
157
+ config_1.slog.debug(`api_call session=${sidTag} duration_ms=${reqMs} (stream)`);
158
+ }
159
+ else {
160
+ const response = (await llm.chat(apiMessages, {
161
+ tools: openaiTools,
162
+ maxTokens: 8000,
163
+ stream: false,
164
+ }));
165
+ const reqMs = Date.now() - reqStart;
166
+ config_1.slog.debug(`api_call session=${sidTag} duration_ms=${reqMs}`);
167
+ msgContent = response.content ?? '';
168
+ msgToolCalls = response.toolCalls?.length
169
+ ? toolCallsToMsgShape(response.toolCalls)
170
+ : [];
171
+ usage = response.usage ?? {};
172
+ }
173
+ // Token usage
174
+ if (usage && (usage.input_tokens || usage.output_tokens)) {
175
+ const inp = (usage.input_tokens ?? 0) +
176
+ (usage.cache_creation_input_tokens ?? 0) +
177
+ (usage.cache_read_input_tokens ?? 0);
178
+ const out = usage.output_tokens ?? 0;
179
+ if (options.budget?.total) {
180
+ const stats = (0, contextCore_1.computeUsageStats)(usage, options.budget.total);
181
+ if (stats.used != null) {
182
+ config_1.logger.info(` [Tokens: in ${inp} out ${out} (${stats.used}% of budget)]`);
183
+ }
184
+ else {
185
+ config_1.logger.info(` [Tokens: in ${inp} out ${out}]`);
186
+ }
187
+ }
188
+ else {
189
+ config_1.logger.info(` [Tokens: in ${inp} out ${out}]`);
190
+ }
191
+ }
192
+ if (msgContent && !(0, config_1.streamEnabled)()) {
193
+ console.log(msgContent);
194
+ }
195
+ if (!msgToolCalls.length) {
196
+ messages.push({ role: 'assistant', content: (msgContent ?? '').trim() });
197
+ const totalMs = Date.now() - loopStart;
198
+ config_1.slog.debug(`agent_loop end session=${sidTag} duration_ms=${totalMs} rounds=${toolRounds} tools=${totalToolCount}`);
199
+ return {
200
+ messages,
201
+ lastAssistantText: (msgContent ?? '').trim(),
202
+ hadToolCalls,
203
+ };
204
+ }
205
+ hadToolCalls = true;
206
+ toolRounds++;
207
+ if (toolRounds >= toolsCore_1.MAX_TOOL_ROUNDS) {
208
+ config_1.logger.warning('[agent] Reached tool-use limit, stopping further tool calls.');
209
+ messages.push({
210
+ role: 'assistant',
211
+ content: 'Stopped tool calls due to safety limit. Please rephrase or narrow your request if you still need help.',
212
+ });
213
+ const totalMs = Date.now() - loopStart;
214
+ config_1.slog.debug(`agent_loop end session=${sidTag} duration_ms=${totalMs} rounds=${toolRounds} tools=${totalToolCount} (limit hit)`);
215
+ return {
216
+ messages,
217
+ lastAssistantText: lastAssistantText(messages),
218
+ hadToolCalls,
219
+ };
220
+ }
221
+ // Build tool_calls in OpenAI format
222
+ const assistantToolCalls = msgToolCalls.map((tc) => ({
223
+ id: tc.id,
224
+ type: 'function',
225
+ function: { name: tc.function.name, arguments: tc.function.arguments },
226
+ }));
227
+ const results = [];
228
+ for (const tc of msgToolCalls) {
229
+ totalToolCount++;
230
+ const name = tc.function.name;
231
+ let args;
232
+ try {
233
+ args = JSON.parse(tc.function.arguments || '{}');
234
+ }
235
+ catch {
236
+ args = {};
237
+ }
238
+ if (name === 'Task') {
239
+ config_1.logger.info(`> Task: ${args.description ?? 'subtask'}`);
240
+ }
241
+ else if (name === 'Skill') {
242
+ config_1.logger.info(`> Loading skill: ${args.skill ?? '?'}`);
243
+ }
244
+ else {
245
+ config_1.logger.info(`> ${name}`);
246
+ }
247
+ let output = await (0, toolsCore_1.executeToolAsync)(name, args);
248
+ if ((0, contextCore_1.contextEnabled)()) {
249
+ output = (0, contextCore_1.foldObservation)(output);
250
+ }
251
+ if (name === 'Skill') {
252
+ config_1.logger.info(` Skill loaded (${output.length} chars)`);
253
+ }
254
+ else if (name !== 'Task') {
255
+ const preview = output.length > 200 ? output.slice(0, 200) + '...' : output;
256
+ config_1.logger.info(` ${preview}`);
257
+ }
258
+ results.push({ tool_call_id: tc.id, content: output });
259
+ }
260
+ // Append to API messages
261
+ apiMessages.push({
262
+ role: 'assistant',
263
+ content: msgContent || '',
264
+ tool_calls: assistantToolCalls,
265
+ });
266
+ for (const r of results) {
267
+ apiMessages.push({
268
+ role: 'tool',
269
+ tool_call_id: r.tool_call_id,
270
+ content: r.content,
271
+ });
272
+ }
273
+ // Keep local messages in sync
274
+ messages.push({
275
+ role: 'assistant',
276
+ content: msgContent || '',
277
+ tool_calls: assistantToolCalls,
278
+ });
279
+ for (const r of results) {
280
+ messages.push({
281
+ role: 'tool',
282
+ tool_call_id: r.tool_call_id,
283
+ content: r.content,
284
+ });
285
+ }
286
+ }
287
+ }
288
+ //# sourceMappingURL=loopCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loopCore.js","sourceRoot":"","sources":["../src/loopCore.ts"],"names":[],"mappings":"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"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * main.ts - Root launcher for the CLI agent.
3
+ *
4
+ * Run from TypeScript project root:
5
+ * npx ts-node src/main.ts
6
+ * node dist/main.js (after build)
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/dist/main.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * main.ts - Root launcher for the CLI agent.
4
+ *
5
+ * Run from TypeScript project root:
6
+ * npx ts-node src/main.ts
7
+ * node dist/main.js (after build)
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const main_1 = require("./cli/main");
11
+ (0, main_1.main)().catch((err) => {
12
+ console.error('Fatal error:', err);
13
+ process.exit(1);
14
+ });
15
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,qCAAkC;AAElC,IAAA,WAAI,GAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}