@dyyz1993/pi-coding-agent 0.74.24 → 0.74.25

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 (145) hide show
  1. package/dist/core/agent-session.d.ts.map +1 -1
  2. package/dist/core/agent-session.js +3 -0
  3. package/dist/core/agent-session.js.map +1 -1
  4. package/dist/extensions/agent-permissions/index.ts +235 -0
  5. package/dist/extensions/ask-tools/index.ts +115 -0
  6. package/dist/extensions/auto-memory/contract.d.ts +51 -0
  7. package/dist/extensions/auto-memory/contract.d.ts.map +1 -0
  8. package/dist/extensions/auto-memory/contract.js +2 -0
  9. package/dist/extensions/auto-memory/contract.js.map +1 -0
  10. package/dist/extensions/auto-memory/contract.ts +56 -0
  11. package/dist/extensions/auto-memory/index.ts +969 -0
  12. package/dist/extensions/auto-memory/prompts.ts +202 -0
  13. package/dist/extensions/auto-memory/skip-rules.ts +297 -0
  14. package/dist/extensions/auto-memory/utils.ts +208 -0
  15. package/dist/extensions/auto-session-title/index.ts +83 -0
  16. package/dist/extensions/bash-ext/contract.d.ts +79 -0
  17. package/dist/extensions/bash-ext/contract.d.ts.map +1 -0
  18. package/dist/extensions/bash-ext/contract.js +2 -0
  19. package/dist/extensions/bash-ext/contract.js.map +1 -0
  20. package/dist/extensions/bash-ext/contract.ts +69 -0
  21. package/dist/extensions/bash-ext/index.ts +858 -0
  22. package/dist/extensions/claude-hooks-compat/config-loader.ts +49 -0
  23. package/dist/extensions/claude-hooks-compat/handler-runner.ts +377 -0
  24. package/dist/extensions/claude-hooks-compat/if-parser.ts +53 -0
  25. package/dist/extensions/claude-hooks-compat/index.ts +178 -0
  26. package/dist/extensions/claude-hooks-compat/matcher.ts +17 -0
  27. package/dist/extensions/claude-hooks-compat/stdin-builder.ts +27 -0
  28. package/dist/extensions/claude-hooks-compat/types.ts +77 -0
  29. package/dist/extensions/compaction-manager/config.ts +47 -0
  30. package/dist/extensions/compaction-manager/context-fold.ts +63 -0
  31. package/dist/extensions/compaction-manager/index.ts +151 -0
  32. package/dist/extensions/compaction-manager/microcompact.ts +49 -0
  33. package/dist/extensions/compaction-manager/reactive.ts +9 -0
  34. package/dist/extensions/compaction-manager/session-memory.ts +48 -0
  35. package/dist/extensions/coordinator/INTEGRATION.md +376 -0
  36. package/dist/extensions/coordinator/handler.test.ts +277 -0
  37. package/dist/extensions/coordinator/handler.ts +189 -0
  38. package/dist/extensions/coordinator/index.ts +261 -0
  39. package/dist/extensions/coordinator/types.d.ts +100 -0
  40. package/dist/extensions/coordinator/types.d.ts.map +1 -0
  41. package/dist/extensions/coordinator/types.js +2 -0
  42. package/dist/extensions/coordinator/types.js.map +1 -0
  43. package/dist/extensions/coordinator/types.ts +72 -0
  44. package/dist/extensions/file-snapshot/index.ts +131 -0
  45. package/dist/extensions/file-time-guard/README.md +133 -0
  46. package/dist/extensions/file-time-guard/config.ts +13 -0
  47. package/dist/extensions/file-time-guard/index.ts +171 -0
  48. package/dist/extensions/hooks-engine/index.ts +117 -0
  49. package/dist/extensions/lsp/lsp/client/file-tracker.ts +70 -0
  50. package/dist/extensions/lsp/lsp/client/registry.ts +305 -0
  51. package/dist/extensions/lsp/lsp/client/runtime.ts +832 -0
  52. package/dist/extensions/lsp/lsp/config/resolver.ts +573 -0
  53. package/dist/extensions/lsp/lsp/contract.d.ts +101 -0
  54. package/dist/extensions/lsp/lsp/contract.d.ts.map +1 -0
  55. package/dist/extensions/lsp/lsp/contract.js +2 -0
  56. package/dist/extensions/lsp/lsp/contract.js.map +1 -0
  57. package/dist/extensions/lsp/lsp/contract.ts +103 -0
  58. package/dist/extensions/lsp/lsp/hooks/agent-end.ts +169 -0
  59. package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.d.ts +10 -0
  60. package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.d.ts.map +1 -0
  61. package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.js +30 -0
  62. package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.js.map +1 -0
  63. package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.ts +41 -0
  64. package/dist/extensions/lsp/lsp/hooks/writethrough.ts +342 -0
  65. package/dist/extensions/lsp/lsp/index.ts +307 -0
  66. package/dist/extensions/lsp/lsp/lsp.test.ts +684 -0
  67. package/dist/extensions/lsp/lsp/monitoring/server-metrics.ts +176 -0
  68. package/dist/extensions/lsp/lsp/tools/lsp-tool.ts +402 -0
  69. package/dist/extensions/lsp/lsp/utils/dependency-resolver.ts +147 -0
  70. package/dist/extensions/lsp/lsp/utils/diagnostics-wait.ts +41 -0
  71. package/dist/extensions/lsp/lsp/utils/lsp-helpers.d.ts +20 -0
  72. package/dist/extensions/lsp/lsp/utils/lsp-helpers.d.ts.map +1 -0
  73. package/dist/extensions/lsp/lsp/utils/lsp-helpers.js +64 -0
  74. package/dist/extensions/lsp/lsp/utils/lsp-helpers.js.map +1 -0
  75. package/dist/extensions/lsp/lsp/utils/lsp-helpers.ts +76 -0
  76. package/dist/extensions/message-bridge/GUIDE.md +210 -0
  77. package/dist/extensions/message-bridge/index.ts +222 -0
  78. package/dist/extensions/output-guard/index.ts +384 -0
  79. package/dist/extensions/preview/index.ts +278 -0
  80. package/dist/extensions/rules-engine/MATCH_HISTORY_RECONCILIATION.md +111 -0
  81. package/dist/extensions/rules-engine/RULES-ENGINE-GUIDE.md +470 -0
  82. package/dist/extensions/rules-engine/cache.js +232 -0
  83. package/dist/extensions/rules-engine/cache.ts +38 -0
  84. package/dist/extensions/rules-engine/config.js +63 -0
  85. package/dist/extensions/rules-engine/config.ts +70 -0
  86. package/dist/extensions/rules-engine/index.js +1530 -0
  87. package/dist/extensions/rules-engine/index.ts +552 -0
  88. package/dist/extensions/rules-engine/injector.js +68 -0
  89. package/dist/extensions/rules-engine/injector.ts +74 -0
  90. package/dist/extensions/rules-engine/loader.js +179 -0
  91. package/dist/extensions/rules-engine/loader.ts +205 -0
  92. package/dist/extensions/rules-engine/matcher.js +534 -0
  93. package/dist/extensions/rules-engine/matcher.ts +52 -0
  94. package/dist/extensions/rules-engine/types.d.ts +156 -0
  95. package/dist/extensions/rules-engine/types.d.ts.map +1 -0
  96. package/dist/extensions/rules-engine/types.js +2 -0
  97. package/dist/extensions/rules-engine/types.js.map +1 -0
  98. package/dist/extensions/rules-engine/types.ts +169 -0
  99. package/dist/extensions/session-supervisor/checker.ts +116 -0
  100. package/dist/extensions/session-supervisor/config.ts +45 -0
  101. package/dist/extensions/session-supervisor/index.ts +726 -0
  102. package/dist/extensions/session-supervisor/prompts.ts +132 -0
  103. package/dist/extensions/session-supervisor/scheduler.ts +69 -0
  104. package/dist/extensions/session-supervisor/types.ts +215 -0
  105. package/dist/extensions/subagent/README.md +172 -0
  106. package/dist/extensions/subagent/agents/explorer.md +25 -0
  107. package/dist/extensions/subagent/agents/guide.md +27 -0
  108. package/dist/extensions/subagent/agents/planner.md +37 -0
  109. package/dist/extensions/subagent/agents/reviewer.md +35 -0
  110. package/dist/extensions/subagent/agents/scout.md +50 -0
  111. package/dist/extensions/subagent/agents/verification.md +35 -0
  112. package/dist/extensions/subagent/agents/worker.md +24 -0
  113. package/dist/extensions/subagent/agents.ts +25 -0
  114. package/dist/extensions/subagent/index.ts +987 -0
  115. package/dist/extensions/subagent/prompts/implement-and-review.md +10 -0
  116. package/dist/extensions/subagent/prompts/implement.md +10 -0
  117. package/dist/extensions/subagent/prompts/scout-and-plan.md +9 -0
  118. package/dist/extensions/subagent-ext/contract.d.ts +2 -0
  119. package/dist/extensions/subagent-ext/contract.d.ts.map +1 -0
  120. package/dist/extensions/subagent-ext/contract.js +2 -0
  121. package/dist/extensions/subagent-ext/contract.js.map +1 -0
  122. package/dist/extensions/subagent-ext/contract.ts +1 -0
  123. package/dist/extensions/subagent-ext/index.ts +347 -0
  124. package/dist/extensions/subagent-shared/contract.d.ts +25 -0
  125. package/dist/extensions/subagent-shared/contract.d.ts.map +1 -0
  126. package/dist/extensions/subagent-shared/contract.js +2 -0
  127. package/dist/extensions/subagent-shared/contract.js.map +1 -0
  128. package/dist/extensions/subagent-shared/contract.ts +28 -0
  129. package/dist/extensions/subagent-shared/index.ts +4 -0
  130. package/dist/extensions/subagent-shared/render.ts +166 -0
  131. package/dist/extensions/subagent-shared/types.ts +35 -0
  132. package/dist/extensions/subagent-shared/utils.ts +112 -0
  133. package/dist/extensions/subagent-v2/contract.d.ts +2 -0
  134. package/dist/extensions/subagent-v2/contract.d.ts.map +1 -0
  135. package/dist/extensions/subagent-v2/contract.js +2 -0
  136. package/dist/extensions/subagent-v2/contract.js.map +1 -0
  137. package/dist/extensions/subagent-v2/contract.ts +1 -0
  138. package/dist/extensions/subagent-v2/index.ts +599 -0
  139. package/dist/extensions/todo-ext/contract.d.ts +27 -0
  140. package/dist/extensions/todo-ext/contract.d.ts.map +1 -0
  141. package/dist/extensions/todo-ext/contract.js +2 -0
  142. package/dist/extensions/todo-ext/contract.js.map +1 -0
  143. package/dist/extensions/todo-ext/contract.ts +30 -0
  144. package/dist/extensions/todo-ext/index.ts +419 -0
  145. package/package.json +6 -5
@@ -0,0 +1,112 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ import type { Message } from "@dyyz1993/pi-ai";
5
+ import { withFileMutationQueue } from "@dyyz1993/pi-coding-agent";
6
+ import type { DisplayItem, UsageStats } from "./types.js";
7
+
8
+ export function formatTokens(count: number): string {
9
+ if (count < 1000) return count.toString();
10
+ if (count < 10000) return `${(count / 1000).toFixed(1)}k`;
11
+ if (count < 1000000) return `${Math.round(count / 1000)}k`;
12
+ return `${(count / 1000000).toFixed(1)}M`;
13
+ }
14
+
15
+ export function formatUsageStats(
16
+ usage: {
17
+ input: number;
18
+ output: number;
19
+ cacheRead: number;
20
+ cacheWrite: number;
21
+ cost: number;
22
+ contextTokens?: number;
23
+ turns?: number;
24
+ },
25
+ model?: string,
26
+ ): string {
27
+ const parts: string[] = [];
28
+ if (usage.turns) parts.push(`${usage.turns} turn${usage.turns > 1 ? "s" : ""}`);
29
+ if (usage.input) parts.push(`↑${formatTokens(usage.input)}`);
30
+ if (usage.output) parts.push(`↓${formatTokens(usage.output)}`);
31
+ if (usage.cacheRead) parts.push(`R${formatTokens(usage.cacheRead)}`);
32
+ if (usage.cacheWrite) parts.push(`W${formatTokens(usage.cacheWrite)}`);
33
+ if (usage.cost) parts.push(`$${usage.cost.toFixed(4)}`);
34
+ if (usage.contextTokens && usage.contextTokens > 0) parts.push(`ctx:${formatTokens(usage.contextTokens)}`);
35
+ if (model) parts.push(model);
36
+ return parts.join(" ");
37
+ }
38
+
39
+ export function getFinalOutput(messages: Message[]): string {
40
+ for (let i = messages.length - 1; i >= 0; i--) {
41
+ const msg = messages[i];
42
+ if (msg.role === "assistant") {
43
+ for (const part of msg.content) {
44
+ if (part.type === "text") return part.text;
45
+ }
46
+ }
47
+ }
48
+ return "";
49
+ }
50
+
51
+ export function getDisplayItems(messages: Message[]): DisplayItem[] {
52
+ const items: DisplayItem[] = [];
53
+ for (const msg of messages) {
54
+ if (msg.role === "assistant") {
55
+ for (const part of msg.content) {
56
+ if (part.type === "text") items.push({ type: "text", text: part.text });
57
+ else if (part.type === "toolCall") items.push({ type: "toolCall", name: part.name, args: part.arguments });
58
+ }
59
+ }
60
+ }
61
+ return items;
62
+ }
63
+
64
+ export async function writePromptToTempFile(
65
+ agentName: string,
66
+ prompt: string,
67
+ tmpPrefix = "pi-subagent-",
68
+ ): Promise<{ dir: string; filePath: string }> {
69
+ const tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), tmpPrefix));
70
+ const safeName = agentName.replace(/[^\w.-]+/g, "_");
71
+ const filePath = path.join(tmpDir, `prompt-${safeName}.md`);
72
+ await withFileMutationQueue(filePath, async () => {
73
+ await fs.promises.writeFile(filePath, prompt, { encoding: "utf-8", mode: 0o600 });
74
+ });
75
+ return { dir: tmpDir, filePath };
76
+ }
77
+
78
+ export function cleanupTempFiles(filePath: string | null, dir: string | null, logPrefix = "subagent"): void {
79
+ if (filePath)
80
+ try {
81
+ fs.unlinkSync(filePath);
82
+ } catch (err) {
83
+ console.debug(`[${logPrefix}] temp file cleanup failed:`, err instanceof Error ? err.message : err);
84
+ }
85
+ if (dir)
86
+ try {
87
+ fs.rmdirSync(dir);
88
+ } catch (err) {
89
+ console.debug(`[${logPrefix}] temp dir cleanup failed:`, err instanceof Error ? err.message : err);
90
+ }
91
+ }
92
+
93
+ export function makeUsage(): UsageStats {
94
+ return { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 };
95
+ }
96
+
97
+ export function accumulateUsage(result: { usage: UsageStats; model?: string; stopReason?: string; errorMessage?: string }, msg: Message): void {
98
+ if (msg.role !== "assistant") return;
99
+ result.usage.turns++;
100
+ const usage = msg.usage;
101
+ if (usage) {
102
+ result.usage.input += usage.input || 0;
103
+ result.usage.output += usage.output || 0;
104
+ result.usage.cacheRead += usage.cacheRead || 0;
105
+ result.usage.cacheWrite += usage.cacheWrite || 0;
106
+ result.usage.cost += usage.cost?.total || 0;
107
+ result.usage.contextTokens = usage.totalTokens || 0;
108
+ }
109
+ if (!result.model && msg.model) result.model = msg.model;
110
+ if (msg.stopReason) result.stopReason = msg.stopReason;
111
+ if (msg.errorMessage) result.errorMessage = msg.errorMessage;
112
+ }
@@ -0,0 +1,2 @@
1
+ export { SUBAGENT_CHANNEL_NAME as SUBAGENT_V2_CHANNEL_NAME, type SubagentChannelContract as SubagentV2ChannelContract, type SubagentEventPayload as SubagentV2EventPayload } from "../subagent-shared/contract.js";
2
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,IAAI,wBAAwB,EAAE,KAAK,uBAAuB,IAAI,yBAAyB,EAAE,KAAK,oBAAoB,IAAI,sBAAsB,EAAE,MAAM,gCAAgC,CAAC","sourcesContent":["export { SUBAGENT_CHANNEL_NAME as SUBAGENT_V2_CHANNEL_NAME, type SubagentChannelContract as SubagentV2ChannelContract, type SubagentEventPayload as SubagentV2EventPayload } from \"../subagent-shared/contract.js\";\n"]}
@@ -0,0 +1,2 @@
1
+ export { SUBAGENT_CHANNEL_NAME as SUBAGENT_V2_CHANNEL_NAME } from "../subagent-shared/contract.js";
2
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,IAAI,wBAAwB,EAAkH,MAAM,gCAAgC,CAAC","sourcesContent":["export { SUBAGENT_CHANNEL_NAME as SUBAGENT_V2_CHANNEL_NAME, type SubagentChannelContract as SubagentV2ChannelContract, type SubagentEventPayload as SubagentV2EventPayload } from \"../subagent-shared/contract.js\";\n"]}
@@ -0,0 +1 @@
1
+ export { SUBAGENT_CHANNEL_NAME as SUBAGENT_V2_CHANNEL_NAME, type SubagentChannelContract as SubagentV2ChannelContract, type SubagentEventPayload as SubagentV2EventPayload } from "../subagent-shared/contract.js";