@wrongstack/webui-server 0.284.1 → 0.285.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/index.d.ts +11 -2300
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1019 -277
- package/dist/index.js.map +7 -1
- package/dist/server/autophase-routes.d.ts +10 -0
- package/dist/server/autophase-routes.d.ts.map +1 -0
- package/dist/server/autophase-ws-handler.d.ts +87 -0
- package/dist/server/autophase-ws-handler.d.ts.map +1 -0
- package/dist/server/backend-services.d.ts +114 -0
- package/dist/server/backend-services.d.ts.map +1 -0
- package/dist/server/boot.d.ts +19 -0
- package/dist/server/boot.d.ts.map +1 -0
- package/dist/server/brain-routes.d.ts +9 -0
- package/dist/server/brain-routes.d.ts.map +1 -0
- package/dist/server/codebase-indexing.d.ts +15 -0
- package/dist/server/codebase-indexing.d.ts.map +1 -0
- package/dist/server/collaboration-ws-handler.d.ts +159 -0
- package/dist/server/collaboration-ws-handler.d.ts.map +1 -0
- package/dist/server/completion-handlers.d.ts +39 -0
- package/dist/server/completion-handlers.d.ts.map +1 -0
- package/dist/server/connection-handler.d.ts +72 -0
- package/dist/server/connection-handler.d.ts.map +1 -0
- package/dist/server/context-meta.d.ts +28 -0
- package/dist/server/context-meta.d.ts.map +1 -0
- package/dist/server/custom-context-modes.d.ts +43 -0
- package/dist/server/custom-context-modes.d.ts.map +1 -0
- package/dist/server/design-handlers.d.ts +40 -0
- package/dist/server/design-handlers.d.ts.map +1 -0
- package/dist/server/discover-mailbox-bridge.d.ts +26 -0
- package/dist/server/discover-mailbox-bridge.d.ts.map +1 -0
- package/dist/server/entry.d.ts +2 -2
- package/dist/server/entry.d.ts.map +1 -0
- package/dist/server/entry.js +811 -300
- package/dist/server/entry.js.map +7 -1
- package/dist/server/eternal-iteration-broadcast.d.ts +11 -0
- package/dist/server/eternal-iteration-broadcast.d.ts.map +1 -0
- package/dist/server/file-handlers.d.ts +45 -0
- package/dist/server/file-handlers.d.ts.map +1 -0
- package/dist/server/file-picker.d.ts +26 -0
- package/dist/server/file-picker.d.ts.map +1 -0
- package/dist/server/git-handlers.d.ts +55 -0
- package/dist/server/git-handlers.d.ts.map +1 -0
- package/dist/server/goal-handlers.d.ts +19 -0
- package/dist/server/goal-handlers.d.ts.map +1 -0
- package/dist/server/handlers/index.d.ts +12 -0
- package/dist/server/handlers/index.d.ts.map +1 -0
- package/dist/server/handlers/worklist-handlers.d.ts +49 -0
- package/dist/server/handlers/worklist-handlers.d.ts.map +1 -0
- package/dist/server/handlers.d.ts +1 -51
- package/dist/server/handlers.js +17 -8
- package/dist/server/handlers.js.map +7 -1
- package/dist/server/http-server/analytics-handler.d.ts +35 -0
- package/dist/server/http-server/analytics-handler.d.ts.map +1 -0
- package/dist/server/http-server/api-handlers.d.ts +44 -0
- package/dist/server/http-server/api-handlers.d.ts.map +1 -0
- package/dist/server/http-server.d.ts +108 -0
- package/dist/server/http-server.d.ts.map +1 -0
- package/dist/server/index.d.ts +93 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/instance-registry.d.ts +63 -0
- package/dist/server/instance-registry.d.ts.map +1 -0
- package/dist/server/kanban-routes.d.ts +7 -0
- package/dist/server/kanban-routes.d.ts.map +1 -0
- package/dist/server/lifecycle.d.ts +51 -0
- package/dist/server/lifecycle.d.ts.map +1 -0
- package/dist/server/mailbox-handlers.d.ts +51 -0
- package/dist/server/mailbox-handlers.d.ts.map +1 -0
- package/dist/server/mailbox-routes.d.ts +10 -0
- package/dist/server/mailbox-routes.d.ts.map +1 -0
- package/dist/server/mcp-handlers.d.ts +46 -0
- package/dist/server/mcp-handlers.d.ts.map +1 -0
- package/dist/server/mcp-routes.d.ts +37 -0
- package/dist/server/mcp-routes.d.ts.map +1 -0
- package/dist/server/memory-handlers.d.ts +28 -0
- package/dist/server/memory-handlers.d.ts.map +1 -0
- package/dist/server/message-dispatcher.d.ts +41 -0
- package/dist/server/message-dispatcher.d.ts.map +1 -0
- package/dist/server/mode-handlers.d.ts +50 -0
- package/dist/server/mode-handlers.d.ts.map +1 -0
- package/dist/server/mode-routes.d.ts +8 -0
- package/dist/server/mode-routes.d.ts.map +1 -0
- package/dist/server/model-auto-discovery.d.ts +9 -0
- package/dist/server/model-auto-discovery.d.ts.map +1 -0
- package/dist/server/model-catalog.d.ts +16 -0
- package/dist/server/model-catalog.d.ts.map +1 -0
- package/dist/server/open-browser.d.ts +16 -0
- package/dist/server/open-browser.d.ts.map +1 -0
- package/dist/server/path-containment.d.ts +3 -0
- package/dist/server/path-containment.d.ts.map +1 -0
- package/dist/server/pending-confirms.d.ts +14 -0
- package/dist/server/pending-confirms.d.ts.map +1 -0
- package/dist/server/port-utils.d.ts +28 -0
- package/dist/server/port-utils.d.ts.map +1 -0
- package/dist/server/pre-context-services.d.ts +58 -0
- package/dist/server/pre-context-services.d.ts.map +1 -0
- package/dist/server/pref-helpers.d.ts +43 -0
- package/dist/server/pref-helpers.d.ts.map +1 -0
- package/dist/server/prefs-routes.d.ts +27 -0
- package/dist/server/prefs-routes.d.ts.map +1 -0
- package/dist/server/process-handlers.d.ts +20 -0
- package/dist/server/process-handlers.d.ts.map +1 -0
- package/dist/server/project-handlers.d.ts +53 -0
- package/dist/server/project-handlers.d.ts.map +1 -0
- package/dist/server/project-routes.d.ts +10 -0
- package/dist/server/project-routes.d.ts.map +1 -0
- package/dist/server/projects-manifest.d.ts +18 -0
- package/dist/server/projects-manifest.d.ts.map +1 -0
- package/dist/server/prompts-handlers.d.ts +38 -0
- package/dist/server/prompts-handlers.d.ts.map +1 -0
- package/dist/server/provider-config-io.d.ts +15 -0
- package/dist/server/provider-config-io.d.ts.map +1 -0
- package/dist/server/provider-config-standalone.d.ts +13 -0
- package/dist/server/provider-config-standalone.d.ts.map +1 -0
- package/dist/server/provider-handlers.d.ts +74 -0
- package/dist/server/provider-handlers.d.ts.map +1 -0
- package/dist/server/provider-keys.d.ts +53 -0
- package/dist/server/provider-keys.d.ts.map +1 -0
- package/dist/server/provider-routes.d.ts +13 -0
- package/dist/server/provider-routes.d.ts.map +1 -0
- package/dist/server/provider-store.d.ts +26 -0
- package/dist/server/provider-store.d.ts.map +1 -0
- package/dist/server/routes.d.ts +182 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/sdd-board-routes.d.ts +11 -0
- package/dist/server/sdd-board-routes.d.ts.map +1 -0
- package/dist/server/sdd-board-ws-handler.d.ts +57 -0
- package/dist/server/sdd-board-ws-handler.d.ts.map +1 -0
- package/dist/server/sdd-wizard-routes.d.ts +16 -0
- package/dist/server/sdd-wizard-routes.d.ts.map +1 -0
- package/dist/server/sdd-wizard-wiring.d.ts +26 -0
- package/dist/server/sdd-wizard-wiring.d.ts.map +1 -0
- package/dist/server/sdd-wizard-ws-handler.d.ts +66 -0
- package/dist/server/sdd-wizard-ws-handler.d.ts.map +1 -0
- package/dist/server/server-runtime.d.ts +118 -0
- package/dist/server/server-runtime.d.ts.map +1 -0
- package/dist/server/session-handlers.d.ts +44 -0
- package/dist/server/session-handlers.d.ts.map +1 -0
- package/dist/server/session-routes.d.ts +23 -0
- package/dist/server/session-routes.d.ts.map +1 -0
- package/dist/server/setup-events.d.ts +67 -0
- package/dist/server/setup-events.d.ts.map +1 -0
- package/dist/server/setup-screen.d.ts +44 -0
- package/dist/server/setup-screen.d.ts.map +1 -0
- package/dist/server/shell-git-routes.d.ts +10 -0
- package/dist/server/shell-git-routes.d.ts.map +1 -0
- package/dist/server/shell-open.d.ts +12 -0
- package/dist/server/shell-open.d.ts.map +1 -0
- package/dist/server/skills-handlers.d.ts +77 -0
- package/dist/server/skills-handlers.d.ts.map +1 -0
- package/dist/server/specs-routes.d.ts +11 -0
- package/dist/server/specs-routes.d.ts.map +1 -0
- package/dist/server/specs-ws-handler.d.ts +34 -0
- package/dist/server/specs-ws-handler.d.ts.map +1 -0
- package/dist/server/start-webui.d.ts +29 -0
- package/dist/server/start-webui.d.ts.map +1 -0
- package/dist/server/terminal-ws-handler.d.ts +70 -0
- package/dist/server/terminal-ws-handler.d.ts.map +1 -0
- package/dist/server/token-estimator.d.ts +66 -0
- package/dist/server/token-estimator.d.ts.map +1 -0
- package/dist/server/types.d.ts +143 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/usage-cost.d.ts +39 -0
- package/dist/server/usage-cost.d.ts.map +1 -0
- package/dist/server/worktree-ws-handler.d.ts +67 -0
- package/dist/server/worktree-ws-handler.d.ts.map +1 -0
- package/dist/server/ws-auth.d.ts +83 -0
- package/dist/server/ws-auth.d.ts.map +1 -0
- package/dist/server/ws-payload-validation.d.ts +122 -0
- package/dist/server/ws-payload-validation.d.ts.map +1 -0
- package/dist/server/ws-utils.d.ts +38 -0
- package/dist/server/ws-utils.d.ts.map +1 -0
- package/dist/server/zip.d.ts +9 -0
- package/dist/server/zip.d.ts.map +1 -0
- package/package.json +11 -12
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { WebSocket } from 'ws';
|
|
2
|
+
import type { WSServerMessage } from './types.js';
|
|
3
|
+
import type { JournalEntry } from '@wrongstack/core';
|
|
4
|
+
export type EternalSubscribe = (fn: (entry: JournalEntry) => void) => () => void;
|
|
5
|
+
export type EternalBroadcast<C> = (clients: Map<WebSocket, C>, msg: WSServerMessage) => void;
|
|
6
|
+
export interface EternalSubscription {
|
|
7
|
+
/** Tear down the underlying engine subscription. Idempotent. */
|
|
8
|
+
dispose: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function createEternalSubscription<C>(subscribe: EternalSubscribe, broadcast: EternalBroadcast<C>, clientsRef: () => Map<WebSocket, C>): EternalSubscription;
|
|
11
|
+
//# sourceMappingURL=eternal-iteration-broadcast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eternal-iteration-broadcast.d.ts","sourceRoot":"","sources":["../../src/server/eternal-iteration-broadcast.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG,CAC7B,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,KAC9B,MAAM,IAAI,CAAC;AAShB,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAC;AAE7F,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC9B,UAAU,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,GAClC,mBAAmB,CAgBrB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared file-operation WebSocket handlers for both the standalone WebUI
|
|
3
|
+
* server and the CLI's `--webui` embedded server. Extracted from the
|
|
4
|
+
* duplicated switch cases in `index.ts` and `cli/src/webui-server.ts`.
|
|
5
|
+
*
|
|
6
|
+
* Each function handles the full request→response cycle for one message
|
|
7
|
+
* type. Callers drop them into their switch statement:
|
|
8
|
+
*
|
|
9
|
+
* case 'files.tree': return handleFilesTree(ws, msg, projectRoot);
|
|
10
|
+
*/
|
|
11
|
+
import type { WebSocket } from 'ws';
|
|
12
|
+
export interface FilesWriteOptions {
|
|
13
|
+
onWritten?: ((filePath: string) => void | Promise<void>) | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build and send a nested directory tree for the File Explorer.
|
|
17
|
+
*
|
|
18
|
+
* Walks `projectRoot` to depth 10 max, skipping heavyweight dirs
|
|
19
|
+
* (node_modules, .git, dist, …) and dot-entries. Responds with
|
|
20
|
+
* `{ type: 'files.tree', payload: { root, tree } }`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function handleFilesTree(ws: WebSocket, msg: unknown, projectRoot: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Read a file's content for the Monaco editor.
|
|
25
|
+
*
|
|
26
|
+
* Guards against path traversal (`../` escapes). Responds with
|
|
27
|
+
* `{ type: 'files.read', payload: { filePath, content } }`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function handleFilesRead(ws: WebSocket, msg: unknown, projectRoot: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Write file content back to disk (atomic write via tmp + rename).
|
|
32
|
+
*
|
|
33
|
+
* Guards against path traversal. Responds with
|
|
34
|
+
* `{ type: 'files.written', payload: { filePath, success } }`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function handleFilesWrite(ws: WebSocket, msg: unknown, projectRoot: string, opts?: FilesWriteOptions): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Lightweight project file picker for the chat `@` mention popup.
|
|
39
|
+
*
|
|
40
|
+
* Walks `projectRoot` (max depth 8), skipping hidden and heavyweight
|
|
41
|
+
* dirs, then fuzzy-ranks results against `query`. Responds with
|
|
42
|
+
* `{ type: 'files.list', payload: { files } }`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function handleFilesList(ws: WebSocket, msg: unknown, projectRoot: string): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=file-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-handlers.d.ts","sourceRoot":"","sources":["../../src/server/file-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAqHpC,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CACtE;AAID;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAkGf;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,OAAO,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Df"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure filtering + ranking for the `files.list` project file picker (the chat
|
|
3
|
+
* `@`-mention popup). The directory *walk* stays in index.ts (it's I/O), but
|
|
4
|
+
* the two decisions that shape the result — which entries to hide and how to
|
|
5
|
+
* rank matches — are pure and live here so the scoring weights, depth penalty,
|
|
6
|
+
* and tie-break order can be unit tested. A silently-flipped weight would make
|
|
7
|
+
* the picker feel subtly wrong with nothing to catch it.
|
|
8
|
+
*/
|
|
9
|
+
/** Heavyweight build/vcs/dependency dirs the picker never descends into. */
|
|
10
|
+
export declare const SKIP_DIRS: ReadonlySet<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Whether a directory entry should be hidden from the picker by its name.
|
|
13
|
+
* Dotfiles are hidden by default, except a few commonly-wanted ones.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isHiddenEntry(name: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Rank `paths` against `query` and return up to `limit` paths, best first.
|
|
18
|
+
*
|
|
19
|
+
* Scoring (cheap heuristic, good enough for a picker): exact basename match
|
|
20
|
+
* (100) > basename prefix (60) > path substring (20); non-matches are dropped.
|
|
21
|
+
* Each match is penalized by its path depth so root files sort first. Ties
|
|
22
|
+
* break by lexicographic path. An empty query keeps every path (score 0), so
|
|
23
|
+
* the result is the paths sorted lexicographically, capped to `limit`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function rankFiles(paths: readonly string[], query: string, limit: number): string[];
|
|
26
|
+
//# sourceMappingURL=file-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-picker.d.ts","sourceRoot":"","sources":["../../src/server/file-picker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,4EAA4E;AAC5E,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,MAAM,CAcxC,CAAC;AAWH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB1F"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared `git.info` WebSocket handler for both the standalone WebUI server and
|
|
3
|
+
* the CLI's `--webui` embedded server. Extracted from the duplicated switch
|
|
4
|
+
* cases in `index.ts` and `cli/src/webui-server.ts`, which had drifted (the
|
|
5
|
+
* standalone copy transposed ahead/behind and never matched deletions). One
|
|
6
|
+
* implementation here keeps both surfaces in lockstep.
|
|
7
|
+
*
|
|
8
|
+
* case 'git.info': return handleGitInfo(ws, projectRoot);
|
|
9
|
+
*/
|
|
10
|
+
import type { WebSocket } from 'ws';
|
|
11
|
+
/**
|
|
12
|
+
* Read git branch, change stats, and upstream sync status from `projectRoot`
|
|
13
|
+
* and broadcast a `git.info` message. Never throws — a non-repo / missing-git
|
|
14
|
+
* directory yields an empty-but-valid payload.
|
|
15
|
+
*/
|
|
16
|
+
export declare function handleGitInfo(ws: WebSocket, projectRoot: string): Promise<void>;
|
|
17
|
+
/** One changed file in the working tree (vs HEAD). */
|
|
18
|
+
export interface GitChangedFile {
|
|
19
|
+
/** Repo-relative path (POSIX separators, as git reports). */
|
|
20
|
+
path: string;
|
|
21
|
+
/**
|
|
22
|
+
* Single-letter change kind for the badge:
|
|
23
|
+
* `M` modified, `A` added/staged-new, `D` deleted, `R` renamed,
|
|
24
|
+
* `?` untracked, `C` copied, `U` unmerged/conflict.
|
|
25
|
+
*/
|
|
26
|
+
status: string;
|
|
27
|
+
/** Lines added (best-effort; 0 for untracked-binary / unknown). */
|
|
28
|
+
added: number;
|
|
29
|
+
/** Lines removed (best-effort). */
|
|
30
|
+
deleted: number;
|
|
31
|
+
/** True when the change is at least partly staged. */
|
|
32
|
+
staged: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Read the working-tree change set (everything that differs from HEAD:
|
|
36
|
+
* staged, unstaged, and untracked) and broadcast a `git.changes` message.
|
|
37
|
+
*
|
|
38
|
+
* The file list comes from `git status --porcelain -z` (NUL-delimited so
|
|
39
|
+
* paths with spaces/unicode survive intact, and renames are unambiguous).
|
|
40
|
+
* Per-file line counts come from `--numstat` of both the unstaged and the
|
|
41
|
+
* staged diff, summed. Untracked files intentionally report 0/0 here so the
|
|
42
|
+
* list view does not read every untracked file; `git.diff` loads a selected
|
|
43
|
+
* file lazily on demand.
|
|
44
|
+
* Never throws — a non-repo yields an empty list.
|
|
45
|
+
*/
|
|
46
|
+
export declare function handleGitChanges(ws: WebSocket, projectRoot: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the before/after text for a single file and broadcast a `git.diff`
|
|
49
|
+
* message. `oldText` is the file at HEAD (`git show HEAD:<path>`), `newText`
|
|
50
|
+
* is the current working-tree content. New/untracked files have empty
|
|
51
|
+
* `oldText`; deleted files have empty `newText`. Binary or oversized files
|
|
52
|
+
* are reported with a flag instead of content so the client can show a notice.
|
|
53
|
+
*/
|
|
54
|
+
export declare function handleGitDiff(ws: WebSocket, projectRoot: string, path: string): Promise<void>;
|
|
55
|
+
//# sourceMappingURL=git-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-handlers.d.ts","sourceRoot":"","sources":["../../src/server/git-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAIpC;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CrF;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,MAAM,EAAE,OAAO,CAAC;CACjB;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFxF;AAID;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,SAAS,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAiDf"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Goal-state WebSocket handler for the WebUI server, extracted from the
|
|
3
|
+
* `handleMessage` switch in `index.ts` as part of splitting that file (#31).
|
|
4
|
+
*
|
|
5
|
+
* case 'goal.get': return handleGoalGet(projectRoot, (m) => broadcast(clients, m));
|
|
6
|
+
*
|
|
7
|
+
* Reads the canonical goal.json and broadcasts it to every connected client so
|
|
8
|
+
* all browser tabs share one goal snapshot. Never throws — a missing or
|
|
9
|
+
* unparseable file broadcasts `null` so clients clear stale goal state.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Read `goal.json` for `projectRoot` and broadcast a `goal.updated` message.
|
|
13
|
+
* The path must match /goal, the autonomy engines, and TUI F9, which all
|
|
14
|
+
* resolve via `resolveWstackPaths().projectGoal`
|
|
15
|
+
* (`~/.wrongstack/projects/<slug>/goal.json`) — NOT the repo-local
|
|
16
|
+
* `.wrongstack/goal.json`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function handleGoalGet(projectRoot: string, broadcast: (msg: object) => void): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=goal-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goal-handlers.d.ts","sourceRoot":"","sources":["../../src/server/goal-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared WebSocket message handlers.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all handler groups so callers (the standalone `startWebUI`
|
|
5
|
+
* and eventually the CLI's embedded server) can import from a single path.
|
|
6
|
+
*
|
|
7
|
+
* Each handler group lives in its own file and is parameterized by a
|
|
8
|
+
* context interface — the host server provides its own runtime access to
|
|
9
|
+
* agent state, broadcasting, and socket sending.
|
|
10
|
+
*/
|
|
11
|
+
export { handleTodosGet, handleTodosClear, handleTodosRemove, handleTodoUpdate, handleTasksGet, handleTaskUpdate, handlePlanGet, handlePlanTemplateUse, handlePlanItemUpdate, handleWorklistMessage, type WorklistContext, type WorklistMessage, } from './worklist-handlers.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { WebSocket } from 'ws';
|
|
2
|
+
import type { TodoItem } from '@wrongstack/core';
|
|
3
|
+
export interface WorklistContext {
|
|
4
|
+
context: {
|
|
5
|
+
todos: TodoItem[];
|
|
6
|
+
meta: Record<string, unknown>;
|
|
7
|
+
session: {
|
|
8
|
+
id: string;
|
|
9
|
+
} | null;
|
|
10
|
+
state?: unknown;
|
|
11
|
+
};
|
|
12
|
+
send: (ws: WebSocket, msg: object) => void;
|
|
13
|
+
broadcast: (msg: object) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Optional mutator for in-memory todo state. Servers that manage live
|
|
16
|
+
* agent state (e.g. the CLI embedded server) provide this so handlers
|
|
17
|
+
* can update the agent's todo list directly. Standalone server may omit.
|
|
18
|
+
*/
|
|
19
|
+
replaceTodos?: (todos: TodoItem[]) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function handleTodosGet(ctx: WorklistContext, ws: WebSocket): void;
|
|
22
|
+
export declare function handleTodosClear(ctx: WorklistContext, ws: WebSocket): void;
|
|
23
|
+
export declare function handleTodosRemove(ctx: WorklistContext, ws: WebSocket, payload: {
|
|
24
|
+
id?: string;
|
|
25
|
+
index?: number;
|
|
26
|
+
} | undefined): void;
|
|
27
|
+
export declare function handleTodoUpdate(ctx: WorklistContext, ws: WebSocket, payload: {
|
|
28
|
+
id: string;
|
|
29
|
+
status?: TodoItem['status'];
|
|
30
|
+
activeForm?: string;
|
|
31
|
+
}): void;
|
|
32
|
+
export declare function handleTasksGet(ctx: WorklistContext, ws: WebSocket): Promise<void>;
|
|
33
|
+
export declare function handleTaskUpdate(ctx: WorklistContext, ws: WebSocket, payload: {
|
|
34
|
+
id: string;
|
|
35
|
+
status: 'pending' | 'in_progress' | 'blocked' | 'failed' | 'review' | 'completed';
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
export declare function handlePlanGet(ctx: WorklistContext, ws: WebSocket): Promise<void>;
|
|
38
|
+
export declare function handlePlanTemplateUse(ctx: WorklistContext, ws: WebSocket, template: string): Promise<void>;
|
|
39
|
+
export declare function handlePlanItemUpdate(ctx: WorklistContext, ws: WebSocket, payload: {
|
|
40
|
+
target: string;
|
|
41
|
+
status: 'open' | 'in_progress' | 'done';
|
|
42
|
+
}): Promise<void>;
|
|
43
|
+
/** Loosely-typed worklist WS message — payload shapes are narrowed per case. */
|
|
44
|
+
export interface WorklistMessage {
|
|
45
|
+
type: string;
|
|
46
|
+
payload?: unknown;
|
|
47
|
+
}
|
|
48
|
+
export declare function handleWorklistMessage(ctx: WorklistContext, ws: WebSocket, msg: WorklistMessage): Promise<void>;
|
|
49
|
+
//# sourceMappingURL=worklist-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worklist-handlers.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/worklist-handlers.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA2BjD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE;QACP,KAAK,EAAE,QAAQ,EAAE,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;CAC5C;AAID,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAExE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAI1E;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACnD,IAAI,CAYN;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACxE,IAAI,CAcN;AAID,wBAAsB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBvF;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE;IACP,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;CACnF,GACA,OAAO,CAAC,IAAI,CAAC,CAiCf;AAID,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCtF;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhH;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAAA;CAAE,GACnE,OAAO,CAAC,IAAI,CAAC,CAyBf;AAQD,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,eAAe,EACpB,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CAmDf"}
|
|
@@ -1,51 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { TodoItem } from '@wrongstack/core';
|
|
3
|
-
|
|
4
|
-
interface WorklistContext {
|
|
5
|
-
context: {
|
|
6
|
-
todos: TodoItem[];
|
|
7
|
-
meta: Record<string, unknown>;
|
|
8
|
-
session: {
|
|
9
|
-
id: string;
|
|
10
|
-
} | null;
|
|
11
|
-
state?: unknown;
|
|
12
|
-
};
|
|
13
|
-
send: (ws: WebSocket, msg: object) => void;
|
|
14
|
-
broadcast: (msg: object) => void;
|
|
15
|
-
/**
|
|
16
|
-
* Optional mutator for in-memory todo state. Servers that manage live
|
|
17
|
-
* agent state (e.g. the CLI embedded server) provide this so handlers
|
|
18
|
-
* can update the agent's todo list directly. Standalone server may omit.
|
|
19
|
-
*/
|
|
20
|
-
replaceTodos?: (todos: TodoItem[]) => void;
|
|
21
|
-
}
|
|
22
|
-
declare function handleTodosGet(ctx: WorklistContext, ws: WebSocket): void;
|
|
23
|
-
declare function handleTodosClear(ctx: WorklistContext, ws: WebSocket): void;
|
|
24
|
-
declare function handleTodosRemove(ctx: WorklistContext, ws: WebSocket, payload: {
|
|
25
|
-
id?: string;
|
|
26
|
-
index?: number;
|
|
27
|
-
} | undefined): void;
|
|
28
|
-
declare function handleTodoUpdate(ctx: WorklistContext, ws: WebSocket, payload: {
|
|
29
|
-
id: string;
|
|
30
|
-
status?: TodoItem['status'];
|
|
31
|
-
activeForm?: string;
|
|
32
|
-
}): void;
|
|
33
|
-
declare function handleTasksGet(ctx: WorklistContext, ws: WebSocket): Promise<void>;
|
|
34
|
-
declare function handleTaskUpdate(ctx: WorklistContext, ws: WebSocket, payload: {
|
|
35
|
-
id: string;
|
|
36
|
-
status: 'pending' | 'in_progress' | 'blocked' | 'failed' | 'review' | 'completed';
|
|
37
|
-
}): Promise<void>;
|
|
38
|
-
declare function handlePlanGet(ctx: WorklistContext, ws: WebSocket): Promise<void>;
|
|
39
|
-
declare function handlePlanTemplateUse(ctx: WorklistContext, ws: WebSocket, template: string): Promise<void>;
|
|
40
|
-
declare function handlePlanItemUpdate(ctx: WorklistContext, ws: WebSocket, payload: {
|
|
41
|
-
target: string;
|
|
42
|
-
status: 'open' | 'in_progress' | 'done';
|
|
43
|
-
}): Promise<void>;
|
|
44
|
-
/** Loosely-typed worklist WS message — payload shapes are narrowed per case. */
|
|
45
|
-
interface WorklistMessage {
|
|
46
|
-
type: string;
|
|
47
|
-
payload?: unknown;
|
|
48
|
-
}
|
|
49
|
-
declare function handleWorklistMessage(ctx: WorklistContext, ws: WebSocket, msg: WorklistMessage): Promise<void>;
|
|
50
|
-
|
|
51
|
-
export { type WorklistContext, type WorklistMessage, handlePlanGet, handlePlanItemUpdate, handlePlanTemplateUse, handleTaskUpdate, handleTasksGet, handleTodoUpdate, handleTodosClear, handleTodosGet, handleTodosRemove, handleWorklistMessage };
|
|
1
|
+
export * from './handlers/index.js';
|
package/dist/server/handlers.js
CHANGED
|
@@ -61,7 +61,7 @@ async function handleTasksGet(ctx, ws) {
|
|
|
61
61
|
const taskPath = ctx.context.meta["task.path"];
|
|
62
62
|
if (typeof taskPath === "string" && taskPath) {
|
|
63
63
|
try {
|
|
64
|
-
const { loadTasks } = await import(
|
|
64
|
+
const { loadTasks } = await import("@wrongstack/core");
|
|
65
65
|
const file = await loadTasks(taskPath);
|
|
66
66
|
ctx.send(ws, { type: "tasks.updated", payload: sessionPayload(ctx, { tasks: file?.tasks ?? [] }) });
|
|
67
67
|
} catch {
|
|
@@ -81,7 +81,7 @@ async function handleTaskUpdate(ctx, ws, payload) {
|
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
83
|
try {
|
|
84
|
-
const { loadTasks, saveTasks } = await import(
|
|
84
|
+
const { loadTasks, saveTasks } = await import("@wrongstack/core");
|
|
85
85
|
const file = await loadTasks(taskPath);
|
|
86
86
|
if (!file) {
|
|
87
87
|
sendResult(ws, ctx, false, "No task file found.");
|
|
@@ -110,7 +110,7 @@ async function handlePlanGet(ctx, ws) {
|
|
|
110
110
|
const sessionId = ctx.context.session?.id ?? "";
|
|
111
111
|
if (typeof planPath === "string" && planPath) {
|
|
112
112
|
try {
|
|
113
|
-
const { loadPlan } = await import(
|
|
113
|
+
const { loadPlan } = await import("@wrongstack/core");
|
|
114
114
|
const plan = await loadPlan(planPath);
|
|
115
115
|
ctx.send(ws, {
|
|
116
116
|
type: "plan.updated",
|
|
@@ -151,7 +151,7 @@ async function handlePlanTemplateUse(ctx, ws, template) {
|
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
153
|
try {
|
|
154
|
-
const { getPlanTemplate, loadPlan, savePlan, emptyPlan, addPlanItem } = await import(
|
|
154
|
+
const { getPlanTemplate, loadPlan, savePlan, emptyPlan, addPlanItem } = await import("@wrongstack/core");
|
|
155
155
|
const tpl = getPlanTemplate(template);
|
|
156
156
|
if (!tpl) {
|
|
157
157
|
sendResult(ws, ctx, false, `Unknown template "${template}".`);
|
|
@@ -176,7 +176,7 @@ async function handlePlanItemUpdate(ctx, ws, payload) {
|
|
|
176
176
|
return;
|
|
177
177
|
}
|
|
178
178
|
try {
|
|
179
|
-
const { mutatePlan, setPlanItemStatus } = await import(
|
|
179
|
+
const { mutatePlan, setPlanItemStatus } = await import("@wrongstack/core");
|
|
180
180
|
let changed = false;
|
|
181
181
|
const plan = await mutatePlan(planPath, sessionId, async (p) => {
|
|
182
182
|
const before = p.updatedAt;
|
|
@@ -243,7 +243,16 @@ async function handleWorklistMessage(ctx, ws, msg) {
|
|
|
243
243
|
return;
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
export {
|
|
247
|
+
handlePlanGet,
|
|
248
|
+
handlePlanItemUpdate,
|
|
249
|
+
handlePlanTemplateUse,
|
|
250
|
+
handleTaskUpdate,
|
|
251
|
+
handleTasksGet,
|
|
252
|
+
handleTodoUpdate,
|
|
253
|
+
handleTodosClear,
|
|
254
|
+
handleTodosGet,
|
|
255
|
+
handleTodosRemove,
|
|
256
|
+
handleWorklistMessage
|
|
257
|
+
};
|
|
248
258
|
//# sourceMappingURL=handlers.js.map
|
|
249
|
-
//# sourceMappingURL=handlers.js.map
|