create-principles-disciple 1.132.2 → 1.132.4

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 (229) hide show
  1. package/codex-adapter/dist/codec/index.d.ts +6 -0
  2. package/codex-adapter/dist/codec/index.js +5 -0
  3. package/codex-adapter/dist/codec/input-decoder.d.ts +13 -0
  4. package/codex-adapter/dist/codec/input-decoder.js +103 -0
  5. package/codex-adapter/dist/codec/output-encoder.d.ts +32 -0
  6. package/codex-adapter/dist/codec/output-encoder.js +51 -0
  7. package/codex-adapter/dist/host-adapter.d.ts +30 -0
  8. package/codex-adapter/dist/host-adapter.js +28 -0
  9. package/codex-adapter/dist/index.d.ts +25 -0
  10. package/codex-adapter/dist/index.js +19 -0
  11. package/codex-adapter/dist/ingestion/admission.d.ts +54 -0
  12. package/codex-adapter/dist/ingestion/admission.js +137 -0
  13. package/codex-adapter/dist/ingestion/catch-up.d.ts +41 -0
  14. package/codex-adapter/dist/ingestion/catch-up.js +94 -0
  15. package/codex-adapter/dist/ingestion/codex-home.d.ts +19 -0
  16. package/codex-adapter/dist/ingestion/codex-home.js +43 -0
  17. package/codex-adapter/dist/ingestion/codex-version.d.ts +30 -0
  18. package/codex-adapter/dist/ingestion/codex-version.js +53 -0
  19. package/codex-adapter/dist/ingestion/ingestion-fields.d.ts +17 -0
  20. package/codex-adapter/dist/ingestion/ingestion-fields.js +28 -0
  21. package/codex-adapter/dist/ingestion/ingestion.d.ts +71 -0
  22. package/codex-adapter/dist/ingestion/ingestion.js +248 -0
  23. package/codex-adapter/dist/ingestion/transcript-decoder.d.ts +72 -0
  24. package/codex-adapter/dist/ingestion/transcript-decoder.js +485 -0
  25. package/codex-adapter/dist/ingestion/transcript-locate.d.ts +13 -0
  26. package/codex-adapter/dist/ingestion/transcript-locate.js +75 -0
  27. package/codex-adapter/dist/ingestion/transcript-path.d.ts +25 -0
  28. package/codex-adapter/dist/ingestion/transcript-path.js +87 -0
  29. package/codex-adapter/dist/pd-hook.d.ts +9 -0
  30. package/codex-adapter/dist/pd-hook.js +159 -0
  31. package/codex-adapter/dist/tool-semantics.d.ts +20 -0
  32. package/codex-adapter/dist/tool-semantics.js +27 -0
  33. package/codex-adapter/dist/worker/workspace-worker.d.ts +59 -0
  34. package/codex-adapter/dist/worker/workspace-worker.js +270 -0
  35. package/codex-adapter/package.json +52 -0
  36. package/console/dist/server/routes/update.js +187 -19
  37. package/console/dist/server/update/mutation-controller.d.ts +18 -0
  38. package/console/dist/server/update/mutation-controller.js +29 -0
  39. package/console/dist/server/utils/installed-layout.d.ts +1 -0
  40. package/console/dist/server/utils/installed-layout.js +2 -0
  41. package/console/package.json +1 -0
  42. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +15 -0
  43. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  44. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.d.ts +2 -0
  45. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.d.ts.map +1 -0
  46. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.js +71 -0
  47. package/core/dist/runtime-v2/adapter/__tests__/pd-stream-simple.test.js.map +1 -0
  48. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.d.ts +2 -0
  49. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.d.ts.map +1 -0
  50. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.js +219 -0
  51. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-http-transport.test.js.map +1 -0
  52. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts.map +1 -1
  53. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.js +2 -3
  54. package/core/dist/runtime-v2/adapter/artificer-l2-adapter.js.map +1 -1
  55. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts +12 -1
  56. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts.map +1 -1
  57. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js +15 -2
  58. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js.map +1 -1
  59. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.d.ts +50 -0
  60. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.d.ts.map +1 -0
  61. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.js +93 -0
  62. package/core/dist/runtime-v2/adapter/pi-ai-http-transport.js.map +1 -0
  63. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
  64. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +5 -0
  65. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
  66. package/core/dist/runtime-v2/internalization/__tests__/owner-decision.test.js +152 -0
  67. package/core/dist/runtime-v2/internalization/__tests__/owner-decision.test.js.map +1 -1
  68. package/core/dist/runtime-v2/internalization/owner-review.d.ts +7 -1
  69. package/core/dist/runtime-v2/internalization/owner-review.d.ts.map +1 -1
  70. package/core/dist/runtime-v2/internalization/owner-review.js +22 -3
  71. package/core/dist/runtime-v2/internalization/owner-review.js.map +1 -1
  72. package/core/package.json +3 -2
  73. package/dist/installer.d.ts +32 -0
  74. package/dist/installer.d.ts.map +1 -1
  75. package/dist/installer.js +198 -2
  76. package/dist/installer.js.map +1 -1
  77. package/dist/installers/codex-host-installer.d.ts.map +1 -1
  78. package/dist/installers/codex-host-installer.js +5 -3
  79. package/dist/installers/codex-host-installer.js.map +1 -1
  80. package/dist/update/release-manager-authority.d.ts +69 -0
  81. package/dist/update/release-manager-authority.d.ts.map +1 -0
  82. package/dist/update/release-manager-authority.js +125 -0
  83. package/dist/update/release-manager-authority.js.map +1 -0
  84. package/dist/utils/workspace-divergence.d.ts +36 -0
  85. package/dist/utils/workspace-divergence.d.ts.map +1 -0
  86. package/dist/utils/workspace-divergence.js +87 -0
  87. package/dist/utils/workspace-divergence.js.map +1 -0
  88. package/install-layout/dist/index.d.ts +5 -0
  89. package/install-layout/dist/index.js +1 -0
  90. package/install-layout/package.json +1 -1
  91. package/package.json +4 -2
  92. package/plugin/dist/bundle.js +870 -734
  93. package/plugin/dist/governance-audit.js +381 -247
  94. package/plugin/dist/openclaw-sdk.d.ts +3 -0
  95. package/plugin/dist/rulehost-evidence.js +420 -286
  96. package/plugin/dist/service/subagent-workflow/types.d.ts +2 -2
  97. package/plugin/dist/utils/retry.d.ts +1 -1
  98. package/plugin/dist/utils/workspace-resolver.d.ts +35 -4
  99. package/plugin/openclaw.plugin.json +1 -1
  100. package/plugin/package.json +1 -1
  101. package/release-manager/dist/i18n.d.ts +6 -0
  102. package/release-manager/dist/i18n.d.ts.map +1 -0
  103. package/release-manager/dist/i18n.js +234 -0
  104. package/release-manager/dist/i18n.js.map +1 -0
  105. package/release-manager/dist/index.d.ts +7 -0
  106. package/release-manager/dist/index.d.ts.map +1 -0
  107. package/release-manager/dist/index.js +474 -0
  108. package/release-manager/dist/index.js.map +1 -0
  109. package/release-manager/dist/installer.d.ts +217 -0
  110. package/release-manager/dist/installer.d.ts.map +1 -0
  111. package/release-manager/dist/installer.js +2451 -0
  112. package/release-manager/dist/installer.js.map +1 -0
  113. package/release-manager/dist/installers/codex-host-installer.d.ts +29 -0
  114. package/release-manager/dist/installers/codex-host-installer.d.ts.map +1 -0
  115. package/release-manager/dist/installers/codex-host-installer.js +496 -0
  116. package/release-manager/dist/installers/codex-host-installer.js.map +1 -0
  117. package/release-manager/dist/installers/index.d.ts +40 -0
  118. package/release-manager/dist/installers/index.d.ts.map +1 -0
  119. package/release-manager/dist/installers/index.js +35 -0
  120. package/release-manager/dist/installers/index.js.map +1 -0
  121. package/release-manager/dist/installers/openclaw-host-installer.d.ts +18 -0
  122. package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +1 -0
  123. package/release-manager/dist/installers/openclaw-host-installer.js +414 -0
  124. package/release-manager/dist/installers/openclaw-host-installer.js.map +1 -0
  125. package/release-manager/dist/mvp-config.d.ts +197 -0
  126. package/release-manager/dist/mvp-config.d.ts.map +1 -0
  127. package/release-manager/dist/mvp-config.js +509 -0
  128. package/release-manager/dist/mvp-config.js.map +1 -0
  129. package/release-manager/dist/prompts.d.ts +30 -0
  130. package/release-manager/dist/prompts.d.ts.map +1 -0
  131. package/release-manager/dist/prompts.js +231 -0
  132. package/release-manager/dist/prompts.js.map +1 -0
  133. package/release-manager/dist/skill-language.d.ts +32 -0
  134. package/release-manager/dist/skill-language.d.ts.map +1 -0
  135. package/release-manager/dist/skill-language.js +107 -0
  136. package/release-manager/dist/skill-language.js.map +1 -0
  137. package/release-manager/dist/uninstaller.d.ts +55 -0
  138. package/release-manager/dist/uninstaller.d.ts.map +1 -0
  139. package/release-manager/dist/uninstaller.js +409 -0
  140. package/release-manager/dist/uninstaller.js.map +1 -0
  141. package/release-manager/dist/update/atomic-file.d.ts +35 -0
  142. package/release-manager/dist/update/atomic-file.d.ts.map +1 -0
  143. package/release-manager/dist/update/atomic-file.js +120 -0
  144. package/release-manager/dist/update/atomic-file.js.map +1 -0
  145. package/release-manager/dist/update/bootstrap-protocol.d.ts +55 -0
  146. package/release-manager/dist/update/bootstrap-protocol.d.ts.map +1 -0
  147. package/release-manager/dist/update/bootstrap-protocol.js +132 -0
  148. package/release-manager/dist/update/bootstrap-protocol.js.map +1 -0
  149. package/release-manager/dist/update/channel-metadata.d.ts +28 -0
  150. package/release-manager/dist/update/channel-metadata.d.ts.map +1 -0
  151. package/release-manager/dist/update/channel-metadata.js +90 -0
  152. package/release-manager/dist/update/channel-metadata.js.map +1 -0
  153. package/release-manager/dist/update/channel-promotion.d.ts +39 -0
  154. package/release-manager/dist/update/channel-promotion.d.ts.map +1 -0
  155. package/release-manager/dist/update/channel-promotion.js +55 -0
  156. package/release-manager/dist/update/channel-promotion.js.map +1 -0
  157. package/release-manager/dist/update/data-compatibility.d.ts +35 -0
  158. package/release-manager/dist/update/data-compatibility.d.ts.map +1 -0
  159. package/release-manager/dist/update/data-compatibility.js +45 -0
  160. package/release-manager/dist/update/data-compatibility.js.map +1 -0
  161. package/release-manager/dist/update/install-layout.d.ts +59 -0
  162. package/release-manager/dist/update/install-layout.d.ts.map +1 -0
  163. package/release-manager/dist/update/install-layout.js +127 -0
  164. package/release-manager/dist/update/install-layout.js.map +1 -0
  165. package/release-manager/dist/update/legacy-migration.d.ts +56 -0
  166. package/release-manager/dist/update/legacy-migration.d.ts.map +1 -0
  167. package/release-manager/dist/update/legacy-migration.js +254 -0
  168. package/release-manager/dist/update/legacy-migration.js.map +1 -0
  169. package/release-manager/dist/update/product-identity.d.ts +50 -0
  170. package/release-manager/dist/update/product-identity.d.ts.map +1 -0
  171. package/release-manager/dist/update/product-identity.js +63 -0
  172. package/release-manager/dist/update/product-identity.js.map +1 -0
  173. package/release-manager/dist/update/release-asset-manifest.d.ts +31 -0
  174. package/release-manager/dist/update/release-asset-manifest.d.ts.map +1 -0
  175. package/release-manager/dist/update/release-asset-manifest.js +161 -0
  176. package/release-manager/dist/update/release-asset-manifest.js.map +1 -0
  177. package/release-manager/dist/update/release-identity.d.ts +33 -0
  178. package/release-manager/dist/update/release-identity.d.ts.map +1 -0
  179. package/release-manager/dist/update/release-identity.js +108 -0
  180. package/release-manager/dist/update/release-identity.js.map +1 -0
  181. package/release-manager/dist/update/release-manager-authority.d.ts +69 -0
  182. package/release-manager/dist/update/release-manager-authority.d.ts.map +1 -0
  183. package/release-manager/dist/update/release-manager-authority.js +125 -0
  184. package/release-manager/dist/update/release-manager-authority.js.map +1 -0
  185. package/release-manager/dist/update/release-manager.d.ts +96 -0
  186. package/release-manager/dist/update/release-manager.d.ts.map +1 -0
  187. package/release-manager/dist/update/release-manager.js +253 -0
  188. package/release-manager/dist/update/release-manager.js.map +1 -0
  189. package/release-manager/dist/update/release-metadata.d.ts +57 -0
  190. package/release-manager/dist/update/release-metadata.d.ts.map +1 -0
  191. package/release-manager/dist/update/release-metadata.js +200 -0
  192. package/release-manager/dist/update/release-metadata.js.map +1 -0
  193. package/release-manager/dist/update/release-policy.d.ts +51 -0
  194. package/release-manager/dist/update/release-policy.d.ts.map +1 -0
  195. package/release-manager/dist/update/release-policy.js +103 -0
  196. package/release-manager/dist/update/release-policy.js.map +1 -0
  197. package/release-manager/dist/update/rollback-policy.d.ts +56 -0
  198. package/release-manager/dist/update/rollback-policy.d.ts.map +1 -0
  199. package/release-manager/dist/update/rollback-policy.js +61 -0
  200. package/release-manager/dist/update/rollback-policy.js.map +1 -0
  201. package/release-manager/dist/update/transaction-journal.d.ts +131 -0
  202. package/release-manager/dist/update/transaction-journal.d.ts.map +1 -0
  203. package/release-manager/dist/update/transaction-journal.js +346 -0
  204. package/release-manager/dist/update/transaction-journal.js.map +1 -0
  205. package/release-manager/dist/update/trust-metadata.d.ts +55 -0
  206. package/release-manager/dist/update/trust-metadata.d.ts.map +1 -0
  207. package/release-manager/dist/update/trust-metadata.js +170 -0
  208. package/release-manager/dist/update/trust-metadata.js.map +1 -0
  209. package/release-manager/dist/update/update-history.d.ts +46 -0
  210. package/release-manager/dist/update/update-history.d.ts.map +1 -0
  211. package/release-manager/dist/update/update-history.js +123 -0
  212. package/release-manager/dist/update/update-history.js.map +1 -0
  213. package/release-manager/dist/utils/config-file-io.d.ts +26 -0
  214. package/release-manager/dist/utils/config-file-io.d.ts.map +1 -0
  215. package/release-manager/dist/utils/config-file-io.js +128 -0
  216. package/release-manager/dist/utils/config-file-io.js.map +1 -0
  217. package/release-manager/dist/utils/env.d.ts +60 -0
  218. package/release-manager/dist/utils/env.d.ts.map +1 -0
  219. package/release-manager/dist/utils/env.js +308 -0
  220. package/release-manager/dist/utils/env.js.map +1 -0
  221. package/release-manager/dist/utils/logger.d.ts +15 -0
  222. package/release-manager/dist/utils/logger.d.ts.map +1 -0
  223. package/release-manager/dist/utils/logger.js +30 -0
  224. package/release-manager/dist/utils/logger.js.map +1 -0
  225. package/release-manager/dist/utils/workspace-divergence.d.ts +36 -0
  226. package/release-manager/dist/utils/workspace-divergence.d.ts.map +1 -0
  227. package/release-manager/dist/utils/workspace-divergence.js +87 -0
  228. package/release-manager/dist/utils/workspace-divergence.js.map +1 -0
  229. package/release-manager/package.json +79 -0
@@ -0,0 +1,496 @@
1
+ /**
2
+ * CodexHostInstaller — implements HostInstaller for OpenAI Codex CLI (ADR-0020 §2.3, SPEC v4.1 §5.7)
3
+ *
4
+ * Writes/merges `~/.codex/hooks.json` pointing to the codex-adapter's pd-hook.js
5
+ * entry. Codex spawns pd-hook.js as a subprocess for each hook event.
6
+ *
7
+ * Install layout (does NOT mix with OpenClaw's ~/.openclaw/ tree):
8
+ * ~/.pd/codex/
9
+ * ├── pd-hook-entry.cjs # wrapper: sets env vars + imports codex-adapter
10
+ * └── .pd-hooks.marker # sidecar marker for precise uninstall
11
+ *
12
+ * hooks.json entries (SPEC v4.1 §5.7):
13
+ * ~/.codex/hooks.json (merged — append, never overwrite)
14
+ *
15
+ * Runtime Contract Rules:
16
+ * - rc-1-treat-as-unknown: hooks.json parsed as unknown, validated.
17
+ * - rc-2-no-as-bypass: uses Object.hasOwn + typeof guards.
18
+ * - rc-3-fail-loud-missing: malformed hooks.json throws.
19
+ * - rc-5-object-hasown-not-in: uses Object.hasOwn for untrusted keys.
20
+ * - rc-9-no-silent-fallback: every result includes reason + nextAction.
21
+ *
22
+ * EP-06 (Source of Truth): hooks.json is the canonical hook config — we
23
+ * merge into it, never overwrite. The marker file is our own bookkeeping
24
+ * for precise uninstall.
25
+ */
26
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
27
+ import { execSync } from 'child_process';
28
+ import * as path from 'path';
29
+ import * as os from 'os';
30
+ import { createRequire } from 'module';
31
+ import { pathToFileURL } from 'url';
32
+ import { isNpmDependencyResolutionEnabled } from '../installer.js';
33
+ const requireFromModule = createRequire(import.meta.url);
34
+ // ─── Codex hook event names (SPEC v4.1 §5.7) ────────────────────────────────
35
+ const CODEX_EVENTS = ['PreToolUse', 'PostToolUse', 'UserPromptSubmit', 'SessionStart'];
36
+ const PD_HOOK_MARKER = 'pd-hooks.marker';
37
+ // ─── Type guards (rc-2: no `as` bypass) ─────────────────────────────────────
38
+ function isRecord(value) {
39
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
40
+ }
41
+ function isUnknownArray(value) {
42
+ return Array.isArray(value);
43
+ }
44
+ /**
45
+ * Type guard: extracts `.code` from a thrown error without `as NodeJS.ErrnoException`.
46
+ * ESLint `no-undef` flags the `NodeJS` namespace; this helper avoids it.
47
+ */
48
+ function getErrorCode(err) {
49
+ if (err !== null && typeof err === 'object' && Object.hasOwn(err, 'code')) {
50
+ const { code } = err;
51
+ return typeof code === 'string' ? code : undefined;
52
+ }
53
+ return undefined;
54
+ }
55
+ // ─── Path helpers ───────────────────────────────────────────────────────────
56
+ function getCodexDir() {
57
+ return path.join(os.homedir(), '.codex');
58
+ }
59
+ function getCodexHooksJsonPath() {
60
+ return path.join(getCodexDir(), 'hooks.json');
61
+ }
62
+ function getPdCodexDir() {
63
+ return path.join(os.homedir(), '.pd', 'codex');
64
+ }
65
+ function getPdHookMarkerPath() {
66
+ return path.join(getPdCodexDir(), PD_HOOK_MARKER);
67
+ }
68
+ /**
69
+ * Resolve the path to the codex-adapter's pd-hook.js entry.
70
+ *
71
+ * Strategy:
72
+ * 1. Try require.resolve('@principles/codex-adapter/pd-hook') from this
73
+ * package — works in a dev checkout (workspace sibling) or when the
74
+ * adapter sits in an ancestor node_modules.
75
+ * 2. Fall back to the global npm root (`npm root -g`). A createRequire from
76
+ * THIS package cannot see global node_modules: when the installer runs via
77
+ * `npx create-principles-disciple`, the resolution root is the npx cache,
78
+ * which is not an ancestor of the global root. Without this probe, the
79
+ * documented flow "npm install -g @principles/codex-adapter, then re-run"
80
+ * dead-ends: install keeps failing even after the user follows the
81
+ * nextAction (PRI-523 review finding).
82
+ * 3. Fall back to undefined — installer reports the missing dependency.
83
+ */
84
+ function getGlobalNpmRoot() {
85
+ // Registry dependency resolution is legitimate whenever the package is not
86
+ // self-contained (the npm-distributed shape resolves from the registry
87
+ // just like the PD_ALLOW_LEGACY_NPM_INSTALL recovery path).
88
+ if (!isNpmDependencyResolutionEnabled())
89
+ return undefined;
90
+ try {
91
+ const root = execSync('npm root -g', { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
92
+ return root.length > 0 ? root : undefined;
93
+ }
94
+ catch {
95
+ return undefined;
96
+ }
97
+ }
98
+ export function resolveAdapterPdHookFromDir(dir) {
99
+ try {
100
+ // Probe filename inside the dir so resolution starts at that directory
101
+ // and honors the package's exports map ("./pd-hook").
102
+ return createRequire(path.join(dir, 'pd-adapter-probe.cjs')).resolve('@principles/codex-adapter/pd-hook');
103
+ }
104
+ catch {
105
+ return undefined;
106
+ }
107
+ }
108
+ export function resolvePdHookPath(deps = {}) {
109
+ const localResolve = deps.localResolve
110
+ ?? ((specifier) => {
111
+ try {
112
+ return requireFromModule.resolve(specifier);
113
+ }
114
+ catch {
115
+ return undefined;
116
+ }
117
+ });
118
+ const globalNpmRoot = deps.globalNpmRoot ?? getGlobalNpmRoot;
119
+ const resolveFromDir = deps.resolveFromDir ?? resolveAdapterPdHookFromDir;
120
+ const local = localResolve('@principles/codex-adapter/pd-hook');
121
+ if (local)
122
+ return local;
123
+ const globalRoot = globalNpmRoot();
124
+ if (globalRoot) {
125
+ const fromGlobal = resolveFromDir(globalRoot);
126
+ if (fromGlobal)
127
+ return fromGlobal;
128
+ }
129
+ return undefined;
130
+ }
131
+ /**
132
+ * Build the hook command string for hooks.json.
133
+ *
134
+ * The wrapper script sets PD_HOST_CODEX_ENABLED=1 and PD_WORKSPACE_DIR before
135
+ * invoking pd-hook.js. This is cross-platform (no shell-specific env var syntax).
136
+ */
137
+ function buildHookCommand(entryScriptPath, _workspaceDir) {
138
+ // Unix command: node <entry>
139
+ // workspaceDir is injected by the wrapper script (pd-hook-entry.cjs), not here.
140
+ void _workspaceDir;
141
+ return `node "${entryScriptPath}"`;
142
+ }
143
+ function buildHookCommandWindows(entryScriptPath, _workspaceDir) {
144
+ // Windows command — same node invocation; the entry script handles env internally
145
+ void _workspaceDir;
146
+ return `node "${entryScriptPath}"`;
147
+ }
148
+ function buildMatcherGroup(eventName, entryScriptPath, workspaceDir) {
149
+ const command = buildHookCommand(entryScriptPath, workspaceDir);
150
+ const commandWindows = buildHookCommandWindows(entryScriptPath, workspaceDir);
151
+ switch (eventName) {
152
+ case 'PreToolUse':
153
+ return {
154
+ matcher: 'Bash|apply_patch',
155
+ hooks: [{
156
+ type: 'command',
157
+ command,
158
+ commandWindows,
159
+ timeout: 5,
160
+ statusMessage: 'PD: checking tool call',
161
+ }],
162
+ };
163
+ case 'PostToolUse':
164
+ return {
165
+ matcher: '.*',
166
+ hooks: [{
167
+ type: 'command',
168
+ command,
169
+ commandWindows,
170
+ timeout: 5,
171
+ async: true,
172
+ statusMessage: 'PD: capturing pain signal',
173
+ }],
174
+ };
175
+ case 'UserPromptSubmit':
176
+ return {
177
+ hooks: [{
178
+ type: 'command',
179
+ command,
180
+ commandWindows,
181
+ timeout: 5,
182
+ additionalContextLimit: 10000,
183
+ statusMessage: 'PD: injecting principles',
184
+ }],
185
+ };
186
+ case 'SessionStart':
187
+ return {
188
+ hooks: [{
189
+ type: 'command',
190
+ command,
191
+ commandWindows,
192
+ timeout: 600,
193
+ additionalContextLimit: 10000,
194
+ statusMessage: 'PD: hydrating state',
195
+ }],
196
+ };
197
+ }
198
+ }
199
+ // ─── Wrapper script content ─────────────────────────────────────────────────
200
+ /**
201
+ * Generate the wrapper script that sets env vars and imports pd-hook.js.
202
+ *
203
+ * This is a CommonJS file so it can use process.env mutation before the
204
+ * ESM pd-hook.js is dynamically imported. Cross-platform (no shell syntax).
205
+ */
206
+ export function buildWrapperScriptContent(pdHookPath, workspaceDir) {
207
+ return [
208
+ '#!/usr/bin/env node',
209
+ '// Auto-generated by create-principles-disciple installer (CodexHostInstaller).',
210
+ '// Sets PD env vars, then imports the codex-adapter pd-hook entry.',
211
+ '// DO NOT edit manually — re-run the installer to regenerate.',
212
+ '',
213
+ 'process.env.PD_HOST_CODEX_ENABLED = "1";',
214
+ `process.env.PD_WORKSPACE_DIR = ${JSON.stringify(workspaceDir)};`,
215
+ '',
216
+ '// Import the codex-adapter pd-hook entry (ESM).',
217
+ '// pd-hook.js reads stdin, processes the hook, writes stdout, exits.',
218
+ // pathToFileURL — not manual `file://` concatenation: a POSIX absolute
219
+ // path would produce file:////... and fail to import.
220
+ `import(${JSON.stringify(pathToFileURL(pdHookPath).href)});`,
221
+ '',
222
+ ].join('\n');
223
+ }
224
+ // ─── CodexHostInstaller ─────────────────────────────────────────────────────
225
+ export class CodexHostInstaller {
226
+ hostId = 'codex';
227
+ async install(ctx) {
228
+ const pdCodexDir = getPdCodexDir();
229
+ const hooksJsonPath = getCodexHooksJsonPath();
230
+ const markerPath = getPdHookMarkerPath();
231
+ // 1. Resolve codex-adapter pd-hook.js
232
+ const pdHookPath = resolvePdHookPath();
233
+ if (!pdHookPath) {
234
+ return {
235
+ success: false,
236
+ hostId: this.hostId,
237
+ configPath: hooksJsonPath,
238
+ configAction: 'skipped',
239
+ reason: '@principles/codex-adapter is not installed. The codex-adapter package provides the pd-hook.js entry Codex spawns.',
240
+ nextAction: 'Install it first: npm install -g @principles/codex-adapter, then re-run: npx create-principles-disciple install --host codex',
241
+ };
242
+ }
243
+ // 2. Write wrapper script to ~/.pd/codex/pd-hook-entry.cjs
244
+ // (marker file is written AFTER mergeHooksJson succeeds — see step 3.
245
+ // Writing the marker before the merge would make detect() report a
246
+ // failed install as installed, violating rc-3-fail-loud-missing.)
247
+ try {
248
+ if (!existsSync(pdCodexDir)) {
249
+ mkdirSync(pdCodexDir, { recursive: true });
250
+ }
251
+ const wrapperPath = path.join(pdCodexDir, 'pd-hook-entry.cjs');
252
+ const wrapperContent = buildWrapperScriptContent(pdHookPath, ctx.workspaceDir);
253
+ writeFileSync(wrapperPath, wrapperContent, { encoding: 'utf-8' });
254
+ // 3. Merge PD hook entries into ~/.codex/hooks.json (append, never overwrite).
255
+ // If hooks.json is malformed, mergeHooksJson returns 'preserved' without
256
+ // writing any PD entries. This MUST surface as a failure (rc-3 / rc-9)
257
+ // — otherwise the user would see "install succeeded" while Codex never
258
+ // triggers PD hooks. The marker is NOT written in this branch, so
259
+ // detect() correctly reports "not installed".
260
+ const configAction = this.mergeHooksJson(hooksJsonPath, wrapperPath, ctx.workspaceDir);
261
+ if (configAction === 'preserved') {
262
+ return {
263
+ success: false,
264
+ hostId: this.hostId,
265
+ configPath: hooksJsonPath,
266
+ configAction,
267
+ reason: `${hooksJsonPath} is malformed (not a JSON object). PD did not write any hook entries to avoid overwriting the user's config.`,
268
+ nextAction: `Manually fix ${hooksJsonPath} (must be a JSON object), then re-run: npx create-principles-disciple install --host codex`,
269
+ };
270
+ }
271
+ // 4. Merge succeeded — now safe to record the marker. detect() will
272
+ // only report installed when hooks.json actually contains PD entries.
273
+ writeFileSync(markerPath, JSON.stringify({
274
+ installedAt: new Date().toISOString(),
275
+ workspaceDir: ctx.workspaceDir,
276
+ pdHookPath,
277
+ wrapperPath,
278
+ events: CODEX_EVENTS,
279
+ }, null, 2), { encoding: 'utf-8' });
280
+ return {
281
+ success: true,
282
+ hostId: this.hostId,
283
+ configPath: hooksJsonPath,
284
+ configAction,
285
+ nextAction: 'Open Codex and run /hooks to trust PD hooks before they execute. Verify with: codex doctor (hooks feature should be ON).',
286
+ };
287
+ }
288
+ catch (err) {
289
+ const reason = err instanceof Error ? err.message : String(err);
290
+ return {
291
+ success: false,
292
+ hostId: this.hostId,
293
+ configPath: hooksJsonPath,
294
+ configAction: 'skipped',
295
+ reason: `Failed to write Codex hook config: ${reason}`,
296
+ nextAction: `Check write permissions on ${pdCodexDir} and ${hooksJsonPath}, then re-run installer.`,
297
+ };
298
+ }
299
+ }
300
+ /**
301
+ * Merge PD hook entries into ~/.codex/hooks.json.
302
+ * - If file doesn't exist: create it with PD entries (configAction = 'created').
303
+ * - If file exists: merge PD entries into existing event arrays (configAction = 'updated').
304
+ * - Idempotent: re-running install replaces PD entries (matched by marker), not duplicates.
305
+ */
306
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
307
+ mergeHooksJson(hooksJsonPath, wrapperPath, workspaceDir) {
308
+ const codexDir = getCodexDir();
309
+ if (!existsSync(codexDir)) {
310
+ mkdirSync(codexDir, { recursive: true });
311
+ }
312
+ let existing = {};
313
+ let action = 'created';
314
+ // CodeQL TOCTOU fix: try/catch read instead of existsSync+readFileSync.
315
+ // ENOENT → 'created' (file doesn't exist yet); other parse errors → 'preserved'.
316
+ try {
317
+ const raw = readFileSync(hooksJsonPath, 'utf-8');
318
+ const parsed = JSON.parse(raw);
319
+ if (isRecord(parsed)) {
320
+ existing = { ...parsed };
321
+ action = 'updated';
322
+ }
323
+ else {
324
+ // Malformed — back off, don't overwrite
325
+ action = 'preserved';
326
+ }
327
+ }
328
+ catch (err) {
329
+ const code = getErrorCode(err);
330
+ if (code === 'ENOENT') {
331
+ // File doesn't exist — 'created' (default action stays)
332
+ }
333
+ else {
334
+ // Malformed JSON — back off
335
+ action = 'preserved';
336
+ }
337
+ }
338
+ if (action === 'preserved') {
339
+ return action;
340
+ }
341
+ // For each Codex event, replace any existing PD-owned matcher groups
342
+ // with our fresh set (idempotent — re-install doesn't duplicate).
343
+ const PD_MARKER = 'pd-owned';
344
+ for (const eventName of CODEX_EVENTS) {
345
+ const group = buildMatcherGroup(eventName, wrapperPath, workspaceDir);
346
+ // Tag the group so uninstall can find PD-owned entries precisely.
347
+ group.__pd_marker = PD_MARKER;
348
+ const existingGroups = existing[eventName];
349
+ if (isUnknownArray(existingGroups)) {
350
+ // Filter out previously-PD-owned groups, then append the new one.
351
+ // rc-2: no `as` bypass — use Object.hasOwn to check marker presence.
352
+ const filtered = existingGroups.filter((g) => !(isRecord(g) && Object.hasOwn(g, '__pd_marker') && g.__pd_marker === PD_MARKER));
353
+ filtered.push(group);
354
+ existing[eventName] = filtered;
355
+ }
356
+ else {
357
+ existing[eventName] = [group];
358
+ }
359
+ }
360
+ writeFileSync(hooksJsonPath, JSON.stringify(existing, null, 2), { encoding: 'utf-8' });
361
+ return action;
362
+ }
363
+ async uninstall(_ctx) {
364
+ const hooksJsonPath = getCodexHooksJsonPath();
365
+ const markerPath = getPdHookMarkerPath();
366
+ const pdCodexDir = getPdCodexDir();
367
+ const removedPaths = [];
368
+ const preservedPaths = [];
369
+ // 1. Remove PD-owned entries from hooks.json.
370
+ // CodeQL TOCTOU fix: try/catch read instead of existsSync+readFileSync.
371
+ try {
372
+ const raw = readFileSync(hooksJsonPath, 'utf-8');
373
+ const parsed = JSON.parse(raw);
374
+ if (isRecord(parsed)) {
375
+ const config = { ...parsed };
376
+ let modified = false;
377
+ const PD_MARKER = 'pd-owned';
378
+ for (const eventName of CODEX_EVENTS) {
379
+ const groups = config[eventName];
380
+ if (isUnknownArray(groups)) {
381
+ const before = groups.length;
382
+ // rc-2: use Object.hasOwn instead of `as` cast for marker check.
383
+ const filtered = groups.filter((g) => !(isRecord(g) && Object.hasOwn(g, '__pd_marker') && g.__pd_marker === PD_MARKER));
384
+ if (filtered.length === 0) {
385
+ delete config[eventName];
386
+ }
387
+ else {
388
+ config[eventName] = filtered;
389
+ }
390
+ if (filtered.length !== before)
391
+ modified = true;
392
+ }
393
+ }
394
+ if (modified) {
395
+ writeFileSync(hooksJsonPath, JSON.stringify(config, null, 2), { encoding: 'utf-8' });
396
+ removedPaths.push(hooksJsonPath);
397
+ }
398
+ }
399
+ }
400
+ catch (err) {
401
+ const code = getErrorCode(err);
402
+ if (code === 'ENOENT') {
403
+ // hooks.json not found — nothing to clean, proceed to marker cleanup.
404
+ }
405
+ else {
406
+ // Malformed hooks.json — can't safely merge. Leave it alone.
407
+ preservedPaths.push(hooksJsonPath);
408
+ }
409
+ }
410
+ // 2. Remove wrapper script + marker file
411
+ const wrapperPath = path.join(pdCodexDir, 'pd-hook-entry.cjs');
412
+ if (existsSync(wrapperPath)) {
413
+ try {
414
+ const fs = await import('fs');
415
+ await fs.promises.rm(wrapperPath, { force: true });
416
+ removedPaths.push(wrapperPath);
417
+ }
418
+ catch {
419
+ preservedPaths.push(wrapperPath);
420
+ }
421
+ }
422
+ if (existsSync(markerPath)) {
423
+ try {
424
+ const fs = await import('fs');
425
+ await fs.promises.rm(markerPath, { force: true });
426
+ removedPaths.push(markerPath);
427
+ }
428
+ catch {
429
+ preservedPaths.push(markerPath);
430
+ }
431
+ }
432
+ return {
433
+ success: preservedPaths.length === 0,
434
+ hostId: this.hostId,
435
+ removedPaths,
436
+ preservedPaths,
437
+ reason: preservedPaths.length > 0
438
+ ? `Some files could not be removed: ${preservedPaths.join(', ')}`
439
+ : undefined,
440
+ nextAction: preservedPaths.length > 0
441
+ ? `Manually inspect: ${preservedPaths.join(', ')}`
442
+ : 'Codex hooks uninstalled. Verify: open ~/.codex/hooks.json (should have no __pd_marker entries).',
443
+ };
444
+ }
445
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
446
+ detect() {
447
+ const markerPath = getPdHookMarkerPath();
448
+ const hooksJsonPath = getCodexHooksJsonPath();
449
+ const wrapperPath = path.join(getPdCodexDir(), 'pd-hook-entry.cjs');
450
+ const paths = [
451
+ {
452
+ exists: existsSync(markerPath),
453
+ path: markerPath,
454
+ name: 'PD Codex install marker',
455
+ type: 'file',
456
+ },
457
+ {
458
+ exists: existsSync(wrapperPath),
459
+ path: wrapperPath,
460
+ name: 'PD Codex hook entry script',
461
+ type: 'file',
462
+ },
463
+ {
464
+ exists: existsSync(hooksJsonPath),
465
+ path: hooksJsonPath,
466
+ name: 'Codex hooks.json',
467
+ type: 'file',
468
+ },
469
+ ];
470
+ // PD is "installed" for Codex if the marker exists OR hooks.json has PD entries
471
+ let installed = existsSync(markerPath);
472
+ if (!installed && existsSync(hooksJsonPath)) {
473
+ try {
474
+ const raw = readFileSync(hooksJsonPath, 'utf-8');
475
+ const parsed = JSON.parse(raw);
476
+ if (isRecord(parsed)) {
477
+ for (const eventName of CODEX_EVENTS) {
478
+ const groups = parsed[eventName];
479
+ if (isUnknownArray(groups)) {
480
+ const hasPd = groups.some((g) => isRecord(g) && Object.hasOwn(g, '__pd_marker') && g.__pd_marker === 'pd-owned');
481
+ if (hasPd) {
482
+ installed = true;
483
+ break;
484
+ }
485
+ }
486
+ }
487
+ }
488
+ }
489
+ catch {
490
+ // Malformed hooks.json — treat as not installed (will be cleaned on uninstall)
491
+ }
492
+ }
493
+ return { installed, paths };
494
+ }
495
+ }
496
+ //# sourceMappingURL=codex-host-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-host-installer.js","sourceRoot":"","sources":["../../src/installers/codex-host-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Host installers barrel (ADR-0020 §2.3)
3
+ *
4
+ * Exports HostTarget type + factory for selecting host installers by CLI --host.
5
+ *
6
+ * MVP hosts:
7
+ * - 'openclaw' (default) — OpenClawHostInstaller writes ~/.openclaw/openclaw.json.
8
+ * - 'codex' — CodexHostInstaller writes ~/.codex/hooks.json.
9
+ * - 'all' — both installers run (for operators using multiple hosts).
10
+ *
11
+ * Runtime Contract Rules:
12
+ * - rc-1-treat-as-unknown: --host CLI value is `unknown` until validated here.
13
+ * - rc-3-fail-loud-missing: invalid --host value throws with valid options.
14
+ * - rc-9-no-silent-fallback: factory returns concrete installers, not nulls.
15
+ */
16
+ import type { HostInstaller } from '@principles/core/host';
17
+ export { OpenClawHostInstaller } from './openclaw-host-installer.js';
18
+ export { CodexHostInstaller } from './codex-host-installer.js';
19
+ /**
20
+ * Host target selector. 'all' runs every registered installer.
21
+ * Add new host IDs here when new HostInstaller implementations land.
22
+ */
23
+ export type HostTarget = 'openclaw' | 'codex' | 'all';
24
+ export declare const HOST_TARGETS: readonly HostTarget[];
25
+ /**
26
+ * Validate a CLI --host value. rc-1/rc-3: treat input as unknown, fail loud.
27
+ */
28
+ export declare function isHostTarget(value: unknown): value is HostTarget;
29
+ /**
30
+ * Factory: return the concrete HostInstaller instances for a given target.
31
+ *
32
+ * - 'openclaw' → [OpenClawHostInstaller]
33
+ * - 'codex' → [CodexHostInstaller]
34
+ * - 'all' → [OpenClawHostInstaller, CodexHostInstaller]
35
+ *
36
+ * Callers iterate the returned array and call install()/uninstall()/detect()
37
+ * on each. This keeps the CLI install/uninstall flow host-agnostic.
38
+ */
39
+ export declare function getHostInstallers(target: HostTarget): HostInstaller[];
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC;AAEtD,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAAiC,CAAC;AAEhF;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,EAAE,CAYrE"}
@@ -0,0 +1,35 @@
1
+ import { OpenClawHostInstaller } from './openclaw-host-installer.js';
2
+ import { CodexHostInstaller } from './codex-host-installer.js';
3
+ export { OpenClawHostInstaller } from './openclaw-host-installer.js';
4
+ export { CodexHostInstaller } from './codex-host-installer.js';
5
+ export const HOST_TARGETS = ['openclaw', 'codex', 'all'];
6
+ /**
7
+ * Validate a CLI --host value. rc-1/rc-3: treat input as unknown, fail loud.
8
+ */
9
+ export function isHostTarget(value) {
10
+ return typeof value === 'string' && HOST_TARGETS.includes(value);
11
+ }
12
+ /**
13
+ * Factory: return the concrete HostInstaller instances for a given target.
14
+ *
15
+ * - 'openclaw' → [OpenClawHostInstaller]
16
+ * - 'codex' → [CodexHostInstaller]
17
+ * - 'all' → [OpenClawHostInstaller, CodexHostInstaller]
18
+ *
19
+ * Callers iterate the returned array and call install()/uninstall()/detect()
20
+ * on each. This keeps the CLI install/uninstall flow host-agnostic.
21
+ */
22
+ export function getHostInstallers(target) {
23
+ if (!isHostTarget(target)) {
24
+ throw new Error(`Invalid host target: ${JSON.stringify(target)}. Valid: ${HOST_TARGETS.join(', ')}`);
25
+ }
26
+ switch (target) {
27
+ case 'openclaw':
28
+ return [new OpenClawHostInstaller()];
29
+ case 'codex':
30
+ return [new CodexHostInstaller()];
31
+ case 'all':
32
+ return [new OpenClawHostInstaller(), new CodexHostInstaller()];
33
+ }
34
+ }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installers/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAEhF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACvC,KAAK,OAAO;YACV,OAAO,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;QACpC,KAAK,KAAK;YACR,OAAO,CAAC,IAAI,qBAAqB,EAAE,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { HostInstaller, HostInstallContext, HostInstallResult, HostUninstallContext, HostUninstallResult, HostDetectResult } from '@principles/core/host';
2
+ /**
3
+ * OpenClaw host installer — writes/merges ~/.openclaw/openclaw.json and
4
+ * ~/.openclaw/plugins/installs.json. Does NOT install bundled components
5
+ * (core/pd-cli/console) — that's the shared installer's job.
6
+ */
7
+ export declare class OpenClawHostInstaller implements HostInstaller {
8
+ readonly hostId = "openclaw";
9
+ install(_ctx: HostInstallContext): Promise<HostInstallResult>;
10
+ /**
11
+ * Write install record to ~/.openclaw/plugins/installs.json.
12
+ * Non-fatal on failure — OpenClaw manages this file and will self-heal.
13
+ */
14
+ private writeInstallRecord;
15
+ uninstall(_ctx: HostUninstallContext): Promise<HostUninstallResult>;
16
+ detect(): HostDetectResult;
17
+ }
18
+ //# sourceMappingURL=openclaw-host-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-host-installer.d.ts","sourceRoot":"","sources":["../../src/installers/openclaw-host-installer.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAgE/B;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IACzD,QAAQ,CAAC,MAAM,cAAc;IAEvB,OAAO,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgJlE;IAED;;;OAGG;IAEH,OAAO,CAAC,kBAAkB;IAmEpB,SAAS,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwGxE;IAGD,MAAM,IAAI,gBAAgB,CAsBzB;CACF"}