gsd-pi 2.70.1-dev.bef631a → 2.70.1-dev.ec24142

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 (89) hide show
  1. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +127 -30
  2. package/dist/resources/extensions/get-secrets-from-user.js +17 -1
  3. package/dist/web/standalone/.next/BUILD_ID +1 -1
  4. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  5. package/dist/web/standalone/.next/build-manifest.json +2 -2
  6. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  7. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  8. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  9. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  11. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  12. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  16. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  17. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/index.html +1 -1
  24. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  25. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  27. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  30. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  31. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  32. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  33. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  34. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  35. package/package.json +1 -1
  36. package/packages/mcp-server/dist/env-writer.d.ts +39 -0
  37. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -0
  38. package/packages/mcp-server/dist/env-writer.js +158 -0
  39. package/packages/mcp-server/dist/env-writer.js.map +1 -0
  40. package/packages/mcp-server/dist/server.d.ts +11 -2
  41. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  42. package/packages/mcp-server/dist/server.js +102 -2
  43. package/packages/mcp-server/dist/server.js.map +1 -1
  44. package/packages/mcp-server/src/env-writer.test.ts +280 -0
  45. package/packages/mcp-server/src/env-writer.ts +183 -0
  46. package/packages/mcp-server/src/secure-env-collect.test.ts +265 -0
  47. package/packages/mcp-server/src/server.ts +137 -3
  48. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.d.ts +2 -0
  49. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.d.ts.map +1 -0
  50. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +187 -0
  51. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -0
  52. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +2 -0
  53. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  54. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  55. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts +1 -0
  56. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  57. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js +1 -0
  58. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -1
  59. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  60. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +78 -21
  61. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  62. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +1 -1
  63. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  64. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
  65. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  66. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -0
  67. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  68. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  69. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +220 -0
  70. package/packages/pi-coding-agent/src/core/extensions/types.ts +2 -0
  71. package/packages/pi-coding-agent/src/modes/interactive/components/extension-input.ts +2 -0
  72. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +102 -27
  73. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +1 -1
  74. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
  75. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +1 -0
  76. package/packages/pi-tui/dist/components/__tests__/input.test.js +9 -0
  77. package/packages/pi-tui/dist/components/__tests__/input.test.js.map +1 -1
  78. package/packages/pi-tui/dist/components/input.d.ts +2 -0
  79. package/packages/pi-tui/dist/components/input.d.ts.map +1 -1
  80. package/packages/pi-tui/dist/components/input.js +7 -4
  81. package/packages/pi-tui/dist/components/input.js.map +1 -1
  82. package/packages/pi-tui/src/components/__tests__/input.test.ts +11 -0
  83. package/packages/pi-tui/src/components/input.ts +7 -4
  84. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +164 -31
  85. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +112 -0
  86. package/src/resources/extensions/get-secrets-from-user.ts +24 -1
  87. package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +45 -0
  88. /package/dist/web/standalone/.next/static/{UlX0WGGZ8aBPN0uSZ5Ki4 → 20e8bFnNjxQJflHNodEve}/_buildManifest.js +0 -0
  89. /package/dist/web/standalone/.next/static/{UlX0WGGZ8aBPN0uSZ5Ki4 → 20e8bFnNjxQJflHNodEve}/_ssgManifest.js +0 -0
@@ -126,7 +126,7 @@ async function collectOneSecret(
126
126
  ): Promise<string | null> {
127
127
  if (!ctx.hasUI) return null;
128
128
 
129
- return ctx.ui.custom((tui: any, theme: any, _kb: any, done: (r: string | null) => void) => {
129
+ const customResult = await ctx.ui.custom((tui: any, theme: any, _kb: any, done: (r: string | null) => void) => {
130
130
  let value = "";
131
131
  let cachedLines: string[] | undefined;
132
132
 
@@ -223,6 +223,29 @@ async function collectOneSecret(
223
223
  handleInput,
224
224
  };
225
225
  });
226
+
227
+ // RPC/web surfaces may not implement ctx.ui.custom(). Fall back to a
228
+ // standard input prompt so users can still provide the secret.
229
+ if (customResult !== undefined) {
230
+ return customResult;
231
+ }
232
+
233
+ if (typeof ctx.ui?.input !== "function") {
234
+ return null;
235
+ }
236
+
237
+ const inputTitle = `Secure value for ${keyName} (${pageIndex + 1}/${totalPages})`;
238
+ const inputPlaceholder = hint || "Enter secret value";
239
+ const inputResult = await ctx.ui.input(
240
+ inputTitle,
241
+ inputPlaceholder,
242
+ { secure: true },
243
+ );
244
+ if (typeof inputResult !== "string") {
245
+ return null;
246
+ }
247
+ const trimmed = inputResult.trim();
248
+ return trimmed.length > 0 ? trimmed : null;
226
249
  }
227
250
 
228
251
  /**
@@ -317,3 +317,48 @@ test("secure_env_collect #2997: null from ctx.ui.custom() is still treated as sk
317
317
  "Key returning null must NOT be in applied list",
318
318
  );
319
319
  });
320
+
321
+ test("secure_env_collect: falls back to secure input prompt when custom UI is unavailable", async (t) => {
322
+ const { collectSecretsFromManifest } = await loadOrchestrator();
323
+
324
+ const tmp = makeTempDir("sec-input-fallback-test");
325
+ t.after(() => {
326
+ rmSync(tmp, { recursive: true, force: true });
327
+ });
328
+
329
+ const manifest = makeManifest([
330
+ { key: "SECRET_FROM_INPUT_FALLBACK", status: "pending", formatHint: "starts with sk-" },
331
+ ]);
332
+ await writeManifestFile(tmp, manifest);
333
+
334
+ let callIndex = 0;
335
+ const inputCalls: Array<{ title: string; placeholder?: string; opts?: { secure?: boolean } }> = [];
336
+ const mockCtx = {
337
+ cwd: tmp,
338
+ hasUI: true,
339
+ ui: {
340
+ custom: async (_factory: any) => {
341
+ callIndex++;
342
+ if (callIndex <= 1) return null; // summary screen dismiss
343
+ return undefined; // collect screen unavailable on this surface
344
+ },
345
+ input: async (title: string, placeholder?: string, opts?: { secure?: boolean }) => {
346
+ inputCalls.push({ title, placeholder, opts });
347
+ return " sk-test-fallback-value ";
348
+ },
349
+ },
350
+ };
351
+
352
+ const result = await collectSecretsFromManifest(tmp, "M001", mockCtx as any);
353
+
354
+ assert.ok(
355
+ result.applied.includes("SECRET_FROM_INPUT_FALLBACK"),
356
+ "Fallback input should collect and apply the key",
357
+ );
358
+ assert.ok(
359
+ !result.skipped.includes("SECRET_FROM_INPUT_FALLBACK"),
360
+ "Fallback input should not mark the key as skipped",
361
+ );
362
+ assert.equal(inputCalls.length, 1, "Fallback input should be requested once");
363
+ assert.equal(inputCalls[0]?.opts?.secure, true, "Fallback input should request secure entry when supported");
364
+ });