@kya-os/create-mcpi-app 1.7.19 → 1.7.20

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 (71) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-test$colon$coverage.log +315 -0
  3. package/.turbo/turbo-test.log +95 -0
  4. package/CHANGELOG.md +372 -0
  5. package/IMPLEMENTATION_SUMMARY.md +108 -0
  6. package/REMEDIATION_PLAN.md +99 -0
  7. package/coverage/base.css +224 -0
  8. package/coverage/block-navigation.js +87 -0
  9. package/coverage/clover.xml +252 -0
  10. package/coverage/config-builder.ts.html +580 -0
  11. package/coverage/coverage-final.json +7 -0
  12. package/coverage/favicon.png +0 -0
  13. package/coverage/fetch-cloudflare-mcpi-template.ts.html +7006 -0
  14. package/coverage/generate-config.ts.html +436 -0
  15. package/coverage/generate-identity.ts.html +574 -0
  16. package/coverage/index.html +191 -0
  17. package/coverage/install.ts.html +322 -0
  18. package/coverage/prettify.css +1 -0
  19. package/coverage/prettify.js +2 -0
  20. package/coverage/sort-arrow-sprite.png +0 -0
  21. package/coverage/sorter.js +210 -0
  22. package/coverage/validate-project-structure.ts.html +466 -0
  23. package/package.json +14 -7
  24. package/scripts/prepare-pack.js +47 -0
  25. package/scripts/validate-no-workspace.js +79 -0
  26. package/src/__tests__/cloudflare-template.test.ts +488 -0
  27. package/src/__tests__/helpers/fetch-cloudflare-mcpi-template.test.ts +337 -0
  28. package/src/__tests__/helpers/generate-config.test.ts +312 -0
  29. package/src/__tests__/helpers/generate-identity.test.ts +271 -0
  30. package/src/__tests__/helpers/install.test.ts +362 -0
  31. package/src/__tests__/helpers/validate-project-structure.test.ts +467 -0
  32. package/src/__tests__.bak/regression.test.ts +434 -0
  33. package/src/effects/index.ts +80 -0
  34. package/src/helpers/__tests__/config-builder.spec.ts +231 -0
  35. package/src/helpers/apply-identity-preset.ts +209 -0
  36. package/src/helpers/config-builder.ts +165 -0
  37. package/src/helpers/copy-template.ts +11 -0
  38. package/src/helpers/create.ts +239 -0
  39. package/src/helpers/fetch-cloudflare-mcpi-template.ts +2311 -0
  40. package/src/helpers/fetch-cloudflare-template.ts +361 -0
  41. package/src/helpers/fetch-mcpi-template.ts +236 -0
  42. package/src/helpers/fetch-xmcp-template.ts +153 -0
  43. package/src/helpers/generate-config.ts +117 -0
  44. package/src/helpers/generate-identity.ts +163 -0
  45. package/src/helpers/identity-manager.ts +186 -0
  46. package/src/helpers/install.ts +79 -0
  47. package/src/helpers/rename.ts +17 -0
  48. package/src/helpers/validate-project-structure.ts +127 -0
  49. package/src/index.ts +480 -0
  50. package/src/utils/check-node.ts +17 -0
  51. package/src/utils/is-folder-empty.ts +60 -0
  52. package/src/utils/validate-project-name.ts +132 -0
  53. package/test-cloudflare/README.md +164 -0
  54. package/test-cloudflare/package.json +28 -0
  55. package/test-cloudflare/src/index.ts +340 -0
  56. package/test-cloudflare/src/tools/greet.ts +19 -0
  57. package/test-cloudflare/tests/cache-invalidation.test.ts +410 -0
  58. package/test-cloudflare/tests/cors-security.test.ts +349 -0
  59. package/test-cloudflare/tests/delegation.test.ts +335 -0
  60. package/test-cloudflare/tests/do-routing.test.ts +314 -0
  61. package/test-cloudflare/tests/integration.test.ts +205 -0
  62. package/test-cloudflare/tests/session-management.test.ts +359 -0
  63. package/test-cloudflare/tsconfig.json +22 -0
  64. package/test-cloudflare/vitest.config.ts +9 -0
  65. package/test-cloudflare/wrangler.toml +37 -0
  66. package/test-node/README.md +44 -0
  67. package/test-node/package.json +23 -0
  68. package/test-node/src/tools/greet.ts +25 -0
  69. package/test-node/xmcp.config.ts +20 -0
  70. package/tsconfig.json +26 -0
  71. package/vitest.config.ts +14 -0
@@ -0,0 +1,436 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for generate-config.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="prettify.css" />
9
+ <link rel="stylesheet" href="base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="index.html">All files</a> generate-config.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>17/17</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>7/7</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>2/2</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>17/17</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-neutral">&nbsp;</span>
186
+ <span class="cline-any cline-neutral">&nbsp;</span>
187
+ <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-neutral">&nbsp;</span>
189
+ <span class="cline-any cline-neutral">&nbsp;</span>
190
+ <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-neutral">&nbsp;</span>
192
+ <span class="cline-any cline-yes">25x</span>
193
+ <span class="cline-any cline-yes">25x</span>
194
+ <span class="cline-any cline-neutral">&nbsp;</span>
195
+ <span class="cline-any cline-yes">25x</span>
196
+ <span class="cline-any cline-neutral">&nbsp;</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-neutral">&nbsp;</span>
201
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-neutral">&nbsp;</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-yes">25x</span>
205
+ <span class="cline-any cline-yes">24x</span>
206
+ <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
211
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
213
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-yes">25x</span>
215
+ <span class="cline-any cline-yes">2x</span>
216
+ <span class="cline-any cline-neutral">&nbsp;</span>
217
+ <span class="cline-any cline-neutral">&nbsp;</span>
218
+ <span class="cline-any cline-neutral">&nbsp;</span>
219
+ <span class="cline-any cline-neutral">&nbsp;</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
+ <span class="cline-any cline-yes">25x</span>
222
+ <span class="cline-any cline-yes">22x</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-yes">25x</span>
229
+ <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-yes">25x</span>
235
+ <span class="cline-any cline-yes">25x</span>
236
+ <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-yes">25x</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-yes">25x</span>
246
+ <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-neutral">&nbsp;</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-yes">25x</span>
297
+ <span class="cline-any cline-yes">25x</span>
298
+ <span class="cline-any cline-yes">25x</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import fs from "fs-extra";
301
+ import path from "path";
302
+ import type { NodeRuntimeConfig } from "@kya-os/mcp-i";
303
+ &nbsp;
304
+ export function generateConfig(
305
+ projectPath: string,
306
+ transports: string[],
307
+ skipIdentity = false
308
+ ): void {
309
+ const hasHttp = transports.includes("http");
310
+ const hasStdio = transports.includes("stdio");
311
+ &nbsp;
312
+ let configContent = `import type { XmcpConfig } from "@kya-os/mcp-i";
313
+ &nbsp;
314
+ const config: XmcpConfig = {
315
+ // Point to the tools directory
316
+ paths: {
317
+ tools: "./src/tools",
318
+ },`;
319
+ &nbsp;
320
+ // Only add identity config if not skipped
321
+ if (!skipIdentity) {
322
+ configContent += `
323
+ &nbsp;
324
+ // Enable MCP-I identity features
325
+ identity: {
326
+ enabled: true,
327
+ environment: "development",
328
+ },`;
329
+ }
330
+ &nbsp;
331
+ if (hasHttp) {
332
+ configContent += `
333
+ &nbsp;
334
+ // Enable HTTP transport
335
+ http: true,`;
336
+ }
337
+ &nbsp;
338
+ if (hasStdio) {
339
+ configContent += `
340
+ &nbsp;
341
+ // Enable STDIO transport
342
+ stdio: true,`;
343
+ }
344
+ &nbsp;
345
+ configContent += `
346
+ };
347
+ &nbsp;
348
+ export default config;
349
+ `;
350
+ &nbsp;
351
+ const configPath = path.join(projectPath, "xmcp.config.ts");
352
+ fs.writeFileSync(configPath, configContent);
353
+ &nbsp;
354
+ // Generate runtime config for proof submission and delegation
355
+ generateRuntimeConfig(projectPath, skipIdentity);
356
+ }
357
+ &nbsp;
358
+ /**
359
+ * Generate runtime config file for ProofBatchQueue and delegation
360
+ */
361
+ function generateRuntimeConfig(projectPath: string, skipIdentity: boolean): void {
362
+ const runtimeConfigContent = `import type { NodeRuntimeConfig } from "@kya-os/mcp-i";
363
+ import { buildBaseConfig } from "@kya-os/create-mcpi-app/config-builder";
364
+ &nbsp;
365
+ /**
366
+ * Runtime configuration for MCP-I server
367
+ *
368
+ * This file configures runtime features like proof submission to AgentShield,
369
+ * delegation verification, and audit logging.
370
+ *
371
+ * Note: Environment variables are automatically injected by the MCP-I compiler
372
+ * from wrangler.toml (Cloudflare) or .env (Node.js). Configure them there:
373
+ * - AGENTSHIELD_API_URL: AgentShield API base URL
374
+ * - AGENTSHIELD_API_KEY: Your AgentShield API key
375
+ * - MCPI_ENV: "development" or "production"
376
+ *
377
+ * This config uses the unified MCPIConfig architecture, ensuring the same
378
+ * base configuration shape across all platforms (Cloudflare, Node.js, Vercel).
379
+ */
380
+ export function getRuntimeConfig(): NodeRuntimeConfig {
381
+ // Access environment variables (works in both Node.js and Cloudflare Workers)
382
+ // The compiler injects these from wrangler.toml or .env
383
+ const env = process.env;
384
+ &nbsp;
385
+ // Build base config that works across all platforms
386
+ const baseConfig = buildBaseConfig(env);
387
+ &nbsp;
388
+ // Extend with Node.js-specific properties
389
+ return {
390
+ ...baseConfig,
391
+ // Node.js-specific server configuration
392
+ server: {
393
+ port: parseInt(env.PORT || "3000", 10),
394
+ host: env.HOST || "0.0.0.0",
395
+ cors: true,
396
+ timeout: 30000
397
+ },
398
+ // Node.js-specific storage configuration
399
+ storage: {
400
+ type: "memory" as const
401
+ },
402
+ // Node.js-specific environment configuration
403
+ nodeEnv: {
404
+ environment: (env.NODE_ENV as "development" | "production" | "test") || "development",
405
+ debug: env.MCPI_ENV === "development"
406
+ }
407
+ } as NodeRuntimeConfig;
408
+ }
409
+ &nbsp;
410
+ export default getRuntimeConfig();
411
+ `;
412
+ &nbsp;
413
+ const runtimeConfigPath = path.join(projectPath, "src", "mcpi-runtime-config.ts");
414
+ fs.ensureDirSync(path.join(projectPath, "src"));
415
+ fs.writeFileSync(runtimeConfigPath, runtimeConfigContent);
416
+ }
417
+ &nbsp;</pre></td></tr></table></pre>
418
+
419
+ <div class='push'></div><!-- for sticky footer -->
420
+ </div><!-- /wrapper -->
421
+ <div class='footer quiet pad2 space-top1 center small'>
422
+ Code coverage generated by
423
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
424
+ at 2025-11-03T17:56:39.637Z
425
+ </div>
426
+ <script src="prettify.js"></script>
427
+ <script>
428
+ window.onload = function () {
429
+ prettyPrint();
430
+ };
431
+ </script>
432
+ <script src="sorter.js"></script>
433
+ <script src="block-navigation.js"></script>
434
+ </body>
435
+ </html>
436
+