@prestyj/cli 5.30.0 → 5.30.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/README.md +54 -39
- package/assets/skills/bulletproof/SKILL.md +1 -1
- package/assets/skills/clarify/SKILL.md +1 -1
- package/assets/skills/code-review/SKILL.md +1 -1
- package/assets/skills/compliance-guard/SKILL.md +1 -1
- package/assets/skills/durable/SKILL.md +1 -1
- package/assets/skills/evidence-led-ui/SKILL.md +1 -1
- package/assets/skills/lean/SKILL.md +1 -1
- package/assets/skills/refactoring/SKILL.md +1 -1
- package/assets/skills/root-cause/SKILL.md +1 -1
- package/assets/skills/shared-language/SKILL.md +1 -1
- package/assets/skills/tdd/SKILL.md +1 -1
- package/dist/app-sidecar/app-settings.d.ts +63 -0
- package/dist/app-sidecar/app-settings.js +147 -0
- package/dist/app-sidecar/app-settings.js.map +1 -0
- package/dist/app-sidecar/attachments.d.ts +11 -0
- package/dist/app-sidecar/attachments.js +47 -0
- package/dist/app-sidecar/attachments.js.map +1 -0
- package/dist/app-sidecar/auth-routes.d.ts +3 -0
- package/dist/app-sidecar/auth-routes.js +293 -0
- package/dist/app-sidecar/auth-routes.js.map +1 -0
- package/dist/app-sidecar/autopilot-runner.d.ts +62 -0
- package/dist/app-sidecar/autopilot-runner.js +373 -0
- package/dist/app-sidecar/autopilot-runner.js.map +1 -0
- package/dist/app-sidecar/file-search.d.ts +15 -0
- package/dist/app-sidecar/file-search.js +103 -0
- package/dist/app-sidecar/file-search.js.map +1 -0
- package/dist/app-sidecar/hf-pull-manager.d.ts +20 -0
- package/dist/app-sidecar/hf-pull-manager.js +224 -0
- package/dist/app-sidecar/hf-pull-manager.js.map +1 -0
- package/dist/app-sidecar/history-routes.d.ts +3 -0
- package/dist/app-sidecar/history-routes.js +375 -0
- package/dist/app-sidecar/history-routes.js.map +1 -0
- package/dist/app-sidecar/history.d.ts +67 -0
- package/dist/app-sidecar/history.js +23 -0
- package/dist/app-sidecar/history.js.map +1 -0
- package/dist/app-sidecar/http.d.ts +5 -0
- package/dist/app-sidecar/http.js +27 -0
- package/dist/app-sidecar/http.js.map +1 -0
- package/dist/app-sidecar/integration-routes.d.ts +3 -0
- package/dist/app-sidecar/integration-routes.js +286 -0
- package/dist/app-sidecar/integration-routes.js.map +1 -0
- package/dist/app-sidecar/json-mode.d.ts +10 -0
- package/dist/app-sidecar/json-mode.js +73 -0
- package/dist/app-sidecar/json-mode.js.map +1 -0
- package/dist/app-sidecar/keep-awake.d.ts +4 -0
- package/dist/app-sidecar/keep-awake.js +5 -0
- package/dist/app-sidecar/keep-awake.js.map +1 -0
- package/dist/app-sidecar/mcp-routes.d.ts +3 -0
- package/dist/app-sidecar/mcp-routes.js +185 -0
- package/dist/app-sidecar/mcp-routes.js.map +1 -0
- package/dist/app-sidecar/mcp-rows.d.ts +31 -0
- package/dist/app-sidecar/mcp-rows.js +77 -0
- package/dist/app-sidecar/mcp-rows.js.map +1 -0
- package/dist/app-sidecar/nolan-context.d.ts +20 -0
- package/dist/app-sidecar/nolan-context.js +55 -0
- package/dist/app-sidecar/nolan-context.js.map +1 -0
- package/dist/app-sidecar/progress-manager.d.ts +10 -0
- package/dist/app-sidecar/progress-manager.js +116 -0
- package/dist/app-sidecar/progress-manager.js.map +1 -0
- package/dist/app-sidecar/prompt-routes.d.ts +3 -0
- package/dist/app-sidecar/prompt-routes.js +355 -0
- package/dist/app-sidecar/prompt-routes.js.map +1 -0
- package/dist/app-sidecar/repo-polls.d.ts +18 -0
- package/dist/app-sidecar/repo-polls.js +45 -0
- package/dist/app-sidecar/repo-polls.js.map +1 -0
- package/dist/app-sidecar/route-context.d.ts +147 -0
- package/dist/app-sidecar/route-context.js +2 -0
- package/dist/app-sidecar/route-context.js.map +1 -0
- package/dist/app-sidecar/run-control-routes.d.ts +3 -0
- package/dist/app-sidecar/run-control-routes.js +437 -0
- package/dist/app-sidecar/run-control-routes.js.map +1 -0
- package/dist/app-sidecar/session-routes.d.ts +3 -0
- package/dist/app-sidecar/session-routes.js +115 -0
- package/dist/app-sidecar/session-routes.js.map +1 -0
- package/dist/app-sidecar/session-types.d.ts +39 -0
- package/dist/app-sidecar/session-types.js +5 -0
- package/dist/app-sidecar/session-types.js.map +1 -0
- package/dist/app-sidecar/task-routes.d.ts +3 -0
- package/dist/app-sidecar/task-routes.js +232 -0
- package/dist/app-sidecar/task-routes.js.map +1 -0
- package/dist/app-sidecar/usage.d.ts +19 -0
- package/dist/app-sidecar/usage.js +153 -0
- package/dist/app-sidecar/usage.js.map +1 -0
- package/dist/app-sidecar/workspace-routes.d.ts +3 -0
- package/dist/app-sidecar/workspace-routes.js +374 -0
- package/dist/app-sidecar/workspace-routes.js.map +1 -0
- package/dist/app-sidecar.js +541 -3971
- package/dist/app-sidecar.js.map +1 -1
- package/dist/chat-agents/jiwa.js +2 -0
- package/dist/chat-agents/jiwa.js.map +1 -1
- package/dist/chat-agents/memory.js +2 -0
- package/dist/chat-agents/memory.js.map +1 -1
- package/dist/cli/auth.js +13 -9
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli.js +10 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/core/acceptance-checks.js +3 -9
- package/dist/core/acceptance-checks.js.map +1 -1
- package/dist/core/agent-session/helpers.d.ts +26 -0
- package/dist/core/agent-session/helpers.js +47 -0
- package/dist/core/agent-session/helpers.js.map +1 -0
- package/dist/core/agent-session/mcp-tools.d.ts +68 -0
- package/dist/core/agent-session/mcp-tools.js +195 -0
- package/dist/core/agent-session/mcp-tools.js.map +1 -0
- package/dist/core/agent-session/run-loop-monitor.d.ts +63 -0
- package/dist/core/agent-session/run-loop-monitor.js +164 -0
- package/dist/core/agent-session/run-loop-monitor.js.map +1 -0
- package/dist/core/agent-session/transcript-markers.d.ts +57 -0
- package/dist/core/agent-session/transcript-markers.js +166 -0
- package/dist/core/agent-session/transcript-markers.js.map +1 -0
- package/dist/core/agent-session/verification-tracker.d.ts +50 -0
- package/dist/core/agent-session/verification-tracker.js +269 -0
- package/dist/core/agent-session/verification-tracker.js.map +1 -0
- package/dist/core/agent-session.d.ts +27 -87
- package/dist/core/agent-session.js +166 -713
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-providers.js +3 -3
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/autopilot-cycle.d.ts +8 -2
- package/dist/core/autopilot-cycle.js +22 -3
- package/dist/core/autopilot-cycle.js.map +1 -1
- package/dist/core/bundled-agents.js +6 -6
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/checklist-git.d.ts +19 -0
- package/dist/core/checklist-git.js +54 -0
- package/dist/core/checklist-git.js.map +1 -0
- package/dist/core/checklist-items.d.ts +10 -1
- package/dist/core/checklist-items.js +22 -0
- package/dist/core/checklist-items.js.map +1 -1
- package/dist/core/checklist-prompt.d.ts +14 -3
- package/dist/core/checklist-prompt.js +38 -8
- package/dist/core/checklist-prompt.js.map +1 -1
- package/dist/core/checklist-snapshot.d.ts +5 -1
- package/dist/core/checklist-snapshot.js +20 -3
- package/dist/core/checklist-snapshot.js.map +1 -1
- package/dist/core/checklist-store.d.ts +5 -1
- package/dist/core/checklist-store.js +35 -4
- package/dist/core/checklist-store.js.map +1 -1
- package/dist/core/context-limits.js +1 -1
- package/dist/core/context-limits.js.map +1 -1
- package/dist/core/event-bus.d.ts +1 -1
- package/dist/core/event-bus.js +39 -13
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/extensions/plugin-bundles.js +4 -2
- package/dist/core/extensions/plugin-bundles.js.map +1 -1
- package/dist/core/hashline.d.ts +10 -8
- package/dist/core/hashline.js.map +1 -1
- package/dist/core/mcp/client.js +2 -0
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/loopback.d.ts +2 -2
- package/dist/core/mcp/loopback.js +2 -2
- package/dist/core/mcp/shared-pool.js +4 -3
- package/dist/core/mcp/shared-pool.js.map +1 -1
- package/dist/core/persistent-shell.js +2 -1
- package/dist/core/persistent-shell.js.map +1 -1
- package/dist/core/plan-handoff.d.ts +30 -0
- package/dist/core/plan-handoff.js +10 -0
- package/dist/core/plan-handoff.js.map +1 -0
- package/dist/core/plan-submission-gate.d.ts +28 -0
- package/dist/core/plan-submission-gate.js +27 -0
- package/dist/core/plan-submission-gate.js.map +1 -0
- package/dist/core/process-manager.js +9 -1
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/project-health-scan.d.ts +109 -0
- package/dist/core/project-health-scan.js +673 -0
- package/dist/core/project-health-scan.js.map +1 -0
- package/dist/core/project-health-score.d.ts +41 -0
- package/dist/core/project-health-score.js +257 -0
- package/dist/core/project-health-score.js.map +1 -0
- package/dist/core/prompt-commands.js +44 -6
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-storage.d.ts +1 -0
- package/dist/core/session-storage.js +1 -1
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/skills.js +6 -9
- package/dist/core/skills.js.map +1 -1
- package/dist/core/style-packs/index.js +2 -11
- package/dist/core/style-packs/index.js.map +1 -1
- package/dist/core/style-packs/packs.d.ts +3 -12
- package/dist/core/style-packs/packs.js +132 -173
- package/dist/core/style-packs/packs.js.map +1 -1
- package/dist/core/subagent-manager.js +11 -6
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-receipt.js +3 -4
- package/dist/core/subagent-receipt.js.map +1 -1
- package/dist/core/ui-adoption.js +2 -0
- package/dist/core/ui-adoption.js.map +1 -1
- package/dist/core/ui-registry.js +5 -4
- package/dist/core/ui-registry.js.map +1 -1
- package/dist/core/verification-evidence.d.ts +21 -2
- package/dist/core/verification-evidence.js +283 -8
- package/dist/core/verification-evidence.js.map +1 -1
- package/dist/core/verification-gate.js +4 -2
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/core/verify-commands.js +2 -3
- package/dist/core/verify-commands.js.map +1 -1
- package/dist/modes/agent-home-mode.js +1 -4
- package/dist/modes/agent-home-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.js +13 -8
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/system-prompt.js +70 -87
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/ask-user.js +13 -74
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.js +28 -84
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/checklist.d.ts +7 -14
- package/dist/tools/checklist.js +22 -41
- package/dist/tools/checklist.js.map +1 -1
- package/dist/tools/code-nav.js +7 -29
- package/dist/tools/code-nav.js.map +1 -1
- package/dist/tools/edit.d.ts +4 -9
- package/dist/tools/edit.js +175 -65
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/enter-plan.js +2 -7
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/exit-plan.js +2 -3
- package/dist/tools/exit-plan.js.map +1 -1
- package/dist/tools/find.js +3 -4
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/grep.js +9 -20
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/index.js +10 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ls.js +3 -3
- package/dist/tools/ls.js.map +1 -1
- package/dist/tools/prompt-hints.js +34 -47
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read-only-bash.js +3 -0
- package/dist/tools/read-only-bash.js.map +1 -1
- package/dist/tools/read.js +8 -20
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/search-code.js +4 -12
- package/dist/tools/search-code.js.map +1 -1
- package/dist/tools/skill.js +13 -7
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/subagent-control.js +7 -22
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/subagent.js +1 -1
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/task-output.js +4 -15
- package/dist/tools/task-output.js.map +1 -1
- package/dist/tools/task-send.js +5 -17
- package/dist/tools/task-send.js.map +1 -1
- package/dist/tools/task-stop.js +2 -2
- package/dist/tools/task-stop.js.map +1 -1
- package/dist/tools/tool-search.js +2 -7
- package/dist/tools/tool-search.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts +21 -4
- package/dist/tools/tool-tiers.js +44 -17
- package/dist/tools/tool-tiers.js.map +1 -1
- package/dist/tools/web-fetch.js +7 -33
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/write.js +3 -4
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/App.js +20 -26
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/Footer.js +1 -2
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.js +0 -2
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/ToolExecution.js +4 -3
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +7 -6
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/sessions.js +1 -5
- package/dist/ui/sessions.js.map +1 -1
- package/dist/ui/utils/highlight.d.ts +0 -5
- package/dist/ui/utils/highlight.js +3 -49
- package/dist/ui/utils/highlight.js.map +1 -1
- package/dist/ui/utils/markdown-renderer.d.ts +6 -0
- package/dist/ui/utils/markdown-renderer.js +21 -5
- package/dist/ui/utils/markdown-renderer.js.map +1 -1
- package/dist/utils/process.js +3 -3
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/shared-poll.d.ts +37 -0
- package/dist/utils/shared-poll.js +104 -0
- package/dist/utils/shared-poll.js.map +1 -0
- package/package.json +8 -8
- package/dist/core/api-benchmark.d.ts +0 -63
- package/dist/core/api-benchmark.js +0 -381
- package/dist/core/api-benchmark.js.map +0 -1
- package/dist/core/bash-spawn-benchmark.d.ts +0 -1
- package/dist/core/bash-spawn-benchmark.js +0 -139
- package/dist/core/bash-spawn-benchmark.js.map +0 -1
- package/dist/core/cache-warm-benchmark.d.ts +0 -21
- package/dist/core/cache-warm-benchmark.js +0 -170
- package/dist/core/cache-warm-benchmark.js.map +0 -1
- package/dist/core/fast-apply-benchmark.d.ts +0 -25
- package/dist/core/fast-apply-benchmark.js +0 -284
- package/dist/core/fast-apply-benchmark.js.map +0 -1
- package/dist/core/hashline-edit-benchmark.d.ts +0 -88
- package/dist/core/hashline-edit-benchmark.js +0 -518
- package/dist/core/hashline-edit-benchmark.js.map +0 -1
- package/dist/core/semantic-search-benchmark.d.ts +0 -36
- package/dist/core/semantic-search-benchmark.js +0 -211
- package/dist/core/semantic-search-benchmark.js.map +0 -1
- package/dist/core/speed-benchmark.d.ts +0 -132
- package/dist/core/speed-benchmark.js +0 -410
- package/dist/core/speed-benchmark.js.map +0 -1
- package/dist/ui/activity-phrases.d.ts +0 -10
- package/dist/ui/activity-phrases.js +0 -184
- package/dist/ui/activity-phrases.js.map +0 -1
- package/dist/ui/components/PlanApproval.d.ts +0 -7
- package/dist/ui/components/PlanApproval.js +0 -60
- package/dist/ui/components/PlanApproval.js.map +0 -1
- package/dist/ui/components/PlanBanner.d.ts +0 -5
- package/dist/ui/components/PlanBanner.js +0 -31
- package/dist/ui/components/PlanBanner.js.map +0 -1
- package/dist/ui/components/PlanProgress.d.ts +0 -6
- package/dist/ui/components/PlanProgress.js +0 -30
- package/dist/ui/components/PlanProgress.js.map +0 -1
- package/dist/ui/hooks/useMinDisplayTime.d.ts +0 -10
- package/dist/ui/hooks/useMinDisplayTime.js +0 -34
- package/dist/ui/hooks/useMinDisplayTime.js.map +0 -1
- package/dist/ui/hooks/useSessionManager.d.ts +0 -12
- package/dist/ui/hooks/useSessionManager.js +0 -43
- package/dist/ui/hooks/useSessionManager.js.map +0 -1
- package/dist/ui/hooks/useSlashCommands.d.ts +0 -6
- package/dist/ui/hooks/useSlashCommands.js +0 -11
- package/dist/ui/hooks/useSlashCommands.js.map +0 -1
- package/dist/ui/terminal-history-spacing.d.ts +0 -1
- package/dist/ui/terminal-history-spacing.js +0 -2
- package/dist/ui/terminal-history-spacing.js.map +0 -1
- package/dist/ui/utils/markdown-cache.d.ts +0 -10
- package/dist/ui/utils/markdown-cache.js +0 -58
- package/dist/ui/utils/markdown-cache.js.map +0 -1
- package/dist/ui/utils/token-to-ansi.d.ts +0 -8
- package/dist/ui/utils/token-to-ansi.js +0 -323
- package/dist/ui/utils/token-to-ansi.js.map +0 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One background poller per key, shared by every subscriber.
|
|
3
|
+
*
|
|
4
|
+
* The app's daemon runs one session per window, and each window used to poll
|
|
5
|
+
* its repo on its own: git status every 5s, GitHub issue/PR counts every 60s,
|
|
6
|
+
* CI every 15–60s. Two windows on the same repo did all of it twice. Here the
|
|
7
|
+
* first subscriber for a key starts the poller, later ones join it (and get
|
|
8
|
+
* the last value at once), and the last one to leave stops it.
|
|
9
|
+
*/
|
|
10
|
+
export function createSharedPolls(start) {
|
|
11
|
+
const entries = new Map();
|
|
12
|
+
function entryFor(key) {
|
|
13
|
+
const existing = entries.get(key);
|
|
14
|
+
if (existing)
|
|
15
|
+
return existing;
|
|
16
|
+
const entry = { listeners: new Set(), latest: undefined, poller: undefined };
|
|
17
|
+
entries.set(key, entry);
|
|
18
|
+
entry.poller = start(key, (value) => {
|
|
19
|
+
// A poller that was stopped mid-request must not publish into a new one.
|
|
20
|
+
if (entries.get(key) !== entry)
|
|
21
|
+
return;
|
|
22
|
+
entry.latest = { value };
|
|
23
|
+
for (const listener of [...entry.listeners])
|
|
24
|
+
listener.fn(value);
|
|
25
|
+
});
|
|
26
|
+
return entry;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
subscribe(key, fn) {
|
|
30
|
+
const entry = entryFor(key);
|
|
31
|
+
const listener = { fn };
|
|
32
|
+
entry.listeners.add(listener);
|
|
33
|
+
if (entry.latest) {
|
|
34
|
+
// Async, so a subscriber can finish wiring up before its first value.
|
|
35
|
+
queueMicrotask(() => {
|
|
36
|
+
if (entry.latest && entry.listeners.has(listener))
|
|
37
|
+
fn(entry.latest.value);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
let left = false;
|
|
41
|
+
return {
|
|
42
|
+
refresh() {
|
|
43
|
+
if (!left)
|
|
44
|
+
void entry.poller?.refresh();
|
|
45
|
+
},
|
|
46
|
+
unsubscribe() {
|
|
47
|
+
if (left)
|
|
48
|
+
return;
|
|
49
|
+
left = true;
|
|
50
|
+
entry.listeners.delete(listener);
|
|
51
|
+
if (entry.listeners.size > 0 || entries.get(key) !== entry)
|
|
52
|
+
return;
|
|
53
|
+
entries.delete(key);
|
|
54
|
+
entry.poller?.stop();
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
size: () => entries.size,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Fixed-cadence poller: first check after `firstDelayMs`, then every
|
|
63
|
+
* `intervalMs` after the previous check settles. `fetch` returning null (or
|
|
64
|
+
* throwing) publishes nothing, so subscribers keep their last-known value.
|
|
65
|
+
*/
|
|
66
|
+
export function startIntervalPoll(opts) {
|
|
67
|
+
let stopped = false;
|
|
68
|
+
let busy = false;
|
|
69
|
+
let timer;
|
|
70
|
+
const schedule = (delay) => {
|
|
71
|
+
clearTimeout(timer);
|
|
72
|
+
timer = setTimeout(() => void refresh(), delay);
|
|
73
|
+
timer.unref?.();
|
|
74
|
+
};
|
|
75
|
+
const refresh = async () => {
|
|
76
|
+
// A check already in flight answers this request too.
|
|
77
|
+
if (stopped || busy)
|
|
78
|
+
return;
|
|
79
|
+
busy = true;
|
|
80
|
+
clearTimeout(timer);
|
|
81
|
+
try {
|
|
82
|
+
const value = await opts.fetch();
|
|
83
|
+
if (value !== null && !stopped)
|
|
84
|
+
opts.publish(value);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Transient (offline, timeout, git lock): keep the last-known value.
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
busy = false;
|
|
91
|
+
if (!stopped)
|
|
92
|
+
schedule(opts.intervalMs);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
schedule(opts.firstDelayMs);
|
|
96
|
+
return {
|
|
97
|
+
refresh,
|
|
98
|
+
stop() {
|
|
99
|
+
stopped = true;
|
|
100
|
+
clearTimeout(timer);
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=shared-poll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-poll.js","sourceRoot":"","sources":["../../src/utils/shared-poll.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prestyj/cli",
|
|
3
|
-
"version": "5.30.
|
|
3
|
+
"version": "5.30.2",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "CLI coding agent with OAuth
|
|
5
|
+
"description": "Lean CLI coding agent for 12 LLM providers and local models, with OAuth for Anthropic, OpenAI and Gemini",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22"
|
|
9
|
+
},
|
|
7
10
|
"repository": {
|
|
8
11
|
"type": "git",
|
|
9
12
|
"url": "git+https://github.com/Gahroot/ezcoder.git",
|
|
@@ -95,16 +98,13 @@
|
|
|
95
98
|
"@jridgewell/trace-mapping": "^0.3.25",
|
|
96
99
|
"@kenkaiiii/agent-home-sdk": "^0.3.8",
|
|
97
100
|
"@modelcontextprotocol/client": "^2.0.0",
|
|
98
|
-
"ansi-regex": "^6.2.2",
|
|
99
101
|
"chalk": "^5.6.2",
|
|
100
|
-
"cli-highlight": "^2.1.11",
|
|
101
102
|
"diff": "^8.0.3",
|
|
102
103
|
"fast-glob": "^3.3.3",
|
|
103
104
|
"ignore": "^7.0.5",
|
|
104
105
|
"ink": "npm:@kenkaiiii/ink@6.8.0-gg.2",
|
|
105
106
|
"lowlight": "^3.3.0",
|
|
106
107
|
"marked": "^15.0.12",
|
|
107
|
-
"marked-terminal": "^7.3.0",
|
|
108
108
|
"opensrc": "^0.7.2",
|
|
109
109
|
"react": "^19.2.5",
|
|
110
110
|
"sharp": "^0.35.3",
|
|
@@ -115,9 +115,9 @@
|
|
|
115
115
|
"typescript-language-server": "^5.3.0",
|
|
116
116
|
"wrap-ansi": "^10.0.0",
|
|
117
117
|
"zod": "^4.5.4",
|
|
118
|
-
"@prestyj/
|
|
119
|
-
"@prestyj/
|
|
120
|
-
"@prestyj/
|
|
118
|
+
"@prestyj/agent": "5.30.2",
|
|
119
|
+
"@prestyj/ai": "5.30.2",
|
|
120
|
+
"@prestyj/core": "5.30.2",
|
|
121
121
|
"@prestyj/pixel": "4.3.101"
|
|
122
122
|
},
|
|
123
123
|
"optionalDependencies": {
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Real-API speed benchmark — sends actual requests to a live provider and
|
|
3
|
-
* measures TTFT, output throughput, cache behavior, and wall-clock latency.
|
|
4
|
-
*
|
|
5
|
-
* Unlike the mock benchmark, this hits real endpoints and produces
|
|
6
|
-
* production-representative numbers. Uses gg's own AuthStorage to resolve
|
|
7
|
-
* credentials (same path as a real session).
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* npx tsx src/core/api-benchmark.ts
|
|
11
|
-
*
|
|
12
|
-
* Environment overrides:
|
|
13
|
-
* EZ_BENCH_PROVIDER — provider name (default: "glm")
|
|
14
|
-
* EZ_BENCH_MODEL — model id (default: "glm-5.3")
|
|
15
|
-
* EZ_BENCH_TURNS — number of turns (default: 5)
|
|
16
|
-
*/
|
|
17
|
-
export interface ApiTurnMetrics {
|
|
18
|
-
turn: number;
|
|
19
|
-
prompt: string;
|
|
20
|
-
ttftMs: number;
|
|
21
|
-
outputTokens: number;
|
|
22
|
-
outputDurationMs: number;
|
|
23
|
-
tokensPerSecond: number;
|
|
24
|
-
wallClockMs: number;
|
|
25
|
-
inputTokens: number;
|
|
26
|
-
cacheRead: number;
|
|
27
|
-
cacheWrite: number;
|
|
28
|
-
cacheHit: boolean;
|
|
29
|
-
stopReason: string;
|
|
30
|
-
}
|
|
31
|
-
export interface ApiBenchmarkResult {
|
|
32
|
-
provider: string;
|
|
33
|
-
model: string;
|
|
34
|
-
turns: ApiTurnMetrics[];
|
|
35
|
-
totalWallClockMs: number;
|
|
36
|
-
totalTtftMs: number;
|
|
37
|
-
totalOutputTokens: number;
|
|
38
|
-
avgTokensPerSecond: number;
|
|
39
|
-
avgTtftMs: number;
|
|
40
|
-
cacheHits: number;
|
|
41
|
-
cacheHitRate: number;
|
|
42
|
-
}
|
|
43
|
-
export declare function runApiBenchmark(config: {
|
|
44
|
-
provider: string;
|
|
45
|
-
model: string;
|
|
46
|
-
apiKey: string;
|
|
47
|
-
baseUrl?: string;
|
|
48
|
-
accountId?: string;
|
|
49
|
-
cacheRetention?: "short" | "long";
|
|
50
|
-
promptCacheKey?: string;
|
|
51
|
-
turns?: number;
|
|
52
|
-
}): Promise<ApiBenchmarkResult>;
|
|
53
|
-
export declare function formatApiResult(result: ApiBenchmarkResult): string;
|
|
54
|
-
export interface ApiComparisonResult {
|
|
55
|
-
baseline: ApiBenchmarkResult;
|
|
56
|
-
optimized: ApiBenchmarkResult;
|
|
57
|
-
ttftImprovement: number;
|
|
58
|
-
throughputImprovement: number;
|
|
59
|
-
wallClockImprovement: number;
|
|
60
|
-
cacheHitRateDelta: number;
|
|
61
|
-
}
|
|
62
|
-
/** Format an A/B comparison between two API benchmark runs. */
|
|
63
|
-
export declare function formatApiComparison(c: ApiComparisonResult): string;
|
|
@@ -1,381 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Real-API speed benchmark — sends actual requests to a live provider and
|
|
3
|
-
* measures TTFT, output throughput, cache behavior, and wall-clock latency.
|
|
4
|
-
*
|
|
5
|
-
* Unlike the mock benchmark, this hits real endpoints and produces
|
|
6
|
-
* production-representative numbers. Uses gg's own AuthStorage to resolve
|
|
7
|
-
* credentials (same path as a real session).
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* npx tsx src/core/api-benchmark.ts
|
|
11
|
-
*
|
|
12
|
-
* Environment overrides:
|
|
13
|
-
* EZ_BENCH_PROVIDER — provider name (default: "glm")
|
|
14
|
-
* EZ_BENCH_MODEL — model id (default: "glm-5.3")
|
|
15
|
-
* EZ_BENCH_TURNS — number of turns (default: 5)
|
|
16
|
-
*/
|
|
17
|
-
import { stream } from "@prestyj/ai";
|
|
18
|
-
import { AuthStorage } from "./auth-storage.js";
|
|
19
|
-
// ── System prompt (realistic coding-agent prefix) ──────────
|
|
20
|
-
function buildSystemPrompt() {
|
|
21
|
-
return [
|
|
22
|
-
"You are EZ Coder — a coding agent that works directly in the user's codebase.",
|
|
23
|
-
"You explore, understand, change, and verify code — completing tasks end-to-end",
|
|
24
|
-
"rather than just suggesting edits.",
|
|
25
|
-
"",
|
|
26
|
-
"## How to Talk",
|
|
27
|
-
"Don't narrate tool calls. Stay silent between tools unless you have a decision.",
|
|
28
|
-
"Final replies: 1-3 sentences, hard cap 5.",
|
|
29
|
-
"",
|
|
30
|
-
"## How to Work",
|
|
31
|
-
"- Read before edit/write; re-read after formatters or codegen.",
|
|
32
|
-
"- Compute in bash; write with edit/write so read-tracking stays intact.",
|
|
33
|
-
"- Keep edits small; plan multi-file work first.",
|
|
34
|
-
"- Choose targeted verification appropriate to the change.",
|
|
35
|
-
"",
|
|
36
|
-
"## Tools",
|
|
37
|
-
"- read: Read file contents",
|
|
38
|
-
"- write: Write file contents",
|
|
39
|
-
"- edit: Replace text in a file via search-replace blocks",
|
|
40
|
-
"- bash: Execute shell commands",
|
|
41
|
-
"- grep: Search file contents using regex",
|
|
42
|
-
"- find: Find files matching a glob pattern",
|
|
43
|
-
"",
|
|
44
|
-
"## Code Quality",
|
|
45
|
-
"Intent-revealing names; reuse existing deps. Types first; handle I/O and errors.",
|
|
46
|
-
"No dead/commented code, placeholders, or unasked refactors.",
|
|
47
|
-
"",
|
|
48
|
-
"## Environment",
|
|
49
|
-
"- Working directory: /home/user/my-project",
|
|
50
|
-
"- Platform: linux",
|
|
51
|
-
"",
|
|
52
|
-
"<!-- uncached -->",
|
|
53
|
-
"Today's date: 20 June 2026",
|
|
54
|
-
].join("\n");
|
|
55
|
-
}
|
|
56
|
-
// ── Conversation turns ──────────────────────────────────────
|
|
57
|
-
/** Prompts designed to produce 100-300 token responses so throughput
|
|
58
|
-
* measurement is meaningful (the simple one-liners gave 8-13 tokens
|
|
59
|
-
* which made tok/s unreliable). */
|
|
60
|
-
const CONVERSATION_TURNS = [
|
|
61
|
-
"Write a TypeScript function `rateLimit(opts: { maxAttempts: number; windowMs: number })` that returns an Express middleware. Include the full implementation with comments, error handling, and an in-memory store. Make it production quality.",
|
|
62
|
-
"Now write a test file for that rate limiter using vitest. Cover the happy path, rate limit exceeded, window reset, and multiple IPs. Include at least 4 test cases with full implementations.",
|
|
63
|
-
"Refactor the rate limiter to support a Redis backend as an alternative to the in-memory store. Show the interface, both implementations, and a factory function. Keep it backward compatible.",
|
|
64
|
-
"Write a README section documenting the rate limiter API: installation, usage examples for both backends, configuration options, and a comparison table of in-memory vs Redis.",
|
|
65
|
-
"Review the entire rate limiter module for security issues, edge cases, and performance. Write a brief analysis with specific findings and recommended fixes for each issue.",
|
|
66
|
-
];
|
|
67
|
-
// ── Benchmark runner ────────────────────────────────────────
|
|
68
|
-
export async function runApiBenchmark(config) {
|
|
69
|
-
const { provider, model, apiKey, baseUrl, accountId, cacheRetention = "long", promptCacheKey = `bench-${Date.now()}`, turns = 5, } = config;
|
|
70
|
-
const messages = [{ role: "system", content: buildSystemPrompt() }];
|
|
71
|
-
const turnMetrics = [];
|
|
72
|
-
for (let i = 0; i < turns; i++) {
|
|
73
|
-
const userPrompt = CONVERSATION_TURNS[i % CONVERSATION_TURNS.length];
|
|
74
|
-
messages.push({ role: "user", content: userPrompt });
|
|
75
|
-
const turnStart = Date.now();
|
|
76
|
-
let ttftMs = 0;
|
|
77
|
-
let firstToken = true;
|
|
78
|
-
const result = stream({
|
|
79
|
-
provider: provider,
|
|
80
|
-
model,
|
|
81
|
-
messages: [...messages],
|
|
82
|
-
maxTokens: 1024,
|
|
83
|
-
apiKey,
|
|
84
|
-
baseUrl,
|
|
85
|
-
accountId,
|
|
86
|
-
cacheRetention,
|
|
87
|
-
promptCacheKey,
|
|
88
|
-
});
|
|
89
|
-
let response;
|
|
90
|
-
try {
|
|
91
|
-
// Consume the stream, measuring TTFT on first event.
|
|
92
|
-
for await (const event of result) {
|
|
93
|
-
if (firstToken && (event.type === "text_delta" || event.type === "thinking_delta")) {
|
|
94
|
-
ttftMs = Date.now() - turnStart;
|
|
95
|
-
firstToken = false;
|
|
96
|
-
}
|
|
97
|
-
if (event.type === "text_delta") {
|
|
98
|
-
// Output counting happens via usage.outputTokens from the response.
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
response = await result.response;
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
const errMsg = err instanceof Error ? err.message : String(err);
|
|
105
|
-
console.error(` Turn ${i + 1} FAILED: ${errMsg.slice(0, 200)}`);
|
|
106
|
-
turnMetrics.push({
|
|
107
|
-
turn: i + 1,
|
|
108
|
-
prompt: userPrompt.slice(0, 50),
|
|
109
|
-
ttftMs: 0,
|
|
110
|
-
outputTokens: 0,
|
|
111
|
-
outputDurationMs: 0,
|
|
112
|
-
tokensPerSecond: 0,
|
|
113
|
-
wallClockMs: Date.now() - turnStart,
|
|
114
|
-
inputTokens: 0,
|
|
115
|
-
cacheRead: 0,
|
|
116
|
-
cacheWrite: 0,
|
|
117
|
-
cacheHit: false,
|
|
118
|
-
stopReason: "error",
|
|
119
|
-
});
|
|
120
|
-
// Don't continue — conversation context is broken after an error
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
const wallClockMs = Date.now() - turnStart;
|
|
124
|
-
const outputTokens = response.usage.outputTokens;
|
|
125
|
-
const outputDurationMs = wallClockMs - ttftMs;
|
|
126
|
-
const tokensPerSecond = outputDurationMs > 0 ? (outputTokens / outputDurationMs) * 1000 : 0;
|
|
127
|
-
const cacheRead = response.usage.cacheRead ?? 0;
|
|
128
|
-
turnMetrics.push({
|
|
129
|
-
turn: i + 1,
|
|
130
|
-
prompt: userPrompt.slice(0, 50),
|
|
131
|
-
ttftMs,
|
|
132
|
-
outputTokens,
|
|
133
|
-
outputDurationMs,
|
|
134
|
-
tokensPerSecond,
|
|
135
|
-
wallClockMs,
|
|
136
|
-
inputTokens: response.usage.inputTokens,
|
|
137
|
-
cacheRead,
|
|
138
|
-
cacheWrite: response.usage.cacheWrite ?? 0,
|
|
139
|
-
cacheHit: cacheRead > 0,
|
|
140
|
-
stopReason: response.stopReason,
|
|
141
|
-
});
|
|
142
|
-
// Append assistant reply for next turn.
|
|
143
|
-
const assistantContent = typeof response.message.content === "string"
|
|
144
|
-
? response.message.content
|
|
145
|
-
: response.message.content
|
|
146
|
-
.filter((p) => p.type === "text")
|
|
147
|
-
.map((p) => p.text ?? "")
|
|
148
|
-
.join("");
|
|
149
|
-
messages.push({ role: "assistant", content: assistantContent });
|
|
150
|
-
// Brief pause between turns (realistic user think time).
|
|
151
|
-
if (i < turns - 1) {
|
|
152
|
-
await sleep(2000);
|
|
153
|
-
}
|
|
154
|
-
// Progress output.
|
|
155
|
-
process.stdout.write(` Turn ${i + 1}/${turns}: TTFT ${ttftMs}ms | ${tokensPerSecond.toFixed(0)} tok/s | ` +
|
|
156
|
-
`${outputTokens} out | cache ${cacheRead > 0 ? "HIT" : "miss"}` +
|
|
157
|
-
`${cacheRead > 0 ? ` (${cacheRead} tok)` : ""}\n`);
|
|
158
|
-
}
|
|
159
|
-
const totalWallClockMs = turnMetrics.reduce((s, t) => s + t.wallClockMs, 0);
|
|
160
|
-
const totalTtftMs = turnMetrics.reduce((s, t) => s + t.ttftMs, 0);
|
|
161
|
-
const totalOutputTokens = turnMetrics.reduce((s, t) => s + t.outputTokens, 0);
|
|
162
|
-
const cacheHits = turnMetrics.filter((t) => t.cacheHit).length;
|
|
163
|
-
const validTurns = turnMetrics.filter((t) => t.stopReason !== "error");
|
|
164
|
-
const avgTokensPerSecond = validTurns.length > 0
|
|
165
|
-
? validTurns.reduce((s, t) => s + t.tokensPerSecond, 0) / validTurns.length
|
|
166
|
-
: 0;
|
|
167
|
-
const avgTtftMs = validTurns.length > 0 ? totalTtftMs / validTurns.length : 0;
|
|
168
|
-
return {
|
|
169
|
-
provider,
|
|
170
|
-
model,
|
|
171
|
-
turns: turnMetrics,
|
|
172
|
-
totalWallClockMs,
|
|
173
|
-
totalTtftMs,
|
|
174
|
-
totalOutputTokens,
|
|
175
|
-
avgTokensPerSecond,
|
|
176
|
-
avgTtftMs,
|
|
177
|
-
cacheHits,
|
|
178
|
-
cacheHitRate: turnMetrics.length > 0 ? cacheHits / turnMetrics.length : 0,
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
// ── Formatting ──────────────────────────────────────────────
|
|
182
|
-
export function formatApiResult(result) {
|
|
183
|
-
const lines = [];
|
|
184
|
-
lines.push("");
|
|
185
|
-
lines.push("╔══════════════════════════════════════════════════════════════╗");
|
|
186
|
-
lines.push(`║ API BENCHMARK: ${result.provider} / ${result.model}`.padEnd(63) + "║");
|
|
187
|
-
lines.push("╠══════════════════════════════════════════════════════════════╣");
|
|
188
|
-
lines.push("");
|
|
189
|
-
lines.push("┌──────┬────────────┬──────────┬───────────┬────────┬──────────┐");
|
|
190
|
-
lines.push("│ Turn │ TTFT │ Output │ Tok/s │ Cache │ Wall │");
|
|
191
|
-
lines.push("├──────┼────────────┼──────────┼───────────┼────────┼──────────┤");
|
|
192
|
-
for (const t of result.turns) {
|
|
193
|
-
const cacheLabel = t.cacheHit ? " HIT " : "miss";
|
|
194
|
-
lines.push(`│ ${String(t.turn).padStart(4)} │ ${fmt(t.ttftMs).padStart(10)} │ ` +
|
|
195
|
-
`${String(t.outputTokens).padStart(8)} │ ${t.tokensPerSecond.toFixed(0).padStart(9)} │ ` +
|
|
196
|
-
`${cacheLabel} │ ${fmt(t.wallClockMs).padStart(8)} │`);
|
|
197
|
-
}
|
|
198
|
-
lines.push("└──────┴────────────┴──────────┴───────────┴────────┴──────────┘");
|
|
199
|
-
lines.push("");
|
|
200
|
-
lines.push("┌─────────────────────────────┬──────────────────────────────┐");
|
|
201
|
-
lines.push("│ Metric │ Value │");
|
|
202
|
-
lines.push("├─────────────────────────────┼──────────────────────────────┤");
|
|
203
|
-
lines.push(`│ Avg TTFT │ ${fmt(result.avgTtftMs).padStart(28)} │`);
|
|
204
|
-
lines.push(`│ Avg output throughput │ ${result.avgTokensPerSecond.toFixed(0).padStart(22)} tok/s │`);
|
|
205
|
-
lines.push(`│ Total output tokens │ ${String(result.totalOutputTokens).padStart(28)} │`);
|
|
206
|
-
lines.push(`│ Total wall-clock │ ${fmt(result.totalWallClockMs).padStart(28)} │`);
|
|
207
|
-
lines.push(`│ Cache hits │ ${String(result.cacheHits).padStart(28)} │`);
|
|
208
|
-
lines.push(`│ Cache hit rate │ ${(result.cacheHitRate * 100).toFixed(0).padStart(27)}% │`);
|
|
209
|
-
lines.push("└─────────────────────────────┴──────────────────────────────┘");
|
|
210
|
-
lines.push("");
|
|
211
|
-
return lines.join("\n");
|
|
212
|
-
}
|
|
213
|
-
function fmt(ms) {
|
|
214
|
-
if (ms < 1000)
|
|
215
|
-
return `${Math.round(ms)}ms`;
|
|
216
|
-
return `${(ms / 1000).toFixed(2)}s`;
|
|
217
|
-
}
|
|
218
|
-
function sleep(ms) {
|
|
219
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
220
|
-
}
|
|
221
|
-
/** Format an A/B comparison between two API benchmark runs. */
|
|
222
|
-
export function formatApiComparison(c) {
|
|
223
|
-
const lines = [];
|
|
224
|
-
lines.push("");
|
|
225
|
-
lines.push("╔══════════════════════════════════════════════════════════════╗");
|
|
226
|
-
lines.push("║ REAL API A/B: BASELINE vs OPTIMIZED ║");
|
|
227
|
-
lines.push("╚══════════════════════════════════════════════════════════════╝");
|
|
228
|
-
lines.push("");
|
|
229
|
-
lines.push(formatApiResult(c.baseline));
|
|
230
|
-
lines.push(formatApiResult(c.optimized));
|
|
231
|
-
lines.push("┌─────────────────────────────┬──────────────┬──────────────┬───────────┐");
|
|
232
|
-
lines.push("│ Metric │ Baseline │ Optimized │ Delta │");
|
|
233
|
-
lines.push("├─────────────────────────────┼──────────────┼──────────────┼───────────┤");
|
|
234
|
-
// TTFT/wall-clock: delta = (baseline - optimized), positive = faster = show -X%.
|
|
235
|
-
const pctDown = (delta) => `${delta >= 0 ? "-" : "+"}${Math.abs(delta).toFixed(1).padStart(5)}%`;
|
|
236
|
-
// Throughput: delta = (optimized - baseline), positive = faster = show +X%.
|
|
237
|
-
const pctUp = (delta) => `${delta >= 0 ? "+" : "-"}${Math.abs(delta).toFixed(1).padStart(5)}%`;
|
|
238
|
-
lines.push(`│ Avg TTFT │ ${fmt(c.baseline.avgTtftMs).padStart(11)} │ ${fmt(c.optimized.avgTtftMs).padStart(11)} │ ${pctDown(c.ttftImprovement).padStart(8)} │`);
|
|
239
|
-
lines.push(`│ Avg throughput (tok/s) │ ${String(c.baseline.avgTokensPerSecond.toFixed(0)).padStart(11)} │ ${String(c.optimized.avgTokensPerSecond.toFixed(0)).padStart(11)} │ ${pctUp(c.throughputImprovement).padStart(8)} │`);
|
|
240
|
-
lines.push(`│ Total wall-clock │ ${fmt(c.baseline.totalWallClockMs).padStart(11)} │ ${fmt(c.optimized.totalWallClockMs).padStart(11)} │ ${pctDown(c.wallClockImprovement).padStart(8)} │`);
|
|
241
|
-
lines.push(`│ Cache hit rate │ ${(c.baseline.cacheHitRate * 100).toFixed(0).padStart(10)}% │ ${(c.optimized.cacheHitRate * 100).toFixed(0).padStart(10)}% │ ${c.cacheHitRateDelta >= 0 ? "+" : ""}${c.cacheHitRateDelta.toFixed(0).padStart(5)}pp │`);
|
|
242
|
-
lines.push("└─────────────────────────────┴──────────────┴──────────────┴───────────┘");
|
|
243
|
-
lines.push("");
|
|
244
|
-
return lines.join("\n");
|
|
245
|
-
}
|
|
246
|
-
async function main() {
|
|
247
|
-
const provider = process.env.EZ_BENCH_PROVIDER ?? "glm";
|
|
248
|
-
const model = process.env.EZ_BENCH_MODEL ?? "glm-5.3";
|
|
249
|
-
const turns = parseInt(process.env.EZ_BENCH_TURNS ?? "5", 10);
|
|
250
|
-
const mode = process.env.EZ_BENCH_MODE ?? "compare"; // "single" or "compare"
|
|
251
|
-
// Resolve credentials using gg's AuthStorage (same path as a real session).
|
|
252
|
-
const authStorage = new AuthStorage();
|
|
253
|
-
await authStorage.load();
|
|
254
|
-
let apiKey;
|
|
255
|
-
let baseUrl;
|
|
256
|
-
let accountId;
|
|
257
|
-
try {
|
|
258
|
-
const creds = await authStorage.resolveCredentials(provider);
|
|
259
|
-
apiKey = creds.accessToken;
|
|
260
|
-
baseUrl = creds.baseUrl;
|
|
261
|
-
accountId = creds.accountId;
|
|
262
|
-
}
|
|
263
|
-
catch (err) {
|
|
264
|
-
console.error(`❌ Could not resolve credentials for "${provider}". ` +
|
|
265
|
-
`Make sure you're logged in: run \`ezcoder login\` and choose ${provider}.\n` +
|
|
266
|
-
` Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
267
|
-
process.exit(1);
|
|
268
|
-
}
|
|
269
|
-
if (!apiKey) {
|
|
270
|
-
console.error(`❌ Resolved credentials for "${provider}" but accessToken is empty.`);
|
|
271
|
-
process.exit(1);
|
|
272
|
-
}
|
|
273
|
-
console.log(`\n🔍 API Benchmark: ${provider}/${model} — mode: ${mode} (${turns} turns)`);
|
|
274
|
-
console.log(` API key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`);
|
|
275
|
-
console.log(` Base URL: ${baseUrl ?? "(provider default)"}`);
|
|
276
|
-
if (accountId)
|
|
277
|
-
console.log(` Account ID: ${accountId}`);
|
|
278
|
-
console.log("");
|
|
279
|
-
if (mode === "single") {
|
|
280
|
-
const result = await runApiBenchmark({
|
|
281
|
-
provider,
|
|
282
|
-
model,
|
|
283
|
-
apiKey,
|
|
284
|
-
baseUrl,
|
|
285
|
-
accountId,
|
|
286
|
-
cacheRetention: "long",
|
|
287
|
-
promptCacheKey: `bench-${provider}-${Date.now()}`,
|
|
288
|
-
turns,
|
|
289
|
-
});
|
|
290
|
-
console.log(formatApiResult(result));
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
// A/B comparison mode.
|
|
294
|
-
console.log("━".repeat(50));
|
|
295
|
-
console.log("▶ BASELINE: cacheRetention=short, no prewarm");
|
|
296
|
-
console.log("━".repeat(50));
|
|
297
|
-
const baseline = await runApiBenchmark({
|
|
298
|
-
provider,
|
|
299
|
-
model,
|
|
300
|
-
apiKey,
|
|
301
|
-
baseUrl,
|
|
302
|
-
accountId,
|
|
303
|
-
cacheRetention: "short",
|
|
304
|
-
promptCacheKey: `bench-base-${provider}-${Date.now()}`,
|
|
305
|
-
turns,
|
|
306
|
-
});
|
|
307
|
-
// Cool-down between runs so the second run isn't affected by connection warming.
|
|
308
|
-
console.log("\n⏳ Cooling down 5s between runs...\n");
|
|
309
|
-
await sleep(5000);
|
|
310
|
-
console.log("━".repeat(50));
|
|
311
|
-
console.log("▶ OPTIMIZED: cacheRetention=long + prewarm");
|
|
312
|
-
console.log("━".repeat(50));
|
|
313
|
-
// Fire a prewarm request before the optimized run (same as AgentSession does).
|
|
314
|
-
if (provider === "anthropic") {
|
|
315
|
-
const { prewarmAnthropicCache } = await import("@prestyj/ai");
|
|
316
|
-
await prewarmAnthropicCache({
|
|
317
|
-
apiKey,
|
|
318
|
-
model,
|
|
319
|
-
system: buildSystemPrompt(),
|
|
320
|
-
cacheRetention: "long",
|
|
321
|
-
baseUrl,
|
|
322
|
-
}).catch(() => { });
|
|
323
|
-
console.log(" (prewarm sent)");
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
// For non-Anthropic providers, fire a minimal warm-up request to prime
|
|
327
|
-
// the provider's prefix cache (GLM, OpenAI, etc. auto-cache on first hit).
|
|
328
|
-
console.log(" (warm-up request for prefix cache)");
|
|
329
|
-
await runApiBenchmark({
|
|
330
|
-
provider,
|
|
331
|
-
model,
|
|
332
|
-
apiKey,
|
|
333
|
-
baseUrl,
|
|
334
|
-
accountId,
|
|
335
|
-
cacheRetention: "long",
|
|
336
|
-
promptCacheKey: `bench-warm-${provider}-${Date.now()}`,
|
|
337
|
-
turns: 1,
|
|
338
|
-
}).catch(() => { });
|
|
339
|
-
}
|
|
340
|
-
const optimized = await runApiBenchmark({
|
|
341
|
-
provider,
|
|
342
|
-
model,
|
|
343
|
-
apiKey,
|
|
344
|
-
baseUrl,
|
|
345
|
-
accountId,
|
|
346
|
-
cacheRetention: "long",
|
|
347
|
-
promptCacheKey: `bench-opt-${provider}-${Date.now()}`,
|
|
348
|
-
turns,
|
|
349
|
-
});
|
|
350
|
-
const ttftImprovement = baseline.avgTtftMs > 0
|
|
351
|
-
? ((baseline.avgTtftMs - optimized.avgTtftMs) / baseline.avgTtftMs) * 100
|
|
352
|
-
: 0;
|
|
353
|
-
const throughputImprovement = baseline.avgTokensPerSecond > 0
|
|
354
|
-
? ((optimized.avgTokensPerSecond - baseline.avgTokensPerSecond) /
|
|
355
|
-
baseline.avgTokensPerSecond) *
|
|
356
|
-
100
|
|
357
|
-
: 0;
|
|
358
|
-
const wallClockImprovement = baseline.totalWallClockMs > 0
|
|
359
|
-
? ((baseline.totalWallClockMs - optimized.totalWallClockMs) / baseline.totalWallClockMs) * 100
|
|
360
|
-
: 0;
|
|
361
|
-
const comparison = {
|
|
362
|
-
baseline,
|
|
363
|
-
optimized,
|
|
364
|
-
ttftImprovement,
|
|
365
|
-
throughputImprovement,
|
|
366
|
-
wallClockImprovement,
|
|
367
|
-
cacheHitRateDelta: (optimized.cacheHitRate - baseline.cacheHitRate) * 100,
|
|
368
|
-
};
|
|
369
|
-
console.log(formatApiComparison(comparison));
|
|
370
|
-
}
|
|
371
|
-
// Run when executed directly (not when imported by tests).
|
|
372
|
-
const isDirectRun = process.argv[1]?.endsWith("api-benchmark.ts") ||
|
|
373
|
-
process.argv[1]?.endsWith("api-benchmark.js") ||
|
|
374
|
-
process.argv[1]?.endsWith("api-benchmark");
|
|
375
|
-
if (isDirectRun) {
|
|
376
|
-
main().catch((err) => {
|
|
377
|
-
console.error("Benchmark failed:", err);
|
|
378
|
-
process.exit(1);
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
//# sourceMappingURL=api-benchmark.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-benchmark.js","sourceRoot":"","sources":["../../src/core/api-benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|