@agimon-ai/doompi-help 0.0.1-alpha.11 → 0.0.1-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,8 @@ Activation-gated, package-owned guidance for DoomPi.
4
4
 
5
5
  Part of the [DoomPi distribution](https://www.npmjs.com/package/@agimon-ai/doompi).
6
6
 
7
- Help keeps extension documentation out of the default model context. Packages contribute concise `llms.txt` indexes; the Help host resolves and exposes them only while Help mode is active.
7
+ Help keeps extension documentation out of the default model context. Packages contribute concise
8
+ `llms.txt` indexes; the Help host resolves and exposes them only while Help mode is active.
8
9
 
9
10
  > **Alpha:** Help contribution contracts may change between releases.
10
11
 
@@ -22,11 +23,14 @@ required. To load the package directly in Pi:
22
23
  pi install npm:@agimon-ai/doompi-help
23
24
  ```
24
25
 
25
- The sole Pi entrypoint is `@agimon-ai/doompi-help/extensions/pi`; DoomPi and vanilla Pi execute the same factory.
26
+ Pi loads the package through `@agimon-ai/doompi-help/extensions/pi`. DoomPi and standalone Pi use
27
+ the same extension.
26
28
 
27
29
  ## Activate and deactivate
28
30
 
29
- In an interactive DoomPi session, use `SPC h e`. Headless DoomPi clients invoke the Help action through the shared minor-mode catalog service. In vanilla Pi, run `/doom-help`; the command does not require Doom config or Leader Space.
31
+ In an interactive DoomPi session, use `SPC h e`. Headless DoomPi clients invoke the Help action
32
+ through the shared minor-mode catalog service. In standalone Pi, run `/doom-help`; the command does
33
+ not require Doom config or Leader Space.
30
34
 
31
35
  Activation resolves each contributor in this order:
32
36
 
@@ -34,13 +38,30 @@ Activation resolves each contributor in this order:
34
38
  2. an immutable exact-version cache;
35
39
  3. a verified exact-version unpkg fallback.
36
40
 
37
- Deactivation logically withdraws the active Help skills before the next prompt or catalog read. Cached package content or previously generated wrappers may remain on disk and must not be interpreted as still-active model context.
41
+ Deactivation withdraws the active Help skills before the next prompt or catalog read. Cached
42
+ package content or previously generated wrappers may remain on disk, but they are no longer active
43
+ model context.
38
44
 
39
- The package contributes `doompi-help`. Other packages, including Workflow and Config, own their own Help descriptors and indexes.
45
+ The package contributes `doompi-use-help`. A standard parent catalog can compose two groups from
46
+ the packages that are present:
47
+
48
+ - **How to author:** extension, Config, Major Mode, Domain, Profile, Hook, Workflow, and Skill
49
+ guidance under explicit `doompi-author-*` names.
50
+ - **How to use:** Help, Voice, Plan, Goal, Loop, Workflow, Runner, MCP, and Skill guidance under
51
+ explicit `doompi-use-*` names.
52
+
53
+ Each owning package registers its descriptors and exact package index through the shared Help
54
+ service. Missing or inactive packages do not leave placeholder skills in the catalog.
40
55
 
41
56
  ## Parent and child behavior
42
57
 
43
- Parent and child sessions receive the same distribution-default factory. Each factory joins the runner-owned Cordis host and provides one `doom/help` service from the active session fiber. Session replacement retracts the old service, its contributions, and every injected UI or mode integration before the new generation becomes active.
58
+ Parent and child sessions load the same distribution-default extension. Replacing a session removes
59
+ the previous Help service, its contributions, and its UI and mode integrations before activating
60
+ the replacement.
61
+
62
+ Root and axis authoring guidance is parent-only when those packages are absent from detached-child
63
+ composition. Config and selected child features can still contribute package guidance to a
64
+ detached child.
44
65
 
45
66
  ## Public API
46
67
 
@@ -48,7 +69,8 @@ Parent and child sessions receive the same distribution-default factory. Each fa
48
69
  import { helpExtension, installHelpRuntime } from '@agimon-ai/doompi-help';
49
70
  ```
50
71
 
51
- The root export is intended for hosts and tests; ordinary users activate Help through the extension and shared minor-mode service.
72
+ The root export is intended for host integrations and tests. Users activate Help through the normal
73
+ extension.
52
74
 
53
75
  ## Development
54
76
 
@@ -1,2 +1,2 @@
1
- const e=require("./helpCommand.cjs"),t=require("./helpMode.cjs"),n=require("../../container/index.cjs");let r=require("@agimon-ai/doompi-extension-contracts/cordis-host"),i=require("@agimon-ai/doompi-extension-contracts/help"),a=require("@agimon-ai/doompi-extension-contracts/mode"),o=require("@agimon-ai/doompi-extension-contracts/ui-hub");const s=`@agimon-ai/doompi-help`;function c(c,l,u={}){let d;e.registerHelpCommand(l,()=>{if(!d)throw Error(`Doom Help is waiting for the active session service.`);return d}),c.inject([r.DOOM_CORDIS_SESSION_SERVICE],e=>{let c=e.get(r.DOOM_CORDIS_SESSION_SERVICE),l=(0,i.createDoomHelpService)(`${c.generation}:help`),f=l.register({source:s,moduleUrl:require("url").pathToFileURL(__filename).href,skills:[{name:`doompi-help`,description:`Use Doom Pi package Help safely, including activation, exact-version retrieval, and diagnostics.`}]}),p=n.createHelpRuntime(l,u);d=p.activation;try{e.provide(i.DOOM_HELP_SERVICE,l),e.inject([a.DOOM_MINOR_MODE_CATALOG_SERVICE],e=>{let n=t.registerHelpModeIntegration((0,a.requireMinorModeCatalog)(e),p.activation);return()=>n.dispose()}),e.inject([o.DOOM_UI_HUB_SERVICE],e=>t.registerHelpUiIntegration((0,o.requireDoomUiHub)(e),p.activation))}catch(e){throw d===p.activation&&(d=void 0),p.dispose(),f.dispose(),l.dispose(),e}return()=>{d===p.activation&&(d=void 0),p.dispose(),f.dispose(),l.dispose()}})}async function l(e){let t=await(0,r.connectDoomCordisHost)(e,s),n=t.root.plugin(u,{pi:e});try{await n}catch(e){try{await n.dispose()}finally{await t.dispose()}throw e}let i;e.on(`session_shutdown`,()=>i??=(async()=>{try{await n.dispose()}finally{await t.dispose()}})())}function u(e,t){c(e,t.pi)}exports.default=l,exports.helpExtension=l,exports.installHelpRuntime=c;
1
+ const e=require("./helpCommand.cjs"),t=require("./helpMode.cjs"),n=require("../../container/index.cjs");let r=require("@agimon-ai/doompi-extension-contracts/cordis-host"),i=require("@agimon-ai/doompi-extension-contracts/help"),a=require("@agimon-ai/doompi-extension-contracts/mode"),o=require("@agimon-ai/doompi-extension-contracts/ui-hub");const s=`@agimon-ai/doompi-help`;function c(c,l,u={}){let d;e.registerHelpCommand(l,()=>{if(!d)throw Error(`Doom Help is waiting for the active session service.`);return d}),c.inject([r.DOOM_CORDIS_SESSION_SERVICE],e=>{let c=e.get(r.DOOM_CORDIS_SESSION_SERVICE),l=(0,i.createDoomHelpService)(`${c.generation}:help`),f=l.register({source:s,moduleUrl:require("url").pathToFileURL(__filename).href,skills:[{name:`doompi-use-help`,description:`Use Doom Pi Help to activate package guidance, load exact-version skills, and diagnose unavailable or conflicting contributions.`}]}),p=n.createHelpRuntime(l,u);d=p.activation;try{e.provide(i.DOOM_HELP_SERVICE,l),e.inject([a.DOOM_MINOR_MODE_CATALOG_SERVICE],e=>{let n=t.registerHelpModeIntegration((0,a.requireMinorModeCatalog)(e),p.activation);return()=>n.dispose()}),e.inject([o.DOOM_UI_HUB_SERVICE],e=>t.registerHelpUiIntegration((0,o.requireDoomUiHub)(e),p.activation))}catch(e){throw d===p.activation&&(d=void 0),p.dispose(),f.dispose(),l.dispose(),e}return()=>{d===p.activation&&(d=void 0),p.dispose(),f.dispose(),l.dispose()}})}async function l(e){let t=await(0,r.connectDoomCordisHost)(e,s),n=t.root.plugin(u,{pi:e});try{await n}catch(e){try{await n.dispose()}finally{await t.dispose()}throw e}let i;e.on(`session_shutdown`,()=>i??=(async()=>{try{await n.dispose()}finally{await t.dispose()}})())}function u(e,t){c(e,t.pi)}exports.default=l,exports.helpExtension=l,exports.installHelpRuntime=c;
2
2
  //# sourceMappingURL=extension.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension.cjs","names":["DOOM_CORDIS_SESSION_SERVICE","createDoomHelpService","createHelpRuntime","DOOM_HELP_SERVICE","DOOM_MINOR_MODE_CATALOG_SERVICE","registerHelpModeIntegration","requireMinorModeCatalog","DOOM_UI_HUB_SERVICE","registerHelpUiIntegration","requireDoomUiHub","connectDoomCordisHost"],"sources":["../../../src/adapters/pi/extension.ts"],"sourcesContent":["import {\n connectDoomCordisHost,\n DOOM_CORDIS_SESSION_SERVICE,\n type DoomCordisSessionService,\n} from '@agimon-ai/doompi-extension-contracts/cordis-host';\nimport {\n createDoomHelpService,\n DOOM_HELP_SERVICE,\n type DoomHelpService,\n} from '@agimon-ai/doompi-extension-contracts/help';\nimport { DOOM_MINOR_MODE_CATALOG_SERVICE, requireMinorModeCatalog } from '@agimon-ai/doompi-extension-contracts/mode';\nimport { DOOM_UI_HUB_SERVICE, requireDoomUiHub } from '@agimon-ai/doompi-extension-contracts/ui-hub';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport { registerHelpCommand } from '../../adapters/pi/helpCommand.ts';\nimport { registerHelpModeIntegration, registerHelpUiIntegration } from '../../adapters/pi/helpMode.ts';\nimport { createHelpRuntime, type HelpRuntimeOptions } from '../../container/index.ts';\nimport type { HelpActivationService } from '../../types/help.ts';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi-help';\n\n/** Install Help resources into its host-owned Cordis plugin fiber. */\nexport function installHelpRuntime(cordis: Context, pi: ExtensionAPI, options: HelpRuntimeOptions = {}): void {\n let activeActivation: HelpActivationService | undefined;\n registerHelpCommand(pi, () => {\n if (!activeActivation) throw new Error('Doom Help is waiting for the active session service.');\n return activeActivation;\n });\n\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const service: DoomHelpService = createDoomHelpService(`${session.generation}:help`);\n const selfContribution = service.register({\n source: PACKAGE_SOURCE,\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-help',\n description:\n 'Use Doom Pi package Help safely, including activation, exact-version retrieval, and diagnostics.',\n },\n ],\n });\n const runtime = createHelpRuntime(service, options);\n activeActivation = runtime.activation;\n try {\n sessionContext.provide(DOOM_HELP_SERVICE, service);\n sessionContext.inject([DOOM_MINOR_MODE_CATALOG_SERVICE], (modeContext) => {\n const mode = registerHelpModeIntegration(requireMinorModeCatalog(modeContext), runtime.activation);\n return () => mode.dispose();\n });\n sessionContext.inject([DOOM_UI_HUB_SERVICE], (uiContext) =>\n registerHelpUiIntegration(requireDoomUiHub(uiContext), runtime.activation),\n );\n } catch (error) {\n if (activeActivation === runtime.activation) activeActivation = undefined;\n runtime.dispose();\n selfContribution.dispose();\n service.dispose();\n throw error;\n }\n return () => {\n if (activeActivation === runtime.activation) activeActivation = undefined;\n runtime.dispose();\n selfContribution.dispose();\n service.dispose();\n };\n });\n}\n\n/** The package's single standard Pi factory, including optional typed Doom integrations. */\nexport async function helpExtension(pi: ExtensionAPI): Promise<void> {\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const fiber = connection.root.plugin(helpPlugin, { pi });\n try {\n await fiber;\n } catch (error) {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n throw error;\n }\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n}\n\ninterface HelpPluginConfig {\n readonly pi: ExtensionAPI;\n}\n\nfunction helpPlugin(cordis: Context, config: HelpPluginConfig): void {\n installHelpRuntime(cordis, config.pi);\n}\n\nexport default helpExtension;\n"],"mappings":"qVAmBA,MAAM,EAAiB,yBAGvB,SAAgB,EAAmB,EAAiB,EAAkB,EAA8B,CAAC,EAAS,CAC5G,IAAI,EACJ,EAAA,oBAAoB,MAAU,CAC5B,GAAI,CAAC,EAAkB,MAAU,MAAM,sDAAsD,EAC7F,OAAO,CACT,CAAC,EAED,EAAO,OAAO,CAACA,EAAAA,2BAA2B,EAAI,GAAmB,CAC/D,IAAM,EAAU,EAAe,IAAIA,EAAAA,2BAA2B,EACxD,GAAA,EAA2BC,EAAAA,sBAAAA,CAAsB,GAAG,EAAQ,WAAW,MAAM,EAC7E,EAAmB,EAAQ,SAAS,CACxC,OAAQ,EACR,UAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,KACA,OAAQ,CACN,CACE,KAAM,cACN,YACE,kGACJ,CACF,CACF,CAAC,EACK,EAAUC,EAAAA,kBAAkB,EAAS,CAAO,EAClD,EAAmB,EAAQ,WAC3B,GAAI,CACF,EAAe,QAAQC,EAAAA,kBAAmB,CAAO,EACjD,EAAe,OAAO,CAACC,EAAAA,+BAA+B,EAAI,GAAgB,CACxE,IAAM,EAAOC,EAAAA,6BAAAA,EAA4BC,EAAAA,wBAAAA,CAAwB,CAAW,EAAG,EAAQ,UAAU,EACjG,UAAa,EAAK,QAAQ,CAC5B,CAAC,EACD,EAAe,OAAO,CAACC,EAAAA,mBAAmB,EAAI,GAC5CC,EAAAA,2BAAAA,EAA0BC,EAAAA,iBAAAA,CAAiB,CAAS,EAAG,EAAQ,UAAU,CAC3E,CACF,OAAS,EAAO,CAKd,MAJI,IAAqB,EAAQ,aAAY,EAAmB,IAAA,IAChE,EAAQ,QAAQ,EAChB,EAAiB,QAAQ,EACzB,EAAQ,QAAQ,EACV,CACR,CACA,UAAa,CACP,IAAqB,EAAQ,aAAY,EAAmB,IAAA,IAChE,EAAQ,QAAQ,EAChB,EAAiB,QAAQ,EACzB,EAAQ,QAAQ,CAClB,CACF,CAAC,CACH,CAGA,eAAsB,EAAc,EAAiC,CACnE,IAAM,EAAa,MAAA,EAAMC,EAAAA,sBAAAA,CAAsB,EAAI,CAAc,EAC3D,EAAQ,EAAW,KAAK,OAAO,EAAY,CAAE,IAAG,CAAC,EACvD,GAAI,CACF,MAAM,CACR,OAAS,EAAO,CACd,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACA,MAAM,CACR,CACA,IAAI,EACJ,EAAG,GACD,uBAEG,KAAc,SAAY,CACzB,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACF,EAAA,CAAG,CACP,CACF,CAMA,SAAS,EAAW,EAAiB,EAAgC,CACnE,EAAmB,EAAQ,EAAO,EAAE,CACtC"}
1
+ {"version":3,"file":"extension.cjs","names":["DOOM_CORDIS_SESSION_SERVICE","createDoomHelpService","createHelpRuntime","DOOM_HELP_SERVICE","DOOM_MINOR_MODE_CATALOG_SERVICE","registerHelpModeIntegration","requireMinorModeCatalog","DOOM_UI_HUB_SERVICE","registerHelpUiIntegration","requireDoomUiHub","connectDoomCordisHost"],"sources":["../../../src/adapters/pi/extension.ts"],"sourcesContent":["import {\n connectDoomCordisHost,\n DOOM_CORDIS_SESSION_SERVICE,\n type DoomCordisSessionService,\n} from '@agimon-ai/doompi-extension-contracts/cordis-host';\nimport {\n createDoomHelpService,\n DOOM_HELP_SERVICE,\n type DoomHelpService,\n} from '@agimon-ai/doompi-extension-contracts/help';\nimport { DOOM_MINOR_MODE_CATALOG_SERVICE, requireMinorModeCatalog } from '@agimon-ai/doompi-extension-contracts/mode';\nimport { DOOM_UI_HUB_SERVICE, requireDoomUiHub } from '@agimon-ai/doompi-extension-contracts/ui-hub';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport { registerHelpCommand } from '../../adapters/pi/helpCommand.ts';\nimport { registerHelpModeIntegration, registerHelpUiIntegration } from '../../adapters/pi/helpMode.ts';\nimport { createHelpRuntime, type HelpRuntimeOptions } from '../../container/index.ts';\nimport type { HelpActivationService } from '../../types/help.ts';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi-help';\n\n/** Install Help resources into its host-owned Cordis plugin fiber. */\nexport function installHelpRuntime(cordis: Context, pi: ExtensionAPI, options: HelpRuntimeOptions = {}): void {\n let activeActivation: HelpActivationService | undefined;\n registerHelpCommand(pi, () => {\n if (!activeActivation) throw new Error('Doom Help is waiting for the active session service.');\n return activeActivation;\n });\n\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const service: DoomHelpService = createDoomHelpService(`${session.generation}:help`);\n const selfContribution = service.register({\n source: PACKAGE_SOURCE,\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-help',\n description:\n 'Use Doom Pi Help to activate package guidance, load exact-version skills, and diagnose unavailable or conflicting contributions.',\n },\n ],\n });\n const runtime = createHelpRuntime(service, options);\n activeActivation = runtime.activation;\n try {\n sessionContext.provide(DOOM_HELP_SERVICE, service);\n sessionContext.inject([DOOM_MINOR_MODE_CATALOG_SERVICE], (modeContext) => {\n const mode = registerHelpModeIntegration(requireMinorModeCatalog(modeContext), runtime.activation);\n return () => mode.dispose();\n });\n sessionContext.inject([DOOM_UI_HUB_SERVICE], (uiContext) =>\n registerHelpUiIntegration(requireDoomUiHub(uiContext), runtime.activation),\n );\n } catch (error) {\n if (activeActivation === runtime.activation) activeActivation = undefined;\n runtime.dispose();\n selfContribution.dispose();\n service.dispose();\n throw error;\n }\n return () => {\n if (activeActivation === runtime.activation) activeActivation = undefined;\n runtime.dispose();\n selfContribution.dispose();\n service.dispose();\n };\n });\n}\n\n/** The package's single standard Pi factory, including optional typed Doom integrations. */\nexport async function helpExtension(pi: ExtensionAPI): Promise<void> {\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const fiber = connection.root.plugin(helpPlugin, { pi });\n try {\n await fiber;\n } catch (error) {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n throw error;\n }\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n}\n\ninterface HelpPluginConfig {\n readonly pi: ExtensionAPI;\n}\n\nfunction helpPlugin(cordis: Context, config: HelpPluginConfig): void {\n installHelpRuntime(cordis, config.pi);\n}\n\nexport default helpExtension;\n"],"mappings":"qVAmBA,MAAM,EAAiB,yBAGvB,SAAgB,EAAmB,EAAiB,EAAkB,EAA8B,CAAC,EAAS,CAC5G,IAAI,EACJ,EAAA,oBAAoB,MAAU,CAC5B,GAAI,CAAC,EAAkB,MAAU,MAAM,sDAAsD,EAC7F,OAAO,CACT,CAAC,EAED,EAAO,OAAO,CAACA,EAAAA,2BAA2B,EAAI,GAAmB,CAC/D,IAAM,EAAU,EAAe,IAAIA,EAAAA,2BAA2B,EACxD,GAAA,EAA2BC,EAAAA,sBAAAA,CAAsB,GAAG,EAAQ,WAAW,MAAM,EAC7E,EAAmB,EAAQ,SAAS,CACxC,OAAQ,EACR,UAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,KACA,OAAQ,CACN,CACE,KAAM,kBACN,YACE,kIACJ,CACF,CACF,CAAC,EACK,EAAUC,EAAAA,kBAAkB,EAAS,CAAO,EAClD,EAAmB,EAAQ,WAC3B,GAAI,CACF,EAAe,QAAQC,EAAAA,kBAAmB,CAAO,EACjD,EAAe,OAAO,CAACC,EAAAA,+BAA+B,EAAI,GAAgB,CACxE,IAAM,EAAOC,EAAAA,6BAAAA,EAA4BC,EAAAA,wBAAAA,CAAwB,CAAW,EAAG,EAAQ,UAAU,EACjG,UAAa,EAAK,QAAQ,CAC5B,CAAC,EACD,EAAe,OAAO,CAACC,EAAAA,mBAAmB,EAAI,GAC5CC,EAAAA,2BAAAA,EAA0BC,EAAAA,iBAAAA,CAAiB,CAAS,EAAG,EAAQ,UAAU,CAC3E,CACF,OAAS,EAAO,CAKd,MAJI,IAAqB,EAAQ,aAAY,EAAmB,IAAA,IAChE,EAAQ,QAAQ,EAChB,EAAiB,QAAQ,EACzB,EAAQ,QAAQ,EACV,CACR,CACA,UAAa,CACP,IAAqB,EAAQ,aAAY,EAAmB,IAAA,IAChE,EAAQ,QAAQ,EAChB,EAAiB,QAAQ,EACzB,EAAQ,QAAQ,CAClB,CACF,CAAC,CACH,CAGA,eAAsB,EAAc,EAAiC,CACnE,IAAM,EAAa,MAAA,EAAMC,EAAAA,sBAAAA,CAAsB,EAAI,CAAc,EAC3D,EAAQ,EAAW,KAAK,OAAO,EAAY,CAAE,IAAG,CAAC,EACvD,GAAI,CACF,MAAM,CACR,OAAS,EAAO,CACd,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACA,MAAM,CACR,CACA,IAAI,EACJ,EAAG,GACD,uBAEG,KAAc,SAAY,CACzB,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACF,EAAA,CAAG,CACP,CACF,CAMA,SAAS,EAAW,EAAiB,EAAgC,CACnE,EAAmB,EAAQ,EAAO,EAAE,CACtC"}
@@ -1,2 +1,2 @@
1
- import{registerHelpCommand as e}from"./helpCommand.mjs";import{registerHelpModeIntegration as t,registerHelpUiIntegration as n}from"./helpMode.mjs";import{createHelpRuntime as r}from"../../container/index.mjs";import{DOOM_CORDIS_SESSION_SERVICE as i,connectDoomCordisHost as a}from"@agimon-ai/doompi-extension-contracts/cordis-host";import{DOOM_HELP_SERVICE as o,createDoomHelpService as s}from"@agimon-ai/doompi-extension-contracts/help";import{DOOM_MINOR_MODE_CATALOG_SERVICE as c,requireMinorModeCatalog as l}from"@agimon-ai/doompi-extension-contracts/mode";import{DOOM_UI_HUB_SERVICE as u,requireDoomUiHub as d}from"@agimon-ai/doompi-extension-contracts/ui-hub";const f=`@agimon-ai/doompi-help`;function p(a,p,m={}){let h;e(p,()=>{if(!h)throw Error(`Doom Help is waiting for the active session service.`);return h}),a.inject([i],e=>{let a=e.get(i),p=s(`${a.generation}:help`),g=p.register({source:f,moduleUrl:import.meta.url,skills:[{name:`doompi-help`,description:`Use Doom Pi package Help safely, including activation, exact-version retrieval, and diagnostics.`}]}),_=r(p,m);h=_.activation;try{e.provide(o,p),e.inject([c],e=>{let n=t(l(e),_.activation);return()=>n.dispose()}),e.inject([u],e=>n(d(e),_.activation))}catch(e){throw h===_.activation&&(h=void 0),_.dispose(),g.dispose(),p.dispose(),e}return()=>{h===_.activation&&(h=void 0),_.dispose(),g.dispose(),p.dispose()}})}async function m(e){let t=await a(e,f),n=t.root.plugin(h,{pi:e});try{await n}catch(e){try{await n.dispose()}finally{await t.dispose()}throw e}let r;e.on(`session_shutdown`,()=>r??=(async()=>{try{await n.dispose()}finally{await t.dispose()}})())}function h(e,t){p(e,t.pi)}export{m as default,m as helpExtension,p as installHelpRuntime};
1
+ import{registerHelpCommand as e}from"./helpCommand.mjs";import{registerHelpModeIntegration as t,registerHelpUiIntegration as n}from"./helpMode.mjs";import{createHelpRuntime as r}from"../../container/index.mjs";import{DOOM_CORDIS_SESSION_SERVICE as i,connectDoomCordisHost as a}from"@agimon-ai/doompi-extension-contracts/cordis-host";import{DOOM_HELP_SERVICE as o,createDoomHelpService as s}from"@agimon-ai/doompi-extension-contracts/help";import{DOOM_MINOR_MODE_CATALOG_SERVICE as c,requireMinorModeCatalog as l}from"@agimon-ai/doompi-extension-contracts/mode";import{DOOM_UI_HUB_SERVICE as u,requireDoomUiHub as d}from"@agimon-ai/doompi-extension-contracts/ui-hub";const f=`@agimon-ai/doompi-help`;function p(a,p,m={}){let h;e(p,()=>{if(!h)throw Error(`Doom Help is waiting for the active session service.`);return h}),a.inject([i],e=>{let a=e.get(i),p=s(`${a.generation}:help`),g=p.register({source:f,moduleUrl:import.meta.url,skills:[{name:`doompi-use-help`,description:`Use Doom Pi Help to activate package guidance, load exact-version skills, and diagnose unavailable or conflicting contributions.`}]}),_=r(p,m);h=_.activation;try{e.provide(o,p),e.inject([c],e=>{let n=t(l(e),_.activation);return()=>n.dispose()}),e.inject([u],e=>n(d(e),_.activation))}catch(e){throw h===_.activation&&(h=void 0),_.dispose(),g.dispose(),p.dispose(),e}return()=>{h===_.activation&&(h=void 0),_.dispose(),g.dispose(),p.dispose()}})}async function m(e){let t=await a(e,f),n=t.root.plugin(h,{pi:e});try{await n}catch(e){try{await n.dispose()}finally{await t.dispose()}throw e}let r;e.on(`session_shutdown`,()=>r??=(async()=>{try{await n.dispose()}finally{await t.dispose()}})())}function h(e,t){p(e,t.pi)}export{m as default,m as helpExtension,p as installHelpRuntime};
2
2
  //# sourceMappingURL=extension.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension.mjs","names":[],"sources":["../../../src/adapters/pi/extension.ts"],"sourcesContent":["import {\n connectDoomCordisHost,\n DOOM_CORDIS_SESSION_SERVICE,\n type DoomCordisSessionService,\n} from '@agimon-ai/doompi-extension-contracts/cordis-host';\nimport {\n createDoomHelpService,\n DOOM_HELP_SERVICE,\n type DoomHelpService,\n} from '@agimon-ai/doompi-extension-contracts/help';\nimport { DOOM_MINOR_MODE_CATALOG_SERVICE, requireMinorModeCatalog } from '@agimon-ai/doompi-extension-contracts/mode';\nimport { DOOM_UI_HUB_SERVICE, requireDoomUiHub } from '@agimon-ai/doompi-extension-contracts/ui-hub';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport { registerHelpCommand } from '../../adapters/pi/helpCommand.ts';\nimport { registerHelpModeIntegration, registerHelpUiIntegration } from '../../adapters/pi/helpMode.ts';\nimport { createHelpRuntime, type HelpRuntimeOptions } from '../../container/index.ts';\nimport type { HelpActivationService } from '../../types/help.ts';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi-help';\n\n/** Install Help resources into its host-owned Cordis plugin fiber. */\nexport function installHelpRuntime(cordis: Context, pi: ExtensionAPI, options: HelpRuntimeOptions = {}): void {\n let activeActivation: HelpActivationService | undefined;\n registerHelpCommand(pi, () => {\n if (!activeActivation) throw new Error('Doom Help is waiting for the active session service.');\n return activeActivation;\n });\n\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const service: DoomHelpService = createDoomHelpService(`${session.generation}:help`);\n const selfContribution = service.register({\n source: PACKAGE_SOURCE,\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-help',\n description:\n 'Use Doom Pi package Help safely, including activation, exact-version retrieval, and diagnostics.',\n },\n ],\n });\n const runtime = createHelpRuntime(service, options);\n activeActivation = runtime.activation;\n try {\n sessionContext.provide(DOOM_HELP_SERVICE, service);\n sessionContext.inject([DOOM_MINOR_MODE_CATALOG_SERVICE], (modeContext) => {\n const mode = registerHelpModeIntegration(requireMinorModeCatalog(modeContext), runtime.activation);\n return () => mode.dispose();\n });\n sessionContext.inject([DOOM_UI_HUB_SERVICE], (uiContext) =>\n registerHelpUiIntegration(requireDoomUiHub(uiContext), runtime.activation),\n );\n } catch (error) {\n if (activeActivation === runtime.activation) activeActivation = undefined;\n runtime.dispose();\n selfContribution.dispose();\n service.dispose();\n throw error;\n }\n return () => {\n if (activeActivation === runtime.activation) activeActivation = undefined;\n runtime.dispose();\n selfContribution.dispose();\n service.dispose();\n };\n });\n}\n\n/** The package's single standard Pi factory, including optional typed Doom integrations. */\nexport async function helpExtension(pi: ExtensionAPI): Promise<void> {\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const fiber = connection.root.plugin(helpPlugin, { pi });\n try {\n await fiber;\n } catch (error) {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n throw error;\n }\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n}\n\ninterface HelpPluginConfig {\n readonly pi: ExtensionAPI;\n}\n\nfunction helpPlugin(cordis: Context, config: HelpPluginConfig): void {\n installHelpRuntime(cordis, config.pi);\n}\n\nexport default helpExtension;\n"],"mappings":"0pBAmBA,MAAM,EAAiB,yBAGvB,SAAgB,EAAmB,EAAiB,EAAkB,EAA8B,CAAC,EAAS,CAC5G,IAAI,EACJ,EAAoB,MAAU,CAC5B,GAAI,CAAC,EAAkB,MAAU,MAAM,sDAAsD,EAC7F,OAAO,CACT,CAAC,EAED,EAAO,OAAO,CAAC,CAA2B,EAAI,GAAmB,CAC/D,IAAM,EAAU,EAAe,IAAI,CAA2B,EACxD,EAA2B,EAAsB,GAAG,EAAQ,WAAW,MAAM,EAC7E,EAAmB,EAAQ,SAAS,CACxC,OAAQ,EACR,UAAW,YAAY,IACvB,OAAQ,CACN,CACE,KAAM,cACN,YACE,kGACJ,CACF,CACF,CAAC,EACK,EAAU,EAAkB,EAAS,CAAO,EAClD,EAAmB,EAAQ,WAC3B,GAAI,CACF,EAAe,QAAQ,EAAmB,CAAO,EACjD,EAAe,OAAO,CAAC,CAA+B,EAAI,GAAgB,CACxE,IAAM,EAAO,EAA4B,EAAwB,CAAW,EAAG,EAAQ,UAAU,EACjG,UAAa,EAAK,QAAQ,CAC5B,CAAC,EACD,EAAe,OAAO,CAAC,CAAmB,EAAI,GAC5C,EAA0B,EAAiB,CAAS,EAAG,EAAQ,UAAU,CAC3E,CACF,OAAS,EAAO,CAKd,MAJI,IAAqB,EAAQ,aAAY,EAAmB,IAAA,IAChE,EAAQ,QAAQ,EAChB,EAAiB,QAAQ,EACzB,EAAQ,QAAQ,EACV,CACR,CACA,UAAa,CACP,IAAqB,EAAQ,aAAY,EAAmB,IAAA,IAChE,EAAQ,QAAQ,EAChB,EAAiB,QAAQ,EACzB,EAAQ,QAAQ,CAClB,CACF,CAAC,CACH,CAGA,eAAsB,EAAc,EAAiC,CACnE,IAAM,EAAa,MAAM,EAAsB,EAAI,CAAc,EAC3D,EAAQ,EAAW,KAAK,OAAO,EAAY,CAAE,IAAG,CAAC,EACvD,GAAI,CACF,MAAM,CACR,OAAS,EAAO,CACd,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACA,MAAM,CACR,CACA,IAAI,EACJ,EAAG,GACD,uBAEG,KAAc,SAAY,CACzB,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACF,EAAA,CAAG,CACP,CACF,CAMA,SAAS,EAAW,EAAiB,EAAgC,CACnE,EAAmB,EAAQ,EAAO,EAAE,CACtC"}
1
+ {"version":3,"file":"extension.mjs","names":[],"sources":["../../../src/adapters/pi/extension.ts"],"sourcesContent":["import {\n connectDoomCordisHost,\n DOOM_CORDIS_SESSION_SERVICE,\n type DoomCordisSessionService,\n} from '@agimon-ai/doompi-extension-contracts/cordis-host';\nimport {\n createDoomHelpService,\n DOOM_HELP_SERVICE,\n type DoomHelpService,\n} from '@agimon-ai/doompi-extension-contracts/help';\nimport { DOOM_MINOR_MODE_CATALOG_SERVICE, requireMinorModeCatalog } from '@agimon-ai/doompi-extension-contracts/mode';\nimport { DOOM_UI_HUB_SERVICE, requireDoomUiHub } from '@agimon-ai/doompi-extension-contracts/ui-hub';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport { registerHelpCommand } from '../../adapters/pi/helpCommand.ts';\nimport { registerHelpModeIntegration, registerHelpUiIntegration } from '../../adapters/pi/helpMode.ts';\nimport { createHelpRuntime, type HelpRuntimeOptions } from '../../container/index.ts';\nimport type { HelpActivationService } from '../../types/help.ts';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi-help';\n\n/** Install Help resources into its host-owned Cordis plugin fiber. */\nexport function installHelpRuntime(cordis: Context, pi: ExtensionAPI, options: HelpRuntimeOptions = {}): void {\n let activeActivation: HelpActivationService | undefined;\n registerHelpCommand(pi, () => {\n if (!activeActivation) throw new Error('Doom Help is waiting for the active session service.');\n return activeActivation;\n });\n\n cordis.inject([DOOM_CORDIS_SESSION_SERVICE], (sessionContext) => {\n const session = sessionContext.get(DOOM_CORDIS_SESSION_SERVICE) as DoomCordisSessionService;\n const service: DoomHelpService = createDoomHelpService(`${session.generation}:help`);\n const selfContribution = service.register({\n source: PACKAGE_SOURCE,\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-help',\n description:\n 'Use Doom Pi Help to activate package guidance, load exact-version skills, and diagnose unavailable or conflicting contributions.',\n },\n ],\n });\n const runtime = createHelpRuntime(service, options);\n activeActivation = runtime.activation;\n try {\n sessionContext.provide(DOOM_HELP_SERVICE, service);\n sessionContext.inject([DOOM_MINOR_MODE_CATALOG_SERVICE], (modeContext) => {\n const mode = registerHelpModeIntegration(requireMinorModeCatalog(modeContext), runtime.activation);\n return () => mode.dispose();\n });\n sessionContext.inject([DOOM_UI_HUB_SERVICE], (uiContext) =>\n registerHelpUiIntegration(requireDoomUiHub(uiContext), runtime.activation),\n );\n } catch (error) {\n if (activeActivation === runtime.activation) activeActivation = undefined;\n runtime.dispose();\n selfContribution.dispose();\n service.dispose();\n throw error;\n }\n return () => {\n if (activeActivation === runtime.activation) activeActivation = undefined;\n runtime.dispose();\n selfContribution.dispose();\n service.dispose();\n };\n });\n}\n\n/** The package's single standard Pi factory, including optional typed Doom integrations. */\nexport async function helpExtension(pi: ExtensionAPI): Promise<void> {\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const fiber = connection.root.plugin(helpPlugin, { pi });\n try {\n await fiber;\n } catch (error) {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n throw error;\n }\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n}\n\ninterface HelpPluginConfig {\n readonly pi: ExtensionAPI;\n}\n\nfunction helpPlugin(cordis: Context, config: HelpPluginConfig): void {\n installHelpRuntime(cordis, config.pi);\n}\n\nexport default helpExtension;\n"],"mappings":"0pBAmBA,MAAM,EAAiB,yBAGvB,SAAgB,EAAmB,EAAiB,EAAkB,EAA8B,CAAC,EAAS,CAC5G,IAAI,EACJ,EAAoB,MAAU,CAC5B,GAAI,CAAC,EAAkB,MAAU,MAAM,sDAAsD,EAC7F,OAAO,CACT,CAAC,EAED,EAAO,OAAO,CAAC,CAA2B,EAAI,GAAmB,CAC/D,IAAM,EAAU,EAAe,IAAI,CAA2B,EACxD,EAA2B,EAAsB,GAAG,EAAQ,WAAW,MAAM,EAC7E,EAAmB,EAAQ,SAAS,CACxC,OAAQ,EACR,UAAW,YAAY,IACvB,OAAQ,CACN,CACE,KAAM,kBACN,YACE,kIACJ,CACF,CACF,CAAC,EACK,EAAU,EAAkB,EAAS,CAAO,EAClD,EAAmB,EAAQ,WAC3B,GAAI,CACF,EAAe,QAAQ,EAAmB,CAAO,EACjD,EAAe,OAAO,CAAC,CAA+B,EAAI,GAAgB,CACxE,IAAM,EAAO,EAA4B,EAAwB,CAAW,EAAG,EAAQ,UAAU,EACjG,UAAa,EAAK,QAAQ,CAC5B,CAAC,EACD,EAAe,OAAO,CAAC,CAAmB,EAAI,GAC5C,EAA0B,EAAiB,CAAS,EAAG,EAAQ,UAAU,CAC3E,CACF,OAAS,EAAO,CAKd,MAJI,IAAqB,EAAQ,aAAY,EAAmB,IAAA,IAChE,EAAQ,QAAQ,EAChB,EAAiB,QAAQ,EACzB,EAAQ,QAAQ,EACV,CACR,CACA,UAAa,CACP,IAAqB,EAAQ,aAAY,EAAmB,IAAA,IAChE,EAAQ,QAAQ,EAChB,EAAiB,QAAQ,EACzB,EAAQ,QAAQ,CAClB,CACF,CAAC,CACH,CAGA,eAAsB,EAAc,EAAiC,CACnE,IAAM,EAAa,MAAM,EAAsB,EAAI,CAAc,EAC3D,EAAQ,EAAW,KAAK,OAAO,EAAY,CAAE,IAAG,CAAC,EACvD,GAAI,CACF,MAAM,CACR,OAAS,EAAO,CACd,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACA,MAAM,CACR,CACA,IAAI,EACJ,EAAG,GACD,uBAEG,KAAc,SAAY,CACzB,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACF,EAAA,CAAG,CACP,CACF,CAMA,SAAS,EAAW,EAAiB,EAAgC,CACnE,EAAmB,EAAQ,EAAO,EAAE,CACtC"}
package/llms.txt CHANGED
@@ -5,3 +5,7 @@ Activation-gated, package-owned guidance for Doom Pi parent sessions.
5
5
  ## Resources
6
6
 
7
7
  - [Package README](./README.md): Public entrypoints, activation model, security guarantees, and development commands.
8
+
9
+ ## How to use
10
+
11
+ - [doompi-use-help](./src/prompts/doompi-use-help/SKILL.md): Activate package guidance, load exact-version skills, and diagnose unavailable or conflicting contributions.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/doompi-help",
3
- "version": "0.0.1-alpha.11",
3
+ "version": "0.0.1-alpha.12",
4
4
  "description": "Activation-gated package guidance and help skills for DoomPi and Pi extensions.",
5
5
  "keywords": [
6
6
  "agent-documentation",
@@ -20,6 +20,7 @@
20
20
  "files": [
21
21
  "dist",
22
22
  "llms.txt",
23
+ "src/prompts",
23
24
  "README.md",
24
25
  "LICENSE",
25
26
  "package.json"
@@ -46,16 +47,16 @@
46
47
  },
47
48
  "dependencies": {
48
49
  "@deepseek-ai/cordis": "4.0.1",
49
- "@agimon-ai/doompi-extension-contracts": "0.0.1-alpha.28"
50
+ "@agimon-ai/doompi-extension-contracts": "0.0.1-alpha.29"
50
51
  },
51
52
  "devDependencies": {
52
- "@agimon-ai/vibe-lint-plugin-doom-extension": "0.0.1-alpha.26",
53
53
  "@earendil-works/pi-coding-agent": "0.84.2",
54
54
  "@types/node": "26.2.0",
55
55
  "@vitest/coverage-v8": "4.1.11",
56
56
  "tsdown": "0.22.14",
57
57
  "typescript": "7.0.2",
58
- "vitest": "4.1.11"
58
+ "vitest": "4.1.11",
59
+ "@agimon-ai/vibe-lint-plugin-doom-extension": "0.0.1-alpha.27"
59
60
  },
60
61
  "peerDependencies": {
61
62
  "@earendil-works/pi-coding-agent": "0.84.2"
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: doompi-use-help
3
+ description: Use Doom Pi Help to activate package guidance, load exact-version skills, and diagnose unavailable or conflicting contributions.
4
+ ---
5
+
6
+ # Use Doom Pi Help
7
+
8
+ Use Help when a question depends on the installed Doom Pi packages and their current authoring or usage guidance.
9
+
10
+ ## Activate guidance
11
+
12
+ 1. In an interactive Doom Pi session, use `SPC h e` to toggle Help.
13
+ 2. In standalone Pi, run `/doom-help`.
14
+ 3. In a headless host, invoke Help through the shared minor-mode catalog.
15
+ 4. Read the skills that appear after activation, then select the narrowest skill for the task.
16
+ 5. Deactivate Help when the package guidance is no longer needed.
17
+
18
+ Help resolves package-owned `llms.txt` indexes from the installed package, an immutable exact-version cache, or an integrity-verified exact-version registry fallback. Treat the resulting skills as guidance for the installed version, not for an unspecified latest release.
19
+
20
+ ## Diagnose activation
21
+
22
+ - If Help remains inactive, inspect the first reported diagnostic and verify that at least one package contributed a valid index and skill.
23
+ - If one package fails but others load, continue with the loaded skills and report the degraded source separately.
24
+ - If skill names collide, the contribution from the earlier package source wins and Help records a diagnostic for the duplicate.
25
+ - If no source can load, do not invent package guidance. Report the activation failure and use verified local package documentation instead.
26
+
27
+ Deactivation removes active Help skills immediately. Cached files may remain on disk, but they are not active model context.