@hyperdreamer/pi-webui 1.6.1

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 (276) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +148 -0
  3. package/dist/cli.js +975 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/client/apple-touch-icon.png +0 -0
  6. package/dist/client/assets/CodeViewer-aB4ZVzEu.js +4 -0
  7. package/dist/client/assets/UnifiedDiffViewer-f8X7aTkU.js +39 -0
  8. package/dist/client/assets/index-Cffeusjy.js +6022 -0
  9. package/dist/client/assets/vendor-editor-core-vUi74DnD.js +12 -0
  10. package/dist/client/assets/vendor-editor-languages-DoaXUodB.js +46 -0
  11. package/dist/client/assets/vendor-editor-legacy-CYBnW6ZU.js +1 -0
  12. package/dist/client/assets/vendor-terminal-BrP-ENHg.css +1 -0
  13. package/dist/client/assets/vendor-terminal-D8k4UKM2.js +35 -0
  14. package/dist/client/favicon.svg +8 -0
  15. package/dist/client/index.html +65 -0
  16. package/dist/client/manifest.webmanifest +24 -0
  17. package/dist/client/pwa-icon-192.png +0 -0
  18. package/dist/client/pwa-icon-512.png +0 -0
  19. package/dist/config.js +417 -0
  20. package/dist/config.js.map +1 -0
  21. package/dist/docker/piWebUiDockerCommandPlan.js +211 -0
  22. package/dist/docker/piWebUiDockerCommandPlan.js.map +1 -0
  23. package/dist/nativeServices/serviceDoctor.js +480 -0
  24. package/dist/nativeServices/serviceDoctor.js.map +1 -0
  25. package/dist/nativeServices/serviceInstall.js +35 -0
  26. package/dist/nativeServices/serviceInstall.js.map +1 -0
  27. package/dist/nativeServices/servicePlan.js +358 -0
  28. package/dist/nativeServices/servicePlan.js.map +1 -0
  29. package/dist/nativeServices/serviceProbe.js +447 -0
  30. package/dist/nativeServices/serviceProbe.js.map +1 -0
  31. package/dist/nativeServices/serviceRendering.js +122 -0
  32. package/dist/nativeServices/serviceRendering.js.map +1 -0
  33. package/dist/pi-webui-plugins/info/package.json +9 -0
  34. package/dist/pi-webui-plugins/info/pi-webui-plugin.js +51 -0
  35. package/dist/pi-webui-plugins/updates/package.json +9 -0
  36. package/dist/pi-webui-plugins/updates/pi-webui-plugin.js +185 -0
  37. package/dist/pi-webui-plugins/updates/updatesLogic.js +97 -0
  38. package/dist/pi-webui-plugins/workspace-tasks/config.js +91 -0
  39. package/dist/pi-webui-plugins/workspace-tasks/package.json +9 -0
  40. package/dist/pi-webui-plugins/workspace-tasks/pi-webui-plugin.js +48 -0
  41. package/dist/pi-webui-plugins/workspace-tasks/taskRunner.js +12 -0
  42. package/dist/pi-webui-plugins/workspace-tasks/tasksPanelElement.js +288 -0
  43. package/dist/pi-webui-plugins/workspace-tasks/workspaceTasksClient.js +47 -0
  44. package/dist/piWebUiVersionReport.js +225 -0
  45. package/dist/piWebUiVersionReport.js.map +1 -0
  46. package/dist/plugin-api/unstable.d.ts +22 -0
  47. package/dist/plugin-api.d.ts +199 -0
  48. package/dist/server/activeAgentProfileProvider.js +25 -0
  49. package/dist/server/activeAgentProfileProvider.js.map +1 -0
  50. package/dist/server/activity/workspaceActivityRoutes.js +4 -0
  51. package/dist/server/activity/workspaceActivityRoutes.js.map +1 -0
  52. package/dist/server/activity/workspaceActivityService.js +98 -0
  53. package/dist/server/activity/workspaceActivityService.js.map +1 -0
  54. package/dist/server/app.js +211 -0
  55. package/dist/server/app.js.map +1 -0
  56. package/dist/server/browserMessageProjection.js +56 -0
  57. package/dist/server/browserMessageProjection.js.map +1 -0
  58. package/dist/server/configRoutes.js +309 -0
  59. package/dist/server/configRoutes.js.map +1 -0
  60. package/dist/server/diagnostics/nodePtyNativeModule.js +36 -0
  61. package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -0
  62. package/dist/server/diagnostics/nodePtySpawnHelper.js +135 -0
  63. package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -0
  64. package/dist/server/git/gitEnv.js +15 -0
  65. package/dist/server/git/gitEnv.js.map +1 -0
  66. package/dist/server/git/gitService.js +123 -0
  67. package/dist/server/git/gitService.js.map +1 -0
  68. package/dist/server/gitRoutes.js +23 -0
  69. package/dist/server/gitRoutes.js.map +1 -0
  70. package/dist/server/index.js +7 -0
  71. package/dist/server/index.js.map +1 -0
  72. package/dist/server/machines/machineClient.js +172 -0
  73. package/dist/server/machines/machineClient.js.map +1 -0
  74. package/dist/server/machines/machinePluginProxyRoutes.js +190 -0
  75. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -0
  76. package/dist/server/machines/machineProxyRoutes.js +172 -0
  77. package/dist/server/machines/machineProxyRoutes.js.map +1 -0
  78. package/dist/server/machines/machineRoutes.js +56 -0
  79. package/dist/server/machines/machineRoutes.js.map +1 -0
  80. package/dist/server/machines/machineService.js +238 -0
  81. package/dist/server/machines/machineService.js.map +1 -0
  82. package/dist/server/machines/machineStore.js +128 -0
  83. package/dist/server/machines/machineStore.js.map +1 -0
  84. package/dist/server/models/modelsConfigRoutes.js +40 -0
  85. package/dist/server/models/modelsConfigRoutes.js.map +1 -0
  86. package/dist/server/models/modelsConfigService.js +339 -0
  87. package/dist/server/models/modelsConfigService.js.map +1 -0
  88. package/dist/server/piPackagePluginsConfigRoutes.js +86 -0
  89. package/dist/server/piPackagePluginsConfigRoutes.js.map +1 -0
  90. package/dist/server/piPackagePluginsConfigService.js +311 -0
  91. package/dist/server/piPackagePluginsConfigService.js.map +1 -0
  92. package/dist/server/piPackageRoutes.js +91 -0
  93. package/dist/server/piPackageRoutes.js.map +1 -0
  94. package/dist/server/piPackageService.js +101 -0
  95. package/dist/server/piPackageService.js.map +1 -0
  96. package/dist/server/piWebUiPluginService.js +326 -0
  97. package/dist/server/piWebUiPluginService.js.map +1 -0
  98. package/dist/server/piWebUiReleaseLookupCache.js +37 -0
  99. package/dist/server/piWebUiReleaseLookupCache.js.map +1 -0
  100. package/dist/server/piWebUiStatus.js +622 -0
  101. package/dist/server/piWebUiStatus.js.map +1 -0
  102. package/dist/server/piWebUiStatusCache.js +45 -0
  103. package/dist/server/piWebUiStatusCache.js.map +1 -0
  104. package/dist/server/projects/directorySuggestions.js +37 -0
  105. package/dist/server/projects/directorySuggestions.js.map +1 -0
  106. package/dist/server/projects/projectService.js +31 -0
  107. package/dist/server/projects/projectService.js.map +1 -0
  108. package/dist/server/realtime/sessionEventHub.js +70 -0
  109. package/dist/server/realtime/sessionEventHub.js.map +1 -0
  110. package/dist/server/sessiond/sessionDaemonStartup.js +49 -0
  111. package/dist/server/sessiond/sessionDaemonStartup.js.map +1 -0
  112. package/dist/server/sessiond/sessionProxyRoutes.js +87 -0
  113. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -0
  114. package/dist/server/sessiond/skillsGithubToken.js +7 -0
  115. package/dist/server/sessiond/skillsGithubToken.js.map +1 -0
  116. package/dist/server/sessiond.js +152 -0
  117. package/dist/server/sessiond.js.map +1 -0
  118. package/dist/server/sessions/attachmentService.js +119 -0
  119. package/dist/server/sessions/attachmentService.js.map +1 -0
  120. package/dist/server/sessions/authProviderOptions.js +50 -0
  121. package/dist/server/sessions/authProviderOptions.js.map +1 -0
  122. package/dist/server/sessions/authRoutes.js +69 -0
  123. package/dist/server/sessions/authRoutes.js.map +1 -0
  124. package/dist/server/sessions/authService.js +134 -0
  125. package/dist/server/sessions/authService.js.map +1 -0
  126. package/dist/server/sessions/builtinCommands.js +27 -0
  127. package/dist/server/sessions/builtinCommands.js.map +1 -0
  128. package/dist/server/sessions/editPreview.js +196 -0
  129. package/dist/server/sessions/editPreview.js.map +1 -0
  130. package/dist/server/sessions/messagePaging.js +43 -0
  131. package/dist/server/sessions/messagePaging.js.map +1 -0
  132. package/dist/server/sessions/oauthLoginFlowService.js +349 -0
  133. package/dist/server/sessions/oauthLoginFlowService.js.map +1 -0
  134. package/dist/server/sessions/piSessionManagerGateway.js +115 -0
  135. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -0
  136. package/dist/server/sessions/piSessionService.js +3230 -0
  137. package/dist/server/sessions/piSessionService.js.map +1 -0
  138. package/dist/server/sessions/plainTextTheme.js +112 -0
  139. package/dist/server/sessions/plainTextTheme.js.map +1 -0
  140. package/dist/server/sessions/sessionArchiveMigration.js +590 -0
  141. package/dist/server/sessions/sessionArchiveMigration.js.map +1 -0
  142. package/dist/server/sessions/sessionArchiveStore.js +262 -0
  143. package/dist/server/sessions/sessionArchiveStore.js.map +1 -0
  144. package/dist/server/sessions/sessionArchiveTree.js +35 -0
  145. package/dist/server/sessions/sessionArchiveTree.js.map +1 -0
  146. package/dist/server/sessions/sessionCleanup.js +157 -0
  147. package/dist/server/sessions/sessionCleanup.js.map +1 -0
  148. package/dist/server/sessions/sessionCommandService.js +313 -0
  149. package/dist/server/sessions/sessionCommandService.js.map +1 -0
  150. package/dist/server/sessions/sessionDefaultsRoutes.js +65 -0
  151. package/dist/server/sessions/sessionDefaultsRoutes.js.map +1 -0
  152. package/dist/server/sessions/sessionDefaultsService.js +90 -0
  153. package/dist/server/sessions/sessionDefaultsService.js.map +1 -0
  154. package/dist/server/sessions/sessionHistoryExport.js +115 -0
  155. package/dist/server/sessions/sessionHistoryExport.js.map +1 -0
  156. package/dist/server/sessions/sessionMetadataStore.js +102 -0
  157. package/dist/server/sessions/sessionMetadataStore.js.map +1 -0
  158. package/dist/server/sessions/sessionNameGenerator.js +90 -0
  159. package/dist/server/sessions/sessionNameGenerator.js.map +1 -0
  160. package/dist/server/sessions/sessionNotificationStore.js +484 -0
  161. package/dist/server/sessions/sessionNotificationStore.js.map +1 -0
  162. package/dist/server/sessions/sessionRoutes.js +590 -0
  163. package/dist/server/sessions/sessionRoutes.js.map +1 -0
  164. package/dist/server/sessions/sessionRuntimeStore.js +2 -0
  165. package/dist/server/sessions/sessionRuntimeStore.js.map +1 -0
  166. package/dist/server/sessions/sessionService.js +2 -0
  167. package/dist/server/sessions/sessionService.js.map +1 -0
  168. package/dist/server/sessions/sessionTreeProjection.js +250 -0
  169. package/dist/server/sessions/sessionTreeProjection.js.map +1 -0
  170. package/dist/server/sessions/sessionUnreadStore.js +520 -0
  171. package/dist/server/sessions/sessionUnreadStore.js.map +1 -0
  172. package/dist/server/sessions/spawnSessionTool.js +41 -0
  173. package/dist/server/sessions/spawnSessionTool.js.map +1 -0
  174. package/dist/server/sessions/spawnSubsessionTool.js +214 -0
  175. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -0
  176. package/dist/server/sessions/spawnTargetResolver.js +36 -0
  177. package/dist/server/sessions/spawnTargetResolver.js.map +1 -0
  178. package/dist/server/sessions/subsessionTranscript.js +235 -0
  179. package/dist/server/sessions/subsessionTranscript.js.map +1 -0
  180. package/dist/server/skills/runNpx.js +30 -0
  181. package/dist/server/skills/runNpx.js.map +1 -0
  182. package/dist/server/skills/skillLock.js +115 -0
  183. package/dist/server/skills/skillLock.js.map +1 -0
  184. package/dist/server/skills/skillUpdates.js +194 -0
  185. package/dist/server/skills/skillUpdates.js.map +1 -0
  186. package/dist/server/skills/skillsConfigRoutes.js +64 -0
  187. package/dist/server/skills/skillsConfigRoutes.js.map +1 -0
  188. package/dist/server/skills/skillsConfigService.js +391 -0
  189. package/dist/server/skills/skillsConfigService.js.map +1 -0
  190. package/dist/server/storage/projectStore.js +88 -0
  191. package/dist/server/storage/projectStore.js.map +1 -0
  192. package/dist/server/systemInfoRoutes.js +265 -0
  193. package/dist/server/systemInfoRoutes.js.map +1 -0
  194. package/dist/server/terminalProxyRoutes.js +140 -0
  195. package/dist/server/terminalProxyRoutes.js.map +1 -0
  196. package/dist/server/terminals/terminalRoutes.js +155 -0
  197. package/dist/server/terminals/terminalRoutes.js.map +1 -0
  198. package/dist/server/terminals/terminalService.js +305 -0
  199. package/dist/server/terminals/terminalService.js.map +1 -0
  200. package/dist/server/terminals/terminalSize.js +17 -0
  201. package/dist/server/terminals/terminalSize.js.map +1 -0
  202. package/dist/server/types.js +2 -0
  203. package/dist/server/types.js.map +1 -0
  204. package/dist/server/webSocketBridge.js +32 -0
  205. package/dist/server/webSocketBridge.js.map +1 -0
  206. package/dist/server/workingDirectory.js +44 -0
  207. package/dist/server/workingDirectory.js.map +1 -0
  208. package/dist/server/workspaceExplorerRoutes.js +109 -0
  209. package/dist/server/workspaceExplorerRoutes.js.map +1 -0
  210. package/dist/server/workspaces/effectivePathAccess.js +27 -0
  211. package/dist/server/workspaces/effectivePathAccess.js.map +1 -0
  212. package/dist/server/workspaces/fileContentService.js +181 -0
  213. package/dist/server/workspaces/fileContentService.js.map +1 -0
  214. package/dist/server/workspaces/fileSuggestions.js +520 -0
  215. package/dist/server/workspaces/fileSuggestions.js.map +1 -0
  216. package/dist/server/workspaces/fileTreeService.js +35 -0
  217. package/dist/server/workspaces/fileTreeService.js.map +1 -0
  218. package/dist/server/workspaces/gitWorktreeDiscovery.js +34 -0
  219. package/dist/server/workspaces/gitWorktreeDiscovery.js.map +1 -0
  220. package/dist/server/workspaces/imagePreviewService.js +40 -0
  221. package/dist/server/workspaces/imagePreviewService.js.map +1 -0
  222. package/dist/server/workspaces/pathAccessPolicy.js +90 -0
  223. package/dist/server/workspaces/pathAccessPolicy.js.map +1 -0
  224. package/dist/server/workspaces/pathSafety.js +45 -0
  225. package/dist/server/workspaces/pathSafety.js.map +1 -0
  226. package/dist/server/workspaces/projectPiWebUiConfig.js +61 -0
  227. package/dist/server/workspaces/projectPiWebUiConfig.js.map +1 -0
  228. package/dist/server/workspaces/workspaceContext.js +8 -0
  229. package/dist/server/workspaces/workspaceContext.js.map +1 -0
  230. package/dist/server/workspaces/workspaceDeletionRoutes.js +113 -0
  231. package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -0
  232. package/dist/server/workspaces/workspaceService.js +39 -0
  233. package/dist/server/workspaces/workspaceService.js.map +1 -0
  234. package/dist/sessiond/activeAgentProfile.js +31 -0
  235. package/dist/sessiond/activeAgentProfile.js.map +1 -0
  236. package/dist/sessiond/config.js +9 -0
  237. package/dist/sessiond/config.js.map +1 -0
  238. package/dist/sessiond/sessionDaemonClient.js +103 -0
  239. package/dist/sessiond/sessionDaemonClient.js.map +1 -0
  240. package/dist/shared/activeAgentProfile.js +76 -0
  241. package/dist/shared/activeAgentProfile.js.map +1 -0
  242. package/dist/shared/activity.js +11 -0
  243. package/dist/shared/activity.js.map +1 -0
  244. package/dist/shared/apiTypes.d.ts +1212 -0
  245. package/dist/shared/apiTypes.js +25 -0
  246. package/dist/shared/apiTypes.js.map +1 -0
  247. package/dist/shared/capabilities.js +69 -0
  248. package/dist/shared/capabilities.js.map +1 -0
  249. package/dist/shared/federatedRoutes.js +109 -0
  250. package/dist/shared/federatedRoutes.js.map +1 -0
  251. package/dist/shared/machinePluginIds.js +41 -0
  252. package/dist/shared/machinePluginIds.js.map +1 -0
  253. package/dist/shared/piWebUiStatusParsing.js +108 -0
  254. package/dist/shared/piWebUiStatusParsing.js.map +1 -0
  255. package/dist/shared/pluginIds.js +5 -0
  256. package/dist/shared/pluginIds.js.map +1 -0
  257. package/dist/shared/promptAttachments.js +92 -0
  258. package/dist/shared/promptAttachments.js.map +1 -0
  259. package/dist/shared/thinkingLevels.d.ts +27 -0
  260. package/dist/shared/thinkingLevels.js +31 -0
  261. package/dist/shared/thinkingLevels.js.map +1 -0
  262. package/dist/shared/workspaceDeletion.js +12 -0
  263. package/dist/shared/workspaceDeletion.js.map +1 -0
  264. package/dist/shared/workspaceFiles.js +3 -0
  265. package/dist/shared/workspaceFiles.js.map +1 -0
  266. package/docs/assets/favicon.svg +8 -0
  267. package/docs/assets/pi-webui-banner.png +0 -0
  268. package/docs/assets/pi-webui-desktop.png +0 -0
  269. package/docs/assets/pi-webui-mobile.png +0 -0
  270. package/docs/assets/pi-webui-tablet.png +0 -0
  271. package/docs/config.md +265 -0
  272. package/docs/plugins.md +988 -0
  273. package/extensions/pi-webui.ts +133 -0
  274. package/package.json +143 -0
  275. package/plugin-api/unstable.d.ts +1 -0
  276. package/plugin-api.d.ts +1 -0
@@ -0,0 +1,1212 @@
1
+ export type MachineKind = "local" | "remote";
2
+ export type MachineStatus = "unknown" | "online" | "offline" | "error";
3
+ export declare const PI_WEBUI_CAPABILITIES: {
4
+ readonly sessionsDeleteArchived: "sessions.deleteArchived";
5
+ readonly sessionsBulkMutations: "sessions.bulkMutations";
6
+ readonly sessionsCleanup: "sessions.cleanup";
7
+ readonly sessionsReload: "sessions.reload";
8
+ readonly sessionsClearQueue: "sessions.clearQueue";
9
+ readonly sessionsSystemPrompt: "sessions.systemPrompt";
10
+ readonly sessionsPersistedState: "sessions.persistedState";
11
+ readonly sessionsNotifications: "sessions.notifications";
12
+ readonly sessionsUnread: "sessions.unread";
13
+ readonly promptAttachments: "prompt.attachments";
14
+ readonly workspaceFileSuggestions: "workspace.fileSuggestions";
15
+ readonly piPackagesManage: "piPackages.manage";
16
+ readonly selectedMachineSettings: "settings.selectedMachine";
17
+ readonly agentProfileConfig: "settings.agentProfile";
18
+ };
19
+ export type PiWebUiCapability = typeof PI_WEBUI_CAPABILITIES[keyof typeof PI_WEBUI_CAPABILITIES];
20
+ export interface Machine {
21
+ id: string;
22
+ name: string;
23
+ kind: MachineKind;
24
+ baseUrl?: string;
25
+ createdAt: string;
26
+ updatedAt: string;
27
+ status?: MachineStatus;
28
+ statusMessage?: string;
29
+ }
30
+ export interface MachineHealth {
31
+ machineId: string;
32
+ ok: boolean;
33
+ checkedAt: string;
34
+ status?: MachineStatus;
35
+ web?: PiWebUiComponentStatus;
36
+ sessiond?: PiWebUiComponentStatus;
37
+ error?: string;
38
+ }
39
+ export interface MachineRuntime {
40
+ machineId: string;
41
+ ok: boolean;
42
+ checkedAt: string;
43
+ packageName?: string;
44
+ generatedAt?: string;
45
+ components?: PiWebUiRuntimeResponse["components"];
46
+ capabilities?: PiWebUiCapability[];
47
+ error?: string;
48
+ }
49
+ export type PiWebUiShortcutConfig = Record<string, string | null>;
50
+ export type PiWebUiPluginSettings = Record<string, unknown>;
51
+ export type PiWebUiPluginConfigMap = Record<string, PiWebUiPluginConfig>;
52
+ export interface PiWebUiPluginConfig {
53
+ enabled?: boolean;
54
+ settings?: PiWebUiPluginSettings;
55
+ [key: string]: unknown;
56
+ }
57
+ export interface PiWebUiPathAccessConfig {
58
+ allowedPaths?: string[];
59
+ }
60
+ export interface PiWebUiUploadsConfig {
61
+ defaultFolder?: string;
62
+ }
63
+ export interface PiWebUiAgentConfig {
64
+ /** Pi-compatible companion CLI used for diagnostics and safe package-managed updates. */
65
+ command?: string;
66
+ /** Pi-compatible profile directory containing auth.json, models.json, settings.json, and sessions/. */
67
+ dir?: string;
68
+ }
69
+ export interface PiWebUiConfigValues {
70
+ host?: string;
71
+ port?: number;
72
+ allowedHosts?: string[] | true;
73
+ shortcuts?: PiWebUiShortcutConfig;
74
+ plugins?: PiWebUiPluginConfigMap;
75
+ /** External filesystem roots PI WEBUI may expose outside a workspace. */
76
+ pathAccess?: PiWebUiPathAccessConfig;
77
+ /** Workspace-relative defaults for manual file uploads. */
78
+ uploads?: PiWebUiUploadsConfig;
79
+ /** Maximum accepted HTTP request body size in bytes (uploads/attachments). */
80
+ maxUploadBytes?: number;
81
+ /** When true, LLMs can start new sessions via the spawn_session tool. */
82
+ spawnSessions?: boolean;
83
+ /**
84
+ * Beta: when true, LLMs can start tracked child sessions via the
85
+ * spawn_subsession / list_subsessions / check_subsession / read_subsession
86
+ * tools. Off by default
87
+ * while the capability stabilizes. Requires spawnSessions to be enabled.
88
+ */
89
+ subsessions?: boolean;
90
+ /** Desired Pi-compatible agent profile and companion CLI (Pi by default). */
91
+ agent?: PiWebUiAgentConfig;
92
+ }
93
+ export type PiWebUiPluginScope = "bundled" | "local" | "user" | "project";
94
+ export interface PiWebUiPluginInfo {
95
+ id: string;
96
+ module: string;
97
+ source: string;
98
+ scope: PiWebUiPluginScope;
99
+ machineSpecific: boolean;
100
+ enabled: boolean;
101
+ }
102
+ export interface PiWebUiPluginsResponse {
103
+ plugins: PiWebUiPluginInfo[];
104
+ }
105
+ export type PiPackageScope = "user" | "project";
106
+ export interface PiPackageInfo {
107
+ source: string;
108
+ scope: PiPackageScope;
109
+ filtered: boolean;
110
+ installedPath?: string;
111
+ }
112
+ export interface PiPackagesResponse {
113
+ packages: PiPackageInfo[];
114
+ }
115
+ export interface PiPackageInstallRequest {
116
+ source: string;
117
+ }
118
+ export interface PiPackageRemoveRequest {
119
+ source: string;
120
+ /** Optional known scope from a listed package; not an install-location picker. */
121
+ scope?: PiPackageScope;
122
+ }
123
+ export interface PiPackageUpdateRequest {
124
+ /** Omit to update all configured Pi packages. */
125
+ source?: string;
126
+ }
127
+ export type PiPackageMutationAction = "install" | "remove" | "update";
128
+ export interface PiPackageMutationResponse extends PiPackagesResponse {
129
+ action: PiPackageMutationAction;
130
+ source?: string;
131
+ scope?: PiPackageScope;
132
+ removed?: boolean;
133
+ }
134
+ /** UI-facing scope labels for Pi packages resolved in a selected workspace. */
135
+ export type PiPackagePluginScope = "global" | "project";
136
+ export type PiPackagePluginResourceKind = "extension" | "skill" | "prompt" | "theme";
137
+ export type PiPackagePluginStatus = "loaded" | "installed" | "missing" | "disabled";
138
+ export type PiPackagePluginAction = "install" | "remove" | "update" | "disable" | "enable";
139
+ export interface PiPackagePluginResourceCounts {
140
+ extensions: number;
141
+ skills: number;
142
+ prompts: number;
143
+ themes: number;
144
+ }
145
+ export interface PiPackagePluginDiagnostic {
146
+ type: "warning" | "error";
147
+ message: string;
148
+ source?: string;
149
+ path?: string;
150
+ }
151
+ export interface PiPackagePluginResourceInfo {
152
+ kind: PiPackagePluginResourceKind;
153
+ name: string;
154
+ path: string;
155
+ relativePath: string;
156
+ }
157
+ /** A configured Pi package together with the resources it resolves for a workspace. */
158
+ export interface PiPackagePluginInfo {
159
+ source: string;
160
+ scope: PiPackagePluginScope;
161
+ filtered: boolean;
162
+ disabled: boolean;
163
+ installedPath?: string;
164
+ packageName?: string;
165
+ version?: string;
166
+ configuredVersion?: string;
167
+ counts: PiPackagePluginResourceCounts;
168
+ resources: PiPackagePluginResourceInfo[];
169
+ status: PiPackagePluginStatus;
170
+ }
171
+ export interface PiPackagePluginsResponse {
172
+ packages: PiPackagePluginInfo[];
173
+ totals: PiPackagePluginResourceCounts;
174
+ diagnostics: PiPackagePluginDiagnostic[];
175
+ }
176
+ export interface PiPackagePluginMutationRequest {
177
+ action: PiPackagePluginAction;
178
+ cwd: string;
179
+ source?: string;
180
+ scope?: PiPackagePluginScope;
181
+ }
182
+ /** A resource-loader skill visible to a project-scoped Pi runtime. */
183
+ export interface SkillInfo {
184
+ name: string;
185
+ description: string;
186
+ filePath: string;
187
+ baseDir: string;
188
+ disableModelInvocation: boolean;
189
+ sourceInfo: {
190
+ source?: string;
191
+ scope?: string;
192
+ };
193
+ install?: SkillInstallInfo;
194
+ }
195
+ export type SkillInstallScope = "global" | "project";
196
+ export interface SkillInstallInfo {
197
+ package: string;
198
+ scope: SkillInstallScope;
199
+ source: string;
200
+ sourceType?: string;
201
+ skillsShUrl?: string;
202
+ skillPath?: string;
203
+ ref?: string;
204
+ versionHash?: string;
205
+ canCheckForUpdates: boolean;
206
+ }
207
+ export interface SkillSearchResult {
208
+ package: string;
209
+ installs: string;
210
+ url: string;
211
+ }
212
+ export type SkillUpdateState = "up-to-date" | "update-available" | "unsupported" | "error";
213
+ export interface SkillUpdateResult {
214
+ package: string;
215
+ scope: SkillInstallScope;
216
+ state: SkillUpdateState;
217
+ currentVersion?: string;
218
+ latestVersion?: string;
219
+ message?: string;
220
+ }
221
+ export interface SkillsResponse {
222
+ skills: SkillInfo[];
223
+ }
224
+ export interface SkillMutationResponse {
225
+ success: true;
226
+ }
227
+ export interface SkillToggleRequest {
228
+ cwd: string;
229
+ filePath: string;
230
+ disableModelInvocation: boolean;
231
+ }
232
+ export interface SkillInstallRequest {
233
+ cwd: string;
234
+ package: string;
235
+ scope: SkillInstallScope;
236
+ }
237
+ export interface SkillCheckRequest {
238
+ cwd: string;
239
+ package?: string;
240
+ scope?: SkillInstallScope;
241
+ }
242
+ export interface SkillUpdateRequest {
243
+ cwd: string;
244
+ package: string;
245
+ scope: SkillInstallScope;
246
+ }
247
+ export interface SkillSearchRequest {
248
+ query: string;
249
+ limit?: number;
250
+ }
251
+ export interface SkillSearchResponse {
252
+ results: SkillSearchResult[];
253
+ }
254
+ export interface SkillsCheckResponse {
255
+ updates: SkillUpdateResult[];
256
+ }
257
+ export interface SkillUpdateResponse {
258
+ success: true;
259
+ skill?: SkillInfo;
260
+ output?: string;
261
+ }
262
+ export type PiWebUiAgentDirEnvSource = "pi-webui" | "pi-compatibility";
263
+ export interface PiWebUiConfigEnvOverrides {
264
+ host: boolean;
265
+ port: boolean;
266
+ allowedHosts: boolean;
267
+ spawnSessions: boolean;
268
+ subsessions: boolean;
269
+ agentCommand: boolean;
270
+ agentDir: boolean;
271
+ /** The configured directory environment source, even when Pi compatibility is inactive for the desired command. */
272
+ agentDirSource?: PiWebUiAgentDirEnvSource;
273
+ agentSessionDir: boolean;
274
+ }
275
+ export interface PiWebUiConfigResponse {
276
+ path: string;
277
+ exists: boolean;
278
+ config: PiWebUiConfigValues;
279
+ effectiveConfig: PiWebUiConfigValues;
280
+ envOverrides: PiWebUiConfigEnvOverrides;
281
+ }
282
+ export interface Project {
283
+ id: string;
284
+ name: string;
285
+ path: string;
286
+ createdAt: string;
287
+ }
288
+ export interface WorkspaceEffectiveConfig {
289
+ uploads?: PiWebUiUploadsConfig;
290
+ }
291
+ export interface Workspace {
292
+ id: string;
293
+ projectId: string;
294
+ path: string;
295
+ label: string;
296
+ branch?: string;
297
+ isMain: boolean;
298
+ isGitRepo: boolean;
299
+ isGitWorktree: boolean;
300
+ /** Workspace-effective project/global settings needed by workspace UI features. */
301
+ effectiveConfig?: WorkspaceEffectiveConfig;
302
+ }
303
+ export interface SessionRef {
304
+ id: string;
305
+ cwd: string;
306
+ }
307
+ export declare const SESSION_UNREAD_LIMIT = 1000;
308
+ export declare const SESSION_UNREAD_SESSION_ID_MAX_LENGTH = 512;
309
+ export declare const SESSION_UNREAD_CWD_MAX_LENGTH: number;
310
+ export declare const SESSION_UNREAD_CATALOG_ID_MAX_LENGTH = 512;
311
+ export declare const SESSION_UNREAD_COMPLETED_AT_MAX_LENGTH = 64;
312
+ export interface SessionUnreadSummary {
313
+ sessionId: string;
314
+ cwd: string;
315
+ /** Monotonic within a catalog and never greater than its containing revision. */
316
+ completionOrder: number;
317
+ completedAt: string;
318
+ }
319
+ export interface SessionUnreadCatalogSnapshot {
320
+ /** Stable for one persisted catalog epoch; changes when unread state is reset. */
321
+ catalogId: string;
322
+ /** Monotonic catalog mutation revision; at least every contained completion order. */
323
+ catalogRevision: number;
324
+ /** Bounded by `SESSION_UNREAD_LIMIT` and ordered newest completion first. */
325
+ sessions: SessionUnreadSummary[];
326
+ }
327
+ export interface SessionUnreadAcknowledgeRequest {
328
+ cwd: string;
329
+ /** The catalog epoch in which `throughCompletionOrder` was observed. */
330
+ catalogId: string;
331
+ throughCompletionOrder: number;
332
+ }
333
+ /** Authoritative delta for one session in the daemon-owned unread catalog. */
334
+ export interface SessionUnreadEvent {
335
+ type: "sessions.unread";
336
+ catalogId: string;
337
+ /** At least `unread.completionOrder` when carrying an unread summary. */
338
+ catalogRevision: number;
339
+ sessionId: string;
340
+ cwd: string;
341
+ unread: SessionUnreadSummary | null;
342
+ }
343
+ export declare const SESSION_NOTIFICATION_LIMIT = 100;
344
+ export declare const SESSION_NOTIFICATION_MESSAGE_BYTES: number;
345
+ export type SessionNotificationSeverity = "info" | "warning" | "error";
346
+ export interface SessionNotification {
347
+ id: string;
348
+ message: string;
349
+ truncated: boolean;
350
+ severity: SessionNotificationSeverity;
351
+ receivedAt: string;
352
+ order: number;
353
+ }
354
+ export interface SessionNotificationSummary {
355
+ sessionId: string;
356
+ cwd: string;
357
+ inboxRevision: number;
358
+ retainedCount: number;
359
+ discardedCount: number;
360
+ highestSeverity?: SessionNotificationSeverity;
361
+ }
362
+ export interface SessionNotificationDismissThrough {
363
+ order: number;
364
+ overflowWatermark: number;
365
+ }
366
+ export interface SessionNotificationInboxSnapshot {
367
+ daemonInstanceId: string;
368
+ catalogRevision: number;
369
+ summary: SessionNotificationSummary;
370
+ notifications: SessionNotification[];
371
+ dismissThrough: SessionNotificationDismissThrough;
372
+ }
373
+ export interface SessionNotificationCatalogSnapshot {
374
+ daemonInstanceId: string;
375
+ catalogRevision: number;
376
+ sessions: SessionNotificationSummary[];
377
+ }
378
+ export interface SessionNotificationDismissRequest {
379
+ cwd: string;
380
+ daemonInstanceId: string;
381
+ notificationId: string;
382
+ }
383
+ export interface SessionNotificationDismissAllRequest {
384
+ cwd: string;
385
+ daemonInstanceId: string;
386
+ throughOrder: number;
387
+ throughOverflowWatermark: number;
388
+ }
389
+ export type SessionNotificationClearReason = "runtime-close" | "archive" | "delete" | "restore" | "archive-reconcile" | "replacement" | "initialization-failed" | "service-dispose";
390
+ export type SessionNotificationInboxDelta = {
391
+ kind: "added";
392
+ notification: SessionNotification;
393
+ evictedNotificationId?: string;
394
+ } | {
395
+ kind: "dismissed";
396
+ notificationIds: string[];
397
+ } | {
398
+ kind: "cleared";
399
+ reason: SessionNotificationClearReason;
400
+ } | {
401
+ kind: "resync";
402
+ };
403
+ export interface SessionNotificationInboxEvent {
404
+ type: "notifications.inbox";
405
+ daemonInstanceId: string;
406
+ catalogRevision: number;
407
+ summary: SessionNotificationSummary;
408
+ dismissThrough: SessionNotificationDismissThrough;
409
+ delta: SessionNotificationInboxDelta;
410
+ }
411
+ export interface SessionNotificationSummaryEvent {
412
+ type: "notifications.summary";
413
+ daemonInstanceId: string;
414
+ catalogRevision: number;
415
+ summary: SessionNotificationSummary;
416
+ }
417
+ export interface SessionInfo extends SessionRef {
418
+ path: string;
419
+ /** True when the server has verified a backing session file exists; false when known transient. */
420
+ persisted?: boolean;
421
+ name?: string;
422
+ created: string;
423
+ modified: string;
424
+ messageCount: number;
425
+ firstMessage: string;
426
+ parentSessionPath?: string;
427
+ archived?: boolean;
428
+ archivedAt?: string;
429
+ /** True when the user has pinned this session so it sorts first in lists. */
430
+ pinned?: boolean;
431
+ }
432
+ export interface ArchiveSessionsResponse {
433
+ archived: true;
434
+ sessionIds?: string[];
435
+ archivedCount?: number;
436
+ skippedAlreadyArchivedCount?: number;
437
+ }
438
+ export interface SessionBulkMutationRef {
439
+ id: string;
440
+ cwd?: string;
441
+ }
442
+ export interface SessionBulkMutationRequest {
443
+ sessions: SessionBulkMutationRef[];
444
+ }
445
+ export interface SessionBulkFailure {
446
+ sessionId: string;
447
+ error: string;
448
+ }
449
+ export interface SessionBulkArchiveResponse {
450
+ archived: true;
451
+ archivedSessionIds: string[];
452
+ failures: SessionBulkFailure[];
453
+ generatedAt: string;
454
+ }
455
+ export interface SessionBulkDeleteArchivedResponse {
456
+ deleted: true;
457
+ deletedSessionIds: string[];
458
+ failures: SessionBulkFailure[];
459
+ generatedAt: string;
460
+ }
461
+ export interface SessionCleanupRequest {
462
+ /** Archive non-archived sessions whose modified time is older than this many days. Omit/null to disable. */
463
+ archiveIdleDays?: number | null;
464
+ /** Permanently delete archived sessions whose archivedAt time is older than this many days. Omit/null to disable. */
465
+ deleteArchivedDays?: number | null;
466
+ /** Stored cwd paths selected from a preview. Omit/null to include all discovered project/workspace paths. */
467
+ projectCwds?: string[] | null;
468
+ }
469
+ export interface SessionCleanupThresholds {
470
+ archiveIdleDays?: number;
471
+ deleteArchivedDays?: number;
472
+ }
473
+ export interface SessionCleanupProjectSummary {
474
+ cwd: string;
475
+ archiveCount: number;
476
+ deleteCount: number;
477
+ }
478
+ export interface SessionCleanupTotals {
479
+ archiveCount: number;
480
+ deleteCount: number;
481
+ }
482
+ export interface SessionCleanupPreviewResponse {
483
+ generatedAt: string;
484
+ thresholds: SessionCleanupThresholds;
485
+ projects: SessionCleanupProjectSummary[];
486
+ totals: SessionCleanupTotals;
487
+ skippedBusySessionIds?: string[];
488
+ }
489
+ export interface SessionCleanupExecuteResponse extends SessionCleanupPreviewResponse {
490
+ archivedSessionIds: string[];
491
+ deletedSessionIds: string[];
492
+ }
493
+ export interface SessionActivity {
494
+ sessionId: string;
495
+ phase: "active" | "idle" | "error";
496
+ label: string;
497
+ detail?: string;
498
+ at: string;
499
+ }
500
+ export interface QueuedSessionMessage {
501
+ kind: "steer" | "followUp";
502
+ text: string;
503
+ }
504
+ /**
505
+ * A pi-native image attachment carried with a prompt. The wire format mirrors
506
+ * pi's own `ImageContent` shape (`{ type: "image", data, mimeType }`) so these
507
+ * attachments are compatible with native multimodal delivery after validation.
508
+ */
509
+ export interface PromptImageAttachment {
510
+ kind: "image";
511
+ /** Supported image MIME type (image/png, image/jpeg, image/gif, or image/webp). */
512
+ mimeType: string;
513
+ /** Base64-encoded binary payload (no data: URL prefix). */
514
+ data: string;
515
+ /** Optional original filename, used for previews and folder-mode filenames. */
516
+ name?: string;
517
+ }
518
+ /** A general file attachment that must be saved into the workspace before use. */
519
+ export interface PromptFileAttachment {
520
+ kind: "file";
521
+ /** Non-empty IANA MIME type (for example "application/pdf"). */
522
+ mimeType: string;
523
+ /** Base64-encoded binary payload (no data: URL prefix). Empty for zero-byte files. */
524
+ data: string;
525
+ /** Optional original filename, used for previews and folder-mode filenames. */
526
+ name?: string;
527
+ }
528
+ export type PromptAttachment = PromptImageAttachment | PromptFileAttachment;
529
+ /**
530
+ * How prompt attachments should be delivered to the session.
531
+ * - "inline": send the binary to pi as native image content (multimodal input).
532
+ * - "folder": save the file into the workspace and reference it from the prompt
533
+ * text so the agent reads it with its own tools.
534
+ */
535
+ export type PromptAttachmentDelivery = "inline" | "folder";
536
+ export interface SavedPromptAttachment {
537
+ /** Workspace-relative path the attachment was written to. */
538
+ path: string;
539
+ mimeType: string;
540
+ size: number;
541
+ }
542
+ export interface SessionModel {
543
+ provider?: string;
544
+ id?: string;
545
+ name?: string;
546
+ contextWindow?: number;
547
+ reasoning?: unknown;
548
+ }
549
+ export type { ThinkingLevel } from "./thinkingLevels.js";
550
+ export type AuthType = "oauth" | "api_key";
551
+ export type AuthStatusSource = "stored" | "runtime" | "environment" | "fallback" | "models_json_key" | "models_json_command";
552
+ export interface AuthProviderStatus {
553
+ configured: boolean;
554
+ source?: AuthStatusSource;
555
+ label?: string;
556
+ }
557
+ export interface AuthProviderOption {
558
+ id: string;
559
+ name: string;
560
+ authType: AuthType;
561
+ status: AuthProviderStatus;
562
+ /** Additive hint: use the generic AuthInteraction transport instead of the legacy one-secret form. */
563
+ loginFlow?: "interactive";
564
+ }
565
+ export interface AuthProvidersResponse {
566
+ providers: AuthProviderOption[];
567
+ }
568
+ export interface OAuthFlowState {
569
+ flowId: string;
570
+ providerId: string;
571
+ providerName: string;
572
+ status: "running" | "complete" | "error" | "cancelled";
573
+ auth?: {
574
+ url: string;
575
+ instructions?: string;
576
+ deviceCode?: {
577
+ userCode: string;
578
+ intervalSeconds?: number;
579
+ expiresInSeconds?: number;
580
+ };
581
+ };
582
+ prompt?: {
583
+ requestId: string;
584
+ message: string;
585
+ placeholder?: string;
586
+ allowEmpty?: boolean;
587
+ /** Additive semantic detail; legacy peers continue to use `kind`. */
588
+ promptType?: "text" | "secret" | "manual_code";
589
+ kind: "prompt" | "manual";
590
+ };
591
+ select?: {
592
+ requestId: string;
593
+ message: string;
594
+ options: CommandOption[];
595
+ };
596
+ progress: string[];
597
+ info?: {
598
+ message: string;
599
+ links?: {
600
+ url: string;
601
+ label?: string;
602
+ }[];
603
+ }[];
604
+ error?: string;
605
+ }
606
+ export interface ModelSelectionResponse {
607
+ models: SessionModel[];
608
+ }
609
+ /** Pi's persisted defaults used when a new session is created. */
610
+ export interface SessionDefaultsResponse {
611
+ model?: SessionModel;
612
+ thinkingLevel: string;
613
+ models: SessionModel[];
614
+ thinkingLevels: string[];
615
+ }
616
+ export interface SessionDefaultsUpdate {
617
+ model?: {
618
+ provider: string;
619
+ modelId: string;
620
+ };
621
+ thinkingLevel?: string;
622
+ }
623
+ /** Editable `models.json` document for the active Pi-compatible profile. */
624
+ export interface ModelsConfigDocument {
625
+ providers?: Record<string, ModelsConfigProvider> | undefined;
626
+ [key: string]: unknown;
627
+ }
628
+ /**
629
+ * Editable provider configuration. `undefined` means remove the field when
630
+ * serializing the user's models.json draft.
631
+ */
632
+ export interface ModelsConfigProvider {
633
+ /** Preserve provider-specific Pi fields that PI WEBUI does not edit directly. */
634
+ [key: string]: unknown;
635
+ baseUrl?: string | undefined;
636
+ api?: string | undefined;
637
+ apiKey?: string | undefined;
638
+ headers?: Record<string, string> | undefined;
639
+ compat?: Record<string, unknown> | undefined;
640
+ models?: ModelsConfigModel[] | undefined;
641
+ modelOverrides?: Record<string, unknown> | undefined;
642
+ }
643
+ export interface ModelsConfigModel {
644
+ /** Preserve model-specific Pi fields that PI WEBUI does not edit directly. */
645
+ [key: string]: unknown;
646
+ id: string;
647
+ name?: string | undefined;
648
+ api?: string | undefined;
649
+ reasoning?: boolean | undefined;
650
+ thinkingLevelMap?: Record<string, string | null> | undefined;
651
+ input?: string[] | undefined;
652
+ contextWindow?: number | undefined;
653
+ maxTokens?: number | undefined;
654
+ cost?: {
655
+ input?: number | undefined;
656
+ output?: number | undefined;
657
+ cacheRead?: number | undefined;
658
+ cacheWrite?: number | undefined;
659
+ } | undefined;
660
+ compat?: Record<string, unknown> | undefined;
661
+ }
662
+ export interface ModelsConfigSaveResponse {
663
+ success: true;
664
+ }
665
+ export interface ModelConnectionTestRequest {
666
+ providerName: string;
667
+ provider: ModelsConfigProvider;
668
+ model: ModelsConfigModel;
669
+ }
670
+ /** A provider model returned by its model-list endpoint. */
671
+ export interface ModelDiscoveryModel {
672
+ id: string;
673
+ name?: string | undefined;
674
+ }
675
+ /** Uses the provider draft so discovery can run before the configuration is saved. */
676
+ export interface ModelDiscoveryRequest {
677
+ providerName: string;
678
+ provider: ModelsConfigProvider;
679
+ }
680
+ export interface ModelDiscoveryResponse {
681
+ models: ModelDiscoveryModel[];
682
+ }
683
+ export interface ModelConnectionTestResponse {
684
+ ok: boolean;
685
+ error?: string;
686
+ latencyMs?: number;
687
+ status?: number;
688
+ responseText?: string;
689
+ }
690
+ export interface ThinkingLevelsResponse {
691
+ levels: string[];
692
+ }
693
+ export type SessionWarningSeverity = "info" | "warning" | "error";
694
+ /**
695
+ * A live, runtime-scoped warning surfaced to the browser (skill/resource
696
+ * diagnostics, extension load errors, subscription-auth billing notice, etc.).
697
+ *
698
+ * Warnings are recomputed whenever the runtime is (re)built inside sessiond and
699
+ * are not persisted chat messages. `source` is an optional short origin label
700
+ * (e.g. `"skill"`, `"extension"`, `"anthropic"`); `path` carries a related file
701
+ * path when the warning came from a resource diagnostic.
702
+ *
703
+ * `dismiss` is present only when the warning has a durable, first-class
704
+ * off-switch in the underlying `pi` agent (not a UI-only hide). Its `id` is the
705
+ * opaque token the server maps back to that suppression; the client renders a
706
+ * dismiss control for any warning carrying it, without knowing what it means.
707
+ */
708
+ export interface SessionWarning {
709
+ severity: SessionWarningSeverity;
710
+ message: string;
711
+ source?: string;
712
+ path?: string;
713
+ dismiss?: {
714
+ id: string;
715
+ };
716
+ }
717
+ export interface SessionStatus {
718
+ sessionId: string;
719
+ /** True when the server has verified a backing session file exists; false when known transient. */
720
+ persisted?: boolean;
721
+ model?: SessionModel;
722
+ thinkingLevel?: string;
723
+ isStreaming: boolean;
724
+ isCompacting: boolean;
725
+ isBashRunning: boolean;
726
+ pendingMessageCount: number;
727
+ queuedMessages: QueuedSessionMessage[];
728
+ messageCount?: number;
729
+ tokens: {
730
+ input: number;
731
+ output: number;
732
+ cacheRead: number;
733
+ cacheWrite: number;
734
+ total: number;
735
+ };
736
+ cost: number;
737
+ /**
738
+ * Current assistant-response output usage. Provider-reported values take
739
+ * precedence; `estimated` marks Pi Web-style streamed-content approximations.
740
+ * Omitted once the response ends.
741
+ */
742
+ generation?: {
743
+ outputTokens: number;
744
+ tokensPerSecond?: number;
745
+ estimated?: boolean;
746
+ };
747
+ contextUsage?: {
748
+ tokens: number | null;
749
+ contextWindow: number;
750
+ percent: number | null;
751
+ };
752
+ /**
753
+ * Live, runtime-scoped warnings for this session (skill/resource diagnostics,
754
+ * extension load errors, Anthropic subscription-auth billing notice, etc.).
755
+ * Recomputed on each status read from the current runtime; absent/empty when
756
+ * there are none. See {@link SessionWarning}.
757
+ */
758
+ warnings?: SessionWarning[];
759
+ }
760
+ export interface WorkspaceActivity {
761
+ cwd: string;
762
+ hasSessionActivity: boolean;
763
+ hasTerminalActivity: boolean;
764
+ updatedAt: string;
765
+ }
766
+ export interface WorkspaceActivityResponse {
767
+ workspaces: WorkspaceActivity[];
768
+ generatedAt: string;
769
+ }
770
+ export interface SlashCommand {
771
+ name: string;
772
+ description?: string;
773
+ source: "extension" | "prompt" | "skill" | "builtin";
774
+ }
775
+ export interface FileSuggestion {
776
+ path: string;
777
+ kind: "tracked" | "untracked" | "other";
778
+ }
779
+ export interface FileTreeEntry {
780
+ name: string;
781
+ path: string;
782
+ type: "file" | "directory" | "symlink";
783
+ size?: number;
784
+ modifiedAt?: string;
785
+ }
786
+ export interface FileTreeResponse {
787
+ path: string;
788
+ entries: FileTreeEntry[];
789
+ scannedAt: string;
790
+ truncated: boolean;
791
+ }
792
+ export type FileContentMediaType = "image";
793
+ export interface FileContentResponse {
794
+ path: string;
795
+ language?: string;
796
+ mediaType?: FileContentMediaType;
797
+ mimeType?: string;
798
+ encoding: "utf8";
799
+ size: number;
800
+ modifiedAt: string;
801
+ content: string;
802
+ truncated: boolean;
803
+ binary: boolean;
804
+ }
805
+ export interface WriteWorkspaceFileOptions {
806
+ createDirs?: boolean;
807
+ overwrite?: boolean;
808
+ }
809
+ export interface WriteWorkspaceFileResponse {
810
+ path: string;
811
+ size: number;
812
+ modifiedAt: string;
813
+ created: boolean;
814
+ }
815
+ export interface DeleteWorkspaceFileResponse {
816
+ path: string;
817
+ existed: boolean;
818
+ }
819
+ export interface MoveWorkspaceFileOptions {
820
+ createDirs?: boolean;
821
+ overwrite?: boolean;
822
+ }
823
+ export interface MoveWorkspaceFileResponse {
824
+ fromPath: string;
825
+ toPath: string;
826
+ size: number;
827
+ modifiedAt: string;
828
+ }
829
+ export type GitFileState = "unmodified" | "modified" | "added" | "deleted" | "renamed" | "copied" | "untracked" | "ignored" | "conflicted";
830
+ export interface GitStatusFile {
831
+ path: string;
832
+ oldPath?: string;
833
+ index: GitFileState;
834
+ workingTree: GitFileState;
835
+ }
836
+ export interface GitStatusResponse {
837
+ isGitRepo: boolean;
838
+ hash: string;
839
+ branch?: string;
840
+ latestTag?: string;
841
+ upstream?: string;
842
+ ahead?: number;
843
+ behind?: number;
844
+ files: GitStatusFile[];
845
+ }
846
+ export interface GitDiffResponse {
847
+ path?: string;
848
+ staged: boolean;
849
+ hash: string;
850
+ diff: string;
851
+ truncated: boolean;
852
+ }
853
+ export interface TerminalInfo {
854
+ id: string;
855
+ cwd: string;
856
+ name: string;
857
+ createdAt: string;
858
+ exited: boolean;
859
+ exitCode?: number;
860
+ commandRunId?: string;
861
+ }
862
+ export type TerminalCommandRunStatus = "queued" | "running" | "succeeded" | "failed";
863
+ export interface TerminalCommandRun {
864
+ id: string;
865
+ origin: string;
866
+ projectId: string;
867
+ workspaceId: string;
868
+ terminalId: string;
869
+ title: string;
870
+ command: string;
871
+ status: TerminalCommandRunStatus;
872
+ exitCode?: number;
873
+ createdAt: string;
874
+ startedAt?: string;
875
+ completedAt?: string;
876
+ metadata: Record<string, string>;
877
+ }
878
+ export interface RunTerminalCommandInput {
879
+ workspace: Workspace;
880
+ title: string;
881
+ command: string;
882
+ metadata?: Record<string, string>;
883
+ open?: boolean;
884
+ }
885
+ export interface TerminalCommandRunHandle {
886
+ run: TerminalCommandRun;
887
+ completed: Promise<TerminalCommandRun>;
888
+ }
889
+ export interface TerminalCommandRunFilter {
890
+ projectId?: string;
891
+ workspaceId?: string;
892
+ terminalId?: string;
893
+ statuses?: TerminalCommandRunStatus[];
894
+ metadata?: Record<string, string>;
895
+ }
896
+ export type PiWebUiServiceComponent = "web" | "sessiond";
897
+ export type PiWebUiStatusSeverity = "info" | "warning" | "error";
898
+ export type PiWebUiInstallationKind = "pi-package" | "npm-global" | "local" | "docker" | "unknown";
899
+ export type PiWebUiDockerMode = "runtime" | "dev";
900
+ export interface PiWebUiInstallationInfo {
901
+ kind: PiWebUiInstallationKind;
902
+ path?: string;
903
+ source?: string;
904
+ scope?: "user" | "project";
905
+ npmRoot?: string;
906
+ dockerMode?: PiWebUiDockerMode;
907
+ }
908
+ export interface PiWebUiComponentStatus {
909
+ component: PiWebUiServiceComponent;
910
+ label: string;
911
+ runtimeVersion?: string;
912
+ installedVersion?: string;
913
+ stale: boolean;
914
+ available: boolean;
915
+ installation?: PiWebUiInstallationInfo;
916
+ error?: string;
917
+ }
918
+ /** Secret-free identity of the Pi-compatible CLI/state profile fixed for one sessiond lifetime. */
919
+ export interface ActiveAgentProfileDescriptor {
920
+ readonly schemaVersion: 1;
921
+ readonly revision: string;
922
+ readonly command: string;
923
+ readonly dir: string;
924
+ readonly sessionDirEnvKeys: readonly string[];
925
+ }
926
+ export interface PiWebUiRuntimeComponent {
927
+ component: PiWebUiServiceComponent;
928
+ label: string;
929
+ runtimeVersion?: string;
930
+ available: boolean;
931
+ capabilities: PiWebUiCapability[];
932
+ /** Present only for a session daemon that supports active-profile reporting. */
933
+ activeAgentProfile?: ActiveAgentProfileDescriptor;
934
+ error?: string;
935
+ }
936
+ export interface PiWebUiReleaseStatus {
937
+ packageName: string;
938
+ latestVersion?: string;
939
+ updateAvailable: boolean;
940
+ checkedAt?: string;
941
+ skipped?: boolean;
942
+ error?: string;
943
+ }
944
+ export interface PiWebUiStatusMessage {
945
+ id: string;
946
+ severity: PiWebUiStatusSeverity;
947
+ title: string;
948
+ body: string;
949
+ command?: string;
950
+ }
951
+ export interface PiWebUiVersionResponse {
952
+ packageName: string;
953
+ generatedAt: string;
954
+ components: {
955
+ web: PiWebUiComponentStatus;
956
+ sessiond: PiWebUiComponentStatus;
957
+ };
958
+ }
959
+ export interface PiWebUiRuntimeResponse {
960
+ packageName: string;
961
+ generatedAt: string;
962
+ components: {
963
+ web: PiWebUiRuntimeComponent;
964
+ sessiond: PiWebUiRuntimeComponent;
965
+ };
966
+ capabilities: PiWebUiCapability[];
967
+ }
968
+ export interface PiWebUiStatusResponse extends PiWebUiVersionResponse {
969
+ release: PiWebUiReleaseStatus;
970
+ commands: {
971
+ update?: string;
972
+ restart?: string;
973
+ restartWeb?: string;
974
+ restartSessiond?: string;
975
+ status?: string;
976
+ };
977
+ messages: PiWebUiStatusMessage[];
978
+ }
979
+ export type TerminalUiEvent = {
980
+ type: "terminal.created";
981
+ terminal: TerminalInfo;
982
+ } | {
983
+ type: "terminal.exited";
984
+ terminal: TerminalInfo;
985
+ } | {
986
+ type: "terminal.closed";
987
+ terminalId: string;
988
+ cwd: string;
989
+ };
990
+ export interface WorkspaceActivityUiEvent {
991
+ type: "workspace.activity";
992
+ activity: WorkspaceActivity;
993
+ }
994
+ export interface CommandOption {
995
+ value: string;
996
+ label: string;
997
+ description?: string;
998
+ }
999
+ export type SessionTreeNodeKind = "user" | "assistant" | "tool-result" | "bash" | "custom-message" | "compaction" | "branch-summary" | "model-change" | "thinking-level-change" | "session-info" | "label" | "custom" | "other";
1000
+ export interface SessionTreeNode {
1001
+ id: string;
1002
+ parentId: string | null;
1003
+ kind: SessionTreeNodeKind;
1004
+ summary: string;
1005
+ timestamp?: string;
1006
+ label?: string;
1007
+ }
1008
+ export interface SessionTreeSnapshot {
1009
+ /** Pre-order, parent-linked projection of all retained roots and descendants. */
1010
+ nodes: SessionTreeNode[];
1011
+ activeLeafId: string | null;
1012
+ /** Root-to-leaf IDs for explicit, non-color-only active-path rendering. */
1013
+ activePathIds: string[];
1014
+ }
1015
+ export declare const SESSION_TREE_CUSTOM_INSTRUCTIONS_MAX_LENGTH = 10000;
1016
+ export type SessionTreeSummaryChoice = {
1017
+ mode: "none";
1018
+ } | {
1019
+ mode: "default";
1020
+ } | {
1021
+ mode: "custom";
1022
+ instructions: string;
1023
+ };
1024
+ export interface SessionTreeNavigateRequest {
1025
+ targetId: string;
1026
+ /** Leaf shown when the navigator opened; null is valid for an empty/root position. */
1027
+ expectedLeafId: string | null;
1028
+ summary: SessionTreeSummaryChoice;
1029
+ }
1030
+ export type SessionTreeNavigateResult = {
1031
+ cancelled: false;
1032
+ editorText?: string;
1033
+ } | {
1034
+ cancelled: true;
1035
+ aborted?: boolean;
1036
+ };
1037
+ export interface MessagePage {
1038
+ messages: unknown[];
1039
+ start: number;
1040
+ total: number;
1041
+ }
1042
+ /**
1043
+ * Join-time snapshot of a session's in-flight assistant stream. `seq` is the
1044
+ * `SessionEventHub` watermark captured together with `partial` in a single tick,
1045
+ * so a joining client can seed `partial` and then apply only buffered live events
1046
+ * with `seq > snapshot.seq` (exactly-once). `partial` is a browser-projected
1047
+ * in-flight `AssistantMessage` (thinking signatures stripped), or `null` when the
1048
+ * session is not mid assistant-message stream.
1049
+ */
1050
+ export interface SessionStreamSnapshot {
1051
+ seq: number;
1052
+ /** Browser-projected in-flight `AssistantMessage`, or `null` when idle. */
1053
+ partial: unknown;
1054
+ }
1055
+ /**
1056
+ * Current resolved system prompt for one session. It is omitted when the
1057
+ * runtime has not loaded a prompt yet, preserving the distinction between an
1058
+ * unavailable prompt and an intentionally empty one.
1059
+ */
1060
+ export interface SessionSystemPrompt {
1061
+ systemPrompt?: string;
1062
+ }
1063
+ export type CommandResult = {
1064
+ type: "done";
1065
+ message?: string;
1066
+ session?: SessionInfo;
1067
+ promptDraft?: string;
1068
+ } | {
1069
+ type: "select";
1070
+ requestId: string;
1071
+ title: string;
1072
+ options: CommandOption[];
1073
+ } | {
1074
+ type: "tree";
1075
+ tree: SessionTreeSnapshot;
1076
+ } | {
1077
+ type: "unsupported";
1078
+ message: string;
1079
+ };
1080
+ /**
1081
+ * Transport-level per-session sequence stamp. `SessionEventHub.publish` assigns a
1082
+ * monotonic `seq` to every per-session event as it is serialized to the socket.
1083
+ * Clients use it as a watermark against the join-time stream snapshot so buffered
1084
+ * live events are applied exactly once. Existing consumers may ignore it.
1085
+ */
1086
+ export type SessionUiEvent = SessionUiEventBody & {
1087
+ seq?: number;
1088
+ };
1089
+ type SessionUiEventBody = {
1090
+ type: "message.append";
1091
+ message: unknown;
1092
+ } | {
1093
+ type: "assistant.delta";
1094
+ text: string;
1095
+ } | {
1096
+ type: "assistant.thinking.delta";
1097
+ text: string;
1098
+ } | {
1099
+ type: "tool.start";
1100
+ toolName: string;
1101
+ toolCallId: string;
1102
+ summary: string;
1103
+ args?: unknown;
1104
+ } | {
1105
+ type: "tool.update";
1106
+ toolName: string;
1107
+ toolCallId: string;
1108
+ text: string;
1109
+ content?: unknown;
1110
+ details?: unknown;
1111
+ } | {
1112
+ type: "tool.end";
1113
+ toolName: string;
1114
+ toolCallId: string;
1115
+ text: string;
1116
+ isError: boolean;
1117
+ content?: unknown;
1118
+ details?: unknown;
1119
+ } | {
1120
+ type: "shell.start";
1121
+ command: string;
1122
+ excludeFromContext?: boolean;
1123
+ } | {
1124
+ type: "shell.chunk";
1125
+ chunk: string;
1126
+ } | {
1127
+ type: "shell.end";
1128
+ output?: string;
1129
+ exitCode?: number | null;
1130
+ cancelled?: boolean;
1131
+ truncated?: boolean;
1132
+ fullOutputPath?: string;
1133
+ isError?: boolean;
1134
+ } | {
1135
+ type: "agent.start";
1136
+ } | {
1137
+ type: "agent.end";
1138
+ } | {
1139
+ type: "message.end";
1140
+ message?: unknown;
1141
+ } | {
1142
+ type: "status.update";
1143
+ status: SessionStatus;
1144
+ } | {
1145
+ type: "activity.update";
1146
+ activity: SessionActivity;
1147
+ } | {
1148
+ type: "command.output";
1149
+ level: "info" | "success" | "error";
1150
+ message: string;
1151
+ notificationId?: string;
1152
+ } | SessionNotificationInboxEvent | {
1153
+ type: "session.error";
1154
+ message: string;
1155
+ } | {
1156
+ type: "session.name";
1157
+ sessionId: string;
1158
+ name?: string;
1159
+ } | {
1160
+ type: "session.created";
1161
+ session: SessionInfo;
1162
+ } | {
1163
+ type: "pi.event";
1164
+ eventType: string;
1165
+ };
1166
+ export type GlobalSessionEvent = Extract<SessionUiEventBody, {
1167
+ type: "status.update" | "activity.update" | "session.name" | "session.created";
1168
+ }> | SessionNotificationSummaryEvent | SessionUnreadEvent;
1169
+ export type RealtimeEvent = GlobalSessionEvent | TerminalUiEvent | WorkspaceActivityUiEvent;
1170
+ export interface SystemCpuInfo {
1171
+ model: string;
1172
+ cores: number;
1173
+ usagePercent: number;
1174
+ }
1175
+ export interface SystemGpuInfo {
1176
+ name: string;
1177
+ driverVersion?: string;
1178
+ memoryTotalBytes?: number;
1179
+ memoryUsedBytes?: number;
1180
+ utilizationPercent?: number;
1181
+ temperatureCelsius?: number;
1182
+ }
1183
+ export interface SystemMemoryInfo {
1184
+ totalBytes: number;
1185
+ usedBytes: number;
1186
+ freeBytes: number;
1187
+ usagePercent: number;
1188
+ }
1189
+ export interface SystemNetworkInfo {
1190
+ hostname: string;
1191
+ publicIpv4?: string;
1192
+ publicIpv6?: string;
1193
+ localIpv4Addresses: string[];
1194
+ downloadSpeedBytesPerSecond?: number;
1195
+ uploadSpeedBytesPerSecond?: number;
1196
+ }
1197
+ export interface SystemOsInfo {
1198
+ platform: string;
1199
+ release: string;
1200
+ arch: string;
1201
+ uptimeSeconds: number;
1202
+ }
1203
+ export interface SystemInfoResponse {
1204
+ generatedAt: string;
1205
+ os: SystemOsInfo;
1206
+ cpu: SystemCpuInfo;
1207
+ gpu?: SystemGpuInfo;
1208
+ memory: SystemMemoryInfo;
1209
+ network: SystemNetworkInfo;
1210
+ piVersion?: string;
1211
+ piWebUiVersion?: string;
1212
+ }