gsd-pi 2.37.1-dev.d3ace49 → 2.38.0-dev.29edcdc
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/dist/app-paths.js +1 -1
- package/dist/cli.js +9 -0
- package/dist/extension-discovery.d.ts +5 -3
- package/dist/extension-discovery.js +14 -9
- package/dist/extension-registry.js +2 -2
- package/dist/remote-questions-config.js +2 -2
- package/dist/resource-loader.js +34 -1
- package/dist/resources/extensions/browser-tools/package.json +3 -1
- package/dist/resources/extensions/cmux/index.js +55 -1
- package/dist/resources/extensions/context7/package.json +1 -1
- package/dist/resources/extensions/env-utils.js +29 -0
- package/dist/resources/extensions/get-secrets-from-user.js +5 -24
- package/dist/resources/extensions/github-sync/cli.js +284 -0
- package/dist/resources/extensions/github-sync/index.js +73 -0
- package/dist/resources/extensions/github-sync/mapping.js +67 -0
- package/dist/resources/extensions/github-sync/sync.js +424 -0
- package/dist/resources/extensions/github-sync/templates.js +118 -0
- package/dist/resources/extensions/github-sync/types.js +7 -0
- package/dist/resources/extensions/google-search/package.json +3 -1
- package/dist/resources/extensions/gsd/auto/session.js +6 -23
- package/dist/resources/extensions/gsd/auto-dispatch.js +8 -9
- package/dist/resources/extensions/gsd/auto-loop.js +597 -588
- package/dist/resources/extensions/gsd/auto-post-unit.js +99 -70
- package/dist/resources/extensions/gsd/auto-prompts.js +23 -43
- package/dist/resources/extensions/gsd/auto-start.js +13 -2
- package/dist/resources/extensions/gsd/auto-worktree-sync.js +13 -5
- package/dist/resources/extensions/gsd/auto-worktree.js +3 -3
- package/dist/resources/extensions/gsd/auto.js +143 -96
- package/dist/resources/extensions/gsd/captures.js +9 -1
- package/dist/resources/extensions/gsd/commands-extensions.js +3 -2
- package/dist/resources/extensions/gsd/commands-handlers.js +16 -3
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
- package/dist/resources/extensions/gsd/commands.js +24 -3
- package/dist/resources/extensions/gsd/context-budget.js +2 -10
- package/dist/resources/extensions/gsd/detection.js +1 -2
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -2
- package/dist/resources/extensions/gsd/doctor-checks.js +82 -0
- package/dist/resources/extensions/gsd/doctor-environment.js +78 -0
- package/dist/resources/extensions/gsd/doctor-format.js +15 -0
- package/dist/resources/extensions/gsd/doctor-providers.js +27 -11
- package/dist/resources/extensions/gsd/doctor.js +204 -12
- package/dist/resources/extensions/gsd/exit-command.js +2 -1
- package/dist/resources/extensions/gsd/export.js +1 -1
- package/dist/resources/extensions/gsd/files.js +6 -2
- package/dist/resources/extensions/gsd/forensics.js +1 -1
- package/dist/resources/extensions/gsd/git-service.js +15 -12
- package/dist/resources/extensions/gsd/guided-flow.js +82 -32
- package/dist/resources/extensions/gsd/index.js +24 -20
- package/dist/resources/extensions/gsd/migrate/parsers.js +1 -1
- package/dist/resources/extensions/gsd/native-git-bridge.js +37 -0
- package/dist/resources/extensions/gsd/package.json +1 -1
- package/dist/resources/extensions/gsd/preferences-models.js +0 -12
- package/dist/resources/extensions/gsd/preferences-types.js +1 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +59 -11
- package/dist/resources/extensions/gsd/preferences.js +8 -5
- package/dist/resources/extensions/gsd/prompts/discuss.md +11 -14
- package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -2
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +11 -12
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +8 -10
- package/dist/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/queue.md +4 -8
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +11 -8
- package/dist/resources/extensions/gsd/prompts/run-uat.md +27 -10
- package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -2
- package/dist/resources/extensions/gsd/repo-identity.js +21 -4
- package/dist/resources/extensions/gsd/resource-version.js +2 -1
- package/dist/resources/extensions/gsd/roadmap-mutations.js +24 -0
- package/dist/resources/extensions/gsd/state.js +1 -1
- package/dist/resources/extensions/gsd/visualizer-data.js +1 -1
- package/dist/resources/extensions/gsd/worktree.js +35 -16
- package/dist/resources/extensions/mcp-client/index.js +14 -1
- package/dist/resources/extensions/remote-questions/status.js +2 -1
- package/dist/resources/extensions/remote-questions/store.js +2 -1
- package/dist/resources/extensions/search-the-web/provider.js +2 -1
- package/dist/resources/extensions/subagent/index.js +12 -3
- package/dist/resources/extensions/subagent/isolation.js +2 -1
- package/dist/resources/extensions/ttsr/rule-loader.js +2 -1
- package/dist/resources/extensions/universal-config/package.json +1 -1
- package/dist/welcome-screen.d.ts +12 -0
- package/dist/welcome-screen.js +53 -0
- package/package.json +1 -1
- package/packages/pi-ai/dist/utils/oauth/anthropic.js +2 -2
- package/packages/pi-ai/dist/utils/oauth/anthropic.js.map +1 -1
- package/packages/pi-ai/src/utils/oauth/anthropic.ts +2 -2
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +205 -7
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.js +8 -4
- package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +223 -7
- package/packages/pi-coding-agent/src/core/package-manager.ts +8 -4
- package/pkg/package.json +1 -1
- package/src/resources/extensions/cmux/index.ts +57 -1
- package/src/resources/extensions/env-utils.ts +31 -0
- package/src/resources/extensions/get-secrets-from-user.ts +5 -24
- package/src/resources/extensions/github-sync/cli.ts +364 -0
- package/src/resources/extensions/github-sync/index.ts +93 -0
- package/src/resources/extensions/github-sync/mapping.ts +81 -0
- package/src/resources/extensions/github-sync/sync.ts +556 -0
- package/src/resources/extensions/github-sync/templates.ts +183 -0
- package/src/resources/extensions/github-sync/tests/cli.test.ts +20 -0
- package/src/resources/extensions/github-sync/tests/commit-linking.test.ts +39 -0
- package/src/resources/extensions/github-sync/tests/mapping.test.ts +104 -0
- package/src/resources/extensions/github-sync/tests/templates.test.ts +110 -0
- package/src/resources/extensions/github-sync/types.ts +47 -0
- package/src/resources/extensions/gsd/auto/session.ts +7 -25
- package/src/resources/extensions/gsd/auto-dispatch.ts +7 -9
- package/src/resources/extensions/gsd/auto-loop.ts +484 -546
- package/src/resources/extensions/gsd/auto-post-unit.ts +80 -44
- package/src/resources/extensions/gsd/auto-prompts.ts +25 -45
- package/src/resources/extensions/gsd/auto-start.ts +18 -2
- package/src/resources/extensions/gsd/auto-worktree-sync.ts +15 -4
- package/src/resources/extensions/gsd/auto-worktree.ts +3 -3
- package/src/resources/extensions/gsd/auto.ts +139 -101
- package/src/resources/extensions/gsd/captures.ts +10 -1
- package/src/resources/extensions/gsd/commands-extensions.ts +4 -2
- package/src/resources/extensions/gsd/commands-handlers.ts +17 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
- package/src/resources/extensions/gsd/commands.ts +26 -4
- package/src/resources/extensions/gsd/context-budget.ts +2 -12
- package/src/resources/extensions/gsd/detection.ts +2 -2
- package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -2
- package/src/resources/extensions/gsd/doctor-checks.ts +75 -0
- package/src/resources/extensions/gsd/doctor-environment.ts +82 -1
- package/src/resources/extensions/gsd/doctor-format.ts +20 -0
- package/src/resources/extensions/gsd/doctor-providers.ts +26 -9
- package/src/resources/extensions/gsd/doctor-types.ts +16 -1
- package/src/resources/extensions/gsd/doctor.ts +199 -14
- package/src/resources/extensions/gsd/exit-command.ts +2 -2
- package/src/resources/extensions/gsd/export.ts +1 -1
- package/src/resources/extensions/gsd/files.ts +5 -3
- package/src/resources/extensions/gsd/forensics.ts +1 -1
- package/src/resources/extensions/gsd/git-service.ts +20 -10
- package/src/resources/extensions/gsd/guided-flow.ts +110 -38
- package/src/resources/extensions/gsd/index.ts +24 -17
- package/src/resources/extensions/gsd/migrate/parsers.ts +1 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +37 -0
- package/src/resources/extensions/gsd/preferences-models.ts +0 -12
- package/src/resources/extensions/gsd/preferences-types.ts +4 -4
- package/src/resources/extensions/gsd/preferences-validation.ts +51 -11
- package/src/resources/extensions/gsd/preferences.ts +8 -5
- package/src/resources/extensions/gsd/prompts/discuss.md +11 -14
- package/src/resources/extensions/gsd/prompts/execute-task.md +2 -2
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +11 -12
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +8 -10
- package/src/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/queue.md +4 -8
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +11 -8
- package/src/resources/extensions/gsd/prompts/run-uat.md +27 -10
- package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -2
- package/src/resources/extensions/gsd/repo-identity.ts +23 -4
- package/src/resources/extensions/gsd/resource-version.ts +3 -1
- package/src/resources/extensions/gsd/roadmap-mutations.ts +29 -0
- package/src/resources/extensions/gsd/state.ts +1 -1
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +21 -18
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +122 -68
- package/src/resources/extensions/gsd/tests/cmux.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +266 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +86 -3
- package/src/resources/extensions/gsd/tests/preferences.test.ts +2 -7
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +21 -1
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +11 -3
- package/src/resources/extensions/gsd/tests/worktree.test.ts +47 -0
- package/src/resources/extensions/gsd/types.ts +0 -1
- package/src/resources/extensions/gsd/visualizer-data.ts +1 -1
- package/src/resources/extensions/gsd/worktree.ts +35 -15
- package/src/resources/extensions/mcp-client/index.ts +17 -1
- package/src/resources/extensions/remote-questions/status.ts +3 -1
- package/src/resources/extensions/remote-questions/store.ts +3 -1
- package/src/resources/extensions/search-the-web/provider.ts +2 -1
- package/src/resources/extensions/subagent/index.ts +12 -3
- package/src/resources/extensions/subagent/isolation.ts +3 -1
- package/src/resources/extensions/ttsr/rule-loader.ts +3 -1
- package/dist/resources/extensions/gsd/prompt-compressor.js +0 -393
- package/dist/resources/extensions/gsd/semantic-chunker.js +0 -254
- package/dist/resources/extensions/gsd/summary-distiller.js +0 -212
- package/src/resources/extensions/gsd/prompt-compressor.ts +0 -508
- package/src/resources/extensions/gsd/semantic-chunker.ts +0 -336
- package/src/resources/extensions/gsd/summary-distiller.ts +0 -258
- package/src/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
- package/src/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
- package/src/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
- package/src/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
- package/src/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
- package/src/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
|
|
4
|
-
// Test the type definitions exist and are correct
|
|
5
|
-
describe("token-optimization: types", () => {
|
|
6
|
-
it("CompressionStrategy accepts valid values", async () => {
|
|
7
|
-
const { } = await import("../types.js");
|
|
8
|
-
// Type-level test — if this compiles, the types exist
|
|
9
|
-
const truncate: import("../types.js").CompressionStrategy = "truncate";
|
|
10
|
-
const compress: import("../types.js").CompressionStrategy = "compress";
|
|
11
|
-
assert.equal(truncate, "truncate");
|
|
12
|
-
assert.equal(compress, "compress");
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it("ContextSelectionMode accepts valid values", async () => {
|
|
16
|
-
const full: import("../types.js").ContextSelectionMode = "full";
|
|
17
|
-
const smart: import("../types.js").ContextSelectionMode = "smart";
|
|
18
|
-
assert.equal(full, "full");
|
|
19
|
-
assert.equal(smart, "smart");
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
// Test cache hit rate computation
|
|
24
|
-
describe("token-optimization: cache hit rate", () => {
|
|
25
|
-
it("computeCacheHitRate returns correct percentage", async () => {
|
|
26
|
-
const { computeCacheHitRate } = await import("../prompt-cache-optimizer.js");
|
|
27
|
-
assert.equal(computeCacheHitRate({ cacheRead: 900, cacheWrite: 100, input: 100 }), 90);
|
|
28
|
-
assert.equal(computeCacheHitRate({ cacheRead: 0, cacheWrite: 0, input: 100 }), 0);
|
|
29
|
-
assert.equal(computeCacheHitRate({ cacheRead: 0, cacheWrite: 0, input: 0 }), 0);
|
|
30
|
-
assert.equal(computeCacheHitRate({ cacheRead: 500, cacheWrite: 0, input: 500 }), 50);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
// Test structured data savings
|
|
35
|
-
describe("token-optimization: structured data savings", () => {
|
|
36
|
-
it("compact decisions format is shorter than markdown table", async () => {
|
|
37
|
-
const { formatDecisionsCompact, measureSavings } = await import("../structured-data-formatter.js");
|
|
38
|
-
const decisions = [
|
|
39
|
-
{ id: "D001", when_context: "M001/S01", scope: "architecture", decision: "Use SQLite for storage", choice: "WAL mode", rationale: "Built-in, no external deps", revisable: "yes" },
|
|
40
|
-
{ id: "D002", when_context: "M001/S02", scope: "testing", decision: "Unit test all parsers", choice: "node:test", rationale: "Fast, zero-dependency", revisable: "no" },
|
|
41
|
-
];
|
|
42
|
-
const compact = formatDecisionsCompact(decisions);
|
|
43
|
-
// A realistic markdown table equivalent
|
|
44
|
-
const markdown = [
|
|
45
|
-
"| # | When | Scope | Decision | Choice | Rationale | Revisable? |",
|
|
46
|
-
"|---|------|-------|----------|--------|-----------|------------|",
|
|
47
|
-
"| D001 | M001/S01 | architecture | Use SQLite for storage | WAL mode | Built-in, no external deps | yes |",
|
|
48
|
-
"| D002 | M001/S02 | testing | Unit test all parsers | node:test | Fast, zero-dependency | no |",
|
|
49
|
-
].join("\n");
|
|
50
|
-
const savings = measureSavings(compact, markdown);
|
|
51
|
-
assert.ok(savings > 10, `Expected >10% savings, got ${savings}%`);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it("compact requirements format drops low-value fields", async () => {
|
|
55
|
-
const { formatRequirementsCompact } = await import("../structured-data-formatter.js");
|
|
56
|
-
const requirements = [{
|
|
57
|
-
id: "R001", class: "functional", status: "active",
|
|
58
|
-
description: "API response time < 200ms",
|
|
59
|
-
why: "User experience", primary_owner: "S01",
|
|
60
|
-
validation: "Load test P99 < 200ms",
|
|
61
|
-
}];
|
|
62
|
-
const compact = formatRequirementsCompact(requirements);
|
|
63
|
-
assert.ok(!compact.includes("source"), "Should not include source field");
|
|
64
|
-
assert.ok(!compact.includes("supporting_slices"), "Should not include supporting_slices");
|
|
65
|
-
assert.ok(compact.includes("R001"), "Should include requirement ID");
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// Test compression levels
|
|
70
|
-
describe("token-optimization: prompt compression", () => {
|
|
71
|
-
it("light compression removes extra whitespace", async () => {
|
|
72
|
-
const { compressPrompt } = await import("../prompt-compressor.js");
|
|
73
|
-
const input = "Line 1\n\n\n\n\nLine 2\n\n\n\nLine 3";
|
|
74
|
-
const result = compressPrompt(input, { level: "light" });
|
|
75
|
-
assert.ok(result.savingsPercent > 0, "Should have positive savings");
|
|
76
|
-
assert.ok(!result.content.includes("\n\n\n"), "Should collapse multiple blank lines");
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it("moderate compression abbreviates verbose phrases", async () => {
|
|
80
|
-
const { compressPrompt } = await import("../prompt-compressor.js");
|
|
81
|
-
const input = "In order to achieve this, it is important to note that the following steps are required.";
|
|
82
|
-
const result = compressPrompt(input, { level: "moderate" });
|
|
83
|
-
assert.ok(result.compressedChars < result.originalChars, "Should be shorter");
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it("code blocks are preserved during compression", async () => {
|
|
87
|
-
const { compressPrompt } = await import("../prompt-compressor.js");
|
|
88
|
-
const input = "In order to do this:\n\n```typescript\nconst x = 1;\n```\n\nIn order to verify:";
|
|
89
|
-
const result = compressPrompt(input, { level: "aggressive" });
|
|
90
|
-
assert.ok(result.content.includes("const x = 1;"), "Code block should be preserved");
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
// Test summary distillation
|
|
95
|
-
describe("token-optimization: summary distillation", () => {
|
|
96
|
-
it("distills summaries preserving key fields", async () => {
|
|
97
|
-
const { distillSummaries } = await import("../summary-distiller.js");
|
|
98
|
-
const summary = `---
|
|
99
|
-
id: S01
|
|
100
|
-
provides:
|
|
101
|
-
- Core types
|
|
102
|
-
key_files:
|
|
103
|
-
- src/types.ts
|
|
104
|
-
key_decisions:
|
|
105
|
-
- D001
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
# S01: Core Types
|
|
109
|
-
|
|
110
|
-
Built the foundation type system.
|
|
111
|
-
|
|
112
|
-
## What Happened
|
|
113
|
-
|
|
114
|
-
Long prose about implementation details that should be dropped...
|
|
115
|
-
`;
|
|
116
|
-
const result = distillSummaries([summary], 5000);
|
|
117
|
-
assert.ok(result.savingsPercent > 0, "Should have savings");
|
|
118
|
-
assert.ok(result.content.includes("Core types"), "Should preserve provides");
|
|
119
|
-
assert.ok(result.content.includes("src/types.ts"), "Should preserve key_files");
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
// Test semantic chunker
|
|
124
|
-
describe("token-optimization: semantic chunking", () => {
|
|
125
|
-
it("chunks TypeScript code at function boundaries", async () => {
|
|
126
|
-
const { splitIntoChunks } = await import("../semantic-chunker.js");
|
|
127
|
-
const code = `export function alpha() {
|
|
128
|
-
return 1;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export function beta() {
|
|
132
|
-
return 2;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export function gamma() {
|
|
136
|
-
return 3;
|
|
137
|
-
}`;
|
|
138
|
-
const chunks = splitIntoChunks(code);
|
|
139
|
-
assert.ok(chunks.length >= 2, `Expected >=2 chunks, got ${chunks.length}`);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it("scores chunks by relevance to query", async () => {
|
|
143
|
-
const { chunkByRelevance } = await import("../semantic-chunker.js");
|
|
144
|
-
const code = `export function createUser(name: string) {
|
|
145
|
-
return { name, id: generateId() };
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export function deleteDatabase() {
|
|
149
|
-
dropAllTables();
|
|
150
|
-
clearCache();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export function updateUser(id: string, name: string) {
|
|
154
|
-
const user = findUser(id);
|
|
155
|
-
user.name = name;
|
|
156
|
-
return user;
|
|
157
|
-
}`;
|
|
158
|
-
const result = chunkByRelevance(code, "user creation and management", { maxChunks: 2 });
|
|
159
|
-
// The user-related chunks should score higher
|
|
160
|
-
const content = result.chunks.map(c => c.content).join("\n");
|
|
161
|
-
assert.ok(content.includes("createUser") || content.includes("updateUser"),
|
|
162
|
-
"Should include user-related chunks");
|
|
163
|
-
});
|
|
164
|
-
});
|