@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.
Files changed (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/api-contracts.cjs +7 -0
  4. package/dist/api-contracts.d.cts +2 -0
  5. package/dist/api-contracts.d.mts +2 -0
  6. package/dist/api-contracts.mjs +2 -0
  7. package/dist/catalog.cjs +223 -0
  8. package/dist/catalog.cjs.map +1 -0
  9. package/dist/catalog.d.cts +14 -0
  10. package/dist/catalog.d.cts.map +1 -0
  11. package/dist/catalog.d.mts +14 -0
  12. package/dist/catalog.d.mts.map +1 -0
  13. package/dist/catalog.mjs +222 -0
  14. package/dist/catalog.mjs.map +1 -0
  15. package/dist/command.cjs +134 -0
  16. package/dist/command.cjs.map +1 -0
  17. package/dist/command.d.cts +25 -0
  18. package/dist/command.d.cts.map +1 -0
  19. package/dist/command.d.mts +25 -0
  20. package/dist/command.d.mts.map +1 -0
  21. package/dist/command.mjs +129 -0
  22. package/dist/command.mjs.map +1 -0
  23. package/dist/constants/command.cjs +6 -0
  24. package/dist/constants/command.cjs.map +1 -0
  25. package/dist/constants/command.d.cts +4 -0
  26. package/dist/constants/command.d.cts.map +1 -0
  27. package/dist/constants/command.d.mts +4 -0
  28. package/dist/constants/command.d.mts.map +1 -0
  29. package/dist/constants/command.mjs +6 -0
  30. package/dist/constants/command.mjs.map +1 -0
  31. package/dist/controllers/catalogRuntime.cjs +123 -0
  32. package/dist/controllers/catalogRuntime.cjs.map +1 -0
  33. package/dist/controllers/catalogRuntime.mjs +123 -0
  34. package/dist/controllers/catalogRuntime.mjs.map +1 -0
  35. package/dist/extensions/pi.cjs +7 -0
  36. package/dist/extensions/pi.cjs.map +1 -0
  37. package/dist/extensions/pi.d.cts +4 -0
  38. package/dist/extensions/pi.d.cts.map +1 -0
  39. package/dist/extensions/pi.d.mts +5 -0
  40. package/dist/extensions/pi.d.mts.map +1 -0
  41. package/dist/extensions/pi.mjs +8 -0
  42. package/dist/extensions/pi.mjs.map +1 -0
  43. package/dist/extensions/server.cjs +85 -0
  44. package/dist/extensions/server.cjs.map +1 -0
  45. package/dist/extensions/server.d.cts +4 -0
  46. package/dist/extensions/server.d.cts.map +1 -0
  47. package/dist/extensions/server.d.mts +5 -0
  48. package/dist/extensions/server.d.mts.map +1 -0
  49. package/dist/extensions/server.mjs +86 -0
  50. package/dist/extensions/server.mjs.map +1 -0
  51. package/dist/index.cjs +53 -0
  52. package/dist/index.d.cts +10 -0
  53. package/dist/index.d.mts +10 -0
  54. package/dist/index.mjs +9 -0
  55. package/dist/minor-mode-command.cjs +37 -0
  56. package/dist/minor-mode-command.cjs.map +1 -0
  57. package/dist/minor-mode-command.d.cts +9 -0
  58. package/dist/minor-mode-command.d.cts.map +1 -0
  59. package/dist/minor-mode-command.d.mts +9 -0
  60. package/dist/minor-mode-command.d.mts.map +1 -0
  61. package/dist/minor-mode-command.mjs +33 -0
  62. package/dist/minor-mode-command.mjs.map +1 -0
  63. package/dist/mode-definition.cjs +47 -0
  64. package/dist/mode-definition.cjs.map +1 -0
  65. package/dist/mode-definition.d.cts +30 -0
  66. package/dist/mode-definition.d.cts.map +1 -0
  67. package/dist/mode-definition.d.mts +30 -0
  68. package/dist/mode-definition.d.mts.map +1 -0
  69. package/dist/mode-definition.mjs +46 -0
  70. package/dist/mode-definition.mjs.map +1 -0
  71. package/dist/mode.cjs +275 -0
  72. package/dist/mode.cjs.map +1 -0
  73. package/dist/mode.d.cts +491 -0
  74. package/dist/mode.d.cts.map +1 -0
  75. package/dist/mode.d.mts +491 -0
  76. package/dist/mode.d.mts.map +1 -0
  77. package/dist/mode.mjs +241 -0
  78. package/dist/mode.mjs.map +1 -0
  79. package/dist/owner.cjs +10 -0
  80. package/dist/owner.cjs.map +1 -0
  81. package/dist/owner.d.cts +7 -0
  82. package/dist/owner.d.cts.map +1 -0
  83. package/dist/owner.d.mts +7 -0
  84. package/dist/owner.d.mts.map +1 -0
  85. package/dist/owner.mjs +9 -0
  86. package/dist/owner.mjs.map +1 -0
  87. package/dist/projection.cjs +49 -0
  88. package/dist/projection.cjs.map +1 -0
  89. package/dist/projection.d.cts +12 -0
  90. package/dist/projection.d.cts.map +1 -0
  91. package/dist/projection.d.mts +12 -0
  92. package/dist/projection.d.mts.map +1 -0
  93. package/dist/projection.mjs +47 -0
  94. package/dist/projection.mjs.map +1 -0
  95. package/dist/reload-handoff.cjs +57 -0
  96. package/dist/reload-handoff.cjs.map +1 -0
  97. package/dist/reload-handoff.d.cts +11 -0
  98. package/dist/reload-handoff.d.cts.map +1 -0
  99. package/dist/reload-handoff.d.mts +11 -0
  100. package/dist/reload-handoff.d.mts.map +1 -0
  101. package/dist/reload-handoff.mjs +54 -0
  102. package/dist/reload-handoff.mjs.map +1 -0
  103. package/dist/schemas/apiContracts.cjs +13 -0
  104. package/dist/schemas/apiContracts.cjs.map +1 -0
  105. package/dist/schemas/apiContracts.d.cts +53 -0
  106. package/dist/schemas/apiContracts.d.cts.map +1 -0
  107. package/dist/schemas/apiContracts.d.mts +53 -0
  108. package/dist/schemas/apiContracts.d.mts.map +1 -0
  109. package/dist/schemas/apiContracts.mjs +13 -0
  110. package/dist/schemas/apiContracts.mjs.map +1 -0
  111. package/dist/schemas/headless.d.cts +16 -0
  112. package/dist/schemas/headless.d.cts.map +1 -0
  113. package/dist/schemas/headless.d.mts +16 -0
  114. package/dist/schemas/headless.d.mts.map +1 -0
  115. package/dist/services/client/index.cjs +18 -0
  116. package/dist/services/client/index.cjs.map +1 -0
  117. package/dist/services/client/index.d.cts +12 -0
  118. package/dist/services/client/index.d.cts.map +1 -0
  119. package/dist/services/client/index.d.mts +12 -0
  120. package/dist/services/client/index.d.mts.map +1 -0
  121. package/dist/services/client/index.mjs +18 -0
  122. package/dist/services/client/index.mjs.map +1 -0
  123. package/dist/services/headlessCommand/index.cjs +53 -0
  124. package/dist/services/headlessCommand/index.cjs.map +1 -0
  125. package/dist/services/headlessCommand/index.d.cts +6 -0
  126. package/dist/services/headlessCommand/index.d.cts.map +1 -0
  127. package/dist/services/headlessCommand/index.d.mts +6 -0
  128. package/dist/services/headlessCommand/index.d.mts.map +1 -0
  129. package/dist/services/headlessCommand/index.mjs +53 -0
  130. package/dist/services/headlessCommand/index.mjs.map +1 -0
  131. package/dist/services/piRegistration/index.cjs +86 -0
  132. package/dist/services/piRegistration/index.cjs.map +1 -0
  133. package/dist/services/piRegistration/index.d.cts +15 -0
  134. package/dist/services/piRegistration/index.d.cts.map +1 -0
  135. package/dist/services/piRegistration/index.d.mts +15 -0
  136. package/dist/services/piRegistration/index.d.mts.map +1 -0
  137. package/dist/services/piRegistration/index.mjs +86 -0
  138. package/dist/services/piRegistration/index.mjs.map +1 -0
  139. package/dist/services/serverRegistration/index.cjs +35 -0
  140. package/dist/services/serverRegistration/index.cjs.map +1 -0
  141. package/dist/services/serverRegistration/index.d.cts +7 -0
  142. package/dist/services/serverRegistration/index.d.cts.map +1 -0
  143. package/dist/services/serverRegistration/index.d.mts +7 -0
  144. package/dist/services/serverRegistration/index.d.mts.map +1 -0
  145. package/dist/services/serverRegistration/index.mjs +35 -0
  146. package/dist/services/serverRegistration/index.mjs.map +1 -0
  147. package/dist/services/validation/index.cjs +84 -0
  148. package/dist/services/validation/index.cjs.map +1 -0
  149. package/dist/services/validation/index.d.cts +8 -0
  150. package/dist/services/validation/index.d.cts.map +1 -0
  151. package/dist/services/validation/index.d.mts +8 -0
  152. package/dist/services/validation/index.d.mts.map +1 -0
  153. package/dist/services/validation/index.mjs +81 -0
  154. package/dist/services/validation/index.mjs.map +1 -0
  155. package/package.json +157 -0
@@ -0,0 +1,123 @@
1
+ import { DOOM_MINOR_MODE_CATALOG_SERVICE, DOOM_MINOR_MODE_ENTRY_TYPE } from "../mode.mjs";
2
+ import { createMinorModeCatalogHost } from "../catalog.mjs";
3
+ import { projectMinorModes } from "../projection.mjs";
4
+ import { consumeMinorModeReloadHandoff, discardMinorModeReloadHandoff } from "../reload-handoff.mjs";
5
+ import { registerMinorModeCommand } from "../minor-mode-command.mjs";
6
+ import { DOOM_CORDIS_SESSION_SERVICE } from "@agimon-ai/doompi-core/cordis-host";
7
+ import { readDoomNotificationService } from "@agimon-ai/doompi-core/notification";
8
+ import { DOOM_TRANSITION_SERVICE, requireDoomTransitionCoordinator } from "@agimon-ai/doompi-core/transition";
9
+ //#region src/controllers/catalogRuntime.ts
10
+ /** Registrations and state flips arrive in bursts; one entry covers a burst. */
11
+ const PROJECTION_SETTLE_MS = 50;
12
+ /**
13
+ * Pi's rpc mode subscribes to session events only after bindExtensions()
14
+ * returns, which is after session_start has run, so an entry journaled during
15
+ * startup never reaches a client. A publish deferred past that point does.
16
+ */
17
+ const BOOT_PUBLISH_DELAY_MS = 500;
18
+ function notify(cordis, context, body, level) {
19
+ const service = readDoomNotificationService(cordis);
20
+ if (service) {
21
+ try {
22
+ Promise.resolve(service.request({
23
+ body,
24
+ level
25
+ })).catch(() => void 0);
26
+ } catch {}
27
+ return;
28
+ }
29
+ context.ui.notify(body, level);
30
+ }
31
+ function transitionSource(requesterSource) {
32
+ if (requesterSource.includes("voice")) return "voice";
33
+ if (requesterSource.includes("leader")) return "leader";
34
+ if (requesterSource.includes("ui")) return "ui";
35
+ return "system";
36
+ }
37
+ /**
38
+ * The minor modes that are actually on, for the composition panel.
39
+ *
40
+ * Read from the bound catalog at publish time rather than passed in, because a
41
+ * mode switching on is one of the reasons a publish happens at all, and a
42
+ * remembered list would describe the composition before the switch.
43
+ */
44
+ function createMinorModePiRuntime(pi) {
45
+ const activeCatalog = { current: void 0 };
46
+ registerMinorModeCommand(pi, () => activeCatalog.current);
47
+ pi.on("session_start", () => {
48
+ setTimeout(() => {
49
+ activeCatalog.republish?.();
50
+ }, BOOT_PUBLISH_DELAY_MS);
51
+ });
52
+ return { services: [(cordis) => modeCatalogPlugin(cordis, pi, activeCatalog)] };
53
+ }
54
+ function modeCatalogPlugin(cordis, pi, activeCatalog) {
55
+ cordis.inject([DOOM_CORDIS_SESSION_SERVICE, DOOM_TRANSITION_SERVICE], (sessionContext) => {
56
+ const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE);
57
+ const context = session.context;
58
+ const coordinator = requireDoomTransitionCoordinator(sessionContext);
59
+ const reloadSession = session.reason === "reload";
60
+ const sessionId = session.sessionId;
61
+ const restoreSnapshot = reloadSession ? consumeMinorModeReloadHandoff(sessionId) : void 0;
62
+ if (!reloadSession) discardMinorModeReloadHandoff(sessionId);
63
+ const sessionKind = context.hasUI && context.mode === "tui" ? "tui" : "headless";
64
+ const catalog = createMinorModeCatalogHost({
65
+ sessionKind,
66
+ context,
67
+ restoreSnapshot,
68
+ onRestorationError(error) {
69
+ notify(sessionContext, context, `Could not restore a minor mode after reload: ${error instanceof Error ? error.message : String(error)}`, "warning");
70
+ },
71
+ async routeInvocation(request, requesterSource, invoke) {
72
+ let response;
73
+ const result = await coordinator.execute({
74
+ sessionId: context.sessionManager.getSessionId(),
75
+ hostGeneration: coordinator.hostGeneration,
76
+ operationId: request.operationId,
77
+ source: transitionSource(requesterSource),
78
+ target: {
79
+ axis: "live",
80
+ capability: "minor-mode"
81
+ }
82
+ }, async () => {
83
+ response = await invoke();
84
+ return "applied";
85
+ });
86
+ if (result.outcome !== "applied" || !response) throw new Error(`Minor-mode transition was ${result.outcome}: ${result.diagnostics.join(", ")}`);
87
+ return response;
88
+ }
89
+ });
90
+ sessionContext.provide(DOOM_MINOR_MODE_CATALOG_SERVICE, catalog);
91
+ activeCatalog.current = catalog;
92
+ activeCatalog.sessionId = sessionId;
93
+ let published;
94
+ let settle;
95
+ const publish = () => {
96
+ settle = void 0;
97
+ const projection = projectMinorModes(catalog.getSnapshot(), sessionKind);
98
+ const serialized = JSON.stringify(projection);
99
+ if (serialized === published) return;
100
+ published = serialized;
101
+ pi.appendEntry(DOOM_MINOR_MODE_ENTRY_TYPE, projection);
102
+ };
103
+ const unsubscribe = catalog.subscribe(() => {
104
+ settle ??= setTimeout(publish, PROJECTION_SETTLE_MS);
105
+ });
106
+ activeCatalog.republish = () => {
107
+ published = void 0;
108
+ publish();
109
+ };
110
+ return () => {
111
+ if (settle) clearTimeout(settle);
112
+ unsubscribe();
113
+ activeCatalog.republish = void 0;
114
+ activeCatalog.current = void 0;
115
+ activeCatalog.sessionId = void 0;
116
+ catalog.dispose();
117
+ };
118
+ });
119
+ }
120
+ //#endregion
121
+ export { createMinorModePiRuntime };
122
+
123
+ //# sourceMappingURL=catalogRuntime.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogRuntime.mjs","names":[],"sources":["../../src/controllers/catalogRuntime.ts"],"sourcesContent":["import { DOOM_CORDIS_SESSION_SERVICE, type DoomCordisSessionService } from '@agimon-ai/doompi-core/cordis-host';\nimport { type DoomNotificationLevel, readDoomNotificationService } from '@agimon-ai/doompi-core/notification';\nimport type { PiPluginContributions } from '@agimon-ai/doompi-core/pi-extension';\nimport {\n DOOM_TRANSITION_SERVICE,\n requireDoomTransitionCoordinator,\n type TransitionSource,\n} from '@agimon-ai/doompi-core/transition';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport {\n DOOM_MINOR_MODE_CATALOG_SERVICE,\n DOOM_MINOR_MODE_ENTRY_TYPE,\n type MinorModeActionResponse,\n type MinorModeCatalogService,\n} from '../schemas/mode';\nimport { createMinorModeCatalogHost } from '../services/catalog';\nimport { projectMinorModes } from '../services/projection';\nimport { consumeMinorModeReloadHandoff, discardMinorModeReloadHandoff } from '../services/reloadHandoff';\nimport { registerMinorModeCommand } from './minorModeCommand';\n\n/** Registrations and state flips arrive in bursts; one entry covers a burst. */\nconst PROJECTION_SETTLE_MS = 50;\n/**\n * Pi's rpc mode subscribes to session events only after bindExtensions()\n * returns, which is after session_start has run, so an entry journaled during\n * startup never reaches a client. A publish deferred past that point does.\n */\nconst BOOT_PUBLISH_DELAY_MS = 500;\n\ninterface CatalogBinding {\n current: MinorModeCatalogService | undefined;\n /** Journals the projection even if unchanged; set while a session is bound. */\n republish?: () => void;\n /**\n * The bound session, which the detail store is keyed by.\n *\n * The server launches the agent with `--session-id`, so this is the same id\n * the cockpit and the session API know the session by, and a browser asking\n * for a row's detail looks under the file this session wrote.\n */\n sessionId?: string;\n}\n\nfunction notify(cordis: Context, context: ExtensionContext, body: string, level: DoomNotificationLevel): void {\n const service = readDoomNotificationService(cordis);\n if (service) {\n try {\n void Promise.resolve(service.request({ body, level })).catch(() => undefined);\n } catch {\n // Notification delivery is best effort and does not fall back after routing.\n }\n return;\n }\n context.ui.notify(body, level);\n}\n\nfunction transitionSource(requesterSource: string): TransitionSource {\n if (requesterSource.includes('voice')) return 'voice';\n if (requesterSource.includes('leader')) return 'leader';\n if (requesterSource.includes('ui')) return 'ui';\n return 'system';\n}\n\n/**\n * The minor modes that are actually on, for the composition panel.\n *\n * Read from the bound catalog at publish time rather than passed in, because a\n * mode switching on is one of the reasons a publish happens at all, and a\n * remembered list would describe the composition before the switch.\n */\nexport function createMinorModePiRuntime(pi: ExtensionAPI): PiPluginContributions {\n // The command outlives any one session: it is registered once and reads the\n // catalog binding the session-scoped inject below sets and clears.\n const activeCatalog: CatalogBinding = { current: undefined };\n registerMinorModeCommand(pi, () => activeCatalog.current);\n // The composition is only complete once every extension has registered, so\n // the inventory is read on the same deferred tick the catalog republishes on.\n pi.on('session_start', () => {\n setTimeout(() => {\n activeCatalog.republish?.();\n }, BOOT_PUBLISH_DELAY_MS);\n });\n return { services: [(cordis: Context) => modeCatalogPlugin(cordis, pi, activeCatalog)] };\n}\n\nfunction modeCatalogPlugin(\n cordis: Context,\n pi: Pick<ExtensionAPI, 'appendEntry'>,\n activeCatalog: CatalogBinding,\n): void {\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE, DOOM_TRANSITION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const context = session.context;\n const coordinator = requireDoomTransitionCoordinator(sessionContext);\n const reloadSession = session.reason === 'reload';\n const sessionId = session.sessionId;\n const restoreSnapshot = reloadSession ? consumeMinorModeReloadHandoff(sessionId) : undefined;\n if (!reloadSession) discardMinorModeReloadHandoff(sessionId);\n const sessionKind = context.hasUI && context.mode === 'tui' ? 'tui' : 'headless';\n const catalog: MinorModeCatalogService = createMinorModeCatalogHost({\n sessionKind,\n context,\n restoreSnapshot,\n onRestorationError(error) {\n notify(\n sessionContext,\n context,\n `Could not restore a minor mode after reload: ${error instanceof Error ? error.message : String(error)}`,\n 'warning',\n );\n },\n async routeInvocation(request, requesterSource, invoke) {\n let response: MinorModeActionResponse | undefined;\n const result = await coordinator.execute(\n {\n sessionId: context.sessionManager.getSessionId(),\n hostGeneration: coordinator.hostGeneration,\n operationId: request.operationId,\n source: transitionSource(requesterSource),\n target: { axis: 'live', capability: 'minor-mode' },\n },\n async () => {\n response = await invoke();\n return 'applied';\n },\n );\n if (result.outcome !== 'applied' || !response) {\n throw new Error(`Minor-mode transition was ${result.outcome}: ${result.diagnostics.join(', ')}`);\n }\n return response;\n },\n });\n sessionContext.provide(DOOM_MINOR_MODE_CATALOG_SERVICE, catalog);\n activeCatalog.current = catalog;\n activeCatalog.sessionId = sessionId;\n\n // Journal the projection so RPC clients see catalog state live and on\n // replay; identical projections are skipped so detail churn stays cheap.\n let published: string | undefined;\n let settle: NodeJS.Timeout | undefined;\n const publish = (): void => {\n settle = undefined;\n const projection = projectMinorModes(catalog.getSnapshot(), sessionKind);\n const serialized = JSON.stringify(projection);\n if (serialized === published) return;\n published = serialized;\n pi.appendEntry(DOOM_MINOR_MODE_ENTRY_TYPE, projection);\n // A mode changing is the usual reason the toolbox changed too.\n };\n const unsubscribe = catalog.subscribe(() => {\n settle ??= setTimeout(publish, PROJECTION_SETTLE_MS);\n });\n activeCatalog.republish = () => {\n published = undefined;\n publish();\n };\n\n return () => {\n if (settle) clearTimeout(settle);\n unsubscribe();\n activeCatalog.republish = undefined;\n activeCatalog.current = undefined;\n activeCatalog.sessionId = undefined;\n catalog.dispose();\n };\n });\n}\n"],"mappings":";;;;;;;;;;AAuBA,MAAM,uBAAuB;;;;;;AAM7B,MAAM,wBAAwB;AAgB9B,SAAS,OAAO,QAAiB,SAA2B,MAAc,OAAoC;CAC5G,MAAM,UAAU,4BAA4B,MAAM;CAClD,IAAI,SAAS;EACX,IAAI;GACF,QAAa,QAAQ,QAAQ,QAAQ;IAAE;IAAM;GAAM,CAAC,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;EAC9E,QAAQ,CAER;EACA;CACF;CACA,QAAQ,GAAG,OAAO,MAAM,KAAK;AAC/B;AAEA,SAAS,iBAAiB,iBAA2C;CACnE,IAAI,gBAAgB,SAAS,OAAO,GAAG,OAAO;CAC9C,IAAI,gBAAgB,SAAS,QAAQ,GAAG,OAAO;CAC/C,IAAI,gBAAgB,SAAS,IAAI,GAAG,OAAO;CAC3C,OAAO;AACT;;;;;;;;AASA,SAAgB,yBAAyB,IAAyC;CAGhF,MAAM,gBAAgC,EAAE,SAAS,KAAA,EAAU;CAC3D,yBAAyB,UAAU,cAAc,OAAO;CAGxD,GAAG,GAAG,uBAAuB;EAC3B,iBAAiB;GACf,cAAc,YAAY;EAC5B,GAAG,qBAAqB;CAC1B,CAAC;CACD,OAAO,EAAE,UAAU,EAAE,WAAoB,kBAAkB,QAAQ,IAAI,aAAa,CAAC,EAAE;AACzF;AAEA,SAAS,kBACP,QACA,IACA,eACM;CACN,OAAO,OAAO,CAAC,6BAA6B,uBAAuB,IAAI,mBAAmB;EACxF,MAAM,UAAU,eAAe,IAAI,2BAA2B;EAC9D,MAAM,UAAU,QAAQ;EACxB,MAAM,cAAc,iCAAiC,cAAc;EACnE,MAAM,gBAAgB,QAAQ,WAAW;EACzC,MAAM,YAAY,QAAQ;EAC1B,MAAM,kBAAkB,gBAAgB,8BAA8B,SAAS,IAAI,KAAA;EACnF,IAAI,CAAC,eAAe,8BAA8B,SAAS;EAC3D,MAAM,cAAc,QAAQ,SAAS,QAAQ,SAAS,QAAQ,QAAQ;EACtE,MAAM,UAAmC,2BAA2B;GAClE;GACA;GACA;GACA,mBAAmB,OAAO;IACxB,OACE,gBACA,SACA,gDAAgD,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KACrG,SACF;GACF;GACA,MAAM,gBAAgB,SAAS,iBAAiB,QAAQ;IACtD,IAAI;IACJ,MAAM,SAAS,MAAM,YAAY,QAC/B;KACE,WAAW,QAAQ,eAAe,aAAa;KAC/C,gBAAgB,YAAY;KAC5B,aAAa,QAAQ;KACrB,QAAQ,iBAAiB,eAAe;KACxC,QAAQ;MAAE,MAAM;MAAQ,YAAY;KAAa;IACnD,GACA,YAAY;KACV,WAAW,MAAM,OAAO;KACxB,OAAO;IACT,CACF;IACA,IAAI,OAAO,YAAY,aAAa,CAAC,UACnC,MAAM,IAAI,MAAM,6BAA6B,OAAO,QAAQ,IAAI,OAAO,YAAY,KAAK,IAAI,GAAG;IAEjG,OAAO;GACT;EACF,CAAC;EACD,eAAe,QAAQ,iCAAiC,OAAO;EAC/D,cAAc,UAAU;EACxB,cAAc,YAAY;EAI1B,IAAI;EACJ,IAAI;EACJ,MAAM,gBAAsB;GAC1B,SAAS,KAAA;GACT,MAAM,aAAa,kBAAkB,QAAQ,YAAY,GAAG,WAAW;GACvE,MAAM,aAAa,KAAK,UAAU,UAAU;GAC5C,IAAI,eAAe,WAAW;GAC9B,YAAY;GACZ,GAAG,YAAY,4BAA4B,UAAU;EAEvD;EACA,MAAM,cAAc,QAAQ,gBAAgB;GAC1C,WAAW,WAAW,SAAS,oBAAoB;EACrD,CAAC;EACD,cAAc,kBAAkB;GAC9B,YAAY,KAAA;GACZ,QAAQ;EACV;EAEA,aAAa;GACX,IAAI,QAAQ,aAAa,MAAM;GAC/B,YAAY;GACZ,cAAc,YAAY,KAAA;GAC1B,cAAc,UAAU,KAAA;GACxB,cAAc,YAAY,KAAA;GAC1B,QAAQ,QAAQ;EAClB;CACF,CAAC;AACH"}
@@ -0,0 +1,7 @@
1
+ const require_catalogRuntime = require("../controllers/catalogRuntime.cjs");
2
+ //#region src/extensions/pi.ts
3
+ var pi_default = (0, require("@agimon-ai/doompi-core/pi-extension").definePiExtension)("@agimon-ai/doompi-minor-mode", ({ pi }) => require_catalogRuntime.createMinorModePiRuntime(pi));
4
+ //#endregion
5
+ module.exports = pi_default;
6
+
7
+ //# sourceMappingURL=pi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.cjs","names":["definePiExtension","createMinorModePiRuntime"],"sources":["../../src/extensions/pi.ts"],"sourcesContent":["import { definePiExtension } from '@agimon-ai/doompi-core/pi-extension';\n\nimport { createMinorModePiRuntime } from '../controllers/catalogRuntime';\nexport default definePiExtension('@agimon-ai/doompi-minor-mode', ({ pi }) => createMinorModePiRuntime(pi));\n"],"mappings":";;AAGA,IAAA,cAAA,gDAAeA,CAAAA,CAAAA,kBAAAA,CAAkB,iCAAiC,EAAE,SAASC,uBAAAA,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ //#region src/extensions/pi.d.ts
2
+ declare const _default: import("@agimon-ai/doompi-core/runtime-pi-extension").DefinedPiExtension<undefined>;
3
+ export = _default;
4
+ //# sourceMappingURL=pi.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.cts","names":[],"sources":["../../src/extensions/pi.ts"],"mappings":""}
@@ -0,0 +1,5 @@
1
+ //#region src/extensions/pi.d.ts
2
+ declare const _default: import("@agimon-ai/doompi-core/runtime-pi-extension").DefinedPiExtension<undefined>;
3
+ //#endregion
4
+ export { _default as default };
5
+ //# sourceMappingURL=pi.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.mts","names":[],"sources":["../../src/extensions/pi.ts"],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { createMinorModePiRuntime } from "../controllers/catalogRuntime.mjs";
2
+ import { definePiExtension } from "@agimon-ai/doompi-core/pi-extension";
3
+ //#region src/extensions/pi.ts
4
+ var pi_default = definePiExtension("@agimon-ai/doompi-minor-mode", ({ pi }) => createMinorModePiRuntime(pi));
5
+ //#endregion
6
+ export { pi_default as default };
7
+
8
+ //# sourceMappingURL=pi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.mjs","names":[],"sources":["../../src/extensions/pi.ts"],"sourcesContent":["import { definePiExtension } from '@agimon-ai/doompi-core/pi-extension';\n\nimport { createMinorModePiRuntime } from '../controllers/catalogRuntime';\nexport default definePiExtension('@agimon-ai/doompi-minor-mode', ({ pi }) => createMinorModePiRuntime(pi));\n"],"mappings":";;;AAGA,IAAA,aAAe,kBAAkB,iCAAiC,EAAE,SAAS,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,85 @@
1
+ const require_mode = require("../mode.cjs");
2
+ const require_catalog = require("../catalog.cjs");
3
+ const require_index = require("../services/headlessCommand/index.cjs");
4
+ const require_projection = require("../projection.cjs");
5
+ //#region src/extensions/server.ts
6
+ var server_default = (0, require("@agimon-ai/doompi-core/server-facet").defineServerPlugin)({
7
+ name: "@agimon-ai/doompi-minor-mode",
8
+ session({ agent }) {
9
+ if (!agent) throw new Error("Minor modes require a session host");
10
+ let started = false;
11
+ let stopped = false;
12
+ let pending = Promise.resolve();
13
+ let published;
14
+ const publish = () => {
15
+ const operation = pending.then(async () => {
16
+ if (!started || stopped) return;
17
+ const projection = require_projection.projectMinorModes(catalog.getSnapshot(), "headless");
18
+ const key = JSON.stringify(projection);
19
+ if (key === published) return;
20
+ await agent.context.session.appendCustomEntry(require_mode.DOOM_MINOR_MODE_ENTRY_TYPE, projection);
21
+ published = key;
22
+ });
23
+ pending = operation.catch(() => void 0);
24
+ return operation;
25
+ };
26
+ const catalog = require_catalog.createMinorModeCatalogHost({
27
+ sessionKind: "headless",
28
+ context: { sessionManager: { getSessionId: () => agent.context.sessionId } },
29
+ async routeInvocation(_request, _source, invoke) {
30
+ agent.assertActive();
31
+ const response = await invoke();
32
+ await publish();
33
+ return response;
34
+ }
35
+ });
36
+ return {
37
+ commands: [require_index.headlessMinorModeCommand(catalog)],
38
+ services: [(context) => {
39
+ context.provide(require_mode.DOOM_MINOR_MODE_CATALOG_SERVICE, catalog);
40
+ context.effect(() => catalog.subscribe(() => {
41
+ publish().catch(async (error) => {
42
+ if (stopped) return;
43
+ await agent.context.client.notify({
44
+ body: `Minor-mode projection failed: ${String(error)}`,
45
+ level: "error"
46
+ });
47
+ });
48
+ }));
49
+ context.effect(() => agent.subscribeSelection(publish));
50
+ }],
51
+ hooks: [{
52
+ event: "session_shutdown",
53
+ async handle() {
54
+ stopped = true;
55
+ await pending;
56
+ }
57
+ }, {
58
+ event: "session_start",
59
+ async handle() {
60
+ const entries = await agent.context.session.entries({
61
+ type: "custom",
62
+ customType: require_mode.DOOM_MINOR_MODE_ENTRY_TYPE
63
+ });
64
+ const values = require_projection.restoreMinorModeSelection(entries);
65
+ if (values) await agent.changeSelection({
66
+ axis: "state",
67
+ key: "minor-mode",
68
+ values
69
+ });
70
+ started = true;
71
+ await publish();
72
+ }
73
+ }],
74
+ async onDispose() {
75
+ stopped = true;
76
+ catalog.dispose();
77
+ await pending;
78
+ }
79
+ };
80
+ }
81
+ });
82
+ //#endregion
83
+ module.exports = server_default;
84
+
85
+ //# sourceMappingURL=server.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.cjs","names":["defineServerPlugin","projectMinorModes","DOOM_MINOR_MODE_ENTRY_TYPE","createMinorModeCatalogHost","headlessMinorModeCommand","DOOM_MINOR_MODE_CATALOG_SERVICE","restoreMinorModeSelection"],"sources":["../../src/extensions/server.ts"],"sourcesContent":["import { defineServerPlugin } from '@agimon-ai/doompi-core/server-facet';\n\nimport { DOOM_MINOR_MODE_CATALOG_SERVICE, DOOM_MINOR_MODE_ENTRY_TYPE } from '../schemas/mode';\nimport { createMinorModeCatalogHost } from '../services/catalog';\nimport { headlessMinorModeCommand } from '../services/headlessCommand';\nimport { projectMinorModes, restoreMinorModeSelection } from '../services/projection';\n\nexport default defineServerPlugin({\n name: '@agimon-ai/doompi-minor-mode',\n session({ agent }) {\n if (!agent) throw new Error('Minor modes require a session host');\n let started = false;\n let stopped = false;\n let pending = Promise.resolve();\n let published: string | undefined;\n const publish = (): Promise<void> => {\n const operation = pending.then(async () => {\n if (!started || stopped) return;\n const projection = projectMinorModes(catalog.getSnapshot(), 'headless');\n const key = JSON.stringify(projection);\n if (key === published) return;\n await agent.context.session.appendCustomEntry(DOOM_MINOR_MODE_ENTRY_TYPE, projection);\n published = key;\n });\n pending = operation.catch(() => undefined);\n return operation;\n };\n const catalog = createMinorModeCatalogHost({\n sessionKind: 'headless',\n context: { sessionManager: { getSessionId: () => agent.context.sessionId } },\n async routeInvocation(_request, _source, invoke) {\n agent.assertActive();\n const response = await invoke();\n await publish();\n return response;\n },\n });\n return {\n commands: [headlessMinorModeCommand(catalog)],\n services: [\n (context) => {\n context.provide(DOOM_MINOR_MODE_CATALOG_SERVICE, catalog);\n context.effect(() =>\n catalog.subscribe(() => {\n void publish().catch(async (error) => {\n if (stopped) return;\n await agent.context.client.notify({\n body: `Minor-mode projection failed: ${String(error)}`,\n level: 'error',\n });\n });\n }),\n );\n context.effect(() => agent.subscribeSelection(publish));\n },\n ],\n hooks: [\n {\n event: 'session_shutdown',\n async handle() {\n stopped = true;\n await pending;\n },\n },\n {\n event: 'session_start',\n async handle() {\n const entries = await agent.context.session.entries({\n type: 'custom',\n customType: DOOM_MINOR_MODE_ENTRY_TYPE,\n });\n const values = restoreMinorModeSelection(entries);\n if (values) await agent.changeSelection({ axis: 'state', key: 'minor-mode', values });\n started = true;\n await publish();\n },\n },\n ],\n async onDispose() {\n stopped = true;\n catalog.dispose();\n await pending;\n },\n };\n },\n});\n"],"mappings":";;;;;AAOA,IAAA,kBAAA,gDAAeA,CAAAA,CAAAA,mBAAAA,CAAmB;CAChC,MAAM;CACN,QAAQ,EAAE,SAAS;EACjB,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,oCAAoC;EAChE,IAAI,UAAU;EACd,IAAI,UAAU;EACd,IAAI,UAAU,QAAQ,QAAQ;EAC9B,IAAI;EACJ,MAAM,gBAA+B;GACnC,MAAM,YAAY,QAAQ,KAAK,YAAY;IACzC,IAAI,CAAC,WAAW,SAAS;IACzB,MAAM,aAAaC,mBAAAA,kBAAkB,QAAQ,YAAY,GAAG,UAAU;IACtE,MAAM,MAAM,KAAK,UAAU,UAAU;IACrC,IAAI,QAAQ,WAAW;IACvB,MAAM,MAAM,QAAQ,QAAQ,kBAAkBC,aAAAA,4BAA4B,UAAU;IACpF,YAAY;GACd,CAAC;GACD,UAAU,UAAU,YAAY,KAAA,CAAS;GACzC,OAAO;EACT;EACA,MAAM,UAAUC,gBAAAA,2BAA2B;GACzC,aAAa;GACb,SAAS,EAAE,gBAAgB,EAAE,oBAAoB,MAAM,QAAQ,UAAU,EAAE;GAC3E,MAAM,gBAAgB,UAAU,SAAS,QAAQ;IAC/C,MAAM,aAAa;IACnB,MAAM,WAAW,MAAM,OAAO;IAC9B,MAAM,QAAQ;IACd,OAAO;GACT;EACF,CAAC;EACD,OAAO;GACL,UAAU,CAACC,cAAAA,yBAAyB,OAAO,CAAC;GAC5C,UAAU,EACP,YAAY;IACX,QAAQ,QAAQC,aAAAA,iCAAiC,OAAO;IACxD,QAAQ,aACN,QAAQ,gBAAgB;KACtB,QAAa,CAAC,CAAC,MAAM,OAAO,UAAU;MACpC,IAAI,SAAS;MACb,MAAM,MAAM,QAAQ,OAAO,OAAO;OAChC,MAAM,iCAAiC,OAAO,KAAK;OACnD,OAAO;MACT,CAAC;KACH,CAAC;IACH,CAAC,CACH;IACA,QAAQ,aAAa,MAAM,mBAAmB,OAAO,CAAC;GACxD,CACF;GACA,OAAO,CACL;IACE,OAAO;IACP,MAAM,SAAS;KACb,UAAU;KACV,MAAM;IACR;GACF,GACA;IACE,OAAO;IACP,MAAM,SAAS;KACb,MAAM,UAAU,MAAM,MAAM,QAAQ,QAAQ,QAAQ;MAClD,MAAM;MACN,YAAYH,aAAAA;KACd,CAAC;KACD,MAAM,SAASI,mBAAAA,0BAA0B,OAAO;KAChD,IAAI,QAAQ,MAAM,MAAM,gBAAgB;MAAE,MAAM;MAAS,KAAK;MAAc;KAAO,CAAC;KACpF,UAAU;KACV,MAAM,QAAQ;IAChB;GACF,CACF;GACA,MAAM,YAAY;IAChB,UAAU;IACV,QAAQ,QAAQ;IAChB,MAAM;GACR;EACF;CACF;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ //#region src/extensions/server.d.ts
2
+ declare const _default: import("@agimon-ai/doompi-core/server-facet").DoomServerFacet;
3
+ export = _default;
4
+ //# sourceMappingURL=server.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.cts","names":[],"sources":["../../src/extensions/server.ts"],"mappings":""}
@@ -0,0 +1,5 @@
1
+ //#region src/extensions/server.d.ts
2
+ declare const _default: import("@agimon-ai/doompi-core/server-facet").DoomServerFacet;
3
+ //#endregion
4
+ export { _default as default };
5
+ //# sourceMappingURL=server.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.mts","names":[],"sources":["../../src/extensions/server.ts"],"mappings":""}
@@ -0,0 +1,86 @@
1
+ import { DOOM_MINOR_MODE_CATALOG_SERVICE, DOOM_MINOR_MODE_ENTRY_TYPE } from "../mode.mjs";
2
+ import { createMinorModeCatalogHost } from "../catalog.mjs";
3
+ import { headlessMinorModeCommand } from "../services/headlessCommand/index.mjs";
4
+ import { projectMinorModes, restoreMinorModeSelection } from "../projection.mjs";
5
+ import { defineServerPlugin } from "@agimon-ai/doompi-core/server-facet";
6
+ //#region src/extensions/server.ts
7
+ var server_default = defineServerPlugin({
8
+ name: "@agimon-ai/doompi-minor-mode",
9
+ session({ agent }) {
10
+ if (!agent) throw new Error("Minor modes require a session host");
11
+ let started = false;
12
+ let stopped = false;
13
+ let pending = Promise.resolve();
14
+ let published;
15
+ const publish = () => {
16
+ const operation = pending.then(async () => {
17
+ if (!started || stopped) return;
18
+ const projection = projectMinorModes(catalog.getSnapshot(), "headless");
19
+ const key = JSON.stringify(projection);
20
+ if (key === published) return;
21
+ await agent.context.session.appendCustomEntry(DOOM_MINOR_MODE_ENTRY_TYPE, projection);
22
+ published = key;
23
+ });
24
+ pending = operation.catch(() => void 0);
25
+ return operation;
26
+ };
27
+ const catalog = createMinorModeCatalogHost({
28
+ sessionKind: "headless",
29
+ context: { sessionManager: { getSessionId: () => agent.context.sessionId } },
30
+ async routeInvocation(_request, _source, invoke) {
31
+ agent.assertActive();
32
+ const response = await invoke();
33
+ await publish();
34
+ return response;
35
+ }
36
+ });
37
+ return {
38
+ commands: [headlessMinorModeCommand(catalog)],
39
+ services: [(context) => {
40
+ context.provide(DOOM_MINOR_MODE_CATALOG_SERVICE, catalog);
41
+ context.effect(() => catalog.subscribe(() => {
42
+ publish().catch(async (error) => {
43
+ if (stopped) return;
44
+ await agent.context.client.notify({
45
+ body: `Minor-mode projection failed: ${String(error)}`,
46
+ level: "error"
47
+ });
48
+ });
49
+ }));
50
+ context.effect(() => agent.subscribeSelection(publish));
51
+ }],
52
+ hooks: [{
53
+ event: "session_shutdown",
54
+ async handle() {
55
+ stopped = true;
56
+ await pending;
57
+ }
58
+ }, {
59
+ event: "session_start",
60
+ async handle() {
61
+ const entries = await agent.context.session.entries({
62
+ type: "custom",
63
+ customType: DOOM_MINOR_MODE_ENTRY_TYPE
64
+ });
65
+ const values = restoreMinorModeSelection(entries);
66
+ if (values) await agent.changeSelection({
67
+ axis: "state",
68
+ key: "minor-mode",
69
+ values
70
+ });
71
+ started = true;
72
+ await publish();
73
+ }
74
+ }],
75
+ async onDispose() {
76
+ stopped = true;
77
+ catalog.dispose();
78
+ await pending;
79
+ }
80
+ };
81
+ }
82
+ });
83
+ //#endregion
84
+ export { server_default as default };
85
+
86
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.mjs","names":[],"sources":["../../src/extensions/server.ts"],"sourcesContent":["import { defineServerPlugin } from '@agimon-ai/doompi-core/server-facet';\n\nimport { DOOM_MINOR_MODE_CATALOG_SERVICE, DOOM_MINOR_MODE_ENTRY_TYPE } from '../schemas/mode';\nimport { createMinorModeCatalogHost } from '../services/catalog';\nimport { headlessMinorModeCommand } from '../services/headlessCommand';\nimport { projectMinorModes, restoreMinorModeSelection } from '../services/projection';\n\nexport default defineServerPlugin({\n name: '@agimon-ai/doompi-minor-mode',\n session({ agent }) {\n if (!agent) throw new Error('Minor modes require a session host');\n let started = false;\n let stopped = false;\n let pending = Promise.resolve();\n let published: string | undefined;\n const publish = (): Promise<void> => {\n const operation = pending.then(async () => {\n if (!started || stopped) return;\n const projection = projectMinorModes(catalog.getSnapshot(), 'headless');\n const key = JSON.stringify(projection);\n if (key === published) return;\n await agent.context.session.appendCustomEntry(DOOM_MINOR_MODE_ENTRY_TYPE, projection);\n published = key;\n });\n pending = operation.catch(() => undefined);\n return operation;\n };\n const catalog = createMinorModeCatalogHost({\n sessionKind: 'headless',\n context: { sessionManager: { getSessionId: () => agent.context.sessionId } },\n async routeInvocation(_request, _source, invoke) {\n agent.assertActive();\n const response = await invoke();\n await publish();\n return response;\n },\n });\n return {\n commands: [headlessMinorModeCommand(catalog)],\n services: [\n (context) => {\n context.provide(DOOM_MINOR_MODE_CATALOG_SERVICE, catalog);\n context.effect(() =>\n catalog.subscribe(() => {\n void publish().catch(async (error) => {\n if (stopped) return;\n await agent.context.client.notify({\n body: `Minor-mode projection failed: ${String(error)}`,\n level: 'error',\n });\n });\n }),\n );\n context.effect(() => agent.subscribeSelection(publish));\n },\n ],\n hooks: [\n {\n event: 'session_shutdown',\n async handle() {\n stopped = true;\n await pending;\n },\n },\n {\n event: 'session_start',\n async handle() {\n const entries = await agent.context.session.entries({\n type: 'custom',\n customType: DOOM_MINOR_MODE_ENTRY_TYPE,\n });\n const values = restoreMinorModeSelection(entries);\n if (values) await agent.changeSelection({ axis: 'state', key: 'minor-mode', values });\n started = true;\n await publish();\n },\n },\n ],\n async onDispose() {\n stopped = true;\n catalog.dispose();\n await pending;\n },\n };\n },\n});\n"],"mappings":";;;;;;AAOA,IAAA,iBAAe,mBAAmB;CAChC,MAAM;CACN,QAAQ,EAAE,SAAS;EACjB,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,oCAAoC;EAChE,IAAI,UAAU;EACd,IAAI,UAAU;EACd,IAAI,UAAU,QAAQ,QAAQ;EAC9B,IAAI;EACJ,MAAM,gBAA+B;GACnC,MAAM,YAAY,QAAQ,KAAK,YAAY;IACzC,IAAI,CAAC,WAAW,SAAS;IACzB,MAAM,aAAa,kBAAkB,QAAQ,YAAY,GAAG,UAAU;IACtE,MAAM,MAAM,KAAK,UAAU,UAAU;IACrC,IAAI,QAAQ,WAAW;IACvB,MAAM,MAAM,QAAQ,QAAQ,kBAAkB,4BAA4B,UAAU;IACpF,YAAY;GACd,CAAC;GACD,UAAU,UAAU,YAAY,KAAA,CAAS;GACzC,OAAO;EACT;EACA,MAAM,UAAU,2BAA2B;GACzC,aAAa;GACb,SAAS,EAAE,gBAAgB,EAAE,oBAAoB,MAAM,QAAQ,UAAU,EAAE;GAC3E,MAAM,gBAAgB,UAAU,SAAS,QAAQ;IAC/C,MAAM,aAAa;IACnB,MAAM,WAAW,MAAM,OAAO;IAC9B,MAAM,QAAQ;IACd,OAAO;GACT;EACF,CAAC;EACD,OAAO;GACL,UAAU,CAAC,yBAAyB,OAAO,CAAC;GAC5C,UAAU,EACP,YAAY;IACX,QAAQ,QAAQ,iCAAiC,OAAO;IACxD,QAAQ,aACN,QAAQ,gBAAgB;KACtB,QAAa,CAAC,CAAC,MAAM,OAAO,UAAU;MACpC,IAAI,SAAS;MACb,MAAM,MAAM,QAAQ,OAAO,OAAO;OAChC,MAAM,iCAAiC,OAAO,KAAK;OACnD,OAAO;MACT,CAAC;KACH,CAAC;IACH,CAAC,CACH;IACA,QAAQ,aAAa,MAAM,mBAAmB,OAAO,CAAC;GACxD,CACF;GACA,OAAO,CACL;IACE,OAAO;IACP,MAAM,SAAS;KACb,UAAU;KACV,MAAM;IACR;GACF,GACA;IACE,OAAO;IACP,MAAM,SAAS;KACb,MAAM,UAAU,MAAM,MAAM,QAAQ,QAAQ,QAAQ;MAClD,MAAM;MACN,YAAY;KACd,CAAC;KACD,MAAM,SAAS,0BAA0B,OAAO;KAChD,IAAI,QAAQ,MAAM,MAAM,gBAAgB;MAAE,MAAM;MAAS,KAAK;MAAc;KAAO,CAAC;KACpF,UAAU;KACV,MAAM,QAAQ;IAChB;GACF,CACF;GACA,MAAM,YAAY;IAChB,UAAU;IACV,QAAQ,QAAQ;IAChB,MAAM;GACR;EACF;CACF;AACF,CAAC"}
package/dist/index.cjs ADDED
@@ -0,0 +1,53 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_mode = require("./mode.cjs");
3
+ const require_index = require("./services/validation/index.cjs");
4
+ const require_index$1 = require("./services/headlessCommand/index.cjs");
5
+ const require_index$2 = require("./services/client/index.cjs");
6
+ const require_owner = require("./owner.cjs");
7
+ const require_mode_definition = require("./mode-definition.cjs");
8
+ const require_index$3 = require("./services/piRegistration/index.cjs");
9
+ const require_index$4 = require("./services/serverRegistration/index.cjs");
10
+ exports.DOOM_MINOR_MODE_CATALOG_SERVICE = require_mode.DOOM_MINOR_MODE_CATALOG_SERVICE;
11
+ exports.DOOM_MINOR_MODE_ENTRY_TYPE = require_mode.DOOM_MINOR_MODE_ENTRY_TYPE;
12
+ exports.MINOR_MODE_ACTION_TIMEOUT_MS = require_mode.MINOR_MODE_ACTION_TIMEOUT_MS;
13
+ exports.MINOR_MODE_CATALOG_SOURCE = require_mode.MINOR_MODE_CATALOG_SOURCE;
14
+ exports.MINOR_MODE_ERROR_CODE = require_mode.MINOR_MODE_ERROR_CODE;
15
+ exports.MINOR_MODE_MAX_ACTIONS = require_mode.MINOR_MODE_MAX_ACTIONS;
16
+ exports.MINOR_MODE_MAX_ARGUMENT_LENGTH = require_mode.MINOR_MODE_MAX_ARGUMENT_LENGTH;
17
+ exports.MINOR_MODE_MAX_ENUM_CHOICES = require_mode.MINOR_MODE_MAX_ENUM_CHOICES;
18
+ exports.MINOR_MODE_MAX_PARAMETERS = require_mode.MINOR_MODE_MAX_PARAMETERS;
19
+ exports.MINOR_MODE_MAX_RECORDS = require_mode.MINOR_MODE_MAX_RECORDS;
20
+ exports.MINOR_MODE_TOOL_NAME = require_mode.MINOR_MODE_TOOL_NAME;
21
+ exports.MinorModeActionAvailabilitySchema = require_mode.MinorModeActionAvailabilitySchema;
22
+ exports.MinorModeActionDescriptorSchema = require_mode.MinorModeActionDescriptorSchema;
23
+ exports.MinorModeActionParameterSchema = require_mode.MinorModeActionParameterSchema;
24
+ exports.MinorModeActionRequestSchema = require_mode.MinorModeActionRequestSchema;
25
+ exports.MinorModeActionResponseSchema = require_mode.MinorModeActionResponseSchema;
26
+ exports.MinorModeActivationSchema = require_mode.MinorModeActivationSchema;
27
+ exports.MinorModeArgumentsSchema = require_mode.MinorModeArgumentsSchema;
28
+ exports.MinorModeCatalogSnapshotSchema = require_mode.MinorModeCatalogSnapshotSchema;
29
+ exports.MinorModeConditionSchema = require_mode.MinorModeConditionSchema;
30
+ exports.MinorModeDescriptorSchema = require_mode.MinorModeDescriptorSchema;
31
+ exports.MinorModeIdSchema = require_mode.MinorModeIdSchema;
32
+ exports.MinorModeParameterNameSchema = require_mode.MinorModeParameterNameSchema;
33
+ exports.MinorModeRecordSchema = require_mode.MinorModeRecordSchema;
34
+ exports.MinorModeRegistrationRefSchema = require_mode.MinorModeRegistrationRefSchema;
35
+ exports.MinorModeScalarSchema = require_mode.MinorModeScalarSchema;
36
+ exports.MinorModeSessionKindSchema = require_mode.MinorModeSessionKindSchema;
37
+ exports.MinorModeSourceSchema = require_mode.MinorModeSourceSchema;
38
+ exports.MinorModeStateSchema = require_mode.MinorModeStateSchema;
39
+ exports.MinorModeToolInputSchema = require_mode.MinorModeToolInputSchema;
40
+ exports.MinorModeToolResultSchema = require_mode.MinorModeToolResultSchema;
41
+ exports.ModeTextColorSchema = require_mode.ModeTextColorSchema;
42
+ exports.createMinorModeCatalogClient = require_index$2.createMinorModeCatalogClient;
43
+ exports.defineMinorMode = require_mode_definition.defineMinorMode;
44
+ exports.headlessMinorModeCommand = require_index$1.headlessMinorModeCommand;
45
+ exports.minorModeKey = require_index.minorModeKey;
46
+ exports.minorModeRegistrationRef = require_index.minorModeRegistrationRef;
47
+ exports.piMinorModes = require_index$3.piMinorModes;
48
+ exports.readMinorModeCatalog = require_mode.readMinorModeCatalog;
49
+ exports.registerMinorModeOwner = require_owner.registerMinorModeOwner;
50
+ exports.requireMinorModeCatalog = require_mode.requireMinorModeCatalog;
51
+ exports.serverMinorModes = require_index$4.serverMinorModes;
52
+ exports.validateMinorModeActionArguments = require_index.validateMinorModeActionArguments;
53
+ exports.validateMinorModeDefinition = require_index.validateMinorModeDefinition;
@@ -0,0 +1,10 @@
1
+ import { 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, MinorModeActionAvailability, MinorModeActionAvailabilitySchema, MinorModeActionDescriptor, MinorModeActionDescriptorSchema, MinorModeActionParameter, MinorModeActionParameterSchema, MinorModeActionProjection, MinorModeActionRequest, MinorModeActionRequestSchema, MinorModeActionResponse, MinorModeActionResponseSchema, MinorModeActivation, MinorModeActivationSchema, MinorModeArguments, MinorModeArgumentsSchema, MinorModeCatalogService, MinorModeCatalogSnapshot, MinorModeCatalogSnapshotSchema, MinorModeCondition, MinorModeConditionSchema, MinorModeDescriptor, MinorModeDescriptorSchema, MinorModeIdSchema, MinorModeInvokeOptions, MinorModeOwnerActionContext, MinorModeOwnerActionResult, MinorModeOwnerDefinition, MinorModeOwnerHandle, MinorModeParameterNameSchema, MinorModeProjection, MinorModeRecord, MinorModeRecordProjection, MinorModeRecordSchema, MinorModeRegistrationRef, MinorModeRegistrationRefSchema, MinorModeScalar, MinorModeScalarSchema, MinorModeSessionKind, MinorModeSessionKindSchema, MinorModeSourceSchema, MinorModeState, MinorModeStateSchema, MinorModeToolInput, MinorModeToolInputSchema, MinorModeToolResultSchema, ModeTextColor, ModeTextColorSchema, readMinorModeCatalog, requireMinorModeCatalog } from "./mode.cjs";
2
+ import { MinorModeCatalogClient, createMinorModeCatalogClient } from "./services/client/index.cjs";
3
+ import { registerMinorModeOwner } from "./owner.cjs";
4
+ import { DefinedMinorMode, MinorModeDefinition, MinorModeExecution, MinorModeOwner, defineMinorMode } from "./mode-definition.cjs";
5
+ import { minorModeKey, minorModeRegistrationRef, validateMinorModeActionArguments, validateMinorModeDefinition } from "./services/validation/index.cjs";
6
+ import { PiMinorModeCollection, PiMinorModeContribution, piMinorModes } from "./services/piRegistration/index.cjs";
7
+ import { DoomHeadlessMinorMode } from "./schemas/headless.cjs";
8
+ import { serverMinorModes } from "./services/serverRegistration/index.cjs";
9
+ import { headlessMinorModeCommand } from "./services/headlessCommand/index.cjs";
10
+ 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, createMinorModeCatalogClient, defineMinorMode, headlessMinorModeCommand, minorModeKey, minorModeRegistrationRef, piMinorModes, readMinorModeCatalog, registerMinorModeOwner, requireMinorModeCatalog, serverMinorModes, validateMinorModeActionArguments, validateMinorModeDefinition };
@@ -0,0 +1,10 @@
1
+ import { 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, MinorModeActionAvailability, MinorModeActionAvailabilitySchema, MinorModeActionDescriptor, MinorModeActionDescriptorSchema, MinorModeActionParameter, MinorModeActionParameterSchema, MinorModeActionProjection, MinorModeActionRequest, MinorModeActionRequestSchema, MinorModeActionResponse, MinorModeActionResponseSchema, MinorModeActivation, MinorModeActivationSchema, MinorModeArguments, MinorModeArgumentsSchema, MinorModeCatalogService, MinorModeCatalogSnapshot, MinorModeCatalogSnapshotSchema, MinorModeCondition, MinorModeConditionSchema, MinorModeDescriptor, MinorModeDescriptorSchema, MinorModeIdSchema, MinorModeInvokeOptions, MinorModeOwnerActionContext, MinorModeOwnerActionResult, MinorModeOwnerDefinition, MinorModeOwnerHandle, MinorModeParameterNameSchema, MinorModeProjection, MinorModeRecord, MinorModeRecordProjection, MinorModeRecordSchema, MinorModeRegistrationRef, MinorModeRegistrationRefSchema, MinorModeScalar, MinorModeScalarSchema, MinorModeSessionKind, MinorModeSessionKindSchema, MinorModeSourceSchema, MinorModeState, MinorModeStateSchema, MinorModeToolInput, MinorModeToolInputSchema, MinorModeToolResultSchema, ModeTextColor, ModeTextColorSchema, readMinorModeCatalog, requireMinorModeCatalog } from "./mode.mjs";
2
+ import { MinorModeCatalogClient, createMinorModeCatalogClient } from "./services/client/index.mjs";
3
+ import { registerMinorModeOwner } from "./owner.mjs";
4
+ import { DefinedMinorMode, MinorModeDefinition, MinorModeExecution, MinorModeOwner, defineMinorMode } from "./mode-definition.mjs";
5
+ import { minorModeKey, minorModeRegistrationRef, validateMinorModeActionArguments, validateMinorModeDefinition } from "./services/validation/index.mjs";
6
+ import { PiMinorModeCollection, PiMinorModeContribution, piMinorModes } from "./services/piRegistration/index.mjs";
7
+ import { DoomHeadlessMinorMode } from "./schemas/headless.mjs";
8
+ import { serverMinorModes } from "./services/serverRegistration/index.mjs";
9
+ import { headlessMinorModeCommand } from "./services/headlessCommand/index.mjs";
10
+ 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, createMinorModeCatalogClient, defineMinorMode, headlessMinorModeCommand, minorModeKey, minorModeRegistrationRef, piMinorModes, readMinorModeCatalog, registerMinorModeOwner, requireMinorModeCatalog, serverMinorModes, validateMinorModeActionArguments, validateMinorModeDefinition };
package/dist/index.mjs ADDED
@@ -0,0 +1,9 @@
1
+ import { 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, readMinorModeCatalog, requireMinorModeCatalog } from "./mode.mjs";
2
+ import { minorModeKey, minorModeRegistrationRef, validateMinorModeActionArguments, validateMinorModeDefinition } from "./services/validation/index.mjs";
3
+ import { headlessMinorModeCommand } from "./services/headlessCommand/index.mjs";
4
+ import { createMinorModeCatalogClient } from "./services/client/index.mjs";
5
+ import { registerMinorModeOwner } from "./owner.mjs";
6
+ import { defineMinorMode } from "./mode-definition.mjs";
7
+ import { piMinorModes } from "./services/piRegistration/index.mjs";
8
+ import { serverMinorModes } from "./services/serverRegistration/index.mjs";
9
+ 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 };
@@ -0,0 +1,37 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_command = require("./constants/command.cjs");
3
+ const require_command$1 = require("./command.cjs");
4
+ //#region src/controllers/minorModeCommand.ts
5
+ function sessionKindOf(ctx) {
6
+ return ctx.hasUI && ctx.mode === "tui" ? "tui" : "headless";
7
+ }
8
+ /** Register the Pi prompt adapter for the shared minor-mode command behavior. */
9
+ function registerMinorModeCommand(pi, currentCatalog) {
10
+ pi.registerCommand(require_command$1.MINOR_MODE_COMMAND, {
11
+ description: require_command.MINOR_MODE_COMMAND_DESCRIPTION,
12
+ getArgumentCompletions: (prefix) => {
13
+ const query = prefix.trim().toLowerCase();
14
+ return (currentCatalog()?.list() ?? []).map((record) => record.descriptor.label.toLowerCase()).filter((label) => label.startsWith(query)).map((label) => ({
15
+ value: label,
16
+ label
17
+ }));
18
+ },
19
+ handler: (args, ctx) => require_command$1.executeMinorModeCommand(args, {
20
+ catalog: currentCatalog(),
21
+ kind: sessionKindOf(ctx),
22
+ ui: {
23
+ select: (title, options) => ctx.ui.select(title, [...options]),
24
+ input: (title, message) => ctx.ui.input(title, message),
25
+ confirm: (title, message) => ctx.ui.confirm(title, message),
26
+ notify: (message, level) => ctx.ui.notify(message, level)
27
+ }
28
+ })
29
+ });
30
+ }
31
+ //#endregion
32
+ exports.MINOR_MODE_COMMAND = require_command$1.MINOR_MODE_COMMAND;
33
+ exports.actionsFor = require_command$1.actionsFor;
34
+ exports.matchMinorMode = require_command$1.matchMinorMode;
35
+ exports.registerMinorModeCommand = registerMinorModeCommand;
36
+
37
+ //# sourceMappingURL=minor-mode-command.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minor-mode-command.cjs","names":["MINOR_MODE_COMMAND","MINOR_MODE_COMMAND_DESCRIPTION","executeMinorModeCommand"],"sources":["../src/controllers/minorModeCommand.ts"],"sourcesContent":["import type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport type { MinorModeCatalogService, MinorModeSessionKind } from '../schemas/mode';\nimport { executeMinorModeCommand, MINOR_MODE_COMMAND, MINOR_MODE_COMMAND_DESCRIPTION } from '../services/command';\n\nexport { actionsFor, matchMinorMode, MINOR_MODE_COMMAND } from '../services/command';\n\nfunction sessionKindOf(ctx: ExtensionContext): MinorModeSessionKind {\n return ctx.hasUI && ctx.mode === 'tui' ? 'tui' : 'headless';\n}\n\n/** Register the Pi prompt adapter for the shared minor-mode command behavior. */\nexport function registerMinorModeCommand(\n pi: ExtensionAPI,\n currentCatalog: () => MinorModeCatalogService | undefined,\n): void {\n pi.registerCommand(MINOR_MODE_COMMAND, {\n description: MINOR_MODE_COMMAND_DESCRIPTION,\n getArgumentCompletions: (prefix) => {\n const query = prefix.trim().toLowerCase();\n const records = currentCatalog()?.list() ?? [];\n return records\n .map((record) => record.descriptor.label.toLowerCase())\n .filter((label) => label.startsWith(query))\n .map((label) => ({ value: label, label }));\n },\n handler: (args, ctx) =>\n executeMinorModeCommand(args, {\n catalog: currentCatalog(),\n kind: sessionKindOf(ctx),\n ui: {\n select: (title, options) => ctx.ui.select(title, [...options]),\n input: (title, message) => ctx.ui.input(title, message),\n confirm: (title, message) => ctx.ui.confirm(title, message),\n notify: (message, level) => ctx.ui.notify(message, level),\n },\n }),\n });\n}\n"],"mappings":";;;;AAOA,SAAS,cAAc,KAA6C;CAClE,OAAO,IAAI,SAAS,IAAI,SAAS,QAAQ,QAAQ;AACnD;;AAGA,SAAgB,yBACd,IACA,gBACM;CACN,GAAG,gBAAgBA,kBAAAA,oBAAoB;EACrC,aAAaC,gBAAAA;EACb,yBAAyB,WAAW;GAClC,MAAM,QAAQ,OAAO,KAAK,CAAC,CAAC,YAAY;GAExC,QADgB,eAAe,CAAC,EAAE,KAAK,KAAK,CAAC,EAAA,CAE1C,KAAK,WAAW,OAAO,WAAW,MAAM,YAAY,CAAC,CAAC,CACtD,QAAQ,UAAU,MAAM,WAAW,KAAK,CAAC,CAAC,CAC1C,KAAK,WAAW;IAAE,OAAO;IAAO;GAAM,EAAE;EAC7C;EACA,UAAU,MAAM,QACdC,kBAAAA,wBAAwB,MAAM;GAC5B,SAAS,eAAe;GACxB,MAAM,cAAc,GAAG;GACvB,IAAI;IACF,SAAS,OAAO,YAAY,IAAI,GAAG,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7D,QAAQ,OAAO,YAAY,IAAI,GAAG,MAAM,OAAO,OAAO;IACtD,UAAU,OAAO,YAAY,IAAI,GAAG,QAAQ,OAAO,OAAO;IAC1D,SAAS,SAAS,UAAU,IAAI,GAAG,OAAO,SAAS,KAAK;GAC1D;EACF,CAAC;CACL,CAAC;AACH"}
@@ -0,0 +1,9 @@
1
+ import { MinorModeCatalogService } from "./mode.cjs";
2
+ import { MINOR_MODE_COMMAND, actionsFor, matchMinorMode } from "./command.cjs";
3
+ import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
4
+ //#region src/controllers/minorModeCommand.d.ts
5
+ /** Register the Pi prompt adapter for the shared minor-mode command behavior. */
6
+ export declare function registerMinorModeCommand(pi: ExtensionAPI, currentCatalog: () => MinorModeCatalogService | undefined): void;
7
+ //#endregion
8
+ export { MINOR_MODE_COMMAND, actionsFor, matchMinorMode };
9
+ //# sourceMappingURL=minor-mode-command.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minor-mode-command.d.cts","names":[],"sources":["../src/controllers/minorModeCommand.ts"],"mappings":";;;;;wBAYgB,yBACd,IAAI,cACJ,sBAAsB"}
@@ -0,0 +1,9 @@
1
+ import { MinorModeCatalogService } from "./mode.mjs";
2
+ import { MINOR_MODE_COMMAND, actionsFor, matchMinorMode } from "./command.mjs";
3
+ import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
4
+ //#region src/controllers/minorModeCommand.d.ts
5
+ /** Register the Pi prompt adapter for the shared minor-mode command behavior. */
6
+ export declare function registerMinorModeCommand(pi: ExtensionAPI, currentCatalog: () => MinorModeCatalogService | undefined): void;
7
+ //#endregion
8
+ export { MINOR_MODE_COMMAND, actionsFor, matchMinorMode };
9
+ //# sourceMappingURL=minor-mode-command.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minor-mode-command.d.mts","names":[],"sources":["../src/controllers/minorModeCommand.ts"],"mappings":";;;;;wBAYgB,yBACd,IAAI,cACJ,sBAAsB"}
@@ -0,0 +1,33 @@
1
+ import { MINOR_MODE_COMMAND_DESCRIPTION } from "./constants/command.mjs";
2
+ import { MINOR_MODE_COMMAND, actionsFor, executeMinorModeCommand, matchMinorMode } from "./command.mjs";
3
+ //#region src/controllers/minorModeCommand.ts
4
+ function sessionKindOf(ctx) {
5
+ return ctx.hasUI && ctx.mode === "tui" ? "tui" : "headless";
6
+ }
7
+ /** Register the Pi prompt adapter for the shared minor-mode command behavior. */
8
+ function registerMinorModeCommand(pi, currentCatalog) {
9
+ pi.registerCommand(MINOR_MODE_COMMAND, {
10
+ description: MINOR_MODE_COMMAND_DESCRIPTION,
11
+ getArgumentCompletions: (prefix) => {
12
+ const query = prefix.trim().toLowerCase();
13
+ return (currentCatalog()?.list() ?? []).map((record) => record.descriptor.label.toLowerCase()).filter((label) => label.startsWith(query)).map((label) => ({
14
+ value: label,
15
+ label
16
+ }));
17
+ },
18
+ handler: (args, ctx) => executeMinorModeCommand(args, {
19
+ catalog: currentCatalog(),
20
+ kind: sessionKindOf(ctx),
21
+ ui: {
22
+ select: (title, options) => ctx.ui.select(title, [...options]),
23
+ input: (title, message) => ctx.ui.input(title, message),
24
+ confirm: (title, message) => ctx.ui.confirm(title, message),
25
+ notify: (message, level) => ctx.ui.notify(message, level)
26
+ }
27
+ })
28
+ });
29
+ }
30
+ //#endregion
31
+ export { MINOR_MODE_COMMAND, actionsFor, matchMinorMode, registerMinorModeCommand };
32
+
33
+ //# sourceMappingURL=minor-mode-command.mjs.map