@agimon-ai/doompi-minor-mode 0.0.1-alpha.100
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/apiContracts.cjs +17 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +53 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +13 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/catalog-8apySKXB.mjs +222 -0
- package/dist/catalog-8apySKXB.mjs.map +1 -0
- package/dist/catalog-jTd7UXiI.cjs +227 -0
- package/dist/catalog-jTd7UXiI.cjs.map +1 -0
- package/dist/catalog.cjs +3 -0
- package/dist/catalog.d.mts +14 -0
- package/dist/catalog.d.mts.map +1 -0
- package/dist/catalog.mjs +2 -0
- package/dist/command-B5HZmmyU.cjs +11 -0
- package/dist/command-B5HZmmyU.cjs.map +1 -0
- package/dist/command-BvYpwiin.mjs +6 -0
- package/dist/command-BvYpwiin.mjs.map +1 -0
- package/dist/command-C4u3oOPT.mjs +128 -0
- package/dist/command-C4u3oOPT.mjs.map +1 -0
- package/dist/command-D9hQfJb_.cjs +151 -0
- package/dist/command-D9hQfJb_.cjs.map +1 -0
- package/dist/command.cjs +8 -0
- package/dist/command.d.mts +6 -0
- package/dist/command.d.mts.map +1 -0
- package/dist/command.mjs +3 -0
- package/dist/extensions/pi.cjs +181 -0
- package/dist/extensions/pi.cjs.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 +176 -0
- package/dist/extensions/pi.mjs.map +1 -0
- package/dist/extensions/server.cjs +134 -0
- package/dist/extensions/server.cjs.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 +129 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/headlessCommand-BJhocUje.mjs +53 -0
- package/dist/headlessCommand-BJhocUje.mjs.map +1 -0
- package/dist/headlessCommand-CaFFcvJA.cjs +58 -0
- package/dist/headlessCommand-CaFFcvJA.cjs.map +1 -0
- package/dist/index-COS4uLcb.d.mts +24 -0
- package/dist/index-COS4uLcb.d.mts.map +1 -0
- package/dist/index-DEjyk6tg.d.mts +8 -0
- package/dist/index-DEjyk6tg.d.mts.map +1 -0
- package/dist/index-DSKnT657.d.mts +31 -0
- package/dist/index-DSKnT657.d.mts.map +1 -0
- package/dist/index.cjs +180 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +53 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +136 -0
- package/dist/index.mjs.map +1 -0
- package/dist/minorModeCommand.cjs +5 -0
- package/dist/minorModeCommand.d.mts +2 -0
- package/dist/minorModeCommand.mjs +2 -0
- package/dist/mode-BwRkDqO4.mjs +241 -0
- package/dist/mode-BwRkDqO4.mjs.map +1 -0
- package/dist/mode-Dft08ke8.cjs +444 -0
- package/dist/mode-Dft08ke8.cjs.map +1 -0
- package/dist/mode-EZWqhrYy.d.mts +492 -0
- package/dist/mode-EZWqhrYy.d.mts.map +1 -0
- package/dist/mode.cjs +36 -0
- package/dist/mode.d.mts +2 -0
- package/dist/mode.mjs +2 -0
- package/dist/modeDefinition-BcqEwTzh.mjs +46 -0
- package/dist/modeDefinition-BcqEwTzh.mjs.map +1 -0
- package/dist/modeDefinition-BtgwqXMo.cjs +51 -0
- package/dist/modeDefinition-BtgwqXMo.cjs.map +1 -0
- package/dist/modeDefinition.cjs +3 -0
- package/dist/modeDefinition.d.mts +2 -0
- package/dist/modeDefinition.mjs +2 -0
- package/dist/owner-BbCQufLu.cjs +14 -0
- package/dist/owner-BbCQufLu.cjs.map +1 -0
- package/dist/owner-Bs55c_qE.mjs +9 -0
- package/dist/owner-Bs55c_qE.mjs.map +1 -0
- package/dist/owner.cjs +3 -0
- package/dist/owner.d.mts +2 -0
- package/dist/owner.mjs +2 -0
- package/dist/projection-Cy1LWVIe.mjs +47 -0
- package/dist/projection-Cy1LWVIe.mjs.map +1 -0
- package/dist/projection-DYOm9Kev.cjs +58 -0
- package/dist/projection-DYOm9Kev.cjs.map +1 -0
- package/dist/projection.cjs +4 -0
- package/dist/projection.d.mts +12 -0
- package/dist/projection.d.mts.map +1 -0
- package/dist/projection.mjs +2 -0
- package/dist/reloadHandoff-C-GaCf0F.cjs +71 -0
- package/dist/reloadHandoff-C-GaCf0F.cjs.map +1 -0
- package/dist/reloadHandoff-D1QsS9qd.mjs +54 -0
- package/dist/reloadHandoff-D1QsS9qd.mjs.map +1 -0
- package/dist/reloadHandoff.cjs +5 -0
- package/dist/reloadHandoff.d.mts +11 -0
- package/dist/reloadHandoff.d.mts.map +1 -0
- package/dist/reloadHandoff.mjs +2 -0
- package/dist/validation-BuQc8UrL.mjs +81 -0
- package/dist/validation-BuQc8UrL.mjs.map +1 -0
- package/dist/validation-DRV8Dtoc.cjs +104 -0
- package/dist/validation-DRV8Dtoc.cjs.map +1 -0
- package/package.json +157 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const require_command = require("./command-B5HZmmyU.cjs");
|
|
2
|
+
const require_command$1 = require("./command-D9hQfJb_.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
|
+
Object.defineProperty(exports, "headlessMinorModeCommand", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
get: function() {
|
|
54
|
+
return headlessMinorModeCommand;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=headlessCommand-CaFFcvJA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headlessCommand-CaFFcvJA.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,24 @@
|
|
|
1
|
+
import { D as MinorModeCatalogService, H as MinorModeRecord, Y as MinorModeSessionKind, m as MinorModeActionDescriptor } from "./mode-EZWqhrYy.mjs";
|
|
2
|
+
//#region src/services/command/index.d.ts
|
|
3
|
+
declare const MINOR_MODE_COMMAND = "minor";
|
|
4
|
+
type NotificationLevel = 'info' | 'warning' | 'error';
|
|
5
|
+
interface MinorModeCommandPrompter {
|
|
6
|
+
select(title: string, options: readonly string[]): Promise<string | undefined>;
|
|
7
|
+
input(title: string, message: string): Promise<string | undefined>;
|
|
8
|
+
confirm(title: string, message: string): Promise<boolean | undefined>;
|
|
9
|
+
notify(message: string, level: NotificationLevel): void | Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
/** A catalog mode addressed the way a person types it: id, label, or id stem. */
|
|
12
|
+
declare function matchMinorMode(records: readonly MinorModeRecord[], query: string): MinorModeRecord | undefined;
|
|
13
|
+
/** The actions a session of this kind can currently take on a mode. */
|
|
14
|
+
declare function actionsFor(record: MinorModeRecord, kind: MinorModeSessionKind): MinorModeActionDescriptor[];
|
|
15
|
+
interface ExecuteMinorModeCommandOptions {
|
|
16
|
+
catalog: MinorModeCatalogService | undefined;
|
|
17
|
+
kind: MinorModeSessionKind;
|
|
18
|
+
ui: MinorModeCommandPrompter;
|
|
19
|
+
}
|
|
20
|
+
/** Runs the catalog command against an explicit interaction surface. */
|
|
21
|
+
declare function executeMinorModeCommand(args: string, options: ExecuteMinorModeCommandOptions): Promise<void>;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { executeMinorModeCommand as a, actionsFor as i, MINOR_MODE_COMMAND as n, matchMinorMode as o, MinorModeCommandPrompter as r, ExecuteMinorModeCommandOptions as t };
|
|
24
|
+
//# sourceMappingURL=index-COS4uLcb.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-COS4uLcb.d.mts","names":[],"sources":["../src/services/command/index.ts"],"mappings":";;cAQa;KAIR;UAEY;EACf,OAAO,eAAe,6BAA6B;EACnD,MAAM,eAAe,kBAAkB;EACvC,QAAQ,eAAe,kBAAkB;EACzC,OAAO,iBAAiB,OAAO,2BAA2B;;;iBAQ5C,eAAe,kBAAkB,mBAAmB,gBAAgB;;iBAWpE,WAAW,QAAQ,iBAAiB,MAAM,uBAAuB;UA8ChE;EACf,SAAS;EACT,MAAM;EACN,IAAI;;;iBAIgB,wBAAwB,cAAc,SAAS,iCAAiC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { D as MinorModeCatalogService, R as MinorModeOwnerDefinition, z as MinorModeOwnerHandle } from "./mode-EZWqhrYy.mjs";
|
|
2
|
+
import { DoomExtensionContext } from "@agimon-ai/doompi-core/runtimeConfig";
|
|
3
|
+
//#region src/services/owner/index.d.ts
|
|
4
|
+
/** Register an owner directly with the injected session catalog. */
|
|
5
|
+
declare function registerMinorModeOwner<ExtensionContext extends DoomExtensionContext>(catalog: MinorModeCatalogService, definition: MinorModeOwnerDefinition<ExtensionContext>): MinorModeOwnerHandle;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { registerMinorModeOwner as t };
|
|
8
|
+
//# sourceMappingURL=index-DEjyk6tg.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DEjyk6tg.d.mts","names":[],"sources":["../src/services/owner/index.ts"],"mappings":";;;;iBAKgB,uBAAuB,yBAAyB,sBAC9D,SAAS,yBACT,YAAY,yBAAyB,oBACpC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { L as MinorModeOwnerActionResult, M as MinorModeDescriptor, Q as MinorModeState, T as MinorModeArguments, z as MinorModeOwnerHandle } from "./mode-EZWqhrYy.mjs";
|
|
2
|
+
//#region src/services/modeDefinition/index.d.ts
|
|
3
|
+
interface MinorModeExecution {
|
|
4
|
+
readonly signal: AbortSignal;
|
|
5
|
+
}
|
|
6
|
+
interface MinorModeDefinition<TRuntime, TExecution extends MinorModeExecution = MinorModeExecution> {
|
|
7
|
+
readonly descriptor: MinorModeDescriptor;
|
|
8
|
+
state(runtime: TRuntime): MinorModeState;
|
|
9
|
+
handleAction(runtime: TRuntime, actionId: string, argumentsValue: MinorModeArguments, execution: TExecution): MinorModeOwnerActionResult | void | Promise<MinorModeOwnerActionResult | void>;
|
|
10
|
+
}
|
|
11
|
+
interface MinorModeOwner<TExecution extends MinorModeExecution = MinorModeExecution> {
|
|
12
|
+
readonly definition: {
|
|
13
|
+
readonly descriptor: MinorModeDescriptor;
|
|
14
|
+
readonly initialState: MinorModeState;
|
|
15
|
+
handleAction(actionId: string, argumentsValue: MinorModeArguments, execution: TExecution): Promise<MinorModeOwnerActionResult | void>;
|
|
16
|
+
};
|
|
17
|
+
state(): MinorModeState;
|
|
18
|
+
publish(): void;
|
|
19
|
+
attach(handle: MinorModeOwnerHandle): void;
|
|
20
|
+
detach(): void;
|
|
21
|
+
subscribe(listener: () => void): () => void;
|
|
22
|
+
}
|
|
23
|
+
interface DefinedMinorMode<TRuntime, TExecution extends MinorModeExecution = MinorModeExecution> {
|
|
24
|
+
readonly descriptor: MinorModeDescriptor;
|
|
25
|
+
createOwner(runtime: TRuntime): MinorModeOwner<TExecution>;
|
|
26
|
+
}
|
|
27
|
+
/** Shares one typed mode definition across Pi and session-server owners. */
|
|
28
|
+
declare function defineMinorMode<TRuntime, TExecution extends MinorModeExecution = MinorModeExecution>(mode: MinorModeDefinition<TRuntime, TExecution>): DefinedMinorMode<TRuntime, TExecution>;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { defineMinorMode as a, MinorModeOwner as i, MinorModeDefinition as n, MinorModeExecution as r, DefinedMinorMode as t };
|
|
31
|
+
//# sourceMappingURL=index-DSKnT657.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DSKnT657.d.mts","names":[],"sources":["../src/services/modeDefinition/index.ts"],"mappings":";;UAQiB;WACN,QAAQ;;UAGF,oBAAoB,UAAU,mBAAmB,qBAAqB;WAC5E,YAAY;EACrB,MAAM,SAAS,WAAW;EAC1B,aACE,SAAS,UACT,kBACA,gBAAgB,oBAChB,WAAW,aACV,oCAAoC,QAAQ;;UAGhC,eAAe,mBAAmB,qBAAqB;WAC7D;aACE,YAAY;aACZ,cAAc;IACvB,aACE,kBACA,gBAAgB,oBAChB,WAAW,aACV,QAAQ;;EAEb,SAAS;EACT;EACA,OAAO,QAAQ;EACf;EACA,UAAU;;UAGK,iBAAiB,UAAU,mBAAmB,qBAAqB;WACzE,YAAY;EACrB,YAAY,SAAS,WAAW,eAAe;;;iBAIjC,gBAAgB,UAAU,mBAAmB,qBAAqB,oBAChF,MAAM,oBAAoB,UAAU,cACnC,iBAAiB,UAAU"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_mode = require("./mode-Dft08ke8.cjs");
|
|
3
|
+
const require_validation = require("./validation-DRV8Dtoc.cjs");
|
|
4
|
+
const require_owner = require("./owner-BbCQufLu.cjs");
|
|
5
|
+
const require_modeDefinition = require("./modeDefinition-BtgwqXMo.cjs");
|
|
6
|
+
const require_headlessCommand = require("./headlessCommand-CaFFcvJA.cjs");
|
|
7
|
+
let _agimon_ai_doompi_core_headless = require("@agimon-ai/doompi-core/headless");
|
|
8
|
+
//#region src/services/client/index.ts
|
|
9
|
+
function createMinorModeCatalogClient(catalog) {
|
|
10
|
+
return {
|
|
11
|
+
getSnapshot: () => catalog.getSnapshot(),
|
|
12
|
+
list: () => catalog.list(),
|
|
13
|
+
subscribe: (listener) => catalog.subscribe(listener),
|
|
14
|
+
invoke: (mode, actionId, argumentsValue = {}, options = {}) => catalog.invoke({
|
|
15
|
+
operationId: `minor-mode:${crypto.randomUUID()}`,
|
|
16
|
+
mode: structuredClone(mode),
|
|
17
|
+
actionId,
|
|
18
|
+
arguments: structuredClone(argumentsValue)
|
|
19
|
+
}, "doom/minor-mode-client", options.signal)
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/services/piRegistration/index.ts
|
|
24
|
+
/** Registers static or live owners for the injected catalog's lifetime. */
|
|
25
|
+
function piMinorModes(modes) {
|
|
26
|
+
return (context) => {
|
|
27
|
+
if (!modes) return;
|
|
28
|
+
context.inject([require_mode.DOOM_MINOR_MODE_CATALOG_SERVICE], (child) => {
|
|
29
|
+
const controller = new AbortController();
|
|
30
|
+
const signal = controller.signal;
|
|
31
|
+
child.effect(() => () => controller.abort());
|
|
32
|
+
const catalog = require_mode.requireMinorModeCatalog(child);
|
|
33
|
+
const mounted = /* @__PURE__ */ new Map();
|
|
34
|
+
let disposed = false;
|
|
35
|
+
let reconciling = false;
|
|
36
|
+
let pending = false;
|
|
37
|
+
let subscribing = true;
|
|
38
|
+
const reconcile = () => {
|
|
39
|
+
pending = true;
|
|
40
|
+
if (disposed || signal.aborted || subscribing || reconciling) return;
|
|
41
|
+
reconciling = true;
|
|
42
|
+
try {
|
|
43
|
+
do {
|
|
44
|
+
pending = false;
|
|
45
|
+
const snapshot = "snapshot" in modes ? modes.snapshot() : modes;
|
|
46
|
+
const next = /* @__PURE__ */ new Map();
|
|
47
|
+
for (const declaration of snapshot) {
|
|
48
|
+
const definition = "definition" in declaration ? declaration.definition : declaration;
|
|
49
|
+
const key = JSON.stringify([definition.descriptor.source, definition.descriptor.id]);
|
|
50
|
+
if (next.has(key)) throw new Error(`Duplicate live minor mode: ${definition.descriptor.source}/${definition.descriptor.id}`);
|
|
51
|
+
next.set(key, declaration);
|
|
52
|
+
}
|
|
53
|
+
for (const [key, entry] of mounted) {
|
|
54
|
+
if (next.get(key) === entry.declaration) continue;
|
|
55
|
+
mounted.delete(key);
|
|
56
|
+
entry.release();
|
|
57
|
+
}
|
|
58
|
+
for (const [key, declaration] of next) {
|
|
59
|
+
if (mounted.has(key)) continue;
|
|
60
|
+
const owner = "definition" in declaration ? declaration : void 0;
|
|
61
|
+
const handle = require_owner.registerMinorModeOwner(catalog, owner ? owner.definition : declaration);
|
|
62
|
+
mounted.set(key, {
|
|
63
|
+
declaration,
|
|
64
|
+
release() {
|
|
65
|
+
try {
|
|
66
|
+
owner?.detach();
|
|
67
|
+
} finally {
|
|
68
|
+
handle.dispose();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
owner?.attach(handle);
|
|
73
|
+
}
|
|
74
|
+
} while (pending && !disposed && !signal.aborted);
|
|
75
|
+
} finally {
|
|
76
|
+
reconciling = false;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
child.effect(() => () => {
|
|
80
|
+
disposed = true;
|
|
81
|
+
const entries = [...mounted.values()];
|
|
82
|
+
mounted.clear();
|
|
83
|
+
const errors = [];
|
|
84
|
+
for (const entry of entries) try {
|
|
85
|
+
entry.release();
|
|
86
|
+
} catch (error) {
|
|
87
|
+
errors.push(error);
|
|
88
|
+
}
|
|
89
|
+
if (errors.length) throw new AggregateError(errors, "Minor mode cleanup failed.");
|
|
90
|
+
});
|
|
91
|
+
if ("subscribe" in modes) {
|
|
92
|
+
const unsubscribe = modes.subscribe(reconcile);
|
|
93
|
+
child.effect(() => () => {
|
|
94
|
+
disposed = true;
|
|
95
|
+
unsubscribe();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
subscribing = false;
|
|
99
|
+
reconcile();
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
//#region src/services/serverRegistration/index.ts
|
|
105
|
+
function serverMinorModes(modes) {
|
|
106
|
+
return (context) => {
|
|
107
|
+
context.inject([_agimon_ai_doompi_core_headless.DOOM_HEADLESS_HOST_SERVICE, require_mode.DOOM_MINOR_MODE_CATALOG_SERVICE], (child) => {
|
|
108
|
+
const agent = (0, _agimon_ai_doompi_core_headless.requireDoomHeadlessHost)(child);
|
|
109
|
+
const owner = (0, _agimon_ai_doompi_core_headless.readDoomHeadlessOwner)(child);
|
|
110
|
+
if (!owner) throw new Error("A minor mode must have descriptor-owned package identity");
|
|
111
|
+
const catalog = require_mode.requireMinorModeCatalog(child);
|
|
112
|
+
for (const mode of modes) {
|
|
113
|
+
const definition = "definition" in mode ? mode.definition : mode;
|
|
114
|
+
const handle = catalog.registerOwner({
|
|
115
|
+
...definition,
|
|
116
|
+
handleAction(id, args, execution) {
|
|
117
|
+
agent.assertActive(owner.packageName);
|
|
118
|
+
return definition.handleAction(id, args, {
|
|
119
|
+
...execution,
|
|
120
|
+
context: agent.context
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
child.effect(() => () => handle.dispose());
|
|
125
|
+
if ("definition" in mode) {
|
|
126
|
+
child.effect(() => () => mode.detach());
|
|
127
|
+
mode.attach(handle);
|
|
128
|
+
child.effect(() => agent.subscribeSelection(() => mode.publish()));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//#endregion
|
|
135
|
+
exports.DOOM_MINOR_MODE_CATALOG_SERVICE = require_mode.DOOM_MINOR_MODE_CATALOG_SERVICE;
|
|
136
|
+
exports.DOOM_MINOR_MODE_ENTRY_TYPE = require_mode.DOOM_MINOR_MODE_ENTRY_TYPE;
|
|
137
|
+
exports.MINOR_MODE_ACTION_TIMEOUT_MS = require_mode.MINOR_MODE_ACTION_TIMEOUT_MS;
|
|
138
|
+
exports.MINOR_MODE_CATALOG_SOURCE = require_mode.MINOR_MODE_CATALOG_SOURCE;
|
|
139
|
+
exports.MINOR_MODE_ERROR_CODE = require_mode.MINOR_MODE_ERROR_CODE;
|
|
140
|
+
exports.MINOR_MODE_MAX_ACTIONS = require_mode.MINOR_MODE_MAX_ACTIONS;
|
|
141
|
+
exports.MINOR_MODE_MAX_ARGUMENT_LENGTH = require_mode.MINOR_MODE_MAX_ARGUMENT_LENGTH;
|
|
142
|
+
exports.MINOR_MODE_MAX_ENUM_CHOICES = require_mode.MINOR_MODE_MAX_ENUM_CHOICES;
|
|
143
|
+
exports.MINOR_MODE_MAX_PARAMETERS = require_mode.MINOR_MODE_MAX_PARAMETERS;
|
|
144
|
+
exports.MINOR_MODE_MAX_RECORDS = require_mode.MINOR_MODE_MAX_RECORDS;
|
|
145
|
+
exports.MINOR_MODE_TOOL_NAME = require_mode.MINOR_MODE_TOOL_NAME;
|
|
146
|
+
exports.MinorModeActionAvailabilitySchema = require_mode.MinorModeActionAvailabilitySchema;
|
|
147
|
+
exports.MinorModeActionDescriptorSchema = require_mode.MinorModeActionDescriptorSchema;
|
|
148
|
+
exports.MinorModeActionParameterSchema = require_mode.MinorModeActionParameterSchema;
|
|
149
|
+
exports.MinorModeActionRequestSchema = require_mode.MinorModeActionRequestSchema;
|
|
150
|
+
exports.MinorModeActionResponseSchema = require_mode.MinorModeActionResponseSchema;
|
|
151
|
+
exports.MinorModeActivationSchema = require_mode.MinorModeActivationSchema;
|
|
152
|
+
exports.MinorModeArgumentsSchema = require_mode.MinorModeArgumentsSchema;
|
|
153
|
+
exports.MinorModeCatalogSnapshotSchema = require_mode.MinorModeCatalogSnapshotSchema;
|
|
154
|
+
exports.MinorModeConditionSchema = require_mode.MinorModeConditionSchema;
|
|
155
|
+
exports.MinorModeDescriptorSchema = require_mode.MinorModeDescriptorSchema;
|
|
156
|
+
exports.MinorModeIdSchema = require_mode.MinorModeIdSchema;
|
|
157
|
+
exports.MinorModeParameterNameSchema = require_mode.MinorModeParameterNameSchema;
|
|
158
|
+
exports.MinorModeRecordSchema = require_mode.MinorModeRecordSchema;
|
|
159
|
+
exports.MinorModeRegistrationRefSchema = require_mode.MinorModeRegistrationRefSchema;
|
|
160
|
+
exports.MinorModeScalarSchema = require_mode.MinorModeScalarSchema;
|
|
161
|
+
exports.MinorModeSessionKindSchema = require_mode.MinorModeSessionKindSchema;
|
|
162
|
+
exports.MinorModeSourceSchema = require_mode.MinorModeSourceSchema;
|
|
163
|
+
exports.MinorModeStateSchema = require_mode.MinorModeStateSchema;
|
|
164
|
+
exports.MinorModeToolInputSchema = require_mode.MinorModeToolInputSchema;
|
|
165
|
+
exports.MinorModeToolResultSchema = require_mode.MinorModeToolResultSchema;
|
|
166
|
+
exports.ModeTextColorSchema = require_mode.ModeTextColorSchema;
|
|
167
|
+
exports.createMinorModeCatalogClient = createMinorModeCatalogClient;
|
|
168
|
+
exports.defineMinorMode = require_modeDefinition.defineMinorMode;
|
|
169
|
+
exports.headlessMinorModeCommand = require_headlessCommand.headlessMinorModeCommand;
|
|
170
|
+
exports.minorModeKey = require_validation.minorModeKey;
|
|
171
|
+
exports.minorModeRegistrationRef = require_validation.minorModeRegistrationRef;
|
|
172
|
+
exports.piMinorModes = piMinorModes;
|
|
173
|
+
exports.readMinorModeCatalog = require_mode.readMinorModeCatalog;
|
|
174
|
+
exports.registerMinorModeOwner = require_owner.registerMinorModeOwner;
|
|
175
|
+
exports.requireMinorModeCatalog = require_mode.requireMinorModeCatalog;
|
|
176
|
+
exports.serverMinorModes = serverMinorModes;
|
|
177
|
+
exports.validateMinorModeActionArguments = require_validation.validateMinorModeActionArguments;
|
|
178
|
+
exports.validateMinorModeDefinition = require_validation.validateMinorModeDefinition;
|
|
179
|
+
|
|
180
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["DOOM_MINOR_MODE_CATALOG_SERVICE","requireMinorModeCatalog","registerMinorModeOwner","DOOM_HEADLESS_HOST_SERVICE","DOOM_MINOR_MODE_CATALOG_SERVICE","requireDoomHeadlessHost","readDoomHeadlessOwner","requireMinorModeCatalog"],"sources":["../src/services/client/index.ts","../src/services/piRegistration/index.ts","../src/services/serverRegistration/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","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","import {\n DOOM_HEADLESS_HOST_SERVICE,\n requireDoomHeadlessHost,\n readDoomHeadlessOwner,\n} from '@agimon-ai/doompi-core/headless';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport type { DoomHeadlessMinorMode } from '../../schemas/headless';\nimport { DOOM_MINOR_MODE_CATALOG_SERVICE, requireMinorModeCatalog } from '../../schemas/mode';\nimport type { MinorModeOwner } from '../modeDefinition';\n\nexport function serverMinorModes(\n modes: readonly (DoomHeadlessMinorMode | MinorModeOwner<Parameters<DoomHeadlessMinorMode['handleAction']>[2]>)[],\n): (context: Context) => void {\n return (context) => {\n context.inject([DOOM_HEADLESS_HOST_SERVICE, DOOM_MINOR_MODE_CATALOG_SERVICE], (child) => {\n const agent = requireDoomHeadlessHost(child);\n const owner = readDoomHeadlessOwner(child);\n if (!owner) throw new Error('A minor mode must have descriptor-owned package identity');\n const catalog = requireMinorModeCatalog(child);\n for (const mode of modes) {\n const definition = 'definition' in mode ? mode.definition : mode;\n const handle = catalog.registerOwner({\n ...definition,\n handleAction(id, args, execution) {\n agent.assertActive(owner.packageName);\n return definition.handleAction(id, args, { ...execution, context: agent.context });\n },\n });\n child.effect(() => () => handle.dispose());\n if ('definition' in mode) {\n child.effect(() => () => mode.detach());\n mode.attach(handle);\n child.effect(() => agent.subscribeSelection(() => mode.publish()));\n }\n }\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;;;;ACjBA,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;;;ACnGA,SAAgB,iBACd,OAC4B;CAC5B,QAAQ,YAAY;EAClB,QAAQ,OAAO,CAACC,gCAAAA,4BAA4BC,aAAAA,+BAA+B,IAAI,UAAU;GACvF,MAAM,SAAA,GAAQC,gCAAAA,wBAAAA,CAAwB,KAAK;GAC3C,MAAM,SAAA,GAAQC,gCAAAA,sBAAAA,CAAsB,KAAK;GACzC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,0DAA0D;GACtF,MAAM,UAAUC,aAAAA,wBAAwB,KAAK;GAC7C,KAAK,MAAM,QAAQ,OAAO;IACxB,MAAM,aAAa,gBAAgB,OAAO,KAAK,aAAa;IAC5D,MAAM,SAAS,QAAQ,cAAc;KACnC,GAAG;KACH,aAAa,IAAI,MAAM,WAAW;MAChC,MAAM,aAAa,MAAM,WAAW;MACpC,OAAO,WAAW,aAAa,IAAI,MAAM;OAAE,GAAG;OAAW,SAAS,MAAM;MAAQ,CAAC;KACnF;IACF,CAAC;IACD,MAAM,mBAAmB,OAAO,QAAQ,CAAC;IACzC,IAAI,gBAAgB,MAAM;KACxB,MAAM,mBAAmB,KAAK,OAAO,CAAC;KACtC,KAAK,OAAO,MAAM;KAClB,MAAM,aAAa,MAAM,yBAAyB,KAAK,QAAQ,CAAC,CAAC;IACnE;GACF;EACF,CAAC;CACH;AACF"}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { $ as MinorModeStateSchema, A as MinorModeCondition, B as MinorModeParameterNameSchema, C as MinorModeActivation, D as MinorModeCatalogService, E as MinorModeArgumentsSchema, F as MinorModeInvokeOptions, G as MinorModeRegistrationRef, H as MinorModeRecord, I as MinorModeOwnerActionContext, J as MinorModeScalarSchema, K as MinorModeRegistrationRefSchema, L as MinorModeOwnerActionResult, M as MinorModeDescriptor, N as MinorModeDescriptorSchema, O as MinorModeCatalogSnapshot, P as MinorModeIdSchema, Q as MinorModeState, R as MinorModeOwnerDefinition, S as MinorModeActionResponseSchema, T as MinorModeArguments, U as MinorModeRecordProjection, V as MinorModeProjection, W as MinorModeRecordSchema, X as MinorModeSessionKindSchema, Y as MinorModeSessionKind, Z as MinorModeSourceSchema, _ as MinorModeActionParameterSchema, a as MINOR_MODE_ERROR_CODE, at as readMinorModeCatalog, b as MinorModeActionRequestSchema, c as MINOR_MODE_MAX_ENUM_CHOICES, d as MINOR_MODE_TOOL_NAME, et as MinorModeToolInput, f as MinorModeActionAvailability, g as MinorModeActionParameter, h as MinorModeActionDescriptorSchema, i as MINOR_MODE_CATALOG_SOURCE, it as ModeTextColorSchema, j as MinorModeConditionSchema, k as MinorModeCatalogSnapshotSchema, l as MINOR_MODE_MAX_PARAMETERS, m as MinorModeActionDescriptor, n as DOOM_MINOR_MODE_ENTRY_TYPE, nt as MinorModeToolResultSchema, o as MINOR_MODE_MAX_ACTIONS, ot as requireMinorModeCatalog, p as MinorModeActionAvailabilitySchema, q as MinorModeScalar, r as MINOR_MODE_ACTION_TIMEOUT_MS, rt as ModeTextColor, s as MINOR_MODE_MAX_ARGUMENT_LENGTH, t as DOOM_MINOR_MODE_CATALOG_SERVICE, tt as MinorModeToolInputSchema, u as MINOR_MODE_MAX_RECORDS, v as MinorModeActionProjection, w as MinorModeActivationSchema, x as MinorModeActionResponse, y as MinorModeActionRequest, z as MinorModeOwnerHandle } from "./mode-EZWqhrYy.mjs";
|
|
2
|
+
import { t as registerMinorModeOwner } from "./index-DEjyk6tg.mjs";
|
|
3
|
+
import { a as defineMinorMode, i as MinorModeOwner, n as MinorModeDefinition, r as MinorModeExecution, t as DefinedMinorMode } from "./index-DSKnT657.mjs";
|
|
4
|
+
import { DoomHeadlessCommand, DoomHeadlessExecutionContext } from "@agimon-ai/doompi-core/headless";
|
|
5
|
+
import { Context } from "@deepseek-ai/cordis";
|
|
6
|
+
import { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
7
|
+
//#region src/services/client/index.d.ts
|
|
8
|
+
/** Read-only facade used by UI and voice surfaces over the injected service. */
|
|
9
|
+
interface MinorModeCatalogClient {
|
|
10
|
+
getSnapshot(): MinorModeCatalogSnapshot;
|
|
11
|
+
list(): MinorModeRecord[];
|
|
12
|
+
subscribe(listener: () => void): () => void;
|
|
13
|
+
invoke(mode: MinorModeRegistrationRef, actionId: string, argumentsValue?: MinorModeArguments, options?: MinorModeInvokeOptions): Promise<MinorModeActionResponse>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createMinorModeCatalogClient(catalog: MinorModeCatalogService): MinorModeCatalogClient;
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/services/validation/index.d.ts
|
|
18
|
+
export declare function minorModeKey(identity: Pick<MinorModeDescriptor, 'source' | 'id'>): string;
|
|
19
|
+
export declare function minorModeRegistrationRef(record: MinorModeRecord): MinorModeRegistrationRef;
|
|
20
|
+
export declare function validateMinorModeDefinition(descriptor: MinorModeDescriptor, state: MinorModeState): string | undefined;
|
|
21
|
+
export declare function validateMinorModeActionArguments(action: MinorModeActionDescriptor, argumentsValue: MinorModeArguments): void;
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/services/piRegistration/index.d.ts
|
|
24
|
+
type ModeRegistrar = (definition: MinorModeOwnerDefinition<ExtensionContext>) => MinorModeOwnerHandle;
|
|
25
|
+
type PiMinorModeContribution = MinorModeOwner<MinorModeOwnerActionContext<ExtensionContext>> | Parameters<ModeRegistrar>[0];
|
|
26
|
+
interface PiMinorModeCollection {
|
|
27
|
+
snapshot(): readonly PiMinorModeContribution[];
|
|
28
|
+
subscribe(listener: () => void): () => void;
|
|
29
|
+
}
|
|
30
|
+
/** Registers static or live owners for the injected catalog's lifetime. */
|
|
31
|
+
export declare function piMinorModes(modes: readonly PiMinorModeContribution[] | PiMinorModeCollection | undefined): (context: Context) => void;
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/schemas/headless.d.ts
|
|
34
|
+
interface DoomHeadlessMinorMode {
|
|
35
|
+
descriptor: MinorModeDescriptor;
|
|
36
|
+
initialState: MinorModeState;
|
|
37
|
+
handleAction(actionId: string, args: MinorModeArguments, execution: {
|
|
38
|
+
context: DoomHeadlessExecutionContext;
|
|
39
|
+
operationId: string;
|
|
40
|
+
sessionKind: MinorModeSessionKind;
|
|
41
|
+
signal: AbortSignal;
|
|
42
|
+
}): MinorModeOwnerActionResult | void | Promise<MinorModeOwnerActionResult | void>;
|
|
43
|
+
onError?(error: unknown): void;
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/services/serverRegistration/index.d.ts
|
|
47
|
+
export declare function serverMinorModes(modes: readonly (DoomHeadlessMinorMode | MinorModeOwner<Parameters<DoomHeadlessMinorMode['handleAction']>[2]>)[]): (context: Context) => void;
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/services/headlessCommand/index.d.ts
|
|
50
|
+
export declare function headlessMinorModeCommand(catalog: MinorModeCatalogService): DoomHeadlessCommand;
|
|
51
|
+
//#endregion
|
|
52
|
+
export { DOOM_MINOR_MODE_CATALOG_SERVICE, DOOM_MINOR_MODE_ENTRY_TYPE, type DefinedMinorMode, type DoomHeadlessMinorMode, MINOR_MODE_ACTION_TIMEOUT_MS, MINOR_MODE_CATALOG_SOURCE, MINOR_MODE_ERROR_CODE, MINOR_MODE_MAX_ACTIONS, MINOR_MODE_MAX_ARGUMENT_LENGTH, MINOR_MODE_MAX_ENUM_CHOICES, MINOR_MODE_MAX_PARAMETERS, MINOR_MODE_MAX_RECORDS, MINOR_MODE_TOOL_NAME, type MinorModeActionAvailability, MinorModeActionAvailabilitySchema, type MinorModeActionDescriptor, MinorModeActionDescriptorSchema, type MinorModeActionParameter, MinorModeActionParameterSchema, type MinorModeActionProjection, type MinorModeActionRequest, MinorModeActionRequestSchema, type MinorModeActionResponse, MinorModeActionResponseSchema, type MinorModeActivation, MinorModeActivationSchema, type MinorModeArguments, MinorModeArgumentsSchema, type MinorModeCatalogClient, type MinorModeCatalogService, type MinorModeCatalogSnapshot, MinorModeCatalogSnapshotSchema, type MinorModeCondition, MinorModeConditionSchema, type MinorModeDefinition, type MinorModeDescriptor, MinorModeDescriptorSchema, type MinorModeExecution, MinorModeIdSchema, type MinorModeInvokeOptions, type MinorModeOwner, type MinorModeOwnerActionContext, type MinorModeOwnerActionResult, type MinorModeOwnerDefinition, type MinorModeOwnerHandle, MinorModeParameterNameSchema, type MinorModeProjection, type MinorModeRecord, type MinorModeRecordProjection, MinorModeRecordSchema, type MinorModeRegistrationRef, MinorModeRegistrationRefSchema, type MinorModeScalar, MinorModeScalarSchema, type MinorModeSessionKind, MinorModeSessionKindSchema, MinorModeSourceSchema, type MinorModeState, MinorModeStateSchema, type MinorModeToolInput, MinorModeToolInputSchema, MinorModeToolResultSchema, type ModeTextColor, ModeTextColorSchema, type PiMinorModeCollection, type PiMinorModeContribution, defineMinorMode, readMinorModeCatalog, registerMinorModeOwner, requireMinorModeCatalog };
|
|
53
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/services/client/index.ts","../src/services/validation/index.ts","../src/services/piRegistration/index.ts","../src/schemas/headless.ts","../src/services/serverRegistration/index.ts","../src/services/headlessCommand/index.ts"],"mappings":";;;;;;;;UAWiB;EACf,eAAe;EACf,QAAQ;EACR,UAAU;EACV,OACE,MAAM,0BACN,kBACA,iBAAiB,oBACjB,UAAU,yBACT,QAAQ;;wBAGG,6BAA6B,SAAS,0BAA0B;;;wBCXhE,aAAa,UAAU,KAAK;wBAI5B,yBAAyB,QAAQ,kBAAkB;wBAkBnD,4BACd,YAAY,qBACZ,OAAO;wBA4CO,iCACd,QAAQ,2BACR,gBAAgB;;;KCrEb,iBAAiB,YAAY,yBAAyB,sBAAsB;KACrE,0BACR,eAAe,4BAA4B,qBAC3C,WAAW;UACE;EACf,qBAAqB;EACrB,UAAU;;;wBAII,aACd,gBAAgB,4BAA4B,qCAC1C,SAAS;;;UChBI;EACf,YAAY;EACZ,cAAc;EACd,aACE,kBACA,MAAM,oBACN;IACE,SAAS;IACT;IACA,aAAa;IACb,QAAQ;MAET,oCAAoC,QAAQ;EAC/C,SAAS;;;;wBCXK,iBACd,iBAAiB,wBAAwB,eAAe,WAAW,iDACjE,SAAS;;;wBCTG,yBAAyB,SAAS,0BAA0B"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { A as MinorModeToolInputSchema, C as MinorModeParameterNameSchema, D as MinorModeSessionKindSchema, E as MinorModeScalarSchema, M as ModeTextColorSchema, N as readMinorModeCatalog, O as MinorModeSourceSchema, P as requireMinorModeCatalog, S as MinorModeIdSchema, T as MinorModeRegistrationRefSchema, _ as MinorModeActivationSchema, a as MINOR_MODE_ERROR_CODE, b as MinorModeConditionSchema, c as MINOR_MODE_MAX_ENUM_CHOICES, d as MINOR_MODE_TOOL_NAME, f as MinorModeActionAvailabilitySchema, g as MinorModeActionResponseSchema, h as MinorModeActionRequestSchema, i as MINOR_MODE_CATALOG_SOURCE, j as MinorModeToolResultSchema, k as MinorModeStateSchema, l as MINOR_MODE_MAX_PARAMETERS, m as MinorModeActionParameterSchema, n as DOOM_MINOR_MODE_ENTRY_TYPE, o as MINOR_MODE_MAX_ACTIONS, p as MinorModeActionDescriptorSchema, r as MINOR_MODE_ACTION_TIMEOUT_MS, s as MINOR_MODE_MAX_ARGUMENT_LENGTH, t as DOOM_MINOR_MODE_CATALOG_SERVICE, u as MINOR_MODE_MAX_RECORDS, v as MinorModeArgumentsSchema, w as MinorModeRecordSchema, x as MinorModeDescriptorSchema, y as MinorModeCatalogSnapshotSchema } from "./mode-BwRkDqO4.mjs";
|
|
2
|
+
import { i as validateMinorModeDefinition, n as minorModeRegistrationRef, r as validateMinorModeActionArguments, t as minorModeKey } from "./validation-BuQc8UrL.mjs";
|
|
3
|
+
import { t as registerMinorModeOwner } from "./owner-Bs55c_qE.mjs";
|
|
4
|
+
import { t as defineMinorMode } from "./modeDefinition-BcqEwTzh.mjs";
|
|
5
|
+
import { t as headlessMinorModeCommand } from "./headlessCommand-BJhocUje.mjs";
|
|
6
|
+
import { DOOM_HEADLESS_HOST_SERVICE, readDoomHeadlessOwner, requireDoomHeadlessHost } from "@agimon-ai/doompi-core/headless";
|
|
7
|
+
//#region src/services/client/index.ts
|
|
8
|
+
function createMinorModeCatalogClient(catalog) {
|
|
9
|
+
return {
|
|
10
|
+
getSnapshot: () => catalog.getSnapshot(),
|
|
11
|
+
list: () => catalog.list(),
|
|
12
|
+
subscribe: (listener) => catalog.subscribe(listener),
|
|
13
|
+
invoke: (mode, actionId, argumentsValue = {}, options = {}) => catalog.invoke({
|
|
14
|
+
operationId: `minor-mode:${crypto.randomUUID()}`,
|
|
15
|
+
mode: structuredClone(mode),
|
|
16
|
+
actionId,
|
|
17
|
+
arguments: structuredClone(argumentsValue)
|
|
18
|
+
}, "doom/minor-mode-client", options.signal)
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/services/piRegistration/index.ts
|
|
23
|
+
/** Registers static or live owners for the injected catalog's lifetime. */
|
|
24
|
+
function piMinorModes(modes) {
|
|
25
|
+
return (context) => {
|
|
26
|
+
if (!modes) return;
|
|
27
|
+
context.inject([DOOM_MINOR_MODE_CATALOG_SERVICE], (child) => {
|
|
28
|
+
const controller = new AbortController();
|
|
29
|
+
const signal = controller.signal;
|
|
30
|
+
child.effect(() => () => controller.abort());
|
|
31
|
+
const catalog = requireMinorModeCatalog(child);
|
|
32
|
+
const mounted = /* @__PURE__ */ new Map();
|
|
33
|
+
let disposed = false;
|
|
34
|
+
let reconciling = false;
|
|
35
|
+
let pending = false;
|
|
36
|
+
let subscribing = true;
|
|
37
|
+
const reconcile = () => {
|
|
38
|
+
pending = true;
|
|
39
|
+
if (disposed || signal.aborted || subscribing || reconciling) return;
|
|
40
|
+
reconciling = true;
|
|
41
|
+
try {
|
|
42
|
+
do {
|
|
43
|
+
pending = false;
|
|
44
|
+
const snapshot = "snapshot" in modes ? modes.snapshot() : modes;
|
|
45
|
+
const next = /* @__PURE__ */ new Map();
|
|
46
|
+
for (const declaration of snapshot) {
|
|
47
|
+
const definition = "definition" in declaration ? declaration.definition : declaration;
|
|
48
|
+
const key = JSON.stringify([definition.descriptor.source, definition.descriptor.id]);
|
|
49
|
+
if (next.has(key)) throw new Error(`Duplicate live minor mode: ${definition.descriptor.source}/${definition.descriptor.id}`);
|
|
50
|
+
next.set(key, declaration);
|
|
51
|
+
}
|
|
52
|
+
for (const [key, entry] of mounted) {
|
|
53
|
+
if (next.get(key) === entry.declaration) continue;
|
|
54
|
+
mounted.delete(key);
|
|
55
|
+
entry.release();
|
|
56
|
+
}
|
|
57
|
+
for (const [key, declaration] of next) {
|
|
58
|
+
if (mounted.has(key)) continue;
|
|
59
|
+
const owner = "definition" in declaration ? declaration : void 0;
|
|
60
|
+
const handle = registerMinorModeOwner(catalog, owner ? owner.definition : declaration);
|
|
61
|
+
mounted.set(key, {
|
|
62
|
+
declaration,
|
|
63
|
+
release() {
|
|
64
|
+
try {
|
|
65
|
+
owner?.detach();
|
|
66
|
+
} finally {
|
|
67
|
+
handle.dispose();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
owner?.attach(handle);
|
|
72
|
+
}
|
|
73
|
+
} while (pending && !disposed && !signal.aborted);
|
|
74
|
+
} finally {
|
|
75
|
+
reconciling = false;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
child.effect(() => () => {
|
|
79
|
+
disposed = true;
|
|
80
|
+
const entries = [...mounted.values()];
|
|
81
|
+
mounted.clear();
|
|
82
|
+
const errors = [];
|
|
83
|
+
for (const entry of entries) try {
|
|
84
|
+
entry.release();
|
|
85
|
+
} catch (error) {
|
|
86
|
+
errors.push(error);
|
|
87
|
+
}
|
|
88
|
+
if (errors.length) throw new AggregateError(errors, "Minor mode cleanup failed.");
|
|
89
|
+
});
|
|
90
|
+
if ("subscribe" in modes) {
|
|
91
|
+
const unsubscribe = modes.subscribe(reconcile);
|
|
92
|
+
child.effect(() => () => {
|
|
93
|
+
disposed = true;
|
|
94
|
+
unsubscribe();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
subscribing = false;
|
|
98
|
+
reconcile();
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region src/services/serverRegistration/index.ts
|
|
104
|
+
function serverMinorModes(modes) {
|
|
105
|
+
return (context) => {
|
|
106
|
+
context.inject([DOOM_HEADLESS_HOST_SERVICE, DOOM_MINOR_MODE_CATALOG_SERVICE], (child) => {
|
|
107
|
+
const agent = requireDoomHeadlessHost(child);
|
|
108
|
+
const owner = readDoomHeadlessOwner(child);
|
|
109
|
+
if (!owner) throw new Error("A minor mode must have descriptor-owned package identity");
|
|
110
|
+
const catalog = requireMinorModeCatalog(child);
|
|
111
|
+
for (const mode of modes) {
|
|
112
|
+
const definition = "definition" in mode ? mode.definition : mode;
|
|
113
|
+
const handle = catalog.registerOwner({
|
|
114
|
+
...definition,
|
|
115
|
+
handleAction(id, args, execution) {
|
|
116
|
+
agent.assertActive(owner.packageName);
|
|
117
|
+
return definition.handleAction(id, args, {
|
|
118
|
+
...execution,
|
|
119
|
+
context: agent.context
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
child.effect(() => () => handle.dispose());
|
|
124
|
+
if ("definition" in mode) {
|
|
125
|
+
child.effect(() => () => mode.detach());
|
|
126
|
+
mode.attach(handle);
|
|
127
|
+
child.effect(() => agent.subscribeSelection(() => mode.publish()));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//#endregion
|
|
134
|
+
export { DOOM_MINOR_MODE_CATALOG_SERVICE, DOOM_MINOR_MODE_ENTRY_TYPE, MINOR_MODE_ACTION_TIMEOUT_MS, MINOR_MODE_CATALOG_SOURCE, MINOR_MODE_ERROR_CODE, MINOR_MODE_MAX_ACTIONS, MINOR_MODE_MAX_ARGUMENT_LENGTH, MINOR_MODE_MAX_ENUM_CHOICES, MINOR_MODE_MAX_PARAMETERS, MINOR_MODE_MAX_RECORDS, MINOR_MODE_TOOL_NAME, MinorModeActionAvailabilitySchema, MinorModeActionDescriptorSchema, MinorModeActionParameterSchema, MinorModeActionRequestSchema, MinorModeActionResponseSchema, MinorModeActivationSchema, MinorModeArgumentsSchema, MinorModeCatalogSnapshotSchema, MinorModeConditionSchema, MinorModeDescriptorSchema, MinorModeIdSchema, MinorModeParameterNameSchema, MinorModeRecordSchema, MinorModeRegistrationRefSchema, MinorModeScalarSchema, MinorModeSessionKindSchema, MinorModeSourceSchema, MinorModeStateSchema, MinorModeToolInputSchema, MinorModeToolResultSchema, ModeTextColorSchema, createMinorModeCatalogClient, defineMinorMode, headlessMinorModeCommand, minorModeKey, minorModeRegistrationRef, piMinorModes, readMinorModeCatalog, registerMinorModeOwner, requireMinorModeCatalog, serverMinorModes, validateMinorModeActionArguments, validateMinorModeDefinition };
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/services/client/index.ts","../src/services/piRegistration/index.ts","../src/services/serverRegistration/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","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","import {\n DOOM_HEADLESS_HOST_SERVICE,\n requireDoomHeadlessHost,\n readDoomHeadlessOwner,\n} from '@agimon-ai/doompi-core/headless';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport type { DoomHeadlessMinorMode } from '../../schemas/headless';\nimport { DOOM_MINOR_MODE_CATALOG_SERVICE, requireMinorModeCatalog } from '../../schemas/mode';\nimport type { MinorModeOwner } from '../modeDefinition';\n\nexport function serverMinorModes(\n modes: readonly (DoomHeadlessMinorMode | MinorModeOwner<Parameters<DoomHeadlessMinorMode['handleAction']>[2]>)[],\n): (context: Context) => void {\n return (context) => {\n context.inject([DOOM_HEADLESS_HOST_SERVICE, DOOM_MINOR_MODE_CATALOG_SERVICE], (child) => {\n const agent = requireDoomHeadlessHost(child);\n const owner = readDoomHeadlessOwner(child);\n if (!owner) throw new Error('A minor mode must have descriptor-owned package identity');\n const catalog = requireMinorModeCatalog(child);\n for (const mode of modes) {\n const definition = 'definition' in mode ? mode.definition : mode;\n const handle = catalog.registerOwner({\n ...definition,\n handleAction(id, args, execution) {\n agent.assertActive(owner.packageName);\n return definition.handleAction(id, args, { ...execution, context: agent.context });\n },\n });\n child.effect(() => () => handle.dispose());\n if ('definition' in mode) {\n child.effect(() => () => mode.detach());\n mode.attach(handle);\n child.effect(() => agent.subscribeSelection(() => mode.publish()));\n }\n }\n });\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_command = require("./command-D9hQfJb_.cjs");
|
|
3
|
+
exports.MINOR_MODE_COMMAND = require_command.MINOR_MODE_COMMAND;
|
|
4
|
+
exports.actionsFor = require_command.actionsFor;
|
|
5
|
+
exports.matchMinorMode = require_command.matchMinorMode;
|