@wrongstack/core 0.310.1 → 0.313.1

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 (187) hide show
  1. package/dist/chronicle/index.js +84 -6391
  2. package/dist/chronicle/project-server.js +84 -4868
  3. package/dist/chunk-2BUUIMQB.js +225 -0
  4. package/dist/chunk-2FK4WTFF.js +207 -0
  5. package/dist/chunk-2FQL4PDC.js +292 -0
  6. package/dist/chunk-2KKODIQU.js +2256 -0
  7. package/dist/chunk-2YU4WVBW.js +134 -0
  8. package/dist/chunk-3E244UDA.js +356 -0
  9. package/dist/chunk-3XPVB7BA.js +135 -0
  10. package/dist/chunk-4LJJYBAU.js +388 -0
  11. package/dist/chunk-4VWO3ZXL.js +342 -0
  12. package/dist/chunk-4XV6IR37.js +187 -0
  13. package/dist/chunk-4ZHTKJHM.js +183 -0
  14. package/dist/chunk-52RTVH4M.js +361 -0
  15. package/dist/chunk-57GEWK5X.js +26 -0
  16. package/dist/chunk-5DSMEVA4.js +931 -0
  17. package/dist/chunk-5RP3QTRL.js +1223 -0
  18. package/dist/chunk-5S437PRC.js +50 -0
  19. package/dist/chunk-5XDUGTKN.js +511 -0
  20. package/dist/chunk-62V2AFVG.js +422 -0
  21. package/dist/chunk-65RDIOR2.js +2470 -0
  22. package/dist/chunk-6AKOTGLM.js +597 -0
  23. package/dist/chunk-7ZHZE5EO.js +28 -0
  24. package/dist/chunk-A455ATZB.js +140 -0
  25. package/dist/chunk-AD7ZFZCS.js +46 -0
  26. package/dist/chunk-AI4LLQ2U.js +856 -0
  27. package/dist/chunk-ASX6AW36.js +789 -0
  28. package/dist/chunk-AT4V4XGI.js +3522 -0
  29. package/dist/chunk-AWNQ6ED6.js +311 -0
  30. package/dist/chunk-B4AMLZPB.js +9 -0
  31. package/dist/chunk-BAKVJLEV.js +417 -0
  32. package/dist/chunk-BJHVULHO.js +55 -0
  33. package/dist/chunk-CB2HFKTP.js +9 -0
  34. package/dist/chunk-CE4ZOCOI.js +1640 -0
  35. package/dist/chunk-CQQL4ZOQ.js +151 -0
  36. package/dist/chunk-DEIQMBD2.js +65 -0
  37. package/dist/chunk-E6I5RXVK.js +58 -0
  38. package/dist/chunk-EFEHDQGY.js +1589 -0
  39. package/dist/chunk-EODDVJBM.js +82 -0
  40. package/dist/chunk-EPC3GZD4.js +308 -0
  41. package/dist/chunk-FAYRX2AD.js +13 -0
  42. package/dist/chunk-FFSX2QDQ.js +362 -0
  43. package/dist/chunk-FHAMQS7Q.js +5856 -0
  44. package/dist/chunk-FIV4IJL7.js +2263 -0
  45. package/dist/chunk-FNXVT7HF.js +52 -0
  46. package/dist/chunk-FSWCWSTS.js +395 -0
  47. package/dist/chunk-FW5LDDMJ.js +16464 -0
  48. package/dist/chunk-FXQLIX3K.js +211 -0
  49. package/dist/chunk-G5AAKEEZ.js +228 -0
  50. package/dist/chunk-G5S3S5ZN.js +38 -0
  51. package/dist/chunk-GAZEWQEZ.js +231 -0
  52. package/dist/chunk-GFJOMSHG.js +125 -0
  53. package/dist/chunk-GFXZTHNI.js +158 -0
  54. package/dist/chunk-GM54GJBU.js +960 -0
  55. package/dist/chunk-GPQ3NJPR.js +900 -0
  56. package/dist/chunk-GTCU6DZ3.js +1 -0
  57. package/dist/chunk-H5E77KUJ.js +15 -0
  58. package/dist/chunk-H72H4XDU.js +1023 -0
  59. package/dist/chunk-HA4ZYA6T.js +178 -0
  60. package/dist/chunk-I45KAW2N.js +5020 -0
  61. package/dist/chunk-IQ35HMQL.js +1396 -0
  62. package/dist/chunk-IYFBFX34.js +86 -0
  63. package/dist/chunk-JJPMWPB6.js +109 -0
  64. package/dist/chunk-JTHKOYWU.js +663 -0
  65. package/dist/chunk-JVGPR3TS.js +365 -0
  66. package/dist/chunk-JVKB2TBL.js +48 -0
  67. package/dist/chunk-JX7VBZDK.js +31 -0
  68. package/dist/chunk-K3G6JBUC.js +5232 -0
  69. package/dist/chunk-K4YUNKU7.js +589 -0
  70. package/dist/chunk-KBZGE6LN.js +710 -0
  71. package/dist/chunk-KDQJCT2J.js +45 -0
  72. package/dist/chunk-KI4L2DUL.js +560 -0
  73. package/dist/chunk-KJ2ZTQSL.js +47 -0
  74. package/dist/chunk-KSJ5UTP7.js +154 -0
  75. package/dist/chunk-LHOA5DWA.js +28 -0
  76. package/dist/chunk-LX5QWLBL.js +27 -0
  77. package/dist/chunk-LZDDLNCZ.js +279 -0
  78. package/dist/chunk-M2WF6AXG.js +115 -0
  79. package/dist/chunk-M7BS2K6U.js +1 -0
  80. package/dist/chunk-NDBIPFNY.js +102 -0
  81. package/dist/chunk-NEMIWEXC.js +1199 -0
  82. package/dist/chunk-NFAYHPRH.js +323 -0
  83. package/dist/chunk-O37BQ65S.js +21 -0
  84. package/dist/chunk-O74MJHXU.js +187 -0
  85. package/dist/chunk-OJZEX73F.js +112 -0
  86. package/dist/chunk-PAAWLLZX.js +74 -0
  87. package/dist/chunk-PFXFQQRT.js +339 -0
  88. package/dist/chunk-PFZO3C6H.js +14 -0
  89. package/dist/chunk-PHH7LD45.js +113 -0
  90. package/dist/chunk-QRTG4XTI.js +188 -0
  91. package/dist/chunk-QVOVMXJR.js +1351 -0
  92. package/dist/chunk-RCQYT2I4.js +757 -0
  93. package/dist/chunk-RD6DEE36.js +1178 -0
  94. package/dist/chunk-RJIZEJ42.js +30 -0
  95. package/dist/chunk-RPOA7IAE.js +150 -0
  96. package/dist/chunk-SN2DQRL6.js +1172 -0
  97. package/dist/chunk-SQJVFEBV.js +41 -0
  98. package/dist/chunk-SQP64RCS.js +5391 -0
  99. package/dist/chunk-SVT4RNTR.js +49 -0
  100. package/dist/chunk-SWUFN7XM.js +43 -0
  101. package/dist/chunk-SXMVYC5H.js +174 -0
  102. package/dist/chunk-SZ6AYUIZ.js +23 -0
  103. package/dist/chunk-T3KGZBU5.js +3171 -0
  104. package/dist/chunk-TBRL2RCC.js +9 -0
  105. package/dist/chunk-TRT2HRWZ.js +18 -0
  106. package/dist/chunk-TYW2GI5I.js +1077 -0
  107. package/dist/chunk-UIWONWVG.js +4959 -0
  108. package/dist/chunk-VB3H5WWB.js +151 -0
  109. package/dist/chunk-W4A6QA3D.js +258 -0
  110. package/dist/chunk-WBPVKEEE.js +227 -0
  111. package/dist/chunk-WEBMSQP2.js +123 -0
  112. package/dist/chunk-WOEZV3Q4.js +333 -0
  113. package/dist/chunk-WQQON3SV.js +473 -0
  114. package/dist/chunk-WQTOVMGV.js +119 -0
  115. package/dist/chunk-WZO23AWO.js +2779 -0
  116. package/dist/chunk-XBDP4QPW.js +7 -0
  117. package/dist/chunk-XEBHSJLT.js +103 -0
  118. package/dist/chunk-XQ2ECNK3.js +1 -0
  119. package/dist/chunk-XQ2XGIBF.js +2086 -0
  120. package/dist/chunk-Y2GE5TSI.js +355 -0
  121. package/dist/chunk-YBUJCZ57.js +351 -0
  122. package/dist/chunk-YNCVSFGF.js +149 -0
  123. package/dist/chunk-YUPMXOGP.js +282 -0
  124. package/dist/chunk-YY6APYUM.js +49 -0
  125. package/dist/chunk-Z2IJUO45.js +691 -0
  126. package/dist/chunk-ZEHUCJHY.js +129 -0
  127. package/dist/chunk-ZYU2YOJ6.js +1496 -0
  128. package/dist/chunk-ZZ4V3WIZ.js +163 -0
  129. package/dist/coordination/agents/index.js +145 -6260
  130. package/dist/coordination/index.js +365 -34323
  131. package/dist/coordination/mailbox-project-server.js +48 -3220
  132. package/dist/coordination/mailbox-types.d.ts +13 -1
  133. package/dist/coordination/provider-status-tracker.d.ts +4 -0
  134. package/dist/coordination/sqlite-mailbox.d.ts +2 -1
  135. package/dist/core/agent.d.ts +14 -1
  136. package/dist/core/index.js +267 -12479
  137. package/dist/core/model-ref.js +5 -23
  138. package/dist/core/provider-runner.d.ts +36 -1
  139. package/dist/design/index.js +50 -1087
  140. package/dist/execution/index.d.ts +1 -1
  141. package/dist/execution/index.js +1599 -21887
  142. package/dist/execution/prompt-enhancer.js +16 -535
  143. package/dist/execution/retry-policy.d.ts +31 -1
  144. package/dist/extension/index.js +7 -311
  145. package/dist/goal/index.js +33 -3435
  146. package/dist/hooks/index.js +14 -1138
  147. package/dist/hq/index.js +112 -5139
  148. package/dist/hq/protocol.js +21 -668
  149. package/dist/index.js +1410 -92655
  150. package/dist/infrastructure/index.js +64 -4811
  151. package/dist/kernel/events/provider-events.d.ts +15 -0
  152. package/dist/kernel/events/wrongtrace-events.d.ts +26 -0
  153. package/dist/kernel/events.d.ts +16 -7
  154. package/dist/kernel/index.js +14 -992
  155. package/dist/models/index.js +40 -1117
  156. package/dist/notifications/index.js +3 -108
  157. package/dist/observability/index.js +17 -279
  158. package/dist/plugin/index.js +584 -14835
  159. package/dist/prompts/index.js +14 -948
  160. package/dist/registry/index.js +9 -822
  161. package/dist/registry-R23UBE7H.js +14 -0
  162. package/dist/replay/index.js +6 -84
  163. package/dist/review-finding-store-DKAV3AS6.js +21 -0
  164. package/dist/review-report-store-OWY3EC3N.js +19 -0
  165. package/dist/security/index.js +114 -2202
  166. package/dist/session-catalog/index.js +36 -2103
  167. package/dist/session-catalog/project-server.js +42 -1435
  168. package/dist/skills/index.js +35 -1578
  169. package/dist/storage/index.js +182 -15600
  170. package/dist/tasking/index.js +10 -676
  171. package/dist/tools/index.js +52 -9589
  172. package/dist/types/config/autonomy.d.ts +5 -0
  173. package/dist/types/config/tools.d.ts +2 -2
  174. package/dist/types/config/ui.d.ts +1 -1
  175. package/dist/types/errors.d.ts +18 -0
  176. package/dist/types/index.js +121 -1341
  177. package/dist/types/provider-runner.d.ts +8 -0
  178. package/dist/types/session-markers.js +8 -144
  179. package/dist/utils/error.js +3 -4
  180. package/dist/utils/expect-defined.js +3 -9
  181. package/dist/utils/heap-watchdog.js +6 -706
  182. package/dist/utils/index.js +269 -5685
  183. package/dist/utils/sage-output-block.js +5 -42
  184. package/dist/wiring/proxy-rewrite.d.ts +92 -4
  185. package/dist/wiring/proxy-rewrite.js +20 -61
  186. package/dist/worktree/index.js +6 -887
  187. package/package.json +4 -4
@@ -0,0 +1,211 @@
1
+ // src/infrastructure/mcp-servers.ts
2
+ var filesystemServer = () => ({
3
+ name: "filesystem",
4
+ description: "Read, write, and navigate the local filesystem (read-heavy tools)",
5
+ transport: "stdio",
6
+ command: "npx",
7
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "."],
8
+ permission: "confirm"
9
+ });
10
+ var githubServer = () => ({
11
+ name: "github",
12
+ description: "GitHub API \u2014 issues, PRs, repos, search, file ops (requires GITHUB_PERSONAL_ACCESS_TOKEN)",
13
+ transport: "stdio",
14
+ command: "npx",
15
+ args: ["-y", "@modelcontextprotocol/server-github"],
16
+ passthroughEnv: ["GITHUB_PERSONAL_ACCESS_TOKEN", "GITHUB_TOKEN"],
17
+ permission: "confirm"
18
+ });
19
+ var context7Server = () => ({
20
+ name: "context7",
21
+ description: "Codebase-aware documentation and Q&A (context7.ai)",
22
+ transport: "streamable-http",
23
+ url: "https://mcp.context7.com/mcp",
24
+ permission: "confirm"
25
+ });
26
+ var braveSearchServer = () => ({
27
+ name: "brave-search",
28
+ description: "Web search (Brave). Requires BRAVE_SEARCH_API_KEY \u2014 free tier 2k queries/month",
29
+ transport: "stdio",
30
+ command: "npx",
31
+ args: ["-y", "@modelcontextprotocol/server-brave-search"],
32
+ passthroughEnv: ["BRAVE_SEARCH_API_KEY"],
33
+ permission: "confirm"
34
+ });
35
+ var blockServer = () => ({
36
+ name: "block",
37
+ description: "Postgres database access via SQL (Block MCP server)",
38
+ transport: "stdio",
39
+ command: "npx",
40
+ args: ["-y", "@modelcontextprotocol/server-block"],
41
+ permission: "confirm"
42
+ });
43
+ var everArtServer = () => ({
44
+ name: "everart",
45
+ description: "AI image generation (EverArt). Requires EVERART_API_KEY",
46
+ transport: "stdio",
47
+ command: "npx",
48
+ args: ["-y", "@modelcontextprotocol/server-everart"],
49
+ passthroughEnv: ["EVERART_API_KEY"],
50
+ permission: "confirm"
51
+ });
52
+ var slackServer = () => ({
53
+ name: "slack",
54
+ description: "Slack \u2014 messaging, channels, search. Requires SLACK_BOT_TOKEN + SLACK_TEAM_ID",
55
+ transport: "stdio",
56
+ command: "npx",
57
+ args: ["-y", "@modelcontextprotocol/server-slack"],
58
+ passthroughEnv: ["SLACK_BOT_TOKEN", "SLACK_TEAM_ID"],
59
+ permission: "confirm"
60
+ });
61
+ var awsServer = () => ({
62
+ name: "aws",
63
+ description: "AWS \u2014 EC2, S3, Lambda, IAM, CloudFormation, costs. Requires AWS credentials",
64
+ transport: "stdio",
65
+ command: "npx",
66
+ args: ["-y", "@modelcontextprotocol/server-aws"],
67
+ passthroughEnv: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION", "AWS_SESSION_TOKEN"],
68
+ permission: "confirm"
69
+ });
70
+ var googleMapsServer = () => ({
71
+ name: "google-maps",
72
+ description: "Google Maps \u2014 directions, geocoding, places. Requires GOOGLE_MAPS_API_KEY",
73
+ transport: "stdio",
74
+ command: "npx",
75
+ args: ["-y", "@modelcontextprotocol/server-google-maps"],
76
+ passthroughEnv: ["GOOGLE_MAPS_API_KEY"],
77
+ permission: "confirm"
78
+ });
79
+ var sentinelServer = () => ({
80
+ name: "sentinel",
81
+ description: "Security vulnerability scanning (Sentinel)",
82
+ transport: "streamable-http",
83
+ url: "https://mcp.sentinel.ai",
84
+ permission: "deny"
85
+ // security tool — require explicit confirmation
86
+ });
87
+ var zaiVisionServer = () => ({
88
+ name: "zai-vision",
89
+ description: "Z.AI Vision MCP \u2014 image analysis and screenshot understanding",
90
+ transport: "stdio",
91
+ command: "npx",
92
+ args: ["-y", "@z_ai/mcp-server@latest"],
93
+ env: { Z_AI_MODE: "ZAI" },
94
+ passthroughEnv: ["Z_AI_API_KEY"],
95
+ allowedTools: [
96
+ "image_analysis",
97
+ "extract_text_from_screenshot",
98
+ "diagnose_error_screenshot",
99
+ "understand_technical_diagram",
100
+ "analyze_data_visualization",
101
+ "ui_diff_check"
102
+ ],
103
+ permission: "auto"
104
+ });
105
+ var playwrightServer = () => ({
106
+ name: "playwright",
107
+ description: "Browser automation \u2014 navigate, screenshot, click, type, evaluate JS (headless Chromium)",
108
+ transport: "stdio",
109
+ command: "npx",
110
+ args: ["-y", "@modelcontextprotocol/server-playwright"],
111
+ permission: "confirm"
112
+ });
113
+ var miniMaxVisionServer = () => ({
114
+ name: "minimax-vision",
115
+ description: "MiniMax MCP \u2014 image understanding via understand_image",
116
+ transport: "stdio",
117
+ command: "uvx",
118
+ args: ["minimax-coding-plan-mcp", "-y"],
119
+ env: {
120
+ MINIMAX_MCP_BASE_PATH: "./.wrongstack/minimax-output",
121
+ MINIMAX_API_HOST: "https://api.minimax.io",
122
+ MINIMAX_API_RESOURCE_MODE: "url"
123
+ },
124
+ passthroughEnv: ["MINIMAX_API_KEY"],
125
+ allowedTools: ["understand_image"],
126
+ permission: "auto"
127
+ });
128
+ var sshManagerServer = () => ({
129
+ name: "ssh",
130
+ description: "Remote SSH management \u2014 execute commands, transfer files, tunnels, health checks (mcp-ssh-manager)",
131
+ transport: "stdio",
132
+ command: "npx",
133
+ args: ["-y", "mcp-ssh-manager"],
134
+ env: {
135
+ MCP_SSH_COMPACT_JSON: "true",
136
+ MCP_SSH_DEFAULT_TIMEOUT: "120000"
137
+ },
138
+ permission: "confirm",
139
+ requestTimeoutMs: 18e4
140
+ });
141
+ var requirementIntakeServer = () => ({
142
+ name: "requirement-intake",
143
+ description: "WrongStack Requirements Intake \u2014 list intake records and file new ones (project-scoped, --writable)",
144
+ transport: "stdio",
145
+ command: "wstack-requirement-intake-mcp",
146
+ args: ["--project-root", ".", "--writable"],
147
+ permission: "auto"
148
+ });
149
+ var kanbanServer = () => ({
150
+ name: "kanban",
151
+ description: "WrongStack Kanban \u2014 inspect and manage project work boards (project-scoped, manage tier, no destructive ops)",
152
+ transport: "stdio",
153
+ command: "wstack-kanban-mcp",
154
+ args: ["--project-root", ".", "--writable"],
155
+ permission: "confirm"
156
+ });
157
+ var mailboxServer = () => ({
158
+ name: "mailbox",
159
+ description: "WrongStack Mailbox \u2014 read and send project agent mail (project-scoped, no admin/credentials)",
160
+ transport: "stdio",
161
+ command: "wstack-mailbox-mcp",
162
+ args: ["--project-root", ".", "--actor", "external-agent", "--writable"],
163
+ permission: "auto"
164
+ });
165
+ var codebaseIndexServer = () => ({
166
+ name: "codebase-index",
167
+ description: "WrongStack Codebase Index \u2014 symbol search and dependency graphs (project-scoped, --writable)",
168
+ transport: "stdio",
169
+ command: "wstack-codebase-index-mcp",
170
+ args: ["--project-root", ".", "--writable"],
171
+ permission: "auto"
172
+ });
173
+ var allServers = () => ({
174
+ filesystem: { ...filesystemServer(), enabled: false },
175
+ github: { ...githubServer(), enabled: false },
176
+ context7: { ...context7Server(), enabled: false },
177
+ "brave-search": { ...braveSearchServer(), enabled: false },
178
+ block: { ...blockServer(), enabled: false },
179
+ everart: { ...everArtServer(), enabled: false },
180
+ slack: { ...slackServer(), enabled: false },
181
+ aws: { ...awsServer(), enabled: false },
182
+ "google-maps": { ...googleMapsServer(), enabled: false },
183
+ sentinel: { ...sentinelServer(), enabled: false },
184
+ "zai-vision": { ...zaiVisionServer(), enabled: false },
185
+ "minimax-vision": { ...miniMaxVisionServer(), enabled: false },
186
+ playwright: { ...playwrightServer(), enabled: false },
187
+ ssh: { ...sshManagerServer(), enabled: false },
188
+ kanban: { ...kanbanServer(), enabled: false },
189
+ mailbox: { ...mailboxServer(), enabled: false },
190
+ "codebase-index": { ...codebaseIndexServer(), enabled: false },
191
+ "requirement-intake": { ...requirementIntakeServer(), enabled: false }
192
+ });
193
+
194
+ export {
195
+ filesystemServer,
196
+ githubServer,
197
+ context7Server,
198
+ braveSearchServer,
199
+ blockServer,
200
+ everArtServer,
201
+ slackServer,
202
+ awsServer,
203
+ googleMapsServer,
204
+ sentinelServer,
205
+ zaiVisionServer,
206
+ playwrightServer,
207
+ miniMaxVisionServer,
208
+ sshManagerServer,
209
+ allServers
210
+ };
211
+ //# sourceMappingURL=chunk-FXQLIX3K.js.map
@@ -0,0 +1,228 @@
1
+ import {
2
+ ERROR_CODES,
3
+ WrongStackError
4
+ } from "./chunk-WOEZV3Q4.js";
5
+ import {
6
+ expectDefined
7
+ } from "./chunk-PFZO3C6H.js";
8
+
9
+ // src/extension/registry.ts
10
+ var ExtensionRegistry = class {
11
+ extensions = [];
12
+ promptContributors = [];
13
+ log;
14
+ setLogger(log) {
15
+ this.log = log;
16
+ }
17
+ /**
18
+ * Register a system prompt contributor. Returns an unregister function.
19
+ * Contributors are called on every system prompt build in registration
20
+ * order. Their output blocks are inserted after the core environment
21
+ * block, before the mode and plan blocks.
22
+ */
23
+ registerSystemPromptContributor(c) {
24
+ this.promptContributors.push(c);
25
+ return () => {
26
+ const idx = this.promptContributors.indexOf(c);
27
+ if (idx >= 0) this.promptContributors.splice(idx, 1);
28
+ };
29
+ }
30
+ /**
31
+ * Build all registered system prompt contributions.
32
+ * Failures are caught and logged — one bad contributor doesn't
33
+ * break the prompt assembly.
34
+ */
35
+ async buildSystemPromptContributions(ctx) {
36
+ const blocks = [];
37
+ const snapshot = [...this.promptContributors];
38
+ for (const c of snapshot) {
39
+ try {
40
+ const contributed = await c(ctx);
41
+ blocks.push(...contributed);
42
+ } catch (err) {
43
+ this.log?.error("SystemPromptContributor failed", err);
44
+ }
45
+ }
46
+ return blocks;
47
+ }
48
+ /**
49
+ * Returns the live array of contributors (readonly snapshot for
50
+ * passing to DefaultSystemPromptBuilder at build time).
51
+ */
52
+ listSystemPromptContributors() {
53
+ return this.promptContributors;
54
+ }
55
+ /**
56
+ * Register an extension. Duplicate names are rejected.
57
+ * Returns an unregister function.
58
+ */
59
+ register(ext) {
60
+ if (this.extensions.some((e) => e.name === ext.name)) {
61
+ throw new WrongStackError({
62
+ message: `Extension "${ext.name}" already registered`,
63
+ code: ERROR_CODES.REGISTRY_DUPLICATE,
64
+ subsystem: "container",
65
+ context: { extension: ext.name }
66
+ });
67
+ }
68
+ this.extensions.push(ext);
69
+ return () => this.unregister(ext.name);
70
+ }
71
+ /**
72
+ * Register an extension, silently replacing any previous registration
73
+ * with the same name. Use this when overriding a default extension.
74
+ */
75
+ registerOrReplace(ext) {
76
+ const idx = this.extensions.findIndex((e) => e.name === ext.name);
77
+ if (idx >= 0) this.extensions.splice(idx, 1);
78
+ return this.register(ext);
79
+ }
80
+ /**
81
+ * Unregister an extension by name. Returns true if found.
82
+ */
83
+ unregister(name) {
84
+ const idx = this.extensions.findIndex((e) => e.name === name);
85
+ if (idx === -1) return false;
86
+ this.extensions.splice(idx, 1);
87
+ return true;
88
+ }
89
+ /**
90
+ * List registered extension names in order.
91
+ */
92
+ list() {
93
+ return this.extensions.map((e) => e.name);
94
+ }
95
+ /**
96
+ * Check if an extension with the given name is registered.
97
+ */
98
+ has(name) {
99
+ return this.extensions.some((e) => e.name === name);
100
+ }
101
+ /**
102
+ * Remove all registered extensions and contributors.
103
+ */
104
+ clear() {
105
+ this.extensions.length = 0;
106
+ this.promptContributors.length = 0;
107
+ }
108
+ // ── Hook runners ─────────────────────────────────────────────────
109
+ async runBeforeRun(...args) {
110
+ const snapshot = [...this.extensions];
111
+ for (const ext of snapshot) {
112
+ if (!ext.beforeRun) continue;
113
+ try {
114
+ await ext.beforeRun(...args);
115
+ } catch (err) {
116
+ this.log?.error(`Extension "${ext.name}" beforeRun hook failed`, err);
117
+ }
118
+ }
119
+ }
120
+ async runAfterRun(...args) {
121
+ const snapshot = [...this.extensions];
122
+ for (const ext of snapshot) {
123
+ if (!ext.afterRun) continue;
124
+ try {
125
+ await ext.afterRun(...args);
126
+ } catch (err) {
127
+ this.log?.error(`Extension "${ext.name}" afterRun hook failed`, err);
128
+ }
129
+ }
130
+ }
131
+ async runBeforeIteration(...args) {
132
+ const snapshot = [...this.extensions];
133
+ for (const ext of snapshot) {
134
+ if (!ext.beforeIteration) continue;
135
+ try {
136
+ await ext.beforeIteration(...args);
137
+ } catch (err) {
138
+ this.log?.error(`Extension "${ext.name}" beforeIteration hook failed`, err);
139
+ }
140
+ }
141
+ }
142
+ async runAfterIteration(...args) {
143
+ const snapshot = [...this.extensions];
144
+ for (const ext of snapshot) {
145
+ if (!ext.afterIteration) continue;
146
+ try {
147
+ await ext.afterIteration(...args);
148
+ } catch (err) {
149
+ this.log?.error(`Extension "${ext.name}" afterIteration hook failed`, err);
150
+ }
151
+ }
152
+ }
153
+ /**
154
+ * Run onError hooks in order. The first hook that returns a non-void
155
+ * result wins; subsequent hooks are skipped.
156
+ */
157
+ async runOnError(...args) {
158
+ const snapshot = [...this.extensions];
159
+ for (const ext of snapshot) {
160
+ if (!ext.onError) continue;
161
+ try {
162
+ const result = await ext.onError(...args);
163
+ if (result) return result;
164
+ } catch (err) {
165
+ this.log?.error(`Extension "${ext.name}" onError hook failed`, err);
166
+ }
167
+ }
168
+ }
169
+ /**
170
+ * Build a composed provider runner. Extensions with `wrapProviderRunner`
171
+ * form a middleware-style chain: the innermost extension wraps the
172
+ * default runner, each subsequent wrapper wraps the previous.
173
+ *
174
+ * Utility calls may exclude agent-loop-only middleware (notably
175
+ * `fallback-model`) while retaining request-safety wrappers such as the
176
+ * prompt firewall. One-shot orchestration owns its provider and fallback
177
+ * route, so an agent-loop fallback wrapper cannot safely run against it.
178
+ */
179
+ wrapProviderRunner(inner, options) {
180
+ const excluded = new Set(options?.exclude);
181
+ const wrappers = this.extensions.filter((e) => e.wrapProviderRunner && !excluded.has(e.name)).map((e) => ({ name: e.name, wrap: expectDefined(e.wrapProviderRunner) }));
182
+ if (wrappers.length === 0) return inner;
183
+ let composed = inner;
184
+ for (let i = wrappers.length - 1; i >= 0; i--) {
185
+ const wrapper = wrappers[i];
186
+ if (!wrapper) continue;
187
+ const next = composed;
188
+ composed = async (ctx, req) => {
189
+ try {
190
+ return await wrapper.wrap(ctx, req, next);
191
+ } catch (err) {
192
+ this.log?.error(`Extension "${wrapper.name}" wrapProviderRunner failed`, err);
193
+ throw err;
194
+ }
195
+ };
196
+ }
197
+ return composed;
198
+ }
199
+ async runBeforeToolExecution(...args) {
200
+ let toolUses = args[1];
201
+ const snapshot = [...this.extensions];
202
+ for (const ext of snapshot) {
203
+ if (!ext.beforeToolExecution) continue;
204
+ try {
205
+ toolUses = await ext.beforeToolExecution(args[0], toolUses);
206
+ } catch (err) {
207
+ this.log?.error(`Extension "${ext.name}" beforeToolExecution hook failed`, err);
208
+ }
209
+ }
210
+ return toolUses;
211
+ }
212
+ async runAfterToolExecution(...args) {
213
+ const snapshot = [...this.extensions];
214
+ for (const ext of snapshot) {
215
+ if (!ext.afterToolExecution) continue;
216
+ try {
217
+ await ext.afterToolExecution(...args);
218
+ } catch (err) {
219
+ this.log?.error(`Extension "${ext.name}" afterToolExecution hook failed`, err);
220
+ }
221
+ }
222
+ }
223
+ };
224
+
225
+ export {
226
+ ExtensionRegistry
227
+ };
228
+ //# sourceMappingURL=chunk-G5AAKEEZ.js.map
@@ -0,0 +1,38 @@
1
+ // src/types/design-kit.ts
2
+ var DESIGN_STACKS = ["web", "react-native", "flutter", "swiftui", "compose"];
3
+ function isDesignStack(v) {
4
+ return DESIGN_STACKS.includes(v);
5
+ }
6
+ var KNOWN_TOKEN_GROUPS = {
7
+ /** Corner radii. */
8
+ radius: ["radius-none", "radius-sm", "radius-md", "radius-lg", "radius-xl", "radius-full"],
9
+ /** Spacing scale (4/8px rhythm). */
10
+ space: ["space-1", "space-2", "space-3", "space-4", "space-6", "space-8", "space-12"],
11
+ /** Type sizes. */
12
+ text: ["text-xs", "text-sm", "text-base", "text-lg", "text-xl", "text-2xl", "text-3xl"],
13
+ /** Line-heights (unitless). */
14
+ leading: ["leading-tight", "leading-normal", "leading-relaxed"],
15
+ /** Font weights (unitless). */
16
+ weight: ["weight-normal", "weight-medium", "weight-semibold", "weight-bold"],
17
+ /** Letter-spacing. */
18
+ tracking: ["tracking-tight", "tracking-normal", "tracking-wide"],
19
+ /** Elevation / shadow ramp. */
20
+ shadow: ["shadow-1", "shadow-2", "shadow-3", "shadow-4"],
21
+ /** Border widths. */
22
+ border: ["border-hairline", "border-thin", "border-thick"],
23
+ /** Motion durations. */
24
+ duration: ["duration-fast", "duration-base", "duration-slow"],
25
+ /** Motion easings. */
26
+ ease: ["ease-standard", "ease-emphasized"],
27
+ /** Font families. */
28
+ font: ["font-sans", "font-mono", "font-display"]
29
+ };
30
+ var KNOWN_TOKEN_NAMES = Object.values(KNOWN_TOKEN_GROUPS).flat();
31
+
32
+ export {
33
+ DESIGN_STACKS,
34
+ isDesignStack,
35
+ KNOWN_TOKEN_GROUPS,
36
+ KNOWN_TOKEN_NAMES
37
+ };
38
+ //# sourceMappingURL=chunk-G5S3S5ZN.js.map