@dyyz1993/pi-coding-agent 0.74.24 → 0.74.27
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/CHANGELOG.md +9 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +3 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/session-manager.d.ts +5 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +8 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/extensions/agent-permissions/index.ts +235 -0
- package/dist/extensions/ask-tools/index.ts +115 -0
- package/dist/extensions/auto-memory/contract.d.ts +51 -0
- package/dist/extensions/auto-memory/contract.d.ts.map +1 -0
- package/dist/extensions/auto-memory/contract.js +2 -0
- package/dist/extensions/auto-memory/contract.js.map +1 -0
- package/dist/extensions/auto-memory/contract.ts +56 -0
- package/dist/extensions/auto-memory/index.ts +969 -0
- package/dist/extensions/auto-memory/prompts.ts +202 -0
- package/dist/extensions/auto-memory/skip-rules.ts +297 -0
- package/dist/extensions/auto-memory/utils.ts +208 -0
- package/dist/extensions/auto-session-title/index.ts +83 -0
- package/dist/extensions/bash-ext/contract.d.ts +79 -0
- package/dist/extensions/bash-ext/contract.d.ts.map +1 -0
- package/dist/extensions/bash-ext/contract.js +2 -0
- package/dist/extensions/bash-ext/contract.js.map +1 -0
- package/dist/extensions/bash-ext/contract.ts +69 -0
- package/dist/extensions/bash-ext/index.ts +858 -0
- package/dist/extensions/claude-hooks-compat/config-loader.ts +49 -0
- package/dist/extensions/claude-hooks-compat/handler-runner.ts +377 -0
- package/dist/extensions/claude-hooks-compat/if-parser.ts +53 -0
- package/dist/extensions/claude-hooks-compat/index.ts +178 -0
- package/dist/extensions/claude-hooks-compat/matcher.ts +17 -0
- package/dist/extensions/claude-hooks-compat/stdin-builder.ts +27 -0
- package/dist/extensions/claude-hooks-compat/types.ts +77 -0
- package/dist/extensions/compaction-manager/config.ts +47 -0
- package/dist/extensions/compaction-manager/context-fold.ts +63 -0
- package/dist/extensions/compaction-manager/index.ts +151 -0
- package/dist/extensions/compaction-manager/microcompact.ts +49 -0
- package/dist/extensions/compaction-manager/reactive.ts +9 -0
- package/dist/extensions/compaction-manager/session-memory.ts +48 -0
- package/dist/extensions/coordinator/INTEGRATION.md +376 -0
- package/dist/extensions/coordinator/handler.test.ts +277 -0
- package/dist/extensions/coordinator/handler.ts +189 -0
- package/dist/extensions/coordinator/index.ts +261 -0
- package/dist/extensions/coordinator/types.d.ts +100 -0
- package/dist/extensions/coordinator/types.d.ts.map +1 -0
- package/dist/extensions/coordinator/types.js +2 -0
- package/dist/extensions/coordinator/types.js.map +1 -0
- package/dist/extensions/coordinator/types.ts +72 -0
- package/dist/extensions/file-snapshot/index.ts +131 -0
- package/dist/extensions/file-time-guard/README.md +133 -0
- package/dist/extensions/file-time-guard/config.ts +13 -0
- package/dist/extensions/file-time-guard/index.ts +171 -0
- package/dist/extensions/hooks-engine/index.ts +117 -0
- package/dist/extensions/lsp/lsp/client/file-tracker.ts +70 -0
- package/dist/extensions/lsp/lsp/client/registry.ts +305 -0
- package/dist/extensions/lsp/lsp/client/runtime.ts +832 -0
- package/dist/extensions/lsp/lsp/config/resolver.ts +573 -0
- package/dist/extensions/lsp/lsp/contract.d.ts +101 -0
- package/dist/extensions/lsp/lsp/contract.d.ts.map +1 -0
- package/dist/extensions/lsp/lsp/contract.js +2 -0
- package/dist/extensions/lsp/lsp/contract.js.map +1 -0
- package/dist/extensions/lsp/lsp/contract.ts +103 -0
- package/dist/extensions/lsp/lsp/hooks/agent-end.ts +169 -0
- package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.d.ts +10 -0
- package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.d.ts.map +1 -0
- package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.js +30 -0
- package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.js.map +1 -0
- package/dist/extensions/lsp/lsp/hooks/diagnostics-mode.ts +41 -0
- package/dist/extensions/lsp/lsp/hooks/writethrough.ts +342 -0
- package/dist/extensions/lsp/lsp/index.ts +310 -0
- package/dist/extensions/lsp/lsp/lsp.test.ts +684 -0
- package/dist/extensions/lsp/lsp/monitoring/server-metrics.ts +176 -0
- package/dist/extensions/lsp/lsp/tools/lsp-tool.ts +402 -0
- package/dist/extensions/lsp/lsp/utils/dependency-resolver.ts +147 -0
- package/dist/extensions/lsp/lsp/utils/diagnostics-wait.ts +41 -0
- package/dist/extensions/lsp/lsp/utils/lsp-helpers.d.ts +20 -0
- package/dist/extensions/lsp/lsp/utils/lsp-helpers.d.ts.map +1 -0
- package/dist/extensions/lsp/lsp/utils/lsp-helpers.js +64 -0
- package/dist/extensions/lsp/lsp/utils/lsp-helpers.js.map +1 -0
- package/dist/extensions/lsp/lsp/utils/lsp-helpers.ts +76 -0
- package/dist/extensions/message-bridge/GUIDE.md +210 -0
- package/dist/extensions/message-bridge/index.ts +222 -0
- package/dist/extensions/output-guard/index.ts +446 -0
- package/dist/extensions/preview/index.ts +278 -0
- package/dist/extensions/rules-engine/MATCH_HISTORY_RECONCILIATION.md +111 -0
- package/dist/extensions/rules-engine/RULES-ENGINE-GUIDE.md +470 -0
- package/dist/extensions/rules-engine/cache.js +232 -0
- package/dist/extensions/rules-engine/cache.ts +38 -0
- package/dist/extensions/rules-engine/config.js +63 -0
- package/dist/extensions/rules-engine/config.ts +70 -0
- package/dist/extensions/rules-engine/index.js +1530 -0
- package/dist/extensions/rules-engine/index.ts +552 -0
- package/dist/extensions/rules-engine/injector.js +68 -0
- package/dist/extensions/rules-engine/injector.ts +74 -0
- package/dist/extensions/rules-engine/loader.js +179 -0
- package/dist/extensions/rules-engine/loader.ts +205 -0
- package/dist/extensions/rules-engine/matcher.js +534 -0
- package/dist/extensions/rules-engine/matcher.ts +52 -0
- package/dist/extensions/rules-engine/types.d.ts +156 -0
- package/dist/extensions/rules-engine/types.d.ts.map +1 -0
- package/dist/extensions/rules-engine/types.js +2 -0
- package/dist/extensions/rules-engine/types.js.map +1 -0
- package/dist/extensions/rules-engine/types.ts +169 -0
- package/dist/extensions/session-supervisor/checker.ts +116 -0
- package/dist/extensions/session-supervisor/config.ts +45 -0
- package/dist/extensions/session-supervisor/index.ts +726 -0
- package/dist/extensions/session-supervisor/prompts.ts +132 -0
- package/dist/extensions/session-supervisor/scheduler.ts +69 -0
- package/dist/extensions/session-supervisor/types.ts +215 -0
- package/dist/extensions/subagent/README.md +172 -0
- package/dist/extensions/subagent/agents/explorer.md +25 -0
- package/dist/extensions/subagent/agents/guide.md +27 -0
- package/dist/extensions/subagent/agents/planner.md +37 -0
- package/dist/extensions/subagent/agents/reviewer.md +35 -0
- package/dist/extensions/subagent/agents/scout.md +50 -0
- package/dist/extensions/subagent/agents/verification.md +35 -0
- package/dist/extensions/subagent/agents/worker.md +24 -0
- package/dist/extensions/subagent/agents.ts +25 -0
- package/dist/extensions/subagent/index.ts +987 -0
- package/dist/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/dist/extensions/subagent/prompts/implement.md +10 -0
- package/dist/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/dist/extensions/subagent-ext/contract.d.ts +2 -0
- package/dist/extensions/subagent-ext/contract.d.ts.map +1 -0
- package/dist/extensions/subagent-ext/contract.js +2 -0
- package/dist/extensions/subagent-ext/contract.js.map +1 -0
- package/dist/extensions/subagent-ext/contract.ts +1 -0
- package/dist/extensions/subagent-ext/index.ts +347 -0
- package/dist/extensions/subagent-shared/contract.d.ts +25 -0
- package/dist/extensions/subagent-shared/contract.d.ts.map +1 -0
- package/dist/extensions/subagent-shared/contract.js +2 -0
- package/dist/extensions/subagent-shared/contract.js.map +1 -0
- package/dist/extensions/subagent-shared/contract.ts +28 -0
- package/dist/extensions/subagent-shared/index.ts +4 -0
- package/dist/extensions/subagent-shared/render.ts +166 -0
- package/dist/extensions/subagent-shared/types.ts +35 -0
- package/dist/extensions/subagent-shared/utils.ts +112 -0
- package/dist/extensions/subagent-v2/contract.d.ts +2 -0
- package/dist/extensions/subagent-v2/contract.d.ts.map +1 -0
- package/dist/extensions/subagent-v2/contract.js +2 -0
- package/dist/extensions/subagent-v2/contract.js.map +1 -0
- package/dist/extensions/subagent-v2/contract.ts +1 -0
- package/dist/extensions/subagent-v2/index.ts +599 -0
- package/dist/extensions/todo-ext/contract.d.ts +27 -0
- package/dist/extensions/todo-ext/contract.d.ts.map +1 -0
- package/dist/extensions/todo-ext/contract.js +2 -0
- package/dist/extensions/todo-ext/contract.js.map +1 -0
- package/dist/extensions/todo-ext/contract.ts +30 -0
- package/dist/extensions/todo-ext/index.ts +419 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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";
|