koneck 2.27.0 → 2.28.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.
- package/dist/doctor.d.ts +13 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +43 -2
- package/dist/doctor.js.map +1 -1
- package/dist/ink-chat.d.ts +9 -0
- package/dist/ink-chat.d.ts.map +1 -1
- package/dist/ink-chat.js +113 -6
- package/dist/ink-chat.js.map +1 -1
- package/dist/web/api.d.ts.map +1 -1
- package/dist/web/api.js +66 -5
- package/dist/web/api.js.map +1 -1
- package/dist/web/files.d.ts +43 -0
- package/dist/web/files.d.ts.map +1 -0
- package/dist/web/files.js +131 -0
- package/dist/web/files.js.map +1 -0
- package/dist/web/search.d.ts +45 -0
- package/dist/web/search.d.ts.map +1 -0
- package/dist/web/search.js +147 -0
- package/dist/web/search.js.map +1 -0
- package/dist/web/ui-client.d.ts.map +1 -1
- package/dist/web/ui-client.js +0 -0
- package/dist/web/ui-client.js.map +1 -1
- package/dist/web/ui-css.d.ts.map +1 -1
- package/dist/web/ui-css.js +45 -0
- package/dist/web/ui-css.js.map +1 -1
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +29 -0
- package/dist/web/ui.js.map +1 -1
- package/dist/workspace-trust.d.ts +8 -0
- package/dist/workspace-trust.d.ts.map +1 -1
- package/dist/workspace-trust.js +11 -0
- package/dist/workspace-trust.js.map +1 -1
- package/package.json +1 -1
package/dist/web/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA6BD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAmSpG"}
|
package/dist/web/api.js
CHANGED
|
@@ -13,12 +13,16 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { createServer } from 'http';
|
|
15
15
|
import { randomBytes, timingSafeEqual } from 'crypto';
|
|
16
|
+
import path from 'path';
|
|
16
17
|
import { SessionRegistry } from './sessions.js';
|
|
17
18
|
import { PROVIDERS, resolveProvider, needsNoCredential } from '../providers.js';
|
|
18
19
|
import { page } from './ui.js';
|
|
19
20
|
import { listPast, readPast } from './history.js';
|
|
20
21
|
import { snapshot, compare, summarise as summariseChanges } from './changes.js';
|
|
21
22
|
import { summarise as summariseTrajectory } from '../trajectory.js';
|
|
23
|
+
import { listDir, viewFile } from './files.js';
|
|
24
|
+
import { searchSessions } from './search.js';
|
|
25
|
+
import { trustedWorkspaces, isWorkspaceTrusted } from '../workspace-trust.js';
|
|
22
26
|
export const DEFAULT_WEB_PORT = 4300;
|
|
23
27
|
const LOOPBACK = '127.0.0.1';
|
|
24
28
|
function tokenMatches(expected, given) {
|
|
@@ -56,6 +60,14 @@ export async function startWeb(baseConfig, options = {}) {
|
|
|
56
60
|
const port = options.port ?? DEFAULT_WEB_PORT;
|
|
57
61
|
const host = options.host ?? LOOPBACK;
|
|
58
62
|
const token = options.token ?? randomBytes(24).toString('base64url');
|
|
63
|
+
/**
|
|
64
|
+
* The workspace the browser is looking at.
|
|
65
|
+
*
|
|
66
|
+
* Starts as the one KONECK was launched in and can be switched — but only to a workspace that has
|
|
67
|
+
* already been trusted at a terminal. Trust is granted after being asked; a web page that could
|
|
68
|
+
* add to that list would be exactly the escalation the prompt exists to prevent.
|
|
69
|
+
*/
|
|
70
|
+
let workspace = baseConfig.cwd;
|
|
59
71
|
const registry = new SessionRegistry();
|
|
60
72
|
/**
|
|
61
73
|
* How the workspace looked when each session started.
|
|
@@ -95,8 +107,14 @@ export async function startWeb(baseConfig, options = {}) {
|
|
|
95
107
|
if (route === '/api/workspaces' && req.method === 'GET') {
|
|
96
108
|
if (!mayRead)
|
|
97
109
|
return json(res, 401, { error: 'token required' });
|
|
110
|
+
const trusted = await trustedWorkspaces().catch(() => []);
|
|
111
|
+
// The launch directory is always offered even if it is not in the store, because getting
|
|
112
|
+
// this far means it was trusted or explicitly run with --ci.
|
|
113
|
+
const choices = [...new Set([baseConfig.cwd, ...trusted])];
|
|
98
114
|
return json(res, 200, {
|
|
99
|
-
cwd:
|
|
115
|
+
cwd: workspace,
|
|
116
|
+
launchedIn: baseConfig.cwd,
|
|
117
|
+
workspaces: choices.map(dir => ({ path: dir, name: path.basename(dir) || dir })),
|
|
100
118
|
providers: Object.values(PROVIDERS).map(p => ({
|
|
101
119
|
name: p.name, label: p.displayName, defaultModel: p.defaultModel,
|
|
102
120
|
keyless: needsNoCredential(p),
|
|
@@ -106,12 +124,52 @@ export async function startWeb(baseConfig, options = {}) {
|
|
|
106
124
|
endpoint: resolveProvider(baseConfig.provider, baseConfig.baseURL).baseURL,
|
|
107
125
|
});
|
|
108
126
|
}
|
|
127
|
+
// Switching workspace. Only to somewhere already trusted, and it says so when refused rather
|
|
128
|
+
// than failing quietly — being told to grant trust at a terminal is actionable.
|
|
129
|
+
if (route === '/api/workspace' && req.method === 'POST') {
|
|
130
|
+
if (!mayAct)
|
|
131
|
+
return json(res, 401, { error: 'token required' });
|
|
132
|
+
const body = await readBody(req);
|
|
133
|
+
const wanted = path.resolve(body.cwd ?? '');
|
|
134
|
+
if (!wanted)
|
|
135
|
+
return json(res, 400, { error: 'no workspace given' });
|
|
136
|
+
const allowed = wanted === path.resolve(baseConfig.cwd)
|
|
137
|
+
|| await isWorkspaceTrusted(wanted).catch(() => false);
|
|
138
|
+
if (!allowed) {
|
|
139
|
+
return json(res, 403, { error: `${wanted} has not been trusted. Run \`koneck\` there once and allow it — ` +
|
|
140
|
+
`trust is granted at a terminal, on purpose.` });
|
|
141
|
+
}
|
|
142
|
+
workspace = wanted;
|
|
143
|
+
return json(res, 200, { cwd: workspace, name: path.basename(workspace) });
|
|
144
|
+
}
|
|
145
|
+
// The file tree, one directory at a time. Read-only.
|
|
146
|
+
if (route === '/api/tree' && req.method === 'GET') {
|
|
147
|
+
if (!mayRead)
|
|
148
|
+
return json(res, 401, { error: 'token required' });
|
|
149
|
+
const entries = await listDir(workspace, url.searchParams.get('path') ?? '');
|
|
150
|
+
return entries
|
|
151
|
+
? json(res, 200, { path: url.searchParams.get('path') ?? '', entries })
|
|
152
|
+
: json(res, 404, { error: 'not a directory inside this workspace' });
|
|
153
|
+
}
|
|
154
|
+
if (route === '/api/file' && req.method === 'GET') {
|
|
155
|
+
if (!mayRead)
|
|
156
|
+
return json(res, 401, { error: 'token required' });
|
|
157
|
+
const found = await viewFile(workspace, url.searchParams.get('path') ?? '');
|
|
158
|
+
return found ? json(res, 200, found)
|
|
159
|
+
: json(res, 404, { error: 'not a readable file inside this workspace' });
|
|
160
|
+
}
|
|
161
|
+
// Search across every transcript in the workspace.
|
|
162
|
+
if (route === '/api/search' && req.method === 'GET') {
|
|
163
|
+
if (!mayRead)
|
|
164
|
+
return json(res, 401, { error: 'token required' });
|
|
165
|
+
return json(res, 200, await searchSessions(workspace, url.searchParams.get('q') ?? ''));
|
|
166
|
+
}
|
|
109
167
|
if (route === '/api/sessions' && req.method === 'GET') {
|
|
110
168
|
if (!mayRead)
|
|
111
169
|
return json(res, 401, { error: 'token required' });
|
|
112
170
|
return json(res, 200, {
|
|
113
171
|
live: registry.list(),
|
|
114
|
-
past: await listPast(
|
|
172
|
+
past: await listPast(workspace),
|
|
115
173
|
});
|
|
116
174
|
}
|
|
117
175
|
// One past session, read from its transcript. Read-only: the file is the record, and
|
|
@@ -119,7 +177,7 @@ export async function startWeb(baseConfig, options = {}) {
|
|
|
119
177
|
if (route === '/api/past' && req.method === 'GET') {
|
|
120
178
|
if (!mayRead)
|
|
121
179
|
return json(res, 401, { error: 'token required' });
|
|
122
|
-
const found = await readPast(
|
|
180
|
+
const found = await readPast(workspace, url.searchParams.get('file') ?? '');
|
|
123
181
|
return found ? json(res, 200, found) : json(res, 404, { error: 'no such session file' });
|
|
124
182
|
}
|
|
125
183
|
// What the workspace looks like now against how it looked when the session began.
|
|
@@ -143,7 +201,7 @@ export async function startWeb(baseConfig, options = {}) {
|
|
|
143
201
|
return json(res, 401, { error: 'token required' });
|
|
144
202
|
const file = url.searchParams.get('file');
|
|
145
203
|
if (file) {
|
|
146
|
-
const found = await readPast(
|
|
204
|
+
const found = await readPast(workspace, file);
|
|
147
205
|
if (!found)
|
|
148
206
|
return json(res, 404, { error: 'no such session file' });
|
|
149
207
|
return json(res, 200, { events: found.trajectory, summary: found.summary });
|
|
@@ -163,9 +221,12 @@ export async function startWeb(baseConfig, options = {}) {
|
|
|
163
221
|
const body = await readBody(req);
|
|
164
222
|
const session = registry.create({
|
|
165
223
|
...baseConfig,
|
|
224
|
+
// The workspace comes from server state, never from the request. Accepting a cwd here
|
|
225
|
+
// would have been a way past the trust check that /api/workspace exists to enforce:
|
|
226
|
+
// switching is checked, so creating must not be a second door with no lock on it.
|
|
227
|
+
cwd: workspace,
|
|
166
228
|
...(body.provider ? { provider: body.provider } : {}),
|
|
167
229
|
...(body.model ? { model: body.model } : {}),
|
|
168
|
-
...(body.cwd ? { cwd: body.cwd } : {}),
|
|
169
230
|
});
|
|
170
231
|
// Not awaited: the walk is bounded but a large workspace still takes a moment, and the
|
|
171
232
|
// answer here is what the client is waiting on.
|
package/dist/web/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAA6C,MAAM,MAAM,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAKtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAiB,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,SAAS,IAAI,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,QAAQ,GAAG,WAAW,CAAC;AAY7B,SAAS,YAAY,CAAC,QAAgB,EAAE,KAAgC;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa,EAAQ,EAAE;IACxE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,iCAAiC;QACjD,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC;AAEF,KAAK,UAAU,QAAQ,CAAC,GAAoB,EAAE,KAAK,GAAG,SAAS;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAI,IAAK,KAAgB,CAAC,MAAM,CAAC;QACjC,oFAAoF;QACpF,IAAI,IAAI,GAAG,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAClE,MAAM,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAAC,CAAC;AACvD,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAAuB,EAAE,UAAsB,EAAE;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC;;;;;;OAMG;IACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC;IAEpD,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;IACpB,qFAAqF;IACrF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEvC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC3B,6FAA6F;QAC7F,6DAA6D;QAC7D,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;QAEnD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;eACtC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;eAC5D,IAAI,CAAC;QACV,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAE1C,8FAA8F;QAC9F,MAAM,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC;QAEtB,IAAI,CAAC;YACH,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;gBACnE,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YAED,IAAI,KAAK,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACnD,sFAAsF;gBACtF,wFAAwF;gBACxF,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACrF,CAAC;YAED,IAAI,KAAK,KAAK,iBAAiB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACxD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;oBACpB,GAAG,EAAE,UAAU,CAAC,GAAG;oBACnB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC5C,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY;wBAChE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;qBAC9B,CAAC,CAAC;oBACH,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO;iBAC3E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,KAAK,KAAK,eAAe,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACtD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;oBACpB,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;oBACrB,IAAI,EAAE,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;iBACrC,CAAC,CAAC;YACL,CAAC;YAED,qFAAqF;YACrF,yFAAyF;YACzF,IAAI,KAAK,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAClD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACjE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjF,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;YAC3F,CAAC;YAED,kFAAkF;YAClF,IAAI,KAAK,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAClE,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,QAAQ;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;wBACvD,IAAI,EAAE,8BAA8B,EAAE,CAAC,CAAC;gBAC/E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,qFAAqF;YACrF,IAAI,KAAK,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACpD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACjE,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACnD,IAAI,CAAC,KAAK;wBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;oBACrE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9E,CAAC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;oBACpB,MAAM;oBACN,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;iBAC5D,CAAC,CAAC;YACL,CAAC;YAED,IAAI,KAAK,KAAK,eAAe,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACvD,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAwD,CAAC;gBACxF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC9B,GAAG,UAAU;oBACb,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvC,CAAC,CAAC;gBACH,uFAAuF;gBACvF,gDAAgD;gBAChD,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;qBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;qBAC7C,KAAK,CAAC,GAAG,EAAE,GAA8D,CAAC,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,uEAAuE;YACvE,IAAI,KAAK,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACpD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAElE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;oBACjB,cAAc,EAAE,kCAAkC;oBAClD,eAAe,EAAE,wBAAwB;oBACzC,UAAU,EAAE,YAAY;oBACxB,mBAAmB,EAAE,IAAI,EAAS,8CAA8C;iBACjF,CAAC,CAAC;gBAEH,uFAAuF;gBACvF,yFAAyF;gBACzF,0FAA0F;gBAC1F,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5F,MAAM,KAAK,GAAG,CAAC,CAAkB,EAAQ,EAAE;oBACzC,oFAAoF;oBACpF,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5D,CAAC,CAAC;gBACF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5F,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC1C,0FAA0F;gBAC1F,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;YAED,IAAI,KAAK,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACnD,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAwC,CAAC;gBACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAC5E,uFAAuF;gBACvF,6EAA6E;gBAC7E,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAA4C,CAAC,CAAC,CAAC;gBACvF,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,KAAK,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAwD,CAAC;gBACxF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAClE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;gBAC/D,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,IAAI,KAAK,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpD,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAyB,CAAC;gBACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAClE,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,KAAK,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpD,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAA4D,CAAC;gBAC5F,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAClE,OAAO,CAAC,WAAW,CAAC;oBAClB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7C,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,4FAA4F;IAC5F,0FAA0F;IAC1F,MAAM,KAAK,GAAI,MAAM,CAAC,OAAO,EAA8B,EAAE,IAAI,IAAI,IAAI,CAAC;IAC1E,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,MAAM,GAAG,GAAG,UAAU,KAAK,IAAI,KAAK,WAAW,KAAK,EAAE,CAAC;IACvD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,uDAAuD,CAAC,CAAC;YAC/F,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;YAC5F,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG;QACH,KAAK;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YACvC,mFAAmF;YACnF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAAC,CAAC;YAC3E,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9B,kFAAkF;YACjF,MAA+C,CAAC,mBAAmB,EAAE,EAAE,CAAC;QAC3E,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading the workspace: a tree to browse, and a file to look at.
|
|
3
|
+
*
|
|
4
|
+
* Every path arrives from a URL, so every path is resolved and checked against the workspace root
|
|
5
|
+
* before anything is opened. That check is the whole of this module's security, and it is done once
|
|
6
|
+
* in one function rather than at each call site — `..` is the obvious attack and a symlink pointing
|
|
7
|
+
* out of the tree is the one that gets forgotten, so the resolved real path is what gets compared.
|
|
8
|
+
*
|
|
9
|
+
* Read-only. Editing from the browser is a different feature with a different risk, and mixing the
|
|
10
|
+
* two would mean a traversal bug wrote instead of leaked.
|
|
11
|
+
*/
|
|
12
|
+
/** A file this size is shown by its head, because nothing reads a megabyte in a browser panel. */
|
|
13
|
+
export declare const MAX_VIEW_BYTES: number;
|
|
14
|
+
/** Entries per directory. A folder with ten thousand files is not a tree to browse. */
|
|
15
|
+
export declare const MAX_ENTRIES = 500;
|
|
16
|
+
export interface TreeEntry {
|
|
17
|
+
name: string;
|
|
18
|
+
/** Relative to the workspace root, always with forward slashes. */
|
|
19
|
+
path: string;
|
|
20
|
+
dir: boolean;
|
|
21
|
+
size: number;
|
|
22
|
+
mtimeMs: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The resolved absolute path, or null when it would leave the workspace.
|
|
26
|
+
*
|
|
27
|
+
* Symlinks are resolved first, so a link inside the workspace pointing at /etc is caught. A path
|
|
28
|
+
* that does not exist yet cannot be realpath'd, so the parent is resolved instead and the last
|
|
29
|
+
* segment appended — which is what a browser asking for a file it saw a moment ago needs.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveInside(root: string, rel: string): Promise<string | null>;
|
|
32
|
+
/** One directory, folders first then files, both alphabetical. */
|
|
33
|
+
export declare function listDir(root: string, rel?: string): Promise<TreeEntry[] | null>;
|
|
34
|
+
export interface FileView {
|
|
35
|
+
path: string;
|
|
36
|
+
size: number;
|
|
37
|
+
text: string | null;
|
|
38
|
+
truncated: boolean;
|
|
39
|
+
binary: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** One file, as text where that means anything. */
|
|
42
|
+
export declare function viewFile(root: string, rel: string): Promise<FileView | null>;
|
|
43
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/web/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,kGAAkG;AAClG,eAAO,MAAM,cAAc,QAAa,CAAC;AACzC,uFAAuF;AACvF,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBrF;AAED,kEAAkE;AAClE,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAyBjF;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAWD,mDAAmD;AACnD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAuBlF"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading the workspace: a tree to browse, and a file to look at.
|
|
3
|
+
*
|
|
4
|
+
* Every path arrives from a URL, so every path is resolved and checked against the workspace root
|
|
5
|
+
* before anything is opened. That check is the whole of this module's security, and it is done once
|
|
6
|
+
* in one function rather than at each call site — `..` is the obvious attack and a symlink pointing
|
|
7
|
+
* out of the tree is the one that gets forgotten, so the resolved real path is what gets compared.
|
|
8
|
+
*
|
|
9
|
+
* Read-only. Editing from the browser is a different feature with a different risk, and mixing the
|
|
10
|
+
* two would mean a traversal bug wrote instead of leaked.
|
|
11
|
+
*/
|
|
12
|
+
import { readdir, readFile, stat, realpath } from 'fs/promises';
|
|
13
|
+
import path from 'path';
|
|
14
|
+
/** Never listed: generated, enormous, or not the user's work. */
|
|
15
|
+
const HIDE = new Set([
|
|
16
|
+
'node_modules', '.git', '.svn', '.hg', 'dist', 'build', 'out', 'target',
|
|
17
|
+
'.next', '.nuxt', '.venv', 'venv', '__pycache__', '.cache', '.turbo',
|
|
18
|
+
'coverage', '.pytest_cache', '.mypy_cache', '.gradle', '.idea', '.DS_Store',
|
|
19
|
+
]);
|
|
20
|
+
/** A file this size is shown by its head, because nothing reads a megabyte in a browser panel. */
|
|
21
|
+
export const MAX_VIEW_BYTES = 400 * 1024;
|
|
22
|
+
/** Entries per directory. A folder with ten thousand files is not a tree to browse. */
|
|
23
|
+
export const MAX_ENTRIES = 500;
|
|
24
|
+
/**
|
|
25
|
+
* The resolved absolute path, or null when it would leave the workspace.
|
|
26
|
+
*
|
|
27
|
+
* Symlinks are resolved first, so a link inside the workspace pointing at /etc is caught. A path
|
|
28
|
+
* that does not exist yet cannot be realpath'd, so the parent is resolved instead and the last
|
|
29
|
+
* segment appended — which is what a browser asking for a file it saw a moment ago needs.
|
|
30
|
+
*/
|
|
31
|
+
export async function resolveInside(root, rel) {
|
|
32
|
+
// A NUL in a path is a way to truncate it inside a syscall, so it never gets that far.
|
|
33
|
+
if (rel.includes(String.fromCharCode(0)))
|
|
34
|
+
return null;
|
|
35
|
+
const rootReal = await realpath(root).catch(() => path.resolve(root));
|
|
36
|
+
const wanted = path.resolve(rootReal, rel);
|
|
37
|
+
const check = (candidate) => {
|
|
38
|
+
const relative = path.relative(rootReal, candidate);
|
|
39
|
+
// Empty means the root itself, which is allowed. Anything starting with `..`, or absolute,
|
|
40
|
+
// is outside.
|
|
41
|
+
if (relative !== '' && (relative.startsWith('..') || path.isAbsolute(relative)))
|
|
42
|
+
return null;
|
|
43
|
+
return candidate;
|
|
44
|
+
};
|
|
45
|
+
const real = await realpath(wanted).catch(() => null);
|
|
46
|
+
if (real)
|
|
47
|
+
return check(real);
|
|
48
|
+
const parentReal = await realpath(path.dirname(wanted)).catch(() => null);
|
|
49
|
+
if (!parentReal)
|
|
50
|
+
return null;
|
|
51
|
+
return check(path.join(parentReal, path.basename(wanted)));
|
|
52
|
+
}
|
|
53
|
+
/** One directory, folders first then files, both alphabetical. */
|
|
54
|
+
export async function listDir(root, rel = '') {
|
|
55
|
+
const dir = await resolveInside(root, rel);
|
|
56
|
+
if (!dir)
|
|
57
|
+
return null;
|
|
58
|
+
let entries;
|
|
59
|
+
try {
|
|
60
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const out = [];
|
|
66
|
+
for (const entry of entries) {
|
|
67
|
+
if (out.length >= MAX_ENTRIES)
|
|
68
|
+
break;
|
|
69
|
+
if (HIDE.has(entry.name))
|
|
70
|
+
continue;
|
|
71
|
+
const full = path.join(dir, entry.name);
|
|
72
|
+
const childRel = path.posix.join(rel.split(path.sep).join('/'), entry.name);
|
|
73
|
+
try {
|
|
74
|
+
const info = await stat(full);
|
|
75
|
+
out.push({
|
|
76
|
+
name: entry.name,
|
|
77
|
+
path: childRel,
|
|
78
|
+
dir: info.isDirectory(),
|
|
79
|
+
size: info.isDirectory() ? 0 : info.size,
|
|
80
|
+
mtimeMs: info.mtimeMs,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch { /* vanished, or a broken symlink */ }
|
|
84
|
+
}
|
|
85
|
+
return out.sort((a, b) => a.dir === b.dir ? a.name.localeCompare(b.name) : (a.dir ? -1 : 1));
|
|
86
|
+
}
|
|
87
|
+
const BINARY_EXT = new Set([
|
|
88
|
+
'.png', '.jpg', '.jpeg', '.gif', '.webp', '.avif', '.ico', '.bmp', '.pdf',
|
|
89
|
+
'.zip', '.gz', '.tgz', '.bz2', '.xz', '.7z', '.rar', '.jar', '.wasm',
|
|
90
|
+
'.mp3', '.mp4', '.mov', '.avi', '.mkv', '.wav', '.flac', '.ogg',
|
|
91
|
+
'.woff', '.woff2', '.ttf', '.otf', '.so', '.dylib', '.dll', '.exe', '.bin',
|
|
92
|
+
'.db', '.sqlite', '.sqlite3', '.pyc', '.class', '.node',
|
|
93
|
+
]);
|
|
94
|
+
const NUL = String.fromCharCode(0);
|
|
95
|
+
/** One file, as text where that means anything. */
|
|
96
|
+
export async function viewFile(root, rel) {
|
|
97
|
+
const full = await resolveInside(root, rel);
|
|
98
|
+
if (!full)
|
|
99
|
+
return null;
|
|
100
|
+
let info;
|
|
101
|
+
try {
|
|
102
|
+
info = await stat(full);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
if (!info.isFile())
|
|
108
|
+
return null;
|
|
109
|
+
if (BINARY_EXT.has(path.extname(full).toLowerCase())) {
|
|
110
|
+
return { path: rel, size: info.size, text: null, truncated: false, binary: true };
|
|
111
|
+
}
|
|
112
|
+
let text;
|
|
113
|
+
try {
|
|
114
|
+
text = await readFile(full, 'utf8');
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
if (text.slice(0, 4_000).includes(NUL)) {
|
|
120
|
+
return { path: rel, size: info.size, text: null, truncated: false, binary: true };
|
|
121
|
+
}
|
|
122
|
+
const truncated = text.length > MAX_VIEW_BYTES;
|
|
123
|
+
return {
|
|
124
|
+
path: rel,
|
|
125
|
+
size: info.size,
|
|
126
|
+
text: truncated ? text.slice(0, MAX_VIEW_BYTES) : text,
|
|
127
|
+
truncated,
|
|
128
|
+
binary: false,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/web/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Searching everything KONECK has ever done in a workspace.
|
|
3
|
+
*
|
|
4
|
+
* The transcripts hold every question asked, every reply, every command run and every file read —
|
|
5
|
+
* which makes them the most useful record on the machine and, until now, the least reachable. The
|
|
6
|
+
* question people actually have is "when did I deal with this before, and what did it turn out to
|
|
7
|
+
* be", and answering it meant grepping JSONL by hand.
|
|
8
|
+
*
|
|
9
|
+
* Streamed line by line rather than parsed whole: a workspace can hold hundreds of sessions and a
|
|
10
|
+
* long transcript is megabytes, so nothing is held that is not a hit. Bounded on files, matches per
|
|
11
|
+
* file, and total matches, and it says when it stopped early — a search that silently truncates is
|
|
12
|
+
* worse than one that admits it.
|
|
13
|
+
*/
|
|
14
|
+
export interface SearchHit {
|
|
15
|
+
/** The transcript this came from. */
|
|
16
|
+
file: string;
|
|
17
|
+
task: string;
|
|
18
|
+
at: number;
|
|
19
|
+
/** Where in the conversation: what the user asked, what was replied, a tool call. */
|
|
20
|
+
role: 'user' | 'assistant' | 'tool' | 'other';
|
|
21
|
+
/** The tool's name, when the hit is in a tool call. */
|
|
22
|
+
tool?: string;
|
|
23
|
+
/** The matching text, trimmed around the match. */
|
|
24
|
+
snippet: string;
|
|
25
|
+
/** Character offset of the match inside the snippet, for highlighting. */
|
|
26
|
+
offset: number;
|
|
27
|
+
}
|
|
28
|
+
export interface SearchResult {
|
|
29
|
+
hits: SearchHit[];
|
|
30
|
+
filesSearched: number;
|
|
31
|
+
/** True when a limit stopped the search before the end. */
|
|
32
|
+
capped: boolean;
|
|
33
|
+
ms: number;
|
|
34
|
+
}
|
|
35
|
+
export declare const MAX_FILES = 300;
|
|
36
|
+
export declare const MAX_HITS = 200;
|
|
37
|
+
export declare const MAX_HITS_PER_FILE = 8;
|
|
38
|
+
/**
|
|
39
|
+
* Every transcript in a workspace that mentions the query.
|
|
40
|
+
*
|
|
41
|
+
* Case-insensitive plain text, not a regex: a search box that accepts patterns is a search box that
|
|
42
|
+
* hangs on a bad one, and nobody typing into a sidebar means `(a+)+b`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function searchSessions(cwd: string, query: string): Promise<SearchResult>;
|
|
45
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/web/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,SAAS;IACxB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,qFAAqF;IACrF,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,SAAS,MAAM,CAAC;AAC7B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,eAAO,MAAM,iBAAiB,IAAI,CAAC;AA6CnC;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA+DtF"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Searching everything KONECK has ever done in a workspace.
|
|
3
|
+
*
|
|
4
|
+
* The transcripts hold every question asked, every reply, every command run and every file read —
|
|
5
|
+
* which makes them the most useful record on the machine and, until now, the least reachable. The
|
|
6
|
+
* question people actually have is "when did I deal with this before, and what did it turn out to
|
|
7
|
+
* be", and answering it meant grepping JSONL by hand.
|
|
8
|
+
*
|
|
9
|
+
* Streamed line by line rather than parsed whole: a workspace can hold hundreds of sessions and a
|
|
10
|
+
* long transcript is megabytes, so nothing is held that is not a hit. Bounded on files, matches per
|
|
11
|
+
* file, and total matches, and it says when it stopped early — a search that silently truncates is
|
|
12
|
+
* worse than one that admits it.
|
|
13
|
+
*/
|
|
14
|
+
import { createReadStream } from 'fs';
|
|
15
|
+
import { readdir, stat } from 'fs/promises';
|
|
16
|
+
import { existsSync } from 'fs';
|
|
17
|
+
import { createInterface } from 'readline';
|
|
18
|
+
import path from 'path';
|
|
19
|
+
import { redactSecrets } from '../redact.js';
|
|
20
|
+
export const MAX_FILES = 300;
|
|
21
|
+
export const MAX_HITS = 200;
|
|
22
|
+
export const MAX_HITS_PER_FILE = 8;
|
|
23
|
+
/** Around the match: enough to recognise, not enough to fill the panel. */
|
|
24
|
+
const CONTEXT = 90;
|
|
25
|
+
/** The matching stretch with a little either side, on one line. */
|
|
26
|
+
function snippetAround(text, at, needleLength) {
|
|
27
|
+
const from = Math.max(0, at - CONTEXT);
|
|
28
|
+
const to = Math.min(text.length, at + needleLength + CONTEXT);
|
|
29
|
+
const lead = from > 0 ? '…' : '';
|
|
30
|
+
const tail = to < text.length ? '…' : '';
|
|
31
|
+
const body = text.slice(from, to).replace(/\s+/g, ' ').trim();
|
|
32
|
+
// The offset moves with the whitespace collapse, so it is recomputed rather than adjusted.
|
|
33
|
+
const needle = text.slice(at, at + needleLength).replace(/\s+/g, ' ').trim();
|
|
34
|
+
const found = body.toLowerCase().indexOf(needle.toLowerCase());
|
|
35
|
+
return { snippet: lead + body + tail, offset: found === -1 ? 0 : found + lead.length };
|
|
36
|
+
}
|
|
37
|
+
/** Whatever a record has that is worth searching, flattened to text. */
|
|
38
|
+
function searchableParts(record) {
|
|
39
|
+
const message = (record['type'] === 'message' ? record['data'] : record);
|
|
40
|
+
const role = message?.['role'];
|
|
41
|
+
if (typeof role !== 'string')
|
|
42
|
+
return [];
|
|
43
|
+
const out = [];
|
|
44
|
+
const content = message?.['content'];
|
|
45
|
+
if (typeof content === 'string' && content.trim()) {
|
|
46
|
+
// The system prompt is KONECK's own instructions, and matching them once per session is noise
|
|
47
|
+
// that buries every real hit.
|
|
48
|
+
if (role === 'system')
|
|
49
|
+
return [];
|
|
50
|
+
out.push({ role: role === 'user' ? 'user' : role === 'assistant' ? 'assistant'
|
|
51
|
+
: role === 'tool' ? 'tool' : 'other', text: content });
|
|
52
|
+
}
|
|
53
|
+
const calls = message?.['tool_calls'];
|
|
54
|
+
if (Array.isArray(calls)) {
|
|
55
|
+
for (const call of calls) {
|
|
56
|
+
const fn = (call['function'] ?? {});
|
|
57
|
+
const args = fn['arguments'];
|
|
58
|
+
if (typeof args === 'string' && args.trim()) {
|
|
59
|
+
out.push({ role: 'tool', tool: String(fn['name'] ?? 'tool'), text: args });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Every transcript in a workspace that mentions the query.
|
|
67
|
+
*
|
|
68
|
+
* Case-insensitive plain text, not a regex: a search box that accepts patterns is a search box that
|
|
69
|
+
* hangs on a bad one, and nobody typing into a sidebar means `(a+)+b`.
|
|
70
|
+
*/
|
|
71
|
+
export async function searchSessions(cwd, query) {
|
|
72
|
+
const started = Date.now();
|
|
73
|
+
const needle = query.trim().toLowerCase();
|
|
74
|
+
if (needle.length < 2) {
|
|
75
|
+
return { hits: [], filesSearched: 0, capped: false, ms: 0 };
|
|
76
|
+
}
|
|
77
|
+
const dir = path.join(cwd, '.koneck', 'sessions');
|
|
78
|
+
if (!existsSync(dir))
|
|
79
|
+
return { hits: [], filesSearched: 0, capped: false, ms: 0 };
|
|
80
|
+
let files;
|
|
81
|
+
try {
|
|
82
|
+
files = (await readdir(dir)).filter(f => f.endsWith('.jsonl')).sort().reverse();
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return { hits: [], filesSearched: 0, capped: false, ms: 0 };
|
|
86
|
+
}
|
|
87
|
+
const capped = files.length > MAX_FILES;
|
|
88
|
+
const hits = [];
|
|
89
|
+
let filesSearched = 0;
|
|
90
|
+
for (const file of files.slice(0, MAX_FILES)) {
|
|
91
|
+
if (hits.length >= MAX_HITS)
|
|
92
|
+
return { hits, filesSearched, capped: true, ms: Date.now() - started };
|
|
93
|
+
const full = path.join(dir, file);
|
|
94
|
+
filesSearched++;
|
|
95
|
+
let task = '(no description)';
|
|
96
|
+
let at = 0;
|
|
97
|
+
try {
|
|
98
|
+
at = (await stat(full)).mtimeMs;
|
|
99
|
+
}
|
|
100
|
+
catch { /* keep zero */ }
|
|
101
|
+
let inFile = 0;
|
|
102
|
+
// A line reader, so a large transcript is never in memory whole.
|
|
103
|
+
const reader = createInterface({ input: createReadStream(full, 'utf8'), crlfDelay: Infinity });
|
|
104
|
+
try {
|
|
105
|
+
for await (const line of reader) {
|
|
106
|
+
if (!line.trim())
|
|
107
|
+
continue;
|
|
108
|
+
let record;
|
|
109
|
+
try {
|
|
110
|
+
record = JSON.parse(line);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (record['type'] === 'meta') {
|
|
116
|
+
const meta = (record['data'] ?? {});
|
|
117
|
+
task = redactSecrets(String(meta['task'] ?? task)).slice(0, 120);
|
|
118
|
+
if (typeof meta['at'] === 'number')
|
|
119
|
+
at = meta['at'];
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (inFile >= MAX_HITS_PER_FILE || hits.length >= MAX_HITS)
|
|
123
|
+
break;
|
|
124
|
+
for (const part of searchableParts(record)) {
|
|
125
|
+
const found = part.text.toLowerCase().indexOf(needle);
|
|
126
|
+
if (found === -1)
|
|
127
|
+
continue;
|
|
128
|
+
const { snippet, offset } = snippetAround(part.text, found, needle.length);
|
|
129
|
+
hits.push({
|
|
130
|
+
file, task, at, role: part.role,
|
|
131
|
+
...(part.tool ? { tool: part.tool } : {}),
|
|
132
|
+
snippet: redactSecrets(snippet), offset,
|
|
133
|
+
});
|
|
134
|
+
inFile++;
|
|
135
|
+
if (inFile >= MAX_HITS_PER_FILE || hits.length >= MAX_HITS)
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch { /* unreadable part-way through: what was found still counts */ }
|
|
141
|
+
finally {
|
|
142
|
+
reader.close();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return { hits, filesSearched, capped: capped || hits.length >= MAX_HITS, ms: Date.now() - started };
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/web/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-client.d.ts","sourceRoot":"","sources":["../../src/web/ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"ui-client.d.ts","sourceRoot":"","sources":["../../src/web/ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAmyBrC"}
|
package/dist/web/ui-client.js
CHANGED
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-client.js","sourceRoot":"","sources":["../../src/web/ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"ui-client.js","sourceRoot":"","sources":["../../src/web/ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiyBlB,CAAC;AACF,CAAC"}
|
package/dist/web/ui-css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-css.d.ts","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ui-css.d.ts","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA0T3C"}
|