@portel/photon 1.18.0 â 1.19.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.
- package/dist/auto-ui/beam.d.ts.map +1 -1
- package/dist/auto-ui/beam.js +14 -4
- package/dist/auto-ui/beam.js.map +1 -1
- package/dist/beam-form.bundle.js +5 -3
- package/dist/beam-form.bundle.js.map +2 -2
- package/dist/beam.bundle.js +686 -30
- package/dist/beam.bundle.js.map +3 -3
- package/dist/claude-code-plugin.js +1 -1
- package/dist/cli/commands/beam.d.ts.map +1 -1
- package/dist/cli/commands/beam.js +8 -2
- package/dist/cli/commands/beam.js.map +1 -1
- package/dist/cli/commands/changelog.d.ts +9 -0
- package/dist/cli/commands/changelog.d.ts.map +1 -0
- package/dist/cli/commands/changelog.js +133 -0
- package/dist/cli/commands/changelog.js.map +1 -0
- package/dist/cli/commands/maker.d.ts.map +1 -1
- package/dist/cli/commands/maker.js +23 -2
- package/dist/cli/commands/maker.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +53 -0
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/package.d.ts.map +1 -1
- package/dist/cli/commands/package.js +18 -2
- package/dist/cli/commands/package.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +1 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/update.d.ts +3 -2
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +50 -43
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +16 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli-alias.js +1 -1
- package/dist/cli-alias.js.map +1 -1
- package/dist/context-store.d.ts +23 -33
- package/dist/context-store.d.ts.map +1 -1
- package/dist/context-store.js +147 -97
- package/dist/context-store.js.map +1 -1
- package/dist/context.d.ts +15 -10
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +37 -13
- package/dist/context.js.map +1 -1
- package/dist/daemon/server.js +4 -2
- package/dist/daemon/server.js.map +1 -1
- package/dist/data-migration.d.ts +27 -0
- package/dist/data-migration.d.ts.map +1 -0
- package/dist/data-migration.js +307 -0
- package/dist/data-migration.js.map +1 -0
- package/dist/editor-support/docblock-tag-catalog.d.ts.map +1 -1
- package/dist/editor-support/docblock-tag-catalog.js +6 -0
- package/dist/editor-support/docblock-tag-catalog.js.map +1 -1
- package/dist/loader.d.ts +10 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +97 -12
- package/dist/loader.js.map +1 -1
- package/dist/marketplace-manager.d.ts.map +1 -1
- package/dist/marketplace-manager.js +25 -5
- package/dist/marketplace-manager.js.map +1 -1
- package/dist/photon-cli-runner.d.ts.map +1 -1
- package/dist/photon-cli-runner.js +47 -21
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/photon-doc-extractor.d.ts +1 -0
- package/dist/photon-doc-extractor.d.ts.map +1 -1
- package/dist/photon-doc-extractor.js +6 -0
- package/dist/photon-doc-extractor.js.map +1 -1
- package/dist/readme-syncer.d.ts.map +1 -1
- package/dist/readme-syncer.js +6 -1
- package/dist/readme-syncer.js.map +1 -1
- package/dist/server.d.ts +40 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +143 -28
- package/dist/server.js.map +1 -1
- package/dist/shared/audit.js +4 -4
- package/dist/shared/audit.js.map +1 -1
- package/dist/tasks/store.d.ts.map +1 -1
- package/dist/tasks/store.js +6 -2
- package/dist/tasks/store.js.map +1 -1
- package/dist/version-notify.d.ts +27 -0
- package/dist/version-notify.d.ts.map +1 -0
- package/dist/version-notify.js +142 -0
- package/dist/version-notify.js.map +1 -0
- package/package.json +2 -2
- package/dist/auto-ui/bridge/openai-shim.d.ts +0 -20
- package/dist/auto-ui/bridge/openai-shim.d.ts.map +0 -1
- package/dist/auto-ui/bridge/openai-shim.js +0 -231
- package/dist/auto-ui/bridge/openai-shim.js.map +0 -1
- package/dist/auto-ui/bridge/photon-app.d.ts +0 -162
- package/dist/auto-ui/bridge/photon-app.d.ts.map +0 -1
- package/dist/auto-ui/bridge/photon-app.js +0 -460
- package/dist/auto-ui/bridge/photon-app.js.map +0 -1
- package/dist/auto-ui/daemon-tools.d.ts +0 -45
- package/dist/auto-ui/daemon-tools.d.ts.map +0 -1
- package/dist/auto-ui/daemon-tools.js +0 -581
- package/dist/auto-ui/daemon-tools.js.map +0 -1
- package/dist/auto-ui/design-system/index.d.ts +0 -21
- package/dist/auto-ui/design-system/index.d.ts.map +0 -1
- package/dist/auto-ui/design-system/index.js +0 -27
- package/dist/auto-ui/design-system/index.js.map +0 -1
- package/dist/auto-ui/design-system/transaction-ui.d.ts +0 -70
- package/dist/auto-ui/design-system/transaction-ui.d.ts.map +0 -1
- package/dist/auto-ui/design-system/transaction-ui.js +0 -982
- package/dist/auto-ui/design-system/transaction-ui.js.map +0 -1
- package/dist/auto-ui/playground-server.d.ts +0 -7
- package/dist/auto-ui/playground-server.d.ts.map +0 -1
- package/dist/auto-ui/playground-server.js +0 -840
- package/dist/auto-ui/playground-server.js.map +0 -1
- package/dist/auto-ui/rendering/components.d.ts +0 -29
- package/dist/auto-ui/rendering/components.d.ts.map +0 -1
- package/dist/auto-ui/rendering/components.js +0 -1341
- package/dist/auto-ui/rendering/components.js.map +0 -1
- package/dist/auto-ui/rendering/field-analyzer.d.ts +0 -104
- package/dist/auto-ui/rendering/field-analyzer.d.ts.map +0 -1
- package/dist/auto-ui/rendering/field-analyzer.js +0 -447
- package/dist/auto-ui/rendering/field-analyzer.js.map +0 -1
- package/dist/auto-ui/rendering/field-renderers.d.ts +0 -64
- package/dist/auto-ui/rendering/field-renderers.d.ts.map +0 -1
- package/dist/auto-ui/rendering/field-renderers.js +0 -317
- package/dist/auto-ui/rendering/field-renderers.js.map +0 -1
- package/dist/auto-ui/rendering/index.d.ts +0 -28
- package/dist/auto-ui/rendering/index.d.ts.map +0 -1
- package/dist/auto-ui/rendering/index.js +0 -60
- package/dist/auto-ui/rendering/index.js.map +0 -1
- package/dist/auto-ui/rendering/layout-selector.d.ts +0 -60
- package/dist/auto-ui/rendering/layout-selector.d.ts.map +0 -1
- package/dist/auto-ui/rendering/layout-selector.js +0 -476
- package/dist/auto-ui/rendering/layout-selector.js.map +0 -1
- package/dist/markdown-utils.d.ts +0 -8
- package/dist/markdown-utils.d.ts.map +0 -1
- package/dist/markdown-utils.js +0 -64
- package/dist/markdown-utils.js.map +0 -1
- package/dist/mcp-client.d.ts +0 -9
- package/dist/mcp-client.d.ts.map +0 -1
- package/dist/mcp-client.js +0 -11
- package/dist/mcp-client.js.map +0 -1
- package/dist/mcp-elicitation.d.ts +0 -32
- package/dist/mcp-elicitation.d.ts.map +0 -1
- package/dist/mcp-elicitation.js +0 -26
- package/dist/mcp-elicitation.js.map +0 -1
- package/dist/photons/builder-compass.photon.d.ts +0 -167
- package/dist/photons/builder-compass.photon.d.ts.map +0 -1
- package/dist/photons/builder-compass.photon.js +0 -816
- package/dist/photons/builder-compass.photon.js.map +0 -1
- package/dist/photons/builder-compass.photon.ts +0 -1129
- package/dist/photons/docs/ui/docs.html +0 -441
- package/dist/photons/docs.photon.d.ts +0 -237
- package/dist/photons/docs.photon.d.ts.map +0 -1
- package/dist/photons/docs.photon.js +0 -483
- package/dist/photons/docs.photon.js.map +0 -1
- package/dist/photons/docs.photon.ts +0 -536
- package/dist/photons/slides.photon.d.ts +0 -212
- package/dist/photons/slides.photon.d.ts.map +0 -1
- package/dist/photons/slides.photon.js +0 -355
- package/dist/photons/slides.photon.js.map +0 -1
- package/dist/photons/slides.photon.ts +0 -370
- package/dist/photons/spreadsheet/ui/spreadsheet.html +0 -779
- package/dist/photons/spreadsheet.photon.d.ts +0 -554
- package/dist/photons/spreadsheet.photon.d.ts.map +0 -1
- package/dist/photons/spreadsheet.photon.js +0 -1050
- package/dist/photons/spreadsheet.photon.js.map +0 -1
- package/dist/photons/spreadsheet.photon.ts +0 -1239
- package/dist/photons/ui/builder-compass.html +0 -1199
- package/dist/photons/ui/builder-compass.photon.html +0 -380
- package/dist/security-scanner.d.ts +0 -52
- package/dist/security-scanner.d.ts.map +0 -1
- package/dist/security-scanner.js +0 -181
- package/dist/security-scanner.js.map +0 -1
- package/dist/shared/performance.d.ts +0 -65
- package/dist/shared/performance.d.ts.map +0 -1
- package/dist/shared/performance.js +0 -136
- package/dist/shared/performance.js.map +0 -1
|
@@ -1,380 +0,0 @@
|
|
|
1
|
-
<style>
|
|
2
|
-
:root {
|
|
3
|
-
--canvas: #f4eddf;
|
|
4
|
-
--ink: #201d18;
|
|
5
|
-
--muted: #6c665d;
|
|
6
|
-
--olive: #38452f;
|
|
7
|
-
--sage: #6f8d62;
|
|
8
|
-
--amber: #ba7c33;
|
|
9
|
-
--rust: #9d5a42;
|
|
10
|
-
--card: rgba(255, 251, 244, 0.92);
|
|
11
|
-
--line: rgba(68, 53, 36, 0.12);
|
|
12
|
-
--shadow: 0 18px 48px rgba(54, 38, 17, 0.1);
|
|
13
|
-
--radius-xl: 28px;
|
|
14
|
-
--radius-lg: 20px;
|
|
15
|
-
--radius-md: 16px;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
body {
|
|
19
|
-
background:
|
|
20
|
-
radial-gradient(circle at top left, rgba(111, 141, 98, 0.14), transparent 24%),
|
|
21
|
-
radial-gradient(circle at top right, rgba(186, 124, 51, 0.12), transparent 20%),
|
|
22
|
-
linear-gradient(180deg, #f8f1e7 0%, var(--canvas) 44%, #ecdfcb 100%);
|
|
23
|
-
color: var(--ink);
|
|
24
|
-
font-family: 'Inter', system-ui, sans-serif;
|
|
25
|
-
padding: 24px;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.shell {
|
|
29
|
-
display: grid;
|
|
30
|
-
gap: 18px;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.hero,
|
|
34
|
-
.grid {
|
|
35
|
-
display: grid;
|
|
36
|
-
gap: 18px;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.hero {
|
|
40
|
-
grid-template-columns: minmax(0, 1.35fr) minmax(320px, 0.82fr);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.grid {
|
|
44
|
-
grid-template-columns: minmax(320px, 0.9fr) minmax(400px, 1.1fr) minmax(320px, 0.92fr);
|
|
45
|
-
align-items: start;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
.column {
|
|
49
|
-
display: grid;
|
|
50
|
-
gap: 18px;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.panel {
|
|
54
|
-
background: linear-gradient(180deg, rgba(255, 252, 247, 0.94), rgba(249, 241, 229, 0.96));
|
|
55
|
-
border: 1px solid var(--line);
|
|
56
|
-
border-radius: var(--radius-xl);
|
|
57
|
-
box-shadow: var(--shadow);
|
|
58
|
-
padding: 22px;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.hero-main {
|
|
62
|
-
padding: 28px;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.eyebrow,
|
|
66
|
-
.pill {
|
|
67
|
-
display: inline-flex;
|
|
68
|
-
align-items: center;
|
|
69
|
-
gap: 8px;
|
|
70
|
-
border-radius: 999px;
|
|
71
|
-
font:
|
|
72
|
-
500 12px/1 ui-monospace,
|
|
73
|
-
SFMono-Regular,
|
|
74
|
-
Menlo,
|
|
75
|
-
monospace;
|
|
76
|
-
letter-spacing: 0.06em;
|
|
77
|
-
text-transform: uppercase;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.eyebrow {
|
|
81
|
-
color: var(--olive);
|
|
82
|
-
padding: 7px 12px;
|
|
83
|
-
border: 1px solid rgba(56, 69, 47, 0.14);
|
|
84
|
-
background: rgba(56, 69, 47, 0.08);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.hero-main h1 {
|
|
88
|
-
margin-top: 14px;
|
|
89
|
-
font-size: clamp(2.1rem, 5vw, 4rem);
|
|
90
|
-
line-height: 0.96;
|
|
91
|
-
font-weight: 800;
|
|
92
|
-
max-width: 11ch;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.lede,
|
|
96
|
-
.copy {
|
|
97
|
-
color: var(--muted);
|
|
98
|
-
line-height: 1.6;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.lede {
|
|
102
|
-
margin-top: 16px;
|
|
103
|
-
max-width: 64ch;
|
|
104
|
-
font-size: 1rem;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.metrics {
|
|
108
|
-
margin-top: 24px;
|
|
109
|
-
display: grid;
|
|
110
|
-
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
111
|
-
gap: 12px;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.metric {
|
|
115
|
-
background: rgba(255, 255, 255, 0.58);
|
|
116
|
-
border: 1px solid rgba(68, 53, 36, 0.1);
|
|
117
|
-
border-radius: 18px;
|
|
118
|
-
padding: 16px;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.metric label {
|
|
122
|
-
display: block;
|
|
123
|
-
color: var(--muted);
|
|
124
|
-
font-size: 12px;
|
|
125
|
-
text-transform: uppercase;
|
|
126
|
-
letter-spacing: 0.08em;
|
|
127
|
-
margin-bottom: 8px;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
.metric [data-method] {
|
|
131
|
-
min-height: 0;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.stack {
|
|
135
|
-
display: grid;
|
|
136
|
-
gap: 12px;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.toolbar {
|
|
140
|
-
display: flex;
|
|
141
|
-
flex-wrap: wrap;
|
|
142
|
-
gap: 10px;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.toolbar button,
|
|
146
|
-
button[data-method] {
|
|
147
|
-
border-radius: 16px;
|
|
148
|
-
padding: 12px 16px;
|
|
149
|
-
font-weight: 600;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
.primary {
|
|
153
|
-
background: linear-gradient(135deg, #38452f, #526647);
|
|
154
|
-
color: #f7f3ec;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
.secondary {
|
|
158
|
-
background: rgba(255, 255, 255, 0.62);
|
|
159
|
-
color: var(--ink);
|
|
160
|
-
border: 1px solid rgba(68, 53, 36, 0.12);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
.callout {
|
|
164
|
-
padding: 16px;
|
|
165
|
-
border-radius: 18px;
|
|
166
|
-
background: rgba(111, 141, 98, 0.08);
|
|
167
|
-
border: 1px solid rgba(111, 141, 98, 0.14);
|
|
168
|
-
color: var(--muted);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
.warn {
|
|
172
|
-
background: rgba(157, 90, 66, 0.08);
|
|
173
|
-
border-color: rgba(157, 90, 66, 0.14);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.section-head {
|
|
177
|
-
display: flex;
|
|
178
|
-
justify-content: space-between;
|
|
179
|
-
gap: 12px;
|
|
180
|
-
align-items: flex-start;
|
|
181
|
-
margin-bottom: 14px;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
.section-head h2 {
|
|
185
|
-
margin: 0;
|
|
186
|
-
font-size: 1.1rem;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
.section-head p {
|
|
190
|
-
margin-top: 8px;
|
|
191
|
-
color: var(--muted);
|
|
192
|
-
line-height: 1.55;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
.pill {
|
|
196
|
-
color: var(--amber);
|
|
197
|
-
padding: 6px 10px;
|
|
198
|
-
background: rgba(186, 124, 51, 0.1);
|
|
199
|
-
border: 1px solid rgba(186, 124, 51, 0.14);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.embed > [data-method] {
|
|
203
|
-
min-height: 120px;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
.embed.compact > [data-method] {
|
|
207
|
-
min-height: 64px;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
.report {
|
|
211
|
-
border-radius: 18px;
|
|
212
|
-
background: rgba(255, 255, 255, 0.56);
|
|
213
|
-
border: 1px solid rgba(68, 53, 36, 0.1);
|
|
214
|
-
padding: 16px;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
.report [data-method] {
|
|
218
|
-
min-height: 180px;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
@media (max-width: 1180px) {
|
|
222
|
-
.hero,
|
|
223
|
-
.grid {
|
|
224
|
-
grid-template-columns: 1fr;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
</style>
|
|
228
|
-
|
|
229
|
-
<div class="shell">
|
|
230
|
-
<section class="hero">
|
|
231
|
-
<div class="panel hero-main">
|
|
232
|
-
<div class="eyebrow">Builder Compass / Photon</div>
|
|
233
|
-
<h1>Turn your builder profile into a money map.</h1>
|
|
234
|
-
<p class="lede">
|
|
235
|
-
Builder Compass stores your profile, classifies your AI-native builder archetype, and
|
|
236
|
-
researches how people like you are making money on the open web. TinyFish is used when you
|
|
237
|
-
explicitly rebuild, not every time you open the dashboard.
|
|
238
|
-
</p>
|
|
239
|
-
|
|
240
|
-
<div class="metrics">
|
|
241
|
-
<div class="metric">
|
|
242
|
-
<label>Fit overview</label>
|
|
243
|
-
<div data-method="fitOverview"></div>
|
|
244
|
-
</div>
|
|
245
|
-
<div class="metric">
|
|
246
|
-
<label>Money paths</label>
|
|
247
|
-
<div data-method="moneyPaths"></div>
|
|
248
|
-
</div>
|
|
249
|
-
<div class="metric">
|
|
250
|
-
<label>Builder report</label>
|
|
251
|
-
<div data-method="report"></div>
|
|
252
|
-
</div>
|
|
253
|
-
</div>
|
|
254
|
-
</div>
|
|
255
|
-
|
|
256
|
-
<aside class="panel stack">
|
|
257
|
-
<div>
|
|
258
|
-
<h2 style="margin: 0">How it works</h2>
|
|
259
|
-
<p class="copy" style="margin-top: 10px">
|
|
260
|
-
Save once, inspect anytime. When your profile changes, update the saved input and rebuild
|
|
261
|
-
the research deliberately.
|
|
262
|
-
</p>
|
|
263
|
-
</div>
|
|
264
|
-
<div class="callout">
|
|
265
|
-
Bring your own TinyFish API key if you want live market research and open-web evidence.
|
|
266
|
-
Without it, Builder Compass still gives a heuristic builder model.
|
|
267
|
-
</div>
|
|
268
|
-
<div class="toolbar">
|
|
269
|
-
<button class="primary" data-method="runCompass" data-target="#report-panel">
|
|
270
|
-
Run full compass
|
|
271
|
-
</button>
|
|
272
|
-
<button class="secondary" data-method="analyzeIdentity" data-target="#identity-panel">
|
|
273
|
-
Refresh identity
|
|
274
|
-
</button>
|
|
275
|
-
<button class="secondary" data-method="researchMarket" data-target="#market-panel">
|
|
276
|
-
Refresh market
|
|
277
|
-
</button>
|
|
278
|
-
</div>
|
|
279
|
-
</aside>
|
|
280
|
-
</section>
|
|
281
|
-
|
|
282
|
-
<section class="grid">
|
|
283
|
-
<div class="column">
|
|
284
|
-
<div class="panel">
|
|
285
|
-
<div class="section-head">
|
|
286
|
-
<div>
|
|
287
|
-
<h2>Profile intake</h2>
|
|
288
|
-
<p>
|
|
289
|
-
Minimal input. Persistent state. This form updates the stored profile and clears stale
|
|
290
|
-
research when your self-model changes.
|
|
291
|
-
</p>
|
|
292
|
-
</div>
|
|
293
|
-
<div class="pill">Persistent</div>
|
|
294
|
-
</div>
|
|
295
|
-
<div class="embed">
|
|
296
|
-
<div data-method="saveProfile"></div>
|
|
297
|
-
</div>
|
|
298
|
-
</div>
|
|
299
|
-
|
|
300
|
-
<div class="panel">
|
|
301
|
-
<div class="section-head">
|
|
302
|
-
<div>
|
|
303
|
-
<h2>Narrative report</h2>
|
|
304
|
-
<p>The reusable guide you can open later without paying the TinyFish cost again.</p>
|
|
305
|
-
</div>
|
|
306
|
-
</div>
|
|
307
|
-
<div class="report" id="report-panel">
|
|
308
|
-
<div data-method="report"></div>
|
|
309
|
-
</div>
|
|
310
|
-
</div>
|
|
311
|
-
</div>
|
|
312
|
-
|
|
313
|
-
<div class="column">
|
|
314
|
-
<div class="panel" id="identity-panel">
|
|
315
|
-
<div class="section-head">
|
|
316
|
-
<div>
|
|
317
|
-
<h2>Identity analysis</h2>
|
|
318
|
-
<p>
|
|
319
|
-
Builder archetype, strengths, work fit, and risks. Cached until you intentionally
|
|
320
|
-
rebuild.
|
|
321
|
-
</p>
|
|
322
|
-
</div>
|
|
323
|
-
<div class="pill">Profile model</div>
|
|
324
|
-
</div>
|
|
325
|
-
<div class="embed compact">
|
|
326
|
-
<div data-method="strengthMatrix"></div>
|
|
327
|
-
</div>
|
|
328
|
-
</div>
|
|
329
|
-
|
|
330
|
-
<div class="panel">
|
|
331
|
-
<div class="section-head">
|
|
332
|
-
<div>
|
|
333
|
-
<h2>Fit dials</h2>
|
|
334
|
-
<p>
|
|
335
|
-
Quick read on AI-native leverage, founder energy, execution reliability, and risk
|
|
336
|
-
load.
|
|
337
|
-
</p>
|
|
338
|
-
</div>
|
|
339
|
-
</div>
|
|
340
|
-
<div class="embed compact">
|
|
341
|
-
<div data-method="fitOverview"></div>
|
|
342
|
-
</div>
|
|
343
|
-
</div>
|
|
344
|
-
</div>
|
|
345
|
-
|
|
346
|
-
<div class="column">
|
|
347
|
-
<div class="panel" id="market-panel">
|
|
348
|
-
<div class="section-head">
|
|
349
|
-
<div>
|
|
350
|
-
<h2>Money paths</h2>
|
|
351
|
-
<p>Research-backed routes ranked by fit, speed to money, demand, and sustainability.</p>
|
|
352
|
-
</div>
|
|
353
|
-
<div class="pill">Market map</div>
|
|
354
|
-
</div>
|
|
355
|
-
<div class="embed compact">
|
|
356
|
-
<div data-method="moneyPaths"></div>
|
|
357
|
-
</div>
|
|
358
|
-
</div>
|
|
359
|
-
|
|
360
|
-
<div class="panel">
|
|
361
|
-
<div class="section-head">
|
|
362
|
-
<div>
|
|
363
|
-
<h2>Usage model</h2>
|
|
364
|
-
<p>Exactly the behavior we want for repeat use.</p>
|
|
365
|
-
</div>
|
|
366
|
-
</div>
|
|
367
|
-
<div class="callout">
|
|
368
|
-
Open the same profile any time to get the stored analysis back immediately.
|
|
369
|
-
</div>
|
|
370
|
-
<div class="callout" style="margin-top: 12px">
|
|
371
|
-
Update the profile only when youâve actually changed, then rebuild identity and market
|
|
372
|
-
research.
|
|
373
|
-
</div>
|
|
374
|
-
<div class="callout warn" style="margin-top: 12px">
|
|
375
|
-
TinyFish is a rebuild engine here, not a page-refresh tax.
|
|
376
|
-
</div>
|
|
377
|
-
</div>
|
|
378
|
-
</div>
|
|
379
|
-
</section>
|
|
380
|
-
</div>
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Security Scanner - Check dependencies for known vulnerabilities
|
|
3
|
-
*/
|
|
4
|
-
export interface VulnerabilityInfo {
|
|
5
|
-
severity: 'info' | 'low' | 'moderate' | 'high' | 'critical';
|
|
6
|
-
title: string;
|
|
7
|
-
url?: string;
|
|
8
|
-
via?: string[];
|
|
9
|
-
range?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface DependencyAuditResult {
|
|
12
|
-
dependency: string;
|
|
13
|
-
version: string;
|
|
14
|
-
vulnerabilities: VulnerabilityInfo[];
|
|
15
|
-
hasVulnerabilities: boolean;
|
|
16
|
-
}
|
|
17
|
-
export interface MCPAuditResult {
|
|
18
|
-
mcpName: string;
|
|
19
|
-
dependencies: DependencyAuditResult[];
|
|
20
|
-
totalVulnerabilities: number;
|
|
21
|
-
criticalCount: number;
|
|
22
|
-
highCount: number;
|
|
23
|
-
moderateCount: number;
|
|
24
|
-
lowCount: number;
|
|
25
|
-
}
|
|
26
|
-
export declare class SecurityScanner {
|
|
27
|
-
/**
|
|
28
|
-
* Audit dependencies for a specific MCP
|
|
29
|
-
*/
|
|
30
|
-
auditMCP(mcpName: string, dependencies: string[]): Promise<MCPAuditResult>;
|
|
31
|
-
/**
|
|
32
|
-
* Audit a single dependency
|
|
33
|
-
*/
|
|
34
|
-
private auditDependency;
|
|
35
|
-
/**
|
|
36
|
-
* Extract relevant vulnerabilities from npm audit output
|
|
37
|
-
*/
|
|
38
|
-
private extractVulnerabilities;
|
|
39
|
-
/**
|
|
40
|
-
* Quick check if dependency has known vulnerabilities
|
|
41
|
-
*/
|
|
42
|
-
hasVulnerabilities(dependency: string): Promise<boolean>;
|
|
43
|
-
/**
|
|
44
|
-
* Get severity color for terminal output
|
|
45
|
-
*/
|
|
46
|
-
getSeveritySymbol(severity: string): string;
|
|
47
|
-
/**
|
|
48
|
-
* Format audit result for display
|
|
49
|
-
*/
|
|
50
|
-
formatAuditResult(result: MCPAuditResult): string;
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=security-scanner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security-scanner.d.ts","sourceRoot":"","sources":["../src/security-scanner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwBH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IA4ChF;;OAEG;YACW,eAAe;IA0C7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB9D;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAe3C;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;CAsBlD"}
|
package/dist/security-scanner.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Security Scanner - Check dependencies for known vulnerabilities
|
|
3
|
-
*/
|
|
4
|
-
import { exec, execFile } from 'child_process';
|
|
5
|
-
import { promisify } from 'util';
|
|
6
|
-
import * as path from 'path';
|
|
7
|
-
import * as os from 'os';
|
|
8
|
-
import * as fs from 'fs/promises';
|
|
9
|
-
import { validateNpmPackageName } from './shared/security.js';
|
|
10
|
-
const execAsync = promisify(exec);
|
|
11
|
-
const execFileAsync = promisify(execFile);
|
|
12
|
-
export class SecurityScanner {
|
|
13
|
-
/**
|
|
14
|
-
* Audit dependencies for a specific MCP
|
|
15
|
-
*/
|
|
16
|
-
async auditMCP(mcpName, dependencies) {
|
|
17
|
-
const results = [];
|
|
18
|
-
let totalVulnerabilities = 0;
|
|
19
|
-
let criticalCount = 0;
|
|
20
|
-
let highCount = 0;
|
|
21
|
-
let moderateCount = 0;
|
|
22
|
-
let lowCount = 0;
|
|
23
|
-
for (const dep of dependencies) {
|
|
24
|
-
const result = await this.auditDependency(mcpName, dep);
|
|
25
|
-
results.push(result);
|
|
26
|
-
if (result.hasVulnerabilities) {
|
|
27
|
-
totalVulnerabilities += result.vulnerabilities.length;
|
|
28
|
-
result.vulnerabilities.forEach((vuln) => {
|
|
29
|
-
switch (vuln.severity) {
|
|
30
|
-
case 'critical':
|
|
31
|
-
criticalCount++;
|
|
32
|
-
break;
|
|
33
|
-
case 'high':
|
|
34
|
-
highCount++;
|
|
35
|
-
break;
|
|
36
|
-
case 'moderate':
|
|
37
|
-
moderateCount++;
|
|
38
|
-
break;
|
|
39
|
-
case 'low':
|
|
40
|
-
lowCount++;
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return {
|
|
47
|
-
mcpName,
|
|
48
|
-
dependencies: results,
|
|
49
|
-
totalVulnerabilities,
|
|
50
|
-
criticalCount,
|
|
51
|
-
highCount,
|
|
52
|
-
moderateCount,
|
|
53
|
-
lowCount,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Audit a single dependency
|
|
58
|
-
*/
|
|
59
|
-
async auditDependency(mcpName, dependency) {
|
|
60
|
-
// Parse dependency string (name@version)
|
|
61
|
-
const parts = dependency.split('@');
|
|
62
|
-
const version = parts.pop() || 'latest';
|
|
63
|
-
const name = parts.join('@'); // Handle scoped packages like @org/package
|
|
64
|
-
const depPath = path.join(os.homedir(), '.cache', 'photon-mcp', 'dependencies', mcpName);
|
|
65
|
-
try {
|
|
66
|
-
// Check if dependency directory exists
|
|
67
|
-
await fs.access(depPath);
|
|
68
|
-
// Run npm audit in the dependency directory
|
|
69
|
-
const { stdout } = await execAsync('npm audit --json', {
|
|
70
|
-
cwd: depPath,
|
|
71
|
-
timeout: 30000,
|
|
72
|
-
});
|
|
73
|
-
const auditData = JSON.parse(stdout);
|
|
74
|
-
const vulnerabilities = this.extractVulnerabilities(auditData, name);
|
|
75
|
-
return {
|
|
76
|
-
dependency: name,
|
|
77
|
-
version,
|
|
78
|
-
vulnerabilities,
|
|
79
|
-
hasVulnerabilities: vulnerabilities.length > 0,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
// If npm audit fails or directory doesn't exist, assume no vulnerabilities
|
|
84
|
-
// (dependency might not be installed yet)
|
|
85
|
-
return {
|
|
86
|
-
dependency: name,
|
|
87
|
-
version,
|
|
88
|
-
vulnerabilities: [],
|
|
89
|
-
hasVulnerabilities: false,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Extract relevant vulnerabilities from npm audit output
|
|
95
|
-
*/
|
|
96
|
-
extractVulnerabilities(auditData, packageName) {
|
|
97
|
-
const vulnerabilities = [];
|
|
98
|
-
if (!auditData.vulnerabilities) {
|
|
99
|
-
return vulnerabilities;
|
|
100
|
-
}
|
|
101
|
-
// npm audit v7+ format
|
|
102
|
-
for (const [vulnPackage, vulnData] of Object.entries(auditData.vulnerabilities)) {
|
|
103
|
-
// Check if this vulnerability affects our target package
|
|
104
|
-
if (vulnPackage === packageName || vulnData.via?.includes(packageName)) {
|
|
105
|
-
vulnerabilities.push({
|
|
106
|
-
severity: vulnData.severity || 'moderate',
|
|
107
|
-
title: vulnData.name || vulnPackage,
|
|
108
|
-
url: vulnData.url,
|
|
109
|
-
via: vulnData.via?.filter((v) => typeof v === 'string'),
|
|
110
|
-
range: vulnData.range,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return vulnerabilities;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Quick check if dependency has known vulnerabilities
|
|
118
|
-
*/
|
|
119
|
-
async hasVulnerabilities(dependency) {
|
|
120
|
-
try {
|
|
121
|
-
// Use npm view to check if package exists
|
|
122
|
-
const parts = dependency.split('@');
|
|
123
|
-
const version = parts.pop() || 'latest';
|
|
124
|
-
const name = parts.join('@');
|
|
125
|
-
// Security: validate package name before passing to shell
|
|
126
|
-
if (!validateNpmPackageName(`${name}@${version}`)) {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
const { stdout } = await execFileAsync('npm', ['view', `${name}@${version}`, 'version'], {
|
|
130
|
-
timeout: 10000,
|
|
131
|
-
});
|
|
132
|
-
// If we get here, package exists. Now check for advisories
|
|
133
|
-
// Note: npm doesn't provide a direct API for this without installing,
|
|
134
|
-
// but we can check the npm registry API
|
|
135
|
-
return false; // Default to false for now
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
return false; // package doesn't exist or registry unreachable
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Get severity color for terminal output
|
|
143
|
-
*/
|
|
144
|
-
getSeveritySymbol(severity) {
|
|
145
|
-
switch (severity) {
|
|
146
|
-
case 'critical':
|
|
147
|
-
return 'đ´';
|
|
148
|
-
case 'high':
|
|
149
|
-
return 'đ ';
|
|
150
|
-
case 'moderate':
|
|
151
|
-
return 'đĄ';
|
|
152
|
-
case 'low':
|
|
153
|
-
return 'đĩ';
|
|
154
|
-
default:
|
|
155
|
-
return 'âšī¸';
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Format audit result for display
|
|
160
|
-
*/
|
|
161
|
-
formatAuditResult(result) {
|
|
162
|
-
if (result.totalVulnerabilities === 0) {
|
|
163
|
-
return `â
${result.mcpName}: No vulnerabilities found`;
|
|
164
|
-
}
|
|
165
|
-
let output = `â ī¸ ${result.mcpName}: ${result.totalVulnerabilities} vulnerabilities found\n`;
|
|
166
|
-
if (result.criticalCount > 0) {
|
|
167
|
-
output += ` đ´ Critical: ${result.criticalCount}\n`;
|
|
168
|
-
}
|
|
169
|
-
if (result.highCount > 0) {
|
|
170
|
-
output += ` đ High: ${result.highCount}\n`;
|
|
171
|
-
}
|
|
172
|
-
if (result.moderateCount > 0) {
|
|
173
|
-
output += ` đĄ Moderate: ${result.moderateCount}\n`;
|
|
174
|
-
}
|
|
175
|
-
if (result.lowCount > 0) {
|
|
176
|
-
output += ` đĩ Low: ${result.lowCount}\n`;
|
|
177
|
-
}
|
|
178
|
-
return output;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
//# sourceMappingURL=security-scanner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security-scanner.js","sourceRoot":"","sources":["../src/security-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Performance monitoring utilities
|
|
3
|
-
* Provides timing, metrics collection, and performance insights
|
|
4
|
-
*/
|
|
5
|
-
import { Logger } from './logger.js';
|
|
6
|
-
export interface TimingMetric {
|
|
7
|
-
name: string;
|
|
8
|
-
startTime: number;
|
|
9
|
-
duration?: number;
|
|
10
|
-
metadata?: Record<string, unknown>;
|
|
11
|
-
}
|
|
12
|
-
export declare class PerformanceMonitor {
|
|
13
|
-
private timings;
|
|
14
|
-
private logger?;
|
|
15
|
-
constructor(logger?: Logger);
|
|
16
|
-
/**
|
|
17
|
-
* Start timing an operation
|
|
18
|
-
*/
|
|
19
|
-
start(name: string, metadata?: Record<string, unknown>): void;
|
|
20
|
-
/**
|
|
21
|
-
* End timing an operation and return duration
|
|
22
|
-
*/
|
|
23
|
-
end(name: string): number | undefined;
|
|
24
|
-
/**
|
|
25
|
-
* Measure a synchronous function
|
|
26
|
-
*/
|
|
27
|
-
measure<T>(name: string, fn: () => T, metadata?: Record<string, unknown>): T;
|
|
28
|
-
/**
|
|
29
|
-
* Measure an async function
|
|
30
|
-
*/
|
|
31
|
-
measureAsync<T>(name: string, fn: () => Promise<T>, metadata?: Record<string, unknown>): Promise<T>;
|
|
32
|
-
/**
|
|
33
|
-
* Get all timings
|
|
34
|
-
*/
|
|
35
|
-
getTimings(): TimingMetric[];
|
|
36
|
-
/**
|
|
37
|
-
* Get summary statistics
|
|
38
|
-
*/
|
|
39
|
-
getSummary(): {
|
|
40
|
-
total: number;
|
|
41
|
-
count: number;
|
|
42
|
-
average: number;
|
|
43
|
-
slowest: TimingMetric | undefined;
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Clear all timings
|
|
47
|
-
*/
|
|
48
|
-
clear(): void;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Simple memoization decorator for functions
|
|
52
|
-
*/
|
|
53
|
-
export declare function memoize<T extends (...args: never[]) => unknown>(fn: T, options?: {
|
|
54
|
-
ttl?: number;
|
|
55
|
-
maxSize?: number;
|
|
56
|
-
}): T;
|
|
57
|
-
/**
|
|
58
|
-
* Debounce a function
|
|
59
|
-
*/
|
|
60
|
-
export declare function debounce<T extends (...args: unknown[]) => unknown>(fn: T, delayMs: number): (...args: Parameters<T>) => void;
|
|
61
|
-
/**
|
|
62
|
-
* Throttle a function
|
|
63
|
-
*/
|
|
64
|
-
export declare function throttle<T extends (...args: unknown[]) => unknown>(fn: T, delayMs: number): (...args: Parameters<T>) => void;
|
|
65
|
-
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/shared/performance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM;IAI3B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQ7D;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAerC;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC;IAU5E;;OAEG;IACG,YAAY,CAAC,CAAC,EAClB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC;IAUb;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;OAEG;IACH,UAAU,IAAI;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;KACnC;IAaD;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,EAC7D,EAAE,EAAE,CAAC,EACL,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,CAAC,CAyBH;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAWlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAUlC"}
|