@polka-codes/core 0.7.13 → 0.7.15

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.
@@ -6,13 +6,11 @@ declare abstract class AgentBase {
6
6
  protected readonly ai: AiServiceBase;
7
7
  protected readonly config: Readonly<AgentBaseConfig>;
8
8
  protected readonly handlers: Record<string, FullToolInfo>;
9
- protected readonly messages: MessageParam[];
10
9
  constructor(name: string, ai: AiServiceBase, config: AgentBaseConfig, messages?: MessageParam[]);
10
+ get messages(): Readonly<MessageParam[]>;
11
11
  start(prompt: string): Promise<ExitReason>;
12
- step(promp: string): Promise<AssistantMessageContent[] | {
13
- type: string;
14
- }>;
15
- handleStepResponse(response: AssistantMessageContent[]): Promise<{
12
+ step(promp: string, messages?: MessageParam[]): Promise<AssistantMessageContent[]>;
13
+ handleStepResponse(response: AssistantMessageContent[], messages?: MessageParam[]): Promise<{
16
14
  replay: string;
17
15
  } | {
18
16
  exit: ExitReason;
@@ -24,7 +22,14 @@ declare abstract class AgentBase {
24
22
  id: string;
25
23
  info: ModelInfo;
26
24
  };
27
- get usage(): ApiUsage;
25
+ get usage(): {
26
+ messageCount: number;
27
+ inputTokens: number;
28
+ outputTokens: number;
29
+ cacheWriteTokens: number;
30
+ cacheReadTokens: number;
31
+ totalCost: number;
32
+ };
28
33
  }
29
34
  export { AgentBase }
30
35
  export { AgentBase as AgentBase_alias_1 }
@@ -305,7 +310,10 @@ export { ArchitectAgentOptions }
305
310
  export { ArchitectAgentOptions as ArchitectAgentOptions_alias_1 }
306
311
  export { ArchitectAgentOptions as ArchitectAgentOptions_alias_2 }
307
312
 
308
- export declare type AssistantMessageContent = TextContent | ToolUse;
313
+ declare type AssistantMessageContent = TextContent | ToolUse;
314
+ export { AssistantMessageContent }
315
+ export { AssistantMessageContent as AssistantMessageContent_alias_1 }
316
+ export { AssistantMessageContent as AssistantMessageContent_alias_2 }
309
317
 
310
318
  export declare const basePrompt = "You are a highly skilled software engineer specializing in debugging and fixing code issues. You have extensive experience with:\n- Type systems and type checking\n- Test frameworks and debugging test failures\n- Code quality tools and best practices\n- Systematic debugging approaches";
311
319
 
@@ -1753,7 +1761,10 @@ declare type Output = {
1753
1761
  * // {type: "text", content: "Here are the results"}
1754
1762
  * // ]
1755
1763
  */
1756
- export declare function parseAssistantMessage(assistantMessage: string, tools: ToolInfo[], toolNamePrefix: string): AssistantMessageContent[];
1764
+ declare function parseAssistantMessage(assistantMessage: string, tools: ToolInfo[], toolNamePrefix: string): AssistantMessageContent[];
1765
+ export { parseAssistantMessage }
1766
+ export { parseAssistantMessage as parseAssistantMessage_alias_1 }
1767
+ export { parseAssistantMessage as parseAssistantMessage_alias_2 }
1757
1768
 
1758
1769
  declare enum PermissionLevel {
1759
1770
  None = 0,
@@ -1956,10 +1967,13 @@ export { TaskEventUsageExceeded }
1956
1967
  export { TaskEventUsageExceeded as TaskEventUsageExceeded_alias_1 }
1957
1968
  export { TaskEventUsageExceeded as TaskEventUsageExceeded_alias_2 }
1958
1969
 
1959
- export declare interface TextContent {
1970
+ declare interface TextContent {
1960
1971
  type: 'text';
1961
1972
  content: string;
1962
1973
  }
1974
+ export { TextContent }
1975
+ export { TextContent as TextContent_alias_1 }
1976
+ export { TextContent as TextContent_alias_2 }
1963
1977
 
1964
1978
  declare type ToolExample = {
1965
1979
  description: string;
@@ -2448,11 +2462,14 @@ declare enum ToolResponseType {
2448
2462
  export { ToolResponseType }
2449
2463
  export { ToolResponseType as ToolResponseType_alias_1 }
2450
2464
 
2451
- export declare interface ToolUse {
2465
+ declare interface ToolUse {
2452
2466
  type: 'tool_use';
2453
2467
  name: string;
2454
2468
  params: Record<string, string>;
2455
2469
  }
2470
+ export { ToolUse }
2471
+ export { ToolUse as ToolUse_alias_1 }
2472
+ export { ToolUse as ToolUse_alias_2 }
2456
2473
 
2457
2474
  declare const toolUsePrompt: (tools: ToolInfo[], toolNamePrefix: string) => string;
2458
2475
  export { toolUsePrompt }
@@ -2475,16 +2492,27 @@ declare class UsageMeter {
2475
2492
  provider: string;
2476
2493
  id: string;
2477
2494
  }): void;
2495
+ setUsage(usage: Partial<ApiUsage>, messageCount?: number): void;
2478
2496
  incrementMessageCount(count?: number): void;
2479
2497
  isLimitExceeded(): {
2480
2498
  messageCount: boolean;
2499
+ maxMessageCount: number;
2481
2500
  cost: boolean;
2501
+ maxCost: number;
2482
2502
  result: boolean;
2483
2503
  };
2504
+ checkLimit(): void;
2484
2505
  /**
2485
2506
  * Get current usage totals
2486
2507
  */
2487
- get usage(): ApiUsage;
2508
+ get usage(): {
2509
+ messageCount: number;
2510
+ inputTokens: number;
2511
+ outputTokens: number;
2512
+ cacheWriteTokens: number;
2513
+ cacheReadTokens: number;
2514
+ totalCost: number;
2515
+ };
2488
2516
  printUsage(): void;
2489
2517
  }
2490
2518
  export { UsageMeter }
package/dist/index.d.ts CHANGED
@@ -51,6 +51,10 @@ export { systemInformation } from './_tsup-dts-rollup.js';
51
51
  export { customInstructions } from './_tsup-dts-rollup.js';
52
52
  export { customScripts } from './_tsup-dts-rollup.js';
53
53
  export { responsePrompts } from './_tsup-dts-rollup.js';
54
+ export { parseAssistantMessage } from './_tsup-dts-rollup.js';
55
+ export { TextContent } from './_tsup-dts-rollup.js';
56
+ export { ToolUse } from './_tsup-dts-rollup.js';
57
+ export { AssistantMessageContent } from './_tsup-dts-rollup.js';
54
58
  export { allTools } from './_tsup-dts-rollup.js';
55
59
  export { FilesystemProvider } from './_tsup-dts-rollup.js';
56
60
  export { CommandProvider } from './_tsup-dts-rollup.js';
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ var AiServiceBase = class {
11
11
  this.usageMeter = usageMeter;
12
12
  }
13
13
  async *send(systemPrompt, messages) {
14
+ this.usageMeter.checkLimit();
14
15
  this.usageMeter.incrementMessageCount();
15
16
  const stream = this.sendImpl(systemPrompt, messages);
16
17
  for await (const chunk of stream) {
@@ -23,6 +24,7 @@ var AiServiceBase = class {
23
24
  }
24
25
  }
25
26
  async request(systemPrompt, messages) {
27
+ this.usageMeter.checkLimit();
26
28
  this.usageMeter.incrementMessageCount();
27
29
  const stream = this.sendImpl(systemPrompt, messages);
28
30
  const usage = {
@@ -775,6 +777,16 @@ var UsageMeter = class {
775
777
  }
776
778
  this.#usage.totalCost += usage.totalCost ?? 0;
777
779
  }
780
+ setUsage(usage, messageCount) {
781
+ this.#usage.inputTokens = usage.inputTokens ?? this.#usage.inputTokens;
782
+ this.#usage.outputTokens = usage.outputTokens ?? this.#usage.outputTokens;
783
+ this.#usage.cacheWriteTokens = usage.cacheWriteTokens ?? this.#usage.cacheWriteTokens;
784
+ this.#usage.cacheReadTokens = usage.cacheReadTokens ?? this.#usage.cacheReadTokens;
785
+ this.#usage.totalCost = usage.totalCost ?? this.#usage.totalCost;
786
+ if (messageCount !== void 0) {
787
+ this.#messageCount = messageCount;
788
+ }
789
+ }
778
790
  incrementMessageCount(count = 1) {
779
791
  this.#messageCount += count;
780
792
  }
@@ -783,15 +795,25 @@ var UsageMeter = class {
783
795
  const cost = this.#usage.totalCost >= this.maxCost;
784
796
  return {
785
797
  messageCount,
798
+ maxMessageCount: this.maxMessageCount,
786
799
  cost,
800
+ maxCost: this.maxCost,
787
801
  result: messageCount || cost
788
802
  };
789
803
  }
804
+ checkLimit() {
805
+ const result = this.isLimitExceeded();
806
+ if (result.result) {
807
+ throw new Error(
808
+ `Usage limit exceeded. Message count: ${result.messageCount}/${result.maxMessageCount}, cost: ${result.cost}/${result.maxCost}`
809
+ );
810
+ }
811
+ }
790
812
  /**
791
813
  * Get current usage totals
792
814
  */
793
815
  get usage() {
794
- return { ...this.#usage };
816
+ return { ...this.#usage, messageCount: this.#messageCount };
795
817
  }
796
818
  printUsage() {
797
819
  const { inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens } = this.#usage;
@@ -2185,10 +2207,10 @@ var AgentBase = class {
2185
2207
  ai;
2186
2208
  config;
2187
2209
  handlers;
2188
- messages;
2210
+ #messages;
2189
2211
  constructor(name, ai, config, messages = []) {
2190
2212
  this.ai = ai;
2191
- this.messages = messages;
2213
+ this.#messages = messages;
2192
2214
  if (config.agents && config.agents.length > 0) {
2193
2215
  const agents = agentsPrompt(config.agents, name);
2194
2216
  config.systemPrompt += `
@@ -2201,6 +2223,9 @@ ${agents}`;
2201
2223
  }
2202
2224
  this.handlers = handlers;
2203
2225
  }
2226
+ get messages() {
2227
+ return this.#messages;
2228
+ }
2204
2229
  async #callback(event) {
2205
2230
  await this.config.callback?.(event);
2206
2231
  }
@@ -2208,17 +2233,19 @@ ${agents}`;
2208
2233
  this.#callback({ kind: "StartTask" /* StartTask */, agent: this, systemPrompt: this.config.systemPrompt });
2209
2234
  return await this.#processLoop(prompt5);
2210
2235
  }
2211
- async step(promp) {
2212
- if (this.messages.length === 0) {
2213
- this.#callback({ kind: "StartTask" /* StartTask */, agent: this, systemPrompt: this.config.systemPrompt });
2236
+ async step(promp, messages) {
2237
+ if (messages) {
2238
+ this.#messages = messages;
2214
2239
  }
2215
- if (this.ai.usageMeter.isLimitExceeded().result) {
2216
- this.#callback({ kind: "UsageExceeded" /* UsageExceeded */, agent: this });
2217
- return { type: "UsageExceeded" };
2240
+ if (this.#messages.length === 0) {
2241
+ this.#callback({ kind: "StartTask" /* StartTask */, agent: this, systemPrompt: this.config.systemPrompt });
2218
2242
  }
2219
2243
  return await this.#request(promp);
2220
2244
  }
2221
- async handleStepResponse(response) {
2245
+ async handleStepResponse(response, messages) {
2246
+ if (messages) {
2247
+ this.#messages = messages;
2248
+ }
2222
2249
  return this.#handleResponse(response);
2223
2250
  }
2224
2251
  async #processLoop(userMessage) {
@@ -2245,7 +2272,7 @@ ${agents}`;
2245
2272
  throw new Error("userMessage is missing");
2246
2273
  }
2247
2274
  await this.#callback({ kind: "StartRequest" /* StartRequest */, agent: this, userMessage });
2248
- this.messages.push({
2275
+ this.#messages.push({
2249
2276
  role: "user",
2250
2277
  content: userMessage
2251
2278
  });
@@ -2253,7 +2280,7 @@ ${agents}`;
2253
2280
  const retryCount = 5;
2254
2281
  for (let i = 0; i < retryCount; i++) {
2255
2282
  currentAssistantMessage = "";
2256
- const stream = this.ai.send(this.config.systemPrompt, this.messages);
2283
+ const stream = this.ai.send(this.config.systemPrompt, this.#messages);
2257
2284
  try {
2258
2285
  for await (const chunk of stream) {
2259
2286
  switch (chunk.type) {
@@ -2280,7 +2307,7 @@ ${agents}`;
2280
2307
  if (!currentAssistantMessage) {
2281
2308
  throw new Error("No assistant message received");
2282
2309
  }
2283
- this.messages.push({
2310
+ this.#messages.push({
2284
2311
  role: "assistant",
2285
2312
  content: currentAssistantMessage
2286
2313
  });
@@ -3432,6 +3459,7 @@ export {
3432
3459
  makeTool,
3433
3460
  modelInfos,
3434
3461
  openAiModelInfoSaneDefaults,
3462
+ parseAssistantMessage,
3435
3463
  readFile_default as readFile,
3436
3464
  removeFile_default as removeFile,
3437
3465
  renameFile_default as renameFile,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polka-codes/core",
3
- "version": "0.7.13",
3
+ "version": "0.7.15",
4
4
  "license": "AGPL-3.0",
5
5
  "author": "github@polka.codes",
6
6
  "type": "module",