@nghyane/arcane 0.1.29 → 0.1.30

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 (50) hide show
  1. package/package.json +4 -4
  2. package/src/cli/config-cli.ts +1 -1
  3. package/src/config/settings-schema.ts +19 -27
  4. package/src/config/settings.ts +3 -4
  5. package/src/extensibility/custom-tools/types.ts +0 -12
  6. package/src/extensibility/extensions/index.ts +0 -5
  7. package/src/extensibility/extensions/runner.ts +6 -26
  8. package/src/extensibility/extensions/types.ts +1 -77
  9. package/src/extensibility/hooks/runner.ts +5 -24
  10. package/src/extensibility/hooks/types.ts +1 -77
  11. package/src/index.ts +2 -13
  12. package/src/modes/components/footer.ts +4 -11
  13. package/src/modes/components/index.ts +0 -1
  14. package/src/modes/components/status-line/segments.ts +1 -2
  15. package/src/modes/components/status-line/types.ts +0 -1
  16. package/src/modes/components/status-line.ts +0 -6
  17. package/src/modes/components/tree-selector.ts +0 -8
  18. package/src/modes/controllers/command-controller.ts +2 -98
  19. package/src/modes/controllers/event-controller.ts +46 -52
  20. package/src/modes/controllers/extension-ui-controller.ts +0 -42
  21. package/src/modes/controllers/input-controller.ts +0 -23
  22. package/src/modes/controllers/selector-controller.ts +0 -5
  23. package/src/modes/interactive-mode.ts +3 -24
  24. package/src/modes/print-mode.ts +0 -16
  25. package/src/modes/rpc/rpc-client.ts +0 -16
  26. package/src/modes/rpc/rpc-mode.ts +0 -32
  27. package/src/modes/rpc/rpc-types.ts +0 -9
  28. package/src/modes/types.ts +1 -13
  29. package/src/modes/utils/ui-helpers.ts +2 -118
  30. package/src/sdk.ts +0 -15
  31. package/src/session/agent-session.ts +89 -650
  32. package/src/session/compaction/branch-summarization.ts +5 -13
  33. package/src/session/compaction/index.ts +0 -1
  34. package/src/session/compaction/utils.ts +94 -2
  35. package/src/session/messages.ts +0 -37
  36. package/src/session/retry-utils.ts +1 -1
  37. package/src/session/session-manager.ts +8 -108
  38. package/src/session/session-types.ts +4 -25
  39. package/src/session/stats.ts +2 -39
  40. package/src/slash-commands/builtin-registry.ts +0 -11
  41. package/src/task/executor.ts +0 -8
  42. package/examples/hooks/custom-compaction.ts +0 -116
  43. package/src/modes/components/compaction-summary-message.ts +0 -59
  44. package/src/prompts/compaction/compaction-short-summary.md +0 -9
  45. package/src/prompts/compaction/compaction-summary-context.md +0 -5
  46. package/src/prompts/compaction/compaction-summary.md +0 -41
  47. package/src/prompts/compaction/compaction-turn-prefix.md +0 -17
  48. package/src/prompts/compaction/compaction-update-summary.md +0 -45
  49. package/src/session/compaction/compaction.ts +0 -864
  50. package/src/session/compaction/pruning.ts +0 -91
@@ -1,91 +0,0 @@
1
- /**
2
- * Tool output pruning utilities for compaction.
3
- */
4
- import type { AgentMessage } from "@nghyane/arcane-agent";
5
- import type { ToolResultMessage } from "@nghyane/arcane-ai";
6
- import type { SessionEntry, SessionMessageEntry } from "../session-manager";
7
- import { estimateTokens } from "./compaction";
8
-
9
- export interface PruneConfig {
10
- /** Keep the most recent tool output tokens intact. */
11
- protectTokens: number;
12
- /** Only prune if total savings meets this threshold. */
13
- minimumSavings: number;
14
- /** Tool names that should never be pruned. */
15
- protectedTools: string[];
16
- }
17
-
18
- export const DEFAULT_PRUNE_CONFIG: PruneConfig = {
19
- protectTokens: 40_000,
20
- minimumSavings: 20_000,
21
- protectedTools: ["skill", "read"],
22
- };
23
-
24
- export interface PruneResult {
25
- prunedCount: number;
26
- tokensSaved: number;
27
- }
28
-
29
- function createPrunedNotice(tokens: number): string {
30
- return `[Output truncated - ${tokens} tokens]`;
31
- }
32
-
33
- function getToolResultMessage(entry: SessionEntry): ToolResultMessage | undefined {
34
- if (entry.type !== "message") return undefined;
35
- const message = entry.message as AgentMessage;
36
- if (message.role !== "toolResult") return undefined;
37
- return message as ToolResultMessage;
38
- }
39
-
40
- function estimatePrunedSavings(tokens: number): number {
41
- const noticeTokens = Math.ceil(createPrunedNotice(tokens).length / 4);
42
- return Math.max(0, tokens - noticeTokens);
43
- }
44
-
45
- export function pruneToolOutputs(entries: SessionEntry[], config: PruneConfig = DEFAULT_PRUNE_CONFIG): PruneResult {
46
- let accumulatedTokens = 0;
47
- let tokensSaved = 0;
48
- let prunedCount = 0;
49
-
50
- const candidates: Array<{ entry: SessionMessageEntry; tokens: number }> = [];
51
-
52
- for (let i = entries.length - 1; i >= 0; i--) {
53
- const entry = entries[i];
54
- const message = getToolResultMessage(entry);
55
- if (!message) continue;
56
-
57
- const tokens = estimateTokens(message as AgentMessage);
58
- const isProtected = config.protectedTools.includes(message.toolName);
59
-
60
- if (message.prunedAt !== undefined) {
61
- accumulatedTokens += tokens;
62
- continue;
63
- }
64
-
65
- if (accumulatedTokens < config.protectTokens || isProtected) {
66
- accumulatedTokens += tokens;
67
- continue;
68
- }
69
-
70
- candidates.push({ entry: entry as SessionMessageEntry, tokens });
71
- accumulatedTokens += tokens;
72
- }
73
-
74
- for (const candidate of candidates) {
75
- tokensSaved += estimatePrunedSavings(candidate.tokens);
76
- }
77
-
78
- if (tokensSaved < config.minimumSavings || candidates.length === 0) {
79
- return { prunedCount: 0, tokensSaved: 0 };
80
- }
81
-
82
- const prunedAt = Date.now();
83
- for (const candidate of candidates) {
84
- const message = candidate.entry.message as ToolResultMessage;
85
- message.content = [{ type: "text", text: createPrunedNotice(candidate.tokens) }];
86
- message.prunedAt = prunedAt;
87
- prunedCount++;
88
- }
89
-
90
- return { prunedCount, tokensSaved };
91
- }