@agimon-ai/doompi-config 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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.cjs +1 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.mjs +1 -0
  5. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  6. package/dist/atomicJson.cjs +2 -0
  7. package/dist/atomicJson.cjs.map +1 -0
  8. package/dist/atomicJson.d.cts +6 -0
  9. package/dist/atomicJson.d.cts.map +1 -0
  10. package/dist/atomicJson.d.mts +6 -0
  11. package/dist/atomicJson.d.mts.map +1 -0
  12. package/dist/atomicJson.mjs +2 -0
  13. package/dist/atomicJson.mjs.map +1 -0
  14. package/dist/config/piConfig.cjs +2 -0
  15. package/dist/config/piConfig.cjs.map +1 -0
  16. package/dist/config/piConfig.d.cts +7 -0
  17. package/dist/config/piConfig.d.cts.map +1 -0
  18. package/dist/config/piConfig.d.mts +7 -0
  19. package/dist/config/piConfig.d.mts.map +1 -0
  20. package/dist/config/piConfig.mjs +2 -0
  21. package/dist/config/piConfig.mjs.map +1 -0
  22. package/dist/config/schema.cjs +0 -0
  23. package/dist/config/schema.d.cts +33 -0
  24. package/dist/config/schema.d.cts.map +1 -0
  25. package/dist/config/schema.d.mts +33 -0
  26. package/dist/config/schema.d.mts.map +1 -0
  27. package/dist/config/schema.mjs +1 -0
  28. package/dist/config.cjs +2 -0
  29. package/dist/config.cjs.map +1 -0
  30. package/dist/config.d.cts +24 -0
  31. package/dist/config.d.cts.map +1 -0
  32. package/dist/config.d.mts +24 -0
  33. package/dist/config.d.mts.map +1 -0
  34. package/dist/config.mjs +2 -0
  35. package/dist/config.mjs.map +1 -0
  36. package/dist/configWriter.cjs +2 -0
  37. package/dist/configWriter.cjs.map +1 -0
  38. package/dist/configWriter.d.cts +52 -0
  39. package/dist/configWriter.d.cts.map +1 -0
  40. package/dist/configWriter.d.mts +52 -0
  41. package/dist/configWriter.d.mts.map +1 -0
  42. package/dist/configWriter.mjs +2 -0
  43. package/dist/configWriter.mjs.map +1 -0
  44. package/dist/container.cjs +2 -0
  45. package/dist/container.cjs.map +1 -0
  46. package/dist/container.d.cts +12 -0
  47. package/dist/container.d.cts.map +1 -0
  48. package/dist/container.d.mts +12 -0
  49. package/dist/container.d.mts.map +1 -0
  50. package/dist/container.mjs +2 -0
  51. package/dist/container.mjs.map +1 -0
  52. package/dist/domains.cjs +2 -0
  53. package/dist/domains.cjs.map +1 -0
  54. package/dist/domains.d.cts +75 -0
  55. package/dist/domains.d.cts.map +1 -0
  56. package/dist/domains.d.mts +75 -0
  57. package/dist/domains.d.mts.map +1 -0
  58. package/dist/domains.mjs +2 -0
  59. package/dist/domains.mjs.map +1 -0
  60. package/dist/extensions/doom.cjs +2 -0
  61. package/dist/extensions/doom.cjs.map +1 -0
  62. package/dist/extensions/doom.d.cts +8 -0
  63. package/dist/extensions/doom.d.cts.map +1 -0
  64. package/dist/extensions/doom.d.mts +8 -0
  65. package/dist/extensions/doom.d.mts.map +1 -0
  66. package/dist/extensions/doom.mjs +2 -0
  67. package/dist/extensions/doom.mjs.map +1 -0
  68. package/dist/extensions/pi.cjs +2 -0
  69. package/dist/extensions/pi.cjs.map +1 -0
  70. package/dist/extensions/pi.d.cts +8 -0
  71. package/dist/extensions/pi.d.cts.map +1 -0
  72. package/dist/extensions/pi.d.mts +8 -0
  73. package/dist/extensions/pi.d.mts.map +1 -0
  74. package/dist/extensions/pi.mjs +2 -0
  75. package/dist/extensions/pi.mjs.map +1 -0
  76. package/dist/harnessState.cjs +2 -0
  77. package/dist/harnessState.cjs.map +1 -0
  78. package/dist/harnessState.d.cts +50 -0
  79. package/dist/harnessState.d.cts.map +1 -0
  80. package/dist/harnessState.d.mts +50 -0
  81. package/dist/harnessState.d.mts.map +1 -0
  82. package/dist/harnessState.mjs +2 -0
  83. package/dist/harnessState.mjs.map +1 -0
  84. package/dist/harnessStore.cjs +2 -0
  85. package/dist/harnessStore.cjs.map +1 -0
  86. package/dist/harnessStore.d.cts +102 -0
  87. package/dist/harnessStore.d.cts.map +1 -0
  88. package/dist/harnessStore.d.mts +102 -0
  89. package/dist/harnessStore.d.mts.map +1 -0
  90. package/dist/harnessStore.mjs +2 -0
  91. package/dist/harnessStore.mjs.map +1 -0
  92. package/dist/index.cjs +1 -0
  93. package/dist/index.d.cts +16 -0
  94. package/dist/index.d.mts +16 -0
  95. package/dist/index.mjs +1 -0
  96. package/dist/init.cjs +73 -0
  97. package/dist/init.cjs.map +1 -0
  98. package/dist/init.d.cts +33 -0
  99. package/dist/init.d.cts.map +1 -0
  100. package/dist/init.d.mts +33 -0
  101. package/dist/init.d.mts.map +1 -0
  102. package/dist/init.mjs +73 -0
  103. package/dist/init.mjs.map +1 -0
  104. package/dist/layeredConfig.cjs +2 -0
  105. package/dist/layeredConfig.cjs.map +1 -0
  106. package/dist/layeredConfig.d.cts +49 -0
  107. package/dist/layeredConfig.d.cts.map +1 -0
  108. package/dist/layeredConfig.d.mts +49 -0
  109. package/dist/layeredConfig.d.mts.map +1 -0
  110. package/dist/layeredConfig.mjs +2 -0
  111. package/dist/layeredConfig.mjs.map +1 -0
  112. package/dist/majorModes.cjs +2 -0
  113. package/dist/majorModes.cjs.map +1 -0
  114. package/dist/majorModes.d.cts +73 -0
  115. package/dist/majorModes.d.cts.map +1 -0
  116. package/dist/majorModes.d.mts +73 -0
  117. package/dist/majorModes.d.mts.map +1 -0
  118. package/dist/majorModes.mjs +2 -0
  119. package/dist/majorModes.mjs.map +1 -0
  120. package/dist/pi.cjs +1 -0
  121. package/dist/pi.d.cts +2 -0
  122. package/dist/pi.d.mts +2 -0
  123. package/dist/pi.mjs +1 -0
  124. package/dist/piContext.cjs +2 -0
  125. package/dist/piContext.cjs.map +1 -0
  126. package/dist/piContext.d.cts +19 -0
  127. package/dist/piContext.d.cts.map +1 -0
  128. package/dist/piContext.d.mts +19 -0
  129. package/dist/piContext.d.mts.map +1 -0
  130. package/dist/piContext.mjs +2 -0
  131. package/dist/piContext.mjs.map +1 -0
  132. package/dist/profiles.cjs +4 -0
  133. package/dist/profiles.cjs.map +1 -0
  134. package/dist/profiles.d.cts +35 -0
  135. package/dist/profiles.d.cts.map +1 -0
  136. package/dist/profiles.d.mts +35 -0
  137. package/dist/profiles.d.mts.map +1 -0
  138. package/dist/profiles.mjs +4 -0
  139. package/dist/profiles.mjs.map +1 -0
  140. package/dist/types.cjs +2 -0
  141. package/dist/types.cjs.map +1 -0
  142. package/dist/types.d.cts +132 -0
  143. package/dist/types.d.cts.map +1 -0
  144. package/dist/types.d.mts +132 -0
  145. package/dist/types.d.mts.map +1 -0
  146. package/dist/types.mjs +2 -0
  147. package/dist/types.mjs.map +1 -0
  148. package/package.json +150 -0
  149. package/skills/doom-pi-config/SKILL.md +26 -0
  150. package/skills/doom-pi-config/agents/openai.yaml +4 -0
  151. package/skills/doom-pi-config/references/config-contract.md +43 -0
package/package.json ADDED
@@ -0,0 +1,150 @@
1
+ {
2
+ "name": "@agimon-ai/doompi-config",
3
+ "version": "0.0.1-alpha.0",
4
+ "description": "Shared Doom configuration loading and dependency injection",
5
+ "homepage": "https://agimon.ai",
6
+ "license": "MIT",
7
+ "author": "Vuong Ngo",
8
+ "files": [
9
+ "dist",
10
+ "skills"
11
+ ],
12
+ "type": "module",
13
+ "main": "./dist/index.cjs",
14
+ "types": "./dist/index.d.mts",
15
+ "jsnext:main": "./dist/index.mjs",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.mts",
19
+ "import": "./dist/index.mjs",
20
+ "require": "./dist/index.cjs"
21
+ },
22
+ "./atomicJson": {
23
+ "types": "./dist/atomicJson.d.mts",
24
+ "import": "./dist/atomicJson.mjs",
25
+ "require": "./dist/atomicJson.cjs"
26
+ },
27
+ "./config": {
28
+ "types": "./dist/config.d.mts",
29
+ "import": "./dist/config.mjs",
30
+ "require": "./dist/config.cjs"
31
+ },
32
+ "./config/schema": {
33
+ "types": "./dist/config/schema.d.mts",
34
+ "import": "./dist/config/schema.mjs",
35
+ "require": "./dist/config/schema.cjs"
36
+ },
37
+ "./config/piConfig": {
38
+ "types": "./dist/config/piConfig.d.mts",
39
+ "import": "./dist/config/piConfig.mjs",
40
+ "require": "./dist/config/piConfig.cjs"
41
+ },
42
+ "./configWriter": {
43
+ "types": "./dist/configWriter.d.mts",
44
+ "import": "./dist/configWriter.mjs",
45
+ "require": "./dist/configWriter.cjs"
46
+ },
47
+ "./container": {
48
+ "types": "./dist/container.d.mts",
49
+ "import": "./dist/container.mjs",
50
+ "require": "./dist/container.cjs"
51
+ },
52
+ "./domains": {
53
+ "types": "./dist/domains.d.mts",
54
+ "import": "./dist/domains.mjs",
55
+ "require": "./dist/domains.cjs"
56
+ },
57
+ "./extensions/pi": {
58
+ "types": "./dist/extensions/pi.d.mts",
59
+ "import": "./dist/extensions/pi.mjs",
60
+ "require": "./dist/extensions/pi.cjs"
61
+ },
62
+ "./extensions/doom": {
63
+ "types": "./dist/extensions/doom.d.mts",
64
+ "import": "./dist/extensions/doom.mjs",
65
+ "require": "./dist/extensions/doom.cjs"
66
+ },
67
+ "./harnessState": {
68
+ "types": "./dist/harnessState.d.mts",
69
+ "import": "./dist/harnessState.mjs",
70
+ "require": "./dist/harnessState.cjs"
71
+ },
72
+ "./harnessStore": {
73
+ "types": "./dist/harnessStore.d.mts",
74
+ "import": "./dist/harnessStore.mjs",
75
+ "require": "./dist/harnessStore.cjs"
76
+ },
77
+ "./init": {
78
+ "types": "./dist/init.d.mts",
79
+ "import": "./dist/init.mjs",
80
+ "require": "./dist/init.cjs"
81
+ },
82
+ "./layeredConfig": {
83
+ "types": "./dist/layeredConfig.d.mts",
84
+ "import": "./dist/layeredConfig.mjs",
85
+ "require": "./dist/layeredConfig.cjs"
86
+ },
87
+ "./majorModes": {
88
+ "types": "./dist/majorModes.d.mts",
89
+ "import": "./dist/majorModes.mjs",
90
+ "require": "./dist/majorModes.cjs"
91
+ },
92
+ "./pi": {
93
+ "types": "./dist/pi.d.mts",
94
+ "import": "./dist/pi.mjs",
95
+ "require": "./dist/pi.cjs"
96
+ },
97
+ "./piContext": {
98
+ "types": "./dist/piContext.d.mts",
99
+ "import": "./dist/piContext.mjs",
100
+ "require": "./dist/piContext.cjs"
101
+ },
102
+ "./profiles": {
103
+ "types": "./dist/profiles.d.mts",
104
+ "import": "./dist/profiles.mjs",
105
+ "require": "./dist/profiles.cjs"
106
+ },
107
+ "./types": {
108
+ "types": "./dist/types.d.mts",
109
+ "import": "./dist/types.mjs",
110
+ "require": "./dist/types.cjs"
111
+ },
112
+ "./package.json": "./package.json"
113
+ },
114
+ "publishConfig": {
115
+ "access": "public",
116
+ "registry": "https://registry.npmjs.org/"
117
+ },
118
+ "dependencies": {
119
+ "inversify": "8.2.1",
120
+ "reflect-metadata": "0.2.2",
121
+ "yaml": "2.9.0",
122
+ "@agimon-ai/doompi-telemetry": "0.0.1-alpha.0"
123
+ },
124
+ "devDependencies": {
125
+ "@earendil-works/pi-coding-agent": "0.84.1",
126
+ "@types/node": "26.1.1",
127
+ "@vitest/coverage-v8": "4.1.10",
128
+ "tsdown": "0.22.14",
129
+ "typescript": "6.0.3",
130
+ "vitest": "4.1.10"
131
+ },
132
+ "peerDependencies": {
133
+ "@earendil-works/pi-coding-agent": "0.84.1"
134
+ },
135
+ "engines": {
136
+ "node": ">=22.19.0"
137
+ },
138
+ "pi": {
139
+ "extensions": [
140
+ "./dist/extensions/pi.mjs"
141
+ ]
142
+ },
143
+ "scripts": {
144
+ "build": "tsdown",
145
+ "test": "vitest --run",
146
+ "typecheck": "tsc --noEmit",
147
+ "lint": "oxlint . && oxfmt . --check",
148
+ "fixcode": "oxlint . --fix && oxfmt ."
149
+ }
150
+ }
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: doom-pi-config
3
+ description: Configure and evolve Doom Pi major modes, layers, domains, profiles, and typed session configuration. Use for changes to .doom/modes.yaml, .doom/domains.yaml, .doom/profiles.yaml, .doom/hooks.yaml, their ~/.pi/.doom global counterparts, the @agimon-ai/doompi-config package, matrix switching commands, or requireDoomConfigContext consumers.
4
+ ---
5
+
6
+ # Doom Pi Config
7
+
8
+ Treat major modes, domains, and profiles as separate axes:
9
+
10
+ - Major modes select one named set of layers, and layers select runtime behavior and extension packages.
11
+ - Domains select content bundles such as skills, agents, hooks, and MCP allowlists.
12
+ - Profiles select a persona plus environment defaults.
13
+
14
+ ## Workflow
15
+
16
+ 1. Read the current .doom files and the @agimon-ai/doompi-config types before editing.
17
+ 2. Put parsing and resolution in @agimon-ai/doompi-config, not in a launcher or UI package.
18
+ 3. Consume resolved session state through requireDoomConfigContext(ctx).harness.
19
+ 4. Keep process.env only as the parent-to-child transport and live-switch write boundary.
20
+ 5. After a matrix mutation, append a Doom config selection entry and call ctx.reload().
21
+ 6. Write each plugin path in .doom/domains.yaml in full, relative to the config that declares it (repo root, or ~/.pi/.doom for the global copy).
22
+ 7. Verify with Doom Config tests, Doom Pi tests, typecheck, ./pi.sh --domains <names> --explain, and an actual session smoke.
23
+
24
+ Never cache resolved configuration at module scope. Context snapshots must be immutable and recreated after reload or session replacement.
25
+
26
+ Read [references/config-contract.md](references/config-contract.md) for schemas, source locations, and the typed context contract.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Doom Pi Config"
3
+ short_description: "Configure Doom Pi layers, domains, and profiles"
4
+ default_prompt: "Use $doom-pi-config to update Doom Pi configuration safely."
@@ -0,0 +1,43 @@
1
+ # Doom Pi configuration contract
2
+
3
+ ## Sources
4
+
5
+ - `.doom/modes.yaml` defines layers and the major modes built from them. A layer may contribute extension entry names, package extension specifiers, and hook group IDs. A major mode is a named set of layers, and a session runs under exactly one.
6
+ - `.doom/domains.yaml` defines content bundles. A domain may contribute whole plugins or filtered plugin parts, an MCP allowlist, and shared-skill behavior. Aliases expand to domain names.
7
+ - `.doom/profiles.yaml` defines personas and environment defaults. Each persona path must remain inside `agents/`.
8
+ - Every `.doom` document is read from `~/.pi/.doom/` first and `<repoRoot>/.doom/` second; a repository entry replaces the global one of the same name. Relative paths inside a document resolve against the config that declares it: the repository root, or `~/.pi/.doom` for the global copy.
9
+
10
+ Parsing and resolution belong to `@agimon-ai/doompi-config` (`majorModes.ts`), `domains.ts`, and `profiles.ts`. Environment transport belongs to `harnessState.ts`. Pi context integration belongs to `piContext.ts`.
11
+
12
+ ## Typed context
13
+
14
+ `@agimon-ai/doompi-config/pi` binds an immutable snapshot to the active Pi session. Consumers pass the handler context to a typed accessor:
15
+
16
+ ```ts
17
+ const config = requireDoomConfigContext(ctx);
18
+ config.settings;
19
+ config.harness.majorMode;
20
+ config.harness.domains;
21
+ config.harness.profile;
22
+ config.requiresRelaunch;
23
+ ```
24
+
25
+ The provider reads the active session branch for the latest `doom-pi:config:v1` custom entry. Without one, it snapshots the launcher environment. Published Pi creates a fresh `ctx` object for calls, so Doom Config keys its binding by `ctx.sessionManager`. The extension replaces the binding on `session_start`. It keeps the binding available through every `session_shutdown` handler, then relies on the WeakMap key becoming collectible with Pi's session manager.
26
+
27
+ ## Live selection changes
28
+
29
+ 1. Resolve and validate the requested major mode, domains, or profile.
30
+ 2. Update the child process environment with `writeHarnessState()` or the focused switcher helper.
31
+ 3. Call `appendDoomConfigSelection(pi, selection)` so the session records the choice.
32
+ 4. Call `ctx.reload()` so all extensions receive fresh context and resources.
33
+
34
+ Never mutate `config.harness`. Never cache `readHarnessState()` or resolved manifests at module scope.
35
+
36
+ ## Verification
37
+
38
+ ```sh
39
+ pnpm nx test-unit @agimon-ai/doompi-config
40
+ pnpm nx typecheck @agimon-ai/doompi-config
41
+ pnpm nx test-unit @agimon-ai/doompi
42
+ ./pi.sh --domains development --explain
43
+ ```