libre-webui 0.19.6 → 0.20.0

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 (139) hide show
  1. package/README.md +2 -2
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +29 -0
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/index.d.ts.map +1 -1
  6. package/backend/dist/index.js +12 -10
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/routes/work.d.ts.map +1 -1
  9. package/backend/dist/routes/work.js +138 -4
  10. package/backend/dist/routes/work.js.map +1 -1
  11. package/backend/dist/services/systemDiagnosticsService.d.ts +4 -3
  12. package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -1
  13. package/backend/dist/services/systemDiagnosticsService.js +35 -34
  14. package/backend/dist/services/systemDiagnosticsService.js.map +1 -1
  15. package/backend/dist/services/workAccessService.d.ts +15 -0
  16. package/backend/dist/services/workAccessService.d.ts.map +1 -0
  17. package/backend/dist/services/workAccessService.js +67 -0
  18. package/backend/dist/services/workAccessService.js.map +1 -0
  19. package/backend/dist/services/workAdminService.d.ts +67 -0
  20. package/backend/dist/services/workAdminService.d.ts.map +1 -0
  21. package/backend/dist/services/workAdminService.js +92 -0
  22. package/backend/dist/services/workAdminService.js.map +1 -0
  23. package/backend/dist/services/workKubernetesDriver.d.ts +74 -0
  24. package/backend/dist/services/workKubernetesDriver.d.ts.map +1 -0
  25. package/backend/dist/services/workKubernetesDriver.js +659 -0
  26. package/backend/dist/services/workKubernetesDriver.js.map +1 -0
  27. package/backend/dist/services/workPolicyService.d.ts +58 -0
  28. package/backend/dist/services/workPolicyService.d.ts.map +1 -0
  29. package/backend/dist/services/workPolicyService.js +249 -0
  30. package/backend/dist/services/workPolicyService.js.map +1 -0
  31. package/backend/dist/services/workPreviewProxyService.d.ts +7 -1
  32. package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -1
  33. package/backend/dist/services/workPreviewProxyService.js +36 -8
  34. package/backend/dist/services/workPreviewProxyService.js.map +1 -1
  35. package/backend/dist/services/workRuntimeDriver.d.ts +166 -0
  36. package/backend/dist/services/workRuntimeDriver.d.ts.map +1 -0
  37. package/backend/dist/services/workRuntimeDriver.js +737 -0
  38. package/backend/dist/services/workRuntimeDriver.js.map +1 -0
  39. package/backend/dist/services/workRuntimeService.d.ts +60 -51
  40. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  41. package/backend/dist/services/workRuntimeService.js +310 -658
  42. package/backend/dist/services/workRuntimeService.js.map +1 -1
  43. package/backend/dist/services/workRuntimeShared.d.ts +83 -0
  44. package/backend/dist/services/workRuntimeShared.d.ts.map +1 -0
  45. package/backend/dist/services/workRuntimeShared.js +136 -0
  46. package/backend/dist/services/workRuntimeShared.js.map +1 -0
  47. package/backend/dist/services/workTaskService.d.ts +6 -1
  48. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  49. package/backend/dist/services/workTaskService.js +18 -3
  50. package/backend/dist/services/workTaskService.js.map +1 -1
  51. package/backend/dist/services/workTerminalService.d.ts +2 -22
  52. package/backend/dist/services/workTerminalService.d.ts.map +1 -1
  53. package/backend/dist/services/workTerminalService.js +10 -127
  54. package/backend/dist/services/workTerminalService.js.map +1 -1
  55. package/backend/dist/types/work.d.ts +4 -0
  56. package/backend/dist/types/work.d.ts.map +1 -1
  57. package/backend/dist/utils/dockerEndpoint.d.ts +37 -0
  58. package/backend/dist/utils/dockerEndpoint.d.ts.map +1 -0
  59. package/backend/dist/utils/dockerEndpoint.js +72 -0
  60. package/backend/dist/utils/dockerEndpoint.js.map +1 -0
  61. package/backend/dist/workTerminalServer.d.ts.map +1 -1
  62. package/backend/dist/workTerminalServer.js +6 -5
  63. package/backend/dist/workTerminalServer.js.map +1 -1
  64. package/backend/package.json +2 -1
  65. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  66. package/frontend/dist/assets/index-Z4-oLWDC.js +2 -0
  67. package/frontend/dist/assets/index-tBUyDbHh.css +1 -0
  68. package/frontend/dist/index.html +11 -10
  69. package/frontend/dist/js/{ArtifactContainer-Dy_1KKWg.js → ArtifactContainer-DQRF4rh-.js} +1 -1
  70. package/frontend/dist/js/{ArtifactDemoPage-Big00RwH.js → ArtifactDemoPage-BOlB1lS-.js} +1 -1
  71. package/frontend/dist/js/{ArtifactSandboxFrame-C_S4j076.js → ArtifactSandboxFrame-DqU5GDrI.js} +2 -2
  72. package/frontend/dist/js/{ArtifactSlideOutPanel-B4-D3HkB.js → ArtifactSlideOutPanel-B0I-hCux.js} +1 -1
  73. package/frontend/dist/js/ChatPage-DyV0_oCt.js +16 -0
  74. package/frontend/dist/js/{FirstTimeSetup-C6YxrwR7.js → FirstTimeSetup-ButTmjp0.js} +1 -1
  75. package/frontend/dist/js/{GalleryPage-BtcPs7SO.js → GalleryPage-CaT63b-s.js} +1 -1
  76. package/frontend/dist/js/HomePage-BWyg3nHu.js +1 -0
  77. package/frontend/dist/js/{LibreClawPage-B14Go5Mn.js → LibreClawPage-DUd3tjQE.js} +1 -1
  78. package/frontend/dist/js/ModelSelector-COFcJnMJ.js +1 -0
  79. package/frontend/dist/js/{ModelsPage-Cc3L0ur8.js → ModelsPage-BRbTEXNL.js} +1 -1
  80. package/frontend/dist/js/{NotesPage-BwEMW-Z3.js → NotesPage-CTutDN50.js} +1 -1
  81. package/frontend/dist/js/{PersonasPage-e-CbTxP3.js → PersonasPage-C6iTMI3N.js} +2 -2
  82. package/frontend/dist/js/{PluginUsagePage-CvZMJJwv.js → PluginUsagePage-BQQ0-_PP.js} +1 -1
  83. package/frontend/dist/js/{RichMessageContent-DNl3_CIw.js → RichMessageContent-DPqeqxkQ.js} +1 -1
  84. package/frontend/dist/js/SettingsModal-C_1k75Kv.js +1 -0
  85. package/frontend/dist/js/SettingsToggle-bZ5W4CCf.js +1 -0
  86. package/frontend/dist/js/SystemPage-CUecyRPh.js +1 -0
  87. package/frontend/dist/js/UserManagementPage-CZ4KMOY9.js +1 -0
  88. package/frontend/dist/js/WorkPage-BqDcfXV6.js +5 -0
  89. package/frontend/dist/js/api-iCpOEijB.js +14 -0
  90. package/frontend/dist/js/{appStore-BpoXhleX.js → appStore-DTd6dWg2.js} +2 -2
  91. package/frontend/dist/js/{ar-ClMsdoTH.js → ar-C8YV99Y-.js} +1 -1
  92. package/frontend/dist/js/authStore-CuK4HUVh.js +4 -0
  93. package/frontend/dist/js/{bn-LyPol_AY.js → bn-C9dcls7_.js} +1 -1
  94. package/frontend/dist/js/chatStore-VNT0eHRB.js +2 -0
  95. package/frontend/dist/js/{config-CuXlcWP1.js → config--Xp9rZtJ.js} +1 -1
  96. package/frontend/dist/js/{cs-D98fZaKF.js → cs-DtL8VeeX.js} +1 -1
  97. package/frontend/dist/js/{da-M7ND0GQR.js → da-U3aNn1aF.js} +1 -1
  98. package/frontend/dist/js/{de-BV0q1kzb.js → de-DzuyeVpX.js} +1 -1
  99. package/frontend/dist/js/{es-C7FvsVoN.js → es-OiU8plii.js} +1 -1
  100. package/frontend/dist/js/{estree-BuWOCMW0.js → estree-BAQkciRX.js} +1 -1
  101. package/frontend/dist/js/{fr-5SloN0ok.js → fr-DDa3R8bs.js} +1 -1
  102. package/frontend/dist/js/{hi-C6VeRgeR.js → hi-D8Y0hl34.js} +1 -1
  103. package/frontend/dist/js/{html-D7tW7UvW.js → html-DxA-Bcvi.js} +1 -1
  104. package/frontend/dist/js/{i18n-CLd1FZPx.js → i18n-BqWNFeNo.js} +1 -1
  105. package/frontend/dist/js/{id-CkVp7Z1Z.js → id-BwcWtkBv.js} +1 -1
  106. package/frontend/dist/js/{is-DqxnBX4W.js → is-DzfQHQih.js} +1 -1
  107. package/frontend/dist/js/{it-CiW4_O5V.js → it-C5VU3_Je.js} +1 -1
  108. package/frontend/dist/js/{ja-BZ3Sdund.js → ja-DLhOhxvf.js} +1 -1
  109. package/frontend/dist/js/{ko-CS7LAhfJ.js → ko-CCKiyQD6.js} +1 -1
  110. package/frontend/dist/js/{markdown-CBSxWEtK.js → markdown-IsZpJ5ke.js} +1 -1
  111. package/frontend/dist/js/{messageCodeStyles-BlTi46wI.js → messageCodeStyles-CsV3zwyK.js} +1 -1
  112. package/frontend/dist/js/{ms-URvcYqgz.js → ms-CXXkPvWw.js} +1 -1
  113. package/frontend/dist/js/{nl-CQJpW7wK.js → nl-CA_e0Epl.js} +1 -1
  114. package/frontend/dist/js/{pl-DDMgPMAz.js → pl-BG32wdpx.js} +1 -1
  115. package/frontend/dist/js/{pt-JCqqmGn_.js → pt-BzRGWQXO.js} +1 -1
  116. package/frontend/dist/js/{ru-C_dwMbiK.js → ru-DBjn_Q-Q.js} +1 -1
  117. package/frontend/dist/js/{standalone-CaXys7q3.js → standalone-CK3b5Ktq.js} +1 -1
  118. package/frontend/dist/js/{sv-CW3c9NGx.js → sv-Hz_iRGdF.js} +1 -1
  119. package/frontend/dist/js/{th-9ARgClBr.js → th-MsyXlGH9.js} +1 -1
  120. package/frontend/dist/js/{tr-DNY5_DAg.js → tr-Cofmy_ef.js} +1 -1
  121. package/frontend/dist/js/{typescript-DQ5zi5zo.js → typescript-BMYmVohw.js} +1 -1
  122. package/frontend/dist/js/{ui-DFQiHo_k.js → ui-C2kNYwfG.js} +2 -2
  123. package/frontend/dist/js/{uk-XDh4_7IL.js → uk-B2o05LCR.js} +1 -1
  124. package/frontend/dist/js/{vi-BaoJBXnt.js → vi-CZh8uJgV.js} +1 -1
  125. package/frontend/dist/js/workApi-C33ZrPws.js +6 -0
  126. package/frontend/dist/js/{zh-B202vYJt.js → zh-DhKXi8ZA.js} +1 -1
  127. package/package.json +4 -3
  128. package/frontend/dist/assets/index-Cd0_AoYV.js +0 -23
  129. package/frontend/dist/assets/index-DtkGuqvC.css +0 -1
  130. package/frontend/dist/js/ChatPage-BkFd1iac.js +0 -16
  131. package/frontend/dist/js/HomePage-5PhpAt14.js +0 -1
  132. package/frontend/dist/js/ModelSelector-C1wN91tl.js +0 -1
  133. package/frontend/dist/js/SettingsModal-C8KJJEud.js +0 -1
  134. package/frontend/dist/js/SystemPage-8kEAS71H.js +0 -1
  135. package/frontend/dist/js/UserManagementPage-BSrZ0ucu.js +0 -1
  136. package/frontend/dist/js/WorkPage-spf92PVN.js +0 -5
  137. package/frontend/dist/js/api-MySpmAK8.js +0 -19
  138. package/frontend/dist/js/authStore-DmrydYuS.js +0 -3
  139. package/frontend/dist/js/chatStore-CWqfsOjc.js +0 -2
@@ -0,0 +1,166 @@
1
+ import type { Duplex } from 'node:stream';
2
+ import type { WorkTaskRecord } from '../types/work.js';
3
+ import { ProcessOptions, ProcessResult, ResolvedWorkRuntimePolicy } from './workRuntimeShared.js';
4
+ export interface WorkExecOptions extends ProcessOptions {
5
+ /** Working directory inside the sandbox. Defaults to /workspace. */
6
+ workdir?: string;
7
+ }
8
+ export interface DiscoveredWorkContainer {
9
+ name: string;
10
+ taskId: string;
11
+ running: boolean;
12
+ }
13
+ export type WorkRuntimeState = 'absent' | 'stopped' | 'running';
14
+ /**
15
+ * A raw interactive TTY attached to the sandbox: bidirectional terminal
16
+ * bytes plus a resize control channel. Session policy (per-task limits,
17
+ * holds, idle timeouts) lives with the terminal service, not here.
18
+ */
19
+ export interface WorkTerminalTransport {
20
+ stream: Duplex;
21
+ resize: (cols: number, rows: number) => Promise<void>;
22
+ }
23
+ /**
24
+ * The mechanics of running one task sandbox, behind which a runtime backend
25
+ * (Docker today, Kubernetes later) is interchangeable. The runtime service
26
+ * owns every policy decision — admission, leases, lifecycle locks, task
27
+ * ownership rules, output budgets — and calls a driver only to make the
28
+ * sandbox world match what policy already decided. Drivers verify resource
29
+ * ownership labels before every destructive operation; they never decide
30
+ * whether an operation should happen.
31
+ */
32
+ export interface WorkRuntimeDriver {
33
+ /** Reject with an operator-actionable reason when the backend is down. */
34
+ probe(): Promise<void>;
35
+ /** Kill in-flight backend processes during shutdown. */
36
+ shutdown(): void;
37
+ /** Make a runtime image available. No cross-call deduplication. */
38
+ ensureImage(image?: string): Promise<void>;
39
+ /** Create the task workspace if needed; verify ownership if it exists. */
40
+ ensureWorkspace(task: WorkTaskRecord): Promise<void>;
41
+ /**
42
+ * Bring the sandbox to a running state with a policy-fresh configuration,
43
+ * recreating it when its recorded policy is stale.
44
+ */
45
+ ensureRuntime(task: WorkTaskRecord): Promise<void>;
46
+ /** Current sandbox state; verifies ownership when the sandbox exists. */
47
+ runtimeState(task: WorkTaskRecord): Promise<WorkRuntimeState>;
48
+ /** Stop the sandbox if it exists. Ownership-checked; absent is a no-op. */
49
+ stopRuntime(task: WorkTaskRecord): Promise<void>;
50
+ /** Remove the sandbox if it exists. Ownership-checked; absent is a no-op. */
51
+ removeRuntime(task: WorkTaskRecord): Promise<void>;
52
+ /**
53
+ * Remove the sandbox and workspace together. Every destructive target is
54
+ * ownership-validated before either is removed, so a conflicting unmanaged
55
+ * resource cannot cause partial cleanup.
56
+ */
57
+ removeTaskResources(task: WorkTaskRecord): Promise<void>;
58
+ /** Run a command inside the sandbox as the unprivileged sandbox user. */
59
+ exec(task: WorkTaskRecord, command: string[], options?: WorkExecOptions): Promise<ProcessResult>;
60
+ /**
61
+ * Endpoint the backend can reach the task's preview server on, if any.
62
+ * A missing host means the proxy's configured upstream host (the Docker
63
+ * publish interface); Kubernetes returns the sandbox Pod IP.
64
+ */
65
+ previewEndpoint(task: WorkTaskRecord): Promise<{
66
+ host?: string;
67
+ port: number;
68
+ } | undefined>;
69
+ /** Every sandbox this runtime has ever created, by ownership label. */
70
+ listManaged(): Promise<DiscoveredWorkContainer[]>;
71
+ /** Force-remove a managed sandbox whose task record no longer exists. */
72
+ removeOrphan(name: string): Promise<void>;
73
+ /**
74
+ * Every workspace this runtime has created, by ownership label, so
75
+ * reconciliation can report workspaces whose task record no longer
76
+ * exists. Orphaned workspaces are only reported, never auto-deleted.
77
+ */
78
+ listWorkspaces?(): Promise<{
79
+ name: string;
80
+ taskId: string;
81
+ }[]>;
82
+ /** Why interactive terminals are unavailable on this backend, if so. */
83
+ terminalUnavailableReason(): string | null;
84
+ /** Open an interactive TTY inside the sandbox as the unprivileged user. */
85
+ openTerminal(containerName: string): Promise<WorkTerminalTransport>;
86
+ }
87
+ export declare class DockerWorkRuntimeDriver implements WorkRuntimeDriver {
88
+ readonly image: string;
89
+ probe(): Promise<void>;
90
+ shutdown(): void;
91
+ ensureImage(image?: string): Promise<void>;
92
+ ensureWorkspace(task: WorkTaskRecord): Promise<void>;
93
+ ensureRuntime(task: WorkTaskRecord): Promise<void>;
94
+ runtimeState(task: WorkTaskRecord): Promise<WorkRuntimeState>;
95
+ stopRuntime(task: WorkTaskRecord): Promise<void>;
96
+ removeRuntime(task: WorkTaskRecord): Promise<void>;
97
+ removeTaskResources(task: WorkTaskRecord): Promise<void>;
98
+ exec(task: WorkTaskRecord, command: string[], options?: WorkExecOptions): Promise<ProcessResult>;
99
+ previewEndpoint(task: WorkTaskRecord): Promise<{
100
+ host?: string;
101
+ port: number;
102
+ } | undefined>;
103
+ /**
104
+ * Every container the Work runtime has ever created, in one daemon query,
105
+ * identified by the managed label stamped at `docker run` time.
106
+ */
107
+ listManaged(): Promise<DiscoveredWorkContainer[]>;
108
+ removeOrphan(name: string): Promise<void>;
109
+ /**
110
+ * The terminal talks to the Docker Engine API directly because a TTY exec
111
+ * needs a hijacked bidirectional stream, which the docker CLI only offers
112
+ * to an interactive controlling terminal. The connection is the resolved
113
+ * Docker endpoint: the Unix socket, or a plain-HTTP tcp:// endpoint such
114
+ * as a socket proxy holding the socket on the app's behalf — the hijacked
115
+ * stream survives an HTTP-aware proxy because it rides a standard
116
+ * Connection: Upgrade tunnel. Endpoints this client cannot speak to
117
+ * (ssh://, TLS-verified tcp) make the terminal report itself unavailable
118
+ * instead of guessing.
119
+ */
120
+ private readonly terminalEndpoint;
121
+ terminalUnavailableReason(): string | null;
122
+ openTerminal(containerName: string): Promise<WorkTerminalTransport>;
123
+ /**
124
+ * Transport options for the resolved endpoint. A Unix socket needs an
125
+ * explicit Host header (there is no authority in the request target); a
126
+ * tcp endpoint gets the real host:port so an HTTP-aware proxy can route
127
+ * on it.
128
+ */
129
+ private terminalTransport;
130
+ private terminalApi;
131
+ private startExecStream;
132
+ private ensureWorkNetwork;
133
+ private initializeVolume;
134
+ private volumeExists;
135
+ private containerExists;
136
+ private containerIsRunning;
137
+ private assertManagedContainer;
138
+ private containerMatchesTaskPolicy;
139
+ private assertManagedVolume;
140
+ docker(args: string[], options?: ProcessOptions): Promise<ProcessResult>;
141
+ }
142
+ export interface ExecCreatePayload {
143
+ AttachStdin: boolean;
144
+ AttachStdout: boolean;
145
+ AttachStderr: boolean;
146
+ Tty: boolean;
147
+ User: string;
148
+ WorkingDir: string;
149
+ Env: string[];
150
+ Cmd: string[];
151
+ }
152
+ export declare function buildExecCreatePayload(shell?: readonly string[]): ExecCreatePayload;
153
+ /** Parse `docker ps` lines of `name\tstate\ttask-label` into containers. */
154
+ export declare function parseManagedContainerList(stdout: string): DiscoveredWorkContainer[];
155
+ /** Bracket a bare IPv6 literal so it can carry a port in a URL. */
156
+ export declare function formatPreviewHost(host: string): string;
157
+ /**
158
+ * Turn a failed `docker info` into the change an operator has to make. These
159
+ * are the three ways a containerized Libre WebUI fails to reach the daemon:
160
+ * the image has no CLI, the bind-mounted socket is owned by a group the
161
+ * backend user is not in, or no daemon is listening.
162
+ */
163
+ export declare function describeDockerUnavailable(error: unknown, dockerCommand?: string): string;
164
+ export declare function buildWorkContainerRunArgs(task: WorkTaskRecord, policy?: ResolvedWorkRuntimePolicy): string[];
165
+ export declare function parsePublishedPort(output: string, _containerPort?: number, bindAddress?: string): number | undefined;
166
+ //# sourceMappingURL=workRuntimeDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workRuntimeDriver.d.ts","sourceRoot":"","sources":["../../src/services/workRuntimeDriver.ts"],"names":[],"mappings":"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"}