@x-otto/service 0.0.1-alpha.2 → 0.1.0-alpha.9
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/README.md +18 -2
- package/dist/index.d.ts +41 -72
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/package.json +14 -14
package/README.md
CHANGED
|
@@ -23,15 +23,31 @@ a standalone persistence storage service (persistenced).
|
|
|
23
23
|
| Route Prefix | Endpoint | Description |
|
|
24
24
|
|----------|------|------|
|
|
25
25
|
| `/api/health` | `GET /` | Health check |
|
|
26
|
+
| `/api/authority` | `GET /` | Authority descriptor (instanceId / workspaceDir / capabilities) |
|
|
26
27
|
| `/api/chat` | `POST /query` / `GET /messages` / `POST /interrupt` / `DELETE /clear` | Session conversation |
|
|
27
|
-
| `/api/sessions` | `GET/POST /` / `GET /current` / `GET /:id/messages` / `POST /:id/resume` (501) / `GET /:id/trace` / `GET /:id/
|
|
28
|
+
| `/api/sessions` | `GET/POST /` / `GET /current` / `GET /:id/messages` / `POST /:id/resume` (501) / `GET /:id/trace` / `GET/PUT /:id/model` / `DELETE /:id/model` (501) | Session CRUD |
|
|
28
29
|
| `/api/sessions` (subdomain) | `POST /verify-path` / `POST /browse-directory` / `GET /files` (workspace) + time-travel endpoints | workspace + timetravel |
|
|
29
30
|
| `/api/storage` | `GET /:namespace` / `GET/PUT/DELETE /:namespace/:id` | RemotePersistence wire protocol server |
|
|
30
|
-
| `/api/setting` | `GET/PUT /`
|
|
31
|
+
| `/api/setting` | `GET/PUT /` / `GET /providers` / `GET /models` / `POST /verify-model` / `POST /mode` / `POST /thinking` / `POST /autonomy` (501) | Settings management |
|
|
31
32
|
| `/api/devtools` | `GET /status` / `GET /breakpoints` | Devtools worker bridge |
|
|
32
33
|
| `/api/debugger` | Breakpoint CRUD / pause / resume / inject / state | Debugger API |
|
|
33
34
|
| `/api/logs` | `GET /history` / `GET /stream` (SSE) | Log query and streaming |
|
|
34
35
|
| `/api/catalog` | Exposes extension/sigil catalog to the frontend | Plugin catalog |
|
|
36
|
+
| `/api/jobs` | Background job list / artifact diff | Job workbench (RFC-351) |
|
|
37
|
+
| `/api/plugin-feedback` | Plugin feedback submission | Plugin feedback |
|
|
38
|
+
|
|
39
|
+
> Route table authoritative source: `src/create-app.ts` (main app) and `src/persistenced-app.ts` (persistenced). Keep this table in sync with the `app.route(...)` registrations there.
|
|
40
|
+
|
|
41
|
+
### persistenced routes (separate process, `startPersistenced`)
|
|
42
|
+
|
|
43
|
+
| Route Prefix | Endpoint | Description |
|
|
44
|
+
|----------|------|------|
|
|
45
|
+
| `GET /health` | — | Health + uptime + namespaces |
|
|
46
|
+
| `/api/storage` | document CRUD | RemotePersistence wire protocol server |
|
|
47
|
+
| `/api/events` | SSE push (change_log polling) | Cross-process change notification |
|
|
48
|
+
| `/api/sync` | `push` / `pull` batch sync | Namespace batch sync |
|
|
49
|
+
| `/api/schedules` | schedule lease CRUD | RemoteScheduleStore lease (RFC-161) |
|
|
50
|
+
|
|
35
51
|
|
|
36
52
|
## WebSocket
|
|
37
53
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Context, Hono } from "hono";
|
|
2
2
|
import { TypedEventEmitter } from "@x-otto/shared";
|
|
3
|
-
import { ProjectorState, SessionEvent, createProjectorState } from "@x-otto/session-contract";
|
|
4
|
-
import { Devtools, PauseResumePayload } from "@x-otto/devtools";
|
|
3
|
+
import { ProjectCtx, ProjectorState, SessionEvent, createProjectorState } from "@x-otto/session-contract";
|
|
5
4
|
import { AgentSessionEvent, GrillAnswer, TraceEvent } from "@x-otto/agent";
|
|
6
5
|
import { IncomingMessage, Server } from "node:http";
|
|
7
6
|
import { StorageHost } from "@x-otto/persistence";
|
|
8
7
|
import { AgentSession, ServiceHostPort } from "@x-otto/coding";
|
|
9
8
|
import { Socket } from "node:net";
|
|
9
|
+
import { Devtools, PauseResumePayload } from "@x-otto/devtools";
|
|
10
10
|
|
|
11
11
|
//#region src/message-serializer.d.ts
|
|
12
12
|
interface SerializedToolCall {
|
|
@@ -60,67 +60,6 @@ type WebSocketMessage = {
|
|
|
60
60
|
data: SessionEvent & {
|
|
61
61
|
seq?: number;
|
|
62
62
|
};
|
|
63
|
-
} | {
|
|
64
|
-
type: 'Chat.nestedToolCall';
|
|
65
|
-
data: {
|
|
66
|
-
sessionId: string;
|
|
67
|
-
id: string;
|
|
68
|
-
name: string;
|
|
69
|
-
arguments: Record<string, unknown>;
|
|
70
|
-
};
|
|
71
|
-
} | {
|
|
72
|
-
type: 'Chat.nestedToolResult';
|
|
73
|
-
data: {
|
|
74
|
-
sessionId: string;
|
|
75
|
-
id: string;
|
|
76
|
-
isError: boolean;
|
|
77
|
-
};
|
|
78
|
-
} | {
|
|
79
|
-
type: 'Chat.planContent';
|
|
80
|
-
data: {
|
|
81
|
-
sessionId: string;
|
|
82
|
-
content: string;
|
|
83
|
-
};
|
|
84
|
-
} | {
|
|
85
|
-
type: 'Chat.subagentStart';
|
|
86
|
-
data: {
|
|
87
|
-
sessionId: string;
|
|
88
|
-
agentName: string;
|
|
89
|
-
};
|
|
90
|
-
} | {
|
|
91
|
-
type: 'Chat.subagentComplete';
|
|
92
|
-
data: {
|
|
93
|
-
sessionId: string;
|
|
94
|
-
agentName: string;
|
|
95
|
-
};
|
|
96
|
-
} | {
|
|
97
|
-
type: 'Chat.parallelAgentsStart';
|
|
98
|
-
data: {
|
|
99
|
-
sessionId: string;
|
|
100
|
-
count: number;
|
|
101
|
-
};
|
|
102
|
-
} | {
|
|
103
|
-
type: 'Chat.parallelAgentsDone';
|
|
104
|
-
data: {
|
|
105
|
-
sessionId: string;
|
|
106
|
-
};
|
|
107
|
-
} | {
|
|
108
|
-
type: 'Chat.taskCompleted';
|
|
109
|
-
data: {
|
|
110
|
-
sessionId: string;
|
|
111
|
-
taskId: string;
|
|
112
|
-
};
|
|
113
|
-
} | {
|
|
114
|
-
type: 'MCP.statusUpdate';
|
|
115
|
-
data: {
|
|
116
|
-
serverId: string;
|
|
117
|
-
status: string;
|
|
118
|
-
};
|
|
119
|
-
} | {
|
|
120
|
-
type: 'MCP.serversUpdate';
|
|
121
|
-
data: {
|
|
122
|
-
servers: unknown[];
|
|
123
|
-
};
|
|
124
63
|
} | {
|
|
125
64
|
type: 'Debugger.paused';
|
|
126
65
|
data: {
|
|
@@ -180,6 +119,14 @@ interface WebSocketClientMessage {
|
|
|
180
119
|
data: Record<string, unknown>;
|
|
181
120
|
}
|
|
182
121
|
type WebSocketClientMessageType = 'Runtime.ping' | 'Chat.query' | 'Chat.approval' | 'Chat.askUserResponse' | 'Chat.planApprovalResponse' | 'Session.subscribe' | 'Session.unsubscribe' | 'Session.writeLease.acquire' | 'Session.writeLease.release' | 'Session.writeLease.force_acquire' | 'Debugger.resume' | 'Debugger.stepOver' | 'Debugger.stepInto' | 'Debugger.disable' | 'Debugger.setBreakpoint' | 'Debugger.setBreakpointsActive';
|
|
122
|
+
/**
|
|
123
|
+
* RFC-419 M2:键集完整性由两道防线保障,无需额外类型体操:
|
|
124
|
+
* ① 各 parser 用索引访问 `WebSocketClientDataByType['<type>']` 标注返回类型——映射漏某键
|
|
125
|
+
* 时对应 parser 的索引访问报错;
|
|
126
|
+
* ② dispatch default 的 `const _exhaustive: never = type` 穷尽断言——联合新增 type 漏写 case
|
|
127
|
+
* 时 `type` 不再收窄为 never 而报错(inbound-router.ts)。
|
|
128
|
+
* 显式对象类型(而非映射类型)为可读性取舍:一眼可见每个 type 的 data 形状。
|
|
129
|
+
*/
|
|
183
130
|
interface ChatQueryData {
|
|
184
131
|
message: string;
|
|
185
132
|
sessionId?: string;
|
|
@@ -342,6 +289,8 @@ declare class WebSocketManager extends TypedEventEmitter<WebSocketManagerEvents>
|
|
|
342
289
|
private readonly clientIdentities;
|
|
343
290
|
/** RFC-335 S4:client 断连触发点——InboundRouter 释放 write-lease。 */
|
|
344
291
|
onClientDisconnected?: (clientId: string) => void;
|
|
292
|
+
/** RFC-419 M1:client Runtime.ping 触发点——InboundRouter 刷新 write-lease 心跳。 */
|
|
293
|
+
onClientPing?: (connectionId: string) => void;
|
|
345
294
|
/**
|
|
346
295
|
* RFC-354 R1:连接 id → 授权身份 id。未知连接回落到连接 id 本身(fail-safe:
|
|
347
296
|
* 宁可退化成"仅该连接可写",也不要误放行)。
|
|
@@ -433,12 +382,12 @@ declare class DebugBridge extends TypedEventEmitter<DebugBridgeEvents> {
|
|
|
433
382
|
* - releaseAllForClient:该 client 断连重置——唯一强清理端点。
|
|
434
383
|
*
|
|
435
384
|
* 实现主调点是 inbound-router:WS 显式 verb 派单 acquire/release,
|
|
436
|
-
* ws.onclose / server-shutdown 走 releaseAllForClient
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
*
|
|
440
|
-
*
|
|
441
|
-
*
|
|
385
|
+
* ws.onclose / server-shutdown 走 releaseAllForClient。
|
|
386
|
+
* RFC-381 M2 定义 + RFC-419 M1 接线:现已支持 heartbeat(sessionId,clientId) 刷新持有者
|
|
387
|
+
* 存活证明 + evictStale 周期驱逐死租约——WS Runtime.ping 触发 heartbeatAllForClient 刷新,
|
|
388
|
+
* CodingService 定时器周期调 evictStale 驱逐超 staleAfterMs 未心跳的死租约。
|
|
389
|
+
* 死租约终态:kill -9 / 网络断 → 心跳停止刷新 → 超时被 evictStale 驱逐,或下一 attach
|
|
390
|
+
* 收到 denied(deny reason 含另一 clientId),亦可 explicit `force_acquire` 人工接管。
|
|
442
391
|
*/
|
|
443
392
|
interface WriteLeaseManager {
|
|
444
393
|
/** 申请 sessionId 的唯一写权。返回结果不抛错:denied/acquired 当事儿类型。 */
|
|
@@ -447,6 +396,12 @@ interface WriteLeaseManager {
|
|
|
447
396
|
release(sessionId: string, clientId: string): boolean;
|
|
448
397
|
/** 清理某个 client 名下的所有写租约(断连清理点)。返回被释放的 sessionId 列表。 */
|
|
449
398
|
releaseAllForClient(clientId: string): string[];
|
|
399
|
+
/**
|
|
400
|
+
* RFC-419 M1:刷新某 client 名下**全部持有**租约的心跳(WS ping 触发)。对称于
|
|
401
|
+
* `releaseAllForClient`——遍历 owners,对该 clientId 持有的每个 sessionId 刷新心跳。
|
|
402
|
+
* 返回被刷新的 sessionId 列表。
|
|
403
|
+
*/
|
|
404
|
+
heartbeatAllForClient(clientId: string): string[];
|
|
450
405
|
/** ownerOf:debug/UI 需要现处 leaseOwner。 */
|
|
451
406
|
ownerOf(sessionId: string): string | undefined;
|
|
452
407
|
/** canClientWrite(sessionId, clientId):Chat.query/Chat.* 的前置校验。 */
|
|
@@ -462,6 +417,17 @@ interface WriteLeaseManager {
|
|
|
462
417
|
previousOwner: string | undefined;
|
|
463
418
|
newOwner: string;
|
|
464
419
|
};
|
|
420
|
+
/**
|
|
421
|
+
* RFC-381 M2:刷新持有者心跳(kill -9 存活证明)。仅持有者可刷新(幂等 no-op)。
|
|
422
|
+
* 供 WS ping/pong 看门狗调用——心跳超时(如 3× ping 间隔)的持有者视为死租约,
|
|
423
|
+
* 可由 `evictStale` 接管。
|
|
424
|
+
*/
|
|
425
|
+
heartbeat(sessionId: string, clientId: string): void;
|
|
426
|
+
/**
|
|
427
|
+
* RFC-381 M2:驱逐超时未心跳的死租约。返回被驱逐的 sessionId 列表。
|
|
428
|
+
* 由看门狗定时调用(调用方定周期);被驱逐后新 acquire 可正常接管。
|
|
429
|
+
*/
|
|
430
|
+
evictStale(now?: number): string[];
|
|
465
431
|
}
|
|
466
432
|
type WriteLeaseAcquireResult = {
|
|
467
433
|
kind: 'acquired';
|
|
@@ -531,7 +497,9 @@ declare class CodingService {
|
|
|
531
497
|
private readonly bridges;
|
|
532
498
|
private readonly traceBridges;
|
|
533
499
|
readonly router: InboundRouter;
|
|
534
|
-
private
|
|
500
|
+
private state;
|
|
501
|
+
/** RFC-419 M1:周期驱逐死租约(kill -9 后停跳);start() 成功后启动,stop() 清理。 */
|
|
502
|
+
private evictTimer?;
|
|
535
503
|
readonly bridge: DebugBridge | null;
|
|
536
504
|
readonly ws: WebSocketManager;
|
|
537
505
|
get httpServer(): Server;
|
|
@@ -608,7 +576,7 @@ declare class EventBridge {
|
|
|
608
576
|
//#endregion
|
|
609
577
|
//#region src/session-event-wire.d.ts
|
|
610
578
|
/** 投影 + 脱敏 + 包装为 WS `Session.event`。projector 为调用方持有的 per-session 累加器。 */
|
|
611
|
-
declare function encodeSessionEvent(event: AgentSessionEvent, projector: ProjectorState): WebSocketMessage[];
|
|
579
|
+
declare function encodeSessionEvent(event: AgentSessionEvent, projector: ProjectorState, ctx?: ProjectCtx): WebSocketMessage[];
|
|
612
580
|
//#endregion
|
|
613
581
|
//#region src/persistenced-app.d.ts
|
|
614
582
|
interface PersistencedOptions {
|
|
@@ -630,13 +598,14 @@ declare const PERSISTENCED_DEFAULT_PORT = 3001;
|
|
|
630
598
|
/**
|
|
631
599
|
* 启动 persistenced 独立服务。
|
|
632
600
|
*
|
|
633
|
-
* 返回 { app, server, host: StorageHost } 供测试注入/优雅退出。
|
|
601
|
+
* 返回 { app, server, host: StorageHost, url, stop } 供测试注入/优雅退出。
|
|
634
602
|
*/
|
|
635
603
|
declare function startPersistenced(options: PersistencedOptions): Promise<{
|
|
636
604
|
app: Hono;
|
|
637
605
|
server: Server;
|
|
638
606
|
host: StorageHost;
|
|
639
607
|
url: string;
|
|
608
|
+
stop: () => Promise<void>;
|
|
640
609
|
}>;
|
|
641
610
|
//#endregion
|
|
642
611
|
//#region src/event-bus.d.ts
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/message-serializer.ts","../src/types.ts","../src/session-event-log.ts","../src/websocket-manager.ts","../src/debug-bridge.ts","../src/write-lease-manager.ts","../src/inbound-router.ts","../src/coding-service.ts","../src/event-bridge.ts","../src/session-event-wire.ts","../src/persistenced-app.ts","../src/event-bus.ts"],"mappings":";;;;;;;;;;;UAIiB,kBAAA;EACf,EAAA;EACA,IAAA;EACA,UAAA,EAAY,MAAA;AAAA;AAAA,UAGG,iBAAA;EACf,IAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA,EAAW,kBAAA;EAVI;;;;;;EAiBf,IAAA;AAAA;;;KCjBU,gBAAA;EACN,IAAA;EAA2B,IAAA;IAAQ,QAAA;EAAA;AAAA;EACnC,IAAA;EAAsB,IAAA;IAAQ,SAAA;EAAA;AAAA;EAC9B,IAAA;EAAuB,IAAA;IACvB,SAAA;IACA,OAAA;IACA,IAAA,WDHc;ICKd,UAAA;EAAA;AAAA;EAEA,IAAA;EAA4B,IAAA;IAC5B,SAAA;IACA,KAAA;IACA,MAAA,WDHJ;ICKI,UAAA;EAAA;AAAA;EAGA,IAAA;EAAuB,IAAA,EAAM,YAAA;IAAiB,GAAA;EAAA;AAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/message-serializer.ts","../src/types.ts","../src/session-event-log.ts","../src/websocket-manager.ts","../src/debug-bridge.ts","../src/write-lease-manager.ts","../src/inbound-router.ts","../src/coding-service.ts","../src/event-bridge.ts","../src/session-event-wire.ts","../src/persistenced-app.ts","../src/event-bus.ts"],"mappings":"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"}
|