@agimon-ai/doompi-core 0.0.1-alpha.76 → 0.0.1-alpha.78
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/headless-hub.cjs +107 -7
- package/dist/headless-hub.cjs.map +1 -1
- package/dist/headless-hub.d.cts +10 -0
- package/dist/headless-hub.d.cts.map +1 -1
- package/dist/headless-hub.d.mts +10 -0
- package/dist/headless-hub.d.mts.map +1 -1
- package/dist/headless-hub.mjs +107 -7
- package/dist/headless-hub.mjs.map +1 -1
- package/dist/headless-server.cjs +63 -6
- package/dist/headless-server.cjs.map +1 -1
- package/dist/headless-server.d.cts +2 -0
- package/dist/headless-server.d.cts.map +1 -1
- package/dist/headless-server.d.mts +2 -0
- package/dist/headless-server.d.mts.map +1 -1
- package/dist/headless-server.mjs +64 -7
- package/dist/headless-server.mjs.map +1 -1
- package/dist/headless-session-host.d.cts +5 -0
- package/dist/headless-session-host.d.cts.map +1 -1
- package/dist/headless-session-host.d.mts +5 -0
- package/dist/headless-session-host.d.mts.map +1 -1
- package/dist/headless.d.cts +2 -2
- package/dist/headless.d.mts +2 -2
- package/dist/history-import.cjs +1 -1
- package/dist/history-import.mjs +1 -1
- package/dist/history-ownership.cjs +1 -1
- package/dist/history-ownership.mjs +1 -1
- package/dist/history.cjs +2 -0
- package/dist/history.d.cts +2 -1
- package/dist/history.d.mts +2 -1
- package/dist/history.mjs +2 -1
- package/dist/hub-channel.d.cts +2 -2
- package/dist/hub-channel.d.mts +2 -2
- package/dist/jsonl-session-repo.cjs +1 -1
- package/dist/jsonl-session-repo.mjs +1 -1
- package/dist/mcp-facet.cjs +11 -0
- package/dist/mcp-facet.d.cts +4 -0
- package/dist/mcp-facet.d.mts +4 -0
- package/dist/mcp-facet.mjs +4 -0
- package/dist/mcp-schema-cost.cjs +2 -2
- package/dist/mcp-schema-cost.mjs +1 -1
- package/dist/package-api-server.cjs +13 -1
- package/dist/package-api-server.cjs.map +1 -1
- package/dist/package-api-server.mjs +13 -1
- package/dist/package-api-server.mjs.map +1 -1
- package/dist/remote-runtime.cjs +11 -3
- package/dist/remote-runtime.cjs.map +1 -1
- package/dist/remote-runtime.d.cts.map +1 -1
- package/dist/remote-runtime.d.mts.map +1 -1
- package/dist/remote-runtime.mjs +12 -4
- package/dist/remote-runtime.mjs.map +1 -1
- package/dist/runtime-cordis-host.cjs.map +1 -1
- package/dist/runtime-cordis-host.d.cts +1 -1
- package/dist/runtime-cordis-host.d.cts.map +1 -1
- package/dist/runtime-cordis-host.d.mts +1 -1
- package/dist/runtime-cordis-host.d.mts.map +1 -1
- package/dist/runtime-cordis-host.mjs.map +1 -1
- package/dist/runtime-identity.cjs +1 -1
- package/dist/runtime-identity.mjs +1 -1
- package/dist/runtime-json.cjs +1 -1
- package/dist/runtime-json.mjs +1 -1
- package/dist/runtime-pi-extension.cjs +6 -2
- package/dist/runtime-pi-extension.cjs.map +1 -1
- package/dist/runtime-pi-extension.d.cts.map +1 -1
- package/dist/runtime-pi-extension.d.mts.map +1 -1
- package/dist/runtime-pi-extension.mjs +6 -2
- package/dist/runtime-pi-extension.mjs.map +1 -1
- package/dist/schemas/builtinApiContracts.cjs +1 -1
- package/dist/schemas/builtinApiContracts.cjs.map +1 -1
- package/dist/schemas/builtinApiContracts.mjs +1 -1
- package/dist/schemas/builtinApiContracts.mjs.map +1 -1
- package/dist/schemas/headless.cjs.map +1 -1
- package/dist/schemas/headless.d.cts +10 -0
- package/dist/schemas/headless.d.cts.map +1 -1
- package/dist/schemas/headless.d.mts +10 -0
- package/dist/schemas/headless.d.mts.map +1 -1
- package/dist/schemas/headless.mjs.map +1 -1
- package/dist/schemas/httpApiContracts.cjs +27 -3
- package/dist/schemas/httpApiContracts.cjs.map +1 -1
- package/dist/schemas/httpApiContracts.mjs +25 -4
- package/dist/schemas/httpApiContracts.mjs.map +1 -1
- package/dist/schemas/hubChannel.d.cts +12 -0
- package/dist/schemas/hubChannel.d.cts.map +1 -1
- package/dist/schemas/hubChannel.d.mts +12 -0
- package/dist/schemas/hubChannel.d.mts.map +1 -1
- package/dist/schemas/mcpBundle.cjs +67 -0
- package/dist/schemas/mcpBundle.cjs.map +1 -0
- package/dist/schemas/mcpBundle.d.cts +21 -0
- package/dist/schemas/mcpBundle.d.cts.map +1 -0
- package/dist/schemas/mcpBundle.d.mts +21 -0
- package/dist/schemas/mcpBundle.d.mts.map +1 -0
- package/dist/schemas/mcpBundle.mjs +65 -0
- package/dist/schemas/mcpBundle.mjs.map +1 -0
- package/dist/schemas/mcpFacet.cjs +19 -0
- package/dist/schemas/mcpFacet.cjs.map +1 -0
- package/dist/schemas/mcpFacet.d.cts +66 -0
- package/dist/schemas/mcpFacet.d.cts.map +1 -0
- package/dist/schemas/mcpFacet.d.mts +66 -0
- package/dist/schemas/mcpFacet.d.mts.map +1 -0
- package/dist/schemas/mcpFacet.mjs +17 -0
- package/dist/schemas/mcpFacet.mjs.map +1 -0
- package/dist/schemas/packageApi.cjs.map +1 -1
- package/dist/schemas/packageApi.d.cts +3 -1
- package/dist/schemas/packageApi.d.cts.map +1 -1
- package/dist/schemas/packageApi.d.mts +3 -1
- package/dist/schemas/packageApi.d.mts.map +1 -1
- package/dist/schemas/packageApi.mjs.map +1 -1
- package/dist/schemas/sessionApiContracts.cjs +3 -0
- package/dist/schemas/sessionApiContracts.cjs.map +1 -1
- package/dist/schemas/sessionApiContracts.d.cts.map +1 -1
- package/dist/schemas/sessionApiContracts.d.mts.map +1 -1
- package/dist/schemas/sessionApiContracts.mjs +3 -0
- package/dist/schemas/sessionApiContracts.mjs.map +1 -1
- package/dist/server/headlessProtocol.cjs +26 -0
- package/dist/server/headlessProtocol.cjs.map +1 -1
- package/dist/server/headlessProtocol.mjs +26 -0
- package/dist/server/headlessProtocol.mjs.map +1 -1
- package/dist/server/mcpBundleLoader.cjs +56 -0
- package/dist/server/mcpBundleLoader.cjs.map +1 -0
- package/dist/server/mcpBundleLoader.d.cts +27 -0
- package/dist/server/mcpBundleLoader.d.cts.map +1 -0
- package/dist/server/mcpBundleLoader.d.mts +27 -0
- package/dist/server/mcpBundleLoader.d.mts.map +1 -0
- package/dist/server/mcpBundleLoader.mjs +52 -0
- package/dist/server/mcpBundleLoader.mjs.map +1 -0
- package/dist/server/sessionMcpHandler.cjs +75 -16
- package/dist/server/sessionMcpHandler.cjs.map +1 -1
- package/dist/server/sessionMcpHandler.d.cts.map +1 -1
- package/dist/server/sessionMcpHandler.d.mts.map +1 -1
- package/dist/server/sessionMcpHandler.mjs +76 -17
- package/dist/server/sessionMcpHandler.mjs.map +1 -1
- package/dist/server/sessionMcpRoutes.cjs +14 -7
- package/dist/server/sessionMcpRoutes.cjs.map +1 -1
- package/dist/server/sessionMcpRoutes.mjs +14 -7
- package/dist/server/sessionMcpRoutes.mjs.map +1 -1
- package/dist/services/historyCreationFileSystem/index.cjs +3 -2
- package/dist/services/historyCreationFileSystem/index.cjs.map +1 -1
- package/dist/services/historyCreationFileSystem/index.mjs +3 -2
- package/dist/services/historyCreationFileSystem/index.mjs.map +1 -1
- package/dist/services/piExtensionHost/index.cjs +19 -7
- package/dist/services/piExtensionHost/index.cjs.map +1 -1
- package/dist/services/piExtensionHost/index.mjs +19 -7
- package/dist/services/piExtensionHost/index.mjs.map +1 -1
- package/dist/services/pluginLifecycle/index.cjs +1 -1
- package/dist/services/pluginLifecycle/index.cjs.map +1 -1
- package/dist/services/pluginLifecycle/index.mjs +1 -1
- package/dist/services/pluginLifecycle/index.mjs.map +1 -1
- package/dist/services/webauthnPolicy/index.cjs +1 -1
- package/dist/services/webauthnPolicy/index.cjs.map +1 -1
- package/dist/services/webauthnPolicy/index.mjs +1 -1
- package/dist/services/webauthnPolicy/index.mjs.map +1 -1
- package/dist/services/workspaceRegistry/index.cjs +90 -0
- package/dist/services/workspaceRegistry/index.cjs.map +1 -0
- package/dist/services/workspaceRegistry/index.d.cts +18 -0
- package/dist/services/workspaceRegistry/index.d.cts.map +1 -0
- package/dist/services/workspaceRegistry/index.d.mts +18 -0
- package/dist/services/workspaceRegistry/index.d.mts.map +1 -0
- package/dist/services/workspaceRegistry/index.mjs +87 -0
- package/dist/services/workspaceRegistry/index.mjs.map +1 -0
- package/dist/sqlite-session-storage.cjs +1 -1
- package/dist/sqlite-session-storage.mjs +1 -1
- package/dist/sync-location.cjs +2 -2
- package/dist/sync-location.mjs +1 -1
- package/dist/sync-registration.cjs +19 -5
- package/dist/sync-registration.cjs.map +1 -1
- package/dist/sync-registration.d.cts +3 -0
- package/dist/sync-registration.d.cts.map +1 -1
- package/dist/sync-registration.d.mts +3 -0
- package/dist/sync-registration.d.mts.map +1 -1
- package/dist/sync-registration.mjs +18 -4
- package/dist/sync-registration.mjs.map +1 -1
- package/dist/systems/child/adapters/headlessChildSessionService.cjs +1 -1
- package/dist/systems/child/adapters/headlessChildSessionService.mjs +1 -1
- package/dist/systems/main/adapters/headlessHost.cjs +3 -1
- package/dist/systems/main/adapters/headlessHost.cjs.map +1 -1
- package/dist/systems/main/adapters/headlessHost.d.cts.map +1 -1
- package/dist/systems/main/adapters/headlessHost.d.mts.map +1 -1
- package/dist/systems/main/adapters/headlessHost.mjs +3 -1
- package/dist/systems/main/adapters/headlessHost.mjs.map +1 -1
- package/dist/systems/main/adapters/headlessSessionHost.cjs +248 -89
- package/dist/systems/main/adapters/headlessSessionHost.cjs.map +1 -1
- package/dist/systems/main/adapters/headlessSessionHost.d.cts.map +1 -1
- package/dist/systems/main/adapters/headlessSessionHost.d.mts.map +1 -1
- package/dist/systems/main/adapters/headlessSessionHost.mjs +247 -89
- package/dist/systems/main/adapters/headlessSessionHost.mjs.map +1 -1
- package/dist/terminal-pi-child-session-service.cjs +1 -1
- package/dist/terminal-pi-child-session-service.mjs +1 -1
- package/dist/testing/pi/testHost.cjs +6 -0
- package/dist/testing/pi/testHost.cjs.map +1 -1
- package/dist/testing/pi/testHost.mjs +6 -0
- package/dist/testing/pi/testHost.mjs.map +1 -1
- package/dist/types/server/sessionToolSurface.d.cts +5 -2
- package/dist/types/server/sessionToolSurface.d.cts.map +1 -1
- package/dist/types/server/sessionToolSurface.d.mts +5 -2
- package/dist/types/server/sessionToolSurface.d.mts.map +1 -1
- package/dist/v3-export.cjs +1 -1
- package/dist/v3-export.mjs +1 -1
- package/dist/web/types/webPlugin.d.cts +8 -0
- package/dist/web/types/webPlugin.d.cts.map +1 -1
- package/dist/web/types/webPlugin.d.mts +8 -0
- package/dist/web/types/webPlugin.d.mts.map +1 -1
- package/dist/web-compositions.cjs +2 -2
- package/dist/web-compositions.mjs +1 -1
- package/dist/web.d.cts +2 -2
- package/dist/web.d.mts +2 -2
- package/package.json +19 -14
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { DoomHeadlessExecutionContext, DoomHeadlessSelection, DoomHeadlessSelectionChange, DoomHeadlessTool } from "./headless.cjs";
|
|
2
|
+
import { TSchema } from "typebox";
|
|
3
|
+
//#region src/schemas/mcpFacet.d.ts
|
|
4
|
+
/** Repository-scoped instructions and applied selection safe to disclose to a remote MCP client. */
|
|
5
|
+
export interface DoomMcpContextSnapshot {
|
|
6
|
+
readonly session: {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly revision: number;
|
|
9
|
+
};
|
|
10
|
+
readonly repository: {
|
|
11
|
+
readonly root: string;
|
|
12
|
+
readonly cwd: string;
|
|
13
|
+
};
|
|
14
|
+
readonly selection: {
|
|
15
|
+
readonly profile: string | null;
|
|
16
|
+
readonly domains: readonly string[];
|
|
17
|
+
readonly majorMode: string;
|
|
18
|
+
readonly activeLayers: readonly string[];
|
|
19
|
+
};
|
|
20
|
+
readonly instructions: readonly {
|
|
21
|
+
readonly path: string;
|
|
22
|
+
readonly content: string;
|
|
23
|
+
}[];
|
|
24
|
+
readonly persona: string | null;
|
|
25
|
+
}
|
|
26
|
+
/** A lazy Markdown resource available only to remote MCP clients. */
|
|
27
|
+
export interface DoomMcpSkill {
|
|
28
|
+
readonly name: string;
|
|
29
|
+
readonly description: string;
|
|
30
|
+
read(context: DoomHeadlessExecutionContext): string | Promise<string>;
|
|
31
|
+
}
|
|
32
|
+
/** A dedicated remote surface, deliberately separate from local agent registrations. */
|
|
33
|
+
export interface DoomMcpSessionPlugin {
|
|
34
|
+
readonly tools?: readonly DoomHeadlessTool<TSchema>[];
|
|
35
|
+
readonly skills?: readonly DoomMcpSkill[];
|
|
36
|
+
}
|
|
37
|
+
export interface DoomMcpServiceScope {
|
|
38
|
+
/** Reads a service already mounted in this session without exposing host registration APIs. */
|
|
39
|
+
get<T>(name: string): T | undefined;
|
|
40
|
+
}
|
|
41
|
+
export interface DoomMcpPluginContext {
|
|
42
|
+
readonly execution: DoomHeadlessExecutionContext;
|
|
43
|
+
readonly services: DoomMcpServiceScope;
|
|
44
|
+
readonly selection: {
|
|
45
|
+
read(): DoomHeadlessSelection;
|
|
46
|
+
change(change: DoomHeadlessSelectionChange): Promise<void>;
|
|
47
|
+
};
|
|
48
|
+
/** Reads the allowlisted repository context from the current applied session selection. */
|
|
49
|
+
loadContext(): DoomMcpContextSnapshot;
|
|
50
|
+
/** Aborted when this plugin surface is replaced or the session closes. */
|
|
51
|
+
readonly signal: AbortSignal;
|
|
52
|
+
/** Rebuilds the remote surface after a live MCP catalog changes. */
|
|
53
|
+
refresh(): void;
|
|
54
|
+
}
|
|
55
|
+
export interface DoomMcpPluginDefinition {
|
|
56
|
+
readonly name: string;
|
|
57
|
+
readonly session: DoomMcpSessionPlugin | ((context: DoomMcpPluginContext) => DoomMcpSessionPlugin | Promise<DoomMcpSessionPlugin>);
|
|
58
|
+
}
|
|
59
|
+
/** Makes an MCP declaration's contract explicit without registering it locally. */
|
|
60
|
+
export declare function defineMcpPlugin(definition: DoomMcpPluginDefinition): DoomMcpPluginDefinition;
|
|
61
|
+
/** `tool/[name].mcp.ts`. Keeps the declaration independently typed. */
|
|
62
|
+
export declare function defineMcpTool<TParameters extends TSchema = TSchema, TContext = unknown>(tool: DoomHeadlessTool<TParameters> | ((context: TContext) => DoomHeadlessTool<TParameters>)): DoomHeadlessTool<TParameters> | ((context: TContext) => DoomHeadlessTool<TParameters>);
|
|
63
|
+
/** `skill/[name].mcp.ts`. Keeps remote guidance out of the local prompt surface. */
|
|
64
|
+
export declare function defineMcpSkill<TContext = unknown>(skill: DoomMcpSkill | ((context: TContext) => DoomMcpSkill)): DoomMcpSkill | ((context: TContext) => DoomMcpSkill);
|
|
65
|
+
//#endregion
|
|
66
|
+
//# sourceMappingURL=mcpFacet.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpFacet.d.cts","names":[],"sources":["../../src/schemas/mcpFacet.ts"],"mappings":";;;;iBAUiB;WACN;aAAoB;aAAqB;;WACzC;aAAuB;aAAuB;;WAC9C;aACE;aACA;aACA;aACA;;WAEF;aAAkC;aAAuB;;WACzD;;;iBAIM;WACN;WACA;EACT,KAAK,SAAS,wCAAwC;;;iBAIvC;WACN,iBAAiB,iBAAiB;WAClC,kBAAkB;;iBAGZ;;EAEf,IAAI,GAAG,eAAe;;iBAGP;WACN,WAAW;WACX,UAAU;WACV;IACP,QAAQ;IACR,OAAO,QAAQ,8BAA8B;;;EAG/C,eAAe;;WAEN,QAAQ;;EAEjB;;iBAGe;WACN;WACA,SACL,yBACE,SAAS,yBAAyB,uBAAuB,QAAQ;;;wBAIzD,gBAAgB,YAAY,0BAA0B;;wBAKtD,cAAc,oBAAoB,UAAU,SAAS,oBACnE,MAAM,iBAAiB,iBAAiB,SAAS,aAAa,iBAAiB,gBAC9E,iBAAiB,iBAAiB,SAAS,aAAa,iBAAiB;;wBAK5D,eAAe,oBAC7B,OAAO,iBAAiB,SAAS,aAAa,gBAC7C,iBAAiB,SAAS,aAAa"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { DoomHeadlessExecutionContext, DoomHeadlessSelection, DoomHeadlessSelectionChange, DoomHeadlessTool } from "./headless.mjs";
|
|
2
|
+
import { TSchema } from "typebox";
|
|
3
|
+
//#region src/schemas/mcpFacet.d.ts
|
|
4
|
+
/** Repository-scoped instructions and applied selection safe to disclose to a remote MCP client. */
|
|
5
|
+
export interface DoomMcpContextSnapshot {
|
|
6
|
+
readonly session: {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly revision: number;
|
|
9
|
+
};
|
|
10
|
+
readonly repository: {
|
|
11
|
+
readonly root: string;
|
|
12
|
+
readonly cwd: string;
|
|
13
|
+
};
|
|
14
|
+
readonly selection: {
|
|
15
|
+
readonly profile: string | null;
|
|
16
|
+
readonly domains: readonly string[];
|
|
17
|
+
readonly majorMode: string;
|
|
18
|
+
readonly activeLayers: readonly string[];
|
|
19
|
+
};
|
|
20
|
+
readonly instructions: readonly {
|
|
21
|
+
readonly path: string;
|
|
22
|
+
readonly content: string;
|
|
23
|
+
}[];
|
|
24
|
+
readonly persona: string | null;
|
|
25
|
+
}
|
|
26
|
+
/** A lazy Markdown resource available only to remote MCP clients. */
|
|
27
|
+
export interface DoomMcpSkill {
|
|
28
|
+
readonly name: string;
|
|
29
|
+
readonly description: string;
|
|
30
|
+
read(context: DoomHeadlessExecutionContext): string | Promise<string>;
|
|
31
|
+
}
|
|
32
|
+
/** A dedicated remote surface, deliberately separate from local agent registrations. */
|
|
33
|
+
export interface DoomMcpSessionPlugin {
|
|
34
|
+
readonly tools?: readonly DoomHeadlessTool<TSchema>[];
|
|
35
|
+
readonly skills?: readonly DoomMcpSkill[];
|
|
36
|
+
}
|
|
37
|
+
export interface DoomMcpServiceScope {
|
|
38
|
+
/** Reads a service already mounted in this session without exposing host registration APIs. */
|
|
39
|
+
get<T>(name: string): T | undefined;
|
|
40
|
+
}
|
|
41
|
+
export interface DoomMcpPluginContext {
|
|
42
|
+
readonly execution: DoomHeadlessExecutionContext;
|
|
43
|
+
readonly services: DoomMcpServiceScope;
|
|
44
|
+
readonly selection: {
|
|
45
|
+
read(): DoomHeadlessSelection;
|
|
46
|
+
change(change: DoomHeadlessSelectionChange): Promise<void>;
|
|
47
|
+
};
|
|
48
|
+
/** Reads the allowlisted repository context from the current applied session selection. */
|
|
49
|
+
loadContext(): DoomMcpContextSnapshot;
|
|
50
|
+
/** Aborted when this plugin surface is replaced or the session closes. */
|
|
51
|
+
readonly signal: AbortSignal;
|
|
52
|
+
/** Rebuilds the remote surface after a live MCP catalog changes. */
|
|
53
|
+
refresh(): void;
|
|
54
|
+
}
|
|
55
|
+
export interface DoomMcpPluginDefinition {
|
|
56
|
+
readonly name: string;
|
|
57
|
+
readonly session: DoomMcpSessionPlugin | ((context: DoomMcpPluginContext) => DoomMcpSessionPlugin | Promise<DoomMcpSessionPlugin>);
|
|
58
|
+
}
|
|
59
|
+
/** Makes an MCP declaration's contract explicit without registering it locally. */
|
|
60
|
+
export declare function defineMcpPlugin(definition: DoomMcpPluginDefinition): DoomMcpPluginDefinition;
|
|
61
|
+
/** `tool/[name].mcp.ts`. Keeps the declaration independently typed. */
|
|
62
|
+
export declare function defineMcpTool<TParameters extends TSchema = TSchema, TContext = unknown>(tool: DoomHeadlessTool<TParameters> | ((context: TContext) => DoomHeadlessTool<TParameters>)): DoomHeadlessTool<TParameters> | ((context: TContext) => DoomHeadlessTool<TParameters>);
|
|
63
|
+
/** `skill/[name].mcp.ts`. Keeps remote guidance out of the local prompt surface. */
|
|
64
|
+
export declare function defineMcpSkill<TContext = unknown>(skill: DoomMcpSkill | ((context: TContext) => DoomMcpSkill)): DoomMcpSkill | ((context: TContext) => DoomMcpSkill);
|
|
65
|
+
//#endregion
|
|
66
|
+
//# sourceMappingURL=mcpFacet.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpFacet.d.mts","names":[],"sources":["../../src/schemas/mcpFacet.ts"],"mappings":";;;;iBAUiB;WACN;aAAoB;aAAqB;;WACzC;aAAuB;aAAuB;;WAC9C;aACE;aACA;aACA;aACA;;WAEF;aAAkC;aAAuB;;WACzD;;;iBAIM;WACN;WACA;EACT,KAAK,SAAS,wCAAwC;;;iBAIvC;WACN,iBAAiB,iBAAiB;WAClC,kBAAkB;;iBAGZ;;EAEf,IAAI,GAAG,eAAe;;iBAGP;WACN,WAAW;WACX,UAAU;WACV;IACP,QAAQ;IACR,OAAO,QAAQ,8BAA8B;;;EAG/C,eAAe;;WAEN,QAAQ;;EAEjB;;iBAGe;WACN;WACA,SACL,yBACE,SAAS,yBAAyB,uBAAuB,QAAQ;;;wBAIzD,gBAAgB,YAAY,0BAA0B;;wBAKtD,cAAc,oBAAoB,UAAU,SAAS,oBACnE,MAAM,iBAAiB,iBAAiB,SAAS,aAAa,iBAAiB,gBAC9E,iBAAiB,iBAAiB,SAAS,aAAa,iBAAiB;;wBAK5D,eAAe,oBAC7B,OAAO,iBAAiB,SAAS,aAAa,gBAC7C,iBAAiB,SAAS,aAAa"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/schemas/mcpFacet.ts
|
|
2
|
+
/** Makes an MCP declaration's contract explicit without registering it locally. */
|
|
3
|
+
function defineMcpPlugin(definition) {
|
|
4
|
+
return definition;
|
|
5
|
+
}
|
|
6
|
+
/** `tool/[name].mcp.ts`. Keeps the declaration independently typed. */
|
|
7
|
+
function defineMcpTool(tool) {
|
|
8
|
+
return tool;
|
|
9
|
+
}
|
|
10
|
+
/** `skill/[name].mcp.ts`. Keeps remote guidance out of the local prompt surface. */
|
|
11
|
+
function defineMcpSkill(skill) {
|
|
12
|
+
return skill;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { defineMcpPlugin, defineMcpSkill, defineMcpTool };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=mcpFacet.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpFacet.mjs","names":[],"sources":["../../src/schemas/mcpFacet.ts"],"sourcesContent":["import type { TSchema } from 'typebox';\n\nimport type {\n DoomHeadlessExecutionContext,\n DoomHeadlessSelection,\n DoomHeadlessSelectionChange,\n DoomHeadlessTool,\n} from './headless';\n\n/** Repository-scoped instructions and applied selection safe to disclose to a remote MCP client. */\nexport interface DoomMcpContextSnapshot {\n readonly session: { readonly id: string; readonly revision: number };\n readonly repository: { readonly root: string; readonly cwd: string };\n readonly selection: {\n readonly profile: string | null;\n readonly domains: readonly string[];\n readonly majorMode: string;\n readonly activeLayers: readonly string[];\n };\n readonly instructions: readonly { readonly path: string; readonly content: string }[];\n readonly persona: string | null;\n}\n\n/** A lazy Markdown resource available only to remote MCP clients. */\nexport interface DoomMcpSkill {\n readonly name: string;\n readonly description: string;\n read(context: DoomHeadlessExecutionContext): string | Promise<string>;\n}\n\n/** A dedicated remote surface, deliberately separate from local agent registrations. */\nexport interface DoomMcpSessionPlugin {\n readonly tools?: readonly DoomHeadlessTool<TSchema>[];\n readonly skills?: readonly DoomMcpSkill[];\n}\n\nexport interface DoomMcpServiceScope {\n /** Reads a service already mounted in this session without exposing host registration APIs. */\n get<T>(name: string): T | undefined;\n}\n\nexport interface DoomMcpPluginContext {\n readonly execution: DoomHeadlessExecutionContext;\n readonly services: DoomMcpServiceScope;\n readonly selection: {\n read(): DoomHeadlessSelection;\n change(change: DoomHeadlessSelectionChange): Promise<void>;\n };\n /** Reads the allowlisted repository context from the current applied session selection. */\n loadContext(): DoomMcpContextSnapshot;\n /** Aborted when this plugin surface is replaced or the session closes. */\n readonly signal: AbortSignal;\n /** Rebuilds the remote surface after a live MCP catalog changes. */\n refresh(): void;\n}\n\nexport interface DoomMcpPluginDefinition {\n readonly name: string;\n readonly session:\n | DoomMcpSessionPlugin\n | ((context: DoomMcpPluginContext) => DoomMcpSessionPlugin | Promise<DoomMcpSessionPlugin>);\n}\n\n/** Makes an MCP declaration's contract explicit without registering it locally. */\nexport function defineMcpPlugin(definition: DoomMcpPluginDefinition): DoomMcpPluginDefinition {\n return definition;\n}\n\n/** `tool/[name].mcp.ts`. Keeps the declaration independently typed. */\nexport function defineMcpTool<TParameters extends TSchema = TSchema, TContext = unknown>(\n tool: DoomHeadlessTool<TParameters> | ((context: TContext) => DoomHeadlessTool<TParameters>),\n): DoomHeadlessTool<TParameters> | ((context: TContext) => DoomHeadlessTool<TParameters>) {\n return tool;\n}\n\n/** `skill/[name].mcp.ts`. Keeps remote guidance out of the local prompt surface. */\nexport function defineMcpSkill<TContext = unknown>(\n skill: DoomMcpSkill | ((context: TContext) => DoomMcpSkill),\n): DoomMcpSkill | ((context: TContext) => DoomMcpSkill) {\n return skill;\n}\n"],"mappings":";;AAgEA,SAAgB,gBAAgB,YAA8D;CAC5F,OAAO;AACT;;AAGA,SAAgB,cACd,MACwF;CACxF,OAAO;AACT;;AAGA,SAAgB,eACd,OACsD;CACtD,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageApi.cjs","names":[],"sources":["../../src/schemas/packageApi.ts"],"sourcesContent":["/**\n * The HTTP surface a package offers its host.\n *\n * A server facet registers one with its host. The host mounts it under the API\n * route prefix, and the package writes routes relative to that mount.\n *\n * The handler is a plain fetch callback so no host and no package is committed\n * to one HTTP framework; a Hono app satisfies it through `app.fetch`.\n */\n\nimport type { DoomDirectEventBus, DoomHubSessionService } from './hubChannel';\nimport type { DoomMcpProjection } from './mcpProjection';\n/** The host-owned sync view a repository-scoped package API may inspect. */\nexport interface DoomRepositorySyncView {\n fresh: boolean;\n reasons: string[];\n mcpProjection?: DoomMcpProjection;\n}\n\n/** Where an API runs: inside one session's server, or in the machine-wide hub. */\nexport type DoomApiScope = 'global' | 'workspace' | 'session';\n\nexport const DOOM_API_SCOPES: readonly DoomApiScope[] = ['global', 'workspace', 'session'];\n\n/** Identity of an independently mounted plugin host. */\nexport type DoomApiMount =\n | { scope: 'global' }\n | { scope: 'workspace'; workspaceId: string }\n | { scope: 'session'; sessionId: string };\n\n/** Immutable browser contribution generation paired with a server mount. */\nexport interface DoomWebComposition {\n id: string;\n scope: DoomApiScope;\n revision: number;\n manifestUrl: string;\n rawAssetBaseUrl: string;\n verifiedAssetBaseUrl: string;\n entryPath: string;\n stylePaths: string[];\n channels: string[];\n}\n\n/** Canonical public prefix. Scope selection never falls through to a parent. */\nexport function doomApiMountPath(mount: DoomApiMount & { workspaceId?: string }): string {\n if (mount.scope === 'global') return '/api/plugins';\n if (mount.scope === 'workspace') return `/api/workspaces/${encodeURIComponent(mount.workspaceId)}/plugins`;\n if (!mount.workspaceId) throw new Error('A session API path requires its workspace identity.');\n return `/api/workspaces/${encodeURIComponent(mount.workspaceId)}/sessions/${encodeURIComponent(mount.sessionId)}/plugins`;\n}\n\n/** Scope addressed by a public WebSocket upgrade. */\nexport type DoomSocketMount =\n | { scope: 'global' }\n | { scope: 'workspace'; workspaceId: string }\n | { scope: 'session'; workspaceId: string; sessionId: string };\n\n/** Only canonical resource paths may select a protocol listener. */\nexport function parseDoomSocketPath(pathname: string): DoomSocketMount | undefined {\n if (pathname === '/api/ws') return { scope: 'global' };\n const match = /^\\/api\\/workspaces\\/([^/]+)(?:\\/sessions\\/([^/]+))?\\/ws$/u.exec(pathname);\n if (!match) return undefined;\n try {\n const workspaceId = decodeURIComponent(match[1]);\n return match[2] === undefined\n ? { scope: 'workspace', workspaceId }\n : { scope: 'session', workspaceId, sessionId: decodeURIComponent(match[2]) };\n } catch {\n return undefined;\n }\n}\n\n/** The segment an API is mounted under, below this prefix. */\nexport const DOOM_API_ROUTE_PREFIX = '/api/plugins';\n/** Selects the hub API bundle that owns the named cockpit session. */\nexport const DOOM_HUB_API_SESSION_QUERY_PARAM = 'hubSession';\n\n/** Trusted caller headers written only by the cockpit-to-session proxy. */\nexport const DOOM_API_CALLER_LOCALITY_HEADER = 'x-doompi-api-caller-locality';\nexport const DOOM_API_CALLER_DEVICE_ID_HEADER = 'x-doompi-api-caller-device-id';\nexport const DOOM_API_CALLER_STEP_UP_HEADER = 'x-doompi-api-caller-step-up';\nexport const DOOM_API_CALLER_HEADERS = [\n DOOM_API_CALLER_LOCALITY_HEADER,\n DOOM_API_CALLER_DEVICE_ID_HEADER,\n DOOM_API_CALLER_STEP_UP_HEADER,\n] as const;\n\nexport type DoomApiCallerStepUp = 'not-required' | 'verified' | 'unavailable';\nexport type DoomApiCaller =\n | { locality: 'local'; stepUp: 'not-required' }\n | { locality: 'remote'; deviceId: string; stepUp: DoomApiCallerStepUp };\n\n/** Reads the proxy-authenticated caller identity, rejecting partial or contradictory stamps. */\nexport function doomApiCallerFrom(headers: Headers): DoomApiCaller | undefined {\n const locality = headers.get(DOOM_API_CALLER_LOCALITY_HEADER);\n const deviceId = headers.get(DOOM_API_CALLER_DEVICE_ID_HEADER);\n const stepUp = headers.get(DOOM_API_CALLER_STEP_UP_HEADER);\n if (locality === 'local') {\n return deviceId === null && stepUp === 'not-required' ? { locality, stepUp } : undefined;\n }\n if (\n locality === 'remote' &&\n deviceId !== null &&\n deviceId !== '' &&\n (stepUp === 'not-required' || stepUp === 'verified' || stepUp === 'unavailable')\n ) {\n return { locality, deviceId, stepUp };\n }\n return undefined;\n}\n/**\n * A browser-reachable OAuth redirect the host serves on its own listener.\n *\n * A package brokering third-party OAuth cannot use a loopback redirect when the\n * operator's browser is on another machine: `127.0.0.1` resolves to whichever\n * machine the browser runs on. The host owns a listener that is reachable from\n * wherever the cockpit is being used, so it lends that instead of the package\n * opening a port of its own.\n */\nexport interface DoomOAuthRedirect {\n /** Absolute URL to register as the redirect target, already origin-correct. */\n readonly redirectUri: string;\n /**\n * Accept redirects carrying this state. Must complete before the\n * authorization URL is surfaced, or the redirect races its own reservation.\n */\n reserve(state: string, timeoutMs?: number): Promise<void>;\n /** Resolves once the redirect carrying this state arrives. */\n wait(state: string, timeoutMs?: number): Promise<{ code: string; state: string }>;\n /** Drops a reservation whose flow ended without a redirect. */\n cancel(state: string): void;\n}\n\n/** What the host tells an API about itself when it starts. */\nexport interface DoomApiContext {\n scope: DoomApiScope;\n /** Stable, opaque identity shared by sessions in one canonical worktree. */\n workspaceId?: string;\n /** Canonical admitted workspace root, absent from global mounts. */\n workspaceRoot?: string;\n /** Explicit host home, never selected by a remote request. */\n homeDirectory?: string;\n /** The session this host serves; absent for a hub-scoped API. */\n sessionId?: string;\n /** The session's working directory; absent for a hub-scoped API. */\n cwd?: string;\n /** Session environment admitted by the server, never supplied by remote clients. */\n environment?: Readonly<Record<string, string | undefined>>;\n /** Shared only with child processes in this session, never with remote API clients. */\n internalToken?: string;\n /** Shared only with the cockpit hub for privileged cross-session coordination. */\n hubToken?: string;\n /**\n * Resolves a hub-issued opaque repository id to an admitted canonical root.\n * Hub APIs must never accept a browser-supplied filesystem path instead.\n */\n resolveRepository?(repositoryId: string): string | undefined;\n /** Reads the admitted repository's sync projection without exposing its state path. */\n readRepositorySync?(repositoryId: string): DoomRepositorySyncView | undefined;\n /** Admitted workspaces available to this mount. */\n repositories?(): readonly { id: string; name: string; path: string; active: boolean }[];\n /** Publish a successful config write to the owning mount's refresh lifecycle. */\n configurationChanged?(): void;\n /**\n * Borrows the hub's OAuth redirect surface. Undefined when the hub cannot\n * currently serve one, in which case the package keeps its own behaviour.\n */\n oauthRedirect?(): DoomOAuthRedirect | undefined;\n /** Canonical in-process lifecycle for sessions created by this host. */\n sessionService?: DoomHubSessionService;\n /** Same-process events shared by session APIs and hub channels. */\n directEvents?: DoomDirectEventBus;\n /** Deliver a typed method to a channel on this exact hub mount, retaining the caller's connection identity. */\n receiveChannel?(sessionId: string, frameType: string, payload: unknown, connectionId: string): boolean;\n /** Machine-owned Remote Control service, mounted only by the global core facet. */\n remoteControl?: { fetch(request: Request): Promise<Response> };\n onNotice(message: string): void;\n}\n\n/**\n * One running surface. The host strips the mount prefix before calling, so\n * routes are declared relative ('/runners/:id/log') and a package never\n * repeats where it was mounted.\n */\nexport interface DoomApiHandler {\n fetch(request: Request): Response | Promise<Response>;\n close(): void;\n}\n\nexport interface DoomApi {\n /** Segment under /api/plugins/; globally unique across loaded packages. */\n basePath: string;\n start(context: DoomApiContext): DoomApiHandler;\n}\n"],"mappings":";AAsBA,MAAa,kBAA2C;CAAC;CAAU;CAAa;AAAS;;AAsBzF,SAAgB,iBAAiB,OAAwD;CACvF,IAAI,MAAM,UAAU,UAAU,OAAO;CACrC,IAAI,MAAM,UAAU,aAAa,OAAO,mBAAmB,mBAAmB,MAAM,WAAW,EAAE;CACjG,IAAI,CAAC,MAAM,aAAa,MAAM,IAAI,MAAM,qDAAqD;CAC7F,OAAO,mBAAmB,mBAAmB,MAAM,WAAW,EAAE,YAAY,mBAAmB,MAAM,SAAS,EAAE;AAClH;;AASA,SAAgB,oBAAoB,UAA+C;CACjF,IAAI,aAAa,WAAW,OAAO,EAAE,OAAO,SAAS;CACrD,MAAM,QAAQ,4DAA4D,KAAK,QAAQ;CACvF,IAAI,CAAC,OAAO,OAAO,KAAA;CACnB,IAAI;EACF,MAAM,cAAc,mBAAmB,MAAM,EAAE;EAC/C,OAAO,MAAM,OAAO,KAAA,IAChB;GAAE,OAAO;GAAa;EAAY,IAClC;GAAE,OAAO;GAAW;GAAa,WAAW,mBAAmB,MAAM,EAAE;EAAE;CAC/E,QAAQ;EACN;CACF;AACF;;AAGA,MAAa,wBAAwB;;AAErC,MAAa,mCAAmC;;AAGhD,MAAa,kCAAkC;AAC/C,MAAa,mCAAmC;AAChD,MAAa,iCAAiC;AAC9C,MAAa,0BAA0B;CACrC;CACA;CACA;AACF;;AAQA,SAAgB,kBAAkB,SAA6C;CAC7E,MAAM,WAAW,QAAQ,IAAI,+BAA+B;CAC5D,MAAM,WAAW,QAAQ,IAAI,gCAAgC;CAC7D,MAAM,SAAS,QAAQ,IAAI,8BAA8B;CACzD,IAAI,aAAa,SACf,OAAO,aAAa,QAAQ,WAAW,iBAAiB;EAAE;EAAU;CAAO,IAAI,KAAA;CAEjF,IACE,aAAa,YACb,aAAa,QACb,aAAa,OACZ,WAAW,kBAAkB,WAAW,cAAc,WAAW,gBAElE,OAAO;EAAE;EAAU;EAAU;CAAO;AAGxC"}
|
|
1
|
+
{"version":3,"file":"packageApi.cjs","names":[],"sources":["../../src/schemas/packageApi.ts"],"sourcesContent":["/**\n * The HTTP surface a package offers its host.\n *\n * A server facet registers one with its host. The host mounts it under the API\n * route prefix, and the package writes routes relative to that mount.\n *\n * The handler is a plain fetch callback so no host and no package is committed\n * to one HTTP framework; a Hono app satisfies it through `app.fetch`.\n */\n\nimport type { DoomDirectEventBus, DoomHubSessionService, DoomSessionCommunicationEndpoint } from './hubChannel';\nimport type { DoomMcpProjection } from './mcpProjection';\n/** The host-owned sync view a repository-scoped package API may inspect. */\nexport interface DoomRepositorySyncView {\n fresh: boolean;\n reasons: string[];\n mcpProjection?: DoomMcpProjection;\n}\n\n/** Where an API runs: inside one session's server, or in the machine-wide hub. */\nexport type DoomApiScope = 'global' | 'workspace' | 'session';\n\nexport const DOOM_API_SCOPES: readonly DoomApiScope[] = ['global', 'workspace', 'session'];\n\n/** Identity of an independently mounted plugin host. */\nexport type DoomApiMount =\n | { scope: 'global' }\n | { scope: 'workspace'; workspaceId: string }\n | { scope: 'session'; sessionId: string };\n\n/** Immutable browser contribution generation paired with a server mount. */\nexport interface DoomWebComposition {\n id: string;\n scope: DoomApiScope;\n revision: number;\n manifestUrl: string;\n rawAssetBaseUrl: string;\n verifiedAssetBaseUrl: string;\n entryPath: string;\n stylePaths: string[];\n channels: string[];\n}\n\n/** Canonical public prefix. Scope selection never falls through to a parent. */\nexport function doomApiMountPath(mount: DoomApiMount & { workspaceId?: string }): string {\n if (mount.scope === 'global') return '/api/plugins';\n if (mount.scope === 'workspace') return `/api/workspaces/${encodeURIComponent(mount.workspaceId)}/plugins`;\n if (!mount.workspaceId) throw new Error('A session API path requires its workspace identity.');\n return `/api/workspaces/${encodeURIComponent(mount.workspaceId)}/sessions/${encodeURIComponent(mount.sessionId)}/plugins`;\n}\n\n/** Scope addressed by a public WebSocket upgrade. */\nexport type DoomSocketMount =\n | { scope: 'global' }\n | { scope: 'workspace'; workspaceId: string }\n | { scope: 'session'; workspaceId: string; sessionId: string };\n\n/** Only canonical resource paths may select a protocol listener. */\nexport function parseDoomSocketPath(pathname: string): DoomSocketMount | undefined {\n if (pathname === '/api/ws') return { scope: 'global' };\n const match = /^\\/api\\/workspaces\\/([^/]+)(?:\\/sessions\\/([^/]+))?\\/ws$/u.exec(pathname);\n if (!match) return undefined;\n try {\n const workspaceId = decodeURIComponent(match[1]);\n return match[2] === undefined\n ? { scope: 'workspace', workspaceId }\n : { scope: 'session', workspaceId, sessionId: decodeURIComponent(match[2]) };\n } catch {\n return undefined;\n }\n}\n\n/** The segment an API is mounted under, below this prefix. */\nexport const DOOM_API_ROUTE_PREFIX = '/api/plugins';\n/** Selects the hub API bundle that owns the named cockpit session. */\nexport const DOOM_HUB_API_SESSION_QUERY_PARAM = 'hubSession';\n\n/** Trusted caller headers written only by the cockpit-to-session proxy. */\nexport const DOOM_API_CALLER_LOCALITY_HEADER = 'x-doompi-api-caller-locality';\nexport const DOOM_API_CALLER_DEVICE_ID_HEADER = 'x-doompi-api-caller-device-id';\nexport const DOOM_API_CALLER_STEP_UP_HEADER = 'x-doompi-api-caller-step-up';\nexport const DOOM_API_CALLER_HEADERS = [\n DOOM_API_CALLER_LOCALITY_HEADER,\n DOOM_API_CALLER_DEVICE_ID_HEADER,\n DOOM_API_CALLER_STEP_UP_HEADER,\n] as const;\n\nexport type DoomApiCallerStepUp = 'not-required' | 'verified' | 'unavailable';\nexport type DoomApiCaller =\n | { locality: 'local'; stepUp: 'not-required' }\n | { locality: 'remote'; deviceId: string; stepUp: DoomApiCallerStepUp };\n\n/** Reads the proxy-authenticated caller identity, rejecting partial or contradictory stamps. */\nexport function doomApiCallerFrom(headers: Headers): DoomApiCaller | undefined {\n const locality = headers.get(DOOM_API_CALLER_LOCALITY_HEADER);\n const deviceId = headers.get(DOOM_API_CALLER_DEVICE_ID_HEADER);\n const stepUp = headers.get(DOOM_API_CALLER_STEP_UP_HEADER);\n if (locality === 'local') {\n return deviceId === null && stepUp === 'not-required' ? { locality, stepUp } : undefined;\n }\n if (\n locality === 'remote' &&\n deviceId !== null &&\n deviceId !== '' &&\n (stepUp === 'not-required' || stepUp === 'verified' || stepUp === 'unavailable')\n ) {\n return { locality, deviceId, stepUp };\n }\n return undefined;\n}\n/**\n * A browser-reachable OAuth redirect the host serves on its own listener.\n *\n * A package brokering third-party OAuth cannot use a loopback redirect when the\n * operator's browser is on another machine: `127.0.0.1` resolves to whichever\n * machine the browser runs on. The host owns a listener that is reachable from\n * wherever the cockpit is being used, so it lends that instead of the package\n * opening a port of its own.\n */\nexport interface DoomOAuthRedirect {\n /** Absolute URL to register as the redirect target, already origin-correct. */\n readonly redirectUri: string;\n /**\n * Accept redirects carrying this state. Must complete before the\n * authorization URL is surfaced, or the redirect races its own reservation.\n */\n reserve(state: string, timeoutMs?: number): Promise<void>;\n /** Resolves once the redirect carrying this state arrives. */\n wait(state: string, timeoutMs?: number): Promise<{ code: string; state: string }>;\n /** Drops a reservation whose flow ended without a redirect. */\n cancel(state: string): void;\n}\n\n/** What the host tells an API about itself when it starts. */\nexport interface DoomApiContext {\n scope: DoomApiScope;\n /** Stable, opaque identity shared by sessions in one canonical worktree. */\n workspaceId?: string;\n /** Canonical admitted workspace root, absent from global mounts. */\n workspaceRoot?: string;\n /** Explicit host home, never selected by a remote request. */\n homeDirectory?: string;\n /** The session this host serves; absent for a hub-scoped API. */\n sessionId?: string;\n /** The session's working directory; absent for a hub-scoped API. */\n cwd?: string;\n /** Session environment admitted by the server, never supplied by remote clients. */\n environment?: Readonly<Record<string, string | undefined>>;\n /** Shared only with child processes in this session, never with remote API clients. */\n internalToken?: string;\n /** Shared only with the cockpit hub for privileged cross-session coordination. */\n hubToken?: string;\n /**\n * Resolves a hub-issued opaque repository id to an admitted canonical root.\n * Hub APIs must never accept a browser-supplied filesystem path instead.\n */\n resolveRepository?(repositoryId: string): string | undefined;\n /** Reads the admitted repository's sync projection without exposing its state path. */\n readRepositorySync?(repositoryId: string): DoomRepositorySyncView | undefined;\n /** Admitted workspaces available to this mount. */\n repositories?(): readonly { id: string; name: string; path: string; active: boolean }[];\n /** Publish a successful config write to the owning mount's refresh lifecycle. */\n configurationChanged?(): void;\n /**\n * Borrows the hub's OAuth redirect surface. Undefined when the hub cannot\n * currently serve one, in which case the package keeps its own behaviour.\n */\n oauthRedirect?(): DoomOAuthRedirect | undefined;\n /** Canonical in-process lifecycle for sessions created by this host. */\n sessionService?: DoomHubSessionService;\n /** Host-bound, authenticated inter-session event endpoint for this session. */\n sessionCommunication?: DoomSessionCommunicationEndpoint;\n /** Same-process events shared by session APIs and hub channels. */\n directEvents?: DoomDirectEventBus;\n /** Deliver a typed method to a channel on this exact hub mount, retaining the caller's connection identity. */\n receiveChannel?(sessionId: string, frameType: string, payload: unknown, connectionId: string): boolean;\n /** Machine-owned Remote Control service, mounted only by the global core facet. */\n remoteControl?: { fetch(request: Request): Promise<Response> };\n onNotice(message: string): void;\n}\n\n/**\n * One running surface. The host strips the mount prefix before calling, so\n * routes are declared relative ('/runners/:id/log') and a package never\n * repeats where it was mounted.\n */\nexport interface DoomApiHandler {\n fetch(request: Request): Response | Promise<Response>;\n close(): void;\n}\n\nexport interface DoomApi {\n /** Segment under /api/plugins/; globally unique across loaded packages. */\n basePath: string;\n start(context: DoomApiContext): DoomApiHandler;\n}\n"],"mappings":";AAsBA,MAAa,kBAA2C;CAAC;CAAU;CAAa;AAAS;;AAsBzF,SAAgB,iBAAiB,OAAwD;CACvF,IAAI,MAAM,UAAU,UAAU,OAAO;CACrC,IAAI,MAAM,UAAU,aAAa,OAAO,mBAAmB,mBAAmB,MAAM,WAAW,EAAE;CACjG,IAAI,CAAC,MAAM,aAAa,MAAM,IAAI,MAAM,qDAAqD;CAC7F,OAAO,mBAAmB,mBAAmB,MAAM,WAAW,EAAE,YAAY,mBAAmB,MAAM,SAAS,EAAE;AAClH;;AASA,SAAgB,oBAAoB,UAA+C;CACjF,IAAI,aAAa,WAAW,OAAO,EAAE,OAAO,SAAS;CACrD,MAAM,QAAQ,4DAA4D,KAAK,QAAQ;CACvF,IAAI,CAAC,OAAO,OAAO,KAAA;CACnB,IAAI;EACF,MAAM,cAAc,mBAAmB,MAAM,EAAE;EAC/C,OAAO,MAAM,OAAO,KAAA,IAChB;GAAE,OAAO;GAAa;EAAY,IAClC;GAAE,OAAO;GAAW;GAAa,WAAW,mBAAmB,MAAM,EAAE;EAAE;CAC/E,QAAQ;EACN;CACF;AACF;;AAGA,MAAa,wBAAwB;;AAErC,MAAa,mCAAmC;;AAGhD,MAAa,kCAAkC;AAC/C,MAAa,mCAAmC;AAChD,MAAa,iCAAiC;AAC9C,MAAa,0BAA0B;CACrC;CACA;CACA;AACF;;AAQA,SAAgB,kBAAkB,SAA6C;CAC7E,MAAM,WAAW,QAAQ,IAAI,+BAA+B;CAC5D,MAAM,WAAW,QAAQ,IAAI,gCAAgC;CAC7D,MAAM,SAAS,QAAQ,IAAI,8BAA8B;CACzD,IAAI,aAAa,SACf,OAAO,aAAa,QAAQ,WAAW,iBAAiB;EAAE;EAAU;CAAO,IAAI,KAAA;CAEjF,IACE,aAAa,YACb,aAAa,QACb,aAAa,OACZ,WAAW,kBAAkB,WAAW,cAAc,WAAW,gBAElE,OAAO;EAAE;EAAU;EAAU;CAAO;AAGxC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DoomDirectEventBus, DoomHubSessionService } from "./hubChannel.cjs";
|
|
1
|
+
import { DoomDirectEventBus, DoomHubSessionService, DoomSessionCommunicationEndpoint } from "./hubChannel.cjs";
|
|
2
2
|
import { DoomMcpProjection } from "./mcpProjection.cjs";
|
|
3
3
|
//#region src/schemas/packageApi.d.ts
|
|
4
4
|
/** The host-owned sync view a repository-scoped package API may inspect. */
|
|
@@ -136,6 +136,8 @@ export interface DoomApiContext {
|
|
|
136
136
|
oauthRedirect?(): DoomOAuthRedirect | undefined;
|
|
137
137
|
/** Canonical in-process lifecycle for sessions created by this host. */
|
|
138
138
|
sessionService?: DoomHubSessionService;
|
|
139
|
+
/** Host-bound, authenticated inter-session event endpoint for this session. */
|
|
140
|
+
sessionCommunication?: DoomSessionCommunicationEndpoint;
|
|
139
141
|
/** Same-process events shared by session APIs and hub channels. */
|
|
140
142
|
directEvents?: DoomDirectEventBus;
|
|
141
143
|
/** Deliver a typed method to a channel on this exact hub mount, retaining the caller's connection identity. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageApi.d.cts","names":[],"sources":["../../src/schemas/packageApi.ts"],"mappings":";;;;iBAaiB;EACf;EACA;EACA,gBAAgB;;;YAIN;qBAEC,0BAA0B;;YAG3B;EACN;;EACA;EAAoB;;EACpB;EAAkB;;;iBAGP;EACf;EACA,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;;;wBAIc,iBAAiB,OAAO;EAAiB;;;YAQ7C;EACN;;EACA;EAAoB;;EACpB;EAAkB;EAAqB;;;wBAG7B,oBAAoB,mBAAmB;;qBAe1C;;qBAEA;;qBAGA;qBACA;qBACA;qBACA;YAMD;YACA;EACN;EAAmB;;EACnB;EAAoB;EAAkB,QAAQ;;;wBAGpC,kBAAkB,SAAS,UAAU;;;;;;;;;;iBA0BpC;;WAEN;;;;;EAKT,QAAQ,eAAe,qBAAqB;;EAE5C,KAAK,eAAe,qBAAqB;IAAU;IAAc;;;EAEjE,OAAO;;;iBAIQ;EACf,OAAO;;EAEP;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,cAAc,SAAS;;EAEvB;;EAEA;;;;;EAKA,mBAAmB;;EAEnB,oBAAoB,uBAAuB;;EAE3C;IAA4B;IAAY;IAAc;IAAc;;;EAEpE;;;;;EAKA,kBAAkB;;EAElB,iBAAiB;;EAEjB,eAAe;;EAEf,gBAAgB,mBAAmB,mBAAmB,kBAAkB;;EAExE;IAAkB,MAAM,SAAS,UAAU,QAAQ;;EACnD,SAAS;;;;;;;iBAQM;EACf,MAAM,SAAS,UAAU,WAAW,QAAQ;EAC5C;;iBAGe;;EAEf;EACA,MAAM,SAAS,iBAAiB"}
|
|
1
|
+
{"version":3,"file":"packageApi.d.cts","names":[],"sources":["../../src/schemas/packageApi.ts"],"mappings":";;;;iBAaiB;EACf;EACA;EACA,gBAAgB;;;YAIN;qBAEC,0BAA0B;;YAG3B;EACN;;EACA;EAAoB;;EACpB;EAAkB;;;iBAGP;EACf;EACA,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;;;wBAIc,iBAAiB,OAAO;EAAiB;;;YAQ7C;EACN;;EACA;EAAoB;;EACpB;EAAkB;EAAqB;;;wBAG7B,oBAAoB,mBAAmB;;qBAe1C;;qBAEA;;qBAGA;qBACA;qBACA;qBACA;YAMD;YACA;EACN;EAAmB;;EACnB;EAAoB;EAAkB,QAAQ;;;wBAGpC,kBAAkB,SAAS,UAAU;;;;;;;;;;iBA0BpC;;WAEN;;;;;EAKT,QAAQ,eAAe,qBAAqB;;EAE5C,KAAK,eAAe,qBAAqB;IAAU;IAAc;;;EAEjE,OAAO;;;iBAIQ;EACf,OAAO;;EAEP;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,cAAc,SAAS;;EAEvB;;EAEA;;;;;EAKA,mBAAmB;;EAEnB,oBAAoB,uBAAuB;;EAE3C;IAA4B;IAAY;IAAc;IAAc;;;EAEpE;;;;;EAKA,kBAAkB;;EAElB,iBAAiB;;EAEjB,uBAAuB;;EAEvB,eAAe;;EAEf,gBAAgB,mBAAmB,mBAAmB,kBAAkB;;EAExE;IAAkB,MAAM,SAAS,UAAU,QAAQ;;EACnD,SAAS;;;;;;;iBAQM;EACf,MAAM,SAAS,UAAU,WAAW,QAAQ;EAC5C;;iBAGe;;EAEf;EACA,MAAM,SAAS,iBAAiB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DoomDirectEventBus, DoomHubSessionService } from "./hubChannel.mjs";
|
|
1
|
+
import { DoomDirectEventBus, DoomHubSessionService, DoomSessionCommunicationEndpoint } from "./hubChannel.mjs";
|
|
2
2
|
import { DoomMcpProjection } from "./mcpProjection.mjs";
|
|
3
3
|
//#region src/schemas/packageApi.d.ts
|
|
4
4
|
/** The host-owned sync view a repository-scoped package API may inspect. */
|
|
@@ -136,6 +136,8 @@ export interface DoomApiContext {
|
|
|
136
136
|
oauthRedirect?(): DoomOAuthRedirect | undefined;
|
|
137
137
|
/** Canonical in-process lifecycle for sessions created by this host. */
|
|
138
138
|
sessionService?: DoomHubSessionService;
|
|
139
|
+
/** Host-bound, authenticated inter-session event endpoint for this session. */
|
|
140
|
+
sessionCommunication?: DoomSessionCommunicationEndpoint;
|
|
139
141
|
/** Same-process events shared by session APIs and hub channels. */
|
|
140
142
|
directEvents?: DoomDirectEventBus;
|
|
141
143
|
/** Deliver a typed method to a channel on this exact hub mount, retaining the caller's connection identity. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageApi.d.mts","names":[],"sources":["../../src/schemas/packageApi.ts"],"mappings":";;;;iBAaiB;EACf;EACA;EACA,gBAAgB;;;YAIN;qBAEC,0BAA0B;;YAG3B;EACN;;EACA;EAAoB;;EACpB;EAAkB;;;iBAGP;EACf;EACA,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;;;wBAIc,iBAAiB,OAAO;EAAiB;;;YAQ7C;EACN;;EACA;EAAoB;;EACpB;EAAkB;EAAqB;;;wBAG7B,oBAAoB,mBAAmB;;qBAe1C;;qBAEA;;qBAGA;qBACA;qBACA;qBACA;YAMD;YACA;EACN;EAAmB;;EACnB;EAAoB;EAAkB,QAAQ;;;wBAGpC,kBAAkB,SAAS,UAAU;;;;;;;;;;iBA0BpC;;WAEN;;;;;EAKT,QAAQ,eAAe,qBAAqB;;EAE5C,KAAK,eAAe,qBAAqB;IAAU;IAAc;;;EAEjE,OAAO;;;iBAIQ;EACf,OAAO;;EAEP;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,cAAc,SAAS;;EAEvB;;EAEA;;;;;EAKA,mBAAmB;;EAEnB,oBAAoB,uBAAuB;;EAE3C;IAA4B;IAAY;IAAc;IAAc;;;EAEpE;;;;;EAKA,kBAAkB;;EAElB,iBAAiB;;EAEjB,eAAe;;EAEf,gBAAgB,mBAAmB,mBAAmB,kBAAkB;;EAExE;IAAkB,MAAM,SAAS,UAAU,QAAQ;;EACnD,SAAS;;;;;;;iBAQM;EACf,MAAM,SAAS,UAAU,WAAW,QAAQ;EAC5C;;iBAGe;;EAEf;EACA,MAAM,SAAS,iBAAiB"}
|
|
1
|
+
{"version":3,"file":"packageApi.d.mts","names":[],"sources":["../../src/schemas/packageApi.ts"],"mappings":";;;;iBAaiB;EACf;EACA;EACA,gBAAgB;;;YAIN;qBAEC,0BAA0B;;YAG3B;EACN;;EACA;EAAoB;;EACpB;EAAkB;;;iBAGP;EACf;EACA,OAAO;EACP;EACA;EACA;EACA;EACA;EACA;EACA;;;wBAIc,iBAAiB,OAAO;EAAiB;;;YAQ7C;EACN;;EACA;EAAoB;;EACpB;EAAkB;EAAqB;;;wBAG7B,oBAAoB,mBAAmB;;qBAe1C;;qBAEA;;qBAGA;qBACA;qBACA;qBACA;YAMD;YACA;EACN;EAAmB;;EACnB;EAAoB;EAAkB,QAAQ;;;wBAGpC,kBAAkB,SAAS,UAAU;;;;;;;;;;iBA0BpC;;WAEN;;;;;EAKT,QAAQ,eAAe,qBAAqB;;EAE5C,KAAK,eAAe,qBAAqB;IAAU;IAAc;;;EAEjE,OAAO;;;iBAIQ;EACf,OAAO;;EAEP;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,cAAc,SAAS;;EAEvB;;EAEA;;;;;EAKA,mBAAmB;;EAEnB,oBAAoB,uBAAuB;;EAE3C;IAA4B;IAAY;IAAc;IAAc;;;EAEpE;;;;;EAKA,kBAAkB;;EAElB,iBAAiB;;EAEjB,uBAAuB;;EAEvB,eAAe;;EAEf,gBAAgB,mBAAmB,mBAAmB,kBAAkB;;EAExE;IAAkB,MAAM,SAAS,UAAU,QAAQ;;EACnD,SAAS;;;;;;;iBAQM;EACf,MAAM,SAAS,UAAU,WAAW,QAAQ;EAC5C;;iBAGe;;EAEf;EACA,MAAM,SAAS,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageApi.mjs","names":[],"sources":["../../src/schemas/packageApi.ts"],"sourcesContent":["/**\n * The HTTP surface a package offers its host.\n *\n * A server facet registers one with its host. The host mounts it under the API\n * route prefix, and the package writes routes relative to that mount.\n *\n * The handler is a plain fetch callback so no host and no package is committed\n * to one HTTP framework; a Hono app satisfies it through `app.fetch`.\n */\n\nimport type { DoomDirectEventBus, DoomHubSessionService } from './hubChannel';\nimport type { DoomMcpProjection } from './mcpProjection';\n/** The host-owned sync view a repository-scoped package API may inspect. */\nexport interface DoomRepositorySyncView {\n fresh: boolean;\n reasons: string[];\n mcpProjection?: DoomMcpProjection;\n}\n\n/** Where an API runs: inside one session's server, or in the machine-wide hub. */\nexport type DoomApiScope = 'global' | 'workspace' | 'session';\n\nexport const DOOM_API_SCOPES: readonly DoomApiScope[] = ['global', 'workspace', 'session'];\n\n/** Identity of an independently mounted plugin host. */\nexport type DoomApiMount =\n | { scope: 'global' }\n | { scope: 'workspace'; workspaceId: string }\n | { scope: 'session'; sessionId: string };\n\n/** Immutable browser contribution generation paired with a server mount. */\nexport interface DoomWebComposition {\n id: string;\n scope: DoomApiScope;\n revision: number;\n manifestUrl: string;\n rawAssetBaseUrl: string;\n verifiedAssetBaseUrl: string;\n entryPath: string;\n stylePaths: string[];\n channels: string[];\n}\n\n/** Canonical public prefix. Scope selection never falls through to a parent. */\nexport function doomApiMountPath(mount: DoomApiMount & { workspaceId?: string }): string {\n if (mount.scope === 'global') return '/api/plugins';\n if (mount.scope === 'workspace') return `/api/workspaces/${encodeURIComponent(mount.workspaceId)}/plugins`;\n if (!mount.workspaceId) throw new Error('A session API path requires its workspace identity.');\n return `/api/workspaces/${encodeURIComponent(mount.workspaceId)}/sessions/${encodeURIComponent(mount.sessionId)}/plugins`;\n}\n\n/** Scope addressed by a public WebSocket upgrade. */\nexport type DoomSocketMount =\n | { scope: 'global' }\n | { scope: 'workspace'; workspaceId: string }\n | { scope: 'session'; workspaceId: string; sessionId: string };\n\n/** Only canonical resource paths may select a protocol listener. */\nexport function parseDoomSocketPath(pathname: string): DoomSocketMount | undefined {\n if (pathname === '/api/ws') return { scope: 'global' };\n const match = /^\\/api\\/workspaces\\/([^/]+)(?:\\/sessions\\/([^/]+))?\\/ws$/u.exec(pathname);\n if (!match) return undefined;\n try {\n const workspaceId = decodeURIComponent(match[1]);\n return match[2] === undefined\n ? { scope: 'workspace', workspaceId }\n : { scope: 'session', workspaceId, sessionId: decodeURIComponent(match[2]) };\n } catch {\n return undefined;\n }\n}\n\n/** The segment an API is mounted under, below this prefix. */\nexport const DOOM_API_ROUTE_PREFIX = '/api/plugins';\n/** Selects the hub API bundle that owns the named cockpit session. */\nexport const DOOM_HUB_API_SESSION_QUERY_PARAM = 'hubSession';\n\n/** Trusted caller headers written only by the cockpit-to-session proxy. */\nexport const DOOM_API_CALLER_LOCALITY_HEADER = 'x-doompi-api-caller-locality';\nexport const DOOM_API_CALLER_DEVICE_ID_HEADER = 'x-doompi-api-caller-device-id';\nexport const DOOM_API_CALLER_STEP_UP_HEADER = 'x-doompi-api-caller-step-up';\nexport const DOOM_API_CALLER_HEADERS = [\n DOOM_API_CALLER_LOCALITY_HEADER,\n DOOM_API_CALLER_DEVICE_ID_HEADER,\n DOOM_API_CALLER_STEP_UP_HEADER,\n] as const;\n\nexport type DoomApiCallerStepUp = 'not-required' | 'verified' | 'unavailable';\nexport type DoomApiCaller =\n | { locality: 'local'; stepUp: 'not-required' }\n | { locality: 'remote'; deviceId: string; stepUp: DoomApiCallerStepUp };\n\n/** Reads the proxy-authenticated caller identity, rejecting partial or contradictory stamps. */\nexport function doomApiCallerFrom(headers: Headers): DoomApiCaller | undefined {\n const locality = headers.get(DOOM_API_CALLER_LOCALITY_HEADER);\n const deviceId = headers.get(DOOM_API_CALLER_DEVICE_ID_HEADER);\n const stepUp = headers.get(DOOM_API_CALLER_STEP_UP_HEADER);\n if (locality === 'local') {\n return deviceId === null && stepUp === 'not-required' ? { locality, stepUp } : undefined;\n }\n if (\n locality === 'remote' &&\n deviceId !== null &&\n deviceId !== '' &&\n (stepUp === 'not-required' || stepUp === 'verified' || stepUp === 'unavailable')\n ) {\n return { locality, deviceId, stepUp };\n }\n return undefined;\n}\n/**\n * A browser-reachable OAuth redirect the host serves on its own listener.\n *\n * A package brokering third-party OAuth cannot use a loopback redirect when the\n * operator's browser is on another machine: `127.0.0.1` resolves to whichever\n * machine the browser runs on. The host owns a listener that is reachable from\n * wherever the cockpit is being used, so it lends that instead of the package\n * opening a port of its own.\n */\nexport interface DoomOAuthRedirect {\n /** Absolute URL to register as the redirect target, already origin-correct. */\n readonly redirectUri: string;\n /**\n * Accept redirects carrying this state. Must complete before the\n * authorization URL is surfaced, or the redirect races its own reservation.\n */\n reserve(state: string, timeoutMs?: number): Promise<void>;\n /** Resolves once the redirect carrying this state arrives. */\n wait(state: string, timeoutMs?: number): Promise<{ code: string; state: string }>;\n /** Drops a reservation whose flow ended without a redirect. */\n cancel(state: string): void;\n}\n\n/** What the host tells an API about itself when it starts. */\nexport interface DoomApiContext {\n scope: DoomApiScope;\n /** Stable, opaque identity shared by sessions in one canonical worktree. */\n workspaceId?: string;\n /** Canonical admitted workspace root, absent from global mounts. */\n workspaceRoot?: string;\n /** Explicit host home, never selected by a remote request. */\n homeDirectory?: string;\n /** The session this host serves; absent for a hub-scoped API. */\n sessionId?: string;\n /** The session's working directory; absent for a hub-scoped API. */\n cwd?: string;\n /** Session environment admitted by the server, never supplied by remote clients. */\n environment?: Readonly<Record<string, string | undefined>>;\n /** Shared only with child processes in this session, never with remote API clients. */\n internalToken?: string;\n /** Shared only with the cockpit hub for privileged cross-session coordination. */\n hubToken?: string;\n /**\n * Resolves a hub-issued opaque repository id to an admitted canonical root.\n * Hub APIs must never accept a browser-supplied filesystem path instead.\n */\n resolveRepository?(repositoryId: string): string | undefined;\n /** Reads the admitted repository's sync projection without exposing its state path. */\n readRepositorySync?(repositoryId: string): DoomRepositorySyncView | undefined;\n /** Admitted workspaces available to this mount. */\n repositories?(): readonly { id: string; name: string; path: string; active: boolean }[];\n /** Publish a successful config write to the owning mount's refresh lifecycle. */\n configurationChanged?(): void;\n /**\n * Borrows the hub's OAuth redirect surface. Undefined when the hub cannot\n * currently serve one, in which case the package keeps its own behaviour.\n */\n oauthRedirect?(): DoomOAuthRedirect | undefined;\n /** Canonical in-process lifecycle for sessions created by this host. */\n sessionService?: DoomHubSessionService;\n /** Same-process events shared by session APIs and hub channels. */\n directEvents?: DoomDirectEventBus;\n /** Deliver a typed method to a channel on this exact hub mount, retaining the caller's connection identity. */\n receiveChannel?(sessionId: string, frameType: string, payload: unknown, connectionId: string): boolean;\n /** Machine-owned Remote Control service, mounted only by the global core facet. */\n remoteControl?: { fetch(request: Request): Promise<Response> };\n onNotice(message: string): void;\n}\n\n/**\n * One running surface. The host strips the mount prefix before calling, so\n * routes are declared relative ('/runners/:id/log') and a package never\n * repeats where it was mounted.\n */\nexport interface DoomApiHandler {\n fetch(request: Request): Response | Promise<Response>;\n close(): void;\n}\n\nexport interface DoomApi {\n /** Segment under /api/plugins/; globally unique across loaded packages. */\n basePath: string;\n start(context: DoomApiContext): DoomApiHandler;\n}\n"],"mappings":";AAsBA,MAAa,kBAA2C;CAAC;CAAU;CAAa;AAAS;;AAsBzF,SAAgB,iBAAiB,OAAwD;CACvF,IAAI,MAAM,UAAU,UAAU,OAAO;CACrC,IAAI,MAAM,UAAU,aAAa,OAAO,mBAAmB,mBAAmB,MAAM,WAAW,EAAE;CACjG,IAAI,CAAC,MAAM,aAAa,MAAM,IAAI,MAAM,qDAAqD;CAC7F,OAAO,mBAAmB,mBAAmB,MAAM,WAAW,EAAE,YAAY,mBAAmB,MAAM,SAAS,EAAE;AAClH;;AASA,SAAgB,oBAAoB,UAA+C;CACjF,IAAI,aAAa,WAAW,OAAO,EAAE,OAAO,SAAS;CACrD,MAAM,QAAQ,4DAA4D,KAAK,QAAQ;CACvF,IAAI,CAAC,OAAO,OAAO,KAAA;CACnB,IAAI;EACF,MAAM,cAAc,mBAAmB,MAAM,EAAE;EAC/C,OAAO,MAAM,OAAO,KAAA,IAChB;GAAE,OAAO;GAAa;EAAY,IAClC;GAAE,OAAO;GAAW;GAAa,WAAW,mBAAmB,MAAM,EAAE;EAAE;CAC/E,QAAQ;EACN;CACF;AACF;;AAGA,MAAa,wBAAwB;;AAErC,MAAa,mCAAmC;;AAGhD,MAAa,kCAAkC;AAC/C,MAAa,mCAAmC;AAChD,MAAa,iCAAiC;AAC9C,MAAa,0BAA0B;CACrC;CACA;CACA;AACF;;AAQA,SAAgB,kBAAkB,SAA6C;CAC7E,MAAM,WAAW,QAAQ,IAAI,+BAA+B;CAC5D,MAAM,WAAW,QAAQ,IAAI,gCAAgC;CAC7D,MAAM,SAAS,QAAQ,IAAI,8BAA8B;CACzD,IAAI,aAAa,SACf,OAAO,aAAa,QAAQ,WAAW,iBAAiB;EAAE;EAAU;CAAO,IAAI,KAAA;CAEjF,IACE,aAAa,YACb,aAAa,QACb,aAAa,OACZ,WAAW,kBAAkB,WAAW,cAAc,WAAW,gBAElE,OAAO;EAAE;EAAU;EAAU;CAAO;AAGxC"}
|
|
1
|
+
{"version":3,"file":"packageApi.mjs","names":[],"sources":["../../src/schemas/packageApi.ts"],"sourcesContent":["/**\n * The HTTP surface a package offers its host.\n *\n * A server facet registers one with its host. The host mounts it under the API\n * route prefix, and the package writes routes relative to that mount.\n *\n * The handler is a plain fetch callback so no host and no package is committed\n * to one HTTP framework; a Hono app satisfies it through `app.fetch`.\n */\n\nimport type { DoomDirectEventBus, DoomHubSessionService, DoomSessionCommunicationEndpoint } from './hubChannel';\nimport type { DoomMcpProjection } from './mcpProjection';\n/** The host-owned sync view a repository-scoped package API may inspect. */\nexport interface DoomRepositorySyncView {\n fresh: boolean;\n reasons: string[];\n mcpProjection?: DoomMcpProjection;\n}\n\n/** Where an API runs: inside one session's server, or in the machine-wide hub. */\nexport type DoomApiScope = 'global' | 'workspace' | 'session';\n\nexport const DOOM_API_SCOPES: readonly DoomApiScope[] = ['global', 'workspace', 'session'];\n\n/** Identity of an independently mounted plugin host. */\nexport type DoomApiMount =\n | { scope: 'global' }\n | { scope: 'workspace'; workspaceId: string }\n | { scope: 'session'; sessionId: string };\n\n/** Immutable browser contribution generation paired with a server mount. */\nexport interface DoomWebComposition {\n id: string;\n scope: DoomApiScope;\n revision: number;\n manifestUrl: string;\n rawAssetBaseUrl: string;\n verifiedAssetBaseUrl: string;\n entryPath: string;\n stylePaths: string[];\n channels: string[];\n}\n\n/** Canonical public prefix. Scope selection never falls through to a parent. */\nexport function doomApiMountPath(mount: DoomApiMount & { workspaceId?: string }): string {\n if (mount.scope === 'global') return '/api/plugins';\n if (mount.scope === 'workspace') return `/api/workspaces/${encodeURIComponent(mount.workspaceId)}/plugins`;\n if (!mount.workspaceId) throw new Error('A session API path requires its workspace identity.');\n return `/api/workspaces/${encodeURIComponent(mount.workspaceId)}/sessions/${encodeURIComponent(mount.sessionId)}/plugins`;\n}\n\n/** Scope addressed by a public WebSocket upgrade. */\nexport type DoomSocketMount =\n | { scope: 'global' }\n | { scope: 'workspace'; workspaceId: string }\n | { scope: 'session'; workspaceId: string; sessionId: string };\n\n/** Only canonical resource paths may select a protocol listener. */\nexport function parseDoomSocketPath(pathname: string): DoomSocketMount | undefined {\n if (pathname === '/api/ws') return { scope: 'global' };\n const match = /^\\/api\\/workspaces\\/([^/]+)(?:\\/sessions\\/([^/]+))?\\/ws$/u.exec(pathname);\n if (!match) return undefined;\n try {\n const workspaceId = decodeURIComponent(match[1]);\n return match[2] === undefined\n ? { scope: 'workspace', workspaceId }\n : { scope: 'session', workspaceId, sessionId: decodeURIComponent(match[2]) };\n } catch {\n return undefined;\n }\n}\n\n/** The segment an API is mounted under, below this prefix. */\nexport const DOOM_API_ROUTE_PREFIX = '/api/plugins';\n/** Selects the hub API bundle that owns the named cockpit session. */\nexport const DOOM_HUB_API_SESSION_QUERY_PARAM = 'hubSession';\n\n/** Trusted caller headers written only by the cockpit-to-session proxy. */\nexport const DOOM_API_CALLER_LOCALITY_HEADER = 'x-doompi-api-caller-locality';\nexport const DOOM_API_CALLER_DEVICE_ID_HEADER = 'x-doompi-api-caller-device-id';\nexport const DOOM_API_CALLER_STEP_UP_HEADER = 'x-doompi-api-caller-step-up';\nexport const DOOM_API_CALLER_HEADERS = [\n DOOM_API_CALLER_LOCALITY_HEADER,\n DOOM_API_CALLER_DEVICE_ID_HEADER,\n DOOM_API_CALLER_STEP_UP_HEADER,\n] as const;\n\nexport type DoomApiCallerStepUp = 'not-required' | 'verified' | 'unavailable';\nexport type DoomApiCaller =\n | { locality: 'local'; stepUp: 'not-required' }\n | { locality: 'remote'; deviceId: string; stepUp: DoomApiCallerStepUp };\n\n/** Reads the proxy-authenticated caller identity, rejecting partial or contradictory stamps. */\nexport function doomApiCallerFrom(headers: Headers): DoomApiCaller | undefined {\n const locality = headers.get(DOOM_API_CALLER_LOCALITY_HEADER);\n const deviceId = headers.get(DOOM_API_CALLER_DEVICE_ID_HEADER);\n const stepUp = headers.get(DOOM_API_CALLER_STEP_UP_HEADER);\n if (locality === 'local') {\n return deviceId === null && stepUp === 'not-required' ? { locality, stepUp } : undefined;\n }\n if (\n locality === 'remote' &&\n deviceId !== null &&\n deviceId !== '' &&\n (stepUp === 'not-required' || stepUp === 'verified' || stepUp === 'unavailable')\n ) {\n return { locality, deviceId, stepUp };\n }\n return undefined;\n}\n/**\n * A browser-reachable OAuth redirect the host serves on its own listener.\n *\n * A package brokering third-party OAuth cannot use a loopback redirect when the\n * operator's browser is on another machine: `127.0.0.1` resolves to whichever\n * machine the browser runs on. The host owns a listener that is reachable from\n * wherever the cockpit is being used, so it lends that instead of the package\n * opening a port of its own.\n */\nexport interface DoomOAuthRedirect {\n /** Absolute URL to register as the redirect target, already origin-correct. */\n readonly redirectUri: string;\n /**\n * Accept redirects carrying this state. Must complete before the\n * authorization URL is surfaced, or the redirect races its own reservation.\n */\n reserve(state: string, timeoutMs?: number): Promise<void>;\n /** Resolves once the redirect carrying this state arrives. */\n wait(state: string, timeoutMs?: number): Promise<{ code: string; state: string }>;\n /** Drops a reservation whose flow ended without a redirect. */\n cancel(state: string): void;\n}\n\n/** What the host tells an API about itself when it starts. */\nexport interface DoomApiContext {\n scope: DoomApiScope;\n /** Stable, opaque identity shared by sessions in one canonical worktree. */\n workspaceId?: string;\n /** Canonical admitted workspace root, absent from global mounts. */\n workspaceRoot?: string;\n /** Explicit host home, never selected by a remote request. */\n homeDirectory?: string;\n /** The session this host serves; absent for a hub-scoped API. */\n sessionId?: string;\n /** The session's working directory; absent for a hub-scoped API. */\n cwd?: string;\n /** Session environment admitted by the server, never supplied by remote clients. */\n environment?: Readonly<Record<string, string | undefined>>;\n /** Shared only with child processes in this session, never with remote API clients. */\n internalToken?: string;\n /** Shared only with the cockpit hub for privileged cross-session coordination. */\n hubToken?: string;\n /**\n * Resolves a hub-issued opaque repository id to an admitted canonical root.\n * Hub APIs must never accept a browser-supplied filesystem path instead.\n */\n resolveRepository?(repositoryId: string): string | undefined;\n /** Reads the admitted repository's sync projection without exposing its state path. */\n readRepositorySync?(repositoryId: string): DoomRepositorySyncView | undefined;\n /** Admitted workspaces available to this mount. */\n repositories?(): readonly { id: string; name: string; path: string; active: boolean }[];\n /** Publish a successful config write to the owning mount's refresh lifecycle. */\n configurationChanged?(): void;\n /**\n * Borrows the hub's OAuth redirect surface. Undefined when the hub cannot\n * currently serve one, in which case the package keeps its own behaviour.\n */\n oauthRedirect?(): DoomOAuthRedirect | undefined;\n /** Canonical in-process lifecycle for sessions created by this host. */\n sessionService?: DoomHubSessionService;\n /** Host-bound, authenticated inter-session event endpoint for this session. */\n sessionCommunication?: DoomSessionCommunicationEndpoint;\n /** Same-process events shared by session APIs and hub channels. */\n directEvents?: DoomDirectEventBus;\n /** Deliver a typed method to a channel on this exact hub mount, retaining the caller's connection identity. */\n receiveChannel?(sessionId: string, frameType: string, payload: unknown, connectionId: string): boolean;\n /** Machine-owned Remote Control service, mounted only by the global core facet. */\n remoteControl?: { fetch(request: Request): Promise<Response> };\n onNotice(message: string): void;\n}\n\n/**\n * One running surface. The host strips the mount prefix before calling, so\n * routes are declared relative ('/runners/:id/log') and a package never\n * repeats where it was mounted.\n */\nexport interface DoomApiHandler {\n fetch(request: Request): Response | Promise<Response>;\n close(): void;\n}\n\nexport interface DoomApi {\n /** Segment under /api/plugins/; globally unique across loaded packages. */\n basePath: string;\n start(context: DoomApiContext): DoomApiHandler;\n}\n"],"mappings":";AAsBA,MAAa,kBAA2C;CAAC;CAAU;CAAa;AAAS;;AAsBzF,SAAgB,iBAAiB,OAAwD;CACvF,IAAI,MAAM,UAAU,UAAU,OAAO;CACrC,IAAI,MAAM,UAAU,aAAa,OAAO,mBAAmB,mBAAmB,MAAM,WAAW,EAAE;CACjG,IAAI,CAAC,MAAM,aAAa,MAAM,IAAI,MAAM,qDAAqD;CAC7F,OAAO,mBAAmB,mBAAmB,MAAM,WAAW,EAAE,YAAY,mBAAmB,MAAM,SAAS,EAAE;AAClH;;AASA,SAAgB,oBAAoB,UAA+C;CACjF,IAAI,aAAa,WAAW,OAAO,EAAE,OAAO,SAAS;CACrD,MAAM,QAAQ,4DAA4D,KAAK,QAAQ;CACvF,IAAI,CAAC,OAAO,OAAO,KAAA;CACnB,IAAI;EACF,MAAM,cAAc,mBAAmB,MAAM,EAAE;EAC/C,OAAO,MAAM,OAAO,KAAA,IAChB;GAAE,OAAO;GAAa;EAAY,IAClC;GAAE,OAAO;GAAW;GAAa,WAAW,mBAAmB,MAAM,EAAE;EAAE;CAC/E,QAAQ;EACN;CACF;AACF;;AAGA,MAAa,wBAAwB;;AAErC,MAAa,mCAAmC;;AAGhD,MAAa,kCAAkC;AAC/C,MAAa,mCAAmC;AAChD,MAAa,iCAAiC;AAC9C,MAAa,0BAA0B;CACrC;CACA;CACA;AACF;;AAQA,SAAgB,kBAAkB,SAA6C;CAC7E,MAAM,WAAW,QAAQ,IAAI,+BAA+B;CAC5D,MAAM,WAAW,QAAQ,IAAI,gCAAgC;CAC7D,MAAM,SAAS,QAAQ,IAAI,8BAA8B;CACzD,IAAI,aAAa,SACf,OAAO,aAAa,QAAQ,WAAW,iBAAiB;EAAE;EAAU;CAAO,IAAI,KAAA;CAEjF,IACE,aAAa,YACb,aAAa,QACb,aAAa,OACZ,WAAW,kBAAkB,WAAW,cAAc,WAAW,gBAElE,OAAO;EAAE;EAAU;EAAU;CAAO;AAGxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionApiContracts.cjs","names":["Type","HubSnapshotFrameSchema","HubUpsertFrameSchema","HubRemovedFrameSchema","DOOM_SESSION_SERVICE_ID","DOOM_SESSION_MANAGEMENT_SERVICE_ID"],"sources":["../../src/schemas/sessionApiContracts.ts"],"sourcesContent":["import { Type } from 'typebox';\n\nimport type { DoomSocketContract } from './apiContracts';\nimport { HubSnapshotFrameSchema, HubUpsertFrameSchema, HubRemovedFrameSchema } from './httpApiContracts';\nimport { DOOM_SESSION_MANAGEMENT_SERVICE_ID, DOOM_SESSION_SERVICE_ID, type JsonValue } from './sessionProtocol';\n\nconst Text = Type.String();\nconst NumberValue = Type.Number();\nconst Flag = Type.Boolean();\nconst Json = Type.Unsafe<JsonValue>(\n Type.Unknown({\n description:\n 'Strict JSON application value supplied by the active tool, journal entry, or extension; validated by the Pi codec.',\n }),\n);\nconst Optional = Type.Optional;\nconst Strings = Type.Array(Text);\nconst Model = Type.Object({ provider: Text, id: Text });\nconst Thinking = Type.Union([\n Type.Literal('off'),\n Type.Literal('minimal'),\n Type.Literal('low'),\n Type.Literal('medium'),\n Type.Literal('high'),\n Type.Literal('max'),\n Type.Literal('xhigh'),\n]);\nconst Phase = Type.Union([\n Type.Literal('idle'),\n Type.Literal('turn'),\n Type.Literal('compaction'),\n Type.Literal('retry'),\n]);\nconst Image = Type.Object({ type: Type.Literal('image'), data: Text, mimeType: Text });\nconst TextPart = Type.Object({ type: Type.Literal('text'), text: Text });\nconst Content = Type.Union([Image, TextPart]);\nconst User = Type.Object({\n id: Text,\n role: Type.Literal('user'),\n content: Type.Array(Content),\n timestamp: NumberValue,\n});\nconst Transcript = Type.Union([\n User,\n Type.Object({\n id: Text,\n role: Type.Literal('assistant'),\n content: Type.Array(\n Type.Union([\n TextPart,\n Type.Object({ type: Type.Literal('thinking'), thinking: Text, redacted: Optional(Type.Literal(true)) }),\n Type.Object({ type: Type.Literal('toolCall'), toolCallId: Text, toolName: Text, input: Json }),\n ]),\n ),\n model: Model,\n status: Type.Union([\n Type.Literal('streaming'),\n Type.Literal('complete'),\n Type.Literal('aborted'),\n Type.Literal('error'),\n ]),\n stopReason: Optional(\n Type.Union([\n Type.Literal('stop'),\n Type.Literal('length'),\n Type.Literal('toolUse'),\n Type.Literal('aborted'),\n Type.Literal('error'),\n ]),\n ),\n errorMessage: Optional(Text),\n timestamp: NumberValue,\n }),\n Type.Object({\n id: Text,\n role: Type.Literal('tool'),\n toolCallId: Text,\n toolName: Text,\n input: Json,\n content: Type.Array(Content),\n details: Optional(Json),\n status: Type.Union([Type.Literal('running'), Type.Literal('complete'), Type.Literal('error')]),\n isError: Flag,\n timestamp: NumberValue,\n }),\n]);\nconst Usage = Type.Object({\n input: NumberValue,\n output: NumberValue,\n cacheRead: NumberValue,\n cacheWrite: NumberValue,\n total: NumberValue,\n});\nconst Message = Type.Object({ text: Text, images: Optional(Type.Array(Image)) });\nconst Frame = Type.Intersect([Type.Object({ type: Text }), Type.Record(Text, Json)], {\n description: 'Discriminated extension presentation frame; selected channel schemas describe package payloads.',\n});\nconst HubClientFrame = Type.Union([\n Type.Object({ type: Type.Union([Type.Literal('subscribe'), Type.Literal('unsubscribe')]), sessionId: Text }),\n Type.Object({\n type: Type.Union([Type.Literal('subscribe_thread'), Type.Literal('unsubscribe_thread')]),\n sessionId: Text,\n threadId: Text,\n }),\n Type.Object({\n type: Type.String({ not: { enum: ['subscribe', 'unsubscribe', 'subscribe_thread', 'unsubscribe_thread'] } }),\n sessionId: Text,\n payload: Json,\n }),\n]);\nconst HubServerFrame = Type.Union([\n HubSnapshotFrameSchema,\n HubUpsertFrameSchema,\n HubRemovedFrameSchema,\n Type.Object({ type: Type.Literal('thread_frame'), sessionId: Text, threadId: Text, frame: Frame }),\n Type.Object({ type: Type.Literal('thread_backlog'), sessionId: Text, threadId: Text, frames: Type.Array(Frame) }),\n Type.Object({\n type: Type.String({\n not: { enum: ['sessions_snapshot', 'session_upsert', 'session_removed', 'thread_frame', 'thread_backlog'] },\n }),\n sessionId: Text,\n payload: Json,\n }),\n]);\nconst ProtocolEvent = Type.Object({ sequence: NumberValue, frame: Frame });\nconst Update = Type.Union([\n Type.Object({\n sessionUpdate: Type.Union([\n Type.Literal('user_message'),\n Type.Literal('agent_message'),\n Type.Literal('agent_thought'),\n ]),\n messageId: Text,\n content: Type.Array(Content),\n }),\n Type.Object({\n sessionUpdate: Type.Literal('tool_call_update'),\n toolCallId: Text,\n title: Optional(Text),\n kind: Optional(Text),\n status: Optional(\n Type.Union([\n Type.Literal('pending'),\n Type.Literal('in_progress'),\n Type.Literal('completed'),\n Type.Literal('failed'),\n Type.Literal('cancelled'),\n ]),\n ),\n content: Optional(Type.Array(Type.Object({ type: Type.Literal('content'), content: Content }))),\n rawInput: Optional(Json),\n rawOutput: Optional(Json),\n }),\n Type.Object({\n sessionUpdate: Type.Literal('state_update'),\n state: Type.Union([Type.Literal('running'), Type.Literal('idle'), Type.Literal('requires_action')]),\n stopReason: Optional(\n Type.Union([\n Type.Literal('end_turn'),\n Type.Literal('max_tokens'),\n Type.Literal('max_turn_requests'),\n Type.Literal('refusal'),\n Type.Literal('cancelled'),\n Type.Unsafe<`_${string}`>(Type.String({ pattern: '^_' })),\n ]),\n ),\n }),\n]);\nexport const SessionServiceStateSchema = Type.Object({\n snapshot: Type.Object({\n id: Text,\n cwd: Text,\n name: Optional(Text),\n createdAt: NumberValue,\n updatedAt: NumberValue,\n phase: Phase,\n model: Model,\n thinkingLevel: Thinking,\n attached: Flag,\n locked: Flag,\n revision: NumberValue,\n queuedSteer: Type.Array(User),\n queuedSteerCount: NumberValue,\n }),\n progress: Type.Union([\n Type.Null(),\n Type.Union([\n Type.Object({ type: Type.Literal('item_started'), item: Transcript }),\n Type.Object({ type: Type.Literal('item_updated'), item: Transcript }),\n Type.Object({ type: Type.Literal('item_finished'), item: Transcript }),\n ]),\n ]),\n updates: Optional(Type.Array(Type.Object({ sequence: NumberValue, update: Update }))),\n presentation: Optional(\n Type.Object({\n revision: NumberValue,\n dropped: NumberValue,\n resetRevision: Optional(NumberValue),\n events: Type.Array(ProtocolEvent),\n projections: Type.Array(ProtocolEvent),\n }),\n ),\n inFlight: Optional(Type.Array(Transcript)),\n});\nexport const SessionMethodSchemas = {\n readTranscriptPage: {\n input: Type.Tuple([\n Type.Object({\n cursor: Optional(Text),\n direction: Optional(Type.Union([Type.Literal('older'), Type.Literal('newer')])),\n limit: Optional(NumberValue),\n threadId: Optional(Text),\n }),\n ]),\n output: Type.Object({\n entries: Type.Array(Json),\n startCursor: Type.Union([Text, Type.Null()]),\n endCursor: Type.Union([Text, Type.Null()]),\n olderCursor: Type.Union([Text, Type.Null()]),\n newerCursor: Type.Union([Text, Type.Null()]),\n generation: NumberValue,\n revision: NumberValue,\n context: Type.Array(Json),\n drafts: Type.Array(Transcript),\n }),\n },\n prompt: {\n input: Type.Tuple([\n Type.Union([\n Text,\n Type.Object({\n ...Message.properties,\n waitFor: Optional(Type.Union([Type.Literal('accepted'), Type.Literal('settled')])),\n }),\n ]),\n ]),\n },\n steer: { input: Type.Tuple([Type.Union([Text, Message])]) },\n abort: { input: Type.Tuple([]) },\n setModel: { input: Type.Tuple([Model]) },\n setThinking: { input: Type.Tuple([Thinking]) },\n followUp: { input: Type.Tuple([Message]) },\n clearQueue: { input: Type.Tuple([]), output: Type.Object({ steering: Strings, followUp: Strings }) },\n rewind: {\n input: Type.Tuple([\n Type.Object({\n itemId: Text,\n summarize: Optional(Flag),\n customInstructions: Optional(Text),\n replaceInstructions: Optional(Flag),\n label: Optional(Text),\n }),\n ]),\n output: Type.Object({\n editorText: Optional(Text),\n cancelled: Flag,\n aborted: Optional(Flag),\n summaryEntry: Optional(\n Type.Object({\n id: Text,\n parentId: Type.Union([Text, Type.Null()]),\n timestamp: Text,\n fromId: Text,\n summary: Text,\n details: Optional(Json),\n usage: Optional(Usage),\n fromHook: Optional(Flag),\n }),\n ),\n }),\n },\n extensionUiResponse: {\n input: Type.Tuple([\n Type.Union([\n Type.Object({ id: Text, value: Text }),\n Type.Object({ id: Text, confirmed: Flag }),\n Type.Object({ id: Text, cancelled: Type.Literal(true) }),\n ]),\n ]),\n },\n getState: {\n input: Type.Tuple([]),\n output: Type.Object({\n model: Optional(Model),\n thinkingLevel: Thinking,\n isStreaming: Flag,\n isCompacting: Flag,\n steeringMode: Type.Union([Type.Literal('all'), Type.Literal('one-at-a-time')]),\n followUpMode: Type.Union([Type.Literal('all'), Type.Literal('one-at-a-time')]),\n sessionFile: Optional(Text),\n sessionId: Text,\n sessionName: Optional(Text),\n autoCompactionEnabled: Flag,\n messageCount: NumberValue,\n pendingMessageCount: NumberValue,\n }),\n },\n getSessionStats: {\n input: Type.Tuple([]),\n output: Type.Object({\n sessionFile: Optional(Text),\n sessionId: Text,\n totalMessages: NumberValue,\n tokens: Usage,\n cost: NumberValue,\n contextUsage: Optional(\n Type.Object({\n tokens: Type.Union([NumberValue, Type.Null()]),\n contextWindow: NumberValue,\n percent: Type.Union([NumberValue, Type.Null()]),\n }),\n ),\n }),\n },\n getCommands: {\n input: Type.Tuple([]),\n output: Type.Array(\n Type.Object({\n name: Text,\n description: Optional(Text),\n source: Type.Union([Type.Literal('extension'), Type.Literal('prompt'), Type.Literal('skill')]),\n sourceInfo: Optional(\n Type.Object({\n path: Text,\n source: Text,\n scope: Type.Union([Type.Literal('user'), Type.Literal('project'), Type.Literal('temporary')]),\n origin: Type.Union([Type.Literal('package'), Type.Literal('top-level')]),\n baseDir: Optional(Text),\n }),\n ),\n }),\n ),\n },\n getAvailableModels: { input: Type.Tuple([]), output: Type.Array(Model) },\n getAvailableThinkingLevels: { input: Type.Tuple([]), output: Type.Array(Thinking) },\n compact: { input: Type.Tuple([Type.Object({ customInstructions: Optional(Text) })]), output: Json },\n setName: { input: Type.Tuple([Text]) },\n};\n\nconst ErrorSchema = Type.Object({ code: Text, message: Text });\nexport const sessionSocketContracts: DoomSocketContract[] = [\n ...Object.entries(SessionMethodSchemas).map(([member, definition]): DoomSocketContract => ({\n id: `session.${member}`,\n scope: 'session',\n service: DOOM_SESSION_SERVICE_ID,\n member,\n direction: 'client-to-server',\n kind: 'method',\n description: `Session ${member}. Arguments exclude the process-local Chord Context. A void result is omitted from the successful Pi response.`,\n ...definition,\n errors: ErrorSchema,\n })),\n {\n id: 'session.state',\n scope: 'session',\n service: DOOM_SESSION_SERVICE_ID,\n member: 'state',\n direction: 'server-to-client',\n kind: 'state',\n input: SessionServiceStateSchema,\n description: 'Reconstructed session state after Chord snapshot/delta decoding.',\n },\n {\n id: 'management.attach',\n scope: 'global',\n service: DOOM_SESSION_MANAGEMENT_SERVICE_ID,\n member: 'attach',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([Text]),\n errors: ErrorSchema,\n description: 'Attach this presentation to a session. Pi publishes an out-of-band attachment update.',\n },\n {\n id: 'management.detach',\n scope: 'global',\n service: DOOM_SESSION_MANAGEMENT_SERVICE_ID,\n member: 'detach',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([]),\n errors: ErrorSchema,\n description: 'Detach this presentation from its selected session.',\n },\n {\n id: 'hub.send',\n scope: 'global',\n service: 'doompi.hub.v1',\n member: 'send',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([HubClientFrame]),\n errors: ErrorSchema,\n description: 'Send a hub subscription, thread, history, or selected extension channel frame.',\n },\n {\n id: 'hub.state',\n scope: 'global',\n service: 'doompi.hub.v1',\n member: 'state',\n direction: 'server-to-client',\n kind: 'state',\n input: Type.Object({ events: Type.Array(Type.Object({ sequence: NumberValue, frame: HubServerFrame })) }),\n description:\n 'Reconstructed hub event replay window. Frame discriminators identify session and selected extension updates.',\n },\n];\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessionApiContracts.cjs","names":["Type","HubSnapshotFrameSchema","HubUpsertFrameSchema","HubRemovedFrameSchema","DOOM_SESSION_SERVICE_ID","DOOM_SESSION_MANAGEMENT_SERVICE_ID"],"sources":["../../src/schemas/sessionApiContracts.ts"],"sourcesContent":["import { Type } from 'typebox';\n\nimport type { DoomSocketContract } from './apiContracts';\nimport { HubSnapshotFrameSchema, HubUpsertFrameSchema, HubRemovedFrameSchema } from './httpApiContracts';\nimport { DOOM_SESSION_MANAGEMENT_SERVICE_ID, DOOM_SESSION_SERVICE_ID, type JsonValue } from './sessionProtocol';\n\nconst Text = Type.String();\nconst NumberValue = Type.Number();\nconst Flag = Type.Boolean();\nconst Json = Type.Unsafe<JsonValue>(\n Type.Unknown({\n description:\n 'Strict JSON application value supplied by the active tool, journal entry, or extension; validated by the Pi codec.',\n }),\n);\nconst Optional = Type.Optional;\nconst Strings = Type.Array(Text);\nconst Model = Type.Object({ provider: Text, id: Text });\nconst Thinking = Type.Union([\n Type.Literal('off'),\n Type.Literal('minimal'),\n Type.Literal('low'),\n Type.Literal('medium'),\n Type.Literal('high'),\n Type.Literal('max'),\n Type.Literal('xhigh'),\n]);\nconst Phase = Type.Union([\n Type.Literal('idle'),\n Type.Literal('turn'),\n Type.Literal('compaction'),\n Type.Literal('retry'),\n]);\nconst Image = Type.Object({ type: Type.Literal('image'), data: Text, mimeType: Text });\nconst TextPart = Type.Object({ type: Type.Literal('text'), text: Text });\nconst Content = Type.Union([Image, TextPart]);\nconst User = Type.Object({\n id: Text,\n role: Type.Literal('user'),\n content: Type.Array(Content),\n timestamp: NumberValue,\n});\nconst Transcript = Type.Union([\n User,\n Type.Object({\n id: Text,\n role: Type.Literal('assistant'),\n content: Type.Array(\n Type.Union([\n TextPart,\n Type.Object({ type: Type.Literal('thinking'), thinking: Text, redacted: Optional(Type.Literal(true)) }),\n Type.Object({ type: Type.Literal('toolCall'), toolCallId: Text, toolName: Text, input: Json }),\n ]),\n ),\n model: Model,\n status: Type.Union([\n Type.Literal('streaming'),\n Type.Literal('complete'),\n Type.Literal('aborted'),\n Type.Literal('error'),\n ]),\n stopReason: Optional(\n Type.Union([\n Type.Literal('stop'),\n Type.Literal('length'),\n Type.Literal('toolUse'),\n Type.Literal('aborted'),\n Type.Literal('error'),\n ]),\n ),\n errorMessage: Optional(Text),\n timestamp: NumberValue,\n }),\n Type.Object({\n id: Text,\n role: Type.Literal('tool'),\n toolCallId: Text,\n toolName: Text,\n input: Json,\n content: Type.Array(Content),\n details: Optional(Json),\n status: Type.Union([Type.Literal('running'), Type.Literal('complete'), Type.Literal('error')]),\n isError: Flag,\n timestamp: NumberValue,\n }),\n]);\nconst Usage = Type.Object({\n input: NumberValue,\n output: NumberValue,\n cacheRead: NumberValue,\n cacheWrite: NumberValue,\n total: NumberValue,\n});\nconst Message = Type.Object({ text: Text, images: Optional(Type.Array(Image)) });\nconst Frame = Type.Intersect([Type.Object({ type: Text }), Type.Record(Text, Json)], {\n description: 'Discriminated extension presentation frame; selected channel schemas describe package payloads.',\n});\nconst HubClientFrame = Type.Union([\n Type.Object({ type: Type.Union([Type.Literal('subscribe'), Type.Literal('unsubscribe')]), sessionId: Text }),\n Type.Object({\n type: Type.Union([Type.Literal('subscribe_thread'), Type.Literal('unsubscribe_thread')]),\n sessionId: Text,\n threadId: Text,\n }),\n Type.Object({\n type: Type.String({ not: { enum: ['subscribe', 'unsubscribe', 'subscribe_thread', 'unsubscribe_thread'] } }),\n sessionId: Text,\n payload: Json,\n }),\n]);\nconst HubServerFrame = Type.Union([\n HubSnapshotFrameSchema,\n HubUpsertFrameSchema,\n HubRemovedFrameSchema,\n Type.Object({ type: Type.Literal('thread_frame'), sessionId: Text, threadId: Text, frame: Frame }),\n Type.Object({ type: Type.Literal('thread_backlog'), sessionId: Text, threadId: Text, frames: Type.Array(Frame) }),\n Type.Object({\n type: Type.String({\n not: {\n enum: [\n 'sessions_snapshot',\n 'session_upsert',\n 'session_removed',\n 'workspaces_snapshot',\n 'workspace_upsert',\n 'workspace_removed',\n 'thread_frame',\n 'thread_backlog',\n ],\n },\n }),\n sessionId: Text,\n payload: Json,\n }),\n]);\nconst ProtocolEvent = Type.Object({ sequence: NumberValue, frame: Frame });\nconst Update = Type.Union([\n Type.Object({\n sessionUpdate: Type.Union([\n Type.Literal('user_message'),\n Type.Literal('agent_message'),\n Type.Literal('agent_thought'),\n ]),\n messageId: Text,\n content: Type.Array(Content),\n }),\n Type.Object({\n sessionUpdate: Type.Literal('tool_call_update'),\n toolCallId: Text,\n title: Optional(Text),\n kind: Optional(Text),\n status: Optional(\n Type.Union([\n Type.Literal('pending'),\n Type.Literal('in_progress'),\n Type.Literal('completed'),\n Type.Literal('failed'),\n Type.Literal('cancelled'),\n ]),\n ),\n content: Optional(Type.Array(Type.Object({ type: Type.Literal('content'), content: Content }))),\n rawInput: Optional(Json),\n rawOutput: Optional(Json),\n }),\n Type.Object({\n sessionUpdate: Type.Literal('state_update'),\n state: Type.Union([Type.Literal('running'), Type.Literal('idle'), Type.Literal('requires_action')]),\n stopReason: Optional(\n Type.Union([\n Type.Literal('end_turn'),\n Type.Literal('max_tokens'),\n Type.Literal('max_turn_requests'),\n Type.Literal('refusal'),\n Type.Literal('cancelled'),\n Type.Unsafe<`_${string}`>(Type.String({ pattern: '^_' })),\n ]),\n ),\n }),\n]);\nexport const SessionServiceStateSchema = Type.Object({\n snapshot: Type.Object({\n id: Text,\n cwd: Text,\n name: Optional(Text),\n createdAt: NumberValue,\n updatedAt: NumberValue,\n phase: Phase,\n model: Model,\n thinkingLevel: Thinking,\n attached: Flag,\n locked: Flag,\n revision: NumberValue,\n queuedSteer: Type.Array(User),\n queuedSteerCount: NumberValue,\n }),\n progress: Type.Union([\n Type.Null(),\n Type.Union([\n Type.Object({ type: Type.Literal('item_started'), item: Transcript }),\n Type.Object({ type: Type.Literal('item_updated'), item: Transcript }),\n Type.Object({ type: Type.Literal('item_finished'), item: Transcript }),\n ]),\n ]),\n updates: Optional(Type.Array(Type.Object({ sequence: NumberValue, update: Update }))),\n presentation: Optional(\n Type.Object({\n revision: NumberValue,\n dropped: NumberValue,\n resetRevision: Optional(NumberValue),\n events: Type.Array(ProtocolEvent),\n projections: Type.Array(ProtocolEvent),\n }),\n ),\n inFlight: Optional(Type.Array(Transcript)),\n});\nexport const SessionMethodSchemas = {\n readTranscriptPage: {\n input: Type.Tuple([\n Type.Object({\n cursor: Optional(Text),\n direction: Optional(Type.Union([Type.Literal('older'), Type.Literal('newer')])),\n limit: Optional(NumberValue),\n threadId: Optional(Text),\n }),\n ]),\n output: Type.Object({\n entries: Type.Array(Json),\n startCursor: Type.Union([Text, Type.Null()]),\n endCursor: Type.Union([Text, Type.Null()]),\n olderCursor: Type.Union([Text, Type.Null()]),\n newerCursor: Type.Union([Text, Type.Null()]),\n generation: NumberValue,\n revision: NumberValue,\n context: Type.Array(Json),\n drafts: Type.Array(Transcript),\n }),\n },\n prompt: {\n input: Type.Tuple([\n Type.Union([\n Text,\n Type.Object({\n ...Message.properties,\n waitFor: Optional(Type.Union([Type.Literal('accepted'), Type.Literal('settled')])),\n }),\n ]),\n ]),\n },\n steer: { input: Type.Tuple([Type.Union([Text, Message])]) },\n abort: { input: Type.Tuple([]) },\n setModel: { input: Type.Tuple([Model]) },\n setThinking: { input: Type.Tuple([Thinking]) },\n followUp: { input: Type.Tuple([Message]) },\n clearQueue: { input: Type.Tuple([]), output: Type.Object({ steering: Strings, followUp: Strings }) },\n rewind: {\n input: Type.Tuple([\n Type.Object({\n itemId: Text,\n summarize: Optional(Flag),\n customInstructions: Optional(Text),\n replaceInstructions: Optional(Flag),\n label: Optional(Text),\n }),\n ]),\n output: Type.Object({\n editorText: Optional(Text),\n cancelled: Flag,\n aborted: Optional(Flag),\n summaryEntry: Optional(\n Type.Object({\n id: Text,\n parentId: Type.Union([Text, Type.Null()]),\n timestamp: Text,\n fromId: Text,\n summary: Text,\n details: Optional(Json),\n usage: Optional(Usage),\n fromHook: Optional(Flag),\n }),\n ),\n }),\n },\n extensionUiResponse: {\n input: Type.Tuple([\n Type.Union([\n Type.Object({ id: Text, value: Text }),\n Type.Object({ id: Text, confirmed: Flag }),\n Type.Object({ id: Text, cancelled: Type.Literal(true) }),\n ]),\n ]),\n },\n getState: {\n input: Type.Tuple([]),\n output: Type.Object({\n model: Optional(Model),\n thinkingLevel: Thinking,\n isStreaming: Flag,\n isCompacting: Flag,\n steeringMode: Type.Union([Type.Literal('all'), Type.Literal('one-at-a-time')]),\n followUpMode: Type.Union([Type.Literal('all'), Type.Literal('one-at-a-time')]),\n sessionFile: Optional(Text),\n sessionId: Text,\n sessionName: Optional(Text),\n autoCompactionEnabled: Flag,\n messageCount: NumberValue,\n pendingMessageCount: NumberValue,\n }),\n },\n getSessionStats: {\n input: Type.Tuple([]),\n output: Type.Object({\n sessionFile: Optional(Text),\n sessionId: Text,\n totalMessages: NumberValue,\n tokens: Usage,\n cost: NumberValue,\n contextUsage: Optional(\n Type.Object({\n tokens: Type.Union([NumberValue, Type.Null()]),\n contextWindow: NumberValue,\n percent: Type.Union([NumberValue, Type.Null()]),\n }),\n ),\n }),\n },\n getCommands: {\n input: Type.Tuple([]),\n output: Type.Array(\n Type.Object({\n name: Text,\n description: Optional(Text),\n source: Type.Union([Type.Literal('extension'), Type.Literal('prompt'), Type.Literal('skill')]),\n sourceInfo: Optional(\n Type.Object({\n path: Text,\n source: Text,\n scope: Type.Union([Type.Literal('user'), Type.Literal('project'), Type.Literal('temporary')]),\n origin: Type.Union([Type.Literal('package'), Type.Literal('top-level')]),\n baseDir: Optional(Text),\n }),\n ),\n }),\n ),\n },\n getAvailableModels: { input: Type.Tuple([]), output: Type.Array(Model) },\n getAvailableThinkingLevels: { input: Type.Tuple([]), output: Type.Array(Thinking) },\n compact: { input: Type.Tuple([Type.Object({ customInstructions: Optional(Text) })]), output: Json },\n setName: { input: Type.Tuple([Text]) },\n};\n\nconst ErrorSchema = Type.Object({ code: Text, message: Text });\nexport const sessionSocketContracts: DoomSocketContract[] = [\n ...Object.entries(SessionMethodSchemas).map(([member, definition]): DoomSocketContract => ({\n id: `session.${member}`,\n scope: 'session',\n service: DOOM_SESSION_SERVICE_ID,\n member,\n direction: 'client-to-server',\n kind: 'method',\n description: `Session ${member}. Arguments exclude the process-local Chord Context. A void result is omitted from the successful Pi response.`,\n ...definition,\n errors: ErrorSchema,\n })),\n {\n id: 'session.state',\n scope: 'session',\n service: DOOM_SESSION_SERVICE_ID,\n member: 'state',\n direction: 'server-to-client',\n kind: 'state',\n input: SessionServiceStateSchema,\n description: 'Reconstructed session state after Chord snapshot/delta decoding.',\n },\n {\n id: 'management.attach',\n scope: 'global',\n service: DOOM_SESSION_MANAGEMENT_SERVICE_ID,\n member: 'attach',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([Text]),\n errors: ErrorSchema,\n description: 'Attach this presentation to a session. Pi publishes an out-of-band attachment update.',\n },\n {\n id: 'management.detach',\n scope: 'global',\n service: DOOM_SESSION_MANAGEMENT_SERVICE_ID,\n member: 'detach',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([]),\n errors: ErrorSchema,\n description: 'Detach this presentation from its selected session.',\n },\n {\n id: 'hub.send',\n scope: 'global',\n service: 'doompi.hub.v1',\n member: 'send',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([HubClientFrame]),\n errors: ErrorSchema,\n description: 'Send a hub subscription, thread, history, or selected extension channel frame.',\n },\n {\n id: 'hub.state',\n scope: 'global',\n service: 'doompi.hub.v1',\n member: 'state',\n direction: 'server-to-client',\n kind: 'state',\n input: Type.Object({ events: Type.Array(Type.Object({ sequence: NumberValue, frame: HubServerFrame })) }),\n description:\n 'Reconstructed hub event replay window. Frame discriminators identify session and selected extension updates.',\n },\n];\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionApiContracts.d.cts","names":[],"sources":["../../src/schemas/sessionApiContracts.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"sessionApiContracts.d.cts","names":[],"sources":["../../src/schemas/sessionApiContracts.ts"],"mappings":";;;;qBAmLa,2BAAyB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCzB;EACX;IACE,OAAK,KAAA,QAAA,KAAA;;;;;;IAQL,QAAM,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYR;IACE,OAAK,KAAA,QAAA,KAAA,QAAA,KAAA,SAAA,KAAA;;;;;;;;;;EAUP;IAAS,OAAK,KAAA,QAAA,KAAA,QAAA,KAAA,SAAA,KAAA;;;;;;;;;EACd;IAAS,OAAK,KAAA;;EACd;IAAY,OAAK,KAAA,QAAA,KAAA;;;;;EACjB;IAAe,OAAK,KAAA,QAAA,KAAA,QAAA,KAAA,iBAAA,KAAA,qBAAA,KAAA,iBAAA,KAAA,oBAAA,KAAA,kBAAA,KAAA,iBAAA,KAAA;;EACpB;IAAY,OAAK,KAAA,QAAA,KAAA;;;;;;;;;EACjB;IAAc,OAAK,KAAA;IAAkB,QAAM,KAAA;;;;;EAC3C;IACE,OAAK,KAAA,QAAA,KAAA;;;;;;;IASL,QAAM,KAAA;;;;;;;;;;;;;;;;;;;;;;EAkBR;IACE,OAAK,KAAA,QAAA,KAAA,QAAA,KAAA;;;;;;;;;;;EAQP;IACE,OAAK,KAAA;IACL,QAAM,KAAA;;;;;;;;;;;;;;;;;;EAeR;IACE,OAAK,KAAA;IACL,QAAM,KAAA;;;;;;;;;;;;;;;;;;;EAeR;IACE,OAAK,KAAA;IACL,QAAM,KAAA,OAAA,KAAA;;;;;;;;;;;;;EAiBR;IAAsB,OAAK,KAAA;IAAkB,QAAM,KAAA,OAAA,KAAA;;;;;EACnD;IAA8B,OAAK,KAAA;IAAkB,QAAM,KAAA,OAAA,KAAA,QAAA,KAAA,iBAAA,KAAA,qBAAA,KAAA,iBAAA,KAAA,oBAAA,KAAA,kBAAA,KAAA,iBAAA,KAAA;;EAC3D;IAAW,OAAK,KAAA,QAAA,KAAA;;;IAAqE,QAAM,KAAA,QAAA;;EAC3F;IAAW,OAAK,KAAA,QAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionApiContracts.d.mts","names":[],"sources":["../../src/schemas/sessionApiContracts.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"sessionApiContracts.d.mts","names":[],"sources":["../../src/schemas/sessionApiContracts.ts"],"mappings":";;;;qBAmLa,2BAAyB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCzB;EACX;IACE,OAAK,KAAA,QAAA,KAAA;;;;;;IAQL,QAAM,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYR;IACE,OAAK,KAAA,QAAA,KAAA,QAAA,KAAA,SAAA,KAAA;;;;;;;;;;EAUP;IAAS,OAAK,KAAA,QAAA,KAAA,QAAA,KAAA,SAAA,KAAA;;;;;;;;;EACd;IAAS,OAAK,KAAA;;EACd;IAAY,OAAK,KAAA,QAAA,KAAA;;;;;EACjB;IAAe,OAAK,KAAA,QAAA,KAAA,QAAA,KAAA,iBAAA,KAAA,qBAAA,KAAA,iBAAA,KAAA,oBAAA,KAAA,kBAAA,KAAA,iBAAA,KAAA;;EACpB;IAAY,OAAK,KAAA,QAAA,KAAA;;;;;;;;;EACjB;IAAc,OAAK,KAAA;IAAkB,QAAM,KAAA;;;;;EAC3C;IACE,OAAK,KAAA,QAAA,KAAA;;;;;;;IASL,QAAM,KAAA;;;;;;;;;;;;;;;;;;;;;;EAkBR;IACE,OAAK,KAAA,QAAA,KAAA,QAAA,KAAA;;;;;;;;;;;EAQP;IACE,OAAK,KAAA;IACL,QAAM,KAAA;;;;;;;;;;;;;;;;;;EAeR;IACE,OAAK,KAAA;IACL,QAAM,KAAA;;;;;;;;;;;;;;;;;;;EAeR;IACE,OAAK,KAAA;IACL,QAAM,KAAA,OAAA,KAAA;;;;;;;;;;;;;EAiBR;IAAsB,OAAK,KAAA;IAAkB,QAAM,KAAA,OAAA,KAAA;;;;;EACnD;IAA8B,OAAK,KAAA;IAAkB,QAAM,KAAA,OAAA,KAAA,QAAA,KAAA,iBAAA,KAAA,qBAAA,KAAA,iBAAA,KAAA,oBAAA,KAAA,kBAAA,KAAA,iBAAA,KAAA;;EAC3D;IAAW,OAAK,KAAA,QAAA,KAAA;;;IAAqE,QAAM,KAAA,QAAA;;EAC3F;IAAW,OAAK,KAAA,QAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionApiContracts.mjs","names":[],"sources":["../../src/schemas/sessionApiContracts.ts"],"sourcesContent":["import { Type } from 'typebox';\n\nimport type { DoomSocketContract } from './apiContracts';\nimport { HubSnapshotFrameSchema, HubUpsertFrameSchema, HubRemovedFrameSchema } from './httpApiContracts';\nimport { DOOM_SESSION_MANAGEMENT_SERVICE_ID, DOOM_SESSION_SERVICE_ID, type JsonValue } from './sessionProtocol';\n\nconst Text = Type.String();\nconst NumberValue = Type.Number();\nconst Flag = Type.Boolean();\nconst Json = Type.Unsafe<JsonValue>(\n Type.Unknown({\n description:\n 'Strict JSON application value supplied by the active tool, journal entry, or extension; validated by the Pi codec.',\n }),\n);\nconst Optional = Type.Optional;\nconst Strings = Type.Array(Text);\nconst Model = Type.Object({ provider: Text, id: Text });\nconst Thinking = Type.Union([\n Type.Literal('off'),\n Type.Literal('minimal'),\n Type.Literal('low'),\n Type.Literal('medium'),\n Type.Literal('high'),\n Type.Literal('max'),\n Type.Literal('xhigh'),\n]);\nconst Phase = Type.Union([\n Type.Literal('idle'),\n Type.Literal('turn'),\n Type.Literal('compaction'),\n Type.Literal('retry'),\n]);\nconst Image = Type.Object({ type: Type.Literal('image'), data: Text, mimeType: Text });\nconst TextPart = Type.Object({ type: Type.Literal('text'), text: Text });\nconst Content = Type.Union([Image, TextPart]);\nconst User = Type.Object({\n id: Text,\n role: Type.Literal('user'),\n content: Type.Array(Content),\n timestamp: NumberValue,\n});\nconst Transcript = Type.Union([\n User,\n Type.Object({\n id: Text,\n role: Type.Literal('assistant'),\n content: Type.Array(\n Type.Union([\n TextPart,\n Type.Object({ type: Type.Literal('thinking'), thinking: Text, redacted: Optional(Type.Literal(true)) }),\n Type.Object({ type: Type.Literal('toolCall'), toolCallId: Text, toolName: Text, input: Json }),\n ]),\n ),\n model: Model,\n status: Type.Union([\n Type.Literal('streaming'),\n Type.Literal('complete'),\n Type.Literal('aborted'),\n Type.Literal('error'),\n ]),\n stopReason: Optional(\n Type.Union([\n Type.Literal('stop'),\n Type.Literal('length'),\n Type.Literal('toolUse'),\n Type.Literal('aborted'),\n Type.Literal('error'),\n ]),\n ),\n errorMessage: Optional(Text),\n timestamp: NumberValue,\n }),\n Type.Object({\n id: Text,\n role: Type.Literal('tool'),\n toolCallId: Text,\n toolName: Text,\n input: Json,\n content: Type.Array(Content),\n details: Optional(Json),\n status: Type.Union([Type.Literal('running'), Type.Literal('complete'), Type.Literal('error')]),\n isError: Flag,\n timestamp: NumberValue,\n }),\n]);\nconst Usage = Type.Object({\n input: NumberValue,\n output: NumberValue,\n cacheRead: NumberValue,\n cacheWrite: NumberValue,\n total: NumberValue,\n});\nconst Message = Type.Object({ text: Text, images: Optional(Type.Array(Image)) });\nconst Frame = Type.Intersect([Type.Object({ type: Text }), Type.Record(Text, Json)], {\n description: 'Discriminated extension presentation frame; selected channel schemas describe package payloads.',\n});\nconst HubClientFrame = Type.Union([\n Type.Object({ type: Type.Union([Type.Literal('subscribe'), Type.Literal('unsubscribe')]), sessionId: Text }),\n Type.Object({\n type: Type.Union([Type.Literal('subscribe_thread'), Type.Literal('unsubscribe_thread')]),\n sessionId: Text,\n threadId: Text,\n }),\n Type.Object({\n type: Type.String({ not: { enum: ['subscribe', 'unsubscribe', 'subscribe_thread', 'unsubscribe_thread'] } }),\n sessionId: Text,\n payload: Json,\n }),\n]);\nconst HubServerFrame = Type.Union([\n HubSnapshotFrameSchema,\n HubUpsertFrameSchema,\n HubRemovedFrameSchema,\n Type.Object({ type: Type.Literal('thread_frame'), sessionId: Text, threadId: Text, frame: Frame }),\n Type.Object({ type: Type.Literal('thread_backlog'), sessionId: Text, threadId: Text, frames: Type.Array(Frame) }),\n Type.Object({\n type: Type.String({\n not: { enum: ['sessions_snapshot', 'session_upsert', 'session_removed', 'thread_frame', 'thread_backlog'] },\n }),\n sessionId: Text,\n payload: Json,\n }),\n]);\nconst ProtocolEvent = Type.Object({ sequence: NumberValue, frame: Frame });\nconst Update = Type.Union([\n Type.Object({\n sessionUpdate: Type.Union([\n Type.Literal('user_message'),\n Type.Literal('agent_message'),\n Type.Literal('agent_thought'),\n ]),\n messageId: Text,\n content: Type.Array(Content),\n }),\n Type.Object({\n sessionUpdate: Type.Literal('tool_call_update'),\n toolCallId: Text,\n title: Optional(Text),\n kind: Optional(Text),\n status: Optional(\n Type.Union([\n Type.Literal('pending'),\n Type.Literal('in_progress'),\n Type.Literal('completed'),\n Type.Literal('failed'),\n Type.Literal('cancelled'),\n ]),\n ),\n content: Optional(Type.Array(Type.Object({ type: Type.Literal('content'), content: Content }))),\n rawInput: Optional(Json),\n rawOutput: Optional(Json),\n }),\n Type.Object({\n sessionUpdate: Type.Literal('state_update'),\n state: Type.Union([Type.Literal('running'), Type.Literal('idle'), Type.Literal('requires_action')]),\n stopReason: Optional(\n Type.Union([\n Type.Literal('end_turn'),\n Type.Literal('max_tokens'),\n Type.Literal('max_turn_requests'),\n Type.Literal('refusal'),\n Type.Literal('cancelled'),\n Type.Unsafe<`_${string}`>(Type.String({ pattern: '^_' })),\n ]),\n ),\n }),\n]);\nexport const SessionServiceStateSchema = Type.Object({\n snapshot: Type.Object({\n id: Text,\n cwd: Text,\n name: Optional(Text),\n createdAt: NumberValue,\n updatedAt: NumberValue,\n phase: Phase,\n model: Model,\n thinkingLevel: Thinking,\n attached: Flag,\n locked: Flag,\n revision: NumberValue,\n queuedSteer: Type.Array(User),\n queuedSteerCount: NumberValue,\n }),\n progress: Type.Union([\n Type.Null(),\n Type.Union([\n Type.Object({ type: Type.Literal('item_started'), item: Transcript }),\n Type.Object({ type: Type.Literal('item_updated'), item: Transcript }),\n Type.Object({ type: Type.Literal('item_finished'), item: Transcript }),\n ]),\n ]),\n updates: Optional(Type.Array(Type.Object({ sequence: NumberValue, update: Update }))),\n presentation: Optional(\n Type.Object({\n revision: NumberValue,\n dropped: NumberValue,\n resetRevision: Optional(NumberValue),\n events: Type.Array(ProtocolEvent),\n projections: Type.Array(ProtocolEvent),\n }),\n ),\n inFlight: Optional(Type.Array(Transcript)),\n});\nexport const SessionMethodSchemas = {\n readTranscriptPage: {\n input: Type.Tuple([\n Type.Object({\n cursor: Optional(Text),\n direction: Optional(Type.Union([Type.Literal('older'), Type.Literal('newer')])),\n limit: Optional(NumberValue),\n threadId: Optional(Text),\n }),\n ]),\n output: Type.Object({\n entries: Type.Array(Json),\n startCursor: Type.Union([Text, Type.Null()]),\n endCursor: Type.Union([Text, Type.Null()]),\n olderCursor: Type.Union([Text, Type.Null()]),\n newerCursor: Type.Union([Text, Type.Null()]),\n generation: NumberValue,\n revision: NumberValue,\n context: Type.Array(Json),\n drafts: Type.Array(Transcript),\n }),\n },\n prompt: {\n input: Type.Tuple([\n Type.Union([\n Text,\n Type.Object({\n ...Message.properties,\n waitFor: Optional(Type.Union([Type.Literal('accepted'), Type.Literal('settled')])),\n }),\n ]),\n ]),\n },\n steer: { input: Type.Tuple([Type.Union([Text, Message])]) },\n abort: { input: Type.Tuple([]) },\n setModel: { input: Type.Tuple([Model]) },\n setThinking: { input: Type.Tuple([Thinking]) },\n followUp: { input: Type.Tuple([Message]) },\n clearQueue: { input: Type.Tuple([]), output: Type.Object({ steering: Strings, followUp: Strings }) },\n rewind: {\n input: Type.Tuple([\n Type.Object({\n itemId: Text,\n summarize: Optional(Flag),\n customInstructions: Optional(Text),\n replaceInstructions: Optional(Flag),\n label: Optional(Text),\n }),\n ]),\n output: Type.Object({\n editorText: Optional(Text),\n cancelled: Flag,\n aborted: Optional(Flag),\n summaryEntry: Optional(\n Type.Object({\n id: Text,\n parentId: Type.Union([Text, Type.Null()]),\n timestamp: Text,\n fromId: Text,\n summary: Text,\n details: Optional(Json),\n usage: Optional(Usage),\n fromHook: Optional(Flag),\n }),\n ),\n }),\n },\n extensionUiResponse: {\n input: Type.Tuple([\n Type.Union([\n Type.Object({ id: Text, value: Text }),\n Type.Object({ id: Text, confirmed: Flag }),\n Type.Object({ id: Text, cancelled: Type.Literal(true) }),\n ]),\n ]),\n },\n getState: {\n input: Type.Tuple([]),\n output: Type.Object({\n model: Optional(Model),\n thinkingLevel: Thinking,\n isStreaming: Flag,\n isCompacting: Flag,\n steeringMode: Type.Union([Type.Literal('all'), Type.Literal('one-at-a-time')]),\n followUpMode: Type.Union([Type.Literal('all'), Type.Literal('one-at-a-time')]),\n sessionFile: Optional(Text),\n sessionId: Text,\n sessionName: Optional(Text),\n autoCompactionEnabled: Flag,\n messageCount: NumberValue,\n pendingMessageCount: NumberValue,\n }),\n },\n getSessionStats: {\n input: Type.Tuple([]),\n output: Type.Object({\n sessionFile: Optional(Text),\n sessionId: Text,\n totalMessages: NumberValue,\n tokens: Usage,\n cost: NumberValue,\n contextUsage: Optional(\n Type.Object({\n tokens: Type.Union([NumberValue, Type.Null()]),\n contextWindow: NumberValue,\n percent: Type.Union([NumberValue, Type.Null()]),\n }),\n ),\n }),\n },\n getCommands: {\n input: Type.Tuple([]),\n output: Type.Array(\n Type.Object({\n name: Text,\n description: Optional(Text),\n source: Type.Union([Type.Literal('extension'), Type.Literal('prompt'), Type.Literal('skill')]),\n sourceInfo: Optional(\n Type.Object({\n path: Text,\n source: Text,\n scope: Type.Union([Type.Literal('user'), Type.Literal('project'), Type.Literal('temporary')]),\n origin: Type.Union([Type.Literal('package'), Type.Literal('top-level')]),\n baseDir: Optional(Text),\n }),\n ),\n }),\n ),\n },\n getAvailableModels: { input: Type.Tuple([]), output: Type.Array(Model) },\n getAvailableThinkingLevels: { input: Type.Tuple([]), output: Type.Array(Thinking) },\n compact: { input: Type.Tuple([Type.Object({ customInstructions: Optional(Text) })]), output: Json },\n setName: { input: Type.Tuple([Text]) },\n};\n\nconst ErrorSchema = Type.Object({ code: Text, message: Text });\nexport const sessionSocketContracts: DoomSocketContract[] = [\n ...Object.entries(SessionMethodSchemas).map(([member, definition]): DoomSocketContract => ({\n id: `session.${member}`,\n scope: 'session',\n service: DOOM_SESSION_SERVICE_ID,\n member,\n direction: 'client-to-server',\n kind: 'method',\n description: `Session ${member}. Arguments exclude the process-local Chord Context. A void result is omitted from the successful Pi response.`,\n ...definition,\n errors: ErrorSchema,\n })),\n {\n id: 'session.state',\n scope: 'session',\n service: DOOM_SESSION_SERVICE_ID,\n member: 'state',\n direction: 'server-to-client',\n kind: 'state',\n input: SessionServiceStateSchema,\n description: 'Reconstructed session state after Chord snapshot/delta decoding.',\n },\n {\n id: 'management.attach',\n scope: 'global',\n service: DOOM_SESSION_MANAGEMENT_SERVICE_ID,\n member: 'attach',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([Text]),\n errors: ErrorSchema,\n description: 'Attach this presentation to a session. Pi publishes an out-of-band attachment update.',\n },\n {\n id: 'management.detach',\n scope: 'global',\n service: DOOM_SESSION_MANAGEMENT_SERVICE_ID,\n member: 'detach',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([]),\n errors: ErrorSchema,\n description: 'Detach this presentation from its selected session.',\n },\n {\n id: 'hub.send',\n scope: 'global',\n service: 'doompi.hub.v1',\n member: 'send',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([HubClientFrame]),\n errors: ErrorSchema,\n description: 'Send a hub subscription, thread, history, or selected extension channel frame.',\n },\n {\n id: 'hub.state',\n scope: 'global',\n service: 'doompi.hub.v1',\n member: 'state',\n direction: 'server-to-client',\n kind: 'state',\n input: Type.Object({ events: Type.Array(Type.Object({ sequence: NumberValue, frame: HubServerFrame })) }),\n description:\n 'Reconstructed hub event replay window. Frame discriminators identify session and selected extension updates.',\n },\n];\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessionApiContracts.mjs","names":[],"sources":["../../src/schemas/sessionApiContracts.ts"],"sourcesContent":["import { Type } from 'typebox';\n\nimport type { DoomSocketContract } from './apiContracts';\nimport { HubSnapshotFrameSchema, HubUpsertFrameSchema, HubRemovedFrameSchema } from './httpApiContracts';\nimport { DOOM_SESSION_MANAGEMENT_SERVICE_ID, DOOM_SESSION_SERVICE_ID, type JsonValue } from './sessionProtocol';\n\nconst Text = Type.String();\nconst NumberValue = Type.Number();\nconst Flag = Type.Boolean();\nconst Json = Type.Unsafe<JsonValue>(\n Type.Unknown({\n description:\n 'Strict JSON application value supplied by the active tool, journal entry, or extension; validated by the Pi codec.',\n }),\n);\nconst Optional = Type.Optional;\nconst Strings = Type.Array(Text);\nconst Model = Type.Object({ provider: Text, id: Text });\nconst Thinking = Type.Union([\n Type.Literal('off'),\n Type.Literal('minimal'),\n Type.Literal('low'),\n Type.Literal('medium'),\n Type.Literal('high'),\n Type.Literal('max'),\n Type.Literal('xhigh'),\n]);\nconst Phase = Type.Union([\n Type.Literal('idle'),\n Type.Literal('turn'),\n Type.Literal('compaction'),\n Type.Literal('retry'),\n]);\nconst Image = Type.Object({ type: Type.Literal('image'), data: Text, mimeType: Text });\nconst TextPart = Type.Object({ type: Type.Literal('text'), text: Text });\nconst Content = Type.Union([Image, TextPart]);\nconst User = Type.Object({\n id: Text,\n role: Type.Literal('user'),\n content: Type.Array(Content),\n timestamp: NumberValue,\n});\nconst Transcript = Type.Union([\n User,\n Type.Object({\n id: Text,\n role: Type.Literal('assistant'),\n content: Type.Array(\n Type.Union([\n TextPart,\n Type.Object({ type: Type.Literal('thinking'), thinking: Text, redacted: Optional(Type.Literal(true)) }),\n Type.Object({ type: Type.Literal('toolCall'), toolCallId: Text, toolName: Text, input: Json }),\n ]),\n ),\n model: Model,\n status: Type.Union([\n Type.Literal('streaming'),\n Type.Literal('complete'),\n Type.Literal('aborted'),\n Type.Literal('error'),\n ]),\n stopReason: Optional(\n Type.Union([\n Type.Literal('stop'),\n Type.Literal('length'),\n Type.Literal('toolUse'),\n Type.Literal('aborted'),\n Type.Literal('error'),\n ]),\n ),\n errorMessage: Optional(Text),\n timestamp: NumberValue,\n }),\n Type.Object({\n id: Text,\n role: Type.Literal('tool'),\n toolCallId: Text,\n toolName: Text,\n input: Json,\n content: Type.Array(Content),\n details: Optional(Json),\n status: Type.Union([Type.Literal('running'), Type.Literal('complete'), Type.Literal('error')]),\n isError: Flag,\n timestamp: NumberValue,\n }),\n]);\nconst Usage = Type.Object({\n input: NumberValue,\n output: NumberValue,\n cacheRead: NumberValue,\n cacheWrite: NumberValue,\n total: NumberValue,\n});\nconst Message = Type.Object({ text: Text, images: Optional(Type.Array(Image)) });\nconst Frame = Type.Intersect([Type.Object({ type: Text }), Type.Record(Text, Json)], {\n description: 'Discriminated extension presentation frame; selected channel schemas describe package payloads.',\n});\nconst HubClientFrame = Type.Union([\n Type.Object({ type: Type.Union([Type.Literal('subscribe'), Type.Literal('unsubscribe')]), sessionId: Text }),\n Type.Object({\n type: Type.Union([Type.Literal('subscribe_thread'), Type.Literal('unsubscribe_thread')]),\n sessionId: Text,\n threadId: Text,\n }),\n Type.Object({\n type: Type.String({ not: { enum: ['subscribe', 'unsubscribe', 'subscribe_thread', 'unsubscribe_thread'] } }),\n sessionId: Text,\n payload: Json,\n }),\n]);\nconst HubServerFrame = Type.Union([\n HubSnapshotFrameSchema,\n HubUpsertFrameSchema,\n HubRemovedFrameSchema,\n Type.Object({ type: Type.Literal('thread_frame'), sessionId: Text, threadId: Text, frame: Frame }),\n Type.Object({ type: Type.Literal('thread_backlog'), sessionId: Text, threadId: Text, frames: Type.Array(Frame) }),\n Type.Object({\n type: Type.String({\n not: {\n enum: [\n 'sessions_snapshot',\n 'session_upsert',\n 'session_removed',\n 'workspaces_snapshot',\n 'workspace_upsert',\n 'workspace_removed',\n 'thread_frame',\n 'thread_backlog',\n ],\n },\n }),\n sessionId: Text,\n payload: Json,\n }),\n]);\nconst ProtocolEvent = Type.Object({ sequence: NumberValue, frame: Frame });\nconst Update = Type.Union([\n Type.Object({\n sessionUpdate: Type.Union([\n Type.Literal('user_message'),\n Type.Literal('agent_message'),\n Type.Literal('agent_thought'),\n ]),\n messageId: Text,\n content: Type.Array(Content),\n }),\n Type.Object({\n sessionUpdate: Type.Literal('tool_call_update'),\n toolCallId: Text,\n title: Optional(Text),\n kind: Optional(Text),\n status: Optional(\n Type.Union([\n Type.Literal('pending'),\n Type.Literal('in_progress'),\n Type.Literal('completed'),\n Type.Literal('failed'),\n Type.Literal('cancelled'),\n ]),\n ),\n content: Optional(Type.Array(Type.Object({ type: Type.Literal('content'), content: Content }))),\n rawInput: Optional(Json),\n rawOutput: Optional(Json),\n }),\n Type.Object({\n sessionUpdate: Type.Literal('state_update'),\n state: Type.Union([Type.Literal('running'), Type.Literal('idle'), Type.Literal('requires_action')]),\n stopReason: Optional(\n Type.Union([\n Type.Literal('end_turn'),\n Type.Literal('max_tokens'),\n Type.Literal('max_turn_requests'),\n Type.Literal('refusal'),\n Type.Literal('cancelled'),\n Type.Unsafe<`_${string}`>(Type.String({ pattern: '^_' })),\n ]),\n ),\n }),\n]);\nexport const SessionServiceStateSchema = Type.Object({\n snapshot: Type.Object({\n id: Text,\n cwd: Text,\n name: Optional(Text),\n createdAt: NumberValue,\n updatedAt: NumberValue,\n phase: Phase,\n model: Model,\n thinkingLevel: Thinking,\n attached: Flag,\n locked: Flag,\n revision: NumberValue,\n queuedSteer: Type.Array(User),\n queuedSteerCount: NumberValue,\n }),\n progress: Type.Union([\n Type.Null(),\n Type.Union([\n Type.Object({ type: Type.Literal('item_started'), item: Transcript }),\n Type.Object({ type: Type.Literal('item_updated'), item: Transcript }),\n Type.Object({ type: Type.Literal('item_finished'), item: Transcript }),\n ]),\n ]),\n updates: Optional(Type.Array(Type.Object({ sequence: NumberValue, update: Update }))),\n presentation: Optional(\n Type.Object({\n revision: NumberValue,\n dropped: NumberValue,\n resetRevision: Optional(NumberValue),\n events: Type.Array(ProtocolEvent),\n projections: Type.Array(ProtocolEvent),\n }),\n ),\n inFlight: Optional(Type.Array(Transcript)),\n});\nexport const SessionMethodSchemas = {\n readTranscriptPage: {\n input: Type.Tuple([\n Type.Object({\n cursor: Optional(Text),\n direction: Optional(Type.Union([Type.Literal('older'), Type.Literal('newer')])),\n limit: Optional(NumberValue),\n threadId: Optional(Text),\n }),\n ]),\n output: Type.Object({\n entries: Type.Array(Json),\n startCursor: Type.Union([Text, Type.Null()]),\n endCursor: Type.Union([Text, Type.Null()]),\n olderCursor: Type.Union([Text, Type.Null()]),\n newerCursor: Type.Union([Text, Type.Null()]),\n generation: NumberValue,\n revision: NumberValue,\n context: Type.Array(Json),\n drafts: Type.Array(Transcript),\n }),\n },\n prompt: {\n input: Type.Tuple([\n Type.Union([\n Text,\n Type.Object({\n ...Message.properties,\n waitFor: Optional(Type.Union([Type.Literal('accepted'), Type.Literal('settled')])),\n }),\n ]),\n ]),\n },\n steer: { input: Type.Tuple([Type.Union([Text, Message])]) },\n abort: { input: Type.Tuple([]) },\n setModel: { input: Type.Tuple([Model]) },\n setThinking: { input: Type.Tuple([Thinking]) },\n followUp: { input: Type.Tuple([Message]) },\n clearQueue: { input: Type.Tuple([]), output: Type.Object({ steering: Strings, followUp: Strings }) },\n rewind: {\n input: Type.Tuple([\n Type.Object({\n itemId: Text,\n summarize: Optional(Flag),\n customInstructions: Optional(Text),\n replaceInstructions: Optional(Flag),\n label: Optional(Text),\n }),\n ]),\n output: Type.Object({\n editorText: Optional(Text),\n cancelled: Flag,\n aborted: Optional(Flag),\n summaryEntry: Optional(\n Type.Object({\n id: Text,\n parentId: Type.Union([Text, Type.Null()]),\n timestamp: Text,\n fromId: Text,\n summary: Text,\n details: Optional(Json),\n usage: Optional(Usage),\n fromHook: Optional(Flag),\n }),\n ),\n }),\n },\n extensionUiResponse: {\n input: Type.Tuple([\n Type.Union([\n Type.Object({ id: Text, value: Text }),\n Type.Object({ id: Text, confirmed: Flag }),\n Type.Object({ id: Text, cancelled: Type.Literal(true) }),\n ]),\n ]),\n },\n getState: {\n input: Type.Tuple([]),\n output: Type.Object({\n model: Optional(Model),\n thinkingLevel: Thinking,\n isStreaming: Flag,\n isCompacting: Flag,\n steeringMode: Type.Union([Type.Literal('all'), Type.Literal('one-at-a-time')]),\n followUpMode: Type.Union([Type.Literal('all'), Type.Literal('one-at-a-time')]),\n sessionFile: Optional(Text),\n sessionId: Text,\n sessionName: Optional(Text),\n autoCompactionEnabled: Flag,\n messageCount: NumberValue,\n pendingMessageCount: NumberValue,\n }),\n },\n getSessionStats: {\n input: Type.Tuple([]),\n output: Type.Object({\n sessionFile: Optional(Text),\n sessionId: Text,\n totalMessages: NumberValue,\n tokens: Usage,\n cost: NumberValue,\n contextUsage: Optional(\n Type.Object({\n tokens: Type.Union([NumberValue, Type.Null()]),\n contextWindow: NumberValue,\n percent: Type.Union([NumberValue, Type.Null()]),\n }),\n ),\n }),\n },\n getCommands: {\n input: Type.Tuple([]),\n output: Type.Array(\n Type.Object({\n name: Text,\n description: Optional(Text),\n source: Type.Union([Type.Literal('extension'), Type.Literal('prompt'), Type.Literal('skill')]),\n sourceInfo: Optional(\n Type.Object({\n path: Text,\n source: Text,\n scope: Type.Union([Type.Literal('user'), Type.Literal('project'), Type.Literal('temporary')]),\n origin: Type.Union([Type.Literal('package'), Type.Literal('top-level')]),\n baseDir: Optional(Text),\n }),\n ),\n }),\n ),\n },\n getAvailableModels: { input: Type.Tuple([]), output: Type.Array(Model) },\n getAvailableThinkingLevels: { input: Type.Tuple([]), output: Type.Array(Thinking) },\n compact: { input: Type.Tuple([Type.Object({ customInstructions: Optional(Text) })]), output: Json },\n setName: { input: Type.Tuple([Text]) },\n};\n\nconst ErrorSchema = Type.Object({ code: Text, message: Text });\nexport const sessionSocketContracts: DoomSocketContract[] = [\n ...Object.entries(SessionMethodSchemas).map(([member, definition]): DoomSocketContract => ({\n id: `session.${member}`,\n scope: 'session',\n service: DOOM_SESSION_SERVICE_ID,\n member,\n direction: 'client-to-server',\n kind: 'method',\n description: `Session ${member}. Arguments exclude the process-local Chord Context. A void result is omitted from the successful Pi response.`,\n ...definition,\n errors: ErrorSchema,\n })),\n {\n id: 'session.state',\n scope: 'session',\n service: DOOM_SESSION_SERVICE_ID,\n member: 'state',\n direction: 'server-to-client',\n kind: 'state',\n input: SessionServiceStateSchema,\n description: 'Reconstructed session state after Chord snapshot/delta decoding.',\n },\n {\n id: 'management.attach',\n scope: 'global',\n service: DOOM_SESSION_MANAGEMENT_SERVICE_ID,\n member: 'attach',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([Text]),\n errors: ErrorSchema,\n description: 'Attach this presentation to a session. Pi publishes an out-of-band attachment update.',\n },\n {\n id: 'management.detach',\n scope: 'global',\n service: DOOM_SESSION_MANAGEMENT_SERVICE_ID,\n member: 'detach',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([]),\n errors: ErrorSchema,\n description: 'Detach this presentation from its selected session.',\n },\n {\n id: 'hub.send',\n scope: 'global',\n service: 'doompi.hub.v1',\n member: 'send',\n direction: 'client-to-server',\n kind: 'method',\n input: Type.Tuple([HubClientFrame]),\n errors: ErrorSchema,\n description: 'Send a hub subscription, thread, history, or selected extension channel frame.',\n },\n {\n id: 'hub.state',\n scope: 'global',\n service: 'doompi.hub.v1',\n member: 'state',\n direction: 'server-to-client',\n kind: 'state',\n input: Type.Object({ events: Type.Array(Type.Object({ sequence: NumberValue, frame: HubServerFrame })) }),\n description:\n 'Reconstructed hub event replay window. Frame discriminators identify session and selected extension updates.',\n },\n];\n"],"mappings":"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"}
|