marco-agent 0.1.1 → 0.1.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.
- package/dist/compaction.d.ts +9 -1
- package/dist/compaction.d.ts.map +1 -1
- package/dist/compaction.js +24 -2
- package/dist/compaction.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/compaction.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import type { Message, ModelProvider } from 'marco-harness';
|
|
1
|
+
import type { Message, ModelProvider, SystemMessage, Usage } from 'marco-harness';
|
|
2
|
+
export type CompactionSummaryMeta = {
|
|
3
|
+
kind: 'compaction';
|
|
4
|
+
messagesRemoved: number;
|
|
5
|
+
summaryUsage: Usage;
|
|
6
|
+
};
|
|
7
|
+
export declare function isCompactionSummary(m: Message): m is SystemMessage & {
|
|
8
|
+
meta: CompactionSummaryMeta;
|
|
9
|
+
};
|
|
2
10
|
export type CompactionConfig = {
|
|
3
11
|
summaryModel: string;
|
|
4
12
|
summaryPrompt: string;
|
package/dist/compaction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAMjF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,YAAY,CAAA;IAElB,eAAe,EAAE,MAAM,CAAA;IAIvB,YAAY,EAAE,KAAK,CAAA;CACpB,CAAA;AAUD,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,OAAO,GACT,CAAC,IAAI,aAAa,GAAG;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,CAItD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAE7B,YAAY,EAAE,MAAM,CAAA;IAEpB,aAAa,EAAE,MAAM,CAAA;IAErB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAG7B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAElB,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;IAEpD,eAAe,EAAE,MAAM,CAAA;IAIvB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAKD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAAE,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAyBT;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,OAAO,EAAE,EAClB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAsE3B"}
|
package/dist/compaction.js
CHANGED
|
@@ -14,6 +14,20 @@
|
|
|
14
14
|
// well before the model's hard limit. summaryModel and summaryPrompt have NO
|
|
15
15
|
// default — the library can't know what model your API key supports, and a
|
|
16
16
|
// generic prompt would mismatch most agent domains.
|
|
17
|
+
// Type guard for consumers walking result.messages. Use this to find the
|
|
18
|
+
// synthesized summary message and narrow its `meta` to CompactionSummaryMeta:
|
|
19
|
+
//
|
|
20
|
+
// const summary = result.messages.find(isCompactionSummary)
|
|
21
|
+
// if (summary) console.log(summary.meta.messagesRemoved)
|
|
22
|
+
//
|
|
23
|
+
// More robust than `m.role === 'system' && m.meta?.kind === 'compaction'`
|
|
24
|
+
// at the call site because it returns a properly narrowed type.
|
|
25
|
+
export function isCompactionSummary(m) {
|
|
26
|
+
if (m.role !== 'system')
|
|
27
|
+
return false;
|
|
28
|
+
const meta = m.meta;
|
|
29
|
+
return meta?.kind === 'compaction';
|
|
30
|
+
}
|
|
17
31
|
const DEFAULT_TRIGGER = 150_000;
|
|
18
32
|
const DEFAULT_KEEP_LAST_TURNS = 4;
|
|
19
33
|
export function shouldCompact(history, prompt, config) {
|
|
@@ -81,11 +95,19 @@ export async function performCompaction(provider, history, config) {
|
|
|
81
95
|
outputTokens = ev.message.usage.outputTokens;
|
|
82
96
|
}
|
|
83
97
|
}
|
|
98
|
+
const trimmedSummary = summaryText.trim();
|
|
99
|
+
// Mark the synthesized system message with meta so consumers can detect it
|
|
100
|
+
// in result.messages without threading separate stream-event tracking
|
|
101
|
+
// through their persistence layer. Available since marco-harness 0.2.2.
|
|
84
102
|
const summaryMessage = {
|
|
85
103
|
role: 'system',
|
|
86
|
-
text: `Summary of earlier conversation:\n${
|
|
104
|
+
text: `Summary of earlier conversation:\n${trimmedSummary}`,
|
|
105
|
+
meta: {
|
|
106
|
+
kind: 'compaction',
|
|
107
|
+
messagesRemoved: prefix.length,
|
|
108
|
+
summaryUsage: { inputTokens, outputTokens },
|
|
109
|
+
},
|
|
87
110
|
};
|
|
88
|
-
const trimmedSummary = summaryText.trim();
|
|
89
111
|
return {
|
|
90
112
|
history: [summaryMessage, ...recent],
|
|
91
113
|
compacted: true,
|
package/dist/compaction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8DAA8D;AAC9D,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,uCAAuC;AACvC,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,oEAAoE;AACpE,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,2EAA2E;AAC3E,oDAAoD;
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { MarcoAgent, BudgetExceededError, type MarcoAgentOptions, type AskResult, type StreamEvent, type BudgetConfig } from './agent.js';
|
|
2
|
-
export { type CompactionConfig, type CompactionResult, shouldCompact, performCompaction } from './compaction.js';
|
|
2
|
+
export { type CompactionConfig, type CompactionResult, type CompactionSummaryMeta, shouldCompact, performCompaction, isCompactionSummary, } from './compaction.js';
|
|
3
3
|
export { currentTimeTool } from './tools/current-time.js';
|
|
4
4
|
export { toolFromZod, z, type ToolFromZodOptions } from './tool-from-zod.js';
|
|
5
5
|
export { defaultAnthropicPricing, emptyUsage, addUsage, withCost, type Usage, type CostUsage, type PricingFunction } from './usage.js';
|
|
6
6
|
export { fromMcpServer, type FromMcpServerOptions } from './mcp.js';
|
|
7
7
|
export { AnthropicProvider, OpenAICompatibleProvider, MockProvider } from 'marco-harness';
|
|
8
|
-
export type { Tool, Hooks, ModelProvider, ModelConfig, Message, AnthropicProviderOptions, OpenAICompatibleProviderOptions } from 'marco-harness';
|
|
8
|
+
export type { Tool, Hooks, ModelProvider, ModelConfig, Message, MessageMeta, AnthropicProviderOptions, OpenAICompatibleProviderOptions } from 'marco-harness';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AACzI,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AACzI,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AACtI,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACzF,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { MarcoAgent, BudgetExceededError } from './agent.js';
|
|
2
|
-
export { shouldCompact, performCompaction } from './compaction.js';
|
|
2
|
+
export { shouldCompact, performCompaction, isCompactionSummary, } from './compaction.js';
|
|
3
3
|
export { currentTimeTool } from './tools/current-time.js';
|
|
4
4
|
export { toolFromZod, z } from './tool-from-zod.js';
|
|
5
5
|
export { defaultAnthropicPricing, emptyUsage, addUsage, withCost } from './usage.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAA+E,MAAM,YAAY,CAAA;AACzI,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAA+E,MAAM,YAAY,CAAA;AACzI,OAAO,EAIL,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,CAAC,EAA2B,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAoD,MAAM,YAAY,CAAA;AACtI,OAAO,EAAE,aAAa,EAA6B,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "marco-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "A simple, extensible AI agent built on marco-harness.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"start": "tsx src/bin.ts"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"marco-harness": "^0.2.
|
|
30
|
+
"marco-harness": "^0.2.2",
|
|
31
31
|
"zod": "^3.25.76"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|