@agimon-ai/doompi-minor-mode 0.0.1-alpha.70
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/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/api-contracts.cjs +7 -0
- package/dist/api-contracts.d.cts +2 -0
- package/dist/api-contracts.d.mts +2 -0
- package/dist/api-contracts.mjs +2 -0
- package/dist/catalog.cjs +223 -0
- package/dist/catalog.cjs.map +1 -0
- package/dist/catalog.d.cts +14 -0
- package/dist/catalog.d.cts.map +1 -0
- package/dist/catalog.d.mts +14 -0
- package/dist/catalog.d.mts.map +1 -0
- package/dist/catalog.mjs +222 -0
- package/dist/catalog.mjs.map +1 -0
- package/dist/command.cjs +134 -0
- package/dist/command.cjs.map +1 -0
- package/dist/command.d.cts +25 -0
- package/dist/command.d.cts.map +1 -0
- package/dist/command.d.mts +25 -0
- package/dist/command.d.mts.map +1 -0
- package/dist/command.mjs +129 -0
- package/dist/command.mjs.map +1 -0
- package/dist/constants/command.cjs +6 -0
- package/dist/constants/command.cjs.map +1 -0
- package/dist/constants/command.d.cts +4 -0
- package/dist/constants/command.d.cts.map +1 -0
- package/dist/constants/command.d.mts +4 -0
- package/dist/constants/command.d.mts.map +1 -0
- package/dist/constants/command.mjs +6 -0
- package/dist/constants/command.mjs.map +1 -0
- package/dist/controllers/catalogRuntime.cjs +123 -0
- package/dist/controllers/catalogRuntime.cjs.map +1 -0
- package/dist/controllers/catalogRuntime.mjs +123 -0
- package/dist/controllers/catalogRuntime.mjs.map +1 -0
- package/dist/extensions/pi.cjs +7 -0
- package/dist/extensions/pi.cjs.map +1 -0
- package/dist/extensions/pi.d.cts +4 -0
- package/dist/extensions/pi.d.cts.map +1 -0
- package/dist/extensions/pi.d.mts +5 -0
- package/dist/extensions/pi.d.mts.map +1 -0
- package/dist/extensions/pi.mjs +8 -0
- package/dist/extensions/pi.mjs.map +1 -0
- package/dist/extensions/server.cjs +85 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.cts +4 -0
- package/dist/extensions/server.d.cts.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +86 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/index.cjs +53 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.mts +10 -0
- package/dist/index.mjs +9 -0
- package/dist/minor-mode-command.cjs +37 -0
- package/dist/minor-mode-command.cjs.map +1 -0
- package/dist/minor-mode-command.d.cts +9 -0
- package/dist/minor-mode-command.d.cts.map +1 -0
- package/dist/minor-mode-command.d.mts +9 -0
- package/dist/minor-mode-command.d.mts.map +1 -0
- package/dist/minor-mode-command.mjs +33 -0
- package/dist/minor-mode-command.mjs.map +1 -0
- package/dist/mode-definition.cjs +47 -0
- package/dist/mode-definition.cjs.map +1 -0
- package/dist/mode-definition.d.cts +30 -0
- package/dist/mode-definition.d.cts.map +1 -0
- package/dist/mode-definition.d.mts +30 -0
- package/dist/mode-definition.d.mts.map +1 -0
- package/dist/mode-definition.mjs +46 -0
- package/dist/mode-definition.mjs.map +1 -0
- package/dist/mode.cjs +275 -0
- package/dist/mode.cjs.map +1 -0
- package/dist/mode.d.cts +491 -0
- package/dist/mode.d.cts.map +1 -0
- package/dist/mode.d.mts +491 -0
- package/dist/mode.d.mts.map +1 -0
- package/dist/mode.mjs +241 -0
- package/dist/mode.mjs.map +1 -0
- package/dist/owner.cjs +10 -0
- package/dist/owner.cjs.map +1 -0
- package/dist/owner.d.cts +7 -0
- package/dist/owner.d.cts.map +1 -0
- package/dist/owner.d.mts +7 -0
- package/dist/owner.d.mts.map +1 -0
- package/dist/owner.mjs +9 -0
- package/dist/owner.mjs.map +1 -0
- package/dist/projection.cjs +49 -0
- package/dist/projection.cjs.map +1 -0
- package/dist/projection.d.cts +12 -0
- package/dist/projection.d.cts.map +1 -0
- package/dist/projection.d.mts +12 -0
- package/dist/projection.d.mts.map +1 -0
- package/dist/projection.mjs +47 -0
- package/dist/projection.mjs.map +1 -0
- package/dist/reload-handoff.cjs +57 -0
- package/dist/reload-handoff.cjs.map +1 -0
- package/dist/reload-handoff.d.cts +11 -0
- package/dist/reload-handoff.d.cts.map +1 -0
- package/dist/reload-handoff.d.mts +11 -0
- package/dist/reload-handoff.d.mts.map +1 -0
- package/dist/reload-handoff.mjs +54 -0
- package/dist/reload-handoff.mjs.map +1 -0
- package/dist/schemas/apiContracts.cjs +13 -0
- package/dist/schemas/apiContracts.cjs.map +1 -0
- package/dist/schemas/apiContracts.d.cts +53 -0
- package/dist/schemas/apiContracts.d.cts.map +1 -0
- package/dist/schemas/apiContracts.d.mts +53 -0
- package/dist/schemas/apiContracts.d.mts.map +1 -0
- package/dist/schemas/apiContracts.mjs +13 -0
- package/dist/schemas/apiContracts.mjs.map +1 -0
- package/dist/schemas/headless.d.cts +16 -0
- package/dist/schemas/headless.d.cts.map +1 -0
- package/dist/schemas/headless.d.mts +16 -0
- package/dist/schemas/headless.d.mts.map +1 -0
- package/dist/services/client/index.cjs +18 -0
- package/dist/services/client/index.cjs.map +1 -0
- package/dist/services/client/index.d.cts +12 -0
- package/dist/services/client/index.d.cts.map +1 -0
- package/dist/services/client/index.d.mts +12 -0
- package/dist/services/client/index.d.mts.map +1 -0
- package/dist/services/client/index.mjs +18 -0
- package/dist/services/client/index.mjs.map +1 -0
- package/dist/services/headlessCommand/index.cjs +53 -0
- package/dist/services/headlessCommand/index.cjs.map +1 -0
- package/dist/services/headlessCommand/index.d.cts +6 -0
- package/dist/services/headlessCommand/index.d.cts.map +1 -0
- package/dist/services/headlessCommand/index.d.mts +6 -0
- package/dist/services/headlessCommand/index.d.mts.map +1 -0
- package/dist/services/headlessCommand/index.mjs +53 -0
- package/dist/services/headlessCommand/index.mjs.map +1 -0
- package/dist/services/piRegistration/index.cjs +86 -0
- package/dist/services/piRegistration/index.cjs.map +1 -0
- package/dist/services/piRegistration/index.d.cts +15 -0
- package/dist/services/piRegistration/index.d.cts.map +1 -0
- package/dist/services/piRegistration/index.d.mts +15 -0
- package/dist/services/piRegistration/index.d.mts.map +1 -0
- package/dist/services/piRegistration/index.mjs +86 -0
- package/dist/services/piRegistration/index.mjs.map +1 -0
- package/dist/services/serverRegistration/index.cjs +35 -0
- package/dist/services/serverRegistration/index.cjs.map +1 -0
- package/dist/services/serverRegistration/index.d.cts +7 -0
- package/dist/services/serverRegistration/index.d.cts.map +1 -0
- package/dist/services/serverRegistration/index.d.mts +7 -0
- package/dist/services/serverRegistration/index.d.mts.map +1 -0
- package/dist/services/serverRegistration/index.mjs +35 -0
- package/dist/services/serverRegistration/index.mjs.map +1 -0
- package/dist/services/validation/index.cjs +84 -0
- package/dist/services/validation/index.cjs.map +1 -0
- package/dist/services/validation/index.d.cts +8 -0
- package/dist/services/validation/index.d.cts.map +1 -0
- package/dist/services/validation/index.d.mts +8 -0
- package/dist/services/validation/index.d.mts.map +1 -0
- package/dist/services/validation/index.mjs +81 -0
- package/dist/services/validation/index.mjs.map +1 -0
- package/package.json +157 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { readMinorModeCatalog } from "./mode.mjs";
|
|
2
|
+
import { readDoomTransitionCoordinator } from "@agimon-ai/doompi-core/runtime-transition";
|
|
3
|
+
//#region src/services/reloadHandoff/index.ts
|
|
4
|
+
const MINOR_MODE_RELOAD_HANDOFF_SYMBOL = Symbol.for("@agimon-ai/doompi.minor-mode-reload-handoff.v1");
|
|
5
|
+
const MINOR_MODE_RELOAD_HANDOFF_TTL_MS = 6e4;
|
|
6
|
+
function reloadHandoffRegistry() {
|
|
7
|
+
const globalRegistry = globalThis;
|
|
8
|
+
const existing = globalRegistry[MINOR_MODE_RELOAD_HANDOFF_SYMBOL];
|
|
9
|
+
if (existing) return existing;
|
|
10
|
+
const created = { records: /* @__PURE__ */ new Map() };
|
|
11
|
+
globalRegistry[MINOR_MODE_RELOAD_HANDOFF_SYMBOL] = created;
|
|
12
|
+
return created;
|
|
13
|
+
}
|
|
14
|
+
function pruneExpiredReloadHandoffs(now = Date.now()) {
|
|
15
|
+
for (const [sessionId, handoff] of reloadHandoffRegistry().records) if (handoff.expiresAt <= now) reloadHandoffRegistry().records.delete(sessionId);
|
|
16
|
+
}
|
|
17
|
+
function prepareMinorModeReloadHandoff(context, sessionId, transitionHostGeneration, operationId, snapshot) {
|
|
18
|
+
if (!snapshot?.modes.some(({ state }) => state.activation === "active" || state.activation === "activating")) return;
|
|
19
|
+
const coordinator = readDoomTransitionCoordinator(context);
|
|
20
|
+
const catalog = readMinorModeCatalog(context);
|
|
21
|
+
if (!coordinator || coordinator.hostGeneration !== transitionHostGeneration || !catalog || catalog.generation !== snapshot.hostGeneration) throw new Error("Minor-mode reload handoff became stale before reload.");
|
|
22
|
+
pruneExpiredReloadHandoffs();
|
|
23
|
+
const token = `minor-mode-reload:${crypto.randomUUID()}`;
|
|
24
|
+
const record = {
|
|
25
|
+
token,
|
|
26
|
+
sessionId,
|
|
27
|
+
transitionHostGeneration,
|
|
28
|
+
operationId,
|
|
29
|
+
catalogHostGeneration: snapshot.hostGeneration,
|
|
30
|
+
snapshot: structuredClone(snapshot),
|
|
31
|
+
expiresAt: Date.now() + MINOR_MODE_RELOAD_HANDOFF_TTL_MS
|
|
32
|
+
};
|
|
33
|
+
reloadHandoffRegistry().records.set(sessionId, record);
|
|
34
|
+
return { discard() {
|
|
35
|
+
if (reloadHandoffRegistry().records.get(sessionId)?.token !== token) return false;
|
|
36
|
+
return reloadHandoffRegistry().records.delete(sessionId);
|
|
37
|
+
} };
|
|
38
|
+
}
|
|
39
|
+
function discardMinorModeReloadHandoff(sessionId) {
|
|
40
|
+
pruneExpiredReloadHandoffs();
|
|
41
|
+
return reloadHandoffRegistry().records.delete(sessionId);
|
|
42
|
+
}
|
|
43
|
+
function consumeMinorModeReloadHandoff(sessionId) {
|
|
44
|
+
pruneExpiredReloadHandoffs();
|
|
45
|
+
const handoff = reloadHandoffRegistry().records.get(sessionId);
|
|
46
|
+
if (!handoff) return void 0;
|
|
47
|
+
reloadHandoffRegistry().records.delete(sessionId);
|
|
48
|
+
if (handoff.sessionId !== sessionId || handoff.snapshot.hostGeneration !== handoff.catalogHostGeneration || !handoff.transitionHostGeneration || !handoff.operationId) return;
|
|
49
|
+
return structuredClone(handoff.snapshot);
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { consumeMinorModeReloadHandoff, discardMinorModeReloadHandoff, prepareMinorModeReloadHandoff };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=reload-handoff.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload-handoff.mjs","names":[],"sources":["../src/services/reloadHandoff/index.ts"],"sourcesContent":["import { readDoomTransitionCoordinator } from '@agimon-ai/doompi-core/runtime-transition';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { readMinorModeCatalog } from '../../schemas/mode';\nimport type { MinorModeCatalogSnapshot } from '../../schemas/mode';\n\nconst MINOR_MODE_RELOAD_HANDOFF_SYMBOL = Symbol.for('@agimon-ai/doompi.minor-mode-reload-handoff.v1');\nconst MINOR_MODE_RELOAD_HANDOFF_TTL_MS = 60_000;\n\ninterface StoredMinorModeReloadHandoff {\n readonly token: string;\n readonly sessionId: string;\n readonly transitionHostGeneration: string;\n readonly operationId: string;\n readonly catalogHostGeneration: string;\n readonly snapshot: MinorModeCatalogSnapshot;\n readonly expiresAt: number;\n}\n\ninterface MinorModeReloadHandoffRegistry {\n readonly records: Map<string, StoredMinorModeReloadHandoff>;\n}\n\nexport interface MinorModeReloadHandoffHandle {\n discard(): boolean;\n}\n\ninterface MinorModeReloadHandoffGlobal {\n [MINOR_MODE_RELOAD_HANDOFF_SYMBOL]?: MinorModeReloadHandoffRegistry;\n}\n\nfunction reloadHandoffRegistry(): MinorModeReloadHandoffRegistry {\n const globalRegistry = globalThis as MinorModeReloadHandoffGlobal;\n const existing = globalRegistry[MINOR_MODE_RELOAD_HANDOFF_SYMBOL];\n if (existing) return existing;\n const created: MinorModeReloadHandoffRegistry = { records: new Map() };\n globalRegistry[MINOR_MODE_RELOAD_HANDOFF_SYMBOL] = created;\n return created;\n}\n\nfunction pruneExpiredReloadHandoffs(now = Date.now()): void {\n for (const [sessionId, handoff] of reloadHandoffRegistry().records) {\n if (handoff.expiresAt <= now) reloadHandoffRegistry().records.delete(sessionId);\n }\n}\n\nexport function prepareMinorModeReloadHandoff(\n context: Context,\n sessionId: string,\n transitionHostGeneration: string,\n operationId: string,\n snapshot: MinorModeCatalogSnapshot | undefined,\n): MinorModeReloadHandoffHandle | undefined {\n if (!snapshot?.modes.some(({ state }) => state.activation === 'active' || state.activation === 'activating')) {\n return undefined;\n }\n const coordinator = readDoomTransitionCoordinator(context);\n const catalog = readMinorModeCatalog(context);\n if (\n !coordinator ||\n coordinator.hostGeneration !== transitionHostGeneration ||\n !catalog ||\n catalog.generation !== snapshot.hostGeneration\n ) {\n throw new Error('Minor-mode reload handoff became stale before reload.');\n }\n\n pruneExpiredReloadHandoffs();\n const token = `minor-mode-reload:${crypto.randomUUID()}`;\n const record: StoredMinorModeReloadHandoff = {\n token,\n sessionId,\n transitionHostGeneration,\n operationId,\n catalogHostGeneration: snapshot.hostGeneration,\n snapshot: structuredClone(snapshot),\n expiresAt: Date.now() + MINOR_MODE_RELOAD_HANDOFF_TTL_MS,\n };\n reloadHandoffRegistry().records.set(sessionId, record);\n\n return {\n discard() {\n const current = reloadHandoffRegistry().records.get(sessionId);\n if (current?.token !== token) return false;\n return reloadHandoffRegistry().records.delete(sessionId);\n },\n };\n}\n\nexport function discardMinorModeReloadHandoff(sessionId: string): boolean {\n pruneExpiredReloadHandoffs();\n return reloadHandoffRegistry().records.delete(sessionId);\n}\n\nexport function consumeMinorModeReloadHandoff(sessionId: string): MinorModeCatalogSnapshot | undefined {\n pruneExpiredReloadHandoffs();\n const handoff = reloadHandoffRegistry().records.get(sessionId);\n if (!handoff) return undefined;\n reloadHandoffRegistry().records.delete(sessionId);\n if (\n handoff.sessionId !== sessionId ||\n handoff.snapshot.hostGeneration !== handoff.catalogHostGeneration ||\n !handoff.transitionHostGeneration ||\n !handoff.operationId\n ) {\n return undefined;\n }\n return structuredClone(handoff.snapshot);\n}\n"],"mappings":";;;AAMA,MAAM,mCAAmC,OAAO,IAAI,gDAAgD;AACpG,MAAM,mCAAmC;AAwBzC,SAAS,wBAAwD;CAC/D,MAAM,iBAAiB;CACvB,MAAM,WAAW,eAAe;CAChC,IAAI,UAAU,OAAO;CACrB,MAAM,UAA0C,EAAE,yBAAS,IAAI,IAAI,EAAE;CACrE,eAAe,oCAAoC;CACnD,OAAO;AACT;AAEA,SAAS,2BAA2B,MAAM,KAAK,IAAI,GAAS;CAC1D,KAAK,MAAM,CAAC,WAAW,YAAY,sBAAsB,CAAC,CAAC,SACzD,IAAI,QAAQ,aAAa,KAAK,sBAAsB,CAAC,CAAC,QAAQ,OAAO,SAAS;AAElF;AAEA,SAAgB,8BACd,SACA,WACA,0BACA,aACA,UAC0C;CAC1C,IAAI,CAAC,UAAU,MAAM,MAAM,EAAE,YAAY,MAAM,eAAe,YAAY,MAAM,eAAe,YAAY,GACzG;CAEF,MAAM,cAAc,8BAA8B,OAAO;CACzD,MAAM,UAAU,qBAAqB,OAAO;CAC5C,IACE,CAAC,eACD,YAAY,mBAAmB,4BAC/B,CAAC,WACD,QAAQ,eAAe,SAAS,gBAEhC,MAAM,IAAI,MAAM,uDAAuD;CAGzE,2BAA2B;CAC3B,MAAM,QAAQ,qBAAqB,OAAO,WAAW;CACrD,MAAM,SAAuC;EAC3C;EACA;EACA;EACA;EACA,uBAAuB,SAAS;EAChC,UAAU,gBAAgB,QAAQ;EAClC,WAAW,KAAK,IAAI,IAAI;CAC1B;CACA,sBAAsB,CAAC,CAAC,QAAQ,IAAI,WAAW,MAAM;CAErD,OAAO,EACL,UAAU;EAER,IADgB,sBAAsB,CAAC,CAAC,QAAQ,IAAI,SAC1C,CAAC,EAAE,UAAU,OAAO,OAAO;EACrC,OAAO,sBAAsB,CAAC,CAAC,QAAQ,OAAO,SAAS;CACzD,EACF;AACF;AAEA,SAAgB,8BAA8B,WAA4B;CACxE,2BAA2B;CAC3B,OAAO,sBAAsB,CAAC,CAAC,QAAQ,OAAO,SAAS;AACzD;AAEA,SAAgB,8BAA8B,WAAyD;CACrG,2BAA2B;CAC3B,MAAM,UAAU,sBAAsB,CAAC,CAAC,QAAQ,IAAI,SAAS;CAC7D,IAAI,CAAC,SAAS,OAAO,KAAA;CACrB,sBAAsB,CAAC,CAAC,QAAQ,OAAO,SAAS;CAChD,IACE,QAAQ,cAAc,aACtB,QAAQ,SAAS,mBAAmB,QAAQ,yBAC5C,CAAC,QAAQ,4BACT,CAAC,QAAQ,aAET;CAEF,OAAO,gBAAgB,QAAQ,QAAQ;AACzC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/schemas/apiContracts.ts
|
|
2
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
3
|
+
const apiContracts = (0, require("@agimon-ai/doompi-core/api-contracts").defineApiContract)({
|
|
4
|
+
version: 1,
|
|
5
|
+
http: [],
|
|
6
|
+
sockets: [],
|
|
7
|
+
dynamic: []
|
|
8
|
+
});
|
|
9
|
+
//#endregion
|
|
10
|
+
exports.apiContracts = apiContracts;
|
|
11
|
+
exports.default = apiContracts;
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=apiContracts.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.cjs","names":["defineApiContract"],"sources":["../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/doompi-core/api-contracts';\n\n/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */\nexport const apiContracts = defineApiContract({ version: 1, http: [], sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":";;AAGA,MAAa,gBAAA,iDAAeA,CAAAA,CAAAA,kBAAAA,CAAkB;CAAE,SAAS;CAAG,MAAM,CAAC;CAAG,SAAS,CAAC;CAAG,SAAS,CAAC;AAAE,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//#region src/schemas/apiContracts.d.ts
|
|
2
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
3
|
+
export declare const apiContracts: {
|
|
4
|
+
version: 1;
|
|
5
|
+
protocols?: Record<string, string> | undefined;
|
|
6
|
+
schemas?: Record<string, boolean | object> | undefined;
|
|
7
|
+
http: {
|
|
8
|
+
id: string;
|
|
9
|
+
scope: "global" | "session" | "workspace";
|
|
10
|
+
basePath?: string | undefined;
|
|
11
|
+
path: string;
|
|
12
|
+
method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
|
|
13
|
+
description: string;
|
|
14
|
+
availability?: string | undefined;
|
|
15
|
+
authentication: "device" | "none" | "owner";
|
|
16
|
+
parameters?: {
|
|
17
|
+
name: string;
|
|
18
|
+
in: "header" | "path" | "query";
|
|
19
|
+
required: boolean;
|
|
20
|
+
schema: boolean | object;
|
|
21
|
+
}[] | undefined;
|
|
22
|
+
body?: {
|
|
23
|
+
contentType: string;
|
|
24
|
+
contentTypes?: string[] | undefined;
|
|
25
|
+
required: boolean;
|
|
26
|
+
schema: boolean | object;
|
|
27
|
+
} | undefined;
|
|
28
|
+
responses: Record<string, {
|
|
29
|
+
description: string;
|
|
30
|
+
contentType?: string | undefined;
|
|
31
|
+
schema?: boolean | object | undefined;
|
|
32
|
+
events?: Record<string, boolean | object> | undefined;
|
|
33
|
+
}>;
|
|
34
|
+
}[];
|
|
35
|
+
sockets: {
|
|
36
|
+
id: string;
|
|
37
|
+
scope: "global" | "session" | "workspace";
|
|
38
|
+
description: string;
|
|
39
|
+
availability?: string | undefined;
|
|
40
|
+
service: string;
|
|
41
|
+
member: string;
|
|
42
|
+
direction: "client-to-server" | "server-to-client";
|
|
43
|
+
kind: "channel" | "method" | "state";
|
|
44
|
+
input: boolean | object;
|
|
45
|
+
output?: boolean | object | undefined;
|
|
46
|
+
errors?: boolean | object | undefined;
|
|
47
|
+
}[];
|
|
48
|
+
dynamic: string[];
|
|
49
|
+
gaps?: string[] | undefined;
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { apiContracts as default };
|
|
53
|
+
//# sourceMappingURL=apiContracts.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.d.cts","names":[],"sources":["../../src/schemas/apiContracts.ts"],"mappings":";;qBAGa"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//#region src/schemas/apiContracts.d.ts
|
|
2
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
3
|
+
export declare const apiContracts: {
|
|
4
|
+
version: 1;
|
|
5
|
+
protocols?: Record<string, string> | undefined;
|
|
6
|
+
schemas?: Record<string, boolean | object> | undefined;
|
|
7
|
+
http: {
|
|
8
|
+
id: string;
|
|
9
|
+
scope: "global" | "session" | "workspace";
|
|
10
|
+
basePath?: string | undefined;
|
|
11
|
+
path: string;
|
|
12
|
+
method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
|
|
13
|
+
description: string;
|
|
14
|
+
availability?: string | undefined;
|
|
15
|
+
authentication: "device" | "none" | "owner";
|
|
16
|
+
parameters?: {
|
|
17
|
+
name: string;
|
|
18
|
+
in: "header" | "path" | "query";
|
|
19
|
+
required: boolean;
|
|
20
|
+
schema: boolean | object;
|
|
21
|
+
}[] | undefined;
|
|
22
|
+
body?: {
|
|
23
|
+
contentType: string;
|
|
24
|
+
contentTypes?: string[] | undefined;
|
|
25
|
+
required: boolean;
|
|
26
|
+
schema: boolean | object;
|
|
27
|
+
} | undefined;
|
|
28
|
+
responses: Record<string, {
|
|
29
|
+
description: string;
|
|
30
|
+
contentType?: string | undefined;
|
|
31
|
+
schema?: boolean | object | undefined;
|
|
32
|
+
events?: Record<string, boolean | object> | undefined;
|
|
33
|
+
}>;
|
|
34
|
+
}[];
|
|
35
|
+
sockets: {
|
|
36
|
+
id: string;
|
|
37
|
+
scope: "global" | "session" | "workspace";
|
|
38
|
+
description: string;
|
|
39
|
+
availability?: string | undefined;
|
|
40
|
+
service: string;
|
|
41
|
+
member: string;
|
|
42
|
+
direction: "client-to-server" | "server-to-client";
|
|
43
|
+
kind: "channel" | "method" | "state";
|
|
44
|
+
input: boolean | object;
|
|
45
|
+
output?: boolean | object | undefined;
|
|
46
|
+
errors?: boolean | object | undefined;
|
|
47
|
+
}[];
|
|
48
|
+
dynamic: string[];
|
|
49
|
+
gaps?: string[] | undefined;
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { apiContracts as default };
|
|
53
|
+
//# sourceMappingURL=apiContracts.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../../src/schemas/apiContracts.ts"],"mappings":";;qBAGa"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineApiContract } from "@agimon-ai/doompi-core/api-contracts";
|
|
2
|
+
//#region src/schemas/apiContracts.ts
|
|
3
|
+
/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
|
|
4
|
+
const apiContracts = defineApiContract({
|
|
5
|
+
version: 1,
|
|
6
|
+
http: [],
|
|
7
|
+
sockets: [],
|
|
8
|
+
dynamic: []
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { apiContracts, apiContracts as default };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=apiContracts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/doompi-core/api-contracts';\n\n/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */\nexport const apiContracts = defineApiContract({ version: 1, http: [], sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":";;;AAGA,MAAa,eAAe,kBAAkB;CAAE,SAAS;CAAG,MAAM,CAAC;CAAG,SAAS,CAAC;CAAG,SAAS,CAAC;AAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MinorModeArguments, MinorModeDescriptor, MinorModeOwnerActionResult, MinorModeSessionKind, MinorModeState } from "../mode.cjs";
|
|
2
|
+
import { DoomHeadlessExecutionContext } from "@agimon-ai/doompi-core/headless";
|
|
3
|
+
//#region src/schemas/headless.d.ts
|
|
4
|
+
export interface DoomHeadlessMinorMode {
|
|
5
|
+
descriptor: MinorModeDescriptor;
|
|
6
|
+
initialState: MinorModeState;
|
|
7
|
+
handleAction(actionId: string, args: MinorModeArguments, execution: {
|
|
8
|
+
context: DoomHeadlessExecutionContext;
|
|
9
|
+
operationId: string;
|
|
10
|
+
sessionKind: MinorModeSessionKind;
|
|
11
|
+
signal: AbortSignal;
|
|
12
|
+
}): MinorModeOwnerActionResult | void | Promise<MinorModeOwnerActionResult | void>;
|
|
13
|
+
onError?(error: unknown): void;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//# sourceMappingURL=headless.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.d.cts","names":[],"sources":["../../src/schemas/headless.ts"],"mappings":";;;iBASiB;EACf,YAAY;EACZ,cAAc;EACd,aACE,kBACA,MAAM,oBACN;IACE,SAAS;IACT;IACA,aAAa;IACb,QAAQ;MAET,oCAAoC,QAAQ;EAC/C,SAAS"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MinorModeArguments, MinorModeDescriptor, MinorModeOwnerActionResult, MinorModeSessionKind, MinorModeState } from "../mode.mjs";
|
|
2
|
+
import { DoomHeadlessExecutionContext } from "@agimon-ai/doompi-core/headless";
|
|
3
|
+
//#region src/schemas/headless.d.ts
|
|
4
|
+
export interface DoomHeadlessMinorMode {
|
|
5
|
+
descriptor: MinorModeDescriptor;
|
|
6
|
+
initialState: MinorModeState;
|
|
7
|
+
handleAction(actionId: string, args: MinorModeArguments, execution: {
|
|
8
|
+
context: DoomHeadlessExecutionContext;
|
|
9
|
+
operationId: string;
|
|
10
|
+
sessionKind: MinorModeSessionKind;
|
|
11
|
+
signal: AbortSignal;
|
|
12
|
+
}): MinorModeOwnerActionResult | void | Promise<MinorModeOwnerActionResult | void>;
|
|
13
|
+
onError?(error: unknown): void;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//# sourceMappingURL=headless.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.d.mts","names":[],"sources":["../../src/schemas/headless.ts"],"mappings":";;;iBASiB;EACf,YAAY;EACZ,cAAc;EACd,aACE,kBACA,MAAM,oBACN;IACE,SAAS;IACT;IACA,aAAa;IACb,QAAQ;MAET,oCAAoC,QAAQ;EAC/C,SAAS"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/services/client/index.ts
|
|
2
|
+
function createMinorModeCatalogClient(catalog) {
|
|
3
|
+
return {
|
|
4
|
+
getSnapshot: () => catalog.getSnapshot(),
|
|
5
|
+
list: () => catalog.list(),
|
|
6
|
+
subscribe: (listener) => catalog.subscribe(listener),
|
|
7
|
+
invoke: (mode, actionId, argumentsValue = {}, options = {}) => catalog.invoke({
|
|
8
|
+
operationId: `minor-mode:${crypto.randomUUID()}`,
|
|
9
|
+
mode: structuredClone(mode),
|
|
10
|
+
actionId,
|
|
11
|
+
arguments: structuredClone(argumentsValue)
|
|
12
|
+
}, "doom/minor-mode-client", options.signal)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
exports.createMinorModeCatalogClient = createMinorModeCatalogClient;
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/services/client/index.ts"],"sourcesContent":["import type {\n MinorModeActionResponse,\n MinorModeArguments,\n MinorModeCatalogService,\n MinorModeCatalogSnapshot,\n MinorModeInvokeOptions,\n MinorModeRecord,\n MinorModeRegistrationRef,\n} from '../../schemas/mode';\n\n/** Read-only facade used by UI and voice surfaces over the injected service. */\nexport interface MinorModeCatalogClient {\n getSnapshot(): MinorModeCatalogSnapshot;\n list(): MinorModeRecord[];\n subscribe(listener: () => void): () => void;\n invoke(\n mode: MinorModeRegistrationRef,\n actionId: string,\n argumentsValue?: MinorModeArguments,\n options?: MinorModeInvokeOptions,\n ): Promise<MinorModeActionResponse>;\n}\n\nexport function createMinorModeCatalogClient(catalog: MinorModeCatalogService): MinorModeCatalogClient {\n return {\n getSnapshot: () => catalog.getSnapshot(),\n list: () => catalog.list(),\n subscribe: (listener) => catalog.subscribe(listener),\n invoke: (mode, actionId, argumentsValue = {}, options = {}) =>\n catalog.invoke(\n {\n operationId: `minor-mode:${crypto.randomUUID()}`,\n mode: structuredClone(mode),\n actionId,\n arguments: structuredClone(argumentsValue),\n },\n 'doom/minor-mode-client',\n options.signal,\n ),\n };\n}\n"],"mappings":";AAuBA,SAAgB,6BAA6B,SAA0D;CACrG,OAAO;EACL,mBAAmB,QAAQ,YAAY;EACvC,YAAY,QAAQ,KAAK;EACzB,YAAY,aAAa,QAAQ,UAAU,QAAQ;EACnD,SAAS,MAAM,UAAU,iBAAiB,CAAC,GAAG,UAAU,CAAC,MACvD,QAAQ,OACN;GACE,aAAa,cAAc,OAAO,WAAW;GAC7C,MAAM,gBAAgB,IAAI;GAC1B;GACA,WAAW,gBAAgB,cAAc;EAC3C,GACA,0BACA,QAAQ,MACV;CACJ;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MinorModeActionResponse, MinorModeArguments, MinorModeCatalogService, MinorModeCatalogSnapshot, MinorModeInvokeOptions, MinorModeRecord, MinorModeRegistrationRef } from "../../mode.cjs";
|
|
2
|
+
//#region src/services/client/index.d.ts
|
|
3
|
+
/** Read-only facade used by UI and voice surfaces over the injected service. */
|
|
4
|
+
export interface MinorModeCatalogClient {
|
|
5
|
+
getSnapshot(): MinorModeCatalogSnapshot;
|
|
6
|
+
list(): MinorModeRecord[];
|
|
7
|
+
subscribe(listener: () => void): () => void;
|
|
8
|
+
invoke(mode: MinorModeRegistrationRef, actionId: string, argumentsValue?: MinorModeArguments, options?: MinorModeInvokeOptions): Promise<MinorModeActionResponse>;
|
|
9
|
+
}
|
|
10
|
+
export declare function createMinorModeCatalogClient(catalog: MinorModeCatalogService): MinorModeCatalogClient;
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/services/client/index.ts"],"mappings":";;;iBAWiB;EACf,eAAe;EACf,QAAQ;EACR,UAAU;EACV,OACE,MAAM,0BACN,kBACA,iBAAiB,oBACjB,UAAU,yBACT,QAAQ;;wBAGG,6BAA6B,SAAS,0BAA0B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MinorModeActionResponse, MinorModeArguments, MinorModeCatalogService, MinorModeCatalogSnapshot, MinorModeInvokeOptions, MinorModeRecord, MinorModeRegistrationRef } from "../../mode.mjs";
|
|
2
|
+
//#region src/services/client/index.d.ts
|
|
3
|
+
/** Read-only facade used by UI and voice surfaces over the injected service. */
|
|
4
|
+
export interface MinorModeCatalogClient {
|
|
5
|
+
getSnapshot(): MinorModeCatalogSnapshot;
|
|
6
|
+
list(): MinorModeRecord[];
|
|
7
|
+
subscribe(listener: () => void): () => void;
|
|
8
|
+
invoke(mode: MinorModeRegistrationRef, actionId: string, argumentsValue?: MinorModeArguments, options?: MinorModeInvokeOptions): Promise<MinorModeActionResponse>;
|
|
9
|
+
}
|
|
10
|
+
export declare function createMinorModeCatalogClient(catalog: MinorModeCatalogService): MinorModeCatalogClient;
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/client/index.ts"],"mappings":";;;iBAWiB;EACf,eAAe;EACf,QAAQ;EACR,UAAU;EACV,OACE,MAAM,0BACN,kBACA,iBAAiB,oBACjB,UAAU,yBACT,QAAQ;;wBAGG,6BAA6B,SAAS,0BAA0B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/services/client/index.ts
|
|
2
|
+
function createMinorModeCatalogClient(catalog) {
|
|
3
|
+
return {
|
|
4
|
+
getSnapshot: () => catalog.getSnapshot(),
|
|
5
|
+
list: () => catalog.list(),
|
|
6
|
+
subscribe: (listener) => catalog.subscribe(listener),
|
|
7
|
+
invoke: (mode, actionId, argumentsValue = {}, options = {}) => catalog.invoke({
|
|
8
|
+
operationId: `minor-mode:${crypto.randomUUID()}`,
|
|
9
|
+
mode: structuredClone(mode),
|
|
10
|
+
actionId,
|
|
11
|
+
arguments: structuredClone(argumentsValue)
|
|
12
|
+
}, "doom/minor-mode-client", options.signal)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { createMinorModeCatalogClient };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/client/index.ts"],"sourcesContent":["import type {\n MinorModeActionResponse,\n MinorModeArguments,\n MinorModeCatalogService,\n MinorModeCatalogSnapshot,\n MinorModeInvokeOptions,\n MinorModeRecord,\n MinorModeRegistrationRef,\n} from '../../schemas/mode';\n\n/** Read-only facade used by UI and voice surfaces over the injected service. */\nexport interface MinorModeCatalogClient {\n getSnapshot(): MinorModeCatalogSnapshot;\n list(): MinorModeRecord[];\n subscribe(listener: () => void): () => void;\n invoke(\n mode: MinorModeRegistrationRef,\n actionId: string,\n argumentsValue?: MinorModeArguments,\n options?: MinorModeInvokeOptions,\n ): Promise<MinorModeActionResponse>;\n}\n\nexport function createMinorModeCatalogClient(catalog: MinorModeCatalogService): MinorModeCatalogClient {\n return {\n getSnapshot: () => catalog.getSnapshot(),\n list: () => catalog.list(),\n subscribe: (listener) => catalog.subscribe(listener),\n invoke: (mode, actionId, argumentsValue = {}, options = {}) =>\n catalog.invoke(\n {\n operationId: `minor-mode:${crypto.randomUUID()}`,\n mode: structuredClone(mode),\n actionId,\n arguments: structuredClone(argumentsValue),\n },\n 'doom/minor-mode-client',\n options.signal,\n ),\n };\n}\n"],"mappings":";AAuBA,SAAgB,6BAA6B,SAA0D;CACrG,OAAO;EACL,mBAAmB,QAAQ,YAAY;EACvC,YAAY,QAAQ,KAAK;EACzB,YAAY,aAAa,QAAQ,UAAU,QAAQ;EACnD,SAAS,MAAM,UAAU,iBAAiB,CAAC,GAAG,UAAU,CAAC,MACvD,QAAQ,OACN;GACE,aAAa,cAAc,OAAO,WAAW;GAC7C,MAAM,gBAAgB,IAAI;GAC1B;GACA,WAAW,gBAAgB,cAAc;EAC3C,GACA,0BACA,QAAQ,MACV;CACJ;AACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const require_command = require("../../constants/command.cjs");
|
|
2
|
+
const require_command$1 = require("../../command.cjs");
|
|
3
|
+
//#region src/services/headlessCommand/index.ts
|
|
4
|
+
function headlessMinorModeCommand(catalog) {
|
|
5
|
+
return {
|
|
6
|
+
name: require_command$1.MINOR_MODE_COMMAND,
|
|
7
|
+
description: require_command.MINOR_MODE_COMMAND_DESCRIPTION,
|
|
8
|
+
async execute(args, execution) {
|
|
9
|
+
const executionClient = execution.client;
|
|
10
|
+
await require_command$1.executeMinorModeCommand(args, {
|
|
11
|
+
catalog,
|
|
12
|
+
kind: "headless",
|
|
13
|
+
ui: {
|
|
14
|
+
async select(title, options) {
|
|
15
|
+
const selected = await executionClient.request({
|
|
16
|
+
kind: "select",
|
|
17
|
+
title,
|
|
18
|
+
options: options.map((label) => ({
|
|
19
|
+
label,
|
|
20
|
+
value: label
|
|
21
|
+
}))
|
|
22
|
+
});
|
|
23
|
+
return typeof selected === "string" ? selected : void 0;
|
|
24
|
+
},
|
|
25
|
+
async input(title, message) {
|
|
26
|
+
const entered = await executionClient.request({
|
|
27
|
+
kind: "input",
|
|
28
|
+
title,
|
|
29
|
+
message
|
|
30
|
+
});
|
|
31
|
+
return typeof entered === "string" ? entered : void 0;
|
|
32
|
+
},
|
|
33
|
+
async confirm(title, message) {
|
|
34
|
+
const confirmed = await executionClient.request({
|
|
35
|
+
kind: "confirm",
|
|
36
|
+
title,
|
|
37
|
+
message
|
|
38
|
+
});
|
|
39
|
+
return typeof confirmed === "boolean" ? confirmed : void 0;
|
|
40
|
+
},
|
|
41
|
+
notify: (message, level) => executionClient.notify({
|
|
42
|
+
body: message,
|
|
43
|
+
level
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
exports.headlessMinorModeCommand = headlessMinorModeCommand;
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["MINOR_MODE_COMMAND","MINOR_MODE_COMMAND_DESCRIPTION","executeMinorModeCommand"],"sources":["../../../src/services/headlessCommand/index.ts"],"sourcesContent":["import type { DoomHeadlessCommand } from '@agimon-ai/doompi-core/headless';\n\nimport type { MinorModeCatalogService } from '../../schemas/mode';\nimport { executeMinorModeCommand, MINOR_MODE_COMMAND, MINOR_MODE_COMMAND_DESCRIPTION } from '../command';\nexport function headlessMinorModeCommand(catalog: MinorModeCatalogService): DoomHeadlessCommand {\n return {\n name: MINOR_MODE_COMMAND,\n description: MINOR_MODE_COMMAND_DESCRIPTION,\n async execute(args, execution) {\n const executionClient = execution.client;\n await executeMinorModeCommand(args, {\n catalog,\n kind: 'headless',\n ui: {\n async select(title, options) {\n const selected = await executionClient.request({\n kind: 'select',\n title,\n options: options.map((label) => ({ label, value: label })),\n });\n return typeof selected === 'string' ? selected : undefined;\n },\n async input(title, message) {\n const entered = await executionClient.request({ kind: 'input', title, message });\n return typeof entered === 'string' ? entered : undefined;\n },\n async confirm(title, message) {\n const confirmed = await executionClient.request({ kind: 'confirm', title, message });\n return typeof confirmed === 'boolean' ? confirmed : undefined;\n },\n notify: (message, level) => executionClient.notify({ body: message, level }),\n },\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,yBAAyB,SAAuD;CAC9F,OAAO;EACL,MAAMA,kBAAAA;EACN,aAAaC,gBAAAA;EACb,MAAM,QAAQ,MAAM,WAAW;GAC7B,MAAM,kBAAkB,UAAU;GAClC,MAAMC,kBAAAA,wBAAwB,MAAM;IAClC;IACA,MAAM;IACN,IAAI;KACF,MAAM,OAAO,OAAO,SAAS;MAC3B,MAAM,WAAW,MAAM,gBAAgB,QAAQ;OAC7C,MAAM;OACN;OACA,SAAS,QAAQ,KAAK,WAAW;QAAE;QAAO,OAAO;OAAM,EAAE;MAC3D,CAAC;MACD,OAAO,OAAO,aAAa,WAAW,WAAW,KAAA;KACnD;KACA,MAAM,MAAM,OAAO,SAAS;MAC1B,MAAM,UAAU,MAAM,gBAAgB,QAAQ;OAAE,MAAM;OAAS;OAAO;MAAQ,CAAC;MAC/E,OAAO,OAAO,YAAY,WAAW,UAAU,KAAA;KACjD;KACA,MAAM,QAAQ,OAAO,SAAS;MAC5B,MAAM,YAAY,MAAM,gBAAgB,QAAQ;OAAE,MAAM;OAAW;OAAO;MAAQ,CAAC;MACnF,OAAO,OAAO,cAAc,YAAY,YAAY,KAAA;KACtD;KACA,SAAS,SAAS,UAAU,gBAAgB,OAAO;MAAE,MAAM;MAAS;KAAM,CAAC;IAC7E;GACF,CAAC;EACH;CACF;AACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MinorModeCatalogService } from "../../mode.cjs";
|
|
2
|
+
import { DoomHeadlessCommand } from "@agimon-ai/doompi-core/headless";
|
|
3
|
+
//#region src/services/headlessCommand/index.d.ts
|
|
4
|
+
export declare function headlessMinorModeCommand(catalog: MinorModeCatalogService): DoomHeadlessCommand;
|
|
5
|
+
//#endregion
|
|
6
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/services/headlessCommand/index.ts"],"mappings":";;;wBAIgB,yBAAyB,SAAS,0BAA0B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MinorModeCatalogService } from "../../mode.mjs";
|
|
2
|
+
import { DoomHeadlessCommand } from "@agimon-ai/doompi-core/headless";
|
|
3
|
+
//#region src/services/headlessCommand/index.d.ts
|
|
4
|
+
export declare function headlessMinorModeCommand(catalog: MinorModeCatalogService): DoomHeadlessCommand;
|
|
5
|
+
//#endregion
|
|
6
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/headlessCommand/index.ts"],"mappings":";;;wBAIgB,yBAAyB,SAAS,0BAA0B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { MINOR_MODE_COMMAND_DESCRIPTION } from "../../constants/command.mjs";
|
|
2
|
+
import { MINOR_MODE_COMMAND, executeMinorModeCommand } from "../../command.mjs";
|
|
3
|
+
//#region src/services/headlessCommand/index.ts
|
|
4
|
+
function headlessMinorModeCommand(catalog) {
|
|
5
|
+
return {
|
|
6
|
+
name: MINOR_MODE_COMMAND,
|
|
7
|
+
description: MINOR_MODE_COMMAND_DESCRIPTION,
|
|
8
|
+
async execute(args, execution) {
|
|
9
|
+
const executionClient = execution.client;
|
|
10
|
+
await executeMinorModeCommand(args, {
|
|
11
|
+
catalog,
|
|
12
|
+
kind: "headless",
|
|
13
|
+
ui: {
|
|
14
|
+
async select(title, options) {
|
|
15
|
+
const selected = await executionClient.request({
|
|
16
|
+
kind: "select",
|
|
17
|
+
title,
|
|
18
|
+
options: options.map((label) => ({
|
|
19
|
+
label,
|
|
20
|
+
value: label
|
|
21
|
+
}))
|
|
22
|
+
});
|
|
23
|
+
return typeof selected === "string" ? selected : void 0;
|
|
24
|
+
},
|
|
25
|
+
async input(title, message) {
|
|
26
|
+
const entered = await executionClient.request({
|
|
27
|
+
kind: "input",
|
|
28
|
+
title,
|
|
29
|
+
message
|
|
30
|
+
});
|
|
31
|
+
return typeof entered === "string" ? entered : void 0;
|
|
32
|
+
},
|
|
33
|
+
async confirm(title, message) {
|
|
34
|
+
const confirmed = await executionClient.request({
|
|
35
|
+
kind: "confirm",
|
|
36
|
+
title,
|
|
37
|
+
message
|
|
38
|
+
});
|
|
39
|
+
return typeof confirmed === "boolean" ? confirmed : void 0;
|
|
40
|
+
},
|
|
41
|
+
notify: (message, level) => executionClient.notify({
|
|
42
|
+
body: message,
|
|
43
|
+
level
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { headlessMinorModeCommand };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/headlessCommand/index.ts"],"sourcesContent":["import type { DoomHeadlessCommand } from '@agimon-ai/doompi-core/headless';\n\nimport type { MinorModeCatalogService } from '../../schemas/mode';\nimport { executeMinorModeCommand, MINOR_MODE_COMMAND, MINOR_MODE_COMMAND_DESCRIPTION } from '../command';\nexport function headlessMinorModeCommand(catalog: MinorModeCatalogService): DoomHeadlessCommand {\n return {\n name: MINOR_MODE_COMMAND,\n description: MINOR_MODE_COMMAND_DESCRIPTION,\n async execute(args, execution) {\n const executionClient = execution.client;\n await executeMinorModeCommand(args, {\n catalog,\n kind: 'headless',\n ui: {\n async select(title, options) {\n const selected = await executionClient.request({\n kind: 'select',\n title,\n options: options.map((label) => ({ label, value: label })),\n });\n return typeof selected === 'string' ? selected : undefined;\n },\n async input(title, message) {\n const entered = await executionClient.request({ kind: 'input', title, message });\n return typeof entered === 'string' ? entered : undefined;\n },\n async confirm(title, message) {\n const confirmed = await executionClient.request({ kind: 'confirm', title, message });\n return typeof confirmed === 'boolean' ? confirmed : undefined;\n },\n notify: (message, level) => executionClient.notify({ body: message, level }),\n },\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,yBAAyB,SAAuD;CAC9F,OAAO;EACL,MAAM;EACN,aAAa;EACb,MAAM,QAAQ,MAAM,WAAW;GAC7B,MAAM,kBAAkB,UAAU;GAClC,MAAM,wBAAwB,MAAM;IAClC;IACA,MAAM;IACN,IAAI;KACF,MAAM,OAAO,OAAO,SAAS;MAC3B,MAAM,WAAW,MAAM,gBAAgB,QAAQ;OAC7C,MAAM;OACN;OACA,SAAS,QAAQ,KAAK,WAAW;QAAE;QAAO,OAAO;OAAM,EAAE;MAC3D,CAAC;MACD,OAAO,OAAO,aAAa,WAAW,WAAW,KAAA;KACnD;KACA,MAAM,MAAM,OAAO,SAAS;MAC1B,MAAM,UAAU,MAAM,gBAAgB,QAAQ;OAAE,MAAM;OAAS;OAAO;MAAQ,CAAC;MAC/E,OAAO,OAAO,YAAY,WAAW,UAAU,KAAA;KACjD;KACA,MAAM,QAAQ,OAAO,SAAS;MAC5B,MAAM,YAAY,MAAM,gBAAgB,QAAQ;OAAE,MAAM;OAAW;OAAO;MAAQ,CAAC;MACnF,OAAO,OAAO,cAAc,YAAY,YAAY,KAAA;KACtD;KACA,SAAS,SAAS,UAAU,gBAAgB,OAAO;MAAE,MAAM;MAAS;KAAM,CAAC;IAC7E;GACF,CAAC;EACH;CACF;AACF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const require_mode = require("../../mode.cjs");
|
|
2
|
+
const require_owner = require("../../owner.cjs");
|
|
3
|
+
//#region src/services/piRegistration/index.ts
|
|
4
|
+
/** Registers static or live owners for the injected catalog's lifetime. */
|
|
5
|
+
function piMinorModes(modes) {
|
|
6
|
+
return (context) => {
|
|
7
|
+
if (!modes) return;
|
|
8
|
+
context.inject([require_mode.DOOM_MINOR_MODE_CATALOG_SERVICE], (child) => {
|
|
9
|
+
const controller = new AbortController();
|
|
10
|
+
const signal = controller.signal;
|
|
11
|
+
child.effect(() => () => controller.abort());
|
|
12
|
+
const catalog = require_mode.requireMinorModeCatalog(child);
|
|
13
|
+
const mounted = /* @__PURE__ */ new Map();
|
|
14
|
+
let disposed = false;
|
|
15
|
+
let reconciling = false;
|
|
16
|
+
let pending = false;
|
|
17
|
+
let subscribing = true;
|
|
18
|
+
const reconcile = () => {
|
|
19
|
+
pending = true;
|
|
20
|
+
if (disposed || signal.aborted || subscribing || reconciling) return;
|
|
21
|
+
reconciling = true;
|
|
22
|
+
try {
|
|
23
|
+
do {
|
|
24
|
+
pending = false;
|
|
25
|
+
const snapshot = "snapshot" in modes ? modes.snapshot() : modes;
|
|
26
|
+
const next = /* @__PURE__ */ new Map();
|
|
27
|
+
for (const declaration of snapshot) {
|
|
28
|
+
const definition = "definition" in declaration ? declaration.definition : declaration;
|
|
29
|
+
const key = JSON.stringify([definition.descriptor.source, definition.descriptor.id]);
|
|
30
|
+
if (next.has(key)) throw new Error(`Duplicate live minor mode: ${definition.descriptor.source}/${definition.descriptor.id}`);
|
|
31
|
+
next.set(key, declaration);
|
|
32
|
+
}
|
|
33
|
+
for (const [key, entry] of mounted) {
|
|
34
|
+
if (next.get(key) === entry.declaration) continue;
|
|
35
|
+
mounted.delete(key);
|
|
36
|
+
entry.release();
|
|
37
|
+
}
|
|
38
|
+
for (const [key, declaration] of next) {
|
|
39
|
+
if (mounted.has(key)) continue;
|
|
40
|
+
const owner = "definition" in declaration ? declaration : void 0;
|
|
41
|
+
const handle = require_owner.registerMinorModeOwner(catalog, owner ? owner.definition : declaration);
|
|
42
|
+
mounted.set(key, {
|
|
43
|
+
declaration,
|
|
44
|
+
release() {
|
|
45
|
+
try {
|
|
46
|
+
owner?.detach();
|
|
47
|
+
} finally {
|
|
48
|
+
handle.dispose();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
owner?.attach(handle);
|
|
53
|
+
}
|
|
54
|
+
} while (pending && !disposed && !signal.aborted);
|
|
55
|
+
} finally {
|
|
56
|
+
reconciling = false;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
child.effect(() => () => {
|
|
60
|
+
disposed = true;
|
|
61
|
+
const entries = [...mounted.values()];
|
|
62
|
+
mounted.clear();
|
|
63
|
+
const errors = [];
|
|
64
|
+
for (const entry of entries) try {
|
|
65
|
+
entry.release();
|
|
66
|
+
} catch (error) {
|
|
67
|
+
errors.push(error);
|
|
68
|
+
}
|
|
69
|
+
if (errors.length) throw new AggregateError(errors, "Minor mode cleanup failed.");
|
|
70
|
+
});
|
|
71
|
+
if ("subscribe" in modes) {
|
|
72
|
+
const unsubscribe = modes.subscribe(reconcile);
|
|
73
|
+
child.effect(() => () => {
|
|
74
|
+
disposed = true;
|
|
75
|
+
unsubscribe();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
subscribing = false;
|
|
79
|
+
reconcile();
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
exports.piMinorModes = piMinorModes;
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["DOOM_MINOR_MODE_CATALOG_SERVICE","requireMinorModeCatalog","registerMinorModeOwner"],"sources":["../../../src/services/piRegistration/index.ts"],"sourcesContent":["import type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport {\n DOOM_MINOR_MODE_CATALOG_SERVICE,\n requireMinorModeCatalog,\n type MinorModeOwnerActionContext,\n type MinorModeOwnerDefinition,\n type MinorModeOwnerHandle,\n} from '../../schemas/mode';\nimport type { MinorModeOwner } from '../modeDefinition';\nimport { registerMinorModeOwner } from '../owner';\n\ntype ModeRegistrar = (definition: MinorModeOwnerDefinition<ExtensionContext>) => MinorModeOwnerHandle;\nexport type PiMinorModeContribution =\n | MinorModeOwner<MinorModeOwnerActionContext<ExtensionContext>>\n | Parameters<ModeRegistrar>[0];\nexport interface PiMinorModeCollection {\n snapshot(): readonly PiMinorModeContribution[];\n subscribe(listener: () => void): () => void;\n}\n\n/** Registers static or live owners for the injected catalog's lifetime. */\nexport function piMinorModes(\n modes: readonly PiMinorModeContribution[] | PiMinorModeCollection | undefined,\n): (context: Context) => void {\n return (context) => {\n if (!modes) return;\n context.inject([DOOM_MINOR_MODE_CATALOG_SERVICE], (child) => {\n const controller = new AbortController();\n const signal = controller.signal;\n child.effect(() => () => controller.abort());\n const catalog = requireMinorModeCatalog(child);\n const mounted = new Map<string, { declaration: PiMinorModeContribution; release(): void }>();\n let disposed = false;\n let reconciling = false;\n let pending = false;\n let subscribing = true;\n const reconcile = (): void => {\n pending = true;\n if (disposed || signal.aborted || subscribing || reconciling) return;\n reconciling = true;\n try {\n do {\n pending = false;\n const snapshot = 'snapshot' in modes ? modes.snapshot() : modes;\n const next = new Map<string, PiMinorModeContribution>();\n for (const declaration of snapshot) {\n const definition = 'definition' in declaration ? declaration.definition : declaration;\n const key = JSON.stringify([definition.descriptor.source, definition.descriptor.id]);\n if (next.has(key))\n throw new Error(\n `Duplicate live minor mode: ${definition.descriptor.source}/${definition.descriptor.id}`,\n );\n next.set(key, declaration);\n }\n for (const [key, entry] of mounted) {\n if (next.get(key) === entry.declaration) continue;\n mounted.delete(key);\n entry.release();\n }\n for (const [key, declaration] of next) {\n if (mounted.has(key)) continue;\n const owner = 'definition' in declaration ? declaration : undefined;\n const handle = registerMinorModeOwner(\n catalog,\n owner ? owner.definition : (declaration as Parameters<ModeRegistrar>[0]),\n );\n mounted.set(key, {\n declaration,\n release() {\n try {\n owner?.detach();\n } finally {\n handle.dispose();\n }\n },\n });\n owner?.attach(handle);\n }\n } while (pending && !disposed && !signal.aborted);\n } finally {\n reconciling = false;\n }\n };\n child.effect(() => () => {\n disposed = true;\n const entries = [...mounted.values()];\n mounted.clear();\n const errors: unknown[] = [];\n for (const entry of entries) {\n try {\n entry.release();\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length) throw new AggregateError(errors, 'Minor mode cleanup failed.');\n });\n if ('subscribe' in modes) {\n const unsubscribe = modes.subscribe(reconcile);\n child.effect(() => () => {\n disposed = true;\n unsubscribe();\n });\n }\n subscribing = false;\n reconcile();\n });\n };\n}\n"],"mappings":";;;;AAuBA,SAAgB,aACd,OAC4B;CAC5B,QAAQ,YAAY;EAClB,IAAI,CAAC,OAAO;EACZ,QAAQ,OAAO,CAACA,aAAAA,+BAA+B,IAAI,UAAU;GAC3D,MAAM,aAAa,IAAI,gBAAgB;GACvC,MAAM,SAAS,WAAW;GAC1B,MAAM,mBAAmB,WAAW,MAAM,CAAC;GAC3C,MAAM,UAAUC,aAAAA,wBAAwB,KAAK;GAC7C,MAAM,0BAAU,IAAI,IAAuE;GAC3F,IAAI,WAAW;GACf,IAAI,cAAc;GAClB,IAAI,UAAU;GACd,IAAI,cAAc;GAClB,MAAM,kBAAwB;IAC5B,UAAU;IACV,IAAI,YAAY,OAAO,WAAW,eAAe,aAAa;IAC9D,cAAc;IACd,IAAI;KACF,GAAG;MACD,UAAU;MACV,MAAM,WAAW,cAAc,QAAQ,MAAM,SAAS,IAAI;MAC1D,MAAM,uBAAO,IAAI,IAAqC;MACtD,KAAK,MAAM,eAAe,UAAU;OAClC,MAAM,aAAa,gBAAgB,cAAc,YAAY,aAAa;OAC1E,MAAM,MAAM,KAAK,UAAU,CAAC,WAAW,WAAW,QAAQ,WAAW,WAAW,EAAE,CAAC;OACnF,IAAI,KAAK,IAAI,GAAG,GACd,MAAM,IAAI,MACR,8BAA8B,WAAW,WAAW,OAAO,GAAG,WAAW,WAAW,IACtF;OACF,KAAK,IAAI,KAAK,WAAW;MAC3B;MACA,KAAK,MAAM,CAAC,KAAK,UAAU,SAAS;OAClC,IAAI,KAAK,IAAI,GAAG,MAAM,MAAM,aAAa;OACzC,QAAQ,OAAO,GAAG;OAClB,MAAM,QAAQ;MAChB;MACA,KAAK,MAAM,CAAC,KAAK,gBAAgB,MAAM;OACrC,IAAI,QAAQ,IAAI,GAAG,GAAG;OACtB,MAAM,QAAQ,gBAAgB,cAAc,cAAc,KAAA;OAC1D,MAAM,SAASC,cAAAA,uBACb,SACA,QAAQ,MAAM,aAAc,WAC9B;OACA,QAAQ,IAAI,KAAK;QACf;QACA,UAAU;SACR,IAAI;UACF,OAAO,OAAO;SAChB,UAAU;UACR,OAAO,QAAQ;SACjB;QACF;OACF,CAAC;OACD,OAAO,OAAO,MAAM;MACtB;KACF,SAAS,WAAW,CAAC,YAAY,CAAC,OAAO;IAC3C,UAAU;KACR,cAAc;IAChB;GACF;GACA,MAAM,mBAAmB;IACvB,WAAW;IACX,MAAM,UAAU,CAAC,GAAG,QAAQ,OAAO,CAAC;IACpC,QAAQ,MAAM;IACd,MAAM,SAAoB,CAAC;IAC3B,KAAK,MAAM,SAAS,SAClB,IAAI;KACF,MAAM,QAAQ;IAChB,SAAS,OAAO;KACd,OAAO,KAAK,KAAK;IACnB;IAEF,IAAI,OAAO,QAAQ,MAAM,IAAI,eAAe,QAAQ,4BAA4B;GAClF,CAAC;GACD,IAAI,eAAe,OAAO;IACxB,MAAM,cAAc,MAAM,UAAU,SAAS;IAC7C,MAAM,mBAAmB;KACvB,WAAW;KACX,YAAY;IACd,CAAC;GACH;GACA,cAAc;GACd,UAAU;EACZ,CAAC;CACH;AACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MinorModeOwnerActionContext, MinorModeOwnerDefinition, MinorModeOwnerHandle } from "../../mode.cjs";
|
|
2
|
+
import { MinorModeOwner } from "../../mode-definition.cjs";
|
|
3
|
+
import { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
4
|
+
import { Context } from "@deepseek-ai/cordis";
|
|
5
|
+
//#region src/services/piRegistration/index.d.ts
|
|
6
|
+
type ModeRegistrar = (definition: MinorModeOwnerDefinition<ExtensionContext>) => MinorModeOwnerHandle;
|
|
7
|
+
export type PiMinorModeContribution = MinorModeOwner<MinorModeOwnerActionContext<ExtensionContext>> | Parameters<ModeRegistrar>[0];
|
|
8
|
+
export interface PiMinorModeCollection {
|
|
9
|
+
snapshot(): readonly PiMinorModeContribution[];
|
|
10
|
+
subscribe(listener: () => void): () => void;
|
|
11
|
+
}
|
|
12
|
+
/** Registers static or live owners for the injected catalog's lifetime. */
|
|
13
|
+
export declare function piMinorModes(modes: readonly PiMinorModeContribution[] | PiMinorModeCollection | undefined): (context: Context) => void;
|
|
14
|
+
//#endregion
|
|
15
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/services/piRegistration/index.ts"],"mappings":";;;;;KAaK,iBAAiB,YAAY,yBAAyB,sBAAsB;YACrE,0BACR,eAAe,4BAA4B,qBAC3C,WAAW;iBACE;EACf,qBAAqB;EACrB,UAAU;;;wBAII,aACd,gBAAgB,4BAA4B,qCAC1C,SAAS"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { MinorModeOwnerActionContext, MinorModeOwnerDefinition, MinorModeOwnerHandle } from "../../mode.mjs";
|
|
2
|
+
import { MinorModeOwner } from "../../mode-definition.mjs";
|
|
3
|
+
import { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
4
|
+
import { Context } from "@deepseek-ai/cordis";
|
|
5
|
+
//#region src/services/piRegistration/index.d.ts
|
|
6
|
+
type ModeRegistrar = (definition: MinorModeOwnerDefinition<ExtensionContext>) => MinorModeOwnerHandle;
|
|
7
|
+
export type PiMinorModeContribution = MinorModeOwner<MinorModeOwnerActionContext<ExtensionContext>> | Parameters<ModeRegistrar>[0];
|
|
8
|
+
export interface PiMinorModeCollection {
|
|
9
|
+
snapshot(): readonly PiMinorModeContribution[];
|
|
10
|
+
subscribe(listener: () => void): () => void;
|
|
11
|
+
}
|
|
12
|
+
/** Registers static or live owners for the injected catalog's lifetime. */
|
|
13
|
+
export declare function piMinorModes(modes: readonly PiMinorModeContribution[] | PiMinorModeCollection | undefined): (context: Context) => void;
|
|
14
|
+
//#endregion
|
|
15
|
+
//# sourceMappingURL=index.d.mts.map
|