opencode-acp 1.0.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.
Files changed (137) hide show
  1. package/LICENSE +622 -0
  2. package/README.md +340 -0
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +8261 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/auth.d.ts +4 -0
  8. package/dist/lib/auth.d.ts.map +1 -0
  9. package/dist/lib/commands/compression-targets.d.ts +14 -0
  10. package/dist/lib/commands/compression-targets.d.ts.map +1 -0
  11. package/dist/lib/commands/context.d.ts +52 -0
  12. package/dist/lib/commands/context.d.ts.map +1 -0
  13. package/dist/lib/commands/decompress.d.ts +12 -0
  14. package/dist/lib/commands/decompress.d.ts.map +1 -0
  15. package/dist/lib/commands/help.d.ts +17 -0
  16. package/dist/lib/commands/help.d.ts.map +1 -0
  17. package/dist/lib/commands/index.d.ts +8 -0
  18. package/dist/lib/commands/index.d.ts.map +1 -0
  19. package/dist/lib/commands/manual.d.ts +23 -0
  20. package/dist/lib/commands/manual.d.ts.map +1 -0
  21. package/dist/lib/commands/recompress.d.ts +12 -0
  22. package/dist/lib/commands/recompress.d.ts.map +1 -0
  23. package/dist/lib/commands/stats.d.ts +15 -0
  24. package/dist/lib/commands/stats.d.ts.map +1 -0
  25. package/dist/lib/commands/sweep.d.ts +23 -0
  26. package/dist/lib/commands/sweep.d.ts.map +1 -0
  27. package/dist/lib/compress/index.d.ts +4 -0
  28. package/dist/lib/compress/index.d.ts.map +1 -0
  29. package/dist/lib/compress/message-utils.d.ts +8 -0
  30. package/dist/lib/compress/message-utils.d.ts.map +1 -0
  31. package/dist/lib/compress/message.d.ts +4 -0
  32. package/dist/lib/compress/message.d.ts.map +1 -0
  33. package/dist/lib/compress/pipeline.d.ts +29 -0
  34. package/dist/lib/compress/pipeline.d.ts.map +1 -0
  35. package/dist/lib/compress/protected-content.d.ts +7 -0
  36. package/dist/lib/compress/protected-content.d.ts.map +1 -0
  37. package/dist/lib/compress/range-utils.d.ts +10 -0
  38. package/dist/lib/compress/range-utils.d.ts.map +1 -0
  39. package/dist/lib/compress/range.d.ts +4 -0
  40. package/dist/lib/compress/range.d.ts.map +1 -0
  41. package/dist/lib/compress/search.d.ts +11 -0
  42. package/dist/lib/compress/search.d.ts.map +1 -0
  43. package/dist/lib/compress/state.d.ts +10 -0
  44. package/dist/lib/compress/state.d.ts.map +1 -0
  45. package/dist/lib/compress/timing.d.ts +18 -0
  46. package/dist/lib/compress/timing.d.ts.map +1 -0
  47. package/dist/lib/compress/types.d.ts +94 -0
  48. package/dist/lib/compress/types.d.ts.map +1 -0
  49. package/dist/lib/compress-permission.d.ts +6 -0
  50. package/dist/lib/compress-permission.d.ts.map +1 -0
  51. package/dist/lib/config.d.ts +80 -0
  52. package/dist/lib/config.d.ts.map +1 -0
  53. package/dist/lib/gc/truncate.d.ts +15 -0
  54. package/dist/lib/gc/truncate.d.ts.map +1 -0
  55. package/dist/lib/hooks.d.ts +38 -0
  56. package/dist/lib/hooks.d.ts.map +1 -0
  57. package/dist/lib/host-permissions.d.ts +11 -0
  58. package/dist/lib/host-permissions.d.ts.map +1 -0
  59. package/dist/lib/logger.d.ts +31 -0
  60. package/dist/lib/logger.d.ts.map +1 -0
  61. package/dist/lib/message-ids.d.ts +19 -0
  62. package/dist/lib/message-ids.d.ts.map +1 -0
  63. package/dist/lib/messages/index.d.ts +10 -0
  64. package/dist/lib/messages/index.d.ts.map +1 -0
  65. package/dist/lib/messages/inject/inject.d.ts +8 -0
  66. package/dist/lib/messages/inject/inject.d.ts.map +1 -0
  67. package/dist/lib/messages/inject/subagent-results.d.ts +4 -0
  68. package/dist/lib/messages/inject/subagent-results.d.ts.map +1 -0
  69. package/dist/lib/messages/inject/utils.d.ts +33 -0
  70. package/dist/lib/messages/inject/utils.d.ts.map +1 -0
  71. package/dist/lib/messages/priority.d.ts +13 -0
  72. package/dist/lib/messages/priority.d.ts.map +1 -0
  73. package/dist/lib/messages/prune.d.ts +5 -0
  74. package/dist/lib/messages/prune.d.ts.map +1 -0
  75. package/dist/lib/messages/query.d.ts +7 -0
  76. package/dist/lib/messages/query.d.ts.map +1 -0
  77. package/dist/lib/messages/reasoning-strip.d.ts +8 -0
  78. package/dist/lib/messages/reasoning-strip.d.ts.map +1 -0
  79. package/dist/lib/messages/shape.d.ts +5 -0
  80. package/dist/lib/messages/shape.d.ts.map +1 -0
  81. package/dist/lib/messages/sync.d.ts +4 -0
  82. package/dist/lib/messages/sync.d.ts.map +1 -0
  83. package/dist/lib/messages/utils.d.ts +28 -0
  84. package/dist/lib/messages/utils.d.ts.map +1 -0
  85. package/dist/lib/prompts/compress-message.d.ts +2 -0
  86. package/dist/lib/prompts/compress-message.d.ts.map +1 -0
  87. package/dist/lib/prompts/compress-range.d.ts +2 -0
  88. package/dist/lib/prompts/compress-range.d.ts.map +1 -0
  89. package/dist/lib/prompts/context-limit-nudge.d.ts +2 -0
  90. package/dist/lib/prompts/context-limit-nudge.d.ts.map +1 -0
  91. package/dist/lib/prompts/extensions/nudge.d.ts +10 -0
  92. package/dist/lib/prompts/extensions/nudge.d.ts.map +1 -0
  93. package/dist/lib/prompts/extensions/system.d.ts +4 -0
  94. package/dist/lib/prompts/extensions/system.d.ts.map +1 -0
  95. package/dist/lib/prompts/extensions/tool.d.ts +3 -0
  96. package/dist/lib/prompts/extensions/tool.d.ts.map +1 -0
  97. package/dist/lib/prompts/index.d.ts +4 -0
  98. package/dist/lib/prompts/index.d.ts.map +1 -0
  99. package/dist/lib/prompts/iteration-nudge.d.ts +2 -0
  100. package/dist/lib/prompts/iteration-nudge.d.ts.map +1 -0
  101. package/dist/lib/prompts/store.d.ts +25 -0
  102. package/dist/lib/prompts/store.d.ts.map +1 -0
  103. package/dist/lib/prompts/system.d.ts +2 -0
  104. package/dist/lib/prompts/system.d.ts.map +1 -0
  105. package/dist/lib/prompts/turn-nudge.d.ts +2 -0
  106. package/dist/lib/prompts/turn-nudge.d.ts.map +1 -0
  107. package/dist/lib/protected-patterns.d.ts +5 -0
  108. package/dist/lib/protected-patterns.d.ts.map +1 -0
  109. package/dist/lib/state/index.d.ts +5 -0
  110. package/dist/lib/state/index.d.ts.map +1 -0
  111. package/dist/lib/state/persistence.d.ts +49 -0
  112. package/dist/lib/state/persistence.d.ts.map +1 -0
  113. package/dist/lib/state/state.d.ts +7 -0
  114. package/dist/lib/state/state.d.ts.map +1 -0
  115. package/dist/lib/state/tool-cache.d.ts +13 -0
  116. package/dist/lib/state/tool-cache.d.ts.map +1 -0
  117. package/dist/lib/state/types.d.ts +102 -0
  118. package/dist/lib/state/types.d.ts.map +1 -0
  119. package/dist/lib/state/utils.d.ts +22 -0
  120. package/dist/lib/state/utils.d.ts.map +1 -0
  121. package/dist/lib/strategies/deduplication.d.ts +10 -0
  122. package/dist/lib/strategies/deduplication.d.ts.map +1 -0
  123. package/dist/lib/strategies/index.d.ts +3 -0
  124. package/dist/lib/strategies/index.d.ts.map +1 -0
  125. package/dist/lib/strategies/purge-errors.d.ts +13 -0
  126. package/dist/lib/strategies/purge-errors.d.ts.map +1 -0
  127. package/dist/lib/subagents/subagent-results.d.ts +5 -0
  128. package/dist/lib/subagents/subagent-results.d.ts.map +1 -0
  129. package/dist/lib/token-utils.d.ts +19 -0
  130. package/dist/lib/token-utils.d.ts.map +1 -0
  131. package/dist/lib/ui/notification.d.ts +17 -0
  132. package/dist/lib/ui/notification.d.ts.map +1 -0
  133. package/dist/lib/ui/utils.d.ts +10 -0
  134. package/dist/lib/ui/utils.d.ts.map +1 -0
  135. package/dist/lib/update.d.ts +22 -0
  136. package/dist/lib/update.d.ts.map +1 -0
  137. package/package.json +75 -0
@@ -0,0 +1,102 @@
1
+ import type { CompressionTimingState } from "../compress/timing";
2
+ import { Message, Part } from "@opencode-ai/sdk/v2";
3
+ export interface WithParts {
4
+ info: Message;
5
+ parts: Part[];
6
+ }
7
+ export type ToolStatus = "pending" | "running" | "completed" | "error";
8
+ export interface ToolParameterEntry {
9
+ tool: string;
10
+ parameters: any;
11
+ status?: ToolStatus;
12
+ error?: string;
13
+ turn: number;
14
+ tokenCount?: number;
15
+ }
16
+ export interface SessionStats {
17
+ pruneTokenCounter: number;
18
+ totalPruneTokens: number;
19
+ }
20
+ export interface PrunedMessageEntry {
21
+ tokenCount: number;
22
+ allBlockIds: number[];
23
+ activeBlockIds: number[];
24
+ }
25
+ export type CompressionMode = "range" | "message";
26
+ export type BlockGeneration = "young" | "old";
27
+ export interface CompressionBlock {
28
+ blockId: number;
29
+ runId: number;
30
+ active: boolean;
31
+ deactivatedByUser: boolean;
32
+ compressedTokens: number;
33
+ summaryTokens: number;
34
+ durationMs: number;
35
+ mode?: CompressionMode;
36
+ topic: string;
37
+ batchTopic?: string;
38
+ startId: string;
39
+ endId: string;
40
+ anchorMessageId: string;
41
+ compressMessageId: string;
42
+ compressCallId?: string;
43
+ includedBlockIds: number[];
44
+ consumedBlockIds: number[];
45
+ parentBlockIds: number[];
46
+ directMessageIds: string[];
47
+ directToolIds: string[];
48
+ effectiveMessageIds: string[];
49
+ effectiveToolIds: string[];
50
+ createdAt: number;
51
+ deactivatedAt?: number;
52
+ deactivatedByBlockId?: number;
53
+ summary: string;
54
+ survivedCount: number;
55
+ generation?: BlockGeneration;
56
+ }
57
+ export interface PruneMessagesState {
58
+ byMessageId: Map<string, PrunedMessageEntry>;
59
+ blocksById: Map<number, CompressionBlock>;
60
+ activeBlockIds: Set<number>;
61
+ activeByAnchorMessageId: Map<string, number>;
62
+ nextBlockId: number;
63
+ nextRunId: number;
64
+ }
65
+ export interface Prune {
66
+ tools: Map<string, number>;
67
+ messages: PruneMessagesState;
68
+ }
69
+ export interface PendingManualTrigger {
70
+ sessionId: string;
71
+ prompt: string;
72
+ }
73
+ export interface MessageIdState {
74
+ byRawId: Map<string, string>;
75
+ byRef: Map<string, string>;
76
+ nextRef: number;
77
+ }
78
+ export interface Nudges {
79
+ contextLimitAnchors: Set<string>;
80
+ turnNudgeAnchors: Set<string>;
81
+ iterationNudgeAnchors: Set<string>;
82
+ }
83
+ export interface SessionState {
84
+ sessionId: string | null;
85
+ isSubAgent: boolean;
86
+ manualMode: false | "active" | "compress-pending";
87
+ compressPermission: "ask" | "allow" | "deny" | undefined;
88
+ pendingManualTrigger: PendingManualTrigger | null;
89
+ prune: Prune;
90
+ nudges: Nudges;
91
+ stats: SessionStats;
92
+ compressionTiming: CompressionTimingState;
93
+ toolParameters: Map<string, ToolParameterEntry>;
94
+ subAgentResultCache: Map<string, string>;
95
+ toolIdList: string[];
96
+ messageIds: MessageIdState;
97
+ lastCompaction: number;
98
+ currentTurn: number;
99
+ modelContextLimit: number | undefined;
100
+ systemPromptTokens: number | undefined;
101
+ }
102
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/state/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { CompressionBlock, PruneMessagesState, PrunedMessageEntry, SessionState, WithParts } from "./types";
2
+ export declare const isMessageCompacted: (state: SessionState, msg: WithParts) => boolean;
3
+ interface PersistedPruneMessagesState {
4
+ byMessageId: Record<string, PrunedMessageEntry>;
5
+ blocksById: Record<string, CompressionBlock>;
6
+ activeBlockIds: number[];
7
+ activeByAnchorMessageId: Record<string, number>;
8
+ nextBlockId: number;
9
+ nextRunId: number;
10
+ }
11
+ export declare function serializePruneMessagesState(messagesState: PruneMessagesState): PersistedPruneMessagesState;
12
+ export declare function isSubAgentSession(client: any, sessionID: string): Promise<boolean>;
13
+ export declare function findLastCompactionTimestamp(messages: WithParts[]): number;
14
+ export declare function countTurns(state: SessionState, messages: WithParts[]): number;
15
+ export declare function loadPruneMap(obj?: Record<string, number>): Map<string, number>;
16
+ export declare function createPruneMessagesState(): PruneMessagesState;
17
+ export declare function loadPruneMessagesState(persisted?: PersistedPruneMessagesState): PruneMessagesState;
18
+ export declare function collectTurnNudgeAnchors(messages: WithParts[]): Set<string>;
19
+ export declare function getActiveSummaryTokenUsage(state: SessionState): number;
20
+ export declare function resetOnCompaction(state: SessionState): void;
21
+ export {};
22
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACZ,MAAM,SAAS,CAAA;AAMhB,eAAO,MAAM,kBAAkB,GAAI,OAAO,YAAY,EAAE,KAAK,SAAS,KAAG,OAiBxE,CAAA;AAED,UAAU,2BAA2B;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC/C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC5C,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,2BAA2B,CACvC,aAAa,EAAE,kBAAkB,GAClC,2BAA2B,CAc7B;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAWzE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAiB7E;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAU9E;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAS7D;AAED,wBAAgB,sBAAsB,CAClC,SAAS,CAAC,EAAE,2BAA2B,GACxC,kBAAkB,CA4KpB;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CA0B1E;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAUtE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAW3D"}
@@ -0,0 +1,10 @@
1
+ import { PluginConfig } from "../config";
2
+ import { Logger } from "../logger";
3
+ import type { SessionState, WithParts } from "../state";
4
+ /**
5
+ * Deduplication strategy - prunes older tool calls that have identical
6
+ * tool name and parameters, keeping only the most recent occurrence.
7
+ * Modifies the session state in place to add pruned tool call IDs.
8
+ */
9
+ export declare const deduplicate: (state: SessionState, logger: Logger, config: PluginConfig, messages: WithParts[]) => void;
10
+ //# sourceMappingURL=deduplication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deduplication.d.ts","sourceRoot":"","sources":["../../../lib/strategies/deduplication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAQvD;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACpB,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,QAAQ,YAAY,EACpB,UAAU,SAAS,EAAE,KACtB,IAyEF,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { deduplicate } from "./deduplication";
2
+ export { purgeErrors } from "./purge-errors";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/strategies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { PluginConfig } from "../config";
2
+ import { Logger } from "../logger";
3
+ import type { SessionState, WithParts } from "../state";
4
+ /**
5
+ * Purge Errors strategy - prunes tool inputs for tools that errored
6
+ * after they are older than a configurable number of turns.
7
+ * The error message is preserved, but the (potentially large) inputs
8
+ * are removed to save context.
9
+ *
10
+ * Modifies the session state in place to add pruned tool call IDs.
11
+ */
12
+ export declare const purgeErrors: (state: SessionState, logger: Logger, config: PluginConfig, messages: WithParts[]) => void;
13
+ //# sourceMappingURL=purge-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-errors.d.ts","sourceRoot":"","sources":["../../../lib/strategies/purge-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAQvD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACpB,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,QAAQ,YAAY,EACpB,UAAU,SAAS,EAAE,KACtB,IAgEF,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { WithParts } from "../state";
2
+ export declare function getSubAgentId(part: any): string | null;
3
+ export declare function buildSubagentResultText(messages: WithParts[]): string;
4
+ export declare function mergeSubagentResult(output: string, subAgentResultText: string): string;
5
+ //# sourceMappingURL=subagent-results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-results.d.ts","sourceRoot":"","sources":["../../../lib/subagents/subagent-results.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAQtD;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAoBrE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAUtF"}
@@ -0,0 +1,19 @@
1
+ import { SessionState, WithParts } from "./state";
2
+ import { Logger } from "./logger";
3
+ export declare function getCurrentTokenUsage(state: SessionState, messages: WithParts[]): number;
4
+ export declare function getCurrentParams(state: SessionState, messages: WithParts[], logger: Logger): {
5
+ providerId: string | undefined;
6
+ modelId: string | undefined;
7
+ agent: string | undefined;
8
+ variant: string | undefined;
9
+ };
10
+ export declare function countTokens(text: string): number;
11
+ export declare function estimateTokensBatch(texts: string[]): number;
12
+ export declare const COMPACTED_TOOL_OUTPUT_PLACEHOLDER = "[Old tool result content cleared]";
13
+ export declare function extractCompletedToolOutput(part: any): string | undefined;
14
+ export declare function extractToolContent(part: any): string[];
15
+ export declare function countToolTokens(part: any): number;
16
+ export declare function getTotalToolTokens(state: SessionState, toolIds: string[]): number;
17
+ export declare function countMessageTextTokens(msg: WithParts): number;
18
+ export declare function countAllMessageTokens(msg: WithParts): number;
19
+ //# sourceMappingURL=token-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-utils.d.ts","sourceRoot":"","sources":["../../lib/token-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAMjC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CA6CvF;AAED,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE,MAAM,GACf;IACC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B,CAkBA;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAG3D;AAED,eAAO,MAAM,iCAAiC,sCAAsC,CAAA;AAMpF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAcxE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,EAAE,CAmBtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAGjD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAOjF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAU7D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAY5D"}
@@ -0,0 +1,17 @@
1
+ import type { Logger } from "../logger";
2
+ import type { SessionState } from "../state";
3
+ import { ToolParameterEntry } from "../state";
4
+ import { PluginConfig } from "../config";
5
+ export type PruneReason = "completion" | "noise" | "extraction";
6
+ export declare const PRUNE_REASON_LABELS: Record<PruneReason, string>;
7
+ interface CompressionNotificationEntry {
8
+ blockId: number;
9
+ runId: number;
10
+ summary: string;
11
+ summaryTokens: number;
12
+ }
13
+ export declare function sendUnifiedNotification(client: any, logger: Logger, config: PluginConfig, state: SessionState, sessionId: string, pruneToolIds: string[], toolMetadata: Map<string, ToolParameterEntry>, reason: PruneReason | undefined, params: any, workingDirectory: string): Promise<boolean>;
14
+ export declare function sendCompressNotification(client: any, logger: Logger, config: PluginConfig, state: SessionState, sessionId: string, entries: CompressionNotificationEntry[], batchTopic: string | undefined, sessionMessageIds: string[], params: any): Promise<boolean>;
15
+ export declare function sendIgnoredMessage(client: any, sessionID: string, text: string, params: any, logger: Logger): Promise<void>;
16
+ export {};
17
+ //# sourceMappingURL=notification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAO5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,CAAA;AAC/D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAI3D,CAAA;AAED,UAAU,4BAA4B;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;CACxB;AAoED,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,MAAM,EAAE,GAAG,EACX,gBAAgB,EAAE,MAAM,GACzB,OAAO,CAAC,OAAO,CAAC,CAiClB;AAyCD,wBAAsB,wBAAwB,CAC1C,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,4BAA4B,EAAE,EACvC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,iBAAiB,EAAE,MAAM,EAAE,EAC3B,MAAM,EAAE,GAAG,GACZ,OAAO,CAAC,OAAO,CAAC,CAgIlB;AAED,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiCf"}
@@ -0,0 +1,10 @@
1
+ import { SessionState, ToolParameterEntry, WithParts } from "../state";
2
+ export declare function formatStatsHeader(totalTokensSaved: number, pruneTokenCounter: number): string;
3
+ export declare function formatTokenCount(tokens: number, compact?: boolean): string;
4
+ export declare function truncate(str: string, maxLen?: number): string;
5
+ export declare function formatProgressBar(messageIds: string[], prunedMessages: Map<string, number>, recentMessageIds: string[], width?: number): string;
6
+ export declare function cacheSystemPromptTokens(state: SessionState, messages: WithParts[]): void;
7
+ export declare function shortenPath(input: string, workingDirectory?: string): string;
8
+ export declare function formatPrunedItemsList(pruneToolIds: string[], toolMetadata: Map<string, ToolParameterEntry>, workingDirectory?: string): string[];
9
+ export declare function formatPruningResultForTool(prunedIds: string[], toolMetadata: Map<string, ToolParameterEntry>, workingDirectory?: string): string;
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/ui/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA2ItE,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAM1E;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAGjE;AAED,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,KAAK,GAAE,MAAW,GACnB,MAAM,CA4BR;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAqCxF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5E;AAeD,wBAAgB,qBAAqB,CACjC,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,gBAAgB,CAAC,EAAE,MAAM,GAC1B,MAAM,EAAE,CA0BV;AAED,wBAAgB,0BAA0B,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,gBAAgB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAWR"}
@@ -0,0 +1,22 @@
1
+ import type { PluginInput } from "@opencode-ai/plugin";
2
+ type UpdateResult = {
3
+ updated: true;
4
+ name: string;
5
+ current: string;
6
+ latest: string;
7
+ } | {
8
+ updated: false;
9
+ error: "remove_failed";
10
+ name: string;
11
+ current: string;
12
+ latest: string;
13
+ } | {
14
+ updated: false;
15
+ };
16
+ export declare function startAutoUpdate(ctx: PluginInput, enabled: boolean): void;
17
+ export declare function checkAutoUpdate(signal: AbortSignal): Promise<UpdateResult>;
18
+ export declare function updateRemoveDir(packageDir: string, name: string): Promise<string | undefined>;
19
+ export declare function isAutoUpdatableSpec(spec: string): boolean;
20
+ export declare function isVersionNewer(latest: string, current: string): boolean;
21
+ export {};
22
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../lib/update.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAQtD,KAAK,YAAY,GACX;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzF;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAAA;AAIxB,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBxE;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CA0BhF;AAcD,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,+BAarE;AAgBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,WAQ/C;AA6BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WA4B7D"}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "opencode-acp",
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "description": "Active Context Pruning — model-driven context management for OpenCode (hardened fork of DCP with 34 bug fixes)",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./server": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ }
18
+ },
19
+ "scripts": {
20
+ "clean": "rm -rf dist",
21
+ "build": "npm run clean && tsup && tsc --emitDeclarationOnly",
22
+ "verify:package": "node scripts/verify-package.mjs",
23
+ "check:package": "npm run build && npm run verify:package",
24
+ "prepublishOnly": "npm run check:package",
25
+ "dev": "opencode plugin dev",
26
+ "typecheck": "tsc --noEmit",
27
+ "test": "node --import tsx --test tests/*.test.ts",
28
+ "format": "prettier --write .",
29
+ "format:check": "prettier --check .",
30
+ "dcp": "tsx scripts/print.ts"
31
+ },
32
+ "keywords": [
33
+ "opencode",
34
+ "opencode-plugin",
35
+ "plugin",
36
+ "context",
37
+ "pruning",
38
+ "active-context",
39
+ "optimization",
40
+ "tokens",
41
+ "acp"
42
+ ],
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/ranxianglei/opencode-acp.git"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/ranxianglei/opencode-acp/issues"
49
+ },
50
+ "homepage": "https://github.com/ranxianglei/opencode-acp#readme",
51
+ "author": "ranxianglei",
52
+ "license": "AGPL-3.0-or-later",
53
+ "peerDependencies": {
54
+ "@opencode-ai/plugin": ">=1.4.3"
55
+ },
56
+ "dependencies": {
57
+ "@anthropic-ai/tokenizer": "^0.0.4",
58
+ "@opencode-ai/sdk": "^1.4.3",
59
+ "jsonc-parser": "^3.3.1",
60
+ "zod": "^4.3.6"
61
+ },
62
+ "devDependencies": {
63
+ "@opencode-ai/plugin": "^1.4.3",
64
+ "@types/node": "^25.5.0",
65
+ "prettier": "^3.8.1",
66
+ "tsup": "^8.5.1",
67
+ "tsx": "^4.21.0",
68
+ "typescript": "^6.0.2"
69
+ },
70
+ "files": [
71
+ "dist/",
72
+ "README.md",
73
+ "LICENSE"
74
+ ]
75
+ }