@chainingintention/pi-web-cn 1.202607.5 → 1.202607.7

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 (128) hide show
  1. package/README.md +3 -0
  2. package/dist/cli.js +283 -315
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client/assets/CodeViewer-DxWBEGHy.js +4 -0
  5. package/dist/client/assets/TerminalPanel-CLBbwrSg.js +184 -0
  6. package/dist/client/assets/UnifiedDiffViewer-CvVtrOUV.js +39 -0
  7. package/dist/client/assets/index-CEswQiQV.js +3149 -0
  8. package/dist/client/assets/vendor-editor-core-vUi74DnD.js +12 -0
  9. package/dist/client/assets/vendor-editor-languages-DoaXUodB.js +46 -0
  10. package/dist/client/assets/vendor-editor-legacy-CYBnW6ZU.js +1 -0
  11. package/dist/client/assets/vendor-terminal-BrP-ENHg.css +1 -0
  12. package/dist/client/assets/vendor-terminal-D8k4UKM2.js +35 -0
  13. package/dist/client/index.html +6 -6
  14. package/dist/client/manifest.webmanifest +4 -4
  15. package/dist/config.js +221 -9
  16. package/dist/config.js.map +1 -1
  17. package/dist/nativeServices/serviceDoctor.js +480 -0
  18. package/dist/nativeServices/serviceDoctor.js.map +1 -0
  19. package/dist/nativeServices/serviceInstall.js +35 -0
  20. package/dist/nativeServices/serviceInstall.js.map +1 -0
  21. package/dist/nativeServices/servicePlan.js +357 -0
  22. package/dist/nativeServices/servicePlan.js.map +1 -0
  23. package/dist/nativeServices/serviceProbe.js +445 -0
  24. package/dist/nativeServices/serviceProbe.js.map +1 -0
  25. package/dist/nativeServices/serviceRendering.js +122 -0
  26. package/dist/nativeServices/serviceRendering.js.map +1 -0
  27. package/dist/pi-web-plugins/updates/pi-web-plugin.js +11 -0
  28. package/dist/plugin-api.d.ts +2 -0
  29. package/dist/server/activeAgentProfileProvider.js +25 -0
  30. package/dist/server/activeAgentProfileProvider.js.map +1 -0
  31. package/dist/server/app.js +63 -16
  32. package/dist/server/app.js.map +1 -1
  33. package/dist/server/browserMessageProjection.js +56 -0
  34. package/dist/server/browserMessageProjection.js.map +1 -0
  35. package/dist/server/configRoutes.js +152 -10
  36. package/dist/server/configRoutes.js.map +1 -1
  37. package/dist/server/machines/machineClient.js +19 -9
  38. package/dist/server/machines/machineClient.js.map +1 -1
  39. package/dist/server/machines/machinePluginProxyRoutes.js +7 -4
  40. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
  41. package/dist/server/machines/machineProxyRoutes.js +16 -4
  42. package/dist/server/machines/machineProxyRoutes.js.map +1 -1
  43. package/dist/server/machines/machineRoutes.js +1 -1
  44. package/dist/server/machines/machineRoutes.js.map +1 -1
  45. package/dist/server/machines/machineService.js +2 -2
  46. package/dist/server/machines/machineService.js.map +1 -1
  47. package/dist/server/managementEmbed.js +28 -11
  48. package/dist/server/managementEmbed.js.map +1 -1
  49. package/dist/server/piPackageRoutes.js +7 -3
  50. package/dist/server/piPackageRoutes.js.map +1 -1
  51. package/dist/server/piPackageService.js +34 -2
  52. package/dist/server/piPackageService.js.map +1 -1
  53. package/dist/server/piWebPluginService.js +48 -12
  54. package/dist/server/piWebPluginService.js.map +1 -1
  55. package/dist/server/piWebReleaseLookupCache.js +37 -0
  56. package/dist/server/piWebReleaseLookupCache.js.map +1 -0
  57. package/dist/server/piWebStatus.js +48 -49
  58. package/dist/server/piWebStatus.js.map +1 -1
  59. package/dist/server/piWebStatusCache.js +19 -6
  60. package/dist/server/piWebStatusCache.js.map +1 -1
  61. package/dist/server/realtime/sessionEventHub.js +2 -1
  62. package/dist/server/realtime/sessionEventHub.js.map +1 -1
  63. package/dist/server/realtime/sessionEventScope.js +0 -3
  64. package/dist/server/realtime/sessionEventScope.js.map +1 -1
  65. package/dist/server/sessiond/sessionDaemonStartup.js +49 -0
  66. package/dist/server/sessiond/sessionDaemonStartup.js.map +1 -0
  67. package/dist/server/sessiond.js +113 -70
  68. package/dist/server/sessiond.js.map +1 -1
  69. package/dist/server/sessions/authProviderOptions.js +23 -22
  70. package/dist/server/sessions/authProviderOptions.js.map +1 -1
  71. package/dist/server/sessions/authRoutes.js +14 -12
  72. package/dist/server/sessions/authRoutes.js.map +1 -1
  73. package/dist/server/sessions/authService.js +28 -22
  74. package/dist/server/sessions/authService.js.map +1 -1
  75. package/dist/server/sessions/oauthLoginFlowService.js +17 -19
  76. package/dist/server/sessions/oauthLoginFlowService.js.map +1 -1
  77. package/dist/server/sessions/piSessionManagerGateway.js +22 -21
  78. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
  79. package/dist/server/sessions/piSessionService.js +261 -111
  80. package/dist/server/sessions/piSessionService.js.map +1 -1
  81. package/dist/server/sessions/projectAuthService.js +135 -0
  82. package/dist/server/sessions/projectAuthService.js.map +1 -0
  83. package/dist/server/sessions/projectSettingsScope.js +263 -0
  84. package/dist/server/sessions/projectSettingsScope.js.map +1 -0
  85. package/dist/server/sessions/sessionArchiveMigration.js +590 -0
  86. package/dist/server/sessions/sessionArchiveMigration.js.map +1 -0
  87. package/dist/server/sessions/sessionArchiveStore.js +7 -4
  88. package/dist/server/sessions/sessionArchiveStore.js.map +1 -1
  89. package/dist/server/sessions/sessionRoutes.js +15 -4
  90. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  91. package/dist/server/sessions/sessionService.js +2 -0
  92. package/dist/server/sessions/sessionService.js.map +1 -0
  93. package/dist/server/sessions/spawnSubsessionTool.js +71 -31
  94. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
  95. package/dist/server/terminals/terminalService.js +2 -2
  96. package/dist/server/terminals/terminalService.js.map +1 -1
  97. package/dist/sessiond/activeAgentProfile.js +31 -0
  98. package/dist/sessiond/activeAgentProfile.js.map +1 -0
  99. package/dist/sessiond/sessionDaemonClient.js +38 -0
  100. package/dist/sessiond/sessionDaemonClient.js.map +1 -1
  101. package/dist/shared/activeAgentProfile.js +76 -0
  102. package/dist/shared/activeAgentProfile.js.map +1 -0
  103. package/dist/shared/apiTypes.d.ts +26 -0
  104. package/dist/shared/apiTypes.js +2 -0
  105. package/dist/shared/apiTypes.js.map +1 -1
  106. package/dist/shared/capabilities.js +5 -0
  107. package/dist/shared/capabilities.js.map +1 -1
  108. package/dist/shared/federatedRoutes.js +1 -0
  109. package/dist/shared/federatedRoutes.js.map +1 -1
  110. package/dist/shared/piWebConfigParsing.js +0 -5
  111. package/dist/shared/piWebConfigParsing.js.map +1 -1
  112. package/dist/shared/piWebStatusParsing.js +6 -0
  113. package/dist/shared/piWebStatusParsing.js.map +1 -1
  114. package/dist/shared/thinkingLevels.d.ts +1 -1
  115. package/dist/shared/thinkingLevels.js +1 -1
  116. package/dist/shared/thinkingLevels.js.map +1 -1
  117. package/docs/config.md +63 -9
  118. package/docs/plugins.md +18 -5
  119. package/package.json +35 -31
  120. package/dist/client/assets/CodeViewer-CfZodNYb.js +0 -4
  121. package/dist/client/assets/TerminalPanel-eua763mA.js +0 -126
  122. package/dist/client/assets/UnifiedDiffViewer-C9-QeGMj.js +0 -34
  123. package/dist/client/assets/index-BiFWXoRZ.js +0 -3084
  124. package/dist/client/assets/vendor-editor-core-C7aWiQy0.js +0 -12
  125. package/dist/client/assets/vendor-editor-languages-EW34FfVy.js +0 -26
  126. package/dist/client/assets/vendor-editor-legacy-B4QLsWF8.js +0 -1
  127. package/dist/client/assets/vendor-terminal-DDGTF8rc.css +0 -1
  128. package/dist/client/assets/vendor-terminal-DjQ08hXu.js +0 -16
@@ -5,9 +5,9 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
6
  <title>PI WEB</title>
7
7
  <meta name="theme-color" content="#0d1117" />
8
- <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
9
- <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
10
- <link rel="manifest" href="/manifest.webmanifest" />
8
+ <link rel="icon" type="image/svg+xml" href="./favicon.svg" />
9
+ <link rel="apple-touch-icon" href="./apple-touch-icon.png" />
10
+ <link rel="manifest" href="./manifest.webmanifest" />
11
11
  <style>
12
12
  :root {
13
13
  color-scheme: dark;
@@ -53,9 +53,9 @@
53
53
  html, body { margin: 0; height: 100%; overflow: hidden; background: var(--pi-bg); color: var(--pi-text); }
54
54
  body { min-height: 100dvh; }
55
55
  </style>
56
- <script type="module" crossorigin src="/assets/index-BiFWXoRZ.js"></script>
57
- <link rel="modulepreload" crossorigin href="/assets/vendor-editor-core-C7aWiQy0.js">
58
- <link rel="modulepreload" crossorigin href="/assets/vendor-editor-languages-EW34FfVy.js">
56
+ <script type="module" crossorigin src="./assets/index-CEswQiQV.js"></script>
57
+ <link rel="modulepreload" crossorigin href="./assets/vendor-editor-core-vUi74DnD.js">
58
+ <link rel="modulepreload" crossorigin href="./assets/vendor-editor-languages-DoaXUodB.js">
59
59
  </head>
60
60
  <body>
61
61
  <pi-web-app></pi-web-app>
@@ -2,20 +2,20 @@
2
2
  "name": "PI WEB",
3
3
  "short_name": "PI WEB",
4
4
  "description": "用于管理持久 Pi Coding Agent 会话的远程 Web 界面和浏览器控制平面。",
5
- "start_url": "/",
6
- "scope": "/",
5
+ "start_url": "./",
6
+ "scope": "./",
7
7
  "display": "standalone",
8
8
  "background_color": "#0d1117",
9
9
  "theme_color": "#0d1117",
10
10
  "icons": [
11
11
  {
12
- "src": "/pwa-icon-192.png",
12
+ "src": "./pwa-icon-192.png",
13
13
  "sizes": "192x192",
14
14
  "type": "image/png",
15
15
  "purpose": "any maskable"
16
16
  },
17
17
  {
18
- "src": "/pwa-icon-512.png",
18
+ "src": "./pwa-icon-512.png",
19
19
  "sizes": "512x512",
20
20
  "type": "image/png",
21
21
  "purpose": "any maskable"
package/dist/config.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { homedir } from "node:os";
3
- import { dirname, join, resolve } from "node:path";
4
- import { isRecord, parseAllowedHostsEnv, parseMaxUploadBytes, parsePathAccessConfig, parsePiWebConfig, parsePort, parseUploadsConfig, piWebConfigRecord } from "./shared/piWebConfigParsing.js";
5
- export { parsePathAccessConfig, parseUploadsConfig };
3
+ import { basename, dirname, isAbsolute, join, normalize, resolve } from "node:path";
4
+ import { isPiCompanionCommand, usesPiCodingAgentStateCompatibility } from "./shared/activeAgentProfile.js";
5
+ import { parsePiWebConfig as parseBasePiWebConfig, piWebConfigRecord as basePiWebConfigRecord } from "./shared/piWebConfigParsing.js";
6
+ export { isPiCompanionCommand };
6
7
  export function defaultPiWebConfigPath(env = process.env) {
7
8
  const xdgConfigHome = env["XDG_CONFIG_HOME"];
8
9
  return join(xdgConfigHome !== undefined && xdgConfigHome !== "" ? xdgConfigHome : join(homedir(), ".config"), "pi-web", "config.json");
@@ -17,6 +18,41 @@ export function defaultPiWebDataDir() {
17
18
  */
18
19
  export const DEFAULT_MAX_UPLOAD_BYTES = 64 * 1024 * 1024;
19
20
  export const DEFAULT_UPLOADS_FOLDER = ".pi-web/uploads";
21
+ export const DEFAULT_AGENT_COMMAND = "pi";
22
+ export const PI_WEB_AGENT_COMMAND_ENV = "PI_WEB_AGENT_COMMAND";
23
+ export const PI_WEB_AGENT_DIR_ENV = "PI_WEB_AGENT_DIR";
24
+ export const PI_WEB_AGENT_SESSION_DIR_ENV = "PI_WEB_AGENT_SESSION_DIR";
25
+ export const PI_CODING_AGENT_DIR_ENV = "PI_CODING_AGENT_DIR";
26
+ export const PI_CODING_AGENT_SESSION_DIR_ENV = "PI_CODING_AGENT_SESSION_DIR";
27
+ export function effectiveAgentConfig(env = process.env, config = {}) {
28
+ const command = parseAgentCommand(envValue(env, PI_WEB_AGENT_COMMAND_ENV) ?? config.agent?.command ?? DEFAULT_AGENT_COMMAND, "agent.command", "environment", "current");
29
+ const configuredDir = envValue(env, PI_WEB_AGENT_DIR_ENV) ?? (usesPiCodingAgentStateCompatibility(command) ? envValue(env, PI_CODING_AGENT_DIR_ENV) : undefined) ?? config.agent?.dir ?? defaultAgentDirForCommand(command, env);
30
+ return {
31
+ command,
32
+ dir: resolveAgentDirPath(configuredDir, env, "agent.dir", "environment"),
33
+ sessionDirEnvKeys: agentSessionDirEnvKeys(command),
34
+ };
35
+ }
36
+ export function agentSessionDirEnvKeys(command = DEFAULT_AGENT_COMMAND) {
37
+ return uniqueStrings([
38
+ PI_WEB_AGENT_SESSION_DIR_ENV,
39
+ ...(usesPiCodingAgentStateCompatibility(command) ? [PI_CODING_AGENT_SESSION_DIR_ENV] : []),
40
+ ]);
41
+ }
42
+ export function agentDirEnvSource(env) {
43
+ if (isEnvSet(env[PI_WEB_AGENT_DIR_ENV]))
44
+ return "pi-web";
45
+ if (isEnvSet(env[PI_CODING_AGENT_DIR_ENV]))
46
+ return "pi-compatibility";
47
+ return undefined;
48
+ }
49
+ export function hasAgentDirEnvOverride(env, command = DEFAULT_AGENT_COMMAND) {
50
+ const source = agentDirEnvSource(env);
51
+ return source === "pi-web" || (source === "pi-compatibility" && usesPiCodingAgentStateCompatibility(command));
52
+ }
53
+ export function hasAgentSessionDirEnvOverride(env, command = DEFAULT_AGENT_COMMAND) {
54
+ return agentSessionDirEnvKeys(command).some((key) => isEnvSet(env[key]));
55
+ }
20
56
  export function effectiveUploadsConfig(config = {}) {
21
57
  return { defaultFolder: config.uploads?.defaultFolder ?? DEFAULT_UPLOADS_FOLDER };
22
58
  }
@@ -54,12 +90,15 @@ export function loadPiWebConfig(options = {}) {
54
90
  return { path, exists: true, config: parsePiWebConfig(parsed, path) };
55
91
  }
56
92
  export function effectivePiWebConfig(options = {}) {
57
- const loaded = loadPiWebConfig(options);
93
+ return resolveEffectivePiWebConfig(loadPiWebConfig(options), options);
94
+ }
95
+ export function resolveEffectivePiWebConfig(loaded, options = {}) {
58
96
  const env = options.env ?? process.env;
59
97
  const host = env["PI_WEB_HOST"];
60
98
  const port = env["PI_WEB_PORT"] ?? env["PORT"];
61
99
  const allowedHosts = env["PI_WEB_ALLOWED_HOSTS"];
62
100
  const maxUpload = env["PI_WEB_MAX_UPLOAD_BYTES"];
101
+ const agent = effectiveAgentConfig(env, loaded.config);
63
102
  return {
64
103
  ...loaded,
65
104
  config: {
@@ -74,6 +113,7 @@ export function effectivePiWebConfig(options = {}) {
74
113
  spawnSessions: spawnSessionsEnabled(env, loaded.config),
75
114
  // Beta capability, resolved off by default.
76
115
  subsessions: subsessionsEnabled(env, loaded.config),
116
+ agent: { command: agent.command, dir: agent.dir },
77
117
  },
78
118
  };
79
119
  }
@@ -81,22 +121,22 @@ export function savePiWebConfig(config, options = {}) {
81
121
  const env = options.env ?? process.env;
82
122
  const path = piWebConfigPath(env, options.cwd ?? process.cwd());
83
123
  const normalized = parsePiWebConfig(piWebConfigRecord(config), path);
84
- const incoming = piWebConfigRecord(normalized);
124
+ effectiveAgentConfig(env, normalized);
85
125
  const existing = readExistingConfigObject(path);
126
+ if (existing["agent"] !== undefined)
127
+ parseAgentConfig(existing["agent"], path);
86
128
  delete existing["host"];
87
129
  delete existing["port"];
88
130
  delete existing["allowedHosts"];
89
131
  delete existing["shortcuts"];
90
132
  delete existing["plugins"];
91
- if ("normalAuth" in incoming)
92
- delete existing["normalAuth"];
93
- delete existing["managementEmbed"];
94
133
  delete existing["pathAccess"];
95
134
  delete existing["uploads"];
96
135
  delete existing["maxUploadBytes"];
97
136
  delete existing["spawnSessions"];
98
137
  delete existing["subsessions"];
99
- const merged = { ...existing, ...incoming };
138
+ delete existing["agent"];
139
+ const merged = { ...existing, ...piWebConfigRecord(normalized) };
100
140
  mkdirSync(dirname(path), { recursive: true });
101
141
  writeFileSync(path, `${JSON.stringify(merged, null, 2)}\n`, "utf8");
102
142
  return { path, exists: true, config: normalized };
@@ -109,6 +149,24 @@ function readExistingConfigObject(path) {
109
149
  throw new Error(`PI WEB config must be a JSON object: ${path}`);
110
150
  return parsed;
111
151
  }
152
+ function piWebConfigRecord(config) {
153
+ return {
154
+ ...basePiWebConfigRecord(config),
155
+ ...(config.agent !== undefined ? { agent: config.agent } : {}),
156
+ };
157
+ }
158
+ function parsePiWebConfig(value, path) {
159
+ return {
160
+ ...parseBasePiWebConfig(value, path),
161
+ ...(value["agent"] !== undefined ? { agent: parseAgentConfig(value["agent"], path) } : {}),
162
+ };
163
+ }
164
+ function parseMaxUploadBytes(value, key, path = "environment") {
165
+ const bytes = typeof value === "number" ? value : typeof value === "string" && value !== "" ? Number(value) : NaN;
166
+ if (!Number.isInteger(bytes) || bytes < 1)
167
+ throw new Error(`PI WEB config ${key} must be a positive integer: ${path}`);
168
+ return bytes;
169
+ }
112
170
  /**
113
171
  * Whether LLMs may start new sessions via the spawn_session tool. On by default
114
172
  * (spawned sessions appear in the session list, so humans notice them); set the
@@ -135,6 +193,160 @@ export function subsessionsEnabled(env = process.env, config = {}) {
135
193
  return fromEnv === "1" || fromEnv.toLowerCase() === "true";
136
194
  return config.subsessions ?? false;
137
195
  }
196
+ function parseString(value, key, path) {
197
+ if (typeof value !== "string" || value === "")
198
+ throw new Error(`PI WEB config ${key} must be a non-empty string: ${path}`);
199
+ return value;
200
+ }
201
+ const AGENT_CONFIG_KEYS = new Set(["command", "dir"]);
202
+ const SAFE_BARE_AGENT_COMMAND_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9._+-]*$/u;
203
+ export function parseAgentConfig(value, path, pathHost = "current") {
204
+ if (!isRecord(value))
205
+ throw new Error(`PI WEB config agent must be an object: ${path}`);
206
+ const unknownKey = Object.keys(value).find((key) => !AGENT_CONFIG_KEYS.has(key));
207
+ if (unknownKey !== undefined)
208
+ throw new Error(`PI WEB config agent contains unknown key ${JSON.stringify(unknownKey)}: ${path}`);
209
+ const command = value["command"];
210
+ const dir = value["dir"];
211
+ return {
212
+ ...(command !== undefined ? { command: parseAgentCommand(command, "agent.command", path, pathHost) } : {}),
213
+ ...(dir !== undefined ? { dir: parseAgentDir(dir, "agent.dir", path, pathHost) } : {}),
214
+ };
215
+ }
216
+ function parseAgentCommand(value, key, path, pathHost) {
217
+ const command = parseString(value, key, path).trim();
218
+ if (!isSafeAgentCommand(command, pathHost)) {
219
+ const absoluteLabel = pathHost === "current" ? "host-absolute" : "absolute";
220
+ throw new Error(`PI WEB config ${key} must be a safe bare executable name or ${absoluteLabel} executable path: ${path}`);
221
+ }
222
+ return command;
223
+ }
224
+ function parseAgentDir(value, key, path, pathHost) {
225
+ const dir = parseString(value, key, path).trim();
226
+ const isAbsoluteDir = pathHost === "current" ? isHostAbsoluteAgentDir(dir) : isPortableAbsoluteAgentPath(dir);
227
+ if (!isAbsoluteDir && !isHomePath(dir, pathHost)) {
228
+ const absoluteLabel = pathHost === "current" ? "a host-absolute" : "an absolute";
229
+ throw new Error(`PI WEB config ${key} must be ${absoluteLabel} path or start with ~: ${path}`);
230
+ }
231
+ return dir;
232
+ }
233
+ function resolveAgentDirPath(value, env, key, path) {
234
+ const parsed = parseAgentDir(value, key, path, "current");
235
+ const expanded = expandHomePath(parsed, env);
236
+ if (!isHostAbsoluteAgentDir(expanded)) {
237
+ throw new Error(`PI WEB config ${key} must resolve to a host-absolute path: ${path}`);
238
+ }
239
+ return normalize(expanded);
240
+ }
241
+ export function isSafeAgentCommandForHost(value) {
242
+ return isSafeAgentCommand(value, "current");
243
+ }
244
+ function isSafeAgentCommand(value, pathHost) {
245
+ if (value === "" || value !== value.trim() || value.includes("\0") || /[\s;&|`$<>]/u.test(value))
246
+ return false;
247
+ if (SAFE_BARE_AGENT_COMMAND_PATTERN.test(value))
248
+ return true;
249
+ if (pathHost === "current")
250
+ return isAbsolute(value) && basename(value) !== "";
251
+ return isAbsoluteLike(value) && value.split(/[\\/]/u).at(-1) !== "";
252
+ }
253
+ export function isHostAbsoluteAgentDir(value) {
254
+ return isSafeAgentDirPath(value) && isAbsolute(value);
255
+ }
256
+ function isPortableAbsoluteAgentPath(value) {
257
+ return isSafeAgentDirPath(value) && isAbsoluteLike(value);
258
+ }
259
+ function isSafeAgentDirPath(value) {
260
+ return value !== "" && value === value.trim() && !hasControlCharacter(value);
261
+ }
262
+ function parsePort(value, key, path = "environment") {
263
+ const port = typeof value === "number" ? value : typeof value === "string" && value !== "" ? Number(value) : NaN;
264
+ if (!Number.isInteger(port) || port < 1 || port > 65535)
265
+ throw new Error(`PI WEB config ${key} must be an integer from 1 to 65535: ${path}`);
266
+ return port;
267
+ }
268
+ function parseAllowedHostsEnv(value) {
269
+ if (value === "true")
270
+ return true;
271
+ return value.split(",").map((host) => host.trim()).filter((host) => host !== "");
272
+ }
273
+ export function parsePathAccessConfig(value, path) {
274
+ if (!isRecord(value))
275
+ throw new Error(`PI WEB config pathAccess must be an object: ${path}`);
276
+ const allowedPaths = value["allowedPaths"];
277
+ return {
278
+ ...(allowedPaths !== undefined ? { allowedPaths: parseAllowedPaths(allowedPaths, path) } : {}),
279
+ };
280
+ }
281
+ function parseAllowedPaths(value, path) {
282
+ if (!isNonEmptyStringArray(value))
283
+ throw new Error(`PI WEB config pathAccess.allowedPaths must be an array of non-empty strings: ${path}`);
284
+ return value;
285
+ }
286
+ export function parseUploadsConfig(value, path) {
287
+ if (!isRecord(value))
288
+ throw new Error(`PI WEB config uploads must be an object: ${path}`);
289
+ const defaultFolder = value["defaultFolder"];
290
+ return {
291
+ ...(defaultFolder !== undefined ? { defaultFolder: parseWorkspaceRelativeFolder(defaultFolder, "uploads.defaultFolder", path) } : {}),
292
+ };
293
+ }
294
+ function parseWorkspaceRelativeFolder(value, key, path) {
295
+ if (typeof value !== "string" || value.trim() === "")
296
+ throw new Error(`PI WEB config ${key} must be a non-empty workspace-relative path: ${path}`);
297
+ if (isAbsoluteLike(value))
298
+ throw new Error(`PI WEB config ${key} must be workspace-relative: ${path}`);
299
+ const parts = value.split(/[\\/]+/).filter((part) => part !== "" && part !== ".");
300
+ if (parts.length === 0)
301
+ throw new Error(`PI WEB config ${key} must be a non-empty workspace-relative path: ${path}`);
302
+ if (parts.some((part) => part === ".."))
303
+ throw new Error(`PI WEB config ${key} must not contain path traversal: ${path}`);
304
+ return parts.join("/");
305
+ }
306
+ function isHomePath(value, pathHost) {
307
+ return value === "~" || value.startsWith("~/") || ((pathHost === "portable" || process.platform === "win32") && value.startsWith("~\\"));
308
+ }
309
+ function expandHomePath(value, env) {
310
+ const home = env["HOME"] !== undefined && env["HOME"] !== "" ? env["HOME"] : homedir();
311
+ if (value === "~")
312
+ return home;
313
+ if (value.startsWith("~/") || (process.platform === "win32" && value.startsWith("~\\")))
314
+ return join(home, value.slice(2));
315
+ return value;
316
+ }
317
+ function defaultAgentDirForCommand(command, env) {
318
+ if (usesPiCodingAgentStateCompatibility(command))
319
+ return expandHomePath("~/.pi/agent", env);
320
+ throw new Error(`PI WEB config agent.dir or ${PI_WEB_AGENT_DIR_ENV} is required when agent.command is ${JSON.stringify(command)}`);
321
+ }
322
+ function envValue(env, key) {
323
+ const value = env[key];
324
+ return value !== undefined && value !== "" ? value : undefined;
325
+ }
326
+ function isEnvSet(value) {
327
+ return value !== undefined && value !== "";
328
+ }
329
+ function uniqueStrings(values) {
330
+ return [...new Set(values)];
331
+ }
332
+ function hasControlCharacter(value) {
333
+ for (const character of value) {
334
+ const code = character.charCodeAt(0);
335
+ if (code < 32 || code === 127)
336
+ return true;
337
+ }
338
+ return false;
339
+ }
340
+ function isAbsoluteLike(value) {
341
+ const withForwardSlashes = value.replace(/\\/g, "/");
342
+ return isAbsolute(value) || withForwardSlashes.startsWith("/") || /^[A-Za-z]:\//.test(withForwardSlashes);
343
+ }
344
+ function isRecord(value) {
345
+ return typeof value === "object" && value !== null && !Array.isArray(value);
346
+ }
347
+ function isNonEmptyStringArray(value) {
348
+ return Array.isArray(value) && value.every((item) => typeof item === "string" && item !== "");
349
+ }
138
350
  export function examplePiWebConfig(config = {}) {
139
351
  return `${JSON.stringify({ host: config.host ?? "127.0.0.1", port: config.port ?? 8504, allowedHosts: config.allowedHosts ?? [] }, null, 2)}\n`;
140
352
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}