@agimon-ai/doompi-extension-contracts 0.0.1-alpha.0

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 (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -0
  3. package/dist/backgroundWork.cjs +2 -0
  4. package/dist/backgroundWork.cjs.map +1 -0
  5. package/dist/backgroundWork.d.cts +73 -0
  6. package/dist/backgroundWork.d.cts.map +1 -0
  7. package/dist/backgroundWork.d.mts +73 -0
  8. package/dist/backgroundWork.d.mts.map +1 -0
  9. package/dist/backgroundWork.mjs +2 -0
  10. package/dist/backgroundWork.mjs.map +1 -0
  11. package/dist/childProcess.cjs +2 -0
  12. package/dist/childProcess.cjs.map +1 -0
  13. package/dist/childProcess.d.cts +20 -0
  14. package/dist/childProcess.d.cts.map +1 -0
  15. package/dist/childProcess.d.mts +20 -0
  16. package/dist/childProcess.d.mts.map +1 -0
  17. package/dist/childProcess.mjs +2 -0
  18. package/dist/childProcess.mjs.map +1 -0
  19. package/dist/config.cjs +2 -0
  20. package/dist/config.cjs.map +1 -0
  21. package/dist/config.d.cts +517 -0
  22. package/dist/config.d.cts.map +1 -0
  23. package/dist/config.d.mts +517 -0
  24. package/dist/config.d.mts.map +1 -0
  25. package/dist/config.mjs +2 -0
  26. package/dist/config.mjs.map +1 -0
  27. package/dist/delegation.cjs +2 -0
  28. package/dist/delegation.cjs.map +1 -0
  29. package/dist/delegation.d.cts +114 -0
  30. package/dist/delegation.d.cts.map +1 -0
  31. package/dist/delegation.d.mts +114 -0
  32. package/dist/delegation.d.mts.map +1 -0
  33. package/dist/delegation.mjs +2 -0
  34. package/dist/delegation.mjs.map +1 -0
  35. package/dist/fablePlan.cjs +2 -0
  36. package/dist/fablePlan.cjs.map +1 -0
  37. package/dist/fablePlan.d.cts +143 -0
  38. package/dist/fablePlan.d.cts.map +1 -0
  39. package/dist/fablePlan.d.mts +143 -0
  40. package/dist/fablePlan.d.mts.map +1 -0
  41. package/dist/fablePlan.mjs +2 -0
  42. package/dist/fablePlan.mjs.map +1 -0
  43. package/dist/footer.cjs +2 -0
  44. package/dist/footer.cjs.map +1 -0
  45. package/dist/footer.d.cts +141 -0
  46. package/dist/footer.d.cts.map +1 -0
  47. package/dist/footer.d.mts +141 -0
  48. package/dist/footer.d.mts.map +1 -0
  49. package/dist/footer.mjs +2 -0
  50. package/dist/footer.mjs.map +1 -0
  51. package/dist/index.cjs +1 -0
  52. package/dist/index.d.cts +2 -0
  53. package/dist/index.d.mts +2 -0
  54. package/dist/index.mjs +1 -0
  55. package/dist/leader.cjs +2 -0
  56. package/dist/leader.cjs.map +1 -0
  57. package/dist/leader.d.cts +171 -0
  58. package/dist/leader.d.cts.map +1 -0
  59. package/dist/leader.d.mts +171 -0
  60. package/dist/leader.d.mts.map +1 -0
  61. package/dist/leader.mjs +2 -0
  62. package/dist/leader.mjs.map +1 -0
  63. package/dist/mcpStatus.cjs +2 -0
  64. package/dist/mcpStatus.cjs.map +1 -0
  65. package/dist/mcpStatus.d.cts +79 -0
  66. package/dist/mcpStatus.d.cts.map +1 -0
  67. package/dist/mcpStatus.d.mts +79 -0
  68. package/dist/mcpStatus.d.mts.map +1 -0
  69. package/dist/mcpStatus.mjs +2 -0
  70. package/dist/mcpStatus.mjs.map +1 -0
  71. package/dist/mode.cjs +2 -0
  72. package/dist/mode.cjs.map +1 -0
  73. package/dist/mode.d.cts +132 -0
  74. package/dist/mode.d.cts.map +1 -0
  75. package/dist/mode.d.mts +132 -0
  76. package/dist/mode.d.mts.map +1 -0
  77. package/dist/mode.mjs +2 -0
  78. package/dist/mode.mjs.map +1 -0
  79. package/dist/protocol.cjs +2 -0
  80. package/dist/protocol.cjs.map +1 -0
  81. package/dist/protocol.d.cts +83 -0
  82. package/dist/protocol.d.cts.map +1 -0
  83. package/dist/protocol.d.mts +83 -0
  84. package/dist/protocol.d.mts.map +1 -0
  85. package/dist/protocol.mjs +2 -0
  86. package/dist/protocol.mjs.map +1 -0
  87. package/dist/runnerPty.cjs +2 -0
  88. package/dist/runnerPty.cjs.map +1 -0
  89. package/dist/runnerPty.d.cts +39 -0
  90. package/dist/runnerPty.d.cts.map +1 -0
  91. package/dist/runnerPty.d.mts +39 -0
  92. package/dist/runnerPty.d.mts.map +1 -0
  93. package/dist/runnerPty.mjs +2 -0
  94. package/dist/runnerPty.mjs.map +1 -0
  95. package/dist/skills.cjs +2 -0
  96. package/dist/skills.cjs.map +1 -0
  97. package/dist/skills.d.cts +51 -0
  98. package/dist/skills.d.cts.map +1 -0
  99. package/dist/skills.d.mts +51 -0
  100. package/dist/skills.d.mts.map +1 -0
  101. package/dist/skills.mjs +2 -0
  102. package/dist/skills.mjs.map +1 -0
  103. package/dist/subagentPolicy.cjs +2 -0
  104. package/dist/subagentPolicy.cjs.map +1 -0
  105. package/dist/subagentPolicy.d.cts +47 -0
  106. package/dist/subagentPolicy.d.cts.map +1 -0
  107. package/dist/subagentPolicy.d.mts +47 -0
  108. package/dist/subagentPolicy.d.mts.map +1 -0
  109. package/dist/subagentPolicy.mjs +2 -0
  110. package/dist/subagentPolicy.mjs.map +1 -0
  111. package/dist/subagentTool.cjs +2 -0
  112. package/dist/subagentTool.cjs.map +1 -0
  113. package/dist/subagentTool.d.cts +78 -0
  114. package/dist/subagentTool.d.cts.map +1 -0
  115. package/dist/subagentTool.d.mts +78 -0
  116. package/dist/subagentTool.d.mts.map +1 -0
  117. package/dist/subagentTool.mjs +2 -0
  118. package/dist/subagentTool.mjs.map +1 -0
  119. package/dist/workflow.cjs +2 -0
  120. package/dist/workflow.cjs.map +1 -0
  121. package/dist/workflow.d.cts +15 -0
  122. package/dist/workflow.d.cts.map +1 -0
  123. package/dist/workflow.d.mts +15 -0
  124. package/dist/workflow.d.mts.map +1 -0
  125. package/dist/workflow.mjs +2 -0
  126. package/dist/workflow.mjs.map +1 -0
  127. package/package.json +121 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Vuong Ngo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # @agimon-ai/doompi-extension-contracts
2
+
3
+ Validated event protocols shared by Doompi extensions.
4
+
5
+ The validated event protocols Doompi extensions use to talk to each other over Pi’s shared
6
+ extension bus. Import a contract rather than inventing an event name.
7
+
8
+ Part of [Doompi](https://www.npmjs.com/package/@agimon-ai/doompi), a coding agent that loads
9
+ only the skills and tools you name. This package is composed by Doompi and is not usually
10
+ installed on its own.
11
+
12
+ ## Install
13
+
14
+ ```bash
15
+ npm install @agimon-ai/doompi-extension-contracts
16
+ ```
17
+
18
+ ## How it loads
19
+
20
+ A library, not an extension. Doompi and its extensions depend on it directly; there is
21
+ nothing to declare in `.doom/modes.yaml`.
22
+
23
+ ## Notes
24
+
25
+ Each subpath is one protocol. `./mode` is the registry behind the shared `MODES` line;
26
+ `./leader` is the leader binding contribution API.
27
+
28
+ ## Entry points
29
+
30
+ 16 subpaths are declared in the `exports` field of `package.json`.
31
+
32
+ ## License
33
+
34
+ MIT
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./protocol.cjs");let t=require("typebox");const n=t.Type.Object({id:t.Type.String({minLength:1}),sessionId:t.Type.String({minLength:1}),label:t.Type.Optional(t.Type.String({minLength:1})),status:t.Type.Optional(t.Type.String({minLength:1}))},{additionalProperties:!1}),r=t.Type.Object({...n.properties,provider:t.Type.String({minLength:1})},{additionalProperties:!1}),i=t.Type.Object({provider:t.Type.String({minLength:1}),generation:t.Type.String({minLength:1})},{additionalProperties:!1}),a=t.Type.Object({...i.properties,items:t.Type.Array(n)},{additionalProperties:!1}),o=e.defineNotification({channel:`doom:background-work:provider:v1:discover`,kind:`background-work.provider.discover`,payload:t.Type.Object({},{additionalProperties:!1})}),s=e.defineNotification({channel:`doom:background-work:provider:v1:register`,kind:`background-work.provider.register`,payload:a}),c=e.defineNotification({channel:`doom:background-work:provider:v1:changed`,kind:`background-work.provider.changed`,payload:a}),l=e.defineNotification({channel:`doom:background-work:provider:v1:unregister`,kind:`background-work.provider.unregister`,payload:i}),u=e.defineRequestReply({channels:{request:`doom:background-work:list:v1:request`,response:`doom:background-work:list:v1:response`,error:`doom:background-work:list:v1:error`},kinds:{request:`background-work.list`,response:`background-work.items`},request:t.Type.Object({},{additionalProperties:!1}),response:t.Type.Object({items:t.Type.Array(r),errors:t.Type.Array(t.Type.Object({provider:t.Type.String(),message:t.Type.String()}))},{additionalProperties:!1})});function d(e,t){let n=`${t.provider}:${crypto.randomUUID()}`,r=!1,i=()=>({provider:t.provider,generation:n,items:[...t.listActiveWork()]}),a=()=>{r||e.notify(s,i())},u=e.onNotification(o,a);return a(),{update(){r||e.notify(c,i())},dispose(){r||(r=!0,u(),e.notify(l,{provider:t.provider,generation:n}))}}}function f(e){let t=new Map,n=[e.onNotification(s,({provider:e,generation:n,items:r})=>{t.set(e,{generation:n,items:r})}),e.onNotification(c,({provider:e,generation:n,items:r})=>{t.get(e)?.generation===n&&t.set(e,{generation:n,items:r})}),e.onNotification(l,({provider:e,generation:n})=>{t.get(e)?.generation===n&&t.delete(e)}),e.provide(u,()=>({items:[...t.entries()].flatMap(([e,t])=>t.items.map(t=>({provider:e,...t}))),errors:[]}))],r=()=>e.notify(o,{});return r(),{discover:r,dispose(){for(let e of n)e();t.clear()}}}exports.BackgroundProviderChanged=c,exports.BackgroundProviderDiscovery=o,exports.BackgroundProviderRegistration=s,exports.BackgroundProviderUnregistration=l,exports.BackgroundProviderWorkItemSchema=n,exports.BackgroundWorkItemSchema=r,exports.BackgroundWorkListProtocol=u,exports.provideBackgroundWorkRegistry=f,exports.registerBackgroundWorkProvider=d;
2
+ //# sourceMappingURL=backgroundWork.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgroundWork.cjs","names":["Type","defineNotification","defineRequestReply"],"sources":["../src/backgroundWork.ts"],"sourcesContent":["import { type Static, Type } from 'typebox';\nimport { defineNotification, defineRequestReply, type ProtocolRuntime } from './protocol.ts';\n\nexport const BackgroundProviderWorkItemSchema = Type.Object(\n {\n id: Type.String({ minLength: 1 }),\n sessionId: Type.String({ minLength: 1 }),\n label: Type.Optional(Type.String({ minLength: 1 })),\n status: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n);\nexport type BackgroundProviderWorkItem = Static<typeof BackgroundProviderWorkItemSchema>;\n\nexport const BackgroundWorkItemSchema = Type.Object(\n { ...BackgroundProviderWorkItemSchema.properties, provider: Type.String({ minLength: 1 }) },\n { additionalProperties: false },\n);\nexport type BackgroundWorkItem = Static<typeof BackgroundWorkItemSchema>;\n\nconst ProviderIdentitySchema = Type.Object(\n { provider: Type.String({ minLength: 1 }), generation: Type.String({ minLength: 1 }) },\n { additionalProperties: false },\n);\n\nconst ProviderSnapshotSchema = Type.Object(\n { ...ProviderIdentitySchema.properties, items: Type.Array(BackgroundProviderWorkItemSchema) },\n { additionalProperties: false },\n);\n\nexport const BackgroundProviderDiscovery = defineNotification({\n channel: 'doom:background-work:provider:v1:discover',\n kind: 'background-work.provider.discover',\n payload: Type.Object({}, { additionalProperties: false }),\n});\n\nexport const BackgroundProviderRegistration = defineNotification({\n channel: 'doom:background-work:provider:v1:register',\n kind: 'background-work.provider.register',\n payload: ProviderSnapshotSchema,\n});\n\nexport const BackgroundProviderChanged = defineNotification({\n channel: 'doom:background-work:provider:v1:changed',\n kind: 'background-work.provider.changed',\n payload: ProviderSnapshotSchema,\n});\n\nexport const BackgroundProviderUnregistration = defineNotification({\n channel: 'doom:background-work:provider:v1:unregister',\n kind: 'background-work.provider.unregister',\n payload: ProviderIdentitySchema,\n});\n\nexport const BackgroundWorkListProtocol = defineRequestReply({\n channels: {\n request: 'doom:background-work:list:v1:request',\n response: 'doom:background-work:list:v1:response',\n error: 'doom:background-work:list:v1:error',\n },\n kinds: { request: 'background-work.list', response: 'background-work.items' },\n request: Type.Object({}, { additionalProperties: false }),\n response: Type.Object(\n {\n items: Type.Array(BackgroundWorkItemSchema),\n errors: Type.Array(Type.Object({ provider: Type.String(), message: Type.String() })),\n },\n { additionalProperties: false },\n ),\n});\n\nexport interface BackgroundWorkProvider {\n provider: string;\n listActiveWork(): readonly BackgroundProviderWorkItem[];\n}\n\nexport interface BackgroundWorkProviderHandle {\n update(): void;\n dispose(): void;\n}\n\nexport function registerBackgroundWorkProvider(\n runtime: ProtocolRuntime,\n provider: BackgroundWorkProvider,\n): BackgroundWorkProviderHandle {\n const generation = `${provider.provider}:${crypto.randomUUID()}`;\n let disposed = false;\n const snapshot = () => ({\n provider: provider.provider,\n generation,\n items: [...provider.listActiveWork()],\n });\n const announce = (): void => {\n if (!disposed) runtime.notify(BackgroundProviderRegistration, snapshot());\n };\n const disposeDiscovery = runtime.onNotification(BackgroundProviderDiscovery, announce);\n announce();\n return {\n update() {\n if (!disposed) runtime.notify(BackgroundProviderChanged, snapshot());\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n disposeDiscovery();\n runtime.notify(BackgroundProviderUnregistration, { provider: provider.provider, generation });\n },\n };\n}\n\ninterface ProviderSnapshot {\n generation: string;\n items: BackgroundProviderWorkItem[];\n}\n\nexport interface BackgroundWorkRegistryHandle {\n discover(): void;\n dispose(): void;\n}\n\nexport function provideBackgroundWorkRegistry(runtime: ProtocolRuntime): BackgroundWorkRegistryHandle {\n const providers = new Map<string, ProviderSnapshot>();\n const register = ({ provider, generation, items }: Static<typeof ProviderSnapshotSchema>): void => {\n providers.set(provider, { generation, items });\n };\n const update = ({ provider, generation, items }: Static<typeof ProviderSnapshotSchema>): void => {\n if (providers.get(provider)?.generation === generation) providers.set(provider, { generation, items });\n };\n const disposers = [\n runtime.onNotification(BackgroundProviderRegistration, register),\n runtime.onNotification(BackgroundProviderChanged, update),\n runtime.onNotification(BackgroundProviderUnregistration, ({ provider, generation }) => {\n if (providers.get(provider)?.generation === generation) providers.delete(provider);\n }),\n runtime.provide(BackgroundWorkListProtocol, () => ({\n items: [...providers.entries()].flatMap(([provider, snapshot]) =>\n snapshot.items.map((item) => ({ provider, ...item })),\n ),\n errors: [],\n })),\n ];\n const discover = (): void => runtime.notify(BackgroundProviderDiscovery, {});\n discover();\n return {\n discover,\n dispose() {\n for (const dispose of disposers) dispose();\n providers.clear();\n },\n };\n}\n"],"mappings":"8HAGA,MAAa,EAAmCA,EAAAA,KAAK,OACnD,CACE,GAAIA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAChC,UAAWA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACvC,MAAOA,EAAAA,KAAK,SAASA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAC,EAClD,OAAQA,EAAAA,KAAK,SAASA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAC,CACrD,EACA,CAAE,qBAAsB,EAAM,CAChC,EAGa,EAA2BA,EAAAA,KAAK,OAC3C,CAAE,GAAG,EAAiC,WAAY,SAAUA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAE,EAC1F,CAAE,qBAAsB,EAAM,CAChC,EAGM,EAAyBA,EAAAA,KAAK,OAClC,CAAE,SAAUA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAAG,WAAYA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAE,EACrF,CAAE,qBAAsB,EAAM,CAChC,EAEM,EAAyBA,EAAAA,KAAK,OAClC,CAAE,GAAG,EAAuB,WAAY,MAAOA,EAAAA,KAAK,MAAM,CAAgC,CAAE,EAC5F,CAAE,qBAAsB,EAAM,CAChC,EAEa,EAA8BC,EAAAA,mBAAmB,CAC5D,QAAS,4CACT,KAAM,oCACN,QAASD,EAAAA,KAAK,OAAO,CAAC,EAAG,CAAE,qBAAsB,EAAM,CAAC,CAC1D,CAAC,EAEY,EAAiCC,EAAAA,mBAAmB,CAC/D,QAAS,4CACT,KAAM,oCACN,QAAS,CACX,CAAC,EAEY,EAA4BA,EAAAA,mBAAmB,CAC1D,QAAS,2CACT,KAAM,mCACN,QAAS,CACX,CAAC,EAEY,EAAmCA,EAAAA,mBAAmB,CACjE,QAAS,8CACT,KAAM,sCACN,QAAS,CACX,CAAC,EAEY,EAA6BC,EAAAA,mBAAmB,CAC3D,SAAU,CACR,QAAS,uCACT,SAAU,wCACV,MAAO,oCACT,EACA,MAAO,CAAE,QAAS,uBAAwB,SAAU,uBAAwB,EAC5E,QAASF,EAAAA,KAAK,OAAO,CAAC,EAAG,CAAE,qBAAsB,EAAM,CAAC,EACxD,SAAUA,EAAAA,KAAK,OACb,CACE,MAAOA,EAAAA,KAAK,MAAM,CAAwB,EAC1C,OAAQA,EAAAA,KAAK,MAAMA,EAAAA,KAAK,OAAO,CAAE,SAAUA,EAAAA,KAAK,OAAO,EAAG,QAASA,EAAAA,KAAK,OAAO,CAAE,CAAC,CAAC,CACrF,EACA,CAAE,qBAAsB,EAAM,CAChC,CACF,CAAC,EAYD,SAAgB,EACd,EACA,EAC8B,CAC9B,IAAM,EAAa,GAAG,EAAS,SAAS,GAAG,OAAO,WAAW,IACzD,EAAW,GACT,OAAkB,CACtB,SAAU,EAAS,SACnB,aACA,MAAO,CAAC,GAAG,EAAS,eAAe,CAAC,CACtC,GACM,MAAuB,CACtB,GAAU,EAAQ,OAAO,EAAgC,EAAS,CAAC,CAC1E,EACM,EAAmB,EAAQ,eAAe,EAA6B,CAAQ,EAErF,OADA,EAAS,EACF,CACL,QAAS,CACF,GAAU,EAAQ,OAAO,EAA2B,EAAS,CAAC,CACrE,EACA,SAAU,CACJ,IACJ,EAAW,GACX,EAAiB,EACjB,EAAQ,OAAO,EAAkC,CAAE,SAAU,EAAS,SAAU,YAAW,CAAC,EAC9F,CACF,CACF,CAYA,SAAgB,EAA8B,EAAwD,CACpG,IAAM,EAAY,IAAI,IAOhB,EAAY,CAChB,EAAQ,eAAe,GAPP,CAAE,WAAU,aAAY,WAAyD,CACjG,EAAU,IAAI,EAAU,CAAE,aAAY,OAAM,CAAC,CAC/C,CAKiE,EAC/D,EAAQ,eAAe,GALT,CAAE,WAAU,aAAY,WAAyD,CAC3F,EAAU,IAAI,CAAQ,CAAC,EAAE,aAAe,GAAY,EAAU,IAAI,EAAU,CAAE,aAAY,OAAM,CAAC,CACvG,CAG0D,EACxD,EAAQ,eAAe,GAAmC,CAAE,WAAU,gBAAiB,CACjF,EAAU,IAAI,CAAQ,CAAC,EAAE,aAAe,GAAY,EAAU,OAAO,CAAQ,CACnF,CAAC,EACD,EAAQ,QAAQ,OAAmC,CACjD,MAAO,CAAC,GAAG,EAAU,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAU,KAClD,EAAS,MAAM,IAAK,IAAU,CAAE,WAAU,GAAG,CAAK,EAAE,CACtD,EACA,OAAQ,CAAC,CACX,EAAE,CACJ,EACM,MAAuB,EAAQ,OAAO,EAA6B,CAAC,CAAC,EAE3E,OADA,EAAS,EACF,CACL,WACA,SAAU,CACR,IAAK,IAAM,KAAW,EAAW,EAAQ,EACzC,EAAU,MAAM,CAClB,CACF,CACF"}
@@ -0,0 +1,73 @@
1
+ import { NotificationDefinition, ProtocolRuntime, RequestReplyDefinition } from "./protocol.cjs";
2
+ import { Static, Type } from "typebox";
3
+ //#region src/backgroundWork.d.ts
4
+ declare const BackgroundProviderWorkItemSchema: Type.TObject<{
5
+ id: Type.TString;
6
+ sessionId: Type.TString;
7
+ label: Type.TOptional<Type.TString>;
8
+ status: Type.TOptional<Type.TString>;
9
+ }>;
10
+ type BackgroundProviderWorkItem = Static<typeof BackgroundProviderWorkItemSchema>;
11
+ declare const BackgroundWorkItemSchema: Type.TObject<{
12
+ provider: Type.TString;
13
+ id: Type.TString;
14
+ sessionId: Type.TString;
15
+ label: Type.TOptional<Type.TString>;
16
+ status: Type.TOptional<Type.TString>;
17
+ }>;
18
+ type BackgroundWorkItem = Static<typeof BackgroundWorkItemSchema>;
19
+ declare const BackgroundProviderDiscovery: NotificationDefinition<Type.TObject<{}>>;
20
+ declare const BackgroundProviderRegistration: NotificationDefinition<Type.TObject<{
21
+ items: Type.TArray<Type.TObject<{
22
+ id: Type.TString;
23
+ sessionId: Type.TString;
24
+ label: Type.TOptional<Type.TString>;
25
+ status: Type.TOptional<Type.TString>;
26
+ }>>;
27
+ provider: Type.TString;
28
+ generation: Type.TString;
29
+ }>>;
30
+ declare const BackgroundProviderChanged: NotificationDefinition<Type.TObject<{
31
+ items: Type.TArray<Type.TObject<{
32
+ id: Type.TString;
33
+ sessionId: Type.TString;
34
+ label: Type.TOptional<Type.TString>;
35
+ status: Type.TOptional<Type.TString>;
36
+ }>>;
37
+ provider: Type.TString;
38
+ generation: Type.TString;
39
+ }>>;
40
+ declare const BackgroundProviderUnregistration: NotificationDefinition<Type.TObject<{
41
+ provider: Type.TString;
42
+ generation: Type.TString;
43
+ }>>;
44
+ declare const BackgroundWorkListProtocol: RequestReplyDefinition<Type.TObject<{}>, Type.TObject<{
45
+ items: Type.TArray<Type.TObject<{
46
+ provider: Type.TString;
47
+ id: Type.TString;
48
+ sessionId: Type.TString;
49
+ label: Type.TOptional<Type.TString>;
50
+ status: Type.TOptional<Type.TString>;
51
+ }>>;
52
+ errors: Type.TArray<Type.TObject<{
53
+ provider: Type.TString;
54
+ message: Type.TString;
55
+ }>>;
56
+ }>>;
57
+ interface BackgroundWorkProvider {
58
+ provider: string;
59
+ listActiveWork(): readonly BackgroundProviderWorkItem[];
60
+ }
61
+ interface BackgroundWorkProviderHandle {
62
+ update(): void;
63
+ dispose(): void;
64
+ }
65
+ declare function registerBackgroundWorkProvider(runtime: ProtocolRuntime, provider: BackgroundWorkProvider): BackgroundWorkProviderHandle;
66
+ interface BackgroundWorkRegistryHandle {
67
+ discover(): void;
68
+ dispose(): void;
69
+ }
70
+ declare function provideBackgroundWorkRegistry(runtime: ProtocolRuntime): BackgroundWorkRegistryHandle;
71
+ //#endregion
72
+ export { BackgroundProviderChanged, BackgroundProviderDiscovery, BackgroundProviderRegistration, BackgroundProviderUnregistration, BackgroundProviderWorkItem, BackgroundProviderWorkItemSchema, BackgroundWorkItem, BackgroundWorkItemSchema, BackgroundWorkListProtocol, BackgroundWorkProvider, BackgroundWorkProviderHandle, BackgroundWorkRegistryHandle, provideBackgroundWorkRegistry, registerBackgroundWorkProvider };
73
+ //# sourceMappingURL=backgroundWork.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgroundWork.d.cts","names":[],"sources":["../src/backgroundWork.ts"],"mappings":";;;cAGa,kCAAgC,KAAA;;;;;;KASjC,6BAA6B,cAAc;cAE1C,0BAAwB,KAAA;;;;;;;KAIzB,qBAAqB,cAAc;cAYlC,6BAA2B,uBAAA,KAAA;cAM3B,gCAA8B,uBAAA,KAAA;;;;;;;;;;cAM9B,2BAAyB,uBAAA,KAAA;;;;;;;;;;cAMzB,kCAAgC,uBAAA,KAAA;;;;cAMhC,4BAA0B,uBAAA,KAAA,aAAA,KAAA;;;;;;;;;;;;;UAiBtB;EACf;EACA,2BAA2B;;UAGZ;EACf;EACA;;iBAGc,+BACd,SAAS,iBACT,UAAU,yBACT;UA+Bc;EACf;EACA;;iBAGc,8BAA8B,SAAS,kBAAkB"}
@@ -0,0 +1,73 @@
1
+ import { NotificationDefinition, ProtocolRuntime, RequestReplyDefinition } from "./protocol.mjs";
2
+ import { Static, Type } from "typebox";
3
+ //#region src/backgroundWork.d.ts
4
+ declare const BackgroundProviderWorkItemSchema: Type.TObject<{
5
+ id: Type.TString;
6
+ sessionId: Type.TString;
7
+ label: Type.TOptional<Type.TString>;
8
+ status: Type.TOptional<Type.TString>;
9
+ }>;
10
+ type BackgroundProviderWorkItem = Static<typeof BackgroundProviderWorkItemSchema>;
11
+ declare const BackgroundWorkItemSchema: Type.TObject<{
12
+ provider: Type.TString;
13
+ id: Type.TString;
14
+ sessionId: Type.TString;
15
+ label: Type.TOptional<Type.TString>;
16
+ status: Type.TOptional<Type.TString>;
17
+ }>;
18
+ type BackgroundWorkItem = Static<typeof BackgroundWorkItemSchema>;
19
+ declare const BackgroundProviderDiscovery: NotificationDefinition<Type.TObject<{}>>;
20
+ declare const BackgroundProviderRegistration: NotificationDefinition<Type.TObject<{
21
+ items: Type.TArray<Type.TObject<{
22
+ id: Type.TString;
23
+ sessionId: Type.TString;
24
+ label: Type.TOptional<Type.TString>;
25
+ status: Type.TOptional<Type.TString>;
26
+ }>>;
27
+ provider: Type.TString;
28
+ generation: Type.TString;
29
+ }>>;
30
+ declare const BackgroundProviderChanged: NotificationDefinition<Type.TObject<{
31
+ items: Type.TArray<Type.TObject<{
32
+ id: Type.TString;
33
+ sessionId: Type.TString;
34
+ label: Type.TOptional<Type.TString>;
35
+ status: Type.TOptional<Type.TString>;
36
+ }>>;
37
+ provider: Type.TString;
38
+ generation: Type.TString;
39
+ }>>;
40
+ declare const BackgroundProviderUnregistration: NotificationDefinition<Type.TObject<{
41
+ provider: Type.TString;
42
+ generation: Type.TString;
43
+ }>>;
44
+ declare const BackgroundWorkListProtocol: RequestReplyDefinition<Type.TObject<{}>, Type.TObject<{
45
+ items: Type.TArray<Type.TObject<{
46
+ provider: Type.TString;
47
+ id: Type.TString;
48
+ sessionId: Type.TString;
49
+ label: Type.TOptional<Type.TString>;
50
+ status: Type.TOptional<Type.TString>;
51
+ }>>;
52
+ errors: Type.TArray<Type.TObject<{
53
+ provider: Type.TString;
54
+ message: Type.TString;
55
+ }>>;
56
+ }>>;
57
+ interface BackgroundWorkProvider {
58
+ provider: string;
59
+ listActiveWork(): readonly BackgroundProviderWorkItem[];
60
+ }
61
+ interface BackgroundWorkProviderHandle {
62
+ update(): void;
63
+ dispose(): void;
64
+ }
65
+ declare function registerBackgroundWorkProvider(runtime: ProtocolRuntime, provider: BackgroundWorkProvider): BackgroundWorkProviderHandle;
66
+ interface BackgroundWorkRegistryHandle {
67
+ discover(): void;
68
+ dispose(): void;
69
+ }
70
+ declare function provideBackgroundWorkRegistry(runtime: ProtocolRuntime): BackgroundWorkRegistryHandle;
71
+ //#endregion
72
+ export { BackgroundProviderChanged, BackgroundProviderDiscovery, BackgroundProviderRegistration, BackgroundProviderUnregistration, BackgroundProviderWorkItem, BackgroundProviderWorkItemSchema, BackgroundWorkItem, BackgroundWorkItemSchema, BackgroundWorkListProtocol, BackgroundWorkProvider, BackgroundWorkProviderHandle, BackgroundWorkRegistryHandle, provideBackgroundWorkRegistry, registerBackgroundWorkProvider };
73
+ //# sourceMappingURL=backgroundWork.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgroundWork.d.mts","names":[],"sources":["../src/backgroundWork.ts"],"mappings":";;;cAGa,kCAAgC,KAAA;;;;;;KASjC,6BAA6B,cAAc;cAE1C,0BAAwB,KAAA;;;;;;;KAIzB,qBAAqB,cAAc;cAYlC,6BAA2B,uBAAA,KAAA;cAM3B,gCAA8B,uBAAA,KAAA;;;;;;;;;;cAM9B,2BAAyB,uBAAA,KAAA;;;;;;;;;;cAMzB,kCAAgC,uBAAA,KAAA;;;;cAMhC,4BAA0B,uBAAA,KAAA,aAAA,KAAA;;;;;;;;;;;;;UAiBtB;EACf;EACA,2BAA2B;;UAGZ;EACf;EACA;;iBAGc,+BACd,SAAS,iBACT,UAAU,yBACT;UA+Bc;EACf;EACA;;iBAGc,8BAA8B,SAAS,kBAAkB"}
@@ -0,0 +1,2 @@
1
+ import{defineNotification as e,defineRequestReply as t}from"./protocol.mjs";import{Type as n}from"typebox";const r=n.Object({id:n.String({minLength:1}),sessionId:n.String({minLength:1}),label:n.Optional(n.String({minLength:1})),status:n.Optional(n.String({minLength:1}))},{additionalProperties:!1}),i=n.Object({...r.properties,provider:n.String({minLength:1})},{additionalProperties:!1}),a=n.Object({provider:n.String({minLength:1}),generation:n.String({minLength:1})},{additionalProperties:!1}),o=n.Object({...a.properties,items:n.Array(r)},{additionalProperties:!1}),s=e({channel:`doom:background-work:provider:v1:discover`,kind:`background-work.provider.discover`,payload:n.Object({},{additionalProperties:!1})}),c=e({channel:`doom:background-work:provider:v1:register`,kind:`background-work.provider.register`,payload:o}),l=e({channel:`doom:background-work:provider:v1:changed`,kind:`background-work.provider.changed`,payload:o}),u=e({channel:`doom:background-work:provider:v1:unregister`,kind:`background-work.provider.unregister`,payload:a}),d=t({channels:{request:`doom:background-work:list:v1:request`,response:`doom:background-work:list:v1:response`,error:`doom:background-work:list:v1:error`},kinds:{request:`background-work.list`,response:`background-work.items`},request:n.Object({},{additionalProperties:!1}),response:n.Object({items:n.Array(i),errors:n.Array(n.Object({provider:n.String(),message:n.String()}))},{additionalProperties:!1})});function f(e,t){let n=`${t.provider}:${crypto.randomUUID()}`,r=!1,i=()=>({provider:t.provider,generation:n,items:[...t.listActiveWork()]}),a=()=>{r||e.notify(c,i())},o=e.onNotification(s,a);return a(),{update(){r||e.notify(l,i())},dispose(){r||(r=!0,o(),e.notify(u,{provider:t.provider,generation:n}))}}}function p(e){let t=new Map,n=[e.onNotification(c,({provider:e,generation:n,items:r})=>{t.set(e,{generation:n,items:r})}),e.onNotification(l,({provider:e,generation:n,items:r})=>{t.get(e)?.generation===n&&t.set(e,{generation:n,items:r})}),e.onNotification(u,({provider:e,generation:n})=>{t.get(e)?.generation===n&&t.delete(e)}),e.provide(d,()=>({items:[...t.entries()].flatMap(([e,t])=>t.items.map(t=>({provider:e,...t}))),errors:[]}))],r=()=>e.notify(s,{});return r(),{discover:r,dispose(){for(let e of n)e();t.clear()}}}export{l as BackgroundProviderChanged,s as BackgroundProviderDiscovery,c as BackgroundProviderRegistration,u as BackgroundProviderUnregistration,r as BackgroundProviderWorkItemSchema,i as BackgroundWorkItemSchema,d as BackgroundWorkListProtocol,p as provideBackgroundWorkRegistry,f as registerBackgroundWorkProvider};
2
+ //# sourceMappingURL=backgroundWork.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgroundWork.mjs","names":[],"sources":["../src/backgroundWork.ts"],"sourcesContent":["import { type Static, Type } from 'typebox';\nimport { defineNotification, defineRequestReply, type ProtocolRuntime } from './protocol.ts';\n\nexport const BackgroundProviderWorkItemSchema = Type.Object(\n {\n id: Type.String({ minLength: 1 }),\n sessionId: Type.String({ minLength: 1 }),\n label: Type.Optional(Type.String({ minLength: 1 })),\n status: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n);\nexport type BackgroundProviderWorkItem = Static<typeof BackgroundProviderWorkItemSchema>;\n\nexport const BackgroundWorkItemSchema = Type.Object(\n { ...BackgroundProviderWorkItemSchema.properties, provider: Type.String({ minLength: 1 }) },\n { additionalProperties: false },\n);\nexport type BackgroundWorkItem = Static<typeof BackgroundWorkItemSchema>;\n\nconst ProviderIdentitySchema = Type.Object(\n { provider: Type.String({ minLength: 1 }), generation: Type.String({ minLength: 1 }) },\n { additionalProperties: false },\n);\n\nconst ProviderSnapshotSchema = Type.Object(\n { ...ProviderIdentitySchema.properties, items: Type.Array(BackgroundProviderWorkItemSchema) },\n { additionalProperties: false },\n);\n\nexport const BackgroundProviderDiscovery = defineNotification({\n channel: 'doom:background-work:provider:v1:discover',\n kind: 'background-work.provider.discover',\n payload: Type.Object({}, { additionalProperties: false }),\n});\n\nexport const BackgroundProviderRegistration = defineNotification({\n channel: 'doom:background-work:provider:v1:register',\n kind: 'background-work.provider.register',\n payload: ProviderSnapshotSchema,\n});\n\nexport const BackgroundProviderChanged = defineNotification({\n channel: 'doom:background-work:provider:v1:changed',\n kind: 'background-work.provider.changed',\n payload: ProviderSnapshotSchema,\n});\n\nexport const BackgroundProviderUnregistration = defineNotification({\n channel: 'doom:background-work:provider:v1:unregister',\n kind: 'background-work.provider.unregister',\n payload: ProviderIdentitySchema,\n});\n\nexport const BackgroundWorkListProtocol = defineRequestReply({\n channels: {\n request: 'doom:background-work:list:v1:request',\n response: 'doom:background-work:list:v1:response',\n error: 'doom:background-work:list:v1:error',\n },\n kinds: { request: 'background-work.list', response: 'background-work.items' },\n request: Type.Object({}, { additionalProperties: false }),\n response: Type.Object(\n {\n items: Type.Array(BackgroundWorkItemSchema),\n errors: Type.Array(Type.Object({ provider: Type.String(), message: Type.String() })),\n },\n { additionalProperties: false },\n ),\n});\n\nexport interface BackgroundWorkProvider {\n provider: string;\n listActiveWork(): readonly BackgroundProviderWorkItem[];\n}\n\nexport interface BackgroundWorkProviderHandle {\n update(): void;\n dispose(): void;\n}\n\nexport function registerBackgroundWorkProvider(\n runtime: ProtocolRuntime,\n provider: BackgroundWorkProvider,\n): BackgroundWorkProviderHandle {\n const generation = `${provider.provider}:${crypto.randomUUID()}`;\n let disposed = false;\n const snapshot = () => ({\n provider: provider.provider,\n generation,\n items: [...provider.listActiveWork()],\n });\n const announce = (): void => {\n if (!disposed) runtime.notify(BackgroundProviderRegistration, snapshot());\n };\n const disposeDiscovery = runtime.onNotification(BackgroundProviderDiscovery, announce);\n announce();\n return {\n update() {\n if (!disposed) runtime.notify(BackgroundProviderChanged, snapshot());\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n disposeDiscovery();\n runtime.notify(BackgroundProviderUnregistration, { provider: provider.provider, generation });\n },\n };\n}\n\ninterface ProviderSnapshot {\n generation: string;\n items: BackgroundProviderWorkItem[];\n}\n\nexport interface BackgroundWorkRegistryHandle {\n discover(): void;\n dispose(): void;\n}\n\nexport function provideBackgroundWorkRegistry(runtime: ProtocolRuntime): BackgroundWorkRegistryHandle {\n const providers = new Map<string, ProviderSnapshot>();\n const register = ({ provider, generation, items }: Static<typeof ProviderSnapshotSchema>): void => {\n providers.set(provider, { generation, items });\n };\n const update = ({ provider, generation, items }: Static<typeof ProviderSnapshotSchema>): void => {\n if (providers.get(provider)?.generation === generation) providers.set(provider, { generation, items });\n };\n const disposers = [\n runtime.onNotification(BackgroundProviderRegistration, register),\n runtime.onNotification(BackgroundProviderChanged, update),\n runtime.onNotification(BackgroundProviderUnregistration, ({ provider, generation }) => {\n if (providers.get(provider)?.generation === generation) providers.delete(provider);\n }),\n runtime.provide(BackgroundWorkListProtocol, () => ({\n items: [...providers.entries()].flatMap(([provider, snapshot]) =>\n snapshot.items.map((item) => ({ provider, ...item })),\n ),\n errors: [],\n })),\n ];\n const discover = (): void => runtime.notify(BackgroundProviderDiscovery, {});\n discover();\n return {\n discover,\n dispose() {\n for (const dispose of disposers) dispose();\n providers.clear();\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("typebox"),t=require("typebox/value");const n=`PI_SUBAGENT_ROOT_SESSION`,r=`DOOM_CHILD_PROCESS_CONTEXT_V1`;function i(e,t=process.env){let r=t[n]?.trim();if(r)return r;let i=e.trim();if(!i)throw Error(`A root session requires a non-empty current session id.`);return i}const a=e.Type.Object({parentSessionId:e.Type.String({minLength:1}),workingDirectory:e.Type.String({minLength:1}),mode:e.Type.Optional(e.Type.String({minLength:1}))},{additionalProperties:!1});function o(e){return JSON.stringify(e)}function s(e){let n=JSON.parse(e);if(!(0,t.Check)(a,n)){let e=(0,t.Errors)(a,n).map(e=>e.message).join(`; `);throw Error(`Invalid child process context: ${e}`)}return n}function c(e){return{[r]:o(e)}}function l(e){let t=e[r]?.trim();return t?s(t):void 0}exports.ChildProcessContextSchema=a,exports.DOOM_CHILD_PROCESS_CONTEXT_ENV=r,exports.SUBAGENT_CHILD_ENV=`PI_SUBAGENT_CHILD`,exports.SUBAGENT_PARENT_SESSION_ENV=`PI_SUBAGENT_PARENT_SESSION`,exports.SUBAGENT_ROOT_SESSION_ENV=n,exports.childProcessContextEnvironment=c,exports.decodeChildProcessContext=s,exports.encodeChildProcessContext=o,exports.readChildProcessContext=l,exports.resolveRootSessionId=i;
2
+ //# sourceMappingURL=childProcess.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"childProcess.cjs","names":["Type","Check","Errors"],"sources":["../src/childProcess.ts"],"sourcesContent":["import { type Static, Type } from 'typebox';\nimport { Check, Errors } from 'typebox/value';\n\nexport const SUBAGENT_CHILD_ENV = 'PI_SUBAGENT_CHILD';\nexport const SUBAGENT_PARENT_SESSION_ENV = 'PI_SUBAGENT_PARENT_SESSION';\nexport const SUBAGENT_ROOT_SESSION_ENV = 'PI_SUBAGENT_ROOT_SESSION';\nexport const DOOM_CHILD_PROCESS_CONTEXT_ENV = 'DOOM_CHILD_PROCESS_CONTEXT_V1';\n\nexport function resolveRootSessionId(\n currentSessionId: string,\n environment: Readonly<Record<string, string | undefined>> = process.env,\n): string {\n const inherited = environment[SUBAGENT_ROOT_SESSION_ENV]?.trim();\n if (inherited) return inherited;\n const current = currentSessionId.trim();\n if (!current) throw new Error('A root session requires a non-empty current session id.');\n return current;\n}\n\nexport const ChildProcessContextSchema = Type.Object(\n {\n parentSessionId: Type.String({ minLength: 1 }),\n workingDirectory: Type.String({ minLength: 1 }),\n mode: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n);\nexport type ChildProcessContext = Static<typeof ChildProcessContextSchema>;\n\nexport function encodeChildProcessContext(context: ChildProcessContext): string {\n return JSON.stringify(context);\n}\n\nexport function decodeChildProcessContext(serialized: string): ChildProcessContext {\n const parsed: unknown = JSON.parse(serialized);\n if (!Check(ChildProcessContextSchema, parsed)) {\n const details = Errors(ChildProcessContextSchema, parsed)\n .map((error) => error.message)\n .join('; ');\n throw new Error(`Invalid child process context: ${details}`);\n }\n return parsed;\n}\n\nexport function childProcessContextEnvironment(context: ChildProcessContext): Record<string, string> {\n return { [DOOM_CHILD_PROCESS_CONTEXT_ENV]: encodeChildProcessContext(context) };\n}\n\nexport function readChildProcessContext(\n environment: Readonly<Record<string, string | undefined>>,\n): ChildProcessContext | undefined {\n const serialized = environment[DOOM_CHILD_PROCESS_CONTEXT_ENV]?.trim();\n return serialized ? decodeChildProcessContext(serialized) : undefined;\n}\n"],"mappings":"uHAGA,MAEa,EAA4B,2BAC5B,EAAiC,gCAE9C,SAAgB,EACd,EACA,EAA4D,QAAQ,IAC5D,CACR,IAAM,EAAY,EAAY,EAA0B,EAAE,KAAK,EAC/D,GAAI,EAAW,OAAO,EACtB,IAAM,EAAU,EAAiB,KAAK,EACtC,GAAI,CAAC,EAAS,MAAU,MAAM,yDAAyD,EACvF,OAAO,CACT,CAEA,MAAa,EAA4BA,EAAAA,KAAK,OAC5C,CACE,gBAAiBA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC7C,iBAAkBA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC9C,KAAMA,EAAAA,KAAK,SAASA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAC,CACnD,EACA,CAAE,qBAAsB,EAAM,CAChC,EAGA,SAAgB,EAA0B,EAAsC,CAC9E,OAAO,KAAK,UAAU,CAAO,CAC/B,CAEA,SAAgB,EAA0B,EAAyC,CACjF,IAAM,EAAkB,KAAK,MAAM,CAAU,EAC7C,GAAI,EAAA,EAACC,EAAAA,MAAAA,CAAM,EAA2B,CAAM,EAAG,CAC7C,IAAM,GAAA,EAAUC,EAAAA,OAAAA,CAAO,EAA2B,CAAM,CAAC,CACtD,IAAK,GAAU,EAAM,OAAO,CAAC,CAC7B,KAAK,IAAI,EACZ,MAAU,MAAM,kCAAkC,GAAS,CAC7D,CACA,OAAO,CACT,CAEA,SAAgB,EAA+B,EAAsD,CACnG,MAAO,EAAG,GAAiC,EAA0B,CAAO,CAAE,CAChF,CAEA,SAAgB,EACd,EACiC,CACjC,IAAM,EAAa,EAAY,EAA+B,EAAE,KAAK,EACrE,OAAO,EAAa,EAA0B,CAAU,EAAI,IAAA,EAC9D"}
@@ -0,0 +1,20 @@
1
+ import { Static, Type } from "typebox";
2
+ //#region src/childProcess.d.ts
3
+ declare const SUBAGENT_CHILD_ENV = "PI_SUBAGENT_CHILD";
4
+ declare const SUBAGENT_PARENT_SESSION_ENV = "PI_SUBAGENT_PARENT_SESSION";
5
+ declare const SUBAGENT_ROOT_SESSION_ENV = "PI_SUBAGENT_ROOT_SESSION";
6
+ declare const DOOM_CHILD_PROCESS_CONTEXT_ENV = "DOOM_CHILD_PROCESS_CONTEXT_V1";
7
+ declare function resolveRootSessionId(currentSessionId: string, environment?: Readonly<Record<string, string | undefined>>): string;
8
+ declare const ChildProcessContextSchema: Type.TObject<{
9
+ parentSessionId: Type.TString;
10
+ workingDirectory: Type.TString;
11
+ mode: Type.TOptional<Type.TString>;
12
+ }>;
13
+ type ChildProcessContext = Static<typeof ChildProcessContextSchema>;
14
+ declare function encodeChildProcessContext(context: ChildProcessContext): string;
15
+ declare function decodeChildProcessContext(serialized: string): ChildProcessContext;
16
+ declare function childProcessContextEnvironment(context: ChildProcessContext): Record<string, string>;
17
+ declare function readChildProcessContext(environment: Readonly<Record<string, string | undefined>>): ChildProcessContext | undefined;
18
+ //#endregion
19
+ export { ChildProcessContext, ChildProcessContextSchema, DOOM_CHILD_PROCESS_CONTEXT_ENV, SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV, SUBAGENT_ROOT_SESSION_ENV, childProcessContextEnvironment, decodeChildProcessContext, encodeChildProcessContext, readChildProcessContext, resolveRootSessionId };
20
+ //# sourceMappingURL=childProcess.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"childProcess.d.cts","names":[],"sources":["../src/childProcess.ts"],"mappings":";;cAGa;cACA;cACA;cACA;iBAEG,qBACd,0BACA,cAAa,SAAS;cASX,2BAAyB,KAAA;;;;;KAQ1B,sBAAsB,cAAc;iBAEhC,0BAA0B,SAAS;iBAInC,0BAA0B,qBAAqB;iBAW/C,+BAA+B,SAAS,sBAAsB;iBAI9D,wBACd,aAAa,SAAS,sCACrB"}
@@ -0,0 +1,20 @@
1
+ import { Static, Type } from "typebox";
2
+ //#region src/childProcess.d.ts
3
+ declare const SUBAGENT_CHILD_ENV = "PI_SUBAGENT_CHILD";
4
+ declare const SUBAGENT_PARENT_SESSION_ENV = "PI_SUBAGENT_PARENT_SESSION";
5
+ declare const SUBAGENT_ROOT_SESSION_ENV = "PI_SUBAGENT_ROOT_SESSION";
6
+ declare const DOOM_CHILD_PROCESS_CONTEXT_ENV = "DOOM_CHILD_PROCESS_CONTEXT_V1";
7
+ declare function resolveRootSessionId(currentSessionId: string, environment?: Readonly<Record<string, string | undefined>>): string;
8
+ declare const ChildProcessContextSchema: Type.TObject<{
9
+ parentSessionId: Type.TString;
10
+ workingDirectory: Type.TString;
11
+ mode: Type.TOptional<Type.TString>;
12
+ }>;
13
+ type ChildProcessContext = Static<typeof ChildProcessContextSchema>;
14
+ declare function encodeChildProcessContext(context: ChildProcessContext): string;
15
+ declare function decodeChildProcessContext(serialized: string): ChildProcessContext;
16
+ declare function childProcessContextEnvironment(context: ChildProcessContext): Record<string, string>;
17
+ declare function readChildProcessContext(environment: Readonly<Record<string, string | undefined>>): ChildProcessContext | undefined;
18
+ //#endregion
19
+ export { ChildProcessContext, ChildProcessContextSchema, DOOM_CHILD_PROCESS_CONTEXT_ENV, SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV, SUBAGENT_ROOT_SESSION_ENV, childProcessContextEnvironment, decodeChildProcessContext, encodeChildProcessContext, readChildProcessContext, resolveRootSessionId };
20
+ //# sourceMappingURL=childProcess.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"childProcess.d.mts","names":[],"sources":["../src/childProcess.ts"],"mappings":";;cAGa;cACA;cACA;cACA;iBAEG,qBACd,0BACA,cAAa,SAAS;cASX,2BAAyB,KAAA;;;;;KAQ1B,sBAAsB,cAAc;iBAEhC,0BAA0B,SAAS;iBAInC,0BAA0B,qBAAqB;iBAW/C,+BAA+B,SAAS,sBAAsB;iBAI9D,wBACd,aAAa,SAAS,sCACrB"}
@@ -0,0 +1,2 @@
1
+ import{Type as e}from"typebox";import{Check as t,Errors as n}from"typebox/value";const r=`PI_SUBAGENT_CHILD`,i=`PI_SUBAGENT_PARENT_SESSION`,a=`PI_SUBAGENT_ROOT_SESSION`,o=`DOOM_CHILD_PROCESS_CONTEXT_V1`;function s(e,t=process.env){let n=t[a]?.trim();if(n)return n;let r=e.trim();if(!r)throw Error(`A root session requires a non-empty current session id.`);return r}const c=e.Object({parentSessionId:e.String({minLength:1}),workingDirectory:e.String({minLength:1}),mode:e.Optional(e.String({minLength:1}))},{additionalProperties:!1});function l(e){return JSON.stringify(e)}function u(e){let r=JSON.parse(e);if(!t(c,r)){let e=n(c,r).map(e=>e.message).join(`; `);throw Error(`Invalid child process context: ${e}`)}return r}function d(e){return{[o]:l(e)}}function f(e){let t=e[o]?.trim();return t?u(t):void 0}export{c as ChildProcessContextSchema,o as DOOM_CHILD_PROCESS_CONTEXT_ENV,r as SUBAGENT_CHILD_ENV,i as SUBAGENT_PARENT_SESSION_ENV,a as SUBAGENT_ROOT_SESSION_ENV,d as childProcessContextEnvironment,u as decodeChildProcessContext,l as encodeChildProcessContext,f as readChildProcessContext,s as resolveRootSessionId};
2
+ //# sourceMappingURL=childProcess.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"childProcess.mjs","names":[],"sources":["../src/childProcess.ts"],"sourcesContent":["import { type Static, Type } from 'typebox';\nimport { Check, Errors } from 'typebox/value';\n\nexport const SUBAGENT_CHILD_ENV = 'PI_SUBAGENT_CHILD';\nexport const SUBAGENT_PARENT_SESSION_ENV = 'PI_SUBAGENT_PARENT_SESSION';\nexport const SUBAGENT_ROOT_SESSION_ENV = 'PI_SUBAGENT_ROOT_SESSION';\nexport const DOOM_CHILD_PROCESS_CONTEXT_ENV = 'DOOM_CHILD_PROCESS_CONTEXT_V1';\n\nexport function resolveRootSessionId(\n currentSessionId: string,\n environment: Readonly<Record<string, string | undefined>> = process.env,\n): string {\n const inherited = environment[SUBAGENT_ROOT_SESSION_ENV]?.trim();\n if (inherited) return inherited;\n const current = currentSessionId.trim();\n if (!current) throw new Error('A root session requires a non-empty current session id.');\n return current;\n}\n\nexport const ChildProcessContextSchema = Type.Object(\n {\n parentSessionId: Type.String({ minLength: 1 }),\n workingDirectory: Type.String({ minLength: 1 }),\n mode: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n);\nexport type ChildProcessContext = Static<typeof ChildProcessContextSchema>;\n\nexport function encodeChildProcessContext(context: ChildProcessContext): string {\n return JSON.stringify(context);\n}\n\nexport function decodeChildProcessContext(serialized: string): ChildProcessContext {\n const parsed: unknown = JSON.parse(serialized);\n if (!Check(ChildProcessContextSchema, parsed)) {\n const details = Errors(ChildProcessContextSchema, parsed)\n .map((error) => error.message)\n .join('; ');\n throw new Error(`Invalid child process context: ${details}`);\n }\n return parsed;\n}\n\nexport function childProcessContextEnvironment(context: ChildProcessContext): Record<string, string> {\n return { [DOOM_CHILD_PROCESS_CONTEXT_ENV]: encodeChildProcessContext(context) };\n}\n\nexport function readChildProcessContext(\n environment: Readonly<Record<string, string | undefined>>,\n): ChildProcessContext | undefined {\n const serialized = environment[DOOM_CHILD_PROCESS_CONTEXT_ENV]?.trim();\n return serialized ? decodeChildProcessContext(serialized) : undefined;\n}\n"],"mappings":"iFAGA,MAAa,EAAqB,oBACrB,EAA8B,6BAC9B,EAA4B,2BAC5B,EAAiC,gCAE9C,SAAgB,EACd,EACA,EAA4D,QAAQ,IAC5D,CACR,IAAM,EAAY,EAAY,EAA0B,EAAE,KAAK,EAC/D,GAAI,EAAW,OAAO,EACtB,IAAM,EAAU,EAAiB,KAAK,EACtC,GAAI,CAAC,EAAS,MAAU,MAAM,yDAAyD,EACvF,OAAO,CACT,CAEA,MAAa,EAA4B,EAAK,OAC5C,CACE,gBAAiB,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC7C,iBAAkB,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC9C,KAAM,EAAK,SAAS,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CAAC,CACnD,EACA,CAAE,qBAAsB,EAAM,CAChC,EAGA,SAAgB,EAA0B,EAAsC,CAC9E,OAAO,KAAK,UAAU,CAAO,CAC/B,CAEA,SAAgB,EAA0B,EAAyC,CACjF,IAAM,EAAkB,KAAK,MAAM,CAAU,EAC7C,GAAI,CAAC,EAAM,EAA2B,CAAM,EAAG,CAC7C,IAAM,EAAU,EAAO,EAA2B,CAAM,CAAC,CACtD,IAAK,GAAU,EAAM,OAAO,CAAC,CAC7B,KAAK,IAAI,EACZ,MAAU,MAAM,kCAAkC,GAAS,CAC7D,CACA,OAAO,CACT,CAEA,SAAgB,EAA+B,EAAsD,CACnG,MAAO,EAAG,GAAiC,EAA0B,CAAO,CAAE,CAChF,CAEA,SAAgB,EACd,EACiC,CACjC,IAAM,EAAa,EAAY,EAA+B,EAAE,KAAK,EACrE,OAAO,EAAa,EAA0B,CAAU,EAAI,IAAA,EAC9D"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./protocol.cjs");let t=require("typebox");const n=t.Type.String({minLength:1,maxLength:128,pattern:`^[A-Za-z0-9@][A-Za-z0-9@/._:-]*$`}),r=t.Type.String({minLength:1,maxLength:128,pattern:`^[a-z0-9][a-z0-9._:-]*$`}),i=t.Type.Union([t.Type.Literal(`ready`),t.Type.Literal(`available`),t.Type.Literal(`blocked`)]),a=t.Type.Union([t.Type.Literal(`text`),t.Type.Literal(`enum`),t.Type.Literal(`choice`),t.Type.Literal(`info`)]),o=t.Type.Object({key:t.Type.String({minLength:1,maxLength:1}),label:t.Type.String({minLength:1,maxLength:24}),action:r},{additionalProperties:!1}),s=t.Type.Object({id:t.Type.String({minLength:1,maxLength:256}),label:t.Type.String({minLength:1,maxLength:96}),detail:t.Type.Optional(t.Type.String({minLength:1,maxLength:96})),group:t.Type.Optional(t.Type.String({minLength:1,maxLength:48})),status:t.Type.Optional(i),statusText:t.Type.Optional(t.Type.String({minLength:1,maxLength:96})),action:t.Type.Optional(r)},{additionalProperties:!1}),c=t.Type.Object({label:t.Type.String({minLength:1,maxLength:96}),state:t.Type.Union([t.Type.Literal(`pending`),t.Type.Literal(`satisfied`),t.Type.Literal(`running`),t.Type.Literal(`done`),t.Type.Literal(`failed`)]),detail:t.Type.Optional(t.Type.String({minLength:1,maxLength:160}))},{additionalProperties:!1}),l=t.Type.Object({label:t.Type.String({minLength:1,maxLength:96}),ratio:t.Type.Optional(t.Type.Number({minimum:0,maximum:1}))},{additionalProperties:!1}),u=t.Type.Object({id:r,label:t.Type.String({minLength:1,maxLength:48}),kind:a,value:t.Type.Optional(t.Type.String({minLength:1,maxLength:4096})),placeholder:t.Type.Optional(t.Type.String({minLength:1,maxLength:96})),detail:t.Type.Optional(t.Type.String({minLength:1,maxLength:240})),keyPath:t.Type.Optional(t.Type.String({minLength:1,maxLength:128})),status:t.Type.Optional(i),statusText:t.Type.Optional(t.Type.String({minLength:1,maxLength:240})),choices:t.Type.Optional(t.Type.Array(s,{maxItems:128})),actions:t.Type.Optional(t.Type.Array(o,{maxItems:4})),busy:t.Type.Optional(t.Type.Boolean()),progress:t.Type.Optional(l),steps:t.Type.Optional(t.Type.Array(c,{maxItems:24})),output:t.Type.Optional(t.Type.Array(t.Type.String({maxLength:512}),{maxItems:64})),awaitingInput:t.Type.Optional(t.Type.Boolean())},{additionalProperties:!1}),d=t.Type.Object({id:r,title:t.Type.String({minLength:1,maxLength:32}),detail:t.Type.Optional(t.Type.String({minLength:1,maxLength:96})),order:t.Type.Integer({minimum:0,maximum:1e3}),notice:t.Type.Optional(t.Type.String({minLength:1,maxLength:240})),noticeLevel:t.Type.Optional(t.Type.Union([t.Type.Literal(`info`),t.Type.Literal(`error`)])),fields:t.Type.Array(u,{maxItems:64})},{additionalProperties:!1}),f=t.Type.Object({source:n,generation:t.Type.String({minLength:1})},{additionalProperties:!1}),p=t.Type.Object({...f.properties,sections:t.Type.Array(d,{maxItems:32})},{additionalProperties:!1}),m=e.defineNotification({channel:`doom:ui:config:v1:discover`,kind:`config.discover`,payload:t.Type.Object({},{additionalProperties:!1})}),h=e.defineNotification({channel:`doom:ui:config:v1:register`,kind:`config.register`,payload:p}),g=e.defineNotification({channel:`doom:ui:config:v1:changed`,kind:`config.changed`,payload:p}),_=e.defineNotification({channel:`doom:ui:config:v1:unregister`,kind:`config.unregister`,payload:f}),v=e.defineNotification({channel:`doom:ui:config:v1:invoked`,kind:`config.invoked`,payload:t.Type.Object({source:n,sectionId:r,fieldId:r,action:r,value:t.Type.Optional(t.Type.String({minLength:1,maxLength:4096}))},{additionalProperties:!1})}),y={set:`set`,clear:`clear`};function b(e,t){let n=`${t.source}:${crypto.randomUUID()}`,r=!1,i=()=>({source:t.source,generation:n,sections:t.listSections().map(e=>({...e,fields:[...e.fields]}))}),a=()=>{r||e.notify(h,i())},o=e.onNotification(m,a);return a(),{update(){r||e.notify(g,i())},dispose(){r||(r=!0,o(),e.notify(_,{source:t.source,generation:n}))}}}var x=class{sources=new Map;listeners=new Set;runtime;bind(e){this.runtime=e;let t=[e.onNotification(h,(e,t)=>{t.source===e.source&&this.register(e)}),e.onNotification(g,(e,t)=>{t.source===e.source&&this.update(e)}),e.onNotification(_,(e,t)=>{t.source===e.source&&this.unregister(e)})];e.notify(m,{});let n=!1;return()=>{if(!n){n=!0;for(let e of t)e();this.runtime===e&&(this.runtime=void 0)}}}getSections(){return[...this.sources.entries()].flatMap(([e,t])=>t.sections.map(t=>({source:e,...t}))).toSorted((e,t)=>e.order-t.order||e.source.localeCompare(t.source)||e.id.localeCompare(t.id))}invoke(e){this.runtime?.notify(v,{source:e.source,sectionId:e.sectionId,fieldId:e.fieldId,action:e.action,...e.value===void 0?{}:{value:e.value}})}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}reset(){this.sources.size!==0&&(this.sources.clear(),this.notify())}register(e){this.sources.set(e.source,{generation:e.generation,sections:S(e.sections)}),this.notify()}update(e){this.sources.get(e.source)?.generation===e.generation&&(this.sources.set(e.source,{generation:e.generation,sections:S(e.sections)}),this.notify())}unregister(e){this.sources.get(e.source)?.generation===e.generation&&(this.sources.delete(e.source),this.notify())}notify(){for(let e of this.listeners)e()}};function S(e){return e.map(e=>({...e,fields:e.fields.map(e=>({...e}))}))}function C(t,n){let r,i,a,o=0,s=!1,c=()=>{r?.dispose(),r=void 0,i?.(),i=void 0},l=()=>{if(!(!r||!a))try{r.update()}catch(e){n.onError(e,`update`,a)}};return t.on(`session_start`,(u,d)=>{if(s)return;c(),a=d;let f=++o,p=e.createProtocolRuntime({bus:t.events,source:n.source,sessionId:d.sessionManager.getSessionId()}),m=()=>{try{return n.listSections()}catch(e){return n.onError(e,`listSections`,d),[]}};try{r=b(p,{source:n.source,listSections:m})}catch(e){n.onError(e,`register`,d),r=void 0}i=p.onNotification(v,async(e,t)=>{if(s||o!==f||t.source!==`@agimon-ai/doompi-ui`||e.source!==n.source)return;let r=n.handlers[e.action];if(r){try{await r({ctx:d,sectionId:e.sectionId,fieldId:e.fieldId,...e.value===void 0?{}:{value:e.value}})}catch(t){n.onError(t,e.action,d)}l()}})}),t.on(`session_shutdown`,()=>{++o,c()}),{update(){s||l()},dispose(){s||(s=!0,++o,c(),a=void 0)}}}exports.CONFIG_ACTION=y,exports.ConfigActionSchema=o,exports.ConfigChanged=g,exports.ConfigChoiceSchema=s,exports.ConfigDiscovery=m,exports.ConfigFieldKindSchema=a,exports.ConfigFieldSchema=u,exports.ConfigInvoked=v,exports.ConfigProgressSchema=l,exports.ConfigRegistration=h,exports.ConfigSectionSchema=d,exports.ConfigSourceSchema=n,exports.ConfigStatusSchema=i,exports.ConfigStepSchema=c,exports.ConfigUnregistration=_,exports.DoomConfigRegistry=x,exports.registerConfigProvider=b,exports.registerDoomConfigContribution=C;
2
+ //# sourceMappingURL=config.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.cjs","names":["Type","defineNotification","createProtocolRuntime"],"sources":["../src/config.ts"],"sourcesContent":["/**\n * Configuration surfaces, contributed by every extension that owns settings.\n *\n * Doom settings live in one YAML file but are owned by many extensions, and for\n * a long time the only way to change any of them was to edit that file by hand.\n * The one exception, an editor-command prompt, asked for a value with no way to\n * see what a valid one looked like.\n *\n * So configuration is published rather than centralised: an extension describes\n * its own fields, one renderer draws them all, and the extension still performs\n * every write. Nothing here knows what a voice model or an editor command is.\n *\n * Deliberately the same shape as the mode and footer contracts next door, since\n * the problem is the same one: several extensions sharing one surface. The one\n * addition is `ConfigInvoked`, the renderer's way of handing a keystroke back to\n * whichever extension owns the field, because unlike a status strip this surface\n * is written to as well as read.\n */\n\nimport { type Static, Type } from 'typebox';\nimport { createProtocolRuntime, defineNotification, type EventBusLike, type ProtocolRuntime } from './protocol.ts';\n\n/** Matches the leader contract's source rule: package names, addressable and spoof-checkable. */\nexport const ConfigSourceSchema = Type.String({\n minLength: 1,\n maxLength: 128,\n pattern: '^[A-Za-z0-9@][A-Za-z0-9@/._:-]*$',\n});\n\nconst ConfigIdSchema = Type.String({ minLength: 1, maxLength: 128, pattern: '^[a-z0-9][a-z0-9._:-]*$' });\n\n/**\n * How ready a value is to be used, as opposed to whether it is merely set.\n * `blocked` covers a choice that needs something else first, such as a model\n * whose engine is not installed.\n */\nexport const ConfigStatusSchema = Type.Union([\n Type.Literal('ready'),\n Type.Literal('available'),\n Type.Literal('blocked'),\n]);\nexport type ConfigStatus = Static<typeof ConfigStatusSchema>;\n\nexport const ConfigFieldKindSchema = Type.Union([\n /** Free text, edited in place. */\n Type.Literal('text'),\n /** A short closed set, cycled in place. */\n Type.Literal('enum'),\n /** A long set worth its own screen, with per-entry status and actions. */\n Type.Literal('choice'),\n /** Read-only. Resolution results, derived values, preflight checks. */\n Type.Literal('info'),\n]);\nexport type ConfigFieldKind = Static<typeof ConfigFieldKindSchema>;\n\n/**\n * A key the renderer offers on the focused field, sent back verbatim as an\n * action. Owners use this for confirmations, so the pending question survives a\n * panel that is closed and reopened.\n */\nexport const ConfigActionSchema = Type.Object(\n {\n key: Type.String({ minLength: 1, maxLength: 1 }),\n label: Type.String({ minLength: 1, maxLength: 24 }),\n action: ConfigIdSchema,\n },\n { additionalProperties: false },\n);\nexport type ConfigAction = Static<typeof ConfigActionSchema>;\n\nexport const ConfigChoiceSchema = Type.Object(\n {\n id: Type.String({ minLength: 1, maxLength: 256 }),\n label: Type.String({ minLength: 1, maxLength: 96 }),\n /** Right-aligned by the renderer. Sizes, ids, anything narrow. */\n detail: Type.Optional(Type.String({ minLength: 1, maxLength: 96 })),\n /** Groups entries under a heading the cursor skips over. */\n group: Type.Optional(Type.String({ minLength: 1, maxLength: 48 })),\n status: Type.Optional(ConfigStatusSchema),\n statusText: Type.Optional(Type.String({ minLength: 1, maxLength: 96 })),\n /**\n * What enter does on this entry. Carrying it per-entry is what lets one list\n * hold both an installed model that only needs selecting and an absent one\n * that needs fetching, without the renderer knowing the difference.\n */\n action: Type.Optional(ConfigIdSchema),\n },\n { additionalProperties: false },\n);\nexport type ConfigChoice = Static<typeof ConfigChoiceSchema>;\n\n/**\n * One line of a multi-step operation.\n *\n * Published as a list rather than a single \"current step\" string so the panel can\n * show what already ran alongside what is left. During an install that is the\n * difference between \"something is happening\" and knowing a package manager\n * already finished and a download is now underway.\n */\nexport const ConfigStepSchema = Type.Object(\n {\n label: Type.String({ minLength: 1, maxLength: 96 }),\n state: Type.Union([\n Type.Literal('pending'),\n /** Already true of this machine, so nothing will run for it. */\n Type.Literal('satisfied'),\n Type.Literal('running'),\n Type.Literal('done'),\n Type.Literal('failed'),\n ]),\n detail: Type.Optional(Type.String({ minLength: 1, maxLength: 160 })),\n },\n { additionalProperties: false },\n);\nexport type ConfigStep = Static<typeof ConfigStepSchema>;\n\nexport const ConfigProgressSchema = Type.Object(\n {\n label: Type.String({ minLength: 1, maxLength: 96 }),\n /** 0 to 1. Omitted when the work has no measurable total. */\n ratio: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })),\n },\n { additionalProperties: false },\n);\nexport type ConfigProgress = Static<typeof ConfigProgressSchema>;\n\nexport const ConfigFieldSchema = Type.Object(\n {\n id: ConfigIdSchema,\n label: Type.String({ minLength: 1, maxLength: 48 }),\n kind: ConfigFieldKindSchema,\n /** Absent means unset; the renderer shows `placeholder` instead. */\n value: Type.Optional(Type.String({ minLength: 1, maxLength: 4096 })),\n placeholder: Type.Optional(Type.String({ minLength: 1, maxLength: 96 })),\n /** One line of help for the focused field. */\n detail: Type.Optional(Type.String({ minLength: 1, maxLength: 240 })),\n /** The config key this writes, shown under the focused field so the file stays legible. */\n keyPath: Type.Optional(Type.String({ minLength: 1, maxLength: 128 })),\n status: Type.Optional(ConfigStatusSchema),\n /** Doubles as the error line: a rejected edit comes back as the old value plus this. */\n statusText: Type.Optional(Type.String({ minLength: 1, maxLength: 240 })),\n choices: Type.Optional(Type.Array(ConfigChoiceSchema, { maxItems: 128 })),\n actions: Type.Optional(Type.Array(ConfigActionSchema, { maxItems: 4 })),\n /** Work is running; the renderer dims the field and offers abort. */\n busy: Type.Optional(Type.Boolean()),\n progress: Type.Optional(ConfigProgressSchema),\n steps: Type.Optional(Type.Array(ConfigStepSchema, { maxItems: 24 })),\n /**\n * The tail of a running command's terminal output.\n *\n * A tail rather than the whole scrollback: the field is a few rows of a\n * shared pane, and what matters is the question a package manager just\n * asked, not what it printed a minute ago.\n */\n output: Type.Optional(Type.Array(Type.String({ maxLength: 512 }), { maxItems: 64 })),\n /**\n * The command is waiting on the user. The renderer offers a line to type\n * into, which comes back as an owner-defined action carrying the text.\n */\n awaitingInput: Type.Optional(Type.Boolean()),\n },\n { additionalProperties: false },\n);\nexport type ConfigField = Static<typeof ConfigFieldSchema>;\n\nexport const ConfigSectionSchema = Type.Object(\n {\n id: ConfigIdSchema,\n title: Type.String({ minLength: 1, maxLength: 32 }),\n detail: Type.Optional(Type.String({ minLength: 1, maxLength: 96 })),\n order: Type.Integer({ minimum: 0, maximum: 1000 }),\n /** Section-wide state: readiness, or why a write failed. */\n notice: Type.Optional(Type.String({ minLength: 1, maxLength: 240 })),\n noticeLevel: Type.Optional(Type.Union([Type.Literal('info'), Type.Literal('error')])),\n fields: Type.Array(ConfigFieldSchema, { maxItems: 64 }),\n },\n { additionalProperties: false },\n);\nexport type ConfigSection = Static<typeof ConfigSectionSchema>;\n\nconst ConfigSourceRefSchema = Type.Object(\n { source: ConfigSourceSchema, generation: Type.String({ minLength: 1 }) },\n { additionalProperties: false },\n);\n\nconst ConfigSnapshotSchema = Type.Object(\n { ...ConfigSourceRefSchema.properties, sections: Type.Array(ConfigSectionSchema, { maxItems: 32 }) },\n { additionalProperties: false },\n);\nexport type ConfigSnapshot = Static<typeof ConfigSnapshotSchema>;\nexport type ConfigSourceRef = Static<typeof ConfigSourceRefSchema>;\n\nexport const ConfigDiscovery = defineNotification({\n channel: 'doom:ui:config:v1:discover',\n kind: 'config.discover',\n payload: Type.Object({}, { additionalProperties: false }),\n});\n\nexport const ConfigRegistration = defineNotification({\n channel: 'doom:ui:config:v1:register',\n kind: 'config.register',\n payload: ConfigSnapshotSchema,\n});\n\n/** Also the reply channel: every invoked action is answered by one of these. */\nexport const ConfigChanged = defineNotification({\n channel: 'doom:ui:config:v1:changed',\n kind: 'config.changed',\n payload: ConfigSnapshotSchema,\n});\n\nexport const ConfigUnregistration = defineNotification({\n channel: 'doom:ui:config:v1:unregister',\n kind: 'config.unregister',\n payload: ConfigSourceRefSchema,\n});\n\n/**\n * A keystroke handed back to the field's owner.\n *\n * A notification rather than a request/reply because every owner listens on one\n * channel: with request/reply each `provide` would answer, and a non-addressed\n * owner's reply would race the real one. Owners answer with `ConfigChanged`\n * instead, on success and on failure alike, which is also what carries progress\n * while long work runs.\n *\n * `set` and `clear` are the two the renderer originates on its own. Everything\n * else is an owner-defined name the renderer read off a choice or an action and\n * hands back verbatim.\n */\nexport const ConfigInvoked = defineNotification({\n channel: 'doom:ui:config:v1:invoked',\n kind: 'config.invoked',\n payload: Type.Object(\n {\n /** The addressed owner. Checked against the envelope source by the receiver. */\n source: ConfigSourceSchema,\n sectionId: ConfigIdSchema,\n fieldId: ConfigIdSchema,\n action: ConfigIdSchema,\n /** The typed text for `set`, or the chosen entry's id for a choice action. */\n value: Type.Optional(Type.String({ minLength: 1, maxLength: 4096 })),\n },\n { additionalProperties: false },\n ),\n});\n\nexport const CONFIG_ACTION = {\n set: 'set',\n clear: 'clear',\n} as const;\n\nexport interface ConfigProvider {\n source: string;\n listSections(): readonly ConfigSection[];\n}\n\nexport interface ConfigProviderHandle {\n update(): void;\n dispose(): void;\n}\n\nexport function registerConfigProvider(runtime: ProtocolRuntime, provider: ConfigProvider): ConfigProviderHandle {\n const generation = `${provider.source}:${crypto.randomUUID()}`;\n let disposed = false;\n const snapshot = (): ConfigSnapshot => ({\n source: provider.source,\n generation,\n sections: provider.listSections().map((section) => ({ ...section, fields: [...section.fields] })),\n });\n // A renderer that loads after a provider would otherwise never learn about it,\n // and neither side controls the order extensions load in.\n const announce = (): void => {\n if (!disposed) runtime.notify(ConfigRegistration, snapshot());\n };\n const disposeDiscovery = runtime.onNotification(ConfigDiscovery, announce);\n announce();\n\n return {\n update() {\n if (!disposed) runtime.notify(ConfigChanged, snapshot());\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n disposeDiscovery();\n runtime.notify(ConfigUnregistration, { source: provider.source, generation });\n },\n };\n}\n\nconst SESSION_START_EVENT = 'session_start';\nconst SESSION_SHUTDOWN_EVENT = 'session_shutdown';\nconst DOOM_UI_SOURCE = '@agimon-ai/doompi-ui';\n\nexport interface DoomExtensionContext {\n sessionManager: { getSessionId(): string };\n}\n\nexport interface DoomExtensionHost {\n events: EventBusLike;\n on(event: string, handler: (event: unknown, context: DoomExtensionContext) => void): void;\n}\n\nexport interface DoomConfigSectionView extends ConfigSection {\n source: string;\n}\n\nexport interface DoomConfigInvocation {\n source: string;\n sectionId: string;\n fieldId: string;\n action: string;\n value?: string;\n}\n\ninterface ActiveConfigSource {\n generation: string;\n sections: ConfigSection[];\n}\n\nexport class DoomConfigRegistry {\n private readonly sources = new Map<string, ActiveConfigSource>();\n private readonly listeners = new Set<() => void>();\n private runtime: ProtocolRuntime | undefined;\n\n bind(runtime: ProtocolRuntime): () => void {\n this.runtime = runtime;\n const disposers = [\n runtime.onNotification(ConfigRegistration, (snapshot, identity) => {\n if (identity.source !== snapshot.source) return;\n this.register(snapshot);\n }),\n runtime.onNotification(ConfigChanged, (snapshot, identity) => {\n if (identity.source !== snapshot.source) return;\n this.update(snapshot);\n }),\n runtime.onNotification(ConfigUnregistration, (source, identity) => {\n if (identity.source !== source.source) return;\n this.unregister(source);\n }),\n ];\n runtime.notify(ConfigDiscovery, {});\n let disposed = false;\n return () => {\n if (disposed) return;\n disposed = true;\n for (const dispose of disposers) dispose();\n if (this.runtime === runtime) this.runtime = undefined;\n };\n }\n\n getSections(): DoomConfigSectionView[] {\n return [...this.sources.entries()]\n .flatMap(([source, snapshot]) => snapshot.sections.map((section) => ({ source, ...section })))\n .toSorted(\n (left, right) =>\n left.order - right.order || left.source.localeCompare(right.source) || left.id.localeCompare(right.id),\n );\n }\n\n invoke(invocation: DoomConfigInvocation): void {\n this.runtime?.notify(ConfigInvoked, {\n source: invocation.source,\n sectionId: invocation.sectionId,\n fieldId: invocation.fieldId,\n action: invocation.action,\n ...(invocation.value === undefined ? {} : { value: invocation.value }),\n });\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n reset(): void {\n if (this.sources.size === 0) return;\n this.sources.clear();\n this.notify();\n }\n\n private register(snapshot: ConfigSnapshot): void {\n this.sources.set(snapshot.source, { generation: snapshot.generation, sections: copySections(snapshot.sections) });\n this.notify();\n }\n\n private update(snapshot: ConfigSnapshot): void {\n if (this.sources.get(snapshot.source)?.generation !== snapshot.generation) return;\n this.sources.set(snapshot.source, { generation: snapshot.generation, sections: copySections(snapshot.sections) });\n this.notify();\n }\n\n private unregister(source: ConfigSourceRef): void {\n if (this.sources.get(source.source)?.generation !== source.generation) return;\n this.sources.delete(source.source);\n this.notify();\n }\n\n private notify(): void {\n for (const listener of this.listeners) listener();\n }\n}\n\nfunction copySections(sections: readonly ConfigSection[]): ConfigSection[] {\n return sections.map((section) => ({ ...section, fields: section.fields.map((field) => ({ ...field })) }));\n}\n\nexport interface DoomConfigActionInput {\n ctx: DoomExtensionContext;\n sectionId: string;\n fieldId: string;\n value?: string;\n}\n\nexport interface DoomConfigContributionOptions {\n source: string;\n listSections: () => readonly ConfigSection[];\n handlers: Readonly<Record<string, (input: DoomConfigActionInput) => void | Promise<void>>>;\n onError: (error: unknown, actionName: string, ctx: DoomExtensionContext) => void;\n}\n\nexport interface DoomConfigContributionHandle {\n update(): void;\n dispose(): void;\n}\n\nexport function registerDoomConfigContribution(\n pi: DoomExtensionHost,\n options: DoomConfigContributionOptions,\n): DoomConfigContributionHandle {\n let provider: ConfigProviderHandle | undefined;\n let disposeNotification: (() => void) | undefined;\n let activeContext: DoomExtensionContext | undefined;\n let generation = 0;\n let stopped = false;\n\n const teardown = (): void => {\n provider?.dispose();\n provider = undefined;\n disposeNotification?.();\n disposeNotification = undefined;\n };\n const publish = (): void => {\n if (!provider || !activeContext) return;\n try {\n provider.update();\n } catch (error) {\n options.onError(error, 'update', activeContext);\n }\n };\n\n pi.on(SESSION_START_EVENT, (_event, ctx) => {\n if (stopped) return;\n teardown();\n activeContext = ctx;\n const activeGeneration = ++generation;\n const runtime = createProtocolRuntime({\n bus: pi.events,\n source: options.source,\n sessionId: ctx.sessionManager.getSessionId(),\n });\n const safeListSections = (): readonly ConfigSection[] => {\n try {\n return options.listSections();\n } catch (error) {\n options.onError(error, 'listSections', ctx);\n return [];\n }\n };\n try {\n provider = registerConfigProvider(runtime, { source: options.source, listSections: safeListSections });\n } catch (error) {\n options.onError(error, 'register', ctx);\n provider = undefined;\n }\n disposeNotification = runtime.onNotification(ConfigInvoked, async (payload, identity) => {\n if (stopped || generation !== activeGeneration) return;\n if (identity.source !== DOOM_UI_SOURCE || payload.source !== options.source) return;\n const handler = options.handlers[payload.action];\n if (!handler) return;\n try {\n await handler({\n ctx,\n sectionId: payload.sectionId,\n fieldId: payload.fieldId,\n ...(payload.value === undefined ? {} : { value: payload.value }),\n });\n } catch (error) {\n options.onError(error, payload.action, ctx);\n }\n publish();\n });\n });\n\n pi.on(SESSION_SHUTDOWN_EVENT, () => {\n ++generation;\n teardown();\n });\n\n return {\n update() {\n if (!stopped) publish();\n },\n dispose() {\n if (stopped) return;\n stopped = true;\n ++generation;\n teardown();\n activeContext = undefined;\n },\n };\n}\n"],"mappings":"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"}