@springbrand/cli 0.1.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 (222) hide show
  1. package/README.md +167 -0
  2. package/dist/commands/auth.d.ts +4 -0
  3. package/dist/commands/auth.d.ts.map +1 -0
  4. package/dist/commands/auth.js +241 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/check-version.d.ts +3 -0
  7. package/dist/commands/check-version.d.ts.map +1 -0
  8. package/dist/commands/check-version.js +112 -0
  9. package/dist/commands/check-version.js.map +1 -0
  10. package/dist/commands/config-claude.d.ts +4 -0
  11. package/dist/commands/config-claude.d.ts.map +1 -0
  12. package/dist/commands/config-claude.js +78 -0
  13. package/dist/commands/config-claude.js.map +1 -0
  14. package/dist/commands/connect.d.ts +41 -0
  15. package/dist/commands/connect.d.ts.map +1 -0
  16. package/dist/commands/connect.js +901 -0
  17. package/dist/commands/connect.js.map +1 -0
  18. package/dist/commands/doctor.d.ts +6 -0
  19. package/dist/commands/doctor.d.ts.map +1 -0
  20. package/dist/commands/doctor.js +124 -0
  21. package/dist/commands/doctor.js.map +1 -0
  22. package/dist/commands/upgrade.d.ts +9 -0
  23. package/dist/commands/upgrade.d.ts.map +1 -0
  24. package/dist/commands/upgrade.js +133 -0
  25. package/dist/commands/upgrade.js.map +1 -0
  26. package/dist/index.d.ts +4 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +15 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lib/agent-detect.d.ts +33 -0
  31. package/dist/lib/agent-detect.d.ts.map +1 -0
  32. package/dist/lib/agent-detect.js +81 -0
  33. package/dist/lib/agent-detect.js.map +1 -0
  34. package/dist/lib/agent-launcher.d.ts +22 -0
  35. package/dist/lib/agent-launcher.d.ts.map +1 -0
  36. package/dist/lib/agent-launcher.js +67 -0
  37. package/dist/lib/agent-launcher.js.map +1 -0
  38. package/dist/lib/auth.d.ts +90 -0
  39. package/dist/lib/auth.d.ts.map +1 -0
  40. package/dist/lib/auth.js +327 -0
  41. package/dist/lib/auth.js.map +1 -0
  42. package/dist/lib/bundled-skill.d.ts +5 -0
  43. package/dist/lib/bundled-skill.d.ts.map +1 -0
  44. package/dist/lib/bundled-skill.js +13 -0
  45. package/dist/lib/bundled-skill.js.map +1 -0
  46. package/dist/lib/claude-config.d.ts +19 -0
  47. package/dist/lib/claude-config.d.ts.map +1 -0
  48. package/dist/lib/claude-config.js +202 -0
  49. package/dist/lib/claude-config.js.map +1 -0
  50. package/dist/lib/cli-install.d.ts +40 -0
  51. package/dist/lib/cli-install.d.ts.map +1 -0
  52. package/dist/lib/cli-install.js +42 -0
  53. package/dist/lib/cli-install.js.map +1 -0
  54. package/dist/lib/command-code-config.d.ts +5 -0
  55. package/dist/lib/command-code-config.d.ts.map +1 -0
  56. package/dist/lib/command-code-config.js +16 -0
  57. package/dist/lib/command-code-config.js.map +1 -0
  58. package/dist/lib/connect-all-auth.d.ts +21 -0
  59. package/dist/lib/connect-all-auth.d.ts.map +1 -0
  60. package/dist/lib/connect-all-auth.js +113 -0
  61. package/dist/lib/connect-all-auth.js.map +1 -0
  62. package/dist/lib/connect-all-summary.d.ts +10 -0
  63. package/dist/lib/connect-all-summary.d.ts.map +1 -0
  64. package/dist/lib/connect-all-summary.js +153 -0
  65. package/dist/lib/connect-all-summary.js.map +1 -0
  66. package/dist/lib/connect-all-uninstall.d.ts +7 -0
  67. package/dist/lib/connect-all-uninstall.d.ts.map +1 -0
  68. package/dist/lib/connect-all-uninstall.js +249 -0
  69. package/dist/lib/connect-all-uninstall.js.map +1 -0
  70. package/dist/lib/connect-all.d.ts +42 -0
  71. package/dist/lib/connect-all.d.ts.map +1 -0
  72. package/dist/lib/connect-all.js +438 -0
  73. package/dist/lib/connect-all.js.map +1 -0
  74. package/dist/lib/connect-auth.d.ts +7 -0
  75. package/dist/lib/connect-auth.d.ts.map +1 -0
  76. package/dist/lib/connect-auth.js +50 -0
  77. package/dist/lib/connect-auth.js.map +1 -0
  78. package/dist/lib/connect-clients.d.ts +108 -0
  79. package/dist/lib/connect-clients.d.ts.map +1 -0
  80. package/dist/lib/connect-clients.js +358 -0
  81. package/dist/lib/connect-clients.js.map +1 -0
  82. package/dist/lib/connect-fallback.d.ts +27 -0
  83. package/dist/lib/connect-fallback.d.ts.map +1 -0
  84. package/dist/lib/connect-fallback.js +166 -0
  85. package/dist/lib/connect-fallback.js.map +1 -0
  86. package/dist/lib/connect-picker.d.ts +19 -0
  87. package/dist/lib/connect-picker.d.ts.map +1 -0
  88. package/dist/lib/connect-picker.js +155 -0
  89. package/dist/lib/connect-picker.js.map +1 -0
  90. package/dist/lib/connect-preflight.d.ts +17 -0
  91. package/dist/lib/connect-preflight.d.ts.map +1 -0
  92. package/dist/lib/connect-preflight.js +81 -0
  93. package/dist/lib/connect-preflight.js.map +1 -0
  94. package/dist/lib/connect-runtime.d.ts +109 -0
  95. package/dist/lib/connect-runtime.d.ts.map +1 -0
  96. package/dist/lib/connect-runtime.js +360 -0
  97. package/dist/lib/connect-runtime.js.map +1 -0
  98. package/dist/lib/constants.d.ts +23 -0
  99. package/dist/lib/constants.d.ts.map +1 -0
  100. package/dist/lib/constants.js +87 -0
  101. package/dist/lib/constants.js.map +1 -0
  102. package/dist/lib/cursor-config.d.ts +16 -0
  103. package/dist/lib/cursor-config.d.ts.map +1 -0
  104. package/dist/lib/cursor-config.js +34 -0
  105. package/dist/lib/cursor-config.js.map +1 -0
  106. package/dist/lib/doctor-checks.d.ts +21 -0
  107. package/dist/lib/doctor-checks.d.ts.map +1 -0
  108. package/dist/lib/doctor-checks.js +312 -0
  109. package/dist/lib/doctor-checks.js.map +1 -0
  110. package/dist/lib/doctor-repairs.d.ts +11 -0
  111. package/dist/lib/doctor-repairs.d.ts.map +1 -0
  112. package/dist/lib/doctor-repairs.js +130 -0
  113. package/dist/lib/doctor-repairs.js.map +1 -0
  114. package/dist/lib/doctor-report.d.ts +195 -0
  115. package/dist/lib/doctor-report.d.ts.map +1 -0
  116. package/dist/lib/doctor-report.js +102 -0
  117. package/dist/lib/doctor-report.js.map +1 -0
  118. package/dist/lib/doctor-telemetry.d.ts +9 -0
  119. package/dist/lib/doctor-telemetry.d.ts.map +1 -0
  120. package/dist/lib/doctor-telemetry.js +63 -0
  121. package/dist/lib/doctor-telemetry.js.map +1 -0
  122. package/dist/lib/harness-detect.d.ts +33 -0
  123. package/dist/lib/harness-detect.d.ts.map +1 -0
  124. package/dist/lib/harness-detect.js +70 -0
  125. package/dist/lib/harness-detect.js.map +1 -0
  126. package/dist/lib/harness-spec.d.ts +285 -0
  127. package/dist/lib/harness-spec.d.ts.map +1 -0
  128. package/dist/lib/harness-spec.js +268 -0
  129. package/dist/lib/harness-spec.js.map +1 -0
  130. package/dist/lib/harness.d.ts +27 -0
  131. package/dist/lib/harness.d.ts.map +1 -0
  132. package/dist/lib/harness.js +125 -0
  133. package/dist/lib/harness.js.map +1 -0
  134. package/dist/lib/hermes-config.d.ts +22 -0
  135. package/dist/lib/hermes-config.d.ts.map +1 -0
  136. package/dist/lib/hermes-config.js +76 -0
  137. package/dist/lib/hermes-config.js.map +1 -0
  138. package/dist/lib/hermes-env.d.ts +19 -0
  139. package/dist/lib/hermes-env.d.ts.map +1 -0
  140. package/dist/lib/hermes-env.js +169 -0
  141. package/dist/lib/hermes-env.js.map +1 -0
  142. package/dist/lib/hermes-plugin.d.ts +40 -0
  143. package/dist/lib/hermes-plugin.d.ts.map +1 -0
  144. package/dist/lib/hermes-plugin.js +168 -0
  145. package/dist/lib/hermes-plugin.js.map +1 -0
  146. package/dist/lib/install-root.d.ts +18 -0
  147. package/dist/lib/install-root.d.ts.map +1 -0
  148. package/dist/lib/install-root.js +55 -0
  149. package/dist/lib/install-root.js.map +1 -0
  150. package/dist/lib/mcp-config.d.ts +36 -0
  151. package/dist/lib/mcp-config.d.ts.map +1 -0
  152. package/dist/lib/mcp-config.js +90 -0
  153. package/dist/lib/mcp-config.js.map +1 -0
  154. package/dist/lib/mcp-endpoint.d.ts +16 -0
  155. package/dist/lib/mcp-endpoint.d.ts.map +1 -0
  156. package/dist/lib/mcp-endpoint.js +41 -0
  157. package/dist/lib/mcp-endpoint.js.map +1 -0
  158. package/dist/lib/mcp-json-config.d.ts +43 -0
  159. package/dist/lib/mcp-json-config.d.ts.map +1 -0
  160. package/dist/lib/mcp-json-config.js +164 -0
  161. package/dist/lib/mcp-json-config.js.map +1 -0
  162. package/dist/lib/notice.d.ts +13 -0
  163. package/dist/lib/notice.d.ts.map +1 -0
  164. package/dist/lib/notice.js +73 -0
  165. package/dist/lib/notice.js.map +1 -0
  166. package/dist/lib/omp-config.d.ts +18 -0
  167. package/dist/lib/omp-config.d.ts.map +1 -0
  168. package/dist/lib/omp-config.js +73 -0
  169. package/dist/lib/omp-config.js.map +1 -0
  170. package/dist/lib/output.d.ts +22 -0
  171. package/dist/lib/output.d.ts.map +1 -0
  172. package/dist/lib/output.js +92 -0
  173. package/dist/lib/output.js.map +1 -0
  174. package/dist/lib/pi-config.d.ts +27 -0
  175. package/dist/lib/pi-config.d.ts.map +1 -0
  176. package/dist/lib/pi-config.js +113 -0
  177. package/dist/lib/pi-config.js.map +1 -0
  178. package/dist/lib/registration-detect.d.ts +28 -0
  179. package/dist/lib/registration-detect.d.ts.map +1 -0
  180. package/dist/lib/registration-detect.js +563 -0
  181. package/dist/lib/registration-detect.js.map +1 -0
  182. package/dist/lib/setup-telemetry.d.ts +273 -0
  183. package/dist/lib/setup-telemetry.d.ts.map +1 -0
  184. package/dist/lib/setup-telemetry.js +309 -0
  185. package/dist/lib/setup-telemetry.js.map +1 -0
  186. package/dist/lib/signals.d.ts +14 -0
  187. package/dist/lib/signals.d.ts.map +1 -0
  188. package/dist/lib/signals.js +29 -0
  189. package/dist/lib/signals.js.map +1 -0
  190. package/dist/lib/skill-install.d.ts +10 -0
  191. package/dist/lib/skill-install.d.ts.map +1 -0
  192. package/dist/lib/skill-install.js +94 -0
  193. package/dist/lib/skill-install.js.map +1 -0
  194. package/dist/lib/skill-paths.d.ts +7 -0
  195. package/dist/lib/skill-paths.d.ts.map +1 -0
  196. package/dist/lib/skill-paths.js +37 -0
  197. package/dist/lib/skill-paths.js.map +1 -0
  198. package/dist/lib/skill-vendor.d.ts +20 -0
  199. package/dist/lib/skill-vendor.d.ts.map +1 -0
  200. package/dist/lib/skill-vendor.js +215 -0
  201. package/dist/lib/skill-vendor.js.map +1 -0
  202. package/dist/lib/skill.d.ts +14 -0
  203. package/dist/lib/skill.d.ts.map +1 -0
  204. package/dist/lib/skill.js +87 -0
  205. package/dist/lib/skill.js.map +1 -0
  206. package/dist/lib/verify.d.ts +35 -0
  207. package/dist/lib/verify.d.ts.map +1 -0
  208. package/dist/lib/verify.js +169 -0
  209. package/dist/lib/verify.js.map +1 -0
  210. package/dist/program.d.ts +8 -0
  211. package/dist/program.d.ts.map +1 -0
  212. package/dist/program.js +54 -0
  213. package/dist/program.js.map +1 -0
  214. package/package.json +55 -0
  215. package/skill/springbrand-action-api/SKILL.md +49 -0
  216. package/skill/springbrand-action-api/references/action-aliases.md +156 -0
  217. package/skill/springbrand-action-api/references/action-discovery.md +95 -0
  218. package/skill/springbrand-connector/SKILL.md +49 -0
  219. package/skill/springbrand-gtm/SKILL.md +34 -0
  220. package/skill/springbrand-platform/SKILL.md +55 -0
  221. package/skill/springbrand-platform/references/plugin-discovery.md +94 -0
  222. package/skill/use-springbrand/SKILL.md +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-launcher.js","sourceRoot":"","sources":["../../src/lib/agent-launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAatC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAsB;IACtD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAEvC,iCAAiC;IACjC,MAAM,cAAc,GAAgC;QAClD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;QACpE,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC;QAChC,UAAU,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,GAAG,CAAC;QACpC,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC;KAC9B,CAAC;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;IAE/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAC7B,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,sCAAsC;QACtC,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,4BAA4B;QAC5B,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgB;IAC/C,MAAM,QAAQ,GAA8B;QAC1C,aAAa,EAAE,QAAQ;QACvB,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,MAAM;KAChB,CAAC;IAEF,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE;YAC3C,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA8B;IAC3D,aAAa,EAAE,4DAA4D;IAC3E,QAAQ,EAAE,sCAAsC;IAChD,UAAU,EAAE,iCAAiC;IAC7C,OAAO,EAAE,oCAAoC;CAC9C,CAAC"}
@@ -0,0 +1,90 @@
1
+ /** 复刻自 tiny-fish CLI 编译产物:auth.d.ts + auth.impl.js */
2
+ /**
3
+ * The wire format the platform mints and the Gateway parses:
4
+ * `sbk_v1_<environment>_<16-byte id>_<32-byte secret>`. Authoritative definition lives in
5
+ * `@springbrand/auth/mcp-api-key`; it is restated here because the CLI ships as its own npm
6
+ * package and cannot depend on the Gateway's vendored tarball.
7
+ */
8
+ export declare const MCP_KEY_PREFIX = "sbk_v1_";
9
+ export declare const KEY_FORMAT_HINT = "Expected a SpringBrand MCP key: sbk_v1_<dev|production>_<id>_<secret>.";
10
+ export { DASHBOARD_URL, getDashboardUrl } from './constants.js';
11
+ export declare function configDir(): string;
12
+ export declare function configFile(): string;
13
+ /** Install channel baked onto connect context; the connect flow is always CLI-driven. */
14
+ export declare const CONNECT_SOURCE = "springbrand_cli";
15
+ export declare const CONNECT_ATTEMPT_ENV = "SPRINGBRAND_CONNECT_ATTEMPT_ID";
16
+ export declare function loadConfig(): SpringbrandConfig;
17
+ export declare function isAttemptId(value: string): boolean;
18
+ /**
19
+ * Park a page-minted attempt id for the connect that follows in a later process:
20
+ * `auth login` and the connect it leads to are separate copied commands.
21
+ */
22
+ export declare function savePendingConnectAttempt(attemptId: string): void;
23
+ /** Read-and-clear: one parked id seeds one install attempt, expired or not. */
24
+ export declare function takePendingConnectAttempt(): string | undefined;
25
+ /** Throwing variant for callers with their own cleanup (connect's telemetry flush). */
26
+ export declare function writeConfig(apiKey: string): void;
27
+ export declare function saveConfig(apiKey: string): void;
28
+ /** `authMode` omitted rewrites the entry without one: a reconnect that degraded must not keep a stale key claim. */
29
+ export declare function saveConnectContext(client: string, attemptId: string, authMode?: RecordedAuthMode): void;
30
+ /** Distinguishes a missing entry from an unreadable config file. */
31
+ export declare function connectContextState(client: string): 'present' | 'absent' | 'unreadable';
32
+ /** Kept marker after uninstall makes doctor offer to reinstall the harness. */
33
+ export declare function clearConnectContext(client: string): void;
34
+ export declare function persistApiKeyToEnvironment(apiKey: string, options?: EnvironmentOptions): void;
35
+ export declare function clearConfig(): boolean;
36
+ /**
37
+ * The environment and the safe security identifier, never the secret. The environment decides
38
+ * which endpoint a key belongs to (see `environmentOf`), and `keyId` is the platform's own
39
+ * non-bearer identifier for the key.
40
+ */
41
+ export declare function parseKeyIdentity(key: string): KeyIdentity | undefined;
42
+ export declare function validateKeyFormat(key: string): boolean;
43
+ export declare function maskKey(key: string): string;
44
+ /** Key for optional paths (telemetry, auth probes) — absent is a valid answer, so never exits. */
45
+ export declare function resolvedApiKey(explicitApiKey?: string): string | undefined;
46
+ /** Answers "is this the CLI's own key" without the value leaving the caller; see sdk/cli/CLAUDE.md. */
47
+ export declare function matchesCliKey(value: string | undefined): boolean;
48
+ /** resolvedApiKey for keys that reach a config file or the wire — loadConfig() is unvalidated on read. */
49
+ export declare function validatedApiKey(explicitApiKey?: string): string | undefined;
50
+ /**
51
+ * The diagnosis, not the key: doctor must report a bad credential and say where it came from
52
+ * rather than exit like getApiKey does.
53
+ */
54
+ export declare function apiKeyStatus(explicitApiKey?: string): ResolvedKey | UnresolvedKey;
55
+ export declare function getApiKey(): string;
56
+ export type RecordedAuthMode = 'api-key' | 'oauth' | 'deferred';
57
+ export type KeyEnvironment = 'dev' | 'production';
58
+ export interface KeyIdentity {
59
+ environment: KeyEnvironment;
60
+ id: string;
61
+ /** The platform's `sbkid_v1_…` security identifier; not a bearer value. */
62
+ keyId: string;
63
+ }
64
+ interface ConnectEntry {
65
+ attempt_id: string;
66
+ auth_mode?: RecordedAuthMode;
67
+ }
68
+ interface PendingConnectAttempt {
69
+ id: string;
70
+ ts: number;
71
+ }
72
+ interface SpringbrandConfig {
73
+ api_key?: string;
74
+ connect?: Record<string, ConnectEntry>;
75
+ pending_connect_attempt?: PendingConnectAttempt;
76
+ }
77
+ interface EnvironmentOptions {
78
+ platform?: typeof process.platform;
79
+ shell?: string;
80
+ }
81
+ export type KeySource = 'explicit' | 'env' | 'config' | 'none';
82
+ export interface ResolvedKey {
83
+ key: string;
84
+ source: Exclude<KeySource, 'none'>;
85
+ }
86
+ export interface UnresolvedKey {
87
+ error: string;
88
+ source: KeySource;
89
+ }
90
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,327 @@
1
+ /** 复刻自 tiny-fish CLI 编译产物:auth.d.ts + auth.impl.js */
2
+ import * as fs from 'fs';
3
+ import * as os from 'os';
4
+ import * as path from 'path';
5
+ import spawn from 'cross-spawn';
6
+ import { err, errLine } from './output.js';
7
+ import { SPRINGBRAND_API_KEY_VAR } from './constants.js';
8
+ /**
9
+ * The wire format the platform mints and the Gateway parses:
10
+ * `sbk_v1_<environment>_<16-byte id>_<32-byte secret>`. Authoritative definition lives in
11
+ * `@springbrand/auth/mcp-api-key`; it is restated here because the CLI ships as its own npm
12
+ * package and cannot depend on the Gateway's vendored tarball.
13
+ */
14
+ export const MCP_KEY_PREFIX = 'sbk_v1_';
15
+ const KEY_PATTERN = /^sbk_v1_(dev|production)_([0-9a-f]{32})_[0-9a-f]{64}$/;
16
+ export const KEY_FORMAT_HINT = 'Expected a SpringBrand MCP key: sbk_v1_<dev|production>_<id>_<secret>.';
17
+ export { DASHBOARD_URL, getDashboardUrl } from './constants.js';
18
+ export function configDir() {
19
+ // os.homedir() is cross-platform; process.env.HOME is undefined on Windows
20
+ return path.join(os.homedir(), '.springbrand');
21
+ }
22
+ export function configFile() {
23
+ return path.join(configDir(), 'config.json');
24
+ }
25
+ /** Install channel baked onto connect context; the connect flow is always CLI-driven. */
26
+ export const CONNECT_SOURCE = 'springbrand_cli';
27
+ // An env var, not a flag: released CLIs ignore an unknown one, and the installer's PATH
28
+ // prepend means a copied command can still run a CLI far older than the page that wrote it.
29
+ export const CONNECT_ATTEMPT_ENV = 'SPRINGBRAND_CONNECT_ATTEMPT_ID';
30
+ const RECORDED_AUTH_MODES = ['api-key', 'oauth', 'deferred'];
31
+ export function loadConfig() {
32
+ try {
33
+ const raw = JSON.parse(fs.readFileSync(configFile(), 'utf8'));
34
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
35
+ return {};
36
+ const obj = raw;
37
+ const config = {};
38
+ if (typeof obj['api_key'] === 'string')
39
+ config.api_key = obj['api_key'];
40
+ const connect = parseConnectMap(obj['connect']);
41
+ if (connect)
42
+ config.connect = connect;
43
+ const pending = parsePendingAttempt(obj['pending_connect_attempt']);
44
+ if (pending)
45
+ config.pending_connect_attempt = pending;
46
+ return config;
47
+ }
48
+ catch {
49
+ return {};
50
+ }
51
+ }
52
+ function parseConnectMap(value) {
53
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
54
+ return undefined;
55
+ const out = {};
56
+ for (const [client, entry] of Object.entries(value)) {
57
+ const record = entry;
58
+ const attemptId = record?.attempt_id;
59
+ if (typeof attemptId !== 'string')
60
+ continue;
61
+ const authMode = record?.auth_mode;
62
+ out[client] =
63
+ typeof authMode === 'string' && RECORDED_AUTH_MODES.includes(authMode)
64
+ ? { attempt_id: attemptId, auth_mode: authMode }
65
+ : { attempt_id: attemptId };
66
+ }
67
+ return Object.keys(out).length > 0 ? out : undefined;
68
+ }
69
+ function parsePendingAttempt(value) {
70
+ const entry = value;
71
+ if (typeof entry?.id !== 'string' || typeof entry.ts !== 'number')
72
+ return undefined;
73
+ return isAttemptId(entry.id) ? { id: entry.id, ts: entry.ts } : undefined;
74
+ }
75
+ export function isAttemptId(value) {
76
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
77
+ }
78
+ /**
79
+ * The one read-modify-write of the config file. Every caller goes through it so the
80
+ * loadConfig whitelist stays the single definition of what survives a write. Throws;
81
+ * callers own their failure policy, which differs per command.
82
+ */
83
+ function updateConfig(change) {
84
+ // 0o700: only owner can read/write/execute the directory
85
+ fs.mkdirSync(configDir(), { recursive: true, mode: 0o700 });
86
+ // 0o600: only owner can read/write the config file (key is sensitive)
87
+ fs.writeFileSync(configFile(), JSON.stringify(change(loadConfig())), { mode: 0o600 });
88
+ }
89
+ /**
90
+ * Park a page-minted attempt id for the connect that follows in a later process:
91
+ * `auth login` and the connect it leads to are separate copied commands.
92
+ */
93
+ export function savePendingConnectAttempt(attemptId) {
94
+ if (!isAttemptId(attemptId))
95
+ return;
96
+ try {
97
+ updateConfig((config) => ({
98
+ ...config,
99
+ pending_connect_attempt: { id: attemptId, ts: Date.now() },
100
+ }));
101
+ }
102
+ catch {
103
+ // Attribution is never worth failing a sign-in for.
104
+ }
105
+ }
106
+ // Older than this and the id belongs to some abandoned setup, not the connect running now.
107
+ const PENDING_ATTEMPT_MAX_AGE_MS = 24 * 60 * 60 * 1000;
108
+ /** Read-and-clear: one parked id seeds one install attempt, expired or not. */
109
+ export function takePendingConnectAttempt() {
110
+ const pending = loadConfig().pending_connect_attempt;
111
+ if (!pending)
112
+ return undefined;
113
+ try {
114
+ updateConfig(({ pending_connect_attempt: _cleared, ...rest }) => rest);
115
+ }
116
+ catch {
117
+ // An id still on disk would be claimed twice, and a double-counted install is worse
118
+ // than a missed join.
119
+ return undefined;
120
+ }
121
+ return Date.now() - pending.ts <= PENDING_ATTEMPT_MAX_AGE_MS ? pending.id : undefined;
122
+ }
123
+ /** Throwing variant for callers with their own cleanup (connect's telemetry flush). */
124
+ export function writeConfig(apiKey) {
125
+ updateConfig((config) => ({ ...config, api_key: apiKey }));
126
+ }
127
+ export function saveConfig(apiKey) {
128
+ try {
129
+ writeConfig(apiKey);
130
+ }
131
+ catch (e) {
132
+ err({ error: `Could not write config: ${e instanceof Error ? e.message : String(e)}` });
133
+ process.exit(1);
134
+ }
135
+ }
136
+ /** `authMode` omitted rewrites the entry without one: a reconnect that degraded must not keep a stale key claim. */
137
+ export function saveConnectContext(client, attemptId, authMode) {
138
+ const entry = authMode
139
+ ? { attempt_id: attemptId, auth_mode: authMode }
140
+ : { attempt_id: attemptId };
141
+ try {
142
+ updateConfig((config) => ({
143
+ ...config,
144
+ connect: { ...config.connect, [client]: entry },
145
+ }));
146
+ }
147
+ catch (e) {
148
+ // Best-effort attribution marker: a write failure must not fail a connect that has
149
+ // already succeeded (MCP registered, skill installed, authenticated). Warn and continue.
150
+ errLine(`Warning: could not persist connect context: ${e instanceof Error ? e.message : String(e)}`);
151
+ }
152
+ }
153
+ /** Distinguishes a missing entry from an unreadable config file. */
154
+ export function connectContextState(client) {
155
+ let raw;
156
+ try {
157
+ raw = fs.readFileSync(configFile(), 'utf8');
158
+ }
159
+ catch (e) {
160
+ return e.code === 'ENOENT' ? 'absent' : 'unreadable';
161
+ }
162
+ try {
163
+ const parsed = JSON.parse(raw);
164
+ const entry = parsed && typeof parsed === 'object' ? parsed.connect?.[client] : undefined;
165
+ return entry ? 'present' : 'absent';
166
+ }
167
+ catch {
168
+ return 'unreadable';
169
+ }
170
+ }
171
+ /** Kept marker after uninstall makes doctor offer to reinstall the harness. */
172
+ export function clearConnectContext(client) {
173
+ // Read-first: writing through an unreadable config would rewrite it as {}.
174
+ if (connectContextState(client) !== 'present')
175
+ return;
176
+ try {
177
+ updateConfig((config) => {
178
+ if (!config.connect?.[client])
179
+ return config;
180
+ const remaining = Object.fromEntries(Object.entries(config.connect).filter(([key]) => key !== client));
181
+ const { connect, ...rest } = config;
182
+ void connect;
183
+ return Object.keys(remaining).length > 0 ? { ...rest, connect: remaining } : rest;
184
+ });
185
+ }
186
+ catch (e) {
187
+ errLine(`Warning: could not clear connect context: ${e instanceof Error ? e.message : String(e)}`);
188
+ }
189
+ }
190
+ function resolveProfilePath(shell, platform) {
191
+ const home = os.homedir();
192
+ const macBashProfile = ['.bash_profile', '.bash_login', '.profile']
193
+ .map((name) => path.join(home, name)) // nosemgrep: path-join-resolve-traversal -- fixed filenames under os.homedir()
194
+ .find((candidate) => fs.existsSync(candidate)) ?? path.join(home, '.bash_profile');
195
+ if (shell === 'zsh')
196
+ return path.join(home, '.zshrc');
197
+ if (shell === 'bash') {
198
+ return platform === 'darwin' ? macBashProfile : path.join(home, '.bashrc');
199
+ }
200
+ if (shell === 'fish')
201
+ return path.join(home, '.config', 'fish', 'config.fish');
202
+ return path.join(home, '.profile');
203
+ }
204
+ export function persistApiKeyToEnvironment(apiKey, options) {
205
+ const platform = options?.platform ?? process.platform;
206
+ if (platform === 'win32') {
207
+ const result = spawn.sync('setx', [SPRINGBRAND_API_KEY_VAR, apiKey], { stdio: 'ignore' });
208
+ if (result.error || result.status !== 0) {
209
+ throw new Error('Could not set SPRINGBRAND_API_KEY in the Windows user environment', {
210
+ cause: result.error,
211
+ });
212
+ }
213
+ return;
214
+ }
215
+ const shell = path.basename(options?.shell ?? process.env['SHELL'] ?? '');
216
+ const fish = shell === 'fish';
217
+ const profile = resolveProfilePath(shell, platform);
218
+ const quotedKey = `'${apiKey.replaceAll("'", "'\\''")}'`;
219
+ const prefix = fish ? `set -gx ${SPRINGBRAND_API_KEY_VAR} ` : `export ${SPRINGBRAND_API_KEY_VAR}=`;
220
+ const assignment = `${prefix}${quotedKey}`;
221
+ const existing = fs.existsSync(profile) ? fs.readFileSync(profile, 'utf8') : '';
222
+ // Drops prior assignments, so repeated logins do not stack stale keys.
223
+ const cleaned = existing
224
+ .split('\n')
225
+ .filter((line) => !line.startsWith(prefix))
226
+ .join('\n');
227
+ const updated = `${cleaned}${cleaned && !cleaned.endsWith('\n') ? '\n' : ''}${assignment}\n`;
228
+ fs.mkdirSync(path.dirname(profile), { recursive: true });
229
+ fs.writeFileSync(profile, updated, { mode: 0o600 });
230
+ fs.chmodSync(profile, 0o600);
231
+ }
232
+ export function clearConfig() {
233
+ if (!loadConfig().api_key)
234
+ return false;
235
+ try {
236
+ // The parked id goes too: the next person to sign in on this machine is not the one
237
+ // whose copy minted it.
238
+ updateConfig(({ api_key: _key, pending_connect_attempt: _attempt, ...rest }) => rest);
239
+ return true;
240
+ }
241
+ catch {
242
+ // Write failed — key was not actually removed
243
+ return false;
244
+ }
245
+ }
246
+ /** The one rule that is ours to enforce: the key becomes an HTTP header, so CR/LF cannot pass. */
247
+ function isHeaderSafe(key) {
248
+ for (let i = 0; i < key.length; i += 1) {
249
+ if (key.charCodeAt(i) < 0x20)
250
+ return false;
251
+ }
252
+ return true;
253
+ }
254
+ /**
255
+ * The environment and the safe security identifier, never the secret. The environment decides
256
+ * which endpoint a key belongs to (see `environmentOf`), and `keyId` is the platform's own
257
+ * non-bearer identifier for the key.
258
+ */
259
+ export function parseKeyIdentity(key) {
260
+ const match = KEY_PATTERN.exec(key);
261
+ if (!match)
262
+ return undefined;
263
+ const environment = match[1];
264
+ const id = match[2];
265
+ return { environment, id, keyId: `sbkid_v1_${environment}_${id}` };
266
+ }
267
+ export function validateKeyFormat(key) {
268
+ return isHeaderSafe(key) && KEY_PATTERN.test(key);
269
+ }
270
+ export function maskKey(key) {
271
+ if (key.length <= 8)
272
+ return '***';
273
+ const identity = parseKeyIdentity(key);
274
+ // `sbk_v1_<environment>_` is shared by every key of that environment, so a preview has to
275
+ // reach into the id to tell two of them apart.
276
+ return identity
277
+ ? `${MCP_KEY_PREFIX}${identity.environment}_${identity.id.slice(0, 6)}...${key.slice(-4)}`
278
+ : key.slice(0, 12) + '...' + key.slice(-4);
279
+ }
280
+ // The one flag/env/config precedence chain; `source` says which place a caller must name.
281
+ function lookupApiKey(explicitApiKey) {
282
+ if (explicitApiKey)
283
+ return { value: explicitApiKey, source: 'explicit' };
284
+ const envKey = process.env[SPRINGBRAND_API_KEY_VAR];
285
+ if (envKey)
286
+ return { value: envKey, source: 'env' };
287
+ // No try/catch: loadConfig swallows its own errors and returns {}.
288
+ const stored = loadConfig().api_key;
289
+ return stored ? { value: stored, source: 'config' } : { source: 'none' };
290
+ }
291
+ /** Key for optional paths (telemetry, auth probes) — absent is a valid answer, so never exits. */
292
+ export function resolvedApiKey(explicitApiKey) {
293
+ return lookupApiKey(explicitApiKey).value;
294
+ }
295
+ /** Answers "is this the CLI's own key" without the value leaving the caller; see sdk/cli/CLAUDE.md. */
296
+ export function matchesCliKey(value) {
297
+ return value !== undefined && value === resolvedApiKey();
298
+ }
299
+ /** resolvedApiKey for keys that reach a config file or the wire — loadConfig() is unvalidated on read. */
300
+ export function validatedApiKey(explicitApiKey) {
301
+ const key = resolvedApiKey(explicitApiKey);
302
+ return key && validateKeyFormat(key) ? key : undefined;
303
+ }
304
+ /**
305
+ * The diagnosis, not the key: doctor must report a bad credential and say where it came from
306
+ * rather than exit like getApiKey does.
307
+ */
308
+ export function apiKeyStatus(explicitApiKey) {
309
+ const { value, source } = lookupApiKey(explicitApiKey);
310
+ if (!value || source === 'none') {
311
+ return { error: 'No API key found. Run: sp auth login', source: 'none' };
312
+ }
313
+ // Shape is the server's call. A local prefix rule turns a key format we have not shipped
314
+ // support for yet into a hard failure the user cannot work around, and the 401 says more.
315
+ if (!isHeaderSafe(value)) {
316
+ return { error: 'The API key contains control characters and cannot be sent', source };
317
+ }
318
+ return { key: value, source };
319
+ }
320
+ export function getApiKey() {
321
+ const resolved = apiKeyStatus();
322
+ if ('key' in resolved)
323
+ return resolved.key;
324
+ err({ error: resolved.error });
325
+ process.exit(1);
326
+ }
327
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,WAAW,GAAG,uDAAuD,CAAC;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,wEAAwE,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChE,MAAM,UAAU,SAAS;IACrB,2EAA2E;IAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,UAAU,UAAU;IACtB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AACD,yFAAyF;AACzF,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAChD,wFAAwF;AACxF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,mBAAmB,GAAG,gCAAgC,CAAC;AACpE,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC7D,MAAM,UAAU,UAAU;IACtB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAC7D,OAAO,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,GAA8B,CAAC;QAC3C,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;YAClC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,IAAI,OAAO;YACP,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7B,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACpE,IAAI,OAAO;YACP,MAAM,CAAC,uBAAuB,GAAG,OAAO,CAAC;QAC7C,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CAAC;QACH,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AACD,SAAS,eAAe,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnE,OAAO,SAAS,CAAC;IACrB,MAAM,GAAG,GAAiC,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,KAAsD,CAAC;QACtE,MAAM,SAAS,GAAG,MAAM,EAAE,UAAU,CAAC;QACrC,IAAI,OAAO,SAAS,KAAK,QAAQ;YAC7B,SAAS;QACb,MAAM,QAAQ,GAAG,MAAM,EAAE,SAAS,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC;YACP,OAAO,QAAQ,KAAK,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAClE,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAA4B,EAAE;gBACpE,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AACD,SAAS,mBAAmB,CAAC,KAAc;IACvC,MAAM,KAAK,GAAG,KAA0D,CAAC;IACzE,IAAI,OAAO,KAAK,EAAE,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC7D,OAAO,SAAS,CAAC;IACrB,OAAO,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,KAAa;IACrC,OAAO,4EAA4E,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpG,CAAC;AACD;;;;GAIG;AACH,SAAS,YAAY,CAAC,MAAwD;IAC1E,yDAAyD;IACzD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,sEAAsE;IACtE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1F,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACvD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QACvB,OAAO;IACX,IAAI,CAAC;QACD,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACtB,GAAG,MAAM;YACT,uBAAuB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;SAC7D,CAAC,CAAC,CAAC;IACR,CAAC;IACD,MAAM,CAAC;QACH,oDAAoD;IACxD,CAAC;AACL,CAAC;AACD,2FAA2F;AAC3F,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACvD,+EAA+E;AAC/E,MAAM,UAAU,yBAAyB;IACrC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC,uBAAuB,CAAC;IACrD,IAAI,CAAC,OAAO;QACR,OAAO,SAAS,CAAC;IACrB,IAAI,CAAC;QACD,YAAY,CAAC,CAAC,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,CAAC;QACH,oFAAoF;QACpF,sBAAsB;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1F,CAAC;AACD,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,MAAc;IACtC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,MAAc;IACrC,IAAI,CAAC;QACD,WAAW,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,EAAE,KAAK,EAAE,2BAA2B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AACD,oHAAoH;AACpH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,SAAiB,EAAE,QAA2B;IAC7F,MAAM,KAAK,GAAG,QAAQ;QAClB,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE;QAChD,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC;QACD,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACtB,GAAG,MAAM;YACT,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE;SAClD,CAAC,CAAC,CAAC;IACR,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,mFAAmF;QACnF,yFAAyF;QACzF,OAAO,CAAC,+CAA+C,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;AACL,CAAC;AACD,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAC9C,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACD,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,OAAQ,CAAwB,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;IACjF,CAAC;IACD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxC,CAAC;IACD,MAAM,CAAC;QACH,OAAO,YAAY,CAAC;IACxB,CAAC;AACL,CAAC;AACD,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAC9C,2EAA2E;IAC3E,IAAI,mBAAmB,CAAC,MAAM,CAAC,KAAK,SAAS;QACzC,OAAO;IACX,IAAI,CAAC;QACD,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;YACpB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;gBACzB,OAAO,MAAM,CAAC;YAClB,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC;YACvG,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;YACpC,KAAK,OAAO,CAAC;YACb,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,6CAA6C,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;AACL,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAa,EAAE,QAAyB;IAChE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,cAAc,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,UAAU,CAAC;SAC9D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,+EAA+E;SACpH,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACvF,IAAI,KAAK,KAAK,KAAK;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,KAAK,KAAK,MAAM;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC;AACD,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,OAA4B;IACnF,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACvD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,mEAAmE,EAAE;gBACjF,KAAK,EAAE,MAAM,CAAC,KAAK;aACtB,CAAC,CAAC;QACP,CAAC;QACD,OAAO;IACX,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC;IAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,uBAAuB,GAAG,CAAC,CAAC,CAAC,UAAU,uBAAuB,GAAG,CAAC;IACnG,MAAM,UAAU,GAAG,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,uEAAuE;IACvE,MAAM,OAAO,GAAG,QAAQ;SACnB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,MAAM,OAAO,GAAG,GAAG,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,IAAI,CAAC;IAC7F,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AACD,MAAM,UAAU,WAAW;IACvB,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO;QACrB,OAAO,KAAK,CAAC;IACjB,IAAI,CAAC;QACD,oFAAoF;QACpF,wBAAwB;QACxB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACzG,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,CAAC;QACH,8CAA8C;QAC9C,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AACD,kGAAkG;AAClG,SAAS,YAAY,CAAC,GAAW;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;YACxB,OAAO,KAAK,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AACD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QACN,OAAO,SAAS,CAAC;IACrB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAmB,CAAC;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,WAAW,IAAI,EAAE,EAAE,EAAE,CAAC;AACvE,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,GAAW;IACzC,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AACD,MAAM,UAAU,OAAO,CAAC,GAAW;IAC/B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QACf,OAAO,KAAK,CAAC;IACjB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACvC,0FAA0F;IAC1F,+CAA+C;IAC/C,OAAO,QAAQ;QACX,CAAC,CAAC,GAAG,cAAc,GAAG,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1F,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AACD,0FAA0F;AAC1F,SAAS,YAAY,CAAC,cAAuB;IACzC,IAAI,cAAc;QACd,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACpD,IAAI,MAAM;QACN,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC5C,mEAAmE;IACnE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC;IACpC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC7E,CAAC;AACD,kGAAkG;AAClG,MAAM,UAAU,cAAc,CAAC,cAAuB;IAClD,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AACD,uGAAuG;AACvG,MAAM,UAAU,aAAa,CAAC,KAAyB;IACnD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;AAC7D,CAAC;AACD,0GAA0G;AAC1G,MAAM,UAAU,eAAe,CAAC,cAAuB;IACnD,MAAM,GAAG,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IAC3C,OAAO,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,cAAuB;IAChD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,sCAAsC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC7E,CAAC;IACD,yFAAyF;IACzF,0FAA0F;IAC1F,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,4DAA4D,EAAE,MAAM,EAAE,CAAC;IAC3F,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AACD,MAAM,UAAU,SAAS;IACrB,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,KAAK,IAAI,QAAQ;QACjB,OAAO,QAAQ,CAAC,GAAG,CAAC;IACxB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** 复刻自 tiny-fish CLI 编译产物:bundled-skill.d.ts + bundled-skill.impl.js */
2
+ /** Two levels up from dist/lib/ is the package root; tsc mirrors src/. */
3
+ export declare function bundledSkillDir(name?: string): string;
4
+ export declare function bundledSkillNames(): readonly string[];
5
+ //# sourceMappingURL=bundled-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundled-skill.d.ts","sourceRoot":"","sources":["../../src/lib/bundled-skill.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAKxE,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAuB,GAAG,MAAM,CAGrE;AAED,wBAAgB,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAErD"}
@@ -0,0 +1,13 @@
1
+ /** 复刻自 tiny-fish CLI 编译产物:bundled-skill.d.ts + bundled-skill.impl.js */
2
+ import * as path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { BUNDLED_SKILL_NAMES, WEB_SKILL_NAME } from './constants.js';
5
+ /** Two levels up from dist/lib/ is the package root; tsc mirrors src/. */
6
+ export function bundledSkillDir(name = WEB_SKILL_NAME) {
7
+ const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
8
+ return path.join(packageRoot, 'skill', name);
9
+ }
10
+ export function bundledSkillNames() {
11
+ return BUNDLED_SKILL_NAMES;
12
+ }
13
+ //# sourceMappingURL=bundled-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundled-skill.js","sourceRoot":"","sources":["../../src/lib/bundled-skill.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrE,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,OAAe,cAAc;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO,mBAAmB,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** 复刻自 tiny-fish CLI 编译产物:claude-config.d.ts + claude-config.impl.js */
2
+ export declare function claudeSettingsPath(): string;
3
+ export declare function claudeMdPath(): string;
4
+ export declare const SPRINGBRAND_PERMISSION = "Bash(springbrand:*)";
5
+ export declare const CLAUDE_MD_MARKER = "<!-- springbrand-configure-claude -->";
6
+ export declare function readSettingsJson(): Record<string, unknown>;
7
+ export declare function writeSettingsJson(settings: Record<string, unknown>): void;
8
+ export declare function mergeSettings(existing: Record<string, unknown>): Record<string, unknown>;
9
+ export declare function removeFromSettings(existing: Record<string, unknown>): Record<string, unknown>;
10
+ export declare function readClaudeMd(): string;
11
+ export declare function writeClaudeMd(content: string): void;
12
+ export declare function mergeClaudeMd(existing: string): {
13
+ content: string;
14
+ replaced: boolean;
15
+ };
16
+ export declare function removeFromClaudeMd(existing: string): string;
17
+ export declare function isSpringbrandConfiguredInSettings(settings: Record<string, unknown>): boolean;
18
+ export declare function isSpringbrandConfiguredInClaudeMd(content: string): boolean;
19
+ //# sourceMappingURL=claude-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-config.d.ts","sourceRoot":"","sources":["../../src/lib/claude-config.ts"],"names":[],"mappings":"AAAA,wEAAwE;AASxE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AACD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AA2B5D,eAAO,MAAM,gBAAgB,0CAA0C,CAAC;AAgCxE,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAe1D;AACD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGzE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBxF;AACD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0B7F;AAED,wBAAgB,YAAY,IAAI,MAAM,CAUrC;AACD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGnD;AAaD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACrB,CAaA;AACD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAM5F;AACD,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1E"}